:param path_or_str_or_segments:
    :return:
    :rtype: cifparser.path.Path

def make_path(*path_or_str_or_segments):
    """
    :param path_or_str_or_segments:
    :return:
    :rtype: cifparser.path.Path
    """
    if len(path_or_str_or_segments) == 0:
        return ROOT_PATH
    elif len(path_or_str_or_segments) == 1:
        single_item = path_or_str_or_segments[0]
        if isinstance(single_item, Path):
            return single_item
        if isinstance(single_item, str):
            try:
                return path_parser.parseString(single_item, True).asList()[0]
            except:
                raise ValueError()
        raise TypeError()
    else:
        segments = path_or_str_or_segments
        return sum(map(lambda x: make_path(x), segments), ROOT_PATH)