def horiz_string(*args, **kwargs):
    import unicodedata
    precision = kwargs.get('precision', None)
    sep = kwargs.get('sep', '')
    if len(args) == 1 and not isinstance(args[0], six.string_types):
        val_list = args[0]
    else:
        val_list = args
    val_list = [unicodedata.normalize('NFC', ensure_unicode(val))
                for val in val_list]
    all_lines = []
    hpos = 0
    for sx in range(len(val_list)):
        val = val_list[sx]
        str_ = None
        if precision is not None:
            if util_type.HAVE_NUMPY:
                try:
                    if isinstance(val, np.ndarray):
                        str_ = np.array_str(val, precision=precision,
                                            suppress_small=True)
                except ImportError:
                    pass
        if str_ is None:
            str_ = six.text_type(val_list[sx])
        lines = str_.split('\n')
        line_diff = len(lines) - len(all_lines)
        if line_diff > 0:
            all_lines += [' ' * hpos] * line_diff
        for lx, line in enumerate(lines):
            all_lines[lx] += line
            hpos = max(hpos, len(all_lines[lx]))
        for lx in range(len(all_lines)):
            hpos_diff = hpos - len(all_lines[lx])
            all_lines[lx] += ' ' * hpos_diff + sep
    all_lines = [line.rstrip(' ') for line in all_lines]
    ret = '\n'.join(all_lines)
    return ret