742 same_paths = {} |
742 same_paths = {} |
743 uncomputed_index = range(len(paths)) |
743 uncomputed_index = range(len(paths)) |
744 factorized_paths = [] |
744 factorized_paths = [] |
745 for num, path in enumerate(paths): |
745 for num, path in enumerate(paths): |
746 if type(path) == ListType: |
746 if type(path) == ListType: |
747 for i in xrange(1, len(path)): |
747 if len(path) > 1: |
748 str_path = str(path[i:]) |
748 str_path = str(path[-1:]) |
749 same_paths.setdefault(str_path, []) |
749 same_paths.setdefault(str_path, []) |
750 same_paths[str_path].append((path[:i], num)) |
750 same_paths[str_path].append((path[:-1], num)) |
751 else: |
751 else: |
752 factorized_paths.append(path) |
752 factorized_paths.append(path) |
753 uncomputed_index.remove(num) |
753 uncomputed_index.remove(num) |
754 for same_path, elements in same_paths.items(): |
754 for same_path, elements in same_paths.items(): |
755 if len(elements) > 1: |
755 if len(elements) > 1: |
756 factorized_paths.append([tuple([path for path, num in elements])] + eval(same_path)) |
756 elements_paths = self.FactorizePaths([path for path, num in elements]) |
|
757 if len(elements_paths) > 1: |
|
758 factorized_paths.append([tuple(elements_paths)] + eval(same_path)) |
|
759 else: |
|
760 factorized_paths.append(elements_paths + eval(same_path)) |
757 for path, num in elements: |
761 for path, num in elements: |
758 uncomputed_index.remove(num) |
762 uncomputed_index.remove(num) |
759 for num in uncomputed_index: |
763 for num in uncomputed_index: |
760 factorized_paths.append(paths[num]) |
764 factorized_paths.append(paths[num]) |
761 factorized_paths.sort() |
765 factorized_paths.sort() |