cirq-core 1.5.0.dev20250115152944__py3-none-any.whl → 1.5.0.dev20250115164027__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of cirq-core might be problematic. Click here for more details.

cirq/_version.py CHANGED
@@ -28,4 +28,4 @@ if sys.version_info < (3, 10, 0): # pragma: no cover
28
28
  'of cirq (e.g. "python -m pip install cirq==1.1.*")'
29
29
  )
30
30
 
31
- __version__ = "1.5.0.dev20250115152944"
31
+ __version__ = "1.5.0.dev20250115164027"
cirq/_version_test.py CHANGED
@@ -3,4 +3,4 @@ import cirq
3
3
 
4
4
 
5
5
  def test_version():
6
- assert cirq.__version__ == "1.5.0.dev20250115152944"
6
+ assert cirq.__version__ == "1.5.0.dev20250115164027"
cirq/ops/clifford_gate.py CHANGED
@@ -897,7 +897,12 @@ class SingleQubitCliffordGate(CliffordGate):
897
897
  return self.merged_with(after).merged_with(self**-1)
898
898
 
899
899
  def __repr__(self) -> str:
900
- return f'cirq.CliffordGate.from_clifford_tableau({self.clifford_tableau!r})'
900
+ return (
901
+ f'cirq.ops.SingleQubitCliffordGate(_clifford_tableau=cirq.CliffordTableau(1, '
902
+ f'rs=np.array({self._clifford_tableau.rs.tolist()!r}), '
903
+ f'xs=np.array({self._clifford_tableau.xs.tolist()!r}), '
904
+ f'zs=np.array({self._clifford_tableau.zs.tolist()!r})))'
905
+ )
901
906
 
902
907
  def _circuit_diagram_info_(
903
908
  self, args: 'cirq.CircuitDiagramInfoArgs'
@@ -919,3 +919,37 @@ def test_all_single_qubit_clifford_unitaries():
919
919
  assert cirq.equal_up_to_global_phase(cs[21], (i - 1j * (-x + y - z)) / 2)
920
920
  assert cirq.equal_up_to_global_phase(cs[22], (i - 1j * (-x - y + z)) / 2)
921
921
  assert cirq.equal_up_to_global_phase(cs[23], (i - 1j * (-x - y - z)) / 2)
922
+
923
+
924
+ def test_single_qubit_clifford_gate_repr():
925
+ assert repr(cirq.ops.SingleQubitCliffordGate.X) == (
926
+ 'cirq.ops.SingleQubitCliffordGate(_clifford_tableau=cirq.CliffordTableau(1, '
927
+ 'rs=np.array([False, True]), xs=np.array([[True], [False]]), '
928
+ 'zs=np.array([[False], [True]])))'
929
+ )
930
+ assert repr(cirq.ops.SingleQubitCliffordGate.Y) == (
931
+ 'cirq.ops.SingleQubitCliffordGate(_clifford_tableau=cirq.CliffordTableau(1, '
932
+ 'rs=np.array([True, True]), xs=np.array([[True], [False]]), '
933
+ 'zs=np.array([[False], [True]])))'
934
+ )
935
+ assert repr(cirq.ops.SingleQubitCliffordGate.Z) == (
936
+ 'cirq.ops.SingleQubitCliffordGate(_clifford_tableau=cirq.CliffordTableau(1, '
937
+ 'rs=np.array([True, False]), xs=np.array([[True], [False]]), '
938
+ 'zs=np.array([[False], [True]])))'
939
+ )
940
+ assert repr(cirq.ops.SingleQubitCliffordGate.I) == (
941
+ 'cirq.ops.SingleQubitCliffordGate(_clifford_tableau=cirq.CliffordTableau(1, '
942
+ 'rs=np.array([False, False]), xs=np.array([[True], [False]]), '
943
+ 'zs=np.array([[False], [True]])))'
944
+ )
945
+ assert repr(cirq.ops.SingleQubitCliffordGate.X_sqrt) == (
946
+ 'cirq.ops.SingleQubitCliffordGate(_clifford_tableau=cirq.CliffordTableau(1, '
947
+ 'rs=np.array([False, True]), xs=np.array([[True], [True]]), '
948
+ 'zs=np.array([[False], [True]])))'
949
+ )
950
+
951
+ assert str(cirq.ops.SingleQubitCliffordGate.X) == (
952
+ 'cirq.ops.SingleQubitCliffordGate(_clifford_tableau=cirq.CliffordTableau(1, '
953
+ 'rs=np.array([False, True]), xs=np.array([[True], [False]]), '
954
+ 'zs=np.array([[False], [True]])))'
955
+ )
@@ -292,7 +292,20 @@ def drop_terminal_measurements(
292
292
  def flip_inversion(op: 'cirq.Operation', _) -> 'cirq.OP_TREE':
293
293
  if isinstance(op.gate, ops.MeasurementGate):
294
294
  return [
295
- ops.X(q) if b else ops.I(q) for q, b in zip(op.qubits, op.gate.full_invert_mask())
295
+ (
296
+ (ops.X if b else ops.I)
297
+ if q.dimension == 2
298
+ else (
299
+ ops.MatrixGate(
300
+ # Per SimulationState.measure(), swap 0,1 but leave other dims alone
301
+ np.eye(q.dimension)[[1, 0, *range(2, q.dimension)]],
302
+ qid_shape=(q.dimension,),
303
+ )
304
+ if b
305
+ else ops.IdentityGate(qid_shape=(q.dimension,))
306
+ )
307
+ ).on(q)
308
+ for q, b in zip(op.qubits, op.gate.full_invert_mask())
296
309
  ]
297
310
  return op
298
311
 
@@ -759,6 +759,41 @@ def test_drop_terminal():
759
759
  )
760
760
 
761
761
 
762
+ def test_drop_terminal_qudit():
763
+ q0, q1 = cirq.LineQid.range(2, dimension=3)
764
+ circuit = cirq.Circuit(
765
+ cirq.CircuitOperation(cirq.FrozenCircuit(cirq.measure(q0, q1, key='m', invert_mask=[0, 1])))
766
+ )
767
+ dropped = cirq.drop_terminal_measurements(circuit)
768
+ expected_inversion_matrix = np.array([[0, 1, 0], [1, 0, 0], [0, 0, 1]])
769
+ cirq.testing.assert_same_circuits(
770
+ dropped,
771
+ cirq.Circuit(
772
+ cirq.CircuitOperation(
773
+ cirq.FrozenCircuit(
774
+ cirq.IdentityGate(qid_shape=(3,)).on(q0),
775
+ cirq.MatrixGate(expected_inversion_matrix, qid_shape=(3,)).on(q1),
776
+ )
777
+ )
778
+ ),
779
+ )
780
+ # Verify behavior equivalent to simulator (invert_mask swaps 0,1 but leaves 2 alone)
781
+ dropped.append(cirq.measure(q0, q1, key='m'))
782
+ sim = cirq.Simulator()
783
+ c0 = sim.simulate(circuit, initial_state=[0, 0])
784
+ d0 = sim.simulate(dropped, initial_state=[0, 0])
785
+ assert np.all(c0.measurements['m'] == [0, 1])
786
+ assert np.all(d0.measurements['m'] == [0, 1])
787
+ c1 = sim.simulate(circuit, initial_state=[1, 1])
788
+ d1 = sim.simulate(dropped, initial_state=[1, 1])
789
+ assert np.all(c1.measurements['m'] == [1, 0])
790
+ assert np.all(d1.measurements['m'] == [1, 0])
791
+ c2 = sim.simulate(circuit, initial_state=[2, 2])
792
+ d2 = sim.simulate(dropped, initial_state=[2, 2])
793
+ assert np.all(c2.measurements['m'] == [2, 2])
794
+ assert np.all(d2.measurements['m'] == [2, 2])
795
+
796
+
762
797
  def test_drop_terminal_nonterminal_error():
763
798
  q0, q1 = cirq.LineQubit.range(2)
764
799
  circuit = cirq.Circuit(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cirq-core
3
- Version: 1.5.0.dev20250115152944
3
+ Version: 1.5.0.dev20250115164027
4
4
  Summary: A framework for creating, editing, and invoking Noisy Intermediate Scale Quantum (NISQ) circuits.
5
5
  Home-page: http://github.com/quantumlib/cirq
6
6
  Author: The Cirq Developers
@@ -4,8 +4,8 @@ cirq/_compat_test.py,sha256=Qq3ZcfgD-Nb81cEppQdJqhAyrVqXKtfXZYGXT0p-Wh0,34718
4
4
  cirq/_doc.py,sha256=yDyWUD_2JDS0gShfGRb-rdqRt9-WeL7DhkqX7np0Nko,2879
5
5
  cirq/_import.py,sha256=p9gMHJscbtDDkfHOaulvd3Aer0pwUF5AXpL89XR8dNw,8402
6
6
  cirq/_import_test.py,sha256=6K_v0riZJXOXUphHNkGA8MY-JcmGlezFaGmvrNhm3OQ,1015
7
- cirq/_version.py,sha256=LkgJe5eOFVNdOwCky4dktOgEF-hrFwRDpJezWKkIXcM,1206
8
- cirq/_version_test.py,sha256=IM_DL-84DQSW3Zw270PxHbweIkfKdqagG7nE8-S3EFM,147
7
+ cirq/_version.py,sha256=ws2sp9FFR3rfAyhgIv-kaygi0mnzMim2zlShscsVz3A,1206
8
+ cirq/_version_test.py,sha256=cC50n3IQmYEY3gd9BeVAmU67HZqdTEgQCjI8ilo6px4,147
9
9
  cirq/conftest.py,sha256=X7yLFL8GLhg2CjPw0hp5e_dGASfvHx1-QT03aUbhKJw,1168
10
10
  cirq/json_resolver_cache.py,sha256=cpbvJMNIh0U-l1mEVb-TqhJUEXfm2vpuR3v432ORSmg,13702
11
11
  cirq/py.typed,sha256=VFSlmh_lNwnaXzwY-ZuW-C2Ws5PkuDoVgBdNCs0jXJE,63
@@ -270,8 +270,8 @@ cirq/ops/boolean_hamiltonian.py,sha256=li003lNq6zS8pNPTobqzfzYJvyvaIpCVo3wkliI6H
270
270
  cirq/ops/boolean_hamiltonian_test.py,sha256=1ey5yfYZPKZDsfM3jpCPAOpbPs_y8i4K_WvDK2d5_4Y,8518
271
271
  cirq/ops/classically_controlled_operation.py,sha256=qTOsbGRZFbQIaBj9iee31V_V8oMLqWIJjgFomy3kg4A,9104
272
272
  cirq/ops/classically_controlled_operation_test.py,sha256=nIYyXfNH4E2IibZSLk6QDVHpfJQbuI_iWwirCH8rhi8,50209
273
- cirq/ops/clifford_gate.py,sha256=qAKS0wqqoHljOF63treyR95I6H0yWFZBiHQoM4sLgSc,39350
274
- cirq/ops/clifford_gate_test.py,sha256=NF_if1X8LCMA9hy0vBO7lxvVPdumlvMMnI2XRQ-RLpk,37472
273
+ cirq/ops/clifford_gate.py,sha256=qvzRNQ2uY7jVf7RZwF5smXKgPabMPHZLKKkxzxP2ZwE,39590
274
+ cirq/ops/clifford_gate_test.py,sha256=jymAeVgf0FhZM9wmQLgJ8wgY26CgncmPoLY05Vl2dvA,39100
275
275
  cirq/ops/common_channels.py,sha256=d53FzwsYK89vE5SV4PEoy96BPJHtdi522Rq0RRuc88M,38324
276
276
  cirq/ops/common_channels_test.py,sha256=EL_PxbqD3KPC8ioihiukhmW8bUdclqqigKoFyUQpmIM,29690
277
277
  cirq/ops/common_gate_families.py,sha256=e5M8wlDYtdrpWBrhdns6iizIvSqzfxDyIsBdxt8hVMc,8611
@@ -1056,8 +1056,8 @@ cirq/transformers/expand_composite.py,sha256=nASRoP4qfjsnX_t2a2hBw8BE7B_JD-0XLGI
1056
1056
  cirq/transformers/expand_composite_test.py,sha256=4Gn6LVqr0DeuUumde80O4esOLGIoo86_S_Mk-HwnMfk,8640
1057
1057
  cirq/transformers/insertion_sort.py,sha256=cAwseOcAdBFoPlP8F45B_XP8ySGmkPHn0EftTVVsF9Q,2612
1058
1058
  cirq/transformers/insertion_sort_test.py,sha256=q81tMHSmlxTRqznkfgIGxanF-1fX8GclopAHTaF6yHs,1187
1059
- cirq/transformers/measurement_transformers.py,sha256=m2v4FAEaIZtYXEh-rFzxa_sx-syqdWZmCbf6yar0GSM,19035
1060
- cirq/transformers/measurement_transformers_test.py,sha256=tkuevHQWnFWmxmvfJZ2T42uCIw4oaYyZ4XvjRGFGdug,27504
1059
+ cirq/transformers/measurement_transformers.py,sha256=ewHTeY8QuEYCXact4XVCKD-VCCAGg3OaQiVDonSH8dE,19581
1060
+ cirq/transformers/measurement_transformers_test.py,sha256=VXXqJIfXJcduJXXXz0_yq7onAlAe3FDd7l3EHmp9YyM,28983
1061
1061
  cirq/transformers/merge_k_qubit_gates.py,sha256=dUsswQOIHfbb6Lu37fecgrpT6_45zmDE7eqCUbW1KOI,4390
1062
1062
  cirq/transformers/merge_k_qubit_gates_test.py,sha256=k_ROZvUebHgPy5vsNnWNMBYU4kfIkrunPsw39ZngMwo,13920
1063
1063
  cirq/transformers/merge_single_qubit_gates.py,sha256=NRREV4Z6Ptc3mZnOUgzQePdj4H0aix17WOUwZUB7iQ8,5826
@@ -1203,8 +1203,8 @@ cirq/work/sampler.py,sha256=bE5tmVkcR6cZZMLETxDfHehdsYUMbx2RvBeIBetehI4,19187
1203
1203
  cirq/work/sampler_test.py,sha256=hL2UWx3dz2ukZVNxWftiKVvJcQoLplLZdQm-k1QcA40,13282
1204
1204
  cirq/work/zeros_sampler.py,sha256=x1C7cup66a43n-3tm8QjhiqJa07qcJW10FxNp9jJ59Q,2356
1205
1205
  cirq/work/zeros_sampler_test.py,sha256=JIkpBBFPJe5Ba4142vzogyWyboG1Q1ZAm0UVGgOoZn8,3279
1206
- cirq_core-1.5.0.dev20250115152944.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
1207
- cirq_core-1.5.0.dev20250115152944.dist-info/METADATA,sha256=RTKOyXjzcby0YwSB_UTOSUGM2pvSYDxZEt07o_-ScHg,2105
1208
- cirq_core-1.5.0.dev20250115152944.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
1209
- cirq_core-1.5.0.dev20250115152944.dist-info/top_level.txt,sha256=Sz9iOxHU0IEMLSFGwiwOCaN2e9K-jFbBbtpPN1hB73g,5
1210
- cirq_core-1.5.0.dev20250115152944.dist-info/RECORD,,
1206
+ cirq_core-1.5.0.dev20250115164027.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
1207
+ cirq_core-1.5.0.dev20250115164027.dist-info/METADATA,sha256=6rypBgNt9bS1Td8xvjp42DJnWdNeKGbCDsUdrNRIEr4,2105
1208
+ cirq_core-1.5.0.dev20250115164027.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
1209
+ cirq_core-1.5.0.dev20250115164027.dist-info/top_level.txt,sha256=Sz9iOxHU0IEMLSFGwiwOCaN2e9K-jFbBbtpPN1hB73g,5
1210
+ cirq_core-1.5.0.dev20250115164027.dist-info/RECORD,,