cirq-core 1.6.0.dev20250722181350__py3-none-any.whl → 1.6.1__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.

Files changed (24) hide show
  1. cirq/_version.py +1 -1
  2. cirq/_version_test.py +1 -1
  3. cirq/circuits/moment_test.py +1 -1
  4. cirq/contrib/json_test_data/DampedReadoutNoiseModel.json +12 -0
  5. cirq/contrib/json_test_data/DampedReadoutNoiseModel.repr +4 -0
  6. cirq/contrib/json_test_data/DepolarizingNoiseModel.json +12 -0
  7. cirq/contrib/json_test_data/DepolarizingNoiseModel.repr +4 -0
  8. cirq/contrib/json_test_data/DepolarizingWithDampedReadoutNoiseModel.json +6 -0
  9. cirq/contrib/json_test_data/DepolarizingWithDampedReadoutNoiseModel.repr +1 -0
  10. cirq/contrib/json_test_data/DepolarizingWithReadoutNoiseModel.json +5 -0
  11. cirq/contrib/json_test_data/DepolarizingWithReadoutNoiseModel.repr +1 -0
  12. cirq/contrib/json_test_data/ReadoutNoiseModel.json +12 -0
  13. cirq/contrib/json_test_data/ReadoutNoiseModel.repr +4 -0
  14. cirq/experiments/qubit_characterizations.py +13 -6
  15. cirq/experiments/qubit_characterizations_test.py +17 -7
  16. cirq/ops/fsim_gate.py +1 -1
  17. cirq/protocols/kraus_protocol.py +19 -5
  18. cirq/protocols/kraus_protocol_test.py +9 -1
  19. cirq/value/condition.py +1 -1
  20. {cirq_core-1.6.0.dev20250722181350.dist-info → cirq_core-1.6.1.dist-info}/METADATA +1 -1
  21. {cirq_core-1.6.0.dev20250722181350.dist-info → cirq_core-1.6.1.dist-info}/RECORD +24 -14
  22. {cirq_core-1.6.0.dev20250722181350.dist-info → cirq_core-1.6.1.dist-info}/WHEEL +0 -0
  23. {cirq_core-1.6.0.dev20250722181350.dist-info → cirq_core-1.6.1.dist-info}/licenses/LICENSE +0 -0
  24. {cirq_core-1.6.0.dev20250722181350.dist-info → cirq_core-1.6.1.dist-info}/top_level.txt +0 -0
cirq/_version.py CHANGED
@@ -28,4 +28,4 @@ if sys.version_info < (3, 11, 0): # pragma: no cover
28
28
  'of Cirq (e.g. "python -m pip install cirq==1.5.0")'
29
29
  )
30
30
 
31
- __version__ = "1.6.0.dev20250722181350"
31
+ __version__ = "1.6.1"
cirq/_version_test.py CHANGED
@@ -3,4 +3,4 @@ import cirq
3
3
 
4
4
 
5
5
  def test_version() -> None:
6
- assert cirq.__version__ == "1.6.0.dev20250722181350"
6
+ assert cirq.__version__ == "1.6.1"
@@ -885,7 +885,7 @@ def test_kraus() -> None:
885
885
 
886
886
 
887
887
  def test_kraus_too_big() -> None:
888
- m = cirq.Moment(cirq.IdentityGate(11).on(*cirq.LineQubit.range(11)))
888
+ m = cirq.Moment(cirq.IdentityGate(11).with_probability(0.5).on(*cirq.LineQubit.range(11)))
889
889
  assert not cirq.has_kraus(m)
890
890
  assert not m._has_superoperator_()
891
891
  assert m._kraus_() is NotImplemented
@@ -0,0 +1,12 @@
1
+ [
2
+ {
3
+ "cirq_type": "DampedReadoutNoiseModel",
4
+ "decay_prob": 0.3,
5
+ "prepend": true
6
+ },
7
+ {
8
+ "cirq_type": "DampedReadoutNoiseModel",
9
+ "decay_prob": 0.4,
10
+ "prepend": false
11
+ }
12
+ ]
@@ -0,0 +1,4 @@
1
+ [
2
+ cirq.contrib.noise_models.DampedReadoutNoiseModel(0.3, prepend=True),
3
+ cirq.contrib.noise_models.DampedReadoutNoiseModel(0.4, prepend=False),
4
+ ]
@@ -0,0 +1,12 @@
1
+ [
2
+ {
3
+ "cirq_type": "DepolarizingNoiseModel",
4
+ "depol_prob": 0.1,
5
+ "prepend": false
6
+ },
7
+ {
8
+ "cirq_type": "DepolarizingNoiseModel",
9
+ "depol_prob": 0.15,
10
+ "prepend": true
11
+ }
12
+ ]
@@ -0,0 +1,4 @@
1
+ [
2
+ cirq.contrib.noise_models.DepolarizingNoiseModel(0.1, prepend=False),
3
+ cirq.contrib.noise_models.DepolarizingNoiseModel(0.15, prepend=True),
4
+ ]
@@ -0,0 +1,6 @@
1
+ {
2
+ "cirq_type": "DepolarizingWithDampedReadoutNoiseModel",
3
+ "depol_prob": 0.1,
4
+ "bitflip_prob": 0.2,
5
+ "decay_prob": 0.3
6
+ }
@@ -0,0 +1 @@
1
+ cirq.contrib.noise_models.DepolarizingWithDampedReadoutNoiseModel(0.1, 0.2, 0.3)
@@ -0,0 +1,5 @@
1
+ {
2
+ "cirq_type": "DepolarizingWithReadoutNoiseModel",
3
+ "depol_prob": 0.1,
4
+ "bitflip_prob": 0.2
5
+ }
@@ -0,0 +1 @@
1
+ cirq.contrib.noise_models.DepolarizingWithReadoutNoiseModel(0.1, 0.2)
@@ -0,0 +1,12 @@
1
+ [
2
+ {
3
+ "cirq_type": "ReadoutNoiseModel",
4
+ "bitflip_prob": 0.2,
5
+ "prepend": true
6
+ },
7
+ {
8
+ "cirq_type": "ReadoutNoiseModel",
9
+ "bitflip_prob": 0.23,
10
+ "prepend": false
11
+ }
12
+ ]
@@ -0,0 +1,4 @@
1
+ [
2
+ cirq.contrib.noise_models.ReadoutNoiseModel(0.2, prepend=True),
3
+ cirq.contrib.noise_models.ReadoutNoiseModel(0.23, prepend=False),
4
+ ]
@@ -17,6 +17,7 @@ from __future__ import annotations
17
17
  import dataclasses
18
18
  import functools
19
19
  import itertools
20
+ import uuid
20
21
  from typing import Any, cast, Iterator, Mapping, Sequence, TYPE_CHECKING
21
22
 
22
23
  import attrs
@@ -631,18 +632,24 @@ def single_qubit_state_tomography(
631
632
  Returns:
632
633
  A TomographyResult object that stores and plots the density matrix.
633
634
  """
634
- circuit_z = circuit + circuits.Circuit(ops.measure(qubit, key='z'))
635
+ keys = protocols.measurement_key_names(circuit)
636
+ tomo_key = "tomo_key"
637
+ while tomo_key in keys:
638
+ tomo_key = f"tomo_key{uuid.uuid4().hex}"
639
+
640
+ circuit_z = circuit + circuits.Circuit(ops.measure(qubit, key=tomo_key))
641
+
635
642
  results = sampler.run(circuit_z, repetitions=repetitions)
636
- rho_11 = np.mean(results.measurements['z'])
643
+ rho_11 = np.mean(results.records[tomo_key][:, -1, :])
637
644
  rho_00 = 1.0 - rho_11
638
645
 
639
- circuit_x = circuits.Circuit(circuit, ops.X(qubit) ** 0.5, ops.measure(qubit, key='z'))
646
+ circuit_x = circuits.Circuit(circuit, ops.X(qubit) ** 0.5, ops.measure(qubit, key=tomo_key))
640
647
  results = sampler.run(circuit_x, repetitions=repetitions)
641
- rho_01_im = np.mean(results.measurements['z']) - 0.5
648
+ rho_01_im = np.mean(results.records[tomo_key][:, -1, :]) - 0.5
642
649
 
643
- circuit_y = circuits.Circuit(circuit, ops.Y(qubit) ** -0.5, ops.measure(qubit, key='z'))
650
+ circuit_y = circuits.Circuit(circuit, ops.Y(qubit) ** -0.5, ops.measure(qubit, key=tomo_key))
644
651
  results = sampler.run(circuit_y, repetitions=repetitions)
645
- rho_01_re = 0.5 - np.mean(results.measurements['z'])
652
+ rho_01_re = 0.5 - np.mean(results.records[tomo_key][:, -1, :])
646
653
 
647
654
  rho_01 = rho_01_re + 1j * rho_01_im
648
655
  rho_10 = np.conj(rho_01)
@@ -157,24 +157,34 @@ def test_two_qubit_randomized_benchmarking():
157
157
  def test_single_qubit_state_tomography():
158
158
  # Check that the density matrices of the output states of X/2, Y/2 and
159
159
  # H + Y gates closely match the ideal cases.
160
+ # Checks that unique tomography keys are generated
160
161
  simulator = sim.Simulator()
161
- qubit = GridQubit(0, 0)
162
+ q_0 = GridQubit(0, 0)
163
+ q_1 = GridQubit(0, 1)
162
164
 
163
- circuit_1 = circuits.Circuit(ops.X(qubit) ** 0.5)
164
- circuit_2 = circuits.Circuit(ops.Y(qubit) ** 0.5)
165
- circuit_3 = circuits.Circuit(ops.H(qubit), ops.Y(qubit))
165
+ circuit_1 = circuits.Circuit(ops.X(q_0) ** 0.5)
166
+ circuit_2 = circuits.Circuit(ops.Y(q_0) ** 0.5)
167
+ circuit_3 = circuits.Circuit(ops.H(q_0), ops.Y(q_0))
168
+ circuit_4 = circuits.Circuit(ops.H(q_0), ops.Y(q_0), cirq.measure(q_1, key='z'))
169
+ circuit_5 = circuits.Circuit(ops.H(q_0), ops.Y(q_0), cirq.measure(q_1, key='tomo_key'))
166
170
 
167
- act_rho_1 = single_qubit_state_tomography(simulator, qubit, circuit_1, 1000).data
168
- act_rho_2 = single_qubit_state_tomography(simulator, qubit, circuit_2, 1000).data
169
- act_rho_3 = single_qubit_state_tomography(simulator, qubit, circuit_3, 1000).data
171
+ act_rho_1 = single_qubit_state_tomography(simulator, q_0, circuit_1, 1000).data
172
+ act_rho_2 = single_qubit_state_tomography(simulator, q_0, circuit_2, 1000).data
173
+ act_rho_3 = single_qubit_state_tomography(simulator, q_0, circuit_3, 1000).data
174
+ act_rho_4 = single_qubit_state_tomography(simulator, q_0, circuit_4, 1000).data
175
+ act_rho_5 = single_qubit_state_tomography(simulator, q_0, circuit_5, 1000).data
170
176
 
171
177
  tar_rho_1 = np.array([[0.5, 0.5j], [-0.5j, 0.5]])
172
178
  tar_rho_2 = np.array([[0.5, 0.5], [0.5, 0.5]])
173
179
  tar_rho_3 = np.array([[0.5, -0.5], [-0.5, 0.5]])
180
+ tar_rho_4 = np.array([[0.5, -0.5], [-0.5, 0.5]])
181
+ tar_rho_5 = np.array([[0.5, -0.5], [-0.5, 0.5]])
174
182
 
175
183
  np.testing.assert_almost_equal(act_rho_1, tar_rho_1, decimal=1)
176
184
  np.testing.assert_almost_equal(act_rho_2, tar_rho_2, decimal=1)
177
185
  np.testing.assert_almost_equal(act_rho_3, tar_rho_3, decimal=1)
186
+ np.testing.assert_almost_equal(act_rho_4, tar_rho_4, decimal=1)
187
+ np.testing.assert_almost_equal(act_rho_5, tar_rho_5, decimal=1)
178
188
 
179
189
 
180
190
  def test_two_qubit_state_tomography():
cirq/ops/fsim_gate.py CHANGED
@@ -350,7 +350,7 @@ class PhasedFSimGate(gate_features.InterchangeableQubitsGate, raw_types.Gate):
350
350
 
351
351
  @staticmethod
352
352
  def from_matrix(u: np.ndarray) -> PhasedFSimGate | None:
353
- """Contruct a PhasedFSimGate from unitary.
353
+ """Constructs a PhasedFSimGate from unitary.
354
354
 
355
355
  Args:
356
356
  u: A unitary matrix representing a PhasedFSimGate.
@@ -26,6 +26,7 @@ from typing_extensions import Protocol
26
26
  from cirq import protocols, qis
27
27
  from cirq._doc import doc_private
28
28
  from cirq.protocols.decompose_protocol import _try_decompose_into_operations_and_qubits
29
+ from cirq.protocols.has_unitary_protocol import has_unitary
29
30
  from cirq.protocols.mixture_protocol import has_mixture
30
31
  from cirq.protocols.unitary_protocol import unitary
31
32
 
@@ -95,9 +96,14 @@ class SupportsKraus(Protocol):
95
96
  """
96
97
 
97
98
 
98
- def _strat_kraus_from_apply_channel(val: Any) -> tuple[np.ndarray, ...] | None:
99
+ def _strat_kraus_from_apply_channel(val: Any, atol: float) -> tuple[np.ndarray, ...] | None:
99
100
  """Attempts to compute a value's Kraus operators via its _apply_channel_ method.
100
- This is very expensive (O(16^N)), so only do this as a last resort."""
101
+ This is very expensive (O(16^N)), so only do this as a last resort.
102
+
103
+ Args:
104
+ val: value to calculate kraus channels from.
105
+ atol: Absolute tolerance for super-operator calculation.
106
+ Matrices with all entries less than this will be dropped."""
101
107
  method = getattr(val, '_apply_channel_', None)
102
108
  if method is None:
103
109
  return None
@@ -122,12 +128,15 @@ def _strat_kraus_from_apply_channel(val: Any) -> tuple[np.ndarray, ...] | None:
122
128
  if superop is None or superop is NotImplemented:
123
129
  return None
124
130
  n = np.prod(qid_shape) ** 2
125
- kraus_ops = qis.superoperator_to_kraus(superop.reshape((n, n)))
131
+ # Note that super-operator calculations can be numerically unstable
132
+ # and we want to avoid returning kraus channels with "almost zero"
133
+ # components
134
+ kraus_ops = qis.superoperator_to_kraus(superop.reshape((n, n)), atol=atol)
126
135
  return tuple(kraus_ops)
127
136
 
128
137
 
129
138
  def kraus(
130
- val: Any, default: Any = RaiseTypeErrorIfNotProvided
139
+ val: Any, default: Any = RaiseTypeErrorIfNotProvided, atol: float = 1e-6
131
140
  ) -> tuple[np.ndarray, ...] | TDefault:
132
141
  r"""Returns a list of matrices describing the channel for the given value.
133
142
 
@@ -149,6 +158,8 @@ def kraus(
149
158
  default: Determines the fallback behavior when `val` doesn't have
150
159
  a channel. If `default` is not set, a TypeError is raised. If
151
160
  default is set to a value, that value is returned.
161
+ atol: If calculating Kraus channels from channels, use this tolerance
162
+ for determining whether a super-operator is all zeros.
152
163
 
153
164
  Returns:
154
165
  If `val` has a `_kraus_` method and its result is not NotImplemented,
@@ -187,6 +198,9 @@ def kraus(
187
198
  if unitary_result is not NotImplemented and unitary_result is not None:
188
199
  return (unitary_result,)
189
200
 
201
+ if has_unitary(val):
202
+ return (unitary(val),)
203
+
190
204
  channel_result = NotImplemented if channel_getter is None else channel_getter()
191
205
  if channel_result is not NotImplemented:
192
206
  return tuple(channel_result) # pragma: no cover
@@ -195,7 +209,7 @@ def kraus(
195
209
  # Note: _apply_channel can lead to kraus being called again, so if default
196
210
  # is None, this can trigger an infinite loop.
197
211
  if default is not None:
198
- result = _strat_kraus_from_apply_channel(val)
212
+ result = _strat_kraus_from_apply_channel(val, atol)
199
213
  if result is not None:
200
214
  return result
201
215
 
@@ -167,7 +167,7 @@ def test_has_kraus(cls) -> None:
167
167
  assert cirq.has_kraus(cls())
168
168
 
169
169
 
170
- @pytest.mark.parametrize('decomposed_cls', [HasKraus, HasMixture, HasUnitary])
170
+ @pytest.mark.parametrize('decomposed_cls', [HasKraus, HasMixture])
171
171
  def test_has_kraus_when_decomposed(decomposed_cls) -> None:
172
172
  op = HasKrausWhenDecomposed(decomposed_cls).on(cirq.NamedQubit('test'))
173
173
  assert cirq.has_kraus(op)
@@ -243,3 +243,11 @@ def test_reset_channel_kraus_apply_channel_consistency():
243
243
  gate_no_kraus = NoKrausReset()
244
244
  # Should still match the original superoperator
245
245
  np.testing.assert_allclose(cirq.kraus(gate), cirq.kraus(gate_no_kraus), atol=1e-8)
246
+
247
+
248
+ def test_kraus_channel_with_has_unitary():
249
+ """CZSWAP has no unitary dunder method but has_unitary returns True."""
250
+ op = cirq.CZSWAP.on(cirq.q(1), cirq.q(2))
251
+ channels = cirq.kraus(op)
252
+ assert len(channels) == 1
253
+ np.testing.assert_allclose(channels[0], cirq.unitary(op))
cirq/value/condition.py CHANGED
@@ -154,7 +154,7 @@ class BitMaskKeyCondition(Condition):
154
154
  - BitMaskKeyCondition.create_not_equal_mask('a', 13) -> (a & 13) != 13
155
155
 
156
156
  The bits in the bitmask have the same order as the qubits passed to `cirq.measure(...)`. That's
157
- the most significant bit corresponds to the the first (left most) qubit.
157
+ the most significant bit corresponds to the first (left most) qubit.
158
158
 
159
159
  Attributes:
160
160
  - key: Measurement key.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cirq-core
3
- Version: 1.6.0.dev20250722181350
3
+ Version: 1.6.1
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=emXpdD5ZvwLRlFAoQB8YatmZyU3b4e9jg6FppMTUhkU,33900
4
4
  cirq/_doc.py,sha256=BrnoABo1hk5RgB3Cgww4zLHUfiyFny0F1V-tOMCbdaU,2909
5
5
  cirq/_import.py,sha256=ixBu4EyGl46Ram2cP3p5eZVEFDW5L2DS-VyTjz4N9iw,8429
6
6
  cirq/_import_test.py,sha256=oF4izzOVZLc7NZ0aZHFcGv-r01eiFFt_JORx_x7_D4s,1089
7
- cirq/_version.py,sha256=dPvUeD0p3VMMLAyiICVFRbm1yJvEXNaiG30wk02c8AI,1206
8
- cirq/_version_test.py,sha256=3mAu7Ul-vkUZcgVrwiMQZpZj8M052sJ_TYRd61b6EZo,155
7
+ cirq/_version.py,sha256=aSkc22KgpqE_GFtn2zr2R4pNJtldB0RPmIFTYmXAZcs,1188
8
+ cirq/_version_test.py,sha256=tqe3-Bu1IPZV0hB0B7r4zHmEomZe21xXhNrjbZTbb3U,137
9
9
  cirq/conftest.py,sha256=wSDKNdIQRDfLnXvOCWD3erheOw8JHRhdfQ53EyTUIXg,1239
10
10
  cirq/json_resolver_cache.py,sha256=A5DIgFAY1hUNt9vai_C3-gGBv24116CJMzQxMcXOax4,13726
11
11
  cirq/py.typed,sha256=VFSlmh_lNwnaXzwY-ZuW-C2Ws5PkuDoVgBdNCs0jXJE,63
@@ -25,7 +25,7 @@ cirq/circuits/frozen_circuit_test.py,sha256=1Uk3g9St_nJFmu3IJ5hAcXWJjLfWFUXTCKQU
25
25
  cirq/circuits/insert_strategy.py,sha256=3995vK4U6O9RV4BXMoFl9Tf3ekxIiqxv71IuX80JtYo,3237
26
26
  cirq/circuits/insert_strategy_test.py,sha256=pBFgsylgRG1CS1h4JyzZQFP-xvh6fSbgpiZgxXfbpr4,1237
27
27
  cirq/circuits/moment.py,sha256=MK8H9YUQ44ofLdM1E_zOrJ4Sh5Ayh4ezDtwZkx1O-1E,28363
28
- cirq/circuits/moment_test.py,sha256=-RXBe4ZkWTz1n4n5Hdna5HHslAfAn-gqdreMhuZP508,34233
28
+ cirq/circuits/moment_test.py,sha256=wTfFl3yret5d5NTsUW1hAoATEZ0iZJ0tFiXHBKgkMUs,34255
29
29
  cirq/circuits/optimization_pass.py,sha256=W_YYo_9uy5h4ijU_In5n7gG3EvCVp1cJbE1pHD9ci74,6481
30
30
  cirq/circuits/optimization_pass_test.py,sha256=FvCCOZrqVQLYrf_BUAZ6M-sm6dMv00_xsvpN25Op1BA,5914
31
31
  cirq/circuits/qasm_output.py,sha256=qclnyiEnRzkcr0JqzzABuiHD3INkiALmhl1jCW0AYNk,13079
@@ -84,6 +84,16 @@ cirq/contrib/graph_device/uniform_graph_device_test.py,sha256=M7cxp4UEbhTf-kdVUc
84
84
  cirq/contrib/hacks/__init__.py,sha256=C1uZ1J79EG0dmPxj29mnjdfx6aRU6moz6QAD9PFGUYM,584
85
85
  cirq/contrib/hacks/disable_validation.py,sha256=cOqo4QUtbDu1PAOUCQRjT8EKE_AImbQr2rwGi0AOO0k,1530
86
86
  cirq/contrib/hacks/disable_validation_test.py,sha256=sz319WQwkSvkAUr913lhlrh1NM7-ozMffb3MxCjbwgY,1755
87
+ cirq/contrib/json_test_data/DampedReadoutNoiseModel.json,sha256=2prOerpHJRPJf_o-sFcYBr0Ffm4J4xCYdJFd6FLS4Hs,196
88
+ cirq/contrib/json_test_data/DampedReadoutNoiseModel.repr,sha256=63Nt1ibLxTkSNVSOrnKcRqc_RTLLg-d9O5Dw_ltc4ME,153
89
+ cirq/contrib/json_test_data/DepolarizingNoiseModel.json,sha256=mBwPxHDjLGwUAg6uB1_pNv04xA7blkRkXcUPL07f7wQ,195
90
+ cirq/contrib/json_test_data/DepolarizingNoiseModel.repr,sha256=PsZ4U9gWM6Z45O_xpe2crHygAawoE6L63Ela-AlDKE4,152
91
+ cirq/contrib/json_test_data/DepolarizingWithDampedReadoutNoiseModel.json,sha256=e8GnksOKwVQkxP9obfQ3wpoxwjVE9FC2jiKFWDxux5Y,126
92
+ cirq/contrib/json_test_data/DepolarizingWithDampedReadoutNoiseModel.repr,sha256=d0ih7jIhch2MgkjexP2ICsA1P1Yat9G0R_nH5v50AtM,81
93
+ cirq/contrib/json_test_data/DepolarizingWithReadoutNoiseModel.json,sha256=5B1rE7lFsyxl-HaV57zd3I2IvcFhtZhGYrxixo_JqsU,99
94
+ cirq/contrib/json_test_data/DepolarizingWithReadoutNoiseModel.repr,sha256=HsgqVOnJ9rnm87M_wB8IlB9fs6juCa1wEkUI2wJWE0w,70
95
+ cirq/contrib/json_test_data/ReadoutNoiseModel.json,sha256=4rozZLPSIS_pLHJYP_lQI-RmCD9FSVylpsVk72tdpjc,189
96
+ cirq/contrib/json_test_data/ReadoutNoiseModel.repr,sha256=2D9n9x2HpMimEUPqcnGdsmah2b7KvhAGzbrEkxC2jHg,142
87
97
  cirq/contrib/json_test_data/__init__.py,sha256=y4pe0VWiQAa4PmWikB3XKFVgiuJWspUzW9ugDUYq8C8,723
88
98
  cirq/contrib/json_test_data/spec.py,sha256=9Q_-qZkFM6S0bMFzyt-Bv2lPrHaUxltPmYCsn-wTxrs,1182
89
99
  cirq/contrib/noise_models/__init__.py,sha256=O3wvaQ6kyNZzwsCnMMZvr2EyS76LpO9xnVZ69a2obv0,957
@@ -189,8 +199,8 @@ cirq/experiments/n_qubit_tomography.py,sha256=16u0Tv14SyUM9WCk-ZxbBit9cl93MbZodG
189
199
  cirq/experiments/n_qubit_tomography_test.py,sha256=8wIgs0O8DtlCGOyC0MZA_d3tLNoURX1ARcqnnp1360g,4439
190
200
  cirq/experiments/purity_estimation.py,sha256=0F5uWh0pqNJ9RZQtNBzGeF8OUpapGFeqPWWVsdpEA7k,2503
191
201
  cirq/experiments/purity_estimation_test.py,sha256=OF3EtFBg7ZqPSBfRJK_-1ji2-xrNVEuD77lHO8Sm3Jc,959
192
- cirq/experiments/qubit_characterizations.py,sha256=BKvi1_A7nOT24lxT8zsTWdqeORMUIV_yhQFUS5gy6bE,40673
193
- cirq/experiments/qubit_characterizations_test.py,sha256=RZzyuQwYm9tHtQSZLigJnQcyhZdCzE7OiuyETQSiHxo,10319
202
+ cirq/experiments/qubit_characterizations.py,sha256=RO-gxOI_7n4HhGOmumgLGacV4Ve8bAY_s7XyxkOTUjo,40887
203
+ cirq/experiments/qubit_characterizations_test.py,sha256=maQmdNAWwZ15OcUDe0gqu7irYOK8ldwF1CVBY53rmxY,10971
194
204
  cirq/experiments/random_quantum_circuit_generation.py,sha256=pV6ubukLLdfPXLvJD2t979rVDCOTM32X6SB65vExeE4,28012
195
205
  cirq/experiments/random_quantum_circuit_generation_test.py,sha256=4GSfUK2hw2r90JAO7R2zSBqjtwWi8vXuAhw-iK6quwY,16512
196
206
  cirq/experiments/readout_confusion_matrix.py,sha256=qK6qDoNRuIHGTV7PS8xGkS7tCXGGyoDfUJJj6575-cE,20664
@@ -301,7 +311,7 @@ cirq/ops/eigen_gate.py,sha256=OoUpOwHw6VZ2CpH0Qb-eQLD4c-cjj8wFwBr8NEc7C0g,17788
301
311
  cirq/ops/eigen_gate_test.py,sha256=3ZN7texyQ_svk8YAaH3liZiGAgq_SBpNb46nIzKYfWM,16909
302
312
  cirq/ops/fourier_transform.py,sha256=JMledJB0tPjLlIlG9bfapJSqass94rXkAheXragQxq8,7455
303
313
  cirq/ops/fourier_transform_test.py,sha256=sX5TfZd9-n1WTyZcqOQ0x6yyI8k6rasywijMo3bc1ls,6426
304
- cirq/ops/fsim_gate.py,sha256=xsk5xfEaUTcGeGV852KTuoE7mxlCHEXg2HZlyiszkd0,20035
314
+ cirq/ops/fsim_gate.py,sha256=Qs7FLsNXR7K2jNVZ8I9o9YLvOb6cC6iBnAvZAHERNk0,20037
305
315
  cirq/ops/fsim_gate_test.py,sha256=QgckC2fij30grZJoO6HnQHdGkKcwtiegedEBRid3wF0,25858
306
316
  cirq/ops/gate_features.py,sha256=OfjsIGftnGpNUDAYwSP4obG0FsMrHYfp49ZOjbvbmNE,1085
307
317
  cirq/ops/gate_features_test.py,sha256=JYPunTBr48CQoIOB1wk2QEdPwtnmE-FxUoF6a4ZeRB8,2407
@@ -414,8 +424,8 @@ cirq/protocols/inverse_protocol.py,sha256=tHaY8-dfd0SD59v3DZ_zpwz7lwFrraPExEnIgn
414
424
  cirq/protocols/inverse_protocol_test.py,sha256=5RoZfSRzBvpGpLdg1XKYdB6qy-GkDvZsATUvxdFrLJ0,2067
415
425
  cirq/protocols/json_serialization.py,sha256=z7Yu2vsNabRkdeYyIuNCoXATHkrOGreTRShNyN0Fjuc,24520
416
426
  cirq/protocols/json_serialization_test.py,sha256=An57W8eBWaUF4kKOCos2UlHzNiILnUJvqmZLmwZ_6MA,27872
417
- cirq/protocols/kraus_protocol.py,sha256=xNcjUBjxLOcsWRDkv7wdJ51iUvDhtHpxy_vXhhc2Gyw,10735
418
- cirq/protocols/kraus_protocol_test.py,sha256=yw0WEXYNEOgA7xJB9UMIGbHRn2HJwPa88LKOoOuvRWc,7959
427
+ cirq/protocols/kraus_protocol.py,sha256=WjZDM_31MiOoAXbocrmkdBUTIr4UReRZXiLk2-3FCn8,11406
428
+ cirq/protocols/kraus_protocol_test.py,sha256=NCgkPoGuSki7VGqbnRUDsuhpFlvDJEAcJGzeLpImz6Q,8236
419
429
  cirq/protocols/measurement_key_protocol.py,sha256=JU7XbZfR7o6Wcv5qRJisp3ZAWwW9Fx7OHtxNMrWtZoQ,13351
420
430
  cirq/protocols/measurement_key_protocol_test.py,sha256=PqSU9uB4t2yvPz9hZBLby2mZnZo-DOLlx3HIicyPeLo,8768
421
431
  cirq/protocols/mixture_protocol.py,sha256=A8J-kkwUqiQphw6d3DK3QZ-lP31DTWv475ZzdeqYA0w,6428
@@ -1171,7 +1181,7 @@ cirq/value/angle.py,sha256=6YP1RWv8IrruvgxvqlCYxcabYRE8bXrbV_Jx66Jfuvs,3285
1171
1181
  cirq/value/angle_test.py,sha256=jKLd1hkY-Tb22krD-WkJjfqFy9EJIIZCAL57__FgW_c,3608
1172
1182
  cirq/value/classical_data.py,sha256=mPkDGZb4I0a1qSgY-T01NLzkJSgSpKpU_o_EQQEn3mc,11517
1173
1183
  cirq/value/classical_data_test.py,sha256=q1QMT17E-X9kcaPw1oQqx3Hwnq3hyht24HaK3z7Udpo,5332
1174
- cirq/value/condition.py,sha256=sl2ol2vyVIQba3YQVXqVI_IgglFMGcDlw7vrCjo9wFk,11920
1184
+ cirq/value/condition.py,sha256=lJJcFiqG-r68DhhS01DS6HhQw0pDwbNq71bvH1Famec,11916
1175
1185
  cirq/value/condition_test.py,sha256=oEdim5nOYYY8UPU91H2xhb9MH8EC2WbMXTQ_DruHVO0,12949
1176
1186
  cirq/value/digits.py,sha256=-3HTHqEQqy5evUz8aLE6ruw0NV3ncuPrc5asRMQ-sQ4,6063
1177
1187
  cirq/value/digits_test.py,sha256=WDeUQTnDqZXh4JjWu_qEkzCFAtd8x1UlN9I2yjdDV3g,3848
@@ -1224,8 +1234,8 @@ cirq/work/sampler.py,sha256=rxbMWvrhu3gfNSBjZKozw28lLKVvBAS_1EGyPdYe8Xg,19041
1224
1234
  cirq/work/sampler_test.py,sha256=SsMrRvLDYELyOAWLKISjkdEfrBwLYWRsT6D8WrsLM3Q,13533
1225
1235
  cirq/work/zeros_sampler.py,sha256=Fs2JWwq0n9zv7_G5Rm-9vPeHUag7uctcMOHg0JTkZpc,2371
1226
1236
  cirq/work/zeros_sampler_test.py,sha256=lQLgQDGBLtfImryys2HzQ2jOSGxHgc7-koVBUhv8qYk,3345
1227
- cirq_core-1.6.0.dev20250722181350.dist-info/licenses/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
1228
- cirq_core-1.6.0.dev20250722181350.dist-info/METADATA,sha256=kRx1cAUdxh87C7nuuzNgvNYFlP2sVjVj5BgcyhFC55s,4857
1229
- cirq_core-1.6.0.dev20250722181350.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1230
- cirq_core-1.6.0.dev20250722181350.dist-info/top_level.txt,sha256=Sz9iOxHU0IEMLSFGwiwOCaN2e9K-jFbBbtpPN1hB73g,5
1231
- cirq_core-1.6.0.dev20250722181350.dist-info/RECORD,,
1237
+ cirq_core-1.6.1.dist-info/licenses/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
1238
+ cirq_core-1.6.1.dist-info/METADATA,sha256=CYq7KrVl993qWX4h-Kud2p3-DAvqGKle_JnuXgGL_Io,4839
1239
+ cirq_core-1.6.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1240
+ cirq_core-1.6.1.dist-info/top_level.txt,sha256=Sz9iOxHU0IEMLSFGwiwOCaN2e9K-jFbBbtpPN1hB73g,5
1241
+ cirq_core-1.6.1.dist-info/RECORD,,