Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added MSGate to top level #6466

Merged
merged 9 commits into from
Mar 16, 2024
1 change: 1 addition & 0 deletions cirq-core/cirq/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,7 @@
MatrixGate,
MixedUnitaryChannel,
M,
MSGate,
measure,
measure_each,
measure_paulistring_terms,
Expand Down
1 change: 1 addition & 0 deletions cirq-core/cirq/json_resolver_cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ def _symmetricalqidpair(qids):
'LineTopology': cirq.LineTopology,
'Linspace': cirq.Linspace,
'ListSweep': cirq.ListSweep,
'cirq.MSGate': cirq.MSGate,
'MatrixGate': cirq.MatrixGate,
'MixedUnitaryChannel': cirq.MixedUnitaryChannel,
'MeasurementKey': cirq.MeasurementKey,
Expand Down
5 changes: 5 additions & 0 deletions cirq-core/cirq/ops/parity_gates.py
Original file line number Diff line number Diff line change
Expand Up @@ -399,6 +399,11 @@ def __repr__(self) -> str:
return 'cirq.ms(np.pi/2)'
return f'cirq.ms({self._exponent!r}*np.pi/2)'

# the default namespace is already occupied by cirq_ionq.MSGate
@classmethod
def _json_namespace_(cls) -> str:
return 'cirq'

def _json_dict_(self) -> Dict[str, Any]:
return protocols.obj_to_dict_helper(self, ["rads"])

Expand Down
12 changes: 2 additions & 10 deletions cirq-core/cirq/ops/parity_gates_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ def test_trace_distance():
def test_ms_arguments():
eq_tester = cirq.testing.EqualsTester()
eq_tester.add_equality_group(
cirq.ms(np.pi / 2), cirq.ops.MSGate(rads=np.pi / 2), cirq.XXPowGate(global_shift=-0.5)
cirq.ms(np.pi / 2), cirq.MSGate(rads=np.pi / 2), cirq.XXPowGate(global_shift=-0.5)
)
eq_tester.add_equality_group(
cirq.ms(np.pi / 4), cirq.XXPowGate(exponent=0.5, global_shift=-0.5)
Expand Down Expand Up @@ -323,15 +323,7 @@ def test_ms_diagrams():


def test_json_serialization():
def custom_resolver(cirq_type: str):
if cirq_type == "MSGate":
return cirq.ops.MSGate
return None

assert cirq.read_json(
json_text=cirq.to_json(cirq.ms(np.pi / 2)), resolvers=[custom_resolver]
) == cirq.ms(np.pi / 2)
assert custom_resolver('X') is None
assert cirq.read_json(json_text=cirq.to_json(cirq.ms(np.pi / 2))) == cirq.ms(np.pi / 2)


@pytest.mark.parametrize('gate_cls', (cirq.XXPowGate, cirq.YYPowGate, cirq.ZZPowGate))
Expand Down
4 changes: 4 additions & 0 deletions cirq-core/cirq/protocols/json_test_data/cirq.MSGate.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"cirq_type": "cirq.MSGate",
"rads": 1.5707963267948966
}
1 change: 1 addition & 0 deletions cirq-core/cirq/protocols/json_test_data/cirq.MSGate.repr
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
cirq.ms(np.pi/2)
1 change: 1 addition & 0 deletions cirq-core/cirq/protocols/json_test_data/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
name="cirq",
packages=[cirq, cirq.work],
test_data_path=pathlib.Path(__file__).parent,
custom_class_name_to_cirq_type={"MSGate": "cirq.MSGate"},
resolver_cache=_class_resolver_dictionary(),
not_yet_serializable=[
'Alignment',
Expand Down