def equals(self, other: OperatorBase) -> bool: self_reduced, other_reduced = self.reduce(), other.reduce() if not isinstance(other_reduced, PauliSumOp): return False if isinstance(self_reduced.coeff, ParameterExpression) or isinstance( other_reduced.coeff, ParameterExpression): return (self_reduced.coeff == other_reduced.coeff and self_reduced.primitive == other_reduced.primitive) return (len(self_reduced) == len(other_reduced) and self_reduced.primitive == other_reduced.primitive)
def equals(self, other: OperatorBase) -> bool: """Check if other is equal to self. Note: This is not a mathematical check for equality. If ``self`` and ``other`` implement the same operation but differ in the representation (e.g. different type of summands) ``equals`` will evaluate to ``False``. Args: other: The other operator to check for equality. Returns: True, if other and self are equal, otherwise False. Examples: >>> from qiskit.opflow import X, Z >>> 2 * X == X + X True >>> X + Z == Z + X True """ self_reduced, other_reduced = self.reduce(), other.reduce() if not isinstance(other_reduced, type(self_reduced)): return False # check if reduced op is still a SummedOp if not isinstance(self_reduced, SummedOp): return self_reduced == other_reduced self_reduced = cast(SummedOp, self_reduced) other_reduced = cast(SummedOp, other_reduced) if len(self_reduced.oplist) != len(other_reduced.oplist): return False # absorb coeffs into the operators if self_reduced.coeff != 1: self_reduced = SummedOp( [op * self_reduced.coeff for op in self_reduced.oplist]) if other_reduced.coeff != 1: other_reduced = SummedOp( [op * other_reduced.coeff for op in other_reduced.oplist]) # compare independent of order return all(any(i == j for j in other_reduced) for i in self_reduced)
def equals(self, other: OperatorBase) -> bool: self_reduced, other_reduced = self.reduce(), other.reduce() if isinstance(other_reduced, PauliOp): other_reduced = PauliSumOp( SparsePauliOp(other_reduced.primitive, coeffs=[other_reduced.coeff])) if not isinstance(other_reduced, PauliSumOp): return False if isinstance(self_reduced.coeff, ParameterExpression) or isinstance( other_reduced.coeff, ParameterExpression): return self_reduced.coeff == other_reduced.coeff and self_reduced.primitive.equiv( other_reduced.primitive) return len(self_reduced) == len( other_reduced) and self_reduced.primitive.equiv( other_reduced.primitive)