def flatten_values()

in geneve/kql/optimizer.py [0:0]


    def flatten_values(self, tree, dual_cls):  # type: (List, type) -> List
        cls = type(tree)
        flattened = []
        not_term = None

        for term in self.flatten(tree).items:
            if isinstance(term, NotValue) and isinstance(term.value, Value):
                # create a copy to leave the source tree unaltered
                term = NotValue(term.value)
                if not_term is None:
                    not_term = term
                else:
                    not_term.value = dual_cls([not_term.value, term.value])
                    continue

            flattened.append(term)

        if not_term is not None:
            not_term.value = self.flat_optimize(not_term.value)

        flattened = [self.flat_optimize(t) for t in flattened]
        flattened.sort(key=functools.cmp_to_key(self.sort_key))
        return cls(flattened) if len(flattened) > 1 else flattened[0]