def _channel_approx_eq()

in tensorflow_quantum/python/util.py [0:0]


def _channel_approx_eq(op_true, op_deser, atol=1e-5):
    if isinstance(op_true, cirq.DepolarizingChannel):
        if isinstance(op_deser, cirq.DepolarizingChannel):
            return abs(op_true.p - op_deser.p) < atol

    if isinstance(op_true, cirq.AsymmetricDepolarizingChannel):
        if isinstance(op_deser, cirq.AsymmetricDepolarizingChannel):
            return abs(op_true.p_x - op_deser.p_x) < atol and \
                   abs(op_true.p_y - op_deser.p_y) < atol and \
                   abs(op_true.p_z - op_deser.p_z) < atol

    if isinstance(op_true, cirq.GeneralizedAmplitudeDampingChannel):
        if isinstance(op_deser, cirq.GeneralizedAmplitudeDampingChannel):
            return abs(op_true.p - op_deser.p) < atol and \
                   abs(op_true.gamma - op_deser.gamma) < atol

    if isinstance(op_true, cirq.AmplitudeDampingChannel):
        if isinstance(op_deser, cirq.AmplitudeDampingChannel):
            return abs(op_true.gamma - op_deser.gamma) < atol

    if isinstance(op_true, cirq.ResetChannel):
        if isinstance(op_deser, cirq.ResetChannel):
            return True

    if isinstance(op_true, cirq.PhaseDampingChannel):
        if isinstance(op_deser, cirq.PhaseDampingChannel):
            return abs(op_true.gamma - op_deser.gamma) < atol

    if isinstance(op_true, cirq.PhaseFlipChannel):
        if isinstance(op_deser, cirq.PhaseFlipChannel):
            return abs(op_true.p - op_deser.p) < atol

    if isinstance(op_true, cirq.BitFlipChannel):
        if isinstance(op_deser, cirq.BitFlipChannel):
            return abs(op_true.p - op_deser.p) < atol

    return False