cirq-core 1.5.0.dev20241010222629__py3-none-any.whl → 1.5.0.dev20241014205813__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.dev20241010222629"
31
+ __version__ = "1.5.0.dev20241014205813"
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.dev20241010222629"
6
+ assert cirq.__version__ == "1.5.0.dev20241014205813"
@@ -27,22 +27,40 @@ import numpy as np
27
27
 
28
28
  from cirq import ops
29
29
  from cirq.linalg import decompositions, predicates
30
+ from cirq.transformers.analytical_decompositions.two_qubit_to_cz import (
31
+ two_qubit_matrix_to_cz_operations,
32
+ )
33
+ from cirq.transformers.analytical_decompositions.three_qubit_decomposition import (
34
+ three_qubit_matrix_to_operations,
35
+ )
36
+ from cirq.protocols import unitary_protocol
37
+ from cirq.circuits.frozen_circuit import FrozenCircuit
30
38
 
31
39
  if TYPE_CHECKING:
32
40
  import cirq
33
41
  from cirq.ops import op_tree
34
42
 
35
43
 
36
- def quantum_shannon_decomposition(qubits: 'List[cirq.Qid]', u: np.ndarray) -> 'op_tree.OpTree':
37
- """Decomposes n-qubit unitary into CX/YPow/ZPow/CNOT gates, preserving global phase.
44
+ def quantum_shannon_decomposition(
45
+ qubits: 'List[cirq.Qid]', u: np.ndarray, atol: float = 1e-8
46
+ ) -> 'op_tree.OpTree':
47
+ """Decomposes n-qubit unitary 1-q, 2-q and GlobalPhase gates, preserving global phase.
48
+
49
+ The gates used are CX/YPow/ZPow/CNOT/GlobalPhase/CZ/PhasedXZGate/PhasedXPowGate.
38
50
 
39
51
  The algorithm is described in Shende et al.:
40
52
  Synthesis of Quantum Logic Circuits. Tech. rep. 2006,
41
53
  https://arxiv.org/abs/quant-ph/0406176
42
54
 
55
+ Note: Shannon decomposition is sensitive to the numerical accuracy of doing eigendecomposition.
56
+ Eigendecomposition is obtained using `np.linalg.eig` and the resulting difference between
57
+ the input and output unitary is heavily affected by the accuracy of `np.linalg.eig`.
58
+
59
+
43
60
  Args:
44
61
  qubits: List of qubits in order of significance
45
62
  u: Numpy array for unitary matrix representing gate to be decomposed
63
+ atol: Absolute tolerance of floating point checks.
46
64
 
47
65
  Calls:
48
66
  (Base Case)
@@ -62,7 +80,7 @@ def quantum_shannon_decomposition(qubits: 'List[cirq.Qid]', u: np.ndarray) -> 'o
62
80
  ValueError: If the u matrix is non-unitary
63
81
  ValueError: If the u matrix is not of shape (2^n,2^n)
64
82
  """
65
- if not predicates.is_unitary(u): # Check that u is unitary
83
+ if not predicates.is_unitary(u, atol=atol): # Check that u is unitary
66
84
  raise ValueError(
67
85
  "Expected input matrix u to be unitary, \
68
86
  but it fails cirq.is_unitary check"
@@ -80,6 +98,32 @@ def quantum_shannon_decomposition(qubits: 'List[cirq.Qid]', u: np.ndarray) -> 'o
80
98
  yield from _single_qubit_decomposition(qubits[0], u)
81
99
  return
82
100
 
101
+ if n == 4:
102
+ operations = tuple(
103
+ two_qubit_matrix_to_cz_operations(
104
+ qubits[0], qubits[1], u, allow_partial_czs=True, clean_operations=True, atol=atol
105
+ )
106
+ )
107
+ yield from operations
108
+ i, j = np.unravel_index(np.argmax(np.abs(u)), u.shape)
109
+ new_unitary = unitary_protocol.unitary(FrozenCircuit.from_moments(*operations))
110
+ global_phase = np.angle(u[i, j]) - np.angle(new_unitary[i, j])
111
+ if np.abs(global_phase) > 1e-9:
112
+ yield ops.global_phase_operation(np.exp(1j * global_phase))
113
+ return
114
+
115
+ if n == 8:
116
+ operations = tuple(
117
+ three_qubit_matrix_to_operations(qubits[0], qubits[1], qubits[2], u, atol=atol)
118
+ )
119
+ yield from operations
120
+ i, j = np.unravel_index(np.argmax(np.abs(u)), u.shape)
121
+ new_unitary = unitary_protocol.unitary(FrozenCircuit.from_moments(*operations))
122
+ global_phase = np.angle(u[i, j]) - np.angle(new_unitary[i, j])
123
+ if np.abs(global_phase) > 1e-9:
124
+ yield ops.global_phase_operation(np.exp(1j * global_phase))
125
+ return
126
+
83
127
  # Perform a cosine-sine (linalg) decomposition on u
84
128
  # X = [ u1 , 0 ] [ cos(theta) , -sin(theta) ] [ v1 , 0 ]
85
129
  # [ 0 , u2 ] [ sin(theta) , cos(theta) ] [ 0 , v2 ]
@@ -108,17 +152,36 @@ def _single_qubit_decomposition(qubit: 'cirq.Qid', u: np.ndarray) -> 'op_tree.Op
108
152
  A single operation from OP TREE of 3 operations (rz,ry,ZPowGate)
109
153
  """
110
154
  # Perform native ZYZ decomposition
111
- phi_0, phi_1, phi_2 = decompositions.deconstruct_single_qubit_matrix_into_angles(u)
155
+ phi_0, phi_1, phi_2 = np.array(
156
+ decompositions.deconstruct_single_qubit_matrix_into_angles(u)
157
+ ) % (2 * np.pi)
112
158
 
113
159
  # Determine global phase picked up
114
- phase = np.angle(u[0, 0] / (np.exp(-1j * (phi_0) / 2) * np.cos(phi_1 / 2)))
115
-
116
- # Append first two operations operations
117
- yield ops.rz(phi_0).on(qubit)
118
- yield ops.ry(phi_1).on(qubit)
119
-
120
- # Append third operation with global phase added
121
- yield ops.ZPowGate(exponent=phi_2 / np.pi, global_shift=phase / phi_2).on(qubit)
160
+ global_phase = np.angle(u[0, 0]) + phi_0 / 2 + phi_2 / 2
161
+ if np.abs(u[0, 0]) < 1e-9:
162
+ global_phase = np.angle(u[1, 0]) + phi_0 / 2 - phi_2 / 2
163
+
164
+ if np.abs(phi_2) > 1e-18:
165
+ # Append first two operations operations
166
+ yield ops.rz(phi_0).on(qubit)
167
+ yield ops.ry(phi_1).on(qubit)
168
+
169
+ # Append third operation with global phase added
170
+ yield ops.ZPowGate(exponent=phi_2 / np.pi, global_shift=global_phase / phi_2 - 0.5)(qubit)
171
+ elif np.abs(phi_1) > 1e-18:
172
+ # Just a Z -> Y rotation so we attach the global phase to the Y rotation.
173
+ if np.abs(phi_0) > 1e-18:
174
+ yield ops.rz(phi_0)(qubit)
175
+ yield ops.YPowGate(exponent=phi_1 / np.pi, global_shift=global_phase / phi_1 - 0.5)(qubit)
176
+ elif np.abs(phi_0) > 1e-18:
177
+ # Just an Rz with a potential global phase.
178
+ yield ops.ZPowGate(exponent=phi_0 / np.pi, global_shift=global_phase / phi_0 - 0.5)(qubit)
179
+ elif np.abs(global_phase) > 1e-18:
180
+ # Global Phase.
181
+ yield ops.global_phase_operation(np.exp(1j * global_phase))
182
+ else:
183
+ # Identity.
184
+ return
122
185
 
123
186
 
124
187
  def _msb_demuxer(
@@ -146,8 +209,21 @@ def _msb_demuxer(
146
209
  Yields: Single operation from OP TREE of 2-qubit and 1-qubit operations
147
210
  """
148
211
  # Perform a diagonalization to find values
212
+ u1 = u1.astype(np.complex128)
213
+ u2 = u2.astype(np.complex128)
149
214
  u = u1 @ u2.T.conjugate()
150
- dsquared, V = np.linalg.eig(u)
215
+ if predicates.is_hermitian(u):
216
+ # If `u` is hermitian, use the more accurate `eigh` method.
217
+ dsquared, V = np.linalg.eigh(u)
218
+ else:
219
+ dsquared, V = np.linalg.eig(u)
220
+ # Use Gram–Schmidt to obtain orthonormal eigenvectors for each of the subspaces.
221
+ for i in range(V.shape[0]):
222
+ for j in range(i):
223
+ if np.abs(dsquared[i] - dsquared[j]) < 1e-9:
224
+ V[:, i] -= np.dot(V[:, j].conj(), V[:, i]) * V[:, j]
225
+ V[:, i] /= np.linalg.norm(V[:, i]) # normalize.
226
+ dsquared = dsquared.astype(np.complex128)
151
227
  d = np.sqrt(dsquared)
152
228
  D = np.diag(d)
153
229
  W = D @ V.T.conjugate() @ u2
@@ -155,7 +231,7 @@ def _msb_demuxer(
155
231
  # Last term is given by ( I ⊗ W ), demultiplexed
156
232
  # Remove most-significant (demuxed) control-qubit
157
233
  # Yield operations for QSD on W
158
- yield from quantum_shannon_decomposition(demux_qubits[1:], W)
234
+ yield from quantum_shannon_decomposition(demux_qubits[1:], W, atol=1e-6)
159
235
 
160
236
  # Use complex phase of d_i to give theta_i (so d_i* gives -theta_i)
161
237
  # Observe that middle part looks like Σ_i( Rz(theta_i)⊗|i><i| )
@@ -163,7 +239,7 @@ def _msb_demuxer(
163
239
  yield from _multiplexed_cossin(demux_qubits, -np.angle(d), ops.rz)
164
240
 
165
241
  # Yield operations for QSD on V
166
- yield from quantum_shannon_decomposition(demux_qubits[1:], V)
242
+ yield from quantum_shannon_decomposition(demux_qubits[1:], V, atol=1e-6)
167
243
 
168
244
 
169
245
  def _nth_gray(n: int) -> int:
@@ -223,8 +299,9 @@ def _multiplexed_cossin(
223
299
  # so introduce max function
224
300
  select_qubit = max(-select_qubit - 1, -len(control_qubits))
225
301
 
226
- # Add a rotation on the main qubit
227
- yield rot_func(rotation).on(main_qubit)
302
+ if np.abs(rotation) > 1e-9:
303
+ # Add a rotation on the main qubit
304
+ yield rot_func(rotation).on(main_qubit)
228
305
 
229
306
  # Add a CNOT from the select qubit to the main qubit
230
307
  yield ops.CNOT(control_qubits[select_qubit], main_qubit)
@@ -34,9 +34,8 @@ def test_random_qsd_n_qubit(n_qubits):
34
34
  circuit = cirq.Circuit(quantum_shannon_decomposition(qubits, U))
35
35
  # Test return is equal to inital unitary
36
36
  assert cirq.approx_eq(U, circuit.unitary(), atol=1e-9)
37
- # Test all operations in gate set
38
- gates = (common_gates.Rz, common_gates.Ry, common_gates.ZPowGate, common_gates.CXPowGate)
39
- assert all(isinstance(op.gate, gates) for op in circuit.all_operations())
37
+ # Test all operations have at most 2 qubits.
38
+ assert all(cirq.num_qubits(op) <= 2 for op in circuit.all_operations())
40
39
 
41
40
 
42
41
  def test_qsd_n_qubit_errors():
@@ -53,9 +52,8 @@ def test_random_single_qubit_decomposition():
53
52
  circuit = cirq.Circuit(_single_qubit_decomposition(qubit, U))
54
53
  # Test return is equal to inital unitary
55
54
  assert cirq.approx_eq(U, circuit.unitary(), atol=1e-9)
56
- # Test all operations in gate set
57
- gates = (common_gates.Rz, common_gates.Ry, common_gates.ZPowGate, common_gates.CXPowGate)
58
- assert all(isinstance(op.gate, gates) for op in circuit.all_operations())
55
+ # Test all operations have at most 2 qubits.
56
+ assert all(cirq.num_qubits(op) <= 2 for op in circuit.all_operations())
59
57
 
60
58
 
61
59
  def test_msb_demuxer():
@@ -66,9 +64,8 @@ def test_msb_demuxer():
66
64
  circuit = cirq.Circuit(_msb_demuxer(qubits, U1, U2))
67
65
  # Test return is equal to inital unitary
68
66
  assert cirq.approx_eq(U_full, circuit.unitary(), atol=1e-9)
69
- # Test all operations in gate set
70
- gates = (common_gates.Rz, common_gates.Ry, common_gates.ZPowGate, common_gates.CXPowGate)
71
- assert all(isinstance(op.gate, gates) for op in circuit.all_operations())
67
+ # Test all operations have at most 2 qubits.
68
+ assert all(cirq.num_qubits(op) <= 2 for op in circuit.all_operations())
72
69
 
73
70
 
74
71
  def test_multiplexed_cossin():
@@ -110,3 +107,95 @@ def test_multiplexed_cossin():
110
107
  )
111
108
  def test_nth_gray(n, gray):
112
109
  assert _nth_gray(n) == gray
110
+
111
+
112
+ def test_ghz_circuit_decomposes():
113
+ # Test case from #6725
114
+ ghz_circuit = cirq.Circuit(cirq.H(cirq.q(0)), cirq.CNOT(cirq.q(0), cirq.q(1)))
115
+ ghz_unitary = cirq.unitary(ghz_circuit)
116
+ decomposed_circuit = cirq.Circuit(
117
+ quantum_shannon_decomposition(cirq.LineQubit.range(2), ghz_unitary)
118
+ )
119
+ new_unitary = cirq.unitary(decomposed_circuit)
120
+ np.testing.assert_allclose(new_unitary, ghz_unitary, atol=1e-6)
121
+
122
+
123
+ def test_qft_decomposes():
124
+ # Test case from #6666
125
+ qs = cirq.LineQubit.range(4)
126
+ qft_circuit = cirq.Circuit(cirq.qft(*qs))
127
+ qft_unitary = cirq.unitary(qft_circuit)
128
+ decomposed_circuit = cirq.Circuit(quantum_shannon_decomposition(qs, qft_unitary))
129
+ new_unitary = cirq.unitary(decomposed_circuit)
130
+ np.testing.assert_allclose(new_unitary, qft_unitary, atol=1e-6)
131
+
132
+
133
+ # Cliffords test the different corner cases of the ZYZ decomposition.
134
+ @pytest.mark.parametrize(
135
+ ['gate', 'num_ops'],
136
+ [
137
+ (cirq.I, 0),
138
+ (cirq.X, 2), # rz & ry
139
+ (cirq.Y, 1), # ry
140
+ (cirq.Z, 1), # rz
141
+ (cirq.H, 2), # rz & ry
142
+ (cirq.S, 1), # rz & ry
143
+ ],
144
+ )
145
+ def test_cliffords(gate, num_ops):
146
+ desired_unitary = cirq.unitary(gate)
147
+ shannon_circuit = cirq.Circuit(quantum_shannon_decomposition((cirq.q(0),), desired_unitary))
148
+ new_unitary = cirq.unitary(shannon_circuit)
149
+ assert len([*shannon_circuit.all_operations()]) == num_ops
150
+ if num_ops:
151
+ np.testing.assert_allclose(new_unitary, desired_unitary)
152
+
153
+
154
+ @pytest.mark.parametrize('gate', [cirq.X, cirq.Y, cirq.Z, cirq.H, cirq.S])
155
+ def test_cliffords_with_global_phase(gate):
156
+ global_phase = np.exp(1j * np.random.choice(np.linspace(0.1, 2 * np.pi, 10)))
157
+ desired_unitary = cirq.unitary(gate) * global_phase
158
+ shannon_circuit = cirq.Circuit(quantum_shannon_decomposition((cirq.q(0),), desired_unitary))
159
+ new_unitary = cirq.unitary(shannon_circuit)
160
+ np.testing.assert_allclose(new_unitary, desired_unitary)
161
+
162
+
163
+ def test_global_phase():
164
+ global_phase = np.exp(1j * np.random.choice(np.linspace(0, 2 * np.pi, 10)))
165
+ shannon_circuit = cirq.Circuit(
166
+ quantum_shannon_decomposition((cirq.q(0),), np.eye(2) * global_phase)
167
+ )
168
+ new_unitary = cirq.unitary(shannon_circuit)
169
+ np.testing.assert_allclose(np.diag(new_unitary), global_phase)
170
+
171
+
172
+ @pytest.mark.parametrize('gate', [cirq.CZ, cirq.CNOT, cirq.XX, cirq.YY, cirq.ZZ])
173
+ def test_two_qubit_gate(gate):
174
+ global_phase = np.exp(1j * np.random.choice(np.linspace(0, 2 * np.pi, 10)))
175
+ desired_unitary = cirq.unitary(gate) * global_phase
176
+ shannon_circuit = cirq.Circuit(
177
+ quantum_shannon_decomposition(cirq.LineQubit.range(2), desired_unitary)
178
+ )
179
+ new_unitary = cirq.unitary(shannon_circuit)
180
+ np.testing.assert_allclose(new_unitary, desired_unitary, atol=1e-6)
181
+
182
+
183
+ @pytest.mark.parametrize('gate', [cirq.CCNOT, cirq.qft(*cirq.LineQubit.range(3))])
184
+ def test_three_qubit_gate(gate):
185
+ global_phase = np.exp(1j * np.random.choice(np.linspace(0, 2 * np.pi, 10)))
186
+ desired_unitary = cirq.unitary(gate) * global_phase
187
+ shannon_circuit = cirq.Circuit(
188
+ quantum_shannon_decomposition(cirq.LineQubit.range(3), desired_unitary)
189
+ )
190
+ new_unitary = cirq.unitary(shannon_circuit)
191
+ np.testing.assert_allclose(new_unitary, desired_unitary, atol=1e-6)
192
+
193
+
194
+ def test_qft5():
195
+ global_phase = np.exp(1j * np.random.choice(np.linspace(0, 2 * np.pi, 10)))
196
+ desired_unitary = cirq.unitary(cirq.qft(*cirq.LineQubit.range(5))) * global_phase
197
+ shannon_circuit = cirq.Circuit(
198
+ quantum_shannon_decomposition(cirq.LineQubit.range(5), desired_unitary)
199
+ )
200
+ new_unitary = cirq.unitary(shannon_circuit)
201
+ np.testing.assert_allclose(new_unitary, desired_unitary, atol=1e-6)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cirq-core
3
- Version: 1.5.0.dev20241010222629
3
+ Version: 1.5.0.dev20241014205813
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=LrBXLn5BNbfyUqIn9PwWzVzjI1OT53E4ZqOD4_ATFnI,1206
8
- cirq/_version_test.py,sha256=EwzxglxGjhhAfMcj5T84nzmyk2IVdkWORQecBBWYKTM,147
7
+ cirq/_version.py,sha256=iv-DchgPN9cVQIn1auU-XAtYUs5ZRJqI6JzbkwL5b6A,1206
8
+ cirq/_version_test.py,sha256=xpzrEpRAN25zZHQr2xmtxoc1H2BT3ISiFY_4MbtjEuQ,147
9
9
  cirq/conftest.py,sha256=X7yLFL8GLhg2CjPw0hp5e_dGASfvHx1-QT03aUbhKJw,1168
10
10
  cirq/json_resolver_cache.py,sha256=ytePZtNZgKjOF2NiVpUTuotB-JKZmQNOFIFdvXqsxHw,13271
11
11
  cirq/py.typed,sha256=VFSlmh_lNwnaXzwY-ZuW-C2Ws5PkuDoVgBdNCs0jXJE,63
@@ -1068,8 +1068,8 @@ cirq/transformers/analytical_decompositions/cphase_to_fsim.py,sha256=RDg0wzYa_YX
1068
1068
  cirq/transformers/analytical_decompositions/cphase_to_fsim_test.py,sha256=bwZa0BDclAd1sX3bD-GdNF2MO5DtH7mw2YLppEK0LG0,5568
1069
1069
  cirq/transformers/analytical_decompositions/pauli_string_decomposition.py,sha256=bU9IoY0igVZTmF_wsTdTxAfqPKWyqZ14Gt2AJoK5D_4,4524
1070
1070
  cirq/transformers/analytical_decompositions/pauli_string_decomposition_test.py,sha256=qpFODpCJrE9piYLWR1FzweTn3v80EvLCV-PP2fbHcoE,2112
1071
- cirq/transformers/analytical_decompositions/quantum_shannon_decomposition.py,sha256=-ovbhXHeuGcqu1XQd6ZNV3yDrO3JeAEoA_6z5IlPXxE,8326
1072
- cirq/transformers/analytical_decompositions/quantum_shannon_decomposition_test.py,sha256=Q_CGIfaelZEvmTtmkbaPdBosGwqQQjjypAs2DNMCT54,4158
1071
+ cirq/transformers/analytical_decompositions/quantum_shannon_decomposition.py,sha256=beW4G_yE2lGNQEGbItwEa_w7lx0ECmGFZ7bCvMfk3bg,11768
1072
+ cirq/transformers/analytical_decompositions/quantum_shannon_decomposition_test.py,sha256=rsjVegctVdjWu7BVcbLl0KVxOVCDVwTRSe1Rf7Os08Q,7615
1073
1073
  cirq/transformers/analytical_decompositions/single_qubit_decompositions.py,sha256=iAPdMwHKM1B3mJtQWH-iNjR-VkzhkUDFC23f8kjXY6M,8436
1074
1074
  cirq/transformers/analytical_decompositions/single_qubit_decompositions_test.py,sha256=4GfU6wctBoG-OVFqFOE08xymd5dXzY-doE8ZNpsKohI,12308
1075
1075
  cirq/transformers/analytical_decompositions/single_to_two_qubit_isometry.py,sha256=0N6NbY6yc0VGuTheR37mhUIKFu5TYmToxJO2mbLp9xM,2439
@@ -1184,8 +1184,8 @@ cirq/work/sampler.py,sha256=JEAeQQRF3bqlO9AkOf4XbrTATDI5f5JgyM_FAUCNxao,19751
1184
1184
  cirq/work/sampler_test.py,sha256=B2ZsuqGT854gQtBIAh8k0LiG9Vj5wSzcGvkxOUoTcW4,13217
1185
1185
  cirq/work/zeros_sampler.py,sha256=x1C7cup66a43n-3tm8QjhiqJa07qcJW10FxNp9jJ59Q,2356
1186
1186
  cirq/work/zeros_sampler_test.py,sha256=JIkpBBFPJe5Ba4142vzogyWyboG1Q1ZAm0UVGgOoZn8,3279
1187
- cirq_core-1.5.0.dev20241010222629.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
1188
- cirq_core-1.5.0.dev20241010222629.dist-info/METADATA,sha256=TXKw9rS68fxQhXdvGd4w18wZankkaxJqhzyMb63zH8E,1992
1189
- cirq_core-1.5.0.dev20241010222629.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
1190
- cirq_core-1.5.0.dev20241010222629.dist-info/top_level.txt,sha256=Sz9iOxHU0IEMLSFGwiwOCaN2e9K-jFbBbtpPN1hB73g,5
1191
- cirq_core-1.5.0.dev20241010222629.dist-info/RECORD,,
1187
+ cirq_core-1.5.0.dev20241014205813.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
1188
+ cirq_core-1.5.0.dev20241014205813.dist-info/METADATA,sha256=BXyQxUQ3HhDoPXG5wAaKtvk9wV1wKUm84MScPPzdkrw,1992
1189
+ cirq_core-1.5.0.dev20241014205813.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
1190
+ cirq_core-1.5.0.dev20241014205813.dist-info/top_level.txt,sha256=Sz9iOxHU0IEMLSFGwiwOCaN2e9K-jFbBbtpPN1hB73g,5
1191
+ cirq_core-1.5.0.dev20241014205813.dist-info/RECORD,,