def find(self, tree): # We keep coefficients and spatial derivatives in separate lists # because we need separate criteria to uniqify the lists. self._coefficients = [] self._spatialDerivatives = [] self.visit(tree) # Coefficients define __eq__ and __hash__ so the straight uniqify works. # For spatial derivatives, we need to compare the coefficients. coefficients = uniqify(self._coefficients) spatialDerivatives = uniqify(self._spatialDerivatives, lambda x: x.operands()[0]) return coefficients, spatialDerivatives