groups_have_uniform_coeffs

groups_have_uniform_coeffs(op, *, atol=1e-08, abs=True)

Returns, for each group, whether all of its coefficients are numerically equal.

With abs (the default), the coefficient magnitudes are compared, which is the assumption that group_coeff_means() makes when it averages abs(coeff). Without it, the coefficients must match exactly. Note that a Hermitian group may legitimately fail the stricter form, since a conjugate pair with complex coefficients has equal magnitudes but unequal coefficients. If the operator tracks no groups, this returns None.

An empty or single-term group is trivially uniform.

Note

This is not a weaker form of groups_are_hermitian(): neither implies the other. Uniform coefficients do not make a group Hermitian, and a Hermitian group can mix magnitudes.

>>> from qiskit_fermions.operators import FermionOperator
>>> from qiskit_fermions.operators.terms.grouping import groups_have_uniform_coeffs
>>> op = FermionOperator.from_dict(
...     {
...         ((True, 0), (False, 1)): 1.0j,
...         ((True, 1), (False, 0)): -1.0j,
...     }
... )
>>> op.groups = [0, 0]
>>> groups_have_uniform_coeffs(op)  # equal magnitudes
[True]
>>> groups_have_uniform_coeffs(op, abs=False)  # but not equal coefficients
[False]
Parameters:
  • op – the operator whose groups to check.

  • atol – The numerical accuracy upto which coefficients are considered equal. This value defaults to 1e-8.

  • abs – Whether to compare coefficient magnitudes rather than the coefficients themselves. This value defaults to True.

Returns:

One flag per group index, or None if the operator tracks no groups.

Raises:

TypeError – if op is not a supported operator type (see OperatorTrait).