cirq-core 1.5.0.dev20240823014143__py3-none-any.whl → 1.5.0.dev20240823202236__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 (44) hide show
  1. cirq/_version.py +1 -1
  2. cirq/_version_test.py +1 -1
  3. cirq/circuits/circuit.py +1 -1
  4. cirq/circuits/circuit_operation.py +2 -2
  5. cirq/circuits/qasm_output.py +2 -2
  6. cirq/contrib/acquaintance/bipartite.py +3 -3
  7. cirq/contrib/acquaintance/executor.py +2 -2
  8. cirq/contrib/acquaintance/gates.py +12 -2
  9. cirq/contrib/acquaintance/inspection_utils.py +2 -2
  10. cirq/contrib/acquaintance/permutation.py +3 -2
  11. cirq/contrib/acquaintance/shift.py +2 -2
  12. cirq/contrib/acquaintance/shift_swap_network.py +2 -2
  13. cirq/contrib/bayesian_network/bayesian_network_gate.py +2 -2
  14. cirq/contrib/paulistring/separate.py +2 -2
  15. cirq/experiments/random_quantum_circuit_generation.py +2 -1
  16. cirq/interop/quirk/cells/control_cells.py +1 -1
  17. cirq/interop/quirk/cells/parse.py +3 -1
  18. cirq/ops/diagonal_gate.py +1 -1
  19. cirq/ops/fsim_gate.py +3 -3
  20. cirq/ops/linear_combinations.py +1 -1
  21. cirq/ops/parity_gates.py +3 -3
  22. cirq/ops/pauli_interaction_gate.py +2 -2
  23. cirq/ops/pauli_measurement_gate.py +2 -1
  24. cirq/ops/pauli_string_phasor.py +1 -1
  25. cirq/ops/permutation_gate.py +2 -2
  26. cirq/ops/phased_iswap_gate.py +2 -2
  27. cirq/ops/phased_x_z_gate.py +3 -2
  28. cirq/ops/projector.py +2 -1
  29. cirq/ops/raw_types.py +1 -1
  30. cirq/ops/three_qubit_gates.py +3 -2
  31. cirq/ops/two_qubit_diagonal_gate.py +2 -2
  32. cirq/ops/uniform_superposition_gate.py +2 -2
  33. cirq/sim/state_vector_test.py +27 -32
  34. cirq/transformers/eject_phased_paulis.py +2 -2
  35. cirq/transformers/eject_z.py +2 -2
  36. cirq/transformers/transformer_primitives_test.py +3 -3
  37. cirq/value/linear_dict.py +6 -4
  38. cirq/vis/heatmap.py +9 -1
  39. cirq/vis/state_histogram.py +2 -1
  40. {cirq_core-1.5.0.dev20240823014143.dist-info → cirq_core-1.5.0.dev20240823202236.dist-info}/METADATA +1 -1
  41. {cirq_core-1.5.0.dev20240823014143.dist-info → cirq_core-1.5.0.dev20240823202236.dist-info}/RECORD +44 -44
  42. {cirq_core-1.5.0.dev20240823014143.dist-info → cirq_core-1.5.0.dev20240823202236.dist-info}/LICENSE +0 -0
  43. {cirq_core-1.5.0.dev20240823014143.dist-info → cirq_core-1.5.0.dev20240823202236.dist-info}/WHEEL +0 -0
  44. {cirq_core-1.5.0.dev20240823014143.dist-info → cirq_core-1.5.0.dev20240823202236.dist-info}/top_level.txt +0 -0
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.dev20240823014143"
31
+ __version__ = "1.5.0.dev20240823202236"
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.dev20240823014143"
6
+ assert cirq.__version__ == "1.5.0.dev20240823202236"
cirq/circuits/circuit.py CHANGED
@@ -2014,7 +2014,7 @@ class Circuit(AbstractCircuit):
2014
2014
  if callable(qubit_map):
2015
2015
  transform = qubit_map
2016
2016
  elif isinstance(qubit_map, dict):
2017
- transform = lambda q: qubit_map.get(q, q) # type: ignore
2017
+ transform = lambda q: qubit_map.get(q, q)
2018
2018
  else:
2019
2019
  raise TypeError('qubit_map must be a function or dict mapping qubits to qubits.')
2020
2020
 
@@ -267,7 +267,7 @@ class CircuitOperation(ops.Operation):
267
267
  'repeat_until': self.repeat_until,
268
268
  **changes,
269
269
  }
270
- return CircuitOperation(**kwargs) # type: ignore
270
+ return CircuitOperation(**kwargs)
271
271
 
272
272
  def __eq__(self, other) -> bool:
273
273
  if not isinstance(other, type(self)):
@@ -688,7 +688,7 @@ class CircuitOperation(ops.Operation):
688
688
  if callable(qubit_map):
689
689
  transform = qubit_map
690
690
  elif isinstance(qubit_map, dict):
691
- transform = lambda q: qubit_map.get(q, q) # type: ignore
691
+ transform = lambda q: qubit_map.get(q, q)
692
692
  else:
693
693
  raise TypeError('qubit_map must be a function or dict mapping qubits to qubits.')
694
694
  new_map = {}
@@ -14,7 +14,7 @@
14
14
 
15
15
  """Utility classes for representing QASM."""
16
16
 
17
- from typing import Callable, Dict, Optional, Sequence, Set, Tuple, Union, TYPE_CHECKING
17
+ from typing import Callable, Dict, Iterator, Optional, Sequence, Set, Tuple, Union, TYPE_CHECKING
18
18
 
19
19
  import re
20
20
  import numpy as np
@@ -126,7 +126,7 @@ class QasmTwoQubitGate(ops.Gate):
126
126
  def _unitary_(self):
127
127
  return protocols.unitary(self.kak)
128
128
 
129
- def _decompose_(self, qubits: Sequence['cirq.Qid']) -> 'cirq.OP_TREE':
129
+ def _decompose_(self, qubits: Sequence['cirq.Qid']) -> Iterator['cirq.OP_TREE']:
130
130
  q0, q1 = qubits
131
131
  x, y, z = self.kak.interaction_coefficients
132
132
  a = x * -2 / np.pi + 0.5
@@ -14,7 +14,7 @@
14
14
 
15
15
  import enum
16
16
  import itertools
17
- from typing import Dict, Sequence, Tuple, Union, TYPE_CHECKING
17
+ from typing import Dict, Iterator, Sequence, Tuple, Union, TYPE_CHECKING
18
18
 
19
19
  from cirq import ops
20
20
 
@@ -72,7 +72,7 @@ class BipartiteSwapNetworkGate(PermutationGate):
72
72
  )
73
73
  self.swap_gate = swap_gate
74
74
 
75
- def decompose_complete(self, qubits: Sequence['cirq.Qid']) -> 'cirq.OP_TREE':
75
+ def decompose_complete(self, qubits: Sequence['cirq.Qid']) -> Iterator['cirq.OP_TREE']:
76
76
  swap_gate = SwapPermutationGate(self.swap_gate)
77
77
  if self.part_size == 1:
78
78
  yield acquaint(*qubits)
@@ -87,7 +87,7 @@ class BipartiteSwapNetworkGate(PermutationGate):
87
87
  yield acquaint(*qubits[x : x + 2])
88
88
  yield swap_gate(*qubits[x : x + 2])
89
89
 
90
- def decompose_matching(self, qubits: Sequence['cirq.Qid']) -> 'cirq.OP_TREE':
90
+ def decompose_matching(self, qubits: Sequence['cirq.Qid']) -> Iterator['cirq.OP_TREE']:
91
91
  swap_gate = SwapPermutationGate(self.swap_gate)
92
92
  for k in range(-self.part_size + 1, self.part_size):
93
93
  for x in range(abs(k), 2 * self.part_size - abs(k), 2):
@@ -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 DefaultDict, Dict, Sequence, TYPE_CHECKING, Optional
15
+ from typing import DefaultDict, Dict, Iterator, Sequence, TYPE_CHECKING, Optional
16
16
 
17
17
  import abc
18
18
  from collections import defaultdict
@@ -208,7 +208,7 @@ class GreedyExecutionStrategy(ExecutionStrategy):
208
208
 
209
209
  def get_operations(
210
210
  self, indices: Sequence[LogicalIndex], qubits: Sequence['cirq.Qid']
211
- ) -> 'cirq.OP_TREE':
211
+ ) -> Iterator['cirq.OP_TREE']:
212
212
  index_set = frozenset(indices)
213
213
  if index_set in self.index_set_to_gates:
214
214
  gates = self.index_set_to_gates.pop(index_set)
@@ -16,7 +16,17 @@ import functools
16
16
  import itertools
17
17
  import math
18
18
  import operator
19
- from typing import Dict, Iterable, List, NamedTuple, Optional, Sequence, Tuple, TYPE_CHECKING
19
+ from typing import (
20
+ Dict,
21
+ Iterable,
22
+ Iterator,
23
+ List,
24
+ NamedTuple,
25
+ Optional,
26
+ Sequence,
27
+ Tuple,
28
+ TYPE_CHECKING,
29
+ )
20
30
 
21
31
  from cirq import ops, protocols, value
22
32
 
@@ -276,7 +286,7 @@ class SwapNetworkGate(PermutationGate):
276
286
  self.part_lens = tuple(part_lens)
277
287
  self.acquaintance_size = acquaintance_size
278
288
 
279
- def _decompose_(self, qubits: Sequence['cirq.Qid']) -> 'cirq.OP_TREE':
289
+ def _decompose_(self, qubits: Sequence['cirq.Qid']) -> Iterator['cirq.OP_TREE']:
280
290
  qubit_to_position = {q: i for i, q in enumerate(qubits)}
281
291
  mapping = dict(qubit_to_position)
282
292
  parts = []
@@ -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, Sequence, Set, TYPE_CHECKING
15
+ from typing import FrozenSet, Iterator, Sequence, Set, TYPE_CHECKING
16
16
 
17
17
  from cirq import devices
18
18
 
@@ -46,7 +46,7 @@ class LogicalAnnotator(ExecutionStrategy):
46
46
 
47
47
  def get_operations(
48
48
  self, indices: Sequence[LogicalIndex], qubits: Sequence['cirq.Qid']
49
- ) -> 'cirq.OP_TREE':
49
+ ) -> Iterator['cirq.OP_TREE']:
50
50
  yield AcquaintanceOperation(qubits, indices)
51
51
 
52
52
 
@@ -18,6 +18,7 @@ from typing import (
18
18
  cast,
19
19
  Dict,
20
20
  Iterable,
21
+ Iterator,
21
22
  Optional,
22
23
  Sequence,
23
24
  Tuple,
@@ -152,7 +153,7 @@ class SwapPermutationGate(PermutationGate):
152
153
  def permutation(self) -> Dict[int, int]:
153
154
  return {0: 1, 1: 0}
154
155
 
155
- def _decompose_(self, qubits: Sequence['cirq.Qid']) -> 'cirq.OP_TREE':
156
+ def _decompose_(self, qubits: Sequence['cirq.Qid']) -> Iterator['cirq.OP_TREE']:
156
157
  yield self.swap_gate(*qubits)
157
158
 
158
159
  def __repr__(self) -> str:
@@ -201,7 +202,7 @@ class LinearPermutationGate(PermutationGate):
201
202
  def permutation(self) -> Dict[int, int]:
202
203
  return self._permutation
203
204
 
204
- def _decompose_(self, qubits: Sequence['cirq.Qid']) -> 'cirq.OP_TREE':
205
+ def _decompose_(self, qubits: Sequence['cirq.Qid']) -> Iterator['cirq.OP_TREE']:
205
206
  swap_gate = SwapPermutationGate(self.swap_gate)
206
207
  n_qubits = len(qubits)
207
208
  mapping = {i: self._permutation.get(i, i) for i in range(n_qubits)}
@@ -13,7 +13,7 @@
13
13
  # limitations under the License.
14
14
 
15
15
  import itertools
16
- from typing import Any, Dict, Sequence, Tuple, TYPE_CHECKING
16
+ from typing import Any, Dict, Iterator, Sequence, Tuple, TYPE_CHECKING
17
17
 
18
18
  from cirq import ops, value
19
19
  from cirq.contrib.acquaintance.permutation import SwapPermutationGate, PermutationGate
@@ -47,7 +47,7 @@ class CircularShiftGate(PermutationGate):
47
47
  def _value_equality_values_(self) -> Any:
48
48
  return self.shift, self.swap_gate, self.num_qubits()
49
49
 
50
- def _decompose_(self, qubits: Sequence['cirq.Qid']) -> 'cirq.OP_TREE':
50
+ def _decompose_(self, qubits: Sequence['cirq.Qid']) -> Iterator['cirq.OP_TREE']:
51
51
  n = len(qubits)
52
52
  left_shift = self.shift % n
53
53
  right_shift = n - left_shift
@@ -14,7 +14,7 @@
14
14
 
15
15
  import functools
16
16
  import itertools
17
- from typing import Dict, Iterable, Optional, Sequence, Tuple, TYPE_CHECKING
17
+ from typing import Dict, Iterable, Iterator, Optional, Sequence, Tuple, TYPE_CHECKING
18
18
 
19
19
  from cirq import ops
20
20
  from cirq.contrib.acquaintance.gates import acquaint
@@ -65,7 +65,7 @@ class ShiftSwapNetworkGate(PermutationGate):
65
65
  def acquaintance_size(self) -> int:
66
66
  return sum(max(self.part_lens[side]) for side in ('left', 'right'))
67
67
 
68
- def _decompose_(self, qubits: Sequence['cirq.Qid']) -> 'cirq.OP_TREE':
68
+ def _decompose_(self, qubits: Sequence['cirq.Qid']) -> Iterator['cirq.OP_TREE']:
69
69
  part_lens = list(itertools.chain(*(self.part_lens[side] for side in ('left', 'right'))))
70
70
 
71
71
  n_qubits = 0
@@ -13,7 +13,7 @@
13
13
  # limitations under the License.
14
14
 
15
15
  import math
16
- from typing import Any, cast, Dict, List, Optional, Sequence, Tuple, TYPE_CHECKING, Union
16
+ from typing import Any, cast, Dict, Iterator, List, Optional, Sequence, Tuple, TYPE_CHECKING, Union
17
17
 
18
18
  from sympy.combinatorics import GrayCode
19
19
 
@@ -158,7 +158,7 @@ class BayesianNetworkGate(raw_types.Gate):
158
158
  raise ValueError('Conditional prob should be between 0 and 1.')
159
159
  self._arc_probs = arc_probs
160
160
 
161
- def _decompose_(self, qubits: Sequence['raw_types.Qid']) -> 'cirq.OP_TREE':
161
+ def _decompose_(self, qubits: Sequence['raw_types.Qid']) -> Iterator['cirq.OP_TREE']:
162
162
  parameter_names = [init_prob[0] for init_prob in self._init_probs]
163
163
  qubit_map = dict(zip(parameter_names, qubits))
164
164
 
@@ -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 Tuple
15
+ from typing import Iterator, Tuple
16
16
 
17
17
  from cirq import ops, circuits, transformers
18
18
 
@@ -89,7 +89,7 @@ def pauli_string_half(circuit: circuits.Circuit) -> circuits.Circuit:
89
89
  )
90
90
 
91
91
 
92
- def _pull_non_clifford_before(circuit: circuits.Circuit) -> ops.OP_TREE:
92
+ def _pull_non_clifford_before(circuit: circuits.Circuit) -> Iterator[ops.OP_TREE]:
93
93
  def _iter_ops_range_reversed(moment_end):
94
94
  for i in reversed(range(moment_end)):
95
95
  moment = circuit[i]
@@ -21,6 +21,7 @@ from typing import (
21
21
  Container,
22
22
  Dict,
23
23
  Iterable,
24
+ Iterator,
24
25
  List,
25
26
  Sequence,
26
27
  TYPE_CHECKING,
@@ -691,7 +692,7 @@ def _two_qubit_layer(
691
692
  ],
692
693
  layer: GridInteractionLayer,
693
694
  prng: 'np.random.RandomState',
694
- ) -> 'cirq.OP_TREE':
695
+ ) -> Iterator['cirq.OP_TREE']:
695
696
  for a, b in coupled_qubit_pairs:
696
697
  if (a, b) in layer or (b, a) in layer:
697
698
  yield two_qubit_op_factory(a, b, prng)
@@ -109,7 +109,7 @@ class ParityControlCell(Cell):
109
109
  elif gate is not None:
110
110
  column[i] = gate.controlled_by(self.qubits[0])
111
111
 
112
- def basis_change(self) -> 'cirq.OP_TREE':
112
+ def basis_change(self) -> Iterator['cirq.OP_TREE']:
113
113
  yield from self._basis_change
114
114
 
115
115
  # Temporarily move the ZZZ..Z parity observable onto a single qubit.
@@ -191,7 +191,9 @@ def _parse_formula_using_token_map(
191
191
  elif token.unary_action is not None:
192
192
  burn_ops(token.priority)
193
193
  vals.append(None)
194
- ops.append(_HangingNode(func=lambda _, b: token.unary_action(b), weight=np.inf))
194
+ # this avoids mypy complaint about None not being callable
195
+ token_unary_action = token.unary_action
196
+ ops.append(_HangingNode(func=lambda _, b: token_unary_action(b), weight=np.inf))
195
197
  elif token.binary_action is not None:
196
198
  raise ValueError("Bad expression: binary op in bad spot.\ntext={text!r}")
197
199
 
cirq/ops/diagonal_gate.py CHANGED
@@ -166,7 +166,7 @@ class DiagonalGate(raw_types.Gate):
166
166
  self, index: int, bit_flip: int, theta: 'cirq.TParamVal', qubits: Sequence['cirq.Qid']
167
167
  ) -> Iterator[Union['cirq.ZPowGate', 'cirq.CXPowGate']]:
168
168
  if index == 0:
169
- return []
169
+ return
170
170
  largest_digit = self._num_qubits_() - (len(bin(index)) - 2)
171
171
  yield common_gates.rz(2 * theta)(qubits[largest_digit])
172
172
  _flip_bit = self._num_qubits_() - bit_flip - 1
cirq/ops/fsim_gate.py CHANGED
@@ -23,7 +23,7 @@ applies more generally to fermions, thus the name of the gate.
23
23
 
24
24
  import cmath
25
25
  import math
26
- from typing import AbstractSet, Any, Dict, Optional, Tuple
26
+ from typing import AbstractSet, Any, Dict, Iterator, Optional, Tuple
27
27
 
28
28
  import numpy as np
29
29
  import sympy
@@ -187,7 +187,7 @@ class FSimGate(gate_features.InterchangeableQubitsGate, raw_types.Gate):
187
187
  out[ii] *= cmath.exp(-1j * self.phi)
188
188
  return out
189
189
 
190
- def _decompose_(self, qubits) -> 'cirq.OP_TREE':
190
+ def _decompose_(self, qubits) -> Iterator['cirq.OP_TREE']:
191
191
  a, b = qubits
192
192
  xx = cirq.XXPowGate(exponent=self.theta / np.pi, global_shift=-0.5)
193
193
  yy = cirq.YYPowGate(exponent=self.theta / np.pi, global_shift=-0.5)
@@ -452,7 +452,7 @@ class PhasedFSimGate(gate_features.InterchangeableQubitsGate, raw_types.Gate):
452
452
  out[ii] *= f * f
453
453
  return out
454
454
 
455
- def _decompose_(self, qubits) -> 'cirq.OP_TREE':
455
+ def _decompose_(self, qubits) -> Iterator['cirq.OP_TREE']:
456
456
  """Decomposes self into Z rotations and FSimGate.
457
457
 
458
458
  Note that Z rotations returned by this method have unusual global phase
@@ -805,7 +805,7 @@ class PauliSum:
805
805
  if not isinstance(other, (numbers.Complex, PauliString, PauliSum)):
806
806
  return NotImplemented
807
807
  if isinstance(other, numbers.Complex):
808
- self._linear_dict *= other
808
+ self._linear_dict *= complex(other)
809
809
  elif isinstance(other, PauliString):
810
810
  temp = PauliSum.from_pauli_strings([term * other for term in self])
811
811
  self._linear_dict = temp._linear_dict
cirq/ops/parity_gates.py CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  """Quantum gates that phase with respect to product-of-pauli observables."""
16
16
 
17
- from typing import Any, Dict, List, Optional, Tuple, Union, TYPE_CHECKING, Sequence
17
+ from typing import Any, Dict, List, Iterator, Optional, Tuple, Union, TYPE_CHECKING, Sequence
18
18
  from typing_extensions import Self
19
19
 
20
20
  import numpy as np
@@ -118,7 +118,7 @@ class XXPowGate(gate_features.InterchangeableQubitsGate, eigen_gate.EigenGate):
118
118
  def _has_stabilizer_effect_(self) -> bool:
119
119
  return self.exponent % 2 in (0, 0.5, 1, 1.5)
120
120
 
121
- def _decompose_(self, qubits: Tuple['cirq.Qid', ...]) -> 'cirq.OP_TREE':
121
+ def _decompose_(self, qubits: Tuple['cirq.Qid', ...]) -> Iterator['cirq.OP_TREE']:
122
122
  yield common_gates.YPowGate(exponent=-0.5).on_each(*qubits)
123
123
  yield ZZPowGate(exponent=self.exponent, global_shift=self.global_shift)(*qubits)
124
124
  yield common_gates.YPowGate(exponent=0.5).on_each(*qubits)
@@ -227,7 +227,7 @@ class YYPowGate(gate_features.InterchangeableQubitsGate, eigen_gate.EigenGate):
227
227
  def _has_stabilizer_effect_(self) -> bool:
228
228
  return self.exponent % 2 in (0, 0.5, 1, 1.5)
229
229
 
230
- def _decompose_(self, qubits: Tuple['cirq.Qid', ...]) -> 'cirq.OP_TREE':
230
+ def _decompose_(self, qubits: Tuple['cirq.Qid', ...]) -> Iterator['cirq.OP_TREE']:
231
231
  yield common_gates.XPowGate(exponent=0.5).on_each(*qubits)
232
232
  yield ZZPowGate(exponent=self.exponent, global_shift=self.global_shift)(*qubits)
233
233
  yield common_gates.XPowGate(exponent=-0.5).on_each(*qubits)
@@ -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 Any, Dict, List, Sequence, TYPE_CHECKING, Tuple
15
+ from typing import Any, Dict, Iterator, List, Sequence, TYPE_CHECKING, Tuple
16
16
 
17
17
  import numpy as np
18
18
 
@@ -108,7 +108,7 @@ class PauliInteractionGate(gate_features.InterchangeableQubitsGate, eigen_gate.E
108
108
  comp0 = np.eye(4) - comp1
109
109
  return [(0, comp0), (1, comp1)]
110
110
 
111
- def _decompose_(self, qubits: Sequence['cirq.Qid']) -> 'cirq.OP_TREE':
111
+ def _decompose_(self, qubits: Sequence['cirq.Qid']) -> Iterator['cirq.OP_TREE']:
112
112
  q0, q1 = qubits
113
113
  right_gate0 = SingleQubitCliffordGate.from_single_map(z_to=(self.pauli0, self.invert0))
114
114
  right_gate1 = SingleQubitCliffordGate.from_single_map(z_to=(self.pauli1, self.invert1))
@@ -17,6 +17,7 @@ from typing import (
17
17
  Dict,
18
18
  FrozenSet,
19
19
  Iterable,
20
+ Iterator,
20
21
  Mapping,
21
22
  Tuple,
22
23
  Sequence,
@@ -144,7 +145,7 @@ class PauliMeasurementGate(raw_types.Gate):
144
145
 
145
146
  def _decompose_(
146
147
  self, qubits: Tuple['cirq.Qid', ...]
147
- ) -> 'protocols.decompose_protocol.DecomposeResult':
148
+ ) -> Iterator['protocols.decompose_protocol.DecomposeResult']:
148
149
  any_qubit = qubits[0]
149
150
  to_z_ops = op_tree.freeze_op_tree(self._observable.on(*qubits).to_z_basis_ops())
150
151
  xor_decomp = tuple(pauli_string_phasor.xor_nonlocal_decompose(qubits, any_qubit))
@@ -351,7 +351,7 @@ class PauliStringPhasorGate(raw_types.Gate):
351
351
  """Returns operations to convert the qubits to the computational basis."""
352
352
  return self.dense_pauli_string.on(*qubits).to_z_basis_ops()
353
353
 
354
- def _decompose_(self, qubits: Sequence['cirq.Qid']) -> 'cirq.OP_TREE':
354
+ def _decompose_(self, qubits: Sequence['cirq.Qid']) -> Iterator['cirq.OP_TREE']:
355
355
  if len(self.dense_pauli_string) <= 0:
356
356
  return
357
357
  any_qubit = qubits[0]
@@ -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 Any, Dict, Sequence, Tuple, TYPE_CHECKING
15
+ from typing import Any, Dict, Iterator, Sequence, Tuple, TYPE_CHECKING
16
16
 
17
17
  from cirq import protocols, value
18
18
  from cirq.ops import raw_types, swap_gates
@@ -73,7 +73,7 @@ class QubitPermutationGate(raw_types.Gate):
73
73
  def _has_unitary_(self):
74
74
  return True
75
75
 
76
- def _decompose_(self, qubits: Sequence['cirq.Qid']) -> 'cirq.OP_TREE':
76
+ def _decompose_(self, qubits: Sequence['cirq.Qid']) -> Iterator['cirq.OP_TREE']:
77
77
  permutation = [p for p in self.permutation]
78
78
 
79
79
  for i in range(len(permutation)):
@@ -13,7 +13,7 @@
13
13
  # limitations under the License.
14
14
  """ISWAPPowGate conjugated by tensor product Rz(phi) and Rz(-phi)."""
15
15
 
16
- from typing import AbstractSet, Any, cast, Dict, List, Optional, Sequence, Tuple, Union
16
+ from typing import AbstractSet, Any, cast, Dict, Iterator, List, Optional, Sequence, Tuple, Union
17
17
 
18
18
  import numpy as np
19
19
  import sympy
@@ -157,7 +157,7 @@ class PhasedISwapPowGate(eigen_gate.EigenGate):
157
157
  )
158
158
  return args.available_buffer
159
159
 
160
- def _decompose_(self, qubits: Sequence['cirq.Qid']) -> 'cirq.OP_TREE':
160
+ def _decompose_(self, qubits: Sequence['cirq.Qid']) -> Iterator['cirq.OP_TREE']:
161
161
  if len(qubits) != 2:
162
162
  raise ValueError(f'Expected two qubits, got {len(qubits)}')
163
163
  a, b = qubits
@@ -11,7 +11,8 @@
11
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
- from typing import AbstractSet, Any, Dict, Optional, Sequence, Tuple, TYPE_CHECKING, Union
14
+
15
+ from typing import AbstractSet, Any, Dict, Iterator, Optional, Sequence, Tuple, TYPE_CHECKING, Union
15
16
  import numbers
16
17
 
17
18
  import numpy as np
@@ -188,7 +189,7 @@ class PhasedXZGate(raw_types.Gate):
188
189
  z_post = protocols.unitary(ops.Z ** (self._axis_phase_exponent + self._z_exponent))
189
190
  return z_post @ x @ z_pre
190
191
 
191
- def _decompose_(self, qubits: Sequence['cirq.Qid']) -> 'cirq.OP_TREE':
192
+ def _decompose_(self, qubits: Sequence['cirq.Qid']) -> Iterator['cirq.OP_TREE']:
192
193
  q = qubits[0]
193
194
  yield ops.Z(q) ** -self._axis_phase_exponent
194
195
  yield ops.X(q) ** self._x_exponent
cirq/ops/projector.py CHANGED
@@ -1,5 +1,6 @@
1
1
  # pylint: disable=wrong-or-nonexistent-copyright-notice
2
2
  import itertools
3
+ import math
3
4
  from typing import Any, Dict, Iterable, List, Mapping, Optional, Union
4
5
 
5
6
  import numpy as np
@@ -61,7 +62,7 @@ class ProjectorString:
61
62
  for qid in projector_qids
62
63
  ]
63
64
 
64
- total_d = np.prod([qid.dimension for qid in projector_qids], dtype=np.int64)
65
+ total_d = math.prod(qid.dimension for qid in projector_qids)
65
66
 
66
67
  ones_idx = []
67
68
  for idx in itertools.product(*idx_to_keep):
cirq/ops/raw_types.py CHANGED
@@ -580,7 +580,7 @@ class Operation(metaclass=abc.ABCMeta):
580
580
  if callable(qubit_map):
581
581
  transform = qubit_map
582
582
  elif isinstance(qubit_map, dict):
583
- transform = lambda q: qubit_map.get(q, q) # type: ignore
583
+ transform = lambda q: qubit_map.get(q, q)
584
584
  else:
585
585
  raise TypeError('qubit_map must be a function or dict mapping qubits to qubits.')
586
586
  return self.with_qubits(*(transform(q) for q in self.qubits))
@@ -19,6 +19,7 @@ from typing import (
19
19
  Any,
20
20
  Collection,
21
21
  Dict,
22
+ Iterator,
22
23
  List,
23
24
  Optional,
24
25
  Sequence,
@@ -573,7 +574,7 @@ class CSwapGate(gate_features.InterchangeableQubitsGate, raw_types.Gate):
573
574
 
574
575
  def _decompose_inside_control(
575
576
  self, target1: 'cirq.Qid', control: 'cirq.Qid', target2: 'cirq.Qid'
576
- ) -> 'cirq.OP_TREE':
577
+ ) -> Iterator['cirq.OP_TREE']:
577
578
  """A decomposition assuming the control separates the targets.
578
579
 
579
580
  target1: ─@─X───────T──────@────────@─────────X───@─────X^-0.5─
@@ -617,7 +618,7 @@ class CSwapGate(gate_features.InterchangeableQubitsGate, raw_types.Gate):
617
618
 
618
619
  def _decompose_outside_control(
619
620
  self, control: 'cirq.Qid', near_target: 'cirq.Qid', far_target: 'cirq.Qid'
620
- ) -> 'cirq.OP_TREE':
621
+ ) -> Iterator['cirq.OP_TREE']:
621
622
  """A decomposition assuming one of the targets is in the middle.
622
623
 
623
624
  control: ───T──────@────────@───@────────────@────────────────
@@ -18,7 +18,7 @@ The gate is used to create a 4x4 matrix with the diagonal elements
18
18
  passed as a list.
19
19
  """
20
20
 
21
- from typing import AbstractSet, Any, Dict, Tuple, Optional, Sequence, TYPE_CHECKING
21
+ from typing import AbstractSet, Any, Dict, Iterator, Tuple, Optional, Sequence, TYPE_CHECKING
22
22
  import numpy as np
23
23
  import sympy
24
24
 
@@ -93,7 +93,7 @@ class TwoQubitDiagonalGate(raw_types.Gate):
93
93
  return None
94
94
  return np.diag([np.exp(1j * angle) for angle in self._diag_angles_radians])
95
95
 
96
- def _decompose_(self, qubits: Sequence['cirq.Qid']) -> 'cirq.OP_TREE':
96
+ def _decompose_(self, qubits: Sequence['cirq.Qid']) -> Iterator['cirq.OP_TREE']:
97
97
  x0, x1, x2, x3 = self._diag_angles_radians
98
98
  q0, q1 = qubits
99
99
  yield common_gates.ZPowGate(exponent=x2 / np.pi).on(q0)
@@ -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 Sequence, Any, Dict, TYPE_CHECKING
15
+ from typing import Iterator, Sequence, Any, Dict, TYPE_CHECKING
16
16
 
17
17
  import numpy as np
18
18
  from cirq.ops.common_gates import H, ry
@@ -58,7 +58,7 @@ class UniformSuperpositionGate(raw_types.Gate):
58
58
  self._m_value = m_value
59
59
  self._num_qubits = num_qubits
60
60
 
61
- def _decompose_(self, qubits: Sequence["cirq.Qid"]) -> "cirq.OP_TREE":
61
+ def _decompose_(self, qubits: Sequence["cirq.Qid"]) -> Iterator["cirq.OP_TREE"]:
62
62
  """Decomposes the gate into a sequence of standard gates.
63
63
  Implements the construction from https://arxiv.org/pdf/2306.11747.
64
64
  """
@@ -14,16 +14,24 @@
14
14
  """Tests for state_vector.py"""
15
15
 
16
16
  import itertools
17
- from typing import Optional
18
- import pytest
17
+ from typing import Iterator, Optional
18
+ from unittest import mock
19
19
 
20
20
  import numpy as np
21
+ import pytest
21
22
 
22
23
  import cirq
23
24
  import cirq.testing
24
25
  from cirq import linalg
25
26
 
26
27
 
28
+ @pytest.fixture
29
+ def use_np_transpose(request) -> Iterator[bool]:
30
+ value: bool = request.param
31
+ with mock.patch.object(linalg, 'can_numpy_support_shape', lambda shape: value):
32
+ yield value
33
+
34
+
27
35
  def test_state_mixin():
28
36
  class TestClass(cirq.StateVectorMixin):
29
37
  def state_vector(self, copy: Optional[bool] = None) -> np.ndarray:
@@ -173,9 +181,10 @@ def test_sample_no_indices_repetitions():
173
181
  )
174
182
 
175
183
 
176
- @pytest.mark.parametrize('use_np_transpose', [False, True])
184
+ @pytest.mark.parametrize('use_np_transpose', [False, True], indirect=True)
177
185
  def test_measure_state_computational_basis(use_np_transpose: bool):
178
- linalg.can_numpy_support_shape = lambda s: use_np_transpose
186
+ # verify patching of can_numpy_support_shape in the use_np_transpose fixture
187
+ assert linalg.can_numpy_support_shape([1]) is use_np_transpose
179
188
  results = []
180
189
  for x in range(8):
181
190
  initial_state = cirq.to_valid_state_vector(x, 3)
@@ -186,9 +195,8 @@ def test_measure_state_computational_basis(use_np_transpose: bool):
186
195
  assert results == expected
187
196
 
188
197
 
189
- @pytest.mark.parametrize('use_np_transpose', [False, True])
198
+ @pytest.mark.parametrize('use_np_transpose', [False, True], indirect=True)
190
199
  def test_measure_state_reshape(use_np_transpose: bool):
191
- linalg.can_numpy_support_shape = lambda s: use_np_transpose
192
200
  results = []
193
201
  for x in range(8):
194
202
  initial_state = np.reshape(cirq.to_valid_state_vector(x, 3), [2] * 3)
@@ -199,9 +207,8 @@ def test_measure_state_reshape(use_np_transpose: bool):
199
207
  assert results == expected
200
208
 
201
209
 
202
- @pytest.mark.parametrize('use_np_transpose', [False, True])
210
+ @pytest.mark.parametrize('use_np_transpose', [False, True], indirect=True)
203
211
  def test_measure_state_partial_indices(use_np_transpose: bool):
204
- linalg.can_numpy_support_shape = lambda s: use_np_transpose
205
212
  for index in range(3):
206
213
  for x in range(8):
207
214
  initial_state = cirq.to_valid_state_vector(x, 3)
@@ -210,9 +217,8 @@ def test_measure_state_partial_indices(use_np_transpose: bool):
210
217
  assert bits == [bool(1 & (x >> (2 - index)))]
211
218
 
212
219
 
213
- @pytest.mark.parametrize('use_np_transpose', [False, True])
220
+ @pytest.mark.parametrize('use_np_transpose', [False, True], indirect=True)
214
221
  def test_measure_state_partial_indices_order(use_np_transpose: bool):
215
- linalg.can_numpy_support_shape = lambda s: use_np_transpose
216
222
  for x in range(8):
217
223
  initial_state = cirq.to_valid_state_vector(x, 3)
218
224
  bits, state = cirq.measure_state_vector(initial_state, [2, 1])
@@ -220,9 +226,8 @@ def test_measure_state_partial_indices_order(use_np_transpose: bool):
220
226
  assert bits == [bool(1 & (x >> 0)), bool(1 & (x >> 1))]
221
227
 
222
228
 
223
- @pytest.mark.parametrize('use_np_transpose', [False, True])
229
+ @pytest.mark.parametrize('use_np_transpose', [False, True], indirect=True)
224
230
  def test_measure_state_partial_indices_all_orders(use_np_transpose: bool):
225
- linalg.can_numpy_support_shape = lambda s: use_np_transpose
226
231
  for perm in itertools.permutations([0, 1, 2]):
227
232
  for x in range(8):
228
233
  initial_state = cirq.to_valid_state_vector(x, 3)
@@ -231,9 +236,8 @@ def test_measure_state_partial_indices_all_orders(use_np_transpose: bool):
231
236
  assert bits == [bool(1 & (x >> (2 - p))) for p in perm]
232
237
 
233
238
 
234
- @pytest.mark.parametrize('use_np_transpose', [False, True])
239
+ @pytest.mark.parametrize('use_np_transpose', [False, True], indirect=True)
235
240
  def test_measure_state_collapse(use_np_transpose: bool):
236
- linalg.can_numpy_support_shape = lambda s: use_np_transpose
237
241
  initial_state = np.zeros(8, dtype=np.complex64)
238
242
  initial_state[0] = 1 / np.sqrt(2)
239
243
  initial_state[2] = 1 / np.sqrt(2)
@@ -256,9 +260,8 @@ def test_measure_state_collapse(use_np_transpose: bool):
256
260
  assert bits == [False]
257
261
 
258
262
 
259
- @pytest.mark.parametrize('use_np_transpose', [False, True])
263
+ @pytest.mark.parametrize('use_np_transpose', [False, True], indirect=True)
260
264
  def test_measure_state_seed(use_np_transpose: bool):
261
- linalg.can_numpy_support_shape = lambda s: use_np_transpose
262
265
  n = 10
263
266
  initial_state = np.ones(2**n) / 2 ** (n / 2)
264
267
 
@@ -277,9 +280,8 @@ def test_measure_state_seed(use_np_transpose: bool):
277
280
  np.testing.assert_allclose(state1, state2)
278
281
 
279
282
 
280
- @pytest.mark.parametrize('use_np_transpose', [False, True])
283
+ @pytest.mark.parametrize('use_np_transpose', [False, True], indirect=True)
281
284
  def test_measure_state_out_is_state(use_np_transpose: bool):
282
- linalg.can_numpy_support_shape = lambda s: use_np_transpose
283
285
  initial_state = np.zeros(8, dtype=np.complex64)
284
286
  initial_state[0] = 1 / np.sqrt(2)
285
287
  initial_state[2] = 1 / np.sqrt(2)
@@ -290,9 +292,8 @@ def test_measure_state_out_is_state(use_np_transpose: bool):
290
292
  assert state is initial_state
291
293
 
292
294
 
293
- @pytest.mark.parametrize('use_np_transpose', [False, True])
295
+ @pytest.mark.parametrize('use_np_transpose', [False, True], indirect=True)
294
296
  def test_measure_state_out_is_not_state(use_np_transpose: bool):
295
- linalg.can_numpy_support_shape = lambda s: use_np_transpose
296
297
  initial_state = np.zeros(8, dtype=np.complex64)
297
298
  initial_state[0] = 1 / np.sqrt(2)
298
299
  initial_state[2] = 1 / np.sqrt(2)
@@ -302,18 +303,16 @@ def test_measure_state_out_is_not_state(use_np_transpose: bool):
302
303
  assert out is state
303
304
 
304
305
 
305
- @pytest.mark.parametrize('use_np_transpose', [False, True])
306
+ @pytest.mark.parametrize('use_np_transpose', [False, True], indirect=True)
306
307
  def test_measure_state_not_power_of_two(use_np_transpose: bool):
307
- linalg.can_numpy_support_shape = lambda s: use_np_transpose
308
308
  with pytest.raises(ValueError, match='3'):
309
309
  _, _ = cirq.measure_state_vector(np.array([1, 0, 0]), [1])
310
310
  with pytest.raises(ValueError, match='5'):
311
311
  cirq.measure_state_vector(np.array([0, 1, 0, 0, 0]), [1])
312
312
 
313
313
 
314
- @pytest.mark.parametrize('use_np_transpose', [False, True])
314
+ @pytest.mark.parametrize('use_np_transpose', [False, True], indirect=True)
315
315
  def test_measure_state_index_out_of_range(use_np_transpose: bool):
316
- linalg.can_numpy_support_shape = lambda s: use_np_transpose
317
316
  state = cirq.to_valid_state_vector(0, 3)
318
317
  with pytest.raises(IndexError, match='-2'):
319
318
  cirq.measure_state_vector(state, [-2])
@@ -321,18 +320,16 @@ def test_measure_state_index_out_of_range(use_np_transpose: bool):
321
320
  cirq.measure_state_vector(state, [3])
322
321
 
323
322
 
324
- @pytest.mark.parametrize('use_np_transpose', [False, True])
323
+ @pytest.mark.parametrize('use_np_transpose', [False, True], indirect=True)
325
324
  def test_measure_state_no_indices(use_np_transpose: bool):
326
- linalg.can_numpy_support_shape = lambda s: use_np_transpose
327
325
  initial_state = cirq.to_valid_state_vector(0, 3)
328
326
  bits, state = cirq.measure_state_vector(initial_state, [])
329
327
  assert [] == bits
330
328
  np.testing.assert_almost_equal(state, initial_state)
331
329
 
332
330
 
333
- @pytest.mark.parametrize('use_np_transpose', [False, True])
331
+ @pytest.mark.parametrize('use_np_transpose', [False, True], indirect=True)
334
332
  def test_measure_state_no_indices_out_is_state(use_np_transpose: bool):
335
- linalg.can_numpy_support_shape = lambda s: use_np_transpose
336
333
  initial_state = cirq.to_valid_state_vector(0, 3)
337
334
  bits, state = cirq.measure_state_vector(initial_state, [], out=initial_state)
338
335
  assert [] == bits
@@ -340,9 +337,8 @@ def test_measure_state_no_indices_out_is_state(use_np_transpose: bool):
340
337
  assert state is initial_state
341
338
 
342
339
 
343
- @pytest.mark.parametrize('use_np_transpose', [False, True])
340
+ @pytest.mark.parametrize('use_np_transpose', [False, True], indirect=True)
344
341
  def test_measure_state_no_indices_out_is_not_state(use_np_transpose: bool):
345
- linalg.can_numpy_support_shape = lambda s: use_np_transpose
346
342
  initial_state = cirq.to_valid_state_vector(0, 3)
347
343
  out = np.zeros_like(initial_state)
348
344
  bits, state = cirq.measure_state_vector(initial_state, [], out=out)
@@ -352,9 +348,8 @@ def test_measure_state_no_indices_out_is_not_state(use_np_transpose: bool):
352
348
  assert out is not initial_state
353
349
 
354
350
 
355
- @pytest.mark.parametrize('use_np_transpose', [False, True])
351
+ @pytest.mark.parametrize('use_np_transpose', [False, True], indirect=True)
356
352
  def test_measure_state_empty_state(use_np_transpose: bool):
357
- linalg.can_numpy_support_shape = lambda s: use_np_transpose
358
353
  initial_state = np.array([1.0])
359
354
  bits, state = cirq.measure_state_vector(initial_state, [])
360
355
  assert [] == bits
@@ -14,7 +14,7 @@
14
14
 
15
15
  """Transformer pass that pushes 180° rotations around axes in the XY plane later in the circuit."""
16
16
 
17
- from typing import Optional, cast, TYPE_CHECKING, Iterable, Tuple, Dict
17
+ from typing import Optional, cast, TYPE_CHECKING, Iterable, Iterator, Tuple, Dict
18
18
  import sympy
19
19
  import numpy as np
20
20
 
@@ -127,7 +127,7 @@ def _absorb_z_into_w(
127
127
 
128
128
  def _dump_held(
129
129
  qubits: Iterable[ops.Qid], held_w_phases: Dict[ops.Qid, value.TParamVal]
130
- ) -> 'cirq.OP_TREE':
130
+ ) -> Iterator['cirq.OP_TREE']:
131
131
  # Note: sorting is to avoid non-determinism in the insertion order.
132
132
  for q in sorted(qubits):
133
133
  p = held_w_phases.get(q)
@@ -14,7 +14,7 @@
14
14
 
15
15
  """Transformer pass that pushes Z gates later and later in the circuit."""
16
16
 
17
- from typing import Dict, Iterable, Optional, Tuple, TYPE_CHECKING
17
+ from typing import Dict, Iterable, Iterator, Optional, Tuple, TYPE_CHECKING
18
18
  from collections import defaultdict
19
19
  import numpy as np
20
20
 
@@ -76,7 +76,7 @@ def eject_z(
76
76
  lambda: None
77
77
  )
78
78
 
79
- def dump_tracked_phase(qubits: Iterable[ops.Qid]) -> 'cirq.OP_TREE':
79
+ def dump_tracked_phase(qubits: Iterable[ops.Qid]) -> Iterator['cirq.OP_TREE']:
80
80
  """Zeroes qubit_phase entries by emitting Z gates."""
81
81
  for q in qubits:
82
82
  p, key = qubit_phase[q], last_phased_xz_op[q]
@@ -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 Optional, List
15
+ from typing import Iterator, List, Optional
16
16
  import pytest
17
17
 
18
18
  import cirq
@@ -64,7 +64,7 @@ def test_map_operations_does_not_insert_too_many_moments():
64
64
  q = cirq.LineQubit.range(5)
65
65
  c_orig = cirq.Circuit(cirq.CX(q[0], q[1]), cirq.CX(q[3], q[2]), cirq.CX(q[3], q[4]))
66
66
 
67
- def map_func(op: cirq.Operation, _: int) -> cirq.OP_TREE:
67
+ def map_func(op: cirq.Operation, _: int) -> Iterator[cirq.OP_TREE]:
68
68
  yield cirq.Z.on_each(*op.qubits)
69
69
  yield cirq.CX(*op.qubits)
70
70
  yield cirq.Z.on_each(*op.qubits)
@@ -130,7 +130,7 @@ def test_map_operations_deep_subcircuits():
130
130
  .with_tags("external")
131
131
  )
132
132
 
133
- def map_func(op: cirq.Operation, _: int) -> cirq.OP_TREE:
133
+ def map_func(op: cirq.Operation, _: int) -> Iterator[cirq.OP_TREE]:
134
134
  yield (
135
135
  [cirq.Z.on_each(*op.qubits), cirq.CX(*op.qubits), cirq.Z.on_each(*op.qubits)]
136
136
  if op.gate == cirq.CX
cirq/value/linear_dict.py CHANGED
@@ -13,7 +13,7 @@
13
13
  # limitations under the License.
14
14
 
15
15
  """Linear combination represented as mapping of things to coefficients."""
16
- import numbers
16
+
17
17
  from typing import (
18
18
  Any,
19
19
  Callable,
@@ -34,7 +34,9 @@ from typing import (
34
34
  )
35
35
  from typing_extensions import Self
36
36
 
37
- Scalar = Union[complex, float, numbers.Complex]
37
+ import numpy as np
38
+
39
+ Scalar = Union[complex, np.number]
38
40
  TVector = TypeVar('TVector')
39
41
 
40
42
  TDefault = TypeVar('TDefault')
@@ -124,7 +126,7 @@ class LinearDict(Generic[TVector], MutableMapping[TVector, Scalar]):
124
126
 
125
127
  def clean(self, *, atol: float = 1e-9) -> Self:
126
128
  """Remove terms with coefficients of absolute value atol or less."""
127
- negligible = [v for v, c in self._terms.items() if abs(c) <= atol] # type: ignore[operator]
129
+ negligible = [v for v, c in self._terms.items() if abs(complex(c)) <= atol]
128
130
  for v in negligible:
129
131
  del self._terms[v]
130
132
  return self
@@ -245,7 +247,7 @@ class LinearDict(Generic[TVector], MutableMapping[TVector, Scalar]):
245
247
  result *= a
246
248
  return result
247
249
 
248
- def __rmul__(self, a: Scalar) -> Self:
250
+ def __rmul__(self, a: Scalar) -> Self: # type: ignore
249
251
  return self.__mul__(a)
250
252
 
251
253
  def __truediv__(self, a: Scalar) -> Self:
cirq/vis/heatmap.py CHANGED
@@ -11,6 +11,9 @@
11
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
+
15
+ from __future__ import annotations
16
+
14
17
  import copy
15
18
  from dataclasses import astuple, dataclass
16
19
  from typing import (
@@ -25,6 +28,7 @@ from typing import (
25
28
  SupportsFloat,
26
29
  Tuple,
27
30
  Union,
31
+ TYPE_CHECKING,
28
32
  )
29
33
 
30
34
  import matplotlib as mpl
@@ -36,6 +40,9 @@ from mpl_toolkits import axes_grid1
36
40
  from cirq.devices import grid_qubit
37
41
  from cirq.vis import vis_utils
38
42
 
43
+ if TYPE_CHECKING:
44
+ from numpy.typing import ArrayLike
45
+
39
46
  QubitTuple = Tuple[grid_qubit.GridQubit, ...]
40
47
 
41
48
  Polygon = Sequence[Tuple[float, float]]
@@ -233,13 +240,14 @@ class Heatmap:
233
240
  ax: plt.Axes,
234
241
  ) -> None:
235
242
  """Writes annotations to the center of cells. Internal."""
243
+ facecolor: ArrayLike
236
244
  for (center, annotation), facecolor in zip(centers_and_annot, collection.get_facecolor()):
237
245
  # Calculate the center of the cell, assuming that it is a square
238
246
  # centered at (x=col, y=row).
239
247
  if not annotation:
240
248
  continue
241
249
  x, y = center
242
- face_luminance = vis_utils.relative_luminance(facecolor) # type: ignore
250
+ face_luminance = vis_utils.relative_luminance(facecolor)
243
251
  text_color = 'black' if face_luminance > 0.4 else 'white'
244
252
  text_kwargs: Dict[str, Any] = dict(color=text_color, ha="center", va="center")
245
253
  text_kwargs.update(self._config.get('annotation_text_kwargs', {}))
@@ -90,7 +90,8 @@ def plot_state_histogram(
90
90
  if isinstance(data, result.Result):
91
91
  values = get_state_histogram(data)
92
92
  elif isinstance(data, collections.Counter):
93
- tick_label, values = zip(*sorted(data.items()))
93
+ tick_label, counts = zip(*sorted(data.items()))
94
+ values = np.asarray(counts)
94
95
  else:
95
96
  values = np.array(data)
96
97
  if tick_label is None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cirq-core
3
- Version: 1.5.0.dev20240823014143
3
+ Version: 1.5.0.dev20240823202236
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=nAuX_Sr_Xs6cWGmmWiO_E1iKF2-Gtf1cF2A-NRnQ2Tw,1206
8
- cirq/_version_test.py,sha256=-Jib-U95iAKnSNKBxpkFaFWkZ0kBhj25hCt_gq1yZQ4,147
7
+ cirq/_version.py,sha256=uaGhZkeL79MtoC6D7pZ2um3GMHGp_uak0AS4Q8A9QhA,1206
8
+ cirq/_version_test.py,sha256=wxtN3zuBxxteFI1ehg0I_MYAWknJe8ZXQx97iScz_ek,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
@@ -17,8 +17,8 @@ cirq/circuits/_box_drawing_character_data.py,sha256=QLoCXwcLL7091RdxEKO259goxt4R
17
17
  cirq/circuits/_box_drawing_character_data_test.py,sha256=XO94z0piwZRHaNZHTf-5tKHQ4MKcDruMeRIKdT8GbYA,1624
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
- cirq/circuits/circuit.py,sha256=XIwQh9Gkb8ya4Q2Q92EfsAUh9W6YZemcGqlu1cZCi2s,114620
21
- cirq/circuits/circuit_operation.py,sha256=cdcx8vxzATR-qmpYV2p1Bya98tvru3JndSUU1T-XJr0,34737
20
+ cirq/circuits/circuit.py,sha256=uDm3vkFesQbNLnKevL8bgcV850GZedMtqtLOzTdiUck,114604
21
+ cirq/circuits/circuit_operation.py,sha256=3CfJd7zhEMub792vgb2VO545rsj68yX_YEYMirySI3U,34705
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
24
  cirq/circuits/frozen_circuit.py,sha256=s-OWD4ngioE41NG1jQJbLrJd7dP283aYn7IOahbJQw4,9259
@@ -29,7 +29,7 @@ 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
32
- cirq/circuits/qasm_output.py,sha256=3cN7m0-pztNqkJTzLZEWt0aD-CC008WItz94Abut9H4,12032
32
+ cirq/circuits/qasm_output.py,sha256=Ry3sFtvdOSourjeYMLYm2rxeLS9jGXmQBtfsNkOj_7c,12052
33
33
  cirq/circuits/qasm_output_test.py,sha256=pQjA8bsiT9MryXZqiWOiN5uIYsI5k22XowcZx0bcKDk,12539
34
34
  cirq/circuits/text_diagram_drawer.py,sha256=ctZUG5fk2pf4XswHTJG4kteQYzzH0TefL9JWUagLJvc,17232
35
35
  cirq/circuits/text_diagram_drawer_test.py,sha256=2bSoBIeQajRi0aQxqYDpbMlT2eqpx_f-Cmg9XO6A9Jk,10750
@@ -37,24 +37,24 @@ cirq/contrib/__init__.py,sha256=q8NwuMeqIzKaLsO9L6eKuZbGpldBsvaiIPWou37sZjo,1006
37
37
  cirq/contrib/json.py,sha256=zX1l2tVWECSub076q8BmTLEZGl5FUS3Hnf-L2hQblsg,753
38
38
  cirq/contrib/json_test.py,sha256=I9t_WpBfTBaIxKVo0HjK806V_FguTSBR95Y2gu-qYBo,1117
39
39
  cirq/contrib/acquaintance/__init__.py,sha256=ggeEgdL-XaBQeEiAcKgknHN4WEwWSu7jAe24GNgG3-o,2233
40
- cirq/contrib/acquaintance/bipartite.py,sha256=_UcKNBiCg9j6XcLDINV41KPWKIzEzpmDRd6MlqQOufI,6496
40
+ cirq/contrib/acquaintance/bipartite.py,sha256=iEElNihoQ0m1pt5f0bPOIubPnRqqbPJSEhc-WumIJgM,6526
41
41
  cirq/contrib/acquaintance/bipartite_test.py,sha256=hjdJfjDsd2pnUdpph5n9kTWEclSvocsAEmnTbBT21Ak,15648
42
42
  cirq/contrib/acquaintance/devices.py,sha256=1hWW9_WF5TZQXFMu9-yXNTk3GfSETyjikNboPQvPYWk,3031
43
43
  cirq/contrib/acquaintance/devices_test.py,sha256=icl_9SOp8PuZu7msfW5H7zP7_-zfTwTjyPPkajDu-w4,1088
44
- cirq/contrib/acquaintance/executor.py,sha256=nshs5RdmsRhOhYdrr7htXURHdc_S5EL950jAref4k3I,8589
44
+ cirq/contrib/acquaintance/executor.py,sha256=cdj8U9Wiv8HAupU_hezEaMbeFSq1nMgqPfWrk-8XsrI,8609
45
45
  cirq/contrib/acquaintance/executor_test.py,sha256=ir-LKuQTfHm5WCcjmLriJ8qCT89YnltLpFx89Q3bF_I,7837
46
- cirq/contrib/acquaintance/gates.py,sha256=c1IWi2n-ppRT5lzsdI-V1FwT3FPyhLK4ttk_uNk-dM4,13432
46
+ cirq/contrib/acquaintance/gates.py,sha256=o6drWh7kEBga6SWt5_E_UaSsqxFcKJ-twJv-tXTXJoU,13493
47
47
  cirq/contrib/acquaintance/gates_test.py,sha256=5FVX7zAtZSUqDPNsXk_Wm7LwDmHIApzgNhjAIX1IQBM,15010
48
- cirq/contrib/acquaintance/inspection_utils.py,sha256=962Nmgqxgllg8LiTpBLN9g25CXAAn1z8yydnSf3O9xk,2587
48
+ cirq/contrib/acquaintance/inspection_utils.py,sha256=-olAKpSZPm4Q9xhaQwAjT2ovUqZQd5zXAJ0ImkffOWk,2607
49
49
  cirq/contrib/acquaintance/inspection_utils_test.py,sha256=N5WyOkZaP7Vy0DRoiq6ZtQ1S99j5F7XyRPnyRLJqmtM,1250
50
50
  cirq/contrib/acquaintance/mutation_utils.py,sha256=HM9mjXufOYRrCO1ydusiJuCh4RnzJkB0876kDilMsqg,4732
51
51
  cirq/contrib/acquaintance/mutation_utils_test.py,sha256=r_0IdvjSqres1KWs4o4HEb8a5WATovIBOUIAjVeIzns,7848
52
52
  cirq/contrib/acquaintance/optimizers.py,sha256=xAdmecOLiO4-GDO8v5O3uYNAjjSKSDk8_vz7rm7Mjm4,2092
53
53
  cirq/contrib/acquaintance/optimizers_test.py,sha256=-MBJT0JkvxjEwknHA6Q6PoAzrC_JwRBjAfpMwQjWoj0,2455
54
- cirq/contrib/acquaintance/permutation.py,sha256=xNd03J9l0nUB1gngdmV4rPrKq-_MjsowKau8AnopmzQ,11836
54
+ cirq/contrib/acquaintance/permutation.py,sha256=0Qfg6UYmEJDgHCFaedFHzdmgsqCGwzKnJC0pCBt-EJE,11870
55
55
  cirq/contrib/acquaintance/permutation_test.py,sha256=ASeOCXr4oiIK31L31uWsDokZemp5fHoMtWrPVEZcfmk,11503
56
- cirq/contrib/acquaintance/shift.py,sha256=xeTtvP3rFFsghjESwBOTx2Fd4qVUjG-sWY9LhrDESj4,3039
57
- cirq/contrib/acquaintance/shift_swap_network.py,sha256=mK0p-XMxi3a56X05D8zzlUnbDRar5D5Ry916Vh6lWGg,5263
56
+ cirq/contrib/acquaintance/shift.py,sha256=9t2YQn5sfMNfyOuc9LonrL3rjB-HwqmTS8TP2Ebg-kE,3059
57
+ cirq/contrib/acquaintance/shift_swap_network.py,sha256=XQaF8akqi4F_zb1_dYmV3u_T9Yumnene36AtkqcEtQo,5283
58
58
  cirq/contrib/acquaintance/shift_swap_network_test.py,sha256=lFbP4ATIc1R-MXc3xwoC9TKvJOBu2aWo-8KX-M5ti5c,11590
59
59
  cirq/contrib/acquaintance/shift_test.py,sha256=FnY-D0i4CZsE0v1GLf30u_JyIYDtzV06O-Hd0tDnuXc,4555
60
60
  cirq/contrib/acquaintance/testing.py,sha256=auzzDDTTBiE6-0PGnJs-etYwozGqBoJ7JVlPuXcky-E,1582
@@ -67,7 +67,7 @@ cirq/contrib/acquaintance/strategies/cubic_test.py,sha256=0ZgDl8uNv9lG1TxQSaCEjN
67
67
  cirq/contrib/acquaintance/strategies/quartic_paired.py,sha256=V1XQE9hkVACcYo5Ar-TBLzxuovio-QIbwSfJLPtdBpI,2559
68
68
  cirq/contrib/acquaintance/strategies/quartic_paired_test.py,sha256=zIMocEKc6rcCSJlyBsI2EJqiNY_iLVrNqruzqiQFDMk,2129
69
69
  cirq/contrib/bayesian_network/__init__.py,sha256=FhDrnKmiOzWmFbOOdMk8M3qNe81N7cuEsxe92o6Gg6c,669
70
- cirq/contrib/bayesian_network/bayesian_network_gate.py,sha256=T44ddSF3Lcl5GCyLsf-4auWgz-hEjUFMIi3OZuFqRA4,9137
70
+ cirq/contrib/bayesian_network/bayesian_network_gate.py,sha256=WchaOQe6zPQe72I1UA2o5plnnckoyyp3VU5rvUQ7ono,9157
71
71
  cirq/contrib/bayesian_network/bayesian_network_gate_test.py,sha256=d263Wm3yGedN87SraSlea9OMb0yy3ZkNRnaEYZd8AcU,5876
72
72
  cirq/contrib/circuitdag/__init__.py,sha256=YE8_jiIhGZ6_W13QyCLiCuqDgNhVyHgRxH_8gj6pNe0,721
73
73
  cirq/contrib/circuitdag/circuit_dag.py,sha256=cZo6yW8b09-p8L8F5Z7aQQyZ5e5vnFXnn9XrWRD3dok,6977
@@ -101,7 +101,7 @@ cirq/contrib/paulistring/pauli_string_optimize.py,sha256=81MDk6rKl0jmw7DXFkA02Ym
101
101
  cirq/contrib/paulistring/pauli_string_optimize_test.py,sha256=f1BWjg8IGw5ChXFYNVhYKNIrFul8PgvpnOEadkRm-3Q,2897
102
102
  cirq/contrib/paulistring/recombine.py,sha256=SU6DNj3Y9Wicf9pMP3IYzdWV7Fuz1DA_1v2AtUVnuF4,4355
103
103
  cirq/contrib/paulistring/recombine_test.py,sha256=hJ083nR67JsIs38TfmCjmBLnhqyG0rBfqtBhTptDlic,1895
104
- cirq/contrib/paulistring/separate.py,sha256=Oecv27vZ6VVLjFkA3KVYA90BGKVqm0MfCJQ8z7XE2-E,3941
104
+ cirq/contrib/paulistring/separate.py,sha256=2g4l78mXYJDR6xkv51VExZDb-rm5JEvhYrpMPgWa0Us,3961
105
105
  cirq/contrib/paulistring/separate_test.py,sha256=FzR78MSHDhNJxizbXreK6u3BeYhT7xn7W1QyHfEZ34E,1267
106
106
  cirq/contrib/qasm_import/__init__.py,sha256=mCO3gwxM4y95TkTs5P-donhvqbKZsRguOLM8gnXRWJw,706
107
107
  cirq/contrib/qasm_import/_lexer.py,sha256=busw1Td1pJR-MBNGW-km1i9t2XKEqZTZ3zJnG6vXkmA,2943
@@ -186,7 +186,7 @@ cirq/experiments/purity_estimation.py,sha256=6D1UwFlQRzHeajXMTyTUfBYAc0jJQ8Cfz4l
186
186
  cirq/experiments/purity_estimation_test.py,sha256=xlBGp0NOBYR0IhTy3bckHPgi81FkGSGxKqk9hwXG-I8,923
187
187
  cirq/experiments/qubit_characterizations.py,sha256=-a-krc7Pw68VjsVvQmeZ92oXrpeME31j4cVrAkKFkr4,36730
188
188
  cirq/experiments/qubit_characterizations_test.py,sha256=b_ONqxyW6s01Ts8T65BEdb4e8Xy24Qp4zTGXWesL0ic,9733
189
- cirq/experiments/random_quantum_circuit_generation.py,sha256=R_w7z35plUHEYBY0-F80bPcWJSSSjNQDaP2GbxVBEZg,28143
189
+ cirq/experiments/random_quantum_circuit_generation.py,sha256=GIA4qdrgECcZlvGOiWtKL0hGyuNJbRtzhrzPJXKI0iQ,28167
190
190
  cirq/experiments/random_quantum_circuit_generation_test.py,sha256=1rvgN8-Ajedn_70FyYKVzjvzR6NVpHj6KQgo6tra-Jc,15995
191
191
  cirq/experiments/readout_confusion_matrix.py,sha256=jIyikXfYWGbVrOjU1pbV2VZL-m03VTFYS18KT1Cf2qk,21404
192
192
  cirq/experiments/readout_confusion_matrix_test.py,sha256=ETvKHVuJWvq8KuL0l6w22UOfZHhBNH-TVeWAKqjSQEc,10632
@@ -216,7 +216,7 @@ cirq/interop/quirk/cells/cell.py,sha256=Ait9MhNPiCrdSefNYMy8kavbkaFuhek3hDhPRfbO
216
216
  cirq/interop/quirk/cells/cell_test.py,sha256=-HDH3PIn8DPtaeUWlfR4bpLWQ-LqF6WQcjFUolUvXCg,2276
217
217
  cirq/interop/quirk/cells/composite_cell.py,sha256=3qlh6q6aTRucWPJ4hioPoHYUVPWn8RnZgItY0Rh7Mm8,5352
218
218
  cirq/interop/quirk/cells/composite_cell_test.py,sha256=oPFKTothfcqjq47ccFNT2dGA3libKnpVM4LwguYE3hs,5308
219
- cirq/interop/quirk/cells/control_cells.py,sha256=Zg6pZYUxmTdPkk3aovfZb4li2_1_hyMLYVK920DTxzQ,5569
219
+ cirq/interop/quirk/cells/control_cells.py,sha256=WDXGjcUk4sOzphJcnXGC-Bvzxcq0BaZJBZxd1ETB8sg,5579
220
220
  cirq/interop/quirk/cells/control_cells_test.py,sha256=rqCmmjE5ym5wqzpTrEGso8dCgrIC6JxnMHqzuk4hfsc,4673
221
221
  cirq/interop/quirk/cells/frequency_space_cells.py,sha256=80JKJx9WvLsOfaUHkfH7SQOR_OxB7F4cp_OVL5X-Kdg,1890
222
222
  cirq/interop/quirk/cells/frequency_space_cells_test.py,sha256=fPAjxnD8sKnuxNdY89K66pdbV4Hi3IxhdeWWni5-Uno,1812
@@ -228,7 +228,7 @@ cirq/interop/quirk/cells/input_rotation_cells.py,sha256=mo75TGkbtD_phNPM-ZPFs2VJ
228
228
  cirq/interop/quirk/cells/input_rotation_cells_test.py,sha256=1jmEBHbHpmSSB3grPbn8LFzMEwkc6Or3kAULxVofTEg,6318
229
229
  cirq/interop/quirk/cells/measurement_cells.py,sha256=1jLtGMHCbxfNN9r5E_GWPIqz7fLdNKJK0WgrcjXsS3I,1504
230
230
  cirq/interop/quirk/cells/measurement_cells_test.py,sha256=AYYzjn3BrQbk-Rg1L3WjCOQN9eGLRQzqwYr6i8UH0Fk,1574
231
- cirq/interop/quirk/cells/parse.py,sha256=lUN0cioK9-1iDnKmrC1X1wpdPwbDwqoEI9QJpF2uFGY,11755
231
+ cirq/interop/quirk/cells/parse.py,sha256=BtLxG7utfS-G4xpr5N-ZpZNyJePiFfkNS9ebt2T3gWQ,11886
232
232
  cirq/interop/quirk/cells/parse_test.py,sha256=xCTS6lKv4i8HAuTSivH2Tjwun1yMQbnl7HLfB-nEKY4,7473
233
233
  cirq/interop/quirk/cells/qubit_permutation_cells.py,sha256=F9Br_SFB1ys4pP-hYlpPRMXH_4Cd8LePtOl4aTE_p8g,3390
234
234
  cirq/interop/quirk/cells/qubit_permutation_cells_test.py,sha256=n0veQKx0EdFzu_gdY_AVjwqyoHae7JGkDFX6qhLeGrQ,4460
@@ -285,13 +285,13 @@ cirq/ops/controlled_operation.py,sha256=sbT1PGUQjV8a014e8TOeZY2N1q6QXF4n0RVJswBt
285
285
  cirq/ops/controlled_operation_test.py,sha256=ioAq2we54vDPAf6ttoUPLWqt1nQzLmkcQ9GQRL60t88,16459
286
286
  cirq/ops/dense_pauli_string.py,sha256=SPrNsgeC2-ETqD2wbZ7R7lOltIUWITqBUHH02dVaMzA,24525
287
287
  cirq/ops/dense_pauli_string_test.py,sha256=duvgzhgTV9wuem4kDSwtL62SEUCThkz1tdP984-C4_s,21504
288
- cirq/ops/diagonal_gate.py,sha256=W_yXf4qZY_AeP32VN-0u4lS0-WsqjWTg2VSABaO06Wk,9024
288
+ cirq/ops/diagonal_gate.py,sha256=_-Pzt3T6U1Oq6DwExIjCmVYBBSWY6EoBNCKHpzWIRzk,9021
289
289
  cirq/ops/diagonal_gate_test.py,sha256=cPHxjc7g2oTcXt5UFm470oo0eJupubSNzs4TccKHlSc,6223
290
290
  cirq/ops/eigen_gate.py,sha256=YFb42bTPkt9EkH6kx2u3gUQT97S1BK5a4YOzZcCnsmw,18350
291
291
  cirq/ops/eigen_gate_test.py,sha256=-7l6GmAd1EYzHoGREQN1n7J1VOQKbThH2mA88TRODs8,13928
292
292
  cirq/ops/fourier_transform.py,sha256=pynO07OcZSVCeL8L0pNQ9m_y5_wrpTWOMf99BHpjXdU,7579
293
293
  cirq/ops/fourier_transform_test.py,sha256=PIK4bWnCIy2TuX0fgclHeU1CBDT6zRVoQpv1v1jt62c,6220
294
- cirq/ops/fsim_gate.py,sha256=H9Yz2XkUiNk0Mv6aJxL80yxwjvwrB9mO0zDUGF5LDcs,18695
294
+ cirq/ops/fsim_gate.py,sha256=eAQP2XPWW_1nItjzv__75eqhruCbKkFB1Y_eL1ov10c,18725
295
295
  cirq/ops/fsim_gate_test.py,sha256=owW1VpXntJqxlzhtppnyfaS9gQKFNA6UzCHksgPHaHU,25165
296
296
  cirq/ops/gate_features.py,sha256=414mSi3kgKSwLOeAG_WEZKn8ZMaLtOowed7os1qSnM4,1049
297
297
  cirq/ops/gate_features_test.py,sha256=mnlqJnSpllcOnTUdvmUs_ssnPRhAIgHhKIAK2Z86Dfg,2347
@@ -307,7 +307,7 @@ cirq/ops/identity.py,sha256=vS4Gown5dJWm89gNKBZ9vXQL3ijwAJZ9JFu7NtfAQw8,5827
307
307
  cirq/ops/identity_test.py,sha256=-z5TjxNaD3_z73nGdR3RbHt6ytaYOAyYggCzwZtlQDw,7568
308
308
  cirq/ops/kraus_channel.py,sha256=tCPAEzr_GAL5vTwI43rBoiOnT04l-ebZanuuEuYWDo8,5085
309
309
  cirq/ops/kraus_channel_test.py,sha256=qH2Y9cngXzKCabd-Mq5xBYcM_wyL8c6KkrXw8kZr7Dc,4726
310
- cirq/ops/linear_combinations.py,sha256=vK-IKHwdIBbOEaUz92JaA3uC4WTIDgUYCOCa1zZpdkw,39685
310
+ cirq/ops/linear_combinations.py,sha256=WqQ2STxGpgO6KUj4yc6LfSI9OWCdzlmWMt6BkTkf2wA,39694
311
311
  cirq/ops/linear_combinations_test.py,sha256=qpzRo53mJtcidYE11loKMP2b9guKMGtzrKWQ_u0jr4Y,66387
312
312
  cirq/ops/matrix_gates.py,sha256=8ARvpHWYFgwmlT99-Gxoa24i_mxKLvdj_RhoQvglKQw,9290
313
313
  cirq/ops/matrix_gates_test.py,sha256=m5rMwq_sqVvsmkc5opVr3Ikd1ERuULmSRNAvGZUg7ds,14224
@@ -323,31 +323,31 @@ cirq/ops/op_tree.py,sha256=iXsIFcQCciU7C9SiPxhd_zrp4TBGCsmnqxKDjUl1aEo,6159
323
323
  cirq/ops/op_tree_test.py,sha256=h4phqrxQwYAfyu8o4f_fLi3WP2kdVuzWqrSCWGLHo_c,5575
324
324
  cirq/ops/parallel_gate.py,sha256=RSj1SuiwbDCMWxvTmi3xz7oE2QXBFgA59emijh4JPkE,6335
325
325
  cirq/ops/parallel_gate_test.py,sha256=M6o3AyXFQrwyiOTtGxlYH09TbHdjtTxCuMjmn-ALnn0,6298
326
- cirq/ops/parity_gates.py,sha256=FVXd1h-HqftRAFfYGSmz0URR_lvVG4kpwav0mxf6DtU,14354
326
+ cirq/ops/parity_gates.py,sha256=tmyb42wBRwaUzELwUcxhRDPfqwM-6KMIO2OcynsFnFA,14384
327
327
  cirq/ops/parity_gates_test.py,sha256=7C0BmJl1HuoyVzfA8-lVCTiE1qNYQhMtyQlVx2uvFKA,11244
328
328
  cirq/ops/pauli_gates.py,sha256=sqqQEKEU89cmb1pzLPnrZ5XC0LchSXid8tHLQs8xJnk,6984
329
329
  cirq/ops/pauli_gates_test.py,sha256=bHt7A2w0auWxN9gyKAVeimT1KeOHz5C_CjFHSK1V-Co,7752
330
- cirq/ops/pauli_interaction_gate.py,sha256=GQtK5lRw2Uh7hs2GsoRxe-VMlMTO8PxDeZNVT6_qOWI,5499
330
+ cirq/ops/pauli_interaction_gate.py,sha256=Ep7XwZMVP81Qq1J2MTc3kJ79h26daOZcLPxqN3KTYFk,5519
331
331
  cirq/ops/pauli_interaction_gate_test.py,sha256=U9ORW5Ayx5PESPFiGESzWY-02qHklYcM1mYW56RWe_A,4544
332
- cirq/ops/pauli_measurement_gate.py,sha256=tq_OlHlTLQa6yah--afE2UMNdF4a_vfXi8XT8ww2ELc,7215
332
+ cirq/ops/pauli_measurement_gate.py,sha256=AS9tzLGAOhJzRzVsW9m-WPz5Wx0sMS1jzhppn5qtW84,7239
333
333
  cirq/ops/pauli_measurement_gate_test.py,sha256=uh3J0Ps3V3578V8qkRiEgIl6jBiv8DsXlk_vzLvOEhQ,6720
334
334
  cirq/ops/pauli_string.py,sha256=WSBDv939ujl51KiE0UDsYHUk3d5B9degjNLCuFvyQ6c,67519
335
- cirq/ops/pauli_string_phasor.py,sha256=F1Gftw8TDb9qdJjQti6xxbOpXbFUFCVwn3r8073wRbY,17604
335
+ cirq/ops/pauli_string_phasor.py,sha256=qcQZqjg8Ua-_KmiHQYYt9X_vELjs_oXsyUwlYfrmcL0,17614
336
336
  cirq/ops/pauli_string_phasor_test.py,sha256=HGEPjPc7ySeshOnMJHNjtyckFuEXLvxgy-TtnU6fETM,27582
337
337
  cirq/ops/pauli_string_raw_types.py,sha256=6CgdPWYmOziP4uZbrIsRW0sDSMmV1GioGdAk0owFITU,2240
338
338
  cirq/ops/pauli_string_raw_types_test.py,sha256=SZPluslZPGffPq93F5apESBygWZ2cj7BEX6dQuawRQE,2648
339
339
  cirq/ops/pauli_string_test.py,sha256=ekj755Fe5up8-0nXCozUlne6NCxvb8FrwZ8Qp6CAmRI,74583
340
340
  cirq/ops/pauli_sum_exponential.py,sha256=n3fhKWJVMudzGuOcdPHskVNx3fHE2MAblVdkzbDtcz4,4909
341
341
  cirq/ops/pauli_sum_exponential_test.py,sha256=wVnJ3FSpEimHT8ERVkmljALrgSuuDYo6GRg91uJ7ztk,5370
342
- cirq/ops/permutation_gate.py,sha256=5xTXmnjFF3h8kgWV4wDnHBe4foeeqwEm-69I38WmK3k,4176
342
+ cirq/ops/permutation_gate.py,sha256=2h8n76N2M3nu5MA8JkRQgVLByq5cOEluKUN042ClSRs,4196
343
343
  cirq/ops/permutation_gate_test.py,sha256=SwXRgsZNLn5jnGhfcKPJ0J0CIssNzElbFaqylV2TXD8,3281
344
- cirq/ops/phased_iswap_gate.py,sha256=8zRuD3uvMt4OFegD9zpEM-foJYbZEYBTIApShUk0BaI,8977
344
+ cirq/ops/phased_iswap_gate.py,sha256=j55nFjdF0r63oaT7cGw0YtosavaV24qUjC9T-8Y4Ghw,8997
345
345
  cirq/ops/phased_iswap_gate_test.py,sha256=oH3RQ8tlSD0sU5Cf3M0uR92y3M1Xd7Yk3ayOoca9Neg,6708
346
346
  cirq/ops/phased_x_gate.py,sha256=QCDhn4tDm_zhjorYWLpP5xOYNByXiaT35nOspJWt5vY,9980
347
347
  cirq/ops/phased_x_gate_test.py,sha256=IpY-Z-MsqtYbyIEdxWu1NqgAJF2B7nddxPc2Hxafr4s,10202
348
- cirq/ops/phased_x_z_gate.py,sha256=5JhVE5TReg7AKy3hhS2mE1UdvIXFsScF56e8mD15mmw,11534
348
+ cirq/ops/phased_x_z_gate.py,sha256=wh12AXeeDvMojtZd-zecV13Yur_QSBYc4kvYBdcfBBA,11555
349
349
  cirq/ops/phased_x_z_gate_test.py,sha256=KK5-FD5zoaqZkw7p6UKxFddzaFWoxnQnE8LpCiKtIk8,10690
350
- cirq/ops/projector.py,sha256=isDlNLR8YS5CxsVCihtRAgfKZXFFQxk7kuFXY14t8ys,5690
350
+ cirq/ops/projector.py,sha256=Eftqti8lwHvzsSFMUzcC8XGaMeH6fdGUdcWprZoMfX8,5686
351
351
  cirq/ops/projector_test.py,sha256=Wq7ddj-PV30yUXJxJoT3XIw2sIUC1AilnZ9m9N5Ejr8,9063
352
352
  cirq/ops/qid_util.py,sha256=SxyoMy_s070lcqXV7ny6vE8pp082OrTjBtawZtHOhXs,2071
353
353
  cirq/ops/qid_util_test.py,sha256=JdViBgFfH4bZJyPKTjUf9MuPxMQe08JV_Tl6tusekfk,1061
@@ -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=hbUwUufTLP7pBICDagQJwYb4BNmZ49IB4uilyR2YLjs,40290
361
+ cirq/ops/raw_types.py,sha256=Lx2BvHc7K_PIOwtHkB_oq7ktv37PeBgd1lQ98UjsOwA,40274
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
@@ -366,11 +366,11 @@ cirq/ops/swap_gates.py,sha256=9eJMGyOiA8W9k2xJ_w5PaLOCHGvB6C4T2RLddIZ5qE8,11601
366
366
  cirq/ops/swap_gates_test.py,sha256=_CihLf6rY4PNphCkH-S5mLJQYZW9ILjnnwUyQ9b0Blg,7452
367
367
  cirq/ops/tags.py,sha256=B3nEsZQTurGPJodH7aDoreNSatqawTxwsmw8fSKaIlc,2294
368
368
  cirq/ops/tags_test.py,sha256=4V9twOuCXd7Glvj9p3RW-tZ4-bfLtC1tmonR4soKNA0,1158
369
- cirq/ops/three_qubit_gates.py,sha256=U6GGi1aNnLbhM40ViSsRqbOIA51i1kjKMEf5ei8TmIg,28482
369
+ cirq/ops/three_qubit_gates.py,sha256=6AM1-5e9qBYbnJXDqdoDhx2HnhtlwAumat0GjwHyFNg,28516
370
370
  cirq/ops/three_qubit_gates_test.py,sha256=iQfQ4p4TwtyHYCqaWOEeZsqszF_Mp49VwlIKRydClMk,11778
371
- cirq/ops/two_qubit_diagonal_gate.py,sha256=UYz2lUN8YzQjaqBZ_rmg6TvLFSRAvSlQGhnPOL5FmNQ,5376
371
+ cirq/ops/two_qubit_diagonal_gate.py,sha256=7ALyJs1ueE3i3v8FesFraaQC8nPp8h73tqeYIuNUVfU,5396
372
372
  cirq/ops/two_qubit_diagonal_gate_test.py,sha256=qiuREluCDKMok3ormBOdDYCFlOS9u1zFLqTsORO5JtM,4000
373
- cirq/ops/uniform_superposition_gate.py,sha256=DBItkN48YM6GJCBITdvztEnacGB0HcEYo55ODC02WE0,4705
373
+ cirq/ops/uniform_superposition_gate.py,sha256=WTO2AUBWIpUtcPGG2eI0r3KWG-pO_tuCV0J_Ka4Chvw,4725
374
374
  cirq/ops/uniform_superposition_gate_test.py,sha256=9N8woRmaFWeuaPMy2K1JlXyTG8bICIpsfmOzXc3NysU,3551
375
375
  cirq/ops/wait_gate.py,sha256=ZJ9cqRysAyUYgfswVWO5C2OkDZ9MFEQjSemLw0w3drA,5654
376
376
  cirq/ops/wait_gate_test.py,sha256=2Uw8ZjFkYGhDosoxbJr_IW2wWdxY8kXR-CLyC69DYRg,3543
@@ -918,7 +918,7 @@ cirq/sim/state_vector_simulation_state.py,sha256=e4it_DT1J-30S3OX_gfMJiWAttFaVOM
918
918
  cirq/sim/state_vector_simulation_state_test.py,sha256=UtGMIurlV6N74nX7qoVnGoRhwF35-ghDEIP7Mj5AXmI,9841
919
919
  cirq/sim/state_vector_simulator.py,sha256=j1Dcu6k3gtX2cHedVlJiSgDQ_WQ2UUUyFnAEeHrOF88,8201
920
920
  cirq/sim/state_vector_simulator_test.py,sha256=wJq1OZRzKokeM9cJyaJXi6wHH2qi97h0HmJlYOEBDzU,7864
921
- cirq/sim/state_vector_test.py,sha256=OjhAL2tWqJWstHV8RvJYQVqg95zm0PcS9nQKrLOhMmQ,16934
921
+ cirq/sim/state_vector_test.py,sha256=AF5LbyRymSjuFDG19gPetp7morKLl8v5yfgf17TFCNg,16586
922
922
  cirq/sim/clifford/__init__.py,sha256=lD7l6JuE5n0xwvOYNYH-giCH3qAEVH1SUwDrZM1jKKY,636
923
923
  cirq/sim/clifford/clifford_simulator.py,sha256=JgwXOpdmiaMnsxfjodNi2OX03IpAKRrIEMZszXxKXZw,9749
924
924
  cirq/sim/clifford/clifford_simulator_test.py,sha256=pgLz8-SSFLBq6kcJ516ufQMJiJI2dG9NM2nkmzwY124,20380
@@ -1031,9 +1031,9 @@ cirq/transformers/drop_negligible_operations.py,sha256=8eyOMy7bra2wJAjORbk6QjwHi
1031
1031
  cirq/transformers/drop_negligible_operations_test.py,sha256=gqL6RoDPm6Zf4RxtprBenFyIsZQPUxmPur9oRl0Yr3U,3823
1032
1032
  cirq/transformers/dynamical_decoupling.py,sha256=OSaJy55nYJmCVgan0VBlxcXeTKPuiJMJDTnnsaKGBFs,12329
1033
1033
  cirq/transformers/dynamical_decoupling_test.py,sha256=kXngZhzV_58cPqpx-zhMmabGzaUKEN_9iS3YV7U7fEE,28410
1034
- cirq/transformers/eject_phased_paulis.py,sha256=mTgRT5aw5_c9ccTkP4Np_4YTWnLzxsMKRO8pOQ7CtYM,13955
1034
+ cirq/transformers/eject_phased_paulis.py,sha256=usuPCxHgZf6Aw6pqIU4vOvaOypH4SiT2lY8VwAnlObs,13975
1035
1035
  cirq/transformers/eject_phased_paulis_test.py,sha256=-mXsfbi3V0ojC_YqoQM5otzdW4kjGusCx6F-kCv8M98,15834
1036
- cirq/transformers/eject_z.py,sha256=0kOyvh6FDfrCrrTCVfpHKNc_kNC_pBdEKoXv11kuqGA,5803
1036
+ cirq/transformers/eject_z.py,sha256=d53z1siUVCPrtNbPls6_RSujz6d2gF77_AQAWhnJmVM,5823
1037
1037
  cirq/transformers/eject_z_test.py,sha256=U0BMdW6nW1cI18I5tE__1YpCvtzDwYGECgqUph5Fc8I,13302
1038
1038
  cirq/transformers/expand_composite.py,sha256=nASRoP4qfjsnX_t2a2hBw8BE7B_JD-0XLGIIXxbIdbc,2387
1039
1039
  cirq/transformers/expand_composite_test.py,sha256=4Gn6LVqr0DeuUumde80O4esOLGIoo86_S_Mk-HwnMfk,8640
@@ -1058,7 +1058,7 @@ cirq/transformers/synchronize_terminal_measurements_test.py,sha256=VTiw5S3s_Y31q
1058
1058
  cirq/transformers/transformer_api.py,sha256=f95sfOr-KYXLt4yxAaFXoG0-oEc8IKApzG4pyXsm3YY,16956
1059
1059
  cirq/transformers/transformer_api_test.py,sha256=f-Vup0VCUvTqJKm5kWHf6xet7sFTerLMGYzJHy8Rc5s,13045
1060
1060
  cirq/transformers/transformer_primitives.py,sha256=ZiQjYLfksI8ZxqvTvhUN0R9X1WvKEYwAo6NymoKGvzw,37658
1061
- cirq/transformers/transformer_primitives_test.py,sha256=KYD1cDE_jAB54WJPjpBdoO2ts8brckOBRb3oZc4tz1I,41695
1061
+ cirq/transformers/transformer_primitives_test.py,sha256=5N23aI-DGRBj2T6Xd7VUiLBXWU6pgNsvmjZXJ3wwous,41725
1062
1062
  cirq/transformers/analytical_decompositions/__init__.py,sha256=ZNtETntol3G_n6uqzGxOmBanGMbCj0QAc-5vicN2jkM,2724
1063
1063
  cirq/transformers/analytical_decompositions/clifford_decomposition.py,sha256=DsuuP91pm2dX0CO4rWwmJAJyAfuXMcA1UJK0g8krp7k,6726
1064
1064
  cirq/transformers/analytical_decompositions/clifford_decomposition_test.py,sha256=AAZh_9vEb5f2E_EItPZTlMRNdv0d47AwqTn4BytX0UI,7102
@@ -1137,7 +1137,7 @@ cirq/value/digits.py,sha256=pUQi6PIA1FMbXUOWknefb6dBApCyLsTkpLFrhvNgE0Q,6024
1137
1137
  cirq/value/digits_test.py,sha256=evx-y619LfjSN_gUO1B6K7O80X5HJmxxBPl61RrOovo,3812
1138
1138
  cirq/value/duration.py,sha256=isNzA1TuKb5rSaAYy4JpgT91Zt9_5XLQBSmMkuWCtD4,10358
1139
1139
  cirq/value/duration_test.py,sha256=C7nwg7IlHoQOUhWa_aX8vy7_qp654ZIDtmnKF35UiqE,8244
1140
- cirq/value/linear_dict.py,sha256=BG3pckQPX4DPqNvp-HxI_dTzQf8sGx6nIRkn0-ye4Qg,10643
1140
+ cirq/value/linear_dict.py,sha256=RyCxuUyoJCTUtTIw3vtVYd2TYKOmcMj7IKOSZcwgU0k,10635
1141
1141
  cirq/value/linear_dict_test.py,sha256=uEHbvobWV4EypOXQGe6B4xh6atLbQq8YSOomNHgv38o,17107
1142
1142
  cirq/value/measurement_key.py,sha256=glvyn36NylWMdtHYLFsD72jPZJsnKpFqQXKh8XpOX4Q,5200
1143
1143
  cirq/value/measurement_key_test.py,sha256=GnEX5QdEVbmi0dR9URcgXQH23aqW7Y_PKmTb2eIdRCg,4466
@@ -1157,11 +1157,11 @@ cirq/value/value_equality_attr_test.py,sha256=k_nl5hWxo4yMO6WNu0wU68wyeb-RN9Ua_I
1157
1157
  cirq/vis/__init__.py,sha256=e3Z1PI-Ay0hDHhIgFZEDwQIuO8C_aayNdL-EByF0J4o,1001
1158
1158
  cirq/vis/density_matrix.py,sha256=kMAPcRh6f0ghZKSe86nB_2iFngrDsw0pNael1EZ5BEw,4819
1159
1159
  cirq/vis/density_matrix_test.py,sha256=Xg41NQZBfoyrkaX3n9pW4q1LIxWpOW3Cr_I_Wx51GlQ,6965
1160
- cirq/vis/heatmap.py,sha256=L1jLSXMM52BcriCqYrhbb7yv1fXverJuwgOM-0ZOL6c,17694
1160
+ cirq/vis/heatmap.py,sha256=lyx1CfPAM8NSv5LcpQM05TFS20QDuzadsffC923_Hls,17821
1161
1161
  cirq/vis/heatmap_test.py,sha256=5kWIxJZZbZcc93XZrZ18lF2gRUleR1iqYbWfHs4cvu4,20531
1162
1162
  cirq/vis/histogram.py,sha256=gQUrcebsk5wgPT38pWFW55jG9zaKhxp8zLRGmmVDk8s,5107
1163
1163
  cirq/vis/histogram_test.py,sha256=Qlw0e3amw_MFga-hNweiLzRCH174W9bB2qkmX_RiS-U,1904
1164
- cirq/vis/state_histogram.py,sha256=4Wd25783W_s0R3qzhSrPFXRjyxQb0_u0lTbDMW8-DK0,4264
1164
+ cirq/vis/state_histogram.py,sha256=adIlRVHz6UdvgGzEQ6qs25HVqitU3p6jIs-JBHGQe5A,4300
1165
1165
  cirq/vis/state_histogram_test.py,sha256=KzxDJedwE-KZR-K_TZlMh01DroSnZPArZPOo4CBEYWI,3761
1166
1166
  cirq/vis/vis_utils.py,sha256=CsNHb9vMBF9UjxZ2k5XqMESbATOx0FXhWAwxFbq-9pQ,1239
1167
1167
  cirq/vis/vis_utils_test.py,sha256=-aiL5WmhPDs_5BF2lDol1koD4JuHTiYxLK2ofyWrbCU,939
@@ -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.dev20240823014143.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
1188
- cirq_core-1.5.0.dev20240823014143.dist-info/METADATA,sha256=Y6w73Pf89GpcZe_ZPFQtmEGdJZzk67nRR-2bsIgcfjk,1992
1189
- cirq_core-1.5.0.dev20240823014143.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
1190
- cirq_core-1.5.0.dev20240823014143.dist-info/top_level.txt,sha256=Sz9iOxHU0IEMLSFGwiwOCaN2e9K-jFbBbtpPN1hB73g,5
1191
- cirq_core-1.5.0.dev20240823014143.dist-info/RECORD,,
1187
+ cirq_core-1.5.0.dev20240823202236.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
1188
+ cirq_core-1.5.0.dev20240823202236.dist-info/METADATA,sha256=klsq1CGGRho9Ux06bwHfvXSxxHu7Ua7jFRLDkklfIus,1992
1189
+ cirq_core-1.5.0.dev20240823202236.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
1190
+ cirq_core-1.5.0.dev20240823202236.dist-info/top_level.txt,sha256=Sz9iOxHU0IEMLSFGwiwOCaN2e9K-jFbBbtpPN1hB73g,5
1191
+ cirq_core-1.5.0.dev20240823202236.dist-info/RECORD,,