|
35 | 35 | ],
|
36 | 36 | )
|
37 | 37 | def test_phased_x_consistent_protocols(phase_exponent):
|
38 |
| - # If there is no global_shift, the gate is global phase insensitive. |
39 | 38 | cirq.testing.assert_implements_consistent_protocols(
|
40 | 39 | cirq.PhasedXPowGate(phase_exponent=phase_exponent, exponent=1.0),
|
41 |
| - ignoring_global_phase=False, |
42 | 40 | )
|
43 | 41 | cirq.testing.assert_implements_consistent_protocols(
|
44 | 42 | cirq.PhasedXPowGate(phase_exponent=phase_exponent, exponent=1.0, global_shift=0.1),
|
45 |
| - ignoring_global_phase=True, |
46 | 43 | )
|
47 | 44 |
|
48 | 45 |
|
@@ -171,26 +168,36 @@ def test_str_repr():
|
171 | 168 | )
|
172 | 169 |
|
173 | 170 |
|
174 |
| -@pytest.mark.parametrize('resolve_fn', [cirq.resolve_parameters, cirq.resolve_parameters_once]) |
175 |
| -def test_parameterize(resolve_fn): |
| 171 | +@pytest.mark.parametrize( |
| 172 | + 'resolve_fn, global_shift', [(cirq.resolve_parameters, 0), (cirq.resolve_parameters_once, 0.1)] |
| 173 | +) |
| 174 | +def test_parameterize(resolve_fn, global_shift): |
176 | 175 | parameterized_gate = cirq.PhasedXPowGate(
|
177 |
| - exponent=sympy.Symbol('a'), phase_exponent=sympy.Symbol('b') |
| 176 | + exponent=sympy.Symbol('a'), phase_exponent=sympy.Symbol('b'), global_shift=global_shift |
178 | 177 | )
|
179 | 178 | assert cirq.pow(parameterized_gate, 5) == cirq.PhasedXPowGate(
|
180 |
| - exponent=sympy.Symbol('a') * 5, phase_exponent=sympy.Symbol('b') |
181 |
| - ) |
182 |
| - assert ( |
183 |
| - cirq.decompose_once_with_qubits(parameterized_gate, [cirq.LineQubit(0)], NotImplemented) |
184 |
| - is NotImplemented |
| 179 | + exponent=sympy.Symbol('a') * 5, phase_exponent=sympy.Symbol('b'), global_shift=global_shift |
185 | 180 | )
|
186 | 181 | assert cirq.unitary(parameterized_gate, default=None) is None
|
187 | 182 | assert cirq.is_parameterized(parameterized_gate)
|
| 183 | + q = cirq.NamedQubit("q") |
| 184 | + parameterized_decomposed_circuit = cirq.Circuit(cirq.decompose(parameterized_gate(q))) |
| 185 | + for resolver in cirq.Linspace('a', 0, 2, 10) * cirq.Linspace('b', 0, 2, 10): |
| 186 | + resolved_gate = resolve_fn(parameterized_gate, resolver) |
| 187 | + assert resolved_gate == cirq.PhasedXPowGate( |
| 188 | + exponent=resolver.value_of('a'), |
| 189 | + phase_exponent=resolver.value_of('b'), |
| 190 | + global_shift=global_shift, |
| 191 | + ) |
| 192 | + np.testing.assert_allclose( |
| 193 | + cirq.unitary(resolved_gate(q)), |
| 194 | + cirq.unitary(resolve_fn(parameterized_decomposed_circuit, resolver)), |
| 195 | + atol=1e-8, |
| 196 | + ) |
188 | 197 |
|
189 |
| - resolver = cirq.ParamResolver({'a': 0.1, 'b': 0.2}) |
190 |
| - resolved_gate = resolve_fn(parameterized_gate, resolver) |
191 |
| - assert resolved_gate == cirq.PhasedXPowGate(exponent=0.1, phase_exponent=0.2) |
192 |
| - |
193 |
| - unparameterized_gate = cirq.PhasedXPowGate(exponent=0.1, phase_exponent=0.2) |
| 198 | + unparameterized_gate = cirq.PhasedXPowGate( |
| 199 | + exponent=0.1, phase_exponent=0.2, global_shift=global_shift |
| 200 | + ) |
194 | 201 | assert not cirq.is_parameterized(unparameterized_gate)
|
195 | 202 | assert cirq.is_parameterized(unparameterized_gate ** sympy.Symbol('a'))
|
196 | 203 | assert cirq.is_parameterized(unparameterized_gate ** (sympy.Symbol('a') + 1))
|
|
0 commit comments