cirq-core 1.5.0.dev20240805211201__py3-none-any.whl → 1.5.0.dev20240807173926__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.dev20240805211201"
31
+ __version__ = "1.5.0.dev20240807173926"
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.dev20240805211201"
6
+ assert cirq.__version__ == "1.5.0.dev20240807173926"
@@ -21,6 +21,7 @@ component operations in order, including any nested CircuitOperations.
21
21
  import math
22
22
  from functools import cached_property
23
23
  from typing import (
24
+ Any,
24
25
  Callable,
25
26
  cast,
26
27
  Dict,
@@ -508,6 +509,16 @@ class CircuitOperation(ops.Operation):
508
509
  def __hash__(self) -> int:
509
510
  return self._hash
510
511
 
512
+ def __getstate__(self) -> Dict[str, Any]:
513
+ # clear cached hash value when pickling, see #6674
514
+ state = self.__dict__
515
+ # cached_property stores value in the property-named attribute
516
+ hash_attr = "_hash"
517
+ if hash_attr in state:
518
+ state = state.copy()
519
+ del state[hash_attr]
520
+ return state
521
+
511
522
  def _json_dict_(self):
512
523
  resp = {
513
524
  'circuit': self.circuit,
@@ -119,10 +119,10 @@ class FrozenCircuit(AbstractCircuit, protocols.SerializableByKey):
119
119
  def __getstate__(self):
120
120
  # Don't save hash when pickling; see #3777.
121
121
  state = self.__dict__
122
- hash_cache = _compat._method_cache_name(self.__hash__)
123
- if hash_cache in state:
122
+ hash_attr = _compat._method_cache_name(self.__hash__)
123
+ if hash_attr in state:
124
124
  state = state.copy()
125
- del state[hash_cache]
125
+ del state[hash_attr]
126
126
  return state
127
127
 
128
128
  @_compat.cached_method
cirq/circuits/moment.py CHANGED
@@ -365,6 +365,15 @@ class Moment:
365
365
  def __hash__(self):
366
366
  return hash((Moment, self._sorted_operations_()))
367
367
 
368
+ def __getstate__(self) -> Dict[str, Any]:
369
+ # clear cached hash value when pickling, see #6674
370
+ state = self.__dict__
371
+ hash_attr = _compat._method_cache_name(self.__hash__)
372
+ if hash_attr in state:
373
+ state = state.copy()
374
+ del state[hash_attr]
375
+ return state
376
+
368
377
  def __iter__(self) -> Iterator['cirq.Operation']:
369
378
  return iter(self.operations)
370
379
 
@@ -230,6 +230,10 @@ class GridQid(_BaseGridQid):
230
230
  """Returns a tuple of (args, kwargs) to pass to __new__ when unpickling."""
231
231
  return (self._row, self._col), {"dimension": self._dimension}
232
232
 
233
+ # avoid pickling the _hash value, attributes are already stored with __getnewargs_ex__
234
+ def __getstate__(self) -> Dict[str, Any]:
235
+ return {}
236
+
233
237
  def _with_row_col(self, row: int, col: int) -> 'GridQid':
234
238
  return GridQid(row, col, dimension=self._dimension)
235
239
 
@@ -387,6 +391,10 @@ class GridQubit(_BaseGridQid):
387
391
  """Returns a tuple of args to pass to __new__ when unpickling."""
388
392
  return (self._row, self._col)
389
393
 
394
+ # avoid pickling the _hash value, attributes are already stored with __getnewargs__
395
+ def __getstate__(self) -> Dict[str, Any]:
396
+ return {}
397
+
390
398
  def _with_row_col(self, row: int, col: int) -> 'GridQubit':
391
399
  return GridQubit(row, col)
392
400
 
@@ -207,6 +207,10 @@ class LineQid(_BaseLineQid):
207
207
  """Returns a tuple of args to pass to __new__ when unpickling."""
208
208
  return (self._x, self._dimension)
209
209
 
210
+ # avoid pickling the _hash value, attributes are already stored with __getnewargs__
211
+ def __getstate__(self) -> Dict[str, Any]:
212
+ return {}
213
+
210
214
  def _with_x(self, x: int) -> 'LineQid':
211
215
  return LineQid(x, dimension=self._dimension)
212
216
 
@@ -308,6 +312,10 @@ class LineQubit(_BaseLineQid):
308
312
  """Returns a tuple of args to pass to __new__ when unpickling."""
309
313
  return (self._x,)
310
314
 
315
+ # avoid pickling the _hash value, attributes are already stored with __getnewargs__
316
+ def __getstate__(self) -> Dict[str, Any]:
317
+ return {}
318
+
311
319
  def _with_x(self, x: int) -> 'LineQubit':
312
320
  return LineQubit(x)
313
321
 
@@ -80,7 +80,7 @@ class BooleanHamiltonianGate(raw_types.Gate):
80
80
  return (2,) * len(self._parameter_names)
81
81
 
82
82
  def _value_equality_values_(self) -> Any:
83
- return self._parameter_names, self._boolean_strs, self._theta
83
+ return tuple(self._parameter_names), tuple(self._boolean_strs), self._theta
84
84
 
85
85
  def _json_dict_(self) -> Dict[str, Any]:
86
86
  return {
@@ -131,7 +131,7 @@ class AsymmetricDepolarizingChannel(raw_types.Gate):
131
131
  return True
132
132
 
133
133
  def _value_equality_values_(self):
134
- return self._num_qubits, hash(tuple(sorted(self._error_probabilities.items())))
134
+ return self._num_qubits, tuple(sorted(self._error_probabilities.items()))
135
135
 
136
136
  def __repr__(self) -> str:
137
137
  return 'cirq.asymmetric_depolarize(' + f"error_probabilities={self._error_probabilities})"
cirq/ops/named_qubit.py CHANGED
@@ -134,6 +134,10 @@ class NamedQid(_BaseNamedQid):
134
134
  """Returns a tuple of args to pass to __new__ when unpickling."""
135
135
  return (self._name, self._dimension)
136
136
 
137
+ # avoid pickling the _hash value, attributes are already stored with __getnewargs__
138
+ def __getstate__(self) -> Dict[str, Any]:
139
+ return {}
140
+
137
141
  def __repr__(self) -> str:
138
142
  return f'cirq.NamedQid({self._name!r}, dimension={self._dimension})'
139
143
 
@@ -202,6 +206,10 @@ class NamedQubit(_BaseNamedQid):
202
206
  """Returns a tuple of args to pass to __new__ when unpickling."""
203
207
  return (self._name,)
204
208
 
209
+ # avoid pickling the _hash value, attributes are already stored with __getnewargs__
210
+ def __getstate__(self) -> Dict[str, Any]:
211
+ return {}
212
+
205
213
  def __str__(self) -> str:
206
214
  return self._name
207
215
 
cirq/ops/raw_types.py CHANGED
@@ -41,7 +41,7 @@ import sympy
41
41
 
42
42
  from cirq import protocols, value
43
43
  from cirq._import import LazyLoader
44
- from cirq._compat import __cirq_debug__, cached_method
44
+ from cirq._compat import __cirq_debug__, _method_cache_name, cached_method
45
45
  from cirq.type_workarounds import NotImplementedType
46
46
  from cirq.ops import control_values as cv
47
47
 
@@ -115,6 +115,15 @@ class Qid(metaclass=abc.ABCMeta):
115
115
  def __hash__(self) -> int:
116
116
  return hash((Qid, self._comparison_key()))
117
117
 
118
+ def __getstate__(self) -> Dict[str, Any]:
119
+ # clear cached hash value when pickling, see #6674
120
+ state = self.__dict__
121
+ hash_attr = _method_cache_name(self.__hash__)
122
+ if hash_attr in state:
123
+ state = state.copy()
124
+ del state[hash_attr]
125
+ return state
126
+
118
127
  def __eq__(self, other):
119
128
  if not isinstance(other, Qid):
120
129
  return NotImplemented
@@ -0,0 +1,111 @@
1
+ # Copyright 2024 The Cirq Developers
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # https://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from __future__ import annotations
16
+
17
+ import multiprocessing
18
+ import os
19
+ import pathlib
20
+ import pickle
21
+ from collections.abc import Iterator
22
+ from typing import Any, Hashable
23
+
24
+ import pytest
25
+
26
+ import cirq
27
+ from cirq.protocols.json_serialization_test import MODULE_TEST_SPECS
28
+
29
+ _EXCLUDE_JSON_FILES = (
30
+ # sympy - related objects
31
+ "cirq/protocols/json_test_data/sympy.Add.json",
32
+ "cirq/protocols/json_test_data/sympy.E.json",
33
+ "cirq/protocols/json_test_data/sympy.Equality.json",
34
+ "cirq/protocols/json_test_data/sympy.EulerGamma.json",
35
+ "cirq/protocols/json_test_data/sympy.Float.json",
36
+ "cirq/protocols/json_test_data/sympy.GreaterThan.json",
37
+ "cirq/protocols/json_test_data/sympy.Integer.json",
38
+ "cirq/protocols/json_test_data/sympy.LessThan.json",
39
+ "cirq/protocols/json_test_data/sympy.Mul.json",
40
+ "cirq/protocols/json_test_data/sympy.Pow.json",
41
+ "cirq/protocols/json_test_data/sympy.Rational.json",
42
+ "cirq/protocols/json_test_data/sympy.StrictGreaterThan.json",
43
+ "cirq/protocols/json_test_data/sympy.StrictLessThan.json",
44
+ "cirq/protocols/json_test_data/sympy.Symbol.json",
45
+ "cirq/protocols/json_test_data/sympy.Unequality.json",
46
+ "cirq/protocols/json_test_data/sympy.pi.json",
47
+ # RigettiQCSAspenDevice does not pickle
48
+ "cirq_rigetti/json_test_data/RigettiQCSAspenDevice.json",
49
+ # TODO(#6674,pavoljuhas) - fix pickling of ProjectorSum
50
+ "cirq/protocols/json_test_data/ProjectorSum.json",
51
+ )
52
+
53
+
54
+ def _is_included(json_filename: str) -> bool:
55
+ json_posix_path = pathlib.PurePath(json_filename).as_posix()
56
+ if any(json_posix_path.endswith(t) for t in _EXCLUDE_JSON_FILES):
57
+ return False
58
+ if not os.path.isfile(json_filename):
59
+ return False
60
+ return True
61
+
62
+
63
+ @pytest.fixture(scope='module')
64
+ def pool() -> Iterator[multiprocessing.pool.Pool]:
65
+ ctx = multiprocessing.get_context("spawn")
66
+ with ctx.Pool(1) as pool:
67
+ yield pool
68
+
69
+
70
+ def _read_json(json_filename: str) -> Any:
71
+ obj = cirq.read_json(json_filename)
72
+ obj = obj[0] if isinstance(obj, list) else obj
73
+ # trigger possible caching of the hash value
74
+ if isinstance(obj, Hashable):
75
+ _ = hash(obj)
76
+ return obj
77
+
78
+
79
+ def test_exclude_json_files_has_valid_entries() -> None:
80
+ """Verify _EXCLUDE_JSON_FILES has valid entries."""
81
+ # do not check rigetti files if not installed
82
+ skip_rigetti = all(m.name != "cirq_rigetti" for m in MODULE_TEST_SPECS)
83
+ json_file_validates = lambda f: any(
84
+ m.test_data_path.joinpath(os.path.basename(f)).is_file() for m in MODULE_TEST_SPECS
85
+ ) or (skip_rigetti and f.startswith("cirq_rigetti/"))
86
+ invalid_json_paths = [f for f in _EXCLUDE_JSON_FILES if not json_file_validates(f)]
87
+ assert invalid_json_paths == []
88
+
89
+
90
+ @pytest.mark.parametrize(
91
+ 'json_filename',
92
+ [
93
+ f"{abs_path}.json"
94
+ for m in MODULE_TEST_SPECS
95
+ for abs_path in m.all_test_data_keys()
96
+ if _is_included(f"{abs_path}.json")
97
+ ],
98
+ )
99
+ def test_hash_from_pickle(json_filename: str, pool: multiprocessing.pool.Pool):
100
+ obj_local = _read_json(json_filename)
101
+ if not isinstance(obj_local, Hashable):
102
+ return
103
+ # check if pickling works in the main process for the sake of debugging
104
+ obj_copy = pickle.loads(pickle.dumps(obj_local))
105
+ assert obj_copy == obj_local
106
+ assert hash(obj_copy) == hash(obj_local)
107
+ # Read and hash the object in a separate worker process and then
108
+ # send it back which requires pickling and unpickling.
109
+ obj_worker = pool.apply(_read_json, [json_filename])
110
+ assert obj_worker == obj_local
111
+ assert hash(obj_worker) == hash(obj_local)
@@ -17,7 +17,7 @@ from typing import Any, Dict, List, Optional, Sequence, TYPE_CHECKING
17
17
  import numpy as np
18
18
 
19
19
  from cirq import protocols
20
- from cirq._compat import proper_repr, cached_method
20
+ from cirq._compat import proper_repr, _method_cache_name, cached_method
21
21
  from cirq.qis import quantum_state_representation
22
22
  from cirq.value import big_endian_int_to_digits, linear_dict, random_state
23
23
 
@@ -658,3 +658,12 @@ class CliffordTableau(StabilizerState):
658
658
  @cached_method
659
659
  def __hash__(self) -> int:
660
660
  return hash(self.matrix().tobytes() + self.rs.tobytes())
661
+
662
+ def __getstate__(self) -> Dict[str, Any]:
663
+ # clear cached hash value when pickling, see #6674
664
+ state = self.__dict__
665
+ hash_attr = _method_cache_name(self.__hash__)
666
+ if hash_attr in state:
667
+ state = state.copy()
668
+ del state[hash_attr]
669
+ return state
@@ -188,7 +188,7 @@ class CliffordSimulatorStepResult(
188
188
  return self._clifford_state
189
189
 
190
190
 
191
- @value.value_equality
191
+ @value.value_equality(unhashable=True)
192
192
  class CliffordState:
193
193
  """A state of the Clifford simulation.
194
194
 
@@ -20,7 +20,7 @@ from cirq import protocols, qis, value
20
20
  from cirq.value import big_endian_int_to_digits, random_state
21
21
 
22
22
 
23
- @value.value_equality
23
+ @value.value_equality(unhashable=True)
24
24
  class StabilizerStateChForm(qis.StabilizerState):
25
25
  r"""A representation of stabilizer states using the CH form,
26
26
 
cirq/study/resolver.py CHANGED
@@ -244,6 +244,14 @@ class ParamResolver:
244
244
  self._param_hash = hash(frozenset(self._param_dict.items()))
245
245
  return self._param_hash
246
246
 
247
+ def __getstate__(self) -> Dict[str, Any]:
248
+ # clear cached hash value when pickling, see #6674
249
+ state = self.__dict__
250
+ if state["_param_hash"] is not None:
251
+ state = state.copy()
252
+ state["_param_hash"] = None
253
+ return state
254
+
247
255
  def __eq__(self, other):
248
256
  if not isinstance(other, ParamResolver):
249
257
  return NotImplemented
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- from typing import FrozenSet, Mapping, Optional, Tuple
15
+ from typing import Any, Dict, FrozenSet, Mapping, Optional, Tuple
16
16
 
17
17
  import dataclasses
18
18
 
@@ -77,6 +77,14 @@ class MeasurementKey:
77
77
  object.__setattr__(self, '_hash', hash(str(self)))
78
78
  return self._hash
79
79
 
80
+ def __getstate__(self) -> Dict[str, Any]:
81
+ # clear cached hash value when pickling, see #6674
82
+ state = self.__dict__
83
+ if "_hash" in state:
84
+ state = state.copy()
85
+ del state["_hash"]
86
+ return state
87
+
80
88
  def __lt__(self, other):
81
89
  if isinstance(other, MeasurementKey):
82
90
  if self.path != other.path:
@@ -13,7 +13,7 @@
13
13
  # limitations under the License.
14
14
  """Defines `@cirq.value_equality`, for easy __eq__/__hash__ methods."""
15
15
 
16
- from typing import Any, Callable, Optional, overload, Union
16
+ from typing import Any, Callable, Dict, Optional, overload, Union
17
17
 
18
18
  from typing_extensions import Protocol
19
19
 
@@ -110,6 +110,16 @@ def _value_equality_approx_eq(
110
110
  )
111
111
 
112
112
 
113
+ def _value_equality_getstate(self: _SupportsValueEquality) -> Dict[str, Any]:
114
+ # clear cached hash value when pickling, see #6674
115
+ state = self.__dict__
116
+ hash_attr = _compat._method_cache_name(self.__hash__)
117
+ if hash_attr in state:
118
+ state = state.copy()
119
+ del state[hash_attr]
120
+ return state
121
+
122
+
113
123
  # pylint: disable=function-redefined
114
124
  @overload
115
125
  def value_equality(
@@ -228,6 +238,8 @@ def value_equality(
228
238
  cached_values_getter = values_getter if unhashable else _compat.cached_method(values_getter)
229
239
  setattr(cls, '_value_equality_values_', cached_values_getter)
230
240
  setattr(cls, '__hash__', None if unhashable else _compat.cached_method(_value_equality_hash))
241
+ if not unhashable:
242
+ setattr(cls, '__getstate__', _value_equality_getstate)
231
243
  setattr(cls, '__eq__', _value_equality_eq)
232
244
  setattr(cls, '__ne__', _value_equality_ne)
233
245
 
@@ -109,6 +109,9 @@ class ObservableMeasuredResult:
109
109
  repetitions: int
110
110
  circuit_params: Mapping[Union[str, sympy.Expr], Union[value.Scalar, sympy.Expr]]
111
111
 
112
+ # unhashable because of the mapping-type circuit_params attribute
113
+ __hash__ = None # type: ignore
114
+
112
115
  def __repr__(self):
113
116
  # I wish we could use the default dataclass __repr__ but
114
117
  # we need to prefix our class name with `cirq.work.`
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cirq-core
3
- Version: 1.5.0.dev20240805211201
3
+ Version: 1.5.0.dev20240807173926
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=XZsYzwUTP3GE8GG6WR0xCcyMF10fnGFnS52n1yBae2k,1206
8
- cirq/_version_test.py,sha256=7G2N-4Ol8pCnhJ151gJUy7wns3PMIDyZQEpLETh3-sA,147
7
+ cirq/_version.py,sha256=jvby6efB3zbe4ahafK4kKy13_e_C0VNd6OXgl1c15K4,1206
8
+ cirq/_version_test.py,sha256=r5EpZqLFuek4oLn_CnINb5NHRsLsYyE1kuF54es-zH4,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
@@ -18,14 +18,14 @@ cirq/circuits/_box_drawing_character_data_test.py,sha256=XO94z0piwZRHaNZHTf-5tKH
18
18
  cirq/circuits/_bucket_priority_queue.py,sha256=hxFuii2fKD8G6EKT_aVLEsA7FmSfqFXPwIbA0KsoSC4,6745
19
19
  cirq/circuits/_bucket_priority_queue_test.py,sha256=t6u_hG7K2e2WKWrgCsKxNRtp4ghKwiCrp0_WSY0W25k,5288
20
20
  cirq/circuits/circuit.py,sha256=XIwQh9Gkb8ya4Q2Q92EfsAUh9W6YZemcGqlu1cZCi2s,114620
21
- cirq/circuits/circuit_operation.py,sha256=D4u8jDD4fGOca1xnZPN1obuKTIouXENUfnxOF2JrwgU,34375
21
+ cirq/circuits/circuit_operation.py,sha256=cdcx8vxzATR-qmpYV2p1Bya98tvru3JndSUU1T-XJr0,34737
22
22
  cirq/circuits/circuit_operation_test.py,sha256=u-23dDZ6htNSiP8oXR67rmtb-XDBmObvbJjJrARhmis,44646
23
23
  cirq/circuits/circuit_test.py,sha256=sRZC558PZZZUHByZ1R00_j8ez6TL9l5ZmT8YLGopH_Q,160117
24
- cirq/circuits/frozen_circuit.py,sha256=_0SkmIiQ4UjIug-k_iO00ulDFoFnxmAHvXX2I2HHN8k,9262
24
+ cirq/circuits/frozen_circuit.py,sha256=s-OWD4ngioE41NG1jQJbLrJd7dP283aYn7IOahbJQw4,9259
25
25
  cirq/circuits/frozen_circuit_test.py,sha256=rHyii8hLhOQ6jdA8dC1OcYPGnyeBC4uY5Q53XspkkCk,4133
26
26
  cirq/circuits/insert_strategy.py,sha256=L0OLXuo24TtBfdJGOAG2PsVDMrbvQl4iN5lUk6IPuyo,2851
27
27
  cirq/circuits/insert_strategy_test.py,sha256=dgz13_ssa_GWqzzx5W4G4sJJw4SUHC3-g3K0_Z4TRiA,686
28
- cirq/circuits/moment.py,sha256=KirArxosPcoin5yxfnG4tWVzB0A6OjZGws_LJcK5Sfo,25864
28
+ cirq/circuits/moment.py,sha256=ABYiqNVUKbUrZUDxGvKLZKOq8pgoZgf3K6DzPSGtaQw,26180
29
29
  cirq/circuits/moment_test.py,sha256=SAZR-BxNiFaYaPLKLN59LCBqxvBMrVJWa-js1kfhOZA,26905
30
30
  cirq/circuits/optimization_pass.py,sha256=uw3ne0-ebZo6GNjwfQMuQ3b5u9RCgyaXRfhpbljlxao,6468
31
31
  cirq/circuits/optimization_pass_test.py,sha256=eQB0NBJ9EvqjgSFGQMgaHIh5niQhksdnvqSXhsj3nOg,5947
@@ -155,11 +155,11 @@ cirq/devices/device.py,sha256=9rUZwpbbmqk8AUVH4N4KfJ59j5im7hVgDJAHtN9iH_0,5361
155
155
  cirq/devices/device_test.py,sha256=v3gT6jrGLLfYnZbTizIaIMkI3s5_xVM3OV9JQchvAxY,1124
156
156
  cirq/devices/grid_device_metadata.py,sha256=h4Xo_PaiZqQSVUgb1ctVtYYYE2tNik2KQhCgooilZrE,8629
157
157
  cirq/devices/grid_device_metadata_test.py,sha256=IeOqYOZcUGhB4ivuQW2g0Q9dt-zFA0H6Dav6yv6Lul0,8592
158
- cirq/devices/grid_qubit.py,sha256=gB8PKjYlVjKV1DMr0w5rHKY6L0PlH2U2SZpogPbnF2k,18484
158
+ cirq/devices/grid_qubit.py,sha256=CeR3ILjzN6H6UjOp2KBhxOoVSjX1TFaAUvbmsU-uGuQ,18793
159
159
  cirq/devices/grid_qubit_test.py,sha256=EzI8dWWnCfYbwruwsKlBzb41lQTA6AEOB2X16oQAz-0,14044
160
160
  cirq/devices/insertion_noise_model.py,sha256=-X07pSTp-lxQj6AQT_89gTHx_jKtI9GSMrD4dozCwTs,3614
161
161
  cirq/devices/insertion_noise_model_test.py,sha256=i9jB257VXO5wi5QdDO5G4tphx5RKMaouUsdsQT3kiBU,3992
162
- cirq/devices/line_qubit.py,sha256=H-a6j_jgVZp-14osEyXf2hYjvDDUXa7QBEuA3tJFEG0,11519
162
+ cirq/devices/line_qubit.py,sha256=q7rqUx8Pda3hlL8u6Zu2Ufe0eI5IN5m8Kz_oyBV_yTw,11825
163
163
  cirq/devices/line_qubit_test.py,sha256=_X1ofFHtuo0myFfsu1nlTJf9OLuLWRgZHHW2VG23ERY,9547
164
164
  cirq/devices/named_topologies.py,sha256=grFXvi0UDHZl1pRyHDWSqjub3xF_Yf7RLXfMAZbyoEA,15790
165
165
  cirq/devices/named_topologies_test.py,sha256=Nj_tlGmqPH7IVUzpUHPnAPlfUWhSGbZsIHdsLLjxIZs,4736
@@ -265,13 +265,13 @@ cirq/neutral_atoms/neutral_atom_devices.py,sha256=s-LInrNp8k_txKbpLWfsaoiZvUScOW
265
265
  cirq/ops/__init__.py,sha256=7xt2bPwndo2OhuLLnI5GwBpG9rZHlt1rv7cp-bOBmxM,5455
266
266
  cirq/ops/arithmetic_operation.py,sha256=PBqIwOfADRlsij11Lo1ao_OZM-O8PDlObgZBxGKsYKs,10125
267
267
  cirq/ops/arithmetic_operation_test.py,sha256=axy8xy9IvDb-ATUV-LE1HNWRqCEz06VyZWVrLNOtXXI,4942
268
- cirq/ops/boolean_hamiltonian.py,sha256=hjmzBvWiZnb18JfdhId-dVxt2VmbyAbqMSFAPWV7s7I,14883
268
+ cirq/ops/boolean_hamiltonian.py,sha256=1SMdoZtcGnR3xFnS9pjVJNbOXZKqxf4XVikEVNDblFI,14897
269
269
  cirq/ops/boolean_hamiltonian_test.py,sha256=1ey5yfYZPKZDsfM3jpCPAOpbPs_y8i4K_WvDK2d5_4Y,8518
270
270
  cirq/ops/classically_controlled_operation.py,sha256=bMqKutwzqbvN2r7mOVOI12HTPDGSJLkhQQgfAcTtbDU,9166
271
271
  cirq/ops/classically_controlled_operation_test.py,sha256=MNU0Adff4kTosqsrQ3PUT3ARcZee_PkchT6u0xDl8Qg,48039
272
272
  cirq/ops/clifford_gate.py,sha256=ARbHGptZxQo6kX9QTrh_kZ89N7lW6V3GQSE3o-1kixU,39366
273
273
  cirq/ops/clifford_gate_test.py,sha256=NF_if1X8LCMA9hy0vBO7lxvVPdumlvMMnI2XRQ-RLpk,37472
274
- cirq/ops/common_channels.py,sha256=mVGEta2wnaWOhRCXQO6gUj9Zll3rtXqpY-PRYcJ8m1U,38282
274
+ cirq/ops/common_channels.py,sha256=h2BlRs1qCz96qZmcOgXMWOVLjvvGtl4yb-r8XqyQVjM,38276
275
275
  cirq/ops/common_channels_test.py,sha256=EL_PxbqD3KPC8ioihiukhmW8bUdclqqigKoFyUQpmIM,29690
276
276
  cirq/ops/common_gate_families.py,sha256=e5M8wlDYtdrpWBrhdns6iizIvSqzfxDyIsBdxt8hVMc,8611
277
277
  cirq/ops/common_gate_families_test.py,sha256=Oo3C7BPO3gt3ePuqwsI_lx_lY38et8Ps4AuVydX2Aww,5275
@@ -317,7 +317,7 @@ cirq/ops/measurement_gate.py,sha256=4nZPQ-ckEu8Atv1HGlDUPvXjP4WOlub-O-yPHK28GBw,
317
317
  cirq/ops/measurement_gate_test.py,sha256=XfTDqbYUUc7zsMURh7D3jo8DwKWVVT9uJRBvtTm8Frk,18308
318
318
  cirq/ops/mixed_unitary_channel.py,sha256=k3O4ovH3bFs1WnAZc647IgCK8thC5JnTGxsCzjBacEY,5259
319
319
  cirq/ops/mixed_unitary_channel_test.py,sha256=x8LIAea2KcutNupnRJ_cLy1kmxhbUh3K3BkZtg3OkKQ,5058
320
- cirq/ops/named_qubit.py,sha256=dcm9Fv8zqlO9vV7-QAcLTEG4UJCHCIyL3SomZGjKImU,9700
320
+ cirq/ops/named_qubit.py,sha256=niAsH7m32n3lEVIcy1nnVDPkPqk6PY2qlriz7mzgZmk,10006
321
321
  cirq/ops/named_qubit_test.py,sha256=mtJVRe4JzFSNckMQJSGCj1P0VBtpGh--6YxKbIEE3TQ,5221
322
322
  cirq/ops/op_tree.py,sha256=iXsIFcQCciU7C9SiPxhd_zrp4TBGCsmnqxKDjUl1aEo,6159
323
323
  cirq/ops/op_tree_test.py,sha256=h4phqrxQwYAfyu8o4f_fLi3WP2kdVuzWqrSCWGLHo_c,5575
@@ -358,7 +358,7 @@ cirq/ops/qubit_order_or_list.py,sha256=WVnhQcOYCgAhiB4t47Kji-pN1tnvs--X5deCQwwGV
358
358
  cirq/ops/qubit_order_test.py,sha256=B9xMIxlaI7YjRUNA6AkHJuUCFejGYw-lT7ZaSl31yTU,4238
359
359
  cirq/ops/random_gate_channel.py,sha256=gKDqZa6AwdCIuuh2UOvO5oxCdGRDOInA7fI3ZLQ-LTY,5121
360
360
  cirq/ops/random_gate_channel_test.py,sha256=U3EAaAlCZkgFIYxqwcSkPsaVGrKA2PSeG_DK2ou--AE,8606
361
- cirq/ops/raw_types.py,sha256=XJcbvBc5SgGELEk7LSnjPGVpq6OLOCoZt0FIzOCjBbc,39962
361
+ cirq/ops/raw_types.py,sha256=hbUwUufTLP7pBICDagQJwYb4BNmZ49IB4uilyR2YLjs,40290
362
362
  cirq/ops/raw_types_test.py,sha256=RWUiB2TypXxbDTVaetQ7h-buGScUcQgY6YsFkmodZGY,33484
363
363
  cirq/ops/state_preparation_channel.py,sha256=PjVtoLbjBAy_XqnFAY40Am-NifeuCFVVLW6RJxph5sQ,4778
364
364
  cirq/ops/state_preparation_channel_test.py,sha256=yKUvLw_ft6cvIgRJcFQ779wZS-V6V-pzQq-rZRWdCmU,5922
@@ -399,6 +399,7 @@ cirq/protocols/has_stabilizer_effect_protocol.py,sha256=XH6Lv9SGuYhuuSB0mi5v8Eg5
399
399
  cirq/protocols/has_stabilizer_effect_protocol_test.py,sha256=0ia7ehyGpmscjRP448dBANZKwnlbqSODdPUYRUhDEN0,3879
400
400
  cirq/protocols/has_unitary_protocol.py,sha256=inj17qr8Pz2Zofj0Lsp2o7TWlfmdU1TybtRjs1TWVow,5372
401
401
  cirq/protocols/has_unitary_protocol_test.py,sha256=IjmJ3dqvteFUUO4FLwCTokgUvYy8H2HJjLmTDzt2__Q,5610
402
+ cirq/protocols/hash_from_pickle_test.py,sha256=M95CrhwfXpavflvSetxUF7Qsm8boHoki4fZy2Tdijl8,4176
402
403
  cirq/protocols/inverse_protocol.py,sha256=CEqtGRRj86WQyyALonRXxQrNq-fENOs_Zqrlr_BVau8,4115
403
404
  cirq/protocols/inverse_protocol_test.py,sha256=pqqIU4_G4Npc9Z-SeoM9eCB2T5JRTeI02NCXhP0UtaI,2017
404
405
  cirq/protocols/json_serialization.py,sha256=Otrrzsi74rfE_2wbK-xBUI3QzQaRnEXqsY1D_ktW4jk,24360
@@ -877,7 +878,7 @@ cirq/protocols/json_test_data/sympy.pi.repr,sha256=ZQS0my0esr3dWTZ3mWlqgR63uorPC
877
878
  cirq/qis/__init__.py,sha256=YxFbb_S4mnR1OlAiiz8rst8vtU7o_1DBr0-YjMeROJA,1903
878
879
  cirq/qis/channels.py,sha256=AxKgLUbWLrb1pz9xLtSpYm_stjN-IWOwLFYC9YZSons,12798
879
880
  cirq/qis/channels_test.py,sha256=iqkSyfvx_c2ZpJKAVEsFyZRmKpzNrJsyFjHbaJUMqcQ,14454
880
- cirq/qis/clifford_tableau.py,sha256=X25eCXWEUWzoB-x6cna4LdLMFVNxUiIEUxKHJkkc2aE,25353
881
+ cirq/qis/clifford_tableau.py,sha256=IBjjRobDIaohp6CCYJGjzIb7LC4LSwzxpUaUwpxizn0,25681
881
882
  cirq/qis/clifford_tableau_test.py,sha256=Z-5YSysJw2H3AfgZxhptvUMr5GUjUFgPcAUdcust9Qk,18441
882
883
  cirq/qis/entropy.py,sha256=H9WcGlTK0NBU3aOtRWS8HM53ghmUqLB4OXicbbmwJj0,3954
883
884
  cirq/qis/entropy_test.py,sha256=NUT7Otn14rkoBbuOI3_PRthUf5aYxfc5tafCv0_wETw,1672
@@ -919,7 +920,7 @@ cirq/sim/state_vector_simulator.py,sha256=j1Dcu6k3gtX2cHedVlJiSgDQ_WQ2UUUyFnAEeH
919
920
  cirq/sim/state_vector_simulator_test.py,sha256=wJq1OZRzKokeM9cJyaJXi6wHH2qi97h0HmJlYOEBDzU,7864
920
921
  cirq/sim/state_vector_test.py,sha256=OjhAL2tWqJWstHV8RvJYQVqg95zm0PcS9nQKrLOhMmQ,16934
921
922
  cirq/sim/clifford/__init__.py,sha256=lD7l6JuE5n0xwvOYNYH-giCH3qAEVH1SUwDrZM1jKKY,636
922
- cirq/sim/clifford/clifford_simulator.py,sha256=V4rExIDeijZ-sjMAyS_dDt5aE-RIrzTWpwF3EnSujto,9732
923
+ cirq/sim/clifford/clifford_simulator.py,sha256=JgwXOpdmiaMnsxfjodNi2OX03IpAKRrIEMZszXxKXZw,9749
923
924
  cirq/sim/clifford/clifford_simulator_test.py,sha256=pgLz8-SSFLBq6kcJ516ufQMJiJI2dG9NM2nkmzwY124,20380
924
925
  cirq/sim/clifford/clifford_tableau_simulation_state.py,sha256=fNkK0gZgfWIvMknGiCr4BjGO0wVYGW1Rc0pnwluerho,2160
925
926
  cirq/sim/clifford/clifford_tableau_simulation_state_test.py,sha256=KTzEoK5HcauVBj5tc8sXLt5vBXbDhxnFyj1bLt09nHo,3184
@@ -929,12 +930,12 @@ cirq/sim/clifford/stabilizer_sampler.py,sha256=XfJ2Y0bpCZTdAmiOVMIYPKDQ5SII5EuDJ
929
930
  cirq/sim/clifford/stabilizer_sampler_test.py,sha256=sNqJyUY--wqHjsPfm4E1YPBll1-GirvxKFz04n5I0f4,1338
930
931
  cirq/sim/clifford/stabilizer_simulation_state.py,sha256=5ZeHd1mlz6LW_suOOEWHNX9i2FPFTfHSkGiWCxmGUO0,6739
931
932
  cirq/sim/clifford/stabilizer_simulation_state_test.py,sha256=dsphoXTaIwRCjprGJQirSs0qeVKHlni_pt_GZJn5Vpc,4317
932
- cirq/sim/clifford/stabilizer_state_ch_form.py,sha256=yz9x7F72wfgqfSiEhoH2rJ-n14nsYMapMvpkhwidIOY,14032
933
+ cirq/sim/clifford/stabilizer_state_ch_form.py,sha256=vyyIKLcI-_Ox1QQbUSbTj_Zo4hotpDwvxQQ2u7zJxns,14049
933
934
  cirq/sim/clifford/stabilizer_state_ch_form_test.py,sha256=FK0IsyrTfT6ZPZeBYmyPG2xpzUT7RG6P6UQw_61c6kU,3149
934
935
  cirq/study/__init__.py,sha256=HCuFRBzCJGGDhtoHRzrnD5IWB8EnMrX-4M6AmVO0tP0,1220
935
936
  cirq/study/flatten_expressions.py,sha256=B-CQcj8eSWAJPIff5bQiZGobnYx8kB0c5WTLowfCVXo,15604
936
937
  cirq/study/flatten_expressions_test.py,sha256=6e7pTkaBrZW-EmG4teZxcwemqnxCtJW3kq2KOlPcwW8,6078
937
- cirq/study/resolver.py,sha256=YiX2VBxQScGJCm01ZkSyiJufxubKiMBN67oMOeXwgdQ,11631
938
+ cirq/study/resolver.py,sha256=dDEGIwWueP7ZICbEAUc6G5li2UoTFkPS9Qs2dSDCbV8,11906
938
939
  cirq/study/resolver_test.py,sha256=QQe9Rr0z6qNbSWPEvCKd_DNka6454AWVKbG2J2DD1Wg,10228
939
940
  cirq/study/result.py,sha256=KzjpjvDVCTFjMyq9r91pZSYdtcD1x3yj8jP_StlOSMg,19285
940
941
  cirq/study/result_test.py,sha256=fq5BH78RswfTiYjMchJ4wEDDyaJu0QdJoGobMjKDeSI,15591
@@ -1136,7 +1137,7 @@ cirq/value/duration.py,sha256=isNzA1TuKb5rSaAYy4JpgT91Zt9_5XLQBSmMkuWCtD4,10358
1136
1137
  cirq/value/duration_test.py,sha256=C7nwg7IlHoQOUhWa_aX8vy7_qp654ZIDtmnKF35UiqE,8244
1137
1138
  cirq/value/linear_dict.py,sha256=BG3pckQPX4DPqNvp-HxI_dTzQf8sGx6nIRkn0-ye4Qg,10643
1138
1139
  cirq/value/linear_dict_test.py,sha256=uEHbvobWV4EypOXQGe6B4xh6atLbQq8YSOomNHgv38o,17107
1139
- cirq/value/measurement_key.py,sha256=MThR6rFY_YuSvcvWOacCEfOluJC0u7d8VvnDkHe-HAM,4939
1140
+ cirq/value/measurement_key.py,sha256=glvyn36NylWMdtHYLFsD72jPZJsnKpFqQXKh8XpOX4Q,5200
1140
1141
  cirq/value/measurement_key_test.py,sha256=GnEX5QdEVbmi0dR9URcgXQH23aqW7Y_PKmTb2eIdRCg,4466
1141
1142
  cirq/value/periodic_value.py,sha256=U_tYBgWNVblZ6XDSwbXZin67KA0jUZiDAPpz-w7bnhw,3956
1142
1143
  cirq/value/periodic_value_test.py,sha256=mMvj_Ai2T8BWRbc7jdvb7JPX8OZxlL4H7jtdvy54ono,4319
@@ -1149,7 +1150,7 @@ cirq/value/random_state_test.py,sha256=0VyxtuBYgrbHsNCXFZtcgucd5KwI1obMjILH2ZTZ5
1149
1150
  cirq/value/timestamp.py,sha256=u0v5FmnSF_o3NE7aF-xIfQ5cDAVZzaUb-ZMdrxWYg2Y,3649
1150
1151
  cirq/value/timestamp_test.py,sha256=eZt9LLVK6TQy-2Bo1djitUD4at7i7M4lN60bLCx9UPs,4029
1151
1152
  cirq/value/type_alias.py,sha256=YD5m-77rx-hatIEVi5Q5j5tZ2Ji3Mmg4jUY9GT3LscM,1144
1152
- cirq/value/value_equality_attr.py,sha256=VrSgnx8NLqIdXBSvZaf7V1NQ-zQO_BlM3CgxENNcEE8,10132
1153
+ cirq/value/value_equality_attr.py,sha256=9tU54y5JUAGKsvNV9G1nCWJioP6gvTlYfGN7Pe3YebI,10545
1153
1154
  cirq/value/value_equality_attr_test.py,sha256=k_nl5hWxo4yMO6WNu0wU68wyeb-RN9Ua_Ix7s9UTfOE,6412
1154
1155
  cirq/vis/__init__.py,sha256=e3Z1PI-Ay0hDHhIgFZEDwQIuO8C_aayNdL-EByF0J4o,1001
1155
1156
  cirq/vis/density_matrix.py,sha256=kMAPcRh6f0ghZKSe86nB_2iFngrDsw0pNael1EZ5BEw,4819
@@ -1168,7 +1169,7 @@ cirq/work/collector_test.py,sha256=MirBDZ584HMZ3nJRUOSSQZcAyLR6sKc124GTQqPkunc,4
1168
1169
  cirq/work/observable_grouping.py,sha256=-FVJPuB-sDqoNQtiMxuO_TKhy-5uvMeRzfeWMfbxoT4,3492
1169
1170
  cirq/work/observable_grouping_test.py,sha256=lVLLhQlwpAuBPUEkfCg7cTS_AhtuojLbvy288XX3Rn0,5811
1170
1171
  cirq/work/observable_measurement.py,sha256=8XwQmlOpTYrFEdAPQo6c29fkghq6z6fsbLg3lJp57DI,28319
1171
- cirq/work/observable_measurement_data.py,sha256=hEanWlODzShivKve7RiEJ0G62E490oWVVuymSyqnyro,20833
1172
+ cirq/work/observable_measurement_data.py,sha256=dR3_HZvWf949DxC7mYm5kvE5TZOrk6OH-STNsgXdgK0,20940
1172
1173
  cirq/work/observable_measurement_data_test.py,sha256=vI_SMbG4riMu0XD0tN9d_Kbq2u73k6kxTWU6Vx_tfOI,19696
1173
1174
  cirq/work/observable_measurement_test.py,sha256=mKa_iXZ5lBy5zWD_X9UBabwm6MQnTwx2dDMTpPwpqBM,20189
1174
1175
  cirq/work/observable_readout_calibration.py,sha256=9lfeybebV4Fh3Y-ExtxIGErPzZcK16oyTbN5XHMIaBA,1888
@@ -1181,8 +1182,8 @@ cirq/work/sampler.py,sha256=JEAeQQRF3bqlO9AkOf4XbrTATDI5f5JgyM_FAUCNxao,19751
1181
1182
  cirq/work/sampler_test.py,sha256=B2ZsuqGT854gQtBIAh8k0LiG9Vj5wSzcGvkxOUoTcW4,13217
1182
1183
  cirq/work/zeros_sampler.py,sha256=x1C7cup66a43n-3tm8QjhiqJa07qcJW10FxNp9jJ59Q,2356
1183
1184
  cirq/work/zeros_sampler_test.py,sha256=JIkpBBFPJe5Ba4142vzogyWyboG1Q1ZAm0UVGgOoZn8,3279
1184
- cirq_core-1.5.0.dev20240805211201.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
1185
- cirq_core-1.5.0.dev20240805211201.dist-info/METADATA,sha256=Hm5OsrWm-lnCUv61fJrfjX4G2N814aFc-mecnhmeSOM,1992
1186
- cirq_core-1.5.0.dev20240805211201.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
1187
- cirq_core-1.5.0.dev20240805211201.dist-info/top_level.txt,sha256=Sz9iOxHU0IEMLSFGwiwOCaN2e9K-jFbBbtpPN1hB73g,5
1188
- cirq_core-1.5.0.dev20240805211201.dist-info/RECORD,,
1185
+ cirq_core-1.5.0.dev20240807173926.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
1186
+ cirq_core-1.5.0.dev20240807173926.dist-info/METADATA,sha256=_4_5OYVZqfwvNsyZ--WrZ69qIt6OjqM-0JKKVAsFq5c,1992
1187
+ cirq_core-1.5.0.dev20240807173926.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
1188
+ cirq_core-1.5.0.dev20240807173926.dist-info/top_level.txt,sha256=Sz9iOxHU0IEMLSFGwiwOCaN2e9K-jFbBbtpPN1hB73g,5
1189
+ cirq_core-1.5.0.dev20240807173926.dist-info/RECORD,,