Exemplo n.º 1
0
def test_periodic_value_approx_eq_normalized():
    assert cirq.approx_eq(cirq.PeriodicValue(1.0, 3.0),
                          cirq.PeriodicValue(4.1, 3.0),
                          atol=0.2)
    assert cirq.approx_eq(cirq.PeriodicValue(1.0, 3.0),
                          cirq.PeriodicValue(-2.1, 3.0),
                          atol=0.2)
Exemplo n.º 2
0
def _canonicalize_weight(w):
    if w == 0:
        return (0, 0)
    if cirq.is_parameterized(w):
        return (cirq.PeriodicValue(abs(w), 2 * sympy.pi), sympy.arg(w))
    period = 2 * np.pi
    return (np.round((w.real % period) if (w == np.real(w)) else
                     (abs(w) % period) * w / abs(w), 8), 0)
Exemplo n.º 3
0
def test_periodic_value_approx_eq_boundary():
    assert cirq.approx_eq(
        cirq.PeriodicValue(0.0, 2.0),
        cirq.PeriodicValue(1.9, 2.0),
        atol=0.2
    )
    assert cirq.approx_eq(
        cirq.PeriodicValue(0.1, 2.0),
        cirq.PeriodicValue(1.9, 2.0),
        atol=0.3
    )
    assert cirq.approx_eq(
        cirq.PeriodicValue(1.9, 2.0),
        cirq.PeriodicValue(0.1, 2.0),
        atol=0.3
    )
    assert not cirq.approx_eq(
        cirq.PeriodicValue(0.1, 2.0),
        cirq.PeriodicValue(1.9, 2.0),
        atol=0.1
    )
    assert cirq.approx_eq(
        cirq.PeriodicValue(0, 1.0),
        cirq.PeriodicValue(0.5, 1.0),
        atol=0.6
    )
    assert not cirq.approx_eq(
        cirq.PeriodicValue(0, 1.0),
        cirq.PeriodicValue(0.5, 1.0),
        atol=0.1
    )
    assert cirq.approx_eq(
        cirq.PeriodicValue(0.4, 1.0),
        cirq.PeriodicValue(0.6, 1.0),
        atol=0.3
    )
Exemplo n.º 4
0
def test_periodic_value_approx_eq_basic():
    assert cirq.approx_eq(
        cirq.PeriodicValue(1.0, 2.0),
        cirq.PeriodicValue(1.0, 2.0),
        atol=0.1
    )
    assert cirq.approx_eq(
        cirq.PeriodicValue(1.0, 2.0),
        cirq.PeriodicValue(1.2, 2.0),
        atol=0.3
    )
    assert not cirq.approx_eq(
        cirq.PeriodicValue(1.0, 2.0),
        cirq.PeriodicValue(1.2, 2.0),
        atol=0.1
    )
    assert not cirq.approx_eq(
        cirq.PeriodicValue(1.0, 2.0),
        cirq.PeriodicValue(1.0, 2.2),
        atol=0.3
    )
    assert not cirq.approx_eq(
        cirq.PeriodicValue(1.0, 2.0),
        cirq.PeriodicValue(1.0, 2.2),
        atol=0.1
    )
    assert not cirq.approx_eq(
        cirq.PeriodicValue(1.0, 2.0),
        cirq.PeriodicValue(1.2, 2.2),
        atol=0.3
    )
    assert not cirq.approx_eq(
        cirq.PeriodicValue(1.0, 2.0),
        cirq.PeriodicValue(1.2, 2.2),
        atol=0.1
    )
Exemplo n.º 5
0
def test_periodic_value_equality():
    eq = cirq.testing.EqualsTester()
    eq.add_equality_group(
        cirq.PeriodicValue(1, 2),
        cirq.PeriodicValue(1, 2),
        cirq.PeriodicValue(3, 2),
        cirq.PeriodicValue(3, 2),
        cirq.PeriodicValue(5, 2),
        cirq.PeriodicValue(-1, 2)
    )
    eq.add_equality_group(
        cirq.PeriodicValue(1.5, 2.0),
        cirq.PeriodicValue(1.5, 2.0),
    )
    eq.add_equality_group(cirq.PeriodicValue(0, 2))
    eq.add_equality_group(cirq.PeriodicValue(1, 3))
    eq.add_equality_group(cirq.PeriodicValue(2, 4))
Exemplo n.º 6
0
def test_periodic_value_is_parameterized():
    assert not cirq.is_parameterized(cirq.PeriodicValue(1.0, 3.0))
    assert cirq.is_parameterized(cirq.PeriodicValue(0.0, sympy.Symbol('p')))
    assert cirq.is_parameterized(cirq.PeriodicValue(sympy.Symbol('v'), 3.0))
    assert cirq.is_parameterized(
            cirq.PeriodicValue(sympy.Symbol('v'), sympy.Symbol('p')))
Exemplo n.º 7
0
def test_periodic_value_types_mismatch():
    assert not cirq.approx_eq(cirq.PeriodicValue(0.0, 2.0), 0.0, atol=0.2)
    assert not cirq.approx_eq(0.0, cirq.PeriodicValue(0.0, 2.0), atol=0.2)
Exemplo n.º 8
0
    assert cirq.approx_eq(
        cirq.PeriodicValue(0.4, 1.0),
        cirq.PeriodicValue(0.6, 1.0),
        atol=0.3
    )


def test_periodic_value_types_mismatch():
    assert not cirq.approx_eq(cirq.PeriodicValue(0.0, 2.0), 0.0, atol=0.2)
    assert not cirq.approx_eq(0.0, cirq.PeriodicValue(0.0, 2.0), atol=0.2)

def test_periodic_value_is_parameterized():
    assert not cirq.is_parameterized(cirq.PeriodicValue(1.0, 3.0))
    assert cirq.is_parameterized(cirq.PeriodicValue(0.0, sympy.Symbol('p')))
    assert cirq.is_parameterized(cirq.PeriodicValue(sympy.Symbol('v'), 3.0))
    assert cirq.is_parameterized(
            cirq.PeriodicValue(sympy.Symbol('v'), sympy.Symbol('p')))


@pytest.mark.parametrize('val', [
    cirq.PeriodicValue(0.4, 1.0),
    cirq.PeriodicValue(0.0, 2.0),
    cirq.PeriodicValue(1.0, 3),
    cirq.PeriodicValue(-2.1, 3.0),
    cirq.PeriodicValue(sympy.Symbol('v'), sympy.Symbol('p')),
    cirq.PeriodicValue(2., sympy.Symbol('p')),
    cirq.PeriodicValue(sympy.Symbol('v'), 3),
])
def test_periodic_value_repr(val):
    cirq.testing.assert_equivalent_repr(val)
Exemplo n.º 9
0
                          cirq.PeriodicValue(0.5, 1.0),
                          atol=0.6)
    assert not cirq.approx_eq(
        cirq.PeriodicValue(0, 1.0), cirq.PeriodicValue(0.5, 1.0), atol=0.1)
    assert cirq.approx_eq(cirq.PeriodicValue(0.4, 1.0),
                          cirq.PeriodicValue(0.6, 1.0),
                          atol=0.3)


def test_periodic_value_types_mismatch():
    assert not cirq.approx_eq(cirq.PeriodicValue(0.0, 2.0), 0.0, atol=0.2)
    assert not cirq.approx_eq(0.0, cirq.PeriodicValue(0.0, 2.0), atol=0.2)


@pytest.mark.parametrize('value, is_parameterized, parameter_names', [
    (cirq.PeriodicValue(1.0, 3.0), False, set()),
    (cirq.PeriodicValue(0.0, sympy.Symbol('p')), True, {'p'}),
    (cirq.PeriodicValue(sympy.Symbol('v'), 3.0), True, {'v'}),
    (cirq.PeriodicValue(sympy.Symbol('v'),
                        sympy.Symbol('p')), True, {'p', 'v'}),
])
def test_periodic_value_is_parameterized(value, is_parameterized,
                                         parameter_names):
    assert cirq.is_parameterized(value) == is_parameterized
    assert cirq.parameter_names(value) == parameter_names
    resolved = cirq.resolve_parameters(value, {p: 1 for p in parameter_names})
    assert not cirq.is_parameterized(resolved)


@pytest.mark.parametrize('val', [
    cirq.PeriodicValue(0.4, 1.0),
Exemplo n.º 10
0
 def _value_equality_values_(self):
     return tuple(cirq.PeriodicValue(w * self._exponent, 4)
                  for w in self.weights)