cirq-core 1.5.0.dev20250109220553__py3-none-any.whl → 1.5.0.dev20250110193226__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 (28) hide show
  1. cirq/_compat.py +6 -0
  2. cirq/_version.py +1 -1
  3. cirq/_version_test.py +1 -1
  4. cirq/json_resolver_cache.py +6 -0
  5. cirq/ops/classically_controlled_operation_test.py +62 -0
  6. cirq/protocols/hash_from_pickle_test.py +6 -0
  7. cirq/protocols/json_serialization.py +6 -0
  8. cirq/protocols/json_test_data/SympyCondition.json +60 -15
  9. cirq/protocols/json_test_data/SympyCondition.repr +4 -1
  10. cirq/protocols/json_test_data/sympy.And.json +13 -0
  11. cirq/protocols/json_test_data/sympy.And.repr +1 -0
  12. cirq/protocols/json_test_data/sympy.Indexed.json +18 -0
  13. cirq/protocols/json_test_data/sympy.Indexed.repr +1 -0
  14. cirq/protocols/json_test_data/sympy.IndexedBase.json +9 -0
  15. cirq/protocols/json_test_data/sympy.IndexedBase.repr +1 -0
  16. cirq/protocols/json_test_data/sympy.Not.json +9 -0
  17. cirq/protocols/json_test_data/sympy.Not.repr +1 -0
  18. cirq/protocols/json_test_data/sympy.Or.json +13 -0
  19. cirq/protocols/json_test_data/sympy.Or.repr +1 -0
  20. cirq/protocols/json_test_data/sympy.Xor.json +13 -0
  21. cirq/protocols/json_test_data/sympy.Xor.repr +1 -0
  22. cirq/value/condition.py +23 -3
  23. cirq/value/condition_test.py +46 -0
  24. {cirq_core-1.5.0.dev20250109220553.dist-info → cirq_core-1.5.0.dev20250110193226.dist-info}/METADATA +1 -1
  25. {cirq_core-1.5.0.dev20250109220553.dist-info → cirq_core-1.5.0.dev20250110193226.dist-info}/RECORD +28 -16
  26. {cirq_core-1.5.0.dev20250109220553.dist-info → cirq_core-1.5.0.dev20250110193226.dist-info}/LICENSE +0 -0
  27. {cirq_core-1.5.0.dev20250109220553.dist-info → cirq_core-1.5.0.dev20250110193226.dist-info}/WHEEL +0 -0
  28. {cirq_core-1.5.0.dev20250109220553.dist-info → cirq_core-1.5.0.dev20250110193226.dist-info}/top_level.txt +0 -0
cirq/_compat.py CHANGED
@@ -151,6 +151,12 @@ def proper_repr(value: Any) -> str:
151
151
  'StrictLessThan',
152
152
  'Equality',
153
153
  'Unequality',
154
+ 'And',
155
+ 'Or',
156
+ 'Not',
157
+ 'Xor',
158
+ 'Indexed',
159
+ 'IndexedBase',
154
160
  ]
155
161
 
156
162
  class Printer(sympy.printing.repr.ReprPrinter):
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.dev20250109220553"
31
+ __version__ = "1.5.0.dev20250110193226"
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.dev20250109220553"
6
+ assert cirq.__version__ == "1.5.0.dev20250110193226"
@@ -273,6 +273,12 @@ def _class_resolver_dictionary() -> Dict[str, ObjectFactory]:
273
273
  'sympy.StrictLessThan': lambda args: sympy.StrictLessThan(*args),
274
274
  'sympy.Equality': lambda args: sympy.Equality(*args),
275
275
  'sympy.Unequality': lambda args: sympy.Unequality(*args),
276
+ 'sympy.And': lambda args: sympy.And(*args),
277
+ 'sympy.Or': lambda args: sympy.Or(*args),
278
+ 'sympy.Not': lambda args: sympy.Not(*args),
279
+ 'sympy.Xor': lambda args: sympy.Xor(*args),
280
+ 'sympy.Indexed': lambda args: sympy.Indexed(*args),
281
+ 'sympy.IndexedBase': lambda args: sympy.IndexedBase(*args),
276
282
  'sympy.Float': lambda approx: sympy.Float(approx),
277
283
  'sympy.Integer': sympy.Integer,
278
284
  'sympy.Rational': sympy.Rational,
@@ -1127,3 +1127,65 @@ m1: ═════@════^═══════
1127
1127
  └──┘
1128
1128
  """,
1129
1129
  )
1130
+
1131
+
1132
+ def test_sympy_indexed_condition_circuit():
1133
+ a = sympy.IndexedBase('a')
1134
+ # XOR the 2nd and 3rd bits of the measurement (big-endian)
1135
+ cond = cirq.SympyCondition(sympy.Xor(a[1], a[2]))
1136
+ q0, q1, q2, q3 = cirq.LineQubit.range(4)
1137
+ sim = cirq.Simulator()
1138
+ circuit = cirq.Circuit(
1139
+ cirq.measure(q0, q1, q2, key='a'),
1140
+ cirq.X(q3).with_classical_controls(cond),
1141
+ cirq.measure(q3, key='b'),
1142
+ )
1143
+ cirq.testing.assert_has_diagram(
1144
+ circuit,
1145
+ """
1146
+ 0: ───M──────────────────────────────────────────
1147
+
1148
+ 1: ───M──────────────────────────────────────────
1149
+
1150
+ 2: ───M──────────────────────────────────────────
1151
+
1152
+ 3: ───╫───X(conditions=[a[1] ^ a[2]])───M('b')───
1153
+ ║ ║
1154
+ a: ═══@═══^══════════════════════════════════════
1155
+ """,
1156
+ )
1157
+ result = sim.sample(circuit)
1158
+ assert result['a'][0] == 0b000
1159
+ assert result['b'][0] == 0
1160
+ circuit.insert(0, cirq.X(q2))
1161
+ result = sim.sample(circuit)
1162
+ assert result['a'][0] == 0b001
1163
+ assert result['b'][0] == 1
1164
+ circuit.insert(0, cirq.X(q1))
1165
+ circuit.insert(0, cirq.X(q2))
1166
+ result = sim.sample(circuit)
1167
+ assert result['a'][0] == 0b010
1168
+ assert result['b'][0] == 1
1169
+ circuit.insert(0, cirq.X(q2))
1170
+ result = sim.sample(circuit)
1171
+ assert result['a'][0] == 0b011
1172
+ assert result['b'][0] == 0
1173
+ circuit.insert(0, cirq.X(q0))
1174
+ circuit.insert(0, cirq.X(q1))
1175
+ circuit.insert(0, cirq.X(q2))
1176
+ result = sim.sample(circuit)
1177
+ assert result['a'][0] == 0b100
1178
+ assert result['b'][0] == 0
1179
+ circuit.insert(0, cirq.X(q2))
1180
+ result = sim.sample(circuit)
1181
+ assert result['a'][0] == 0b101
1182
+ assert result['b'][0] == 1
1183
+ circuit.insert(0, cirq.X(q1))
1184
+ circuit.insert(0, cirq.X(q2))
1185
+ result = sim.sample(circuit)
1186
+ assert result['a'][0] == 0b110
1187
+ assert result['b'][0] == 1
1188
+ circuit.insert(0, cirq.X(q2))
1189
+ result = sim.sample(circuit)
1190
+ assert result['a'][0] == 0b111
1191
+ assert result['b'][0] == 0
@@ -43,6 +43,12 @@ _EXCLUDE_JSON_FILES = (
43
43
  "cirq/protocols/json_test_data/sympy.StrictLessThan.json",
44
44
  "cirq/protocols/json_test_data/sympy.Symbol.json",
45
45
  "cirq/protocols/json_test_data/sympy.Unequality.json",
46
+ "cirq/protocols/json_test_data/sympy.And.json",
47
+ "cirq/protocols/json_test_data/sympy.Not.json",
48
+ "cirq/protocols/json_test_data/sympy.Or.json",
49
+ "cirq/protocols/json_test_data/sympy.Xor.json",
50
+ "cirq/protocols/json_test_data/sympy.Indexed.json",
51
+ "cirq/protocols/json_test_data/sympy.IndexedBase.json",
46
52
  "cirq/protocols/json_test_data/sympy.pi.json",
47
53
  # RigettiQCSAspenDevice does not pickle
48
54
  "cirq_rigetti/json_test_data/RigettiQCSAspenDevice.json",
@@ -255,6 +255,12 @@ class CirqEncoder(json.JSONEncoder):
255
255
  sympy.StrictLessThan,
256
256
  sympy.Equality,
257
257
  sympy.Unequality,
258
+ sympy.And,
259
+ sympy.Or,
260
+ sympy.Not,
261
+ sympy.Xor,
262
+ sympy.Indexed,
263
+ sympy.IndexedBase,
258
264
  ),
259
265
  ):
260
266
  return {'cirq_type': f'sympy.{o.__class__.__name__}', 'args': o.args}
@@ -1,17 +1,62 @@
1
- {
2
- "cirq_type": "SympyCondition",
3
- "expr":
1
+ [
4
2
  {
5
- "cirq_type": "sympy.GreaterThan",
6
- "args": [
7
- {
8
- "cirq_type": "sympy.Symbol",
9
- "name": "a"
10
- },
11
- {
12
- "cirq_type": "sympy.Symbol",
13
- "name": "b"
14
- }
15
- ]
3
+ "cirq_type": "SympyCondition",
4
+ "expr": {
5
+ "cirq_type": "sympy.GreaterThan",
6
+ "args": [
7
+ {
8
+ "cirq_type": "sympy.Symbol",
9
+ "name": "a"
10
+ },
11
+ {
12
+ "cirq_type": "sympy.Symbol",
13
+ "name": "b"
14
+ }
15
+ ]
16
+ }
17
+ },
18
+ {
19
+ "cirq_type": "SympyCondition",
20
+ "expr": {
21
+ "cirq_type": "sympy.Xor",
22
+ "args": [
23
+ {
24
+ "cirq_type": "sympy.Indexed",
25
+ "args": [
26
+ {
27
+ "cirq_type": "sympy.IndexedBase",
28
+ "args": [
29
+ {
30
+ "cirq_type": "sympy.Symbol",
31
+ "name": "a"
32
+ }
33
+ ]
34
+ },
35
+ {
36
+ "cirq_type": "sympy.Integer",
37
+ "i": 0
38
+ }
39
+ ]
40
+ },
41
+ {
42
+ "cirq_type": "sympy.Indexed",
43
+ "args": [
44
+ {
45
+ "cirq_type": "sympy.IndexedBase",
46
+ "args": [
47
+ {
48
+ "cirq_type": "sympy.Symbol",
49
+ "name": "a"
50
+ }
51
+ ]
52
+ },
53
+ {
54
+ "cirq_type": "sympy.Integer",
55
+ "i": 1
56
+ }
57
+ ]
58
+ }
59
+ ]
60
+ }
16
61
  }
17
- }
62
+ ]
@@ -1 +1,4 @@
1
- cirq.SympyCondition(sympy.GreaterThan(sympy.Symbol('a'), sympy.Symbol('b')))
1
+ [
2
+ cirq.SympyCondition(sympy.GreaterThan(sympy.Symbol('a'), sympy.Symbol('b'))),
3
+ cirq.SympyCondition(sympy.Xor(sympy.Indexed(sympy.IndexedBase(sympy.Symbol('a')), sympy.Integer(0)), sympy.Indexed(sympy.IndexedBase(sympy.Symbol('a')), sympy.Integer(1))))
4
+ ]
@@ -0,0 +1,13 @@
1
+ {
2
+ "cirq_type": "sympy.And",
3
+ "args": [
4
+ {
5
+ "cirq_type": "sympy.Symbol",
6
+ "name": "s"
7
+ },
8
+ {
9
+ "cirq_type": "sympy.Symbol",
10
+ "name": "t"
11
+ }
12
+ ]
13
+ }
@@ -0,0 +1 @@
1
+ sympy.And(sympy.Symbol('s'), sympy.Symbol('t'))
@@ -0,0 +1,18 @@
1
+ {
2
+ "cirq_type": "sympy.Indexed",
3
+ "args": [
4
+ {
5
+ "cirq_type": "sympy.IndexedBase",
6
+ "args": [
7
+ {
8
+ "cirq_type": "sympy.Symbol",
9
+ "name": "s"
10
+ }
11
+ ]
12
+ },
13
+ {
14
+ "cirq_type": "sympy.Integer",
15
+ "i": 1
16
+ }
17
+ ]
18
+ }
@@ -0,0 +1 @@
1
+ sympy.Indexed(sympy.IndexedBase(sympy.Symbol('s')),sympy.Integer(1))
@@ -0,0 +1,9 @@
1
+ {
2
+ "cirq_type": "sympy.IndexedBase",
3
+ "args": [
4
+ {
5
+ "cirq_type": "sympy.Symbol",
6
+ "name": "s"
7
+ }
8
+ ]
9
+ }
@@ -0,0 +1 @@
1
+ sympy.IndexedBase(sympy.Symbol('s'))
@@ -0,0 +1,9 @@
1
+ {
2
+ "cirq_type": "sympy.Not",
3
+ "args": [
4
+ {
5
+ "cirq_type": "sympy.Symbol",
6
+ "name": "s"
7
+ }
8
+ ]
9
+ }
@@ -0,0 +1 @@
1
+ sympy.Not(sympy.Symbol('s'))
@@ -0,0 +1,13 @@
1
+ {
2
+ "cirq_type": "sympy.Or",
3
+ "args": [
4
+ {
5
+ "cirq_type": "sympy.Symbol",
6
+ "name": "s"
7
+ },
8
+ {
9
+ "cirq_type": "sympy.Symbol",
10
+ "name": "t"
11
+ }
12
+ ]
13
+ }
@@ -0,0 +1 @@
1
+ sympy.Or(sympy.Symbol('s'), sympy.Symbol('t'))
@@ -0,0 +1,13 @@
1
+ {
2
+ "cirq_type": "sympy.Xor",
3
+ "args": [
4
+ {
5
+ "cirq_type": "sympy.Symbol",
6
+ "name": "s"
7
+ },
8
+ {
9
+ "cirq_type": "sympy.Symbol",
10
+ "name": "t"
11
+ }
12
+ ]
13
+ }
@@ -0,0 +1 @@
1
+ sympy.Xor(sympy.Symbol('s'), sympy.Symbol('t'))
cirq/value/condition.py CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  import abc
16
16
  import dataclasses
17
- from typing import Mapping, Tuple, TYPE_CHECKING, FrozenSet, Optional
17
+ from typing import Any, Dict, FrozenSet, Mapping, Optional, Tuple, TYPE_CHECKING
18
18
 
19
19
  import sympy
20
20
 
@@ -142,6 +142,12 @@ class SympyCondition(Condition):
142
142
  This condition resolves to True iff the sympy expression resolves to a
143
143
  truthy value (i.e. `bool(x) == True`) when the measurement keys are
144
144
  substituted in as the free variables.
145
+
146
+ `sympy.IndexedBase` can be used for bitwise conditions. For example, the
147
+ following will create a condition that is controlled by the XOR of the
148
+ first two bits (big-endian) of measurement 'a'.
149
+ >>> a = sympy.IndexedBase('a')
150
+ >>> cond = cirq.SympyCondition(sympy.Xor(a[0], a[1]))
145
151
  """
146
152
 
147
153
  expr: sympy.Basic
@@ -151,6 +157,9 @@ class SympyCondition(Condition):
151
157
  return tuple(
152
158
  measurement_key.MeasurementKey.parse_serialized(symbol.name)
153
159
  for symbol in self.expr.free_symbols
160
+ if isinstance(symbol, sympy.Symbol)
161
+ # For bitwise ops, both Symbol ('a') and Indexed ('a[0]') are returned. We only want to
162
+ # keep the former here.
154
163
  )
155
164
 
156
165
  def replace_key(self, current: 'cirq.MeasurementKey', replacement: 'cirq.MeasurementKey'):
@@ -167,8 +176,19 @@ class SympyCondition(Condition):
167
176
  if missing:
168
177
  raise ValueError(f'Measurement keys {missing} missing when testing classical control')
169
178
 
170
- replacements = {str(k): classical_data.get_int(k) for k in self.keys}
171
- return bool(self.expr.subs(replacements))
179
+ replacements: Dict[str, Any] = {}
180
+ for symbol in self.expr.free_symbols:
181
+ if isinstance(symbol, sympy.Symbol):
182
+ name = symbol.name
183
+ key = measurement_key.MeasurementKey.parse_serialized(name)
184
+ replacements[str(key)] = classical_data.get_int(key)
185
+ for symbol in self.expr.free_symbols:
186
+ if isinstance(symbol, sympy.Indexed):
187
+ name = symbol.base.name
188
+ key = measurement_key.MeasurementKey.parse_serialized(name)
189
+ replacements[str(key)] = tuple(classical_data.get_digits(key))
190
+ value = self.expr.subs(replacements)
191
+ return bool(value)
172
192
 
173
193
  def _json_dict_(self):
174
194
  return json_serialization.dataclass_json_dict(self)
@@ -140,6 +140,52 @@ def test_sympy_condition_resolve():
140
140
  _ = resolve({'0:b': [[1]]})
141
141
 
142
142
 
143
+ def test_sympy_indexed_condition():
144
+ a = sympy.IndexedBase('a')
145
+ cond = cirq.SympyCondition(sympy.Xor(a[0], a[1]))
146
+ assert cond.keys == (cirq.MeasurementKey('a'),)
147
+ assert str(cond) == 'a[0] ^ a[1]'
148
+
149
+ def resolve(records):
150
+ classical_data = cirq.ClassicalDataDictionaryStore(_records=records)
151
+ return cond.resolve(classical_data)
152
+
153
+ assert not resolve({'a': [(0, 0)]})
154
+ assert resolve({'a': [(1, 0)]})
155
+ assert resolve({'a': [(0, 1)]})
156
+ assert not resolve({'a': [(1, 1)]})
157
+ assert resolve({'a': [(0, 1, 0)]})
158
+ assert resolve({'a': [(0, 1, 1)]})
159
+ assert not resolve({'a': [(1, 1, 0)]})
160
+ assert not resolve({'a': [(1, 1, 1)]})
161
+ with pytest.raises(IndexError):
162
+ assert resolve({'a': [()]})
163
+ with pytest.raises(IndexError):
164
+ assert resolve({'a': [(0,)]})
165
+ with pytest.raises(IndexError):
166
+ assert resolve({'a': [(1,)]})
167
+
168
+
169
+ def test_sympy_indexed_condition_qudits():
170
+ a = sympy.IndexedBase('a')
171
+ cond = cirq.SympyCondition(sympy.And(a[1] >= 2, a[2] <= 3))
172
+ assert cond.keys == (cirq.MeasurementKey('a'),)
173
+ assert str(cond) == '(a[1] >= 2) & (a[2] <= 3)'
174
+
175
+ def resolve(records):
176
+ classical_data = cirq.ClassicalDataDictionaryStore(_records=records)
177
+ return cond.resolve(classical_data)
178
+
179
+ assert not resolve({'a': [(0, 0, 0)]})
180
+ assert not resolve({'a': [(0, 1, 0)]})
181
+ assert resolve({'a': [(0, 2, 0)]})
182
+ assert resolve({'a': [(0, 3, 0)]})
183
+ assert not resolve({'a': [(0, 0, 4)]})
184
+ assert not resolve({'a': [(0, 1, 4)]})
185
+ assert not resolve({'a': [(0, 2, 4)]})
186
+ assert not resolve({'a': [(0, 3, 4)]})
187
+
188
+
143
189
  def test_sympy_condition_qasm():
144
190
  # Measurements get prepended with "m_", so the condition needs to be too.
145
191
  assert cirq.SympyCondition(sympy.Eq(sympy.Symbol('a'), 2)).qasm == 'm_a==2'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cirq-core
3
- Version: 1.5.0.dev20250109220553
3
+ Version: 1.5.0.dev20250110193226
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
@@ -1,13 +1,13 @@
1
1
  cirq/__init__.py,sha256=Qi4qkUVdT7je-13VrMLdVVcF1RPHI3nR8oTUs90l9OI,28084
2
- cirq/_compat.py,sha256=wl0Z7OYLpt07Vjts5l82jWjZE3WTy3uMHXaHwLwZKuo,29406
2
+ cirq/_compat.py,sha256=_DknO27XngcjEidNApRsCzLUWDS4QmDk9M12BaqP5Is,29531
3
3
  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=-h1WdckH1miU7woT8dYt5E3sBtsoY2GQZeQBRR0n4OY,1206
8
- cirq/_version_test.py,sha256=P-y_7950Afh0lJFQJljrTDA0eq4SfxGLGUXOyZcmfkg,147
7
+ cirq/_version.py,sha256=aLivJ2QQroXAAGa1f9uYsRnHO0W15r17VfAOrtBamBw,1206
8
+ cirq/_version_test.py,sha256=tWvnH5g25T2NqkMUHa0oIpnhflLMSSXug4Bz-TrW0WU,147
9
9
  cirq/conftest.py,sha256=X7yLFL8GLhg2CjPw0hp5e_dGASfvHx1-QT03aUbhKJw,1168
10
- cirq/json_resolver_cache.py,sha256=03MVo6Y-UYrzt9CKHmwpiBLN2ixL6uSU-OWnKZXfG7k,13302
10
+ cirq/json_resolver_cache.py,sha256=5fPH07VyuACPlPo8ifHTAePrasf-pKwQ12Wf-Nz96Uw,13636
11
11
  cirq/py.typed,sha256=VFSlmh_lNwnaXzwY-ZuW-C2Ws5PkuDoVgBdNCs0jXJE,63
12
12
  cirq/circuits/__init__.py,sha256=HKunqRpZoDmjy1IiK9Cn84MTGT84_PMeQ5VDCPafcWk,1335
13
13
  cirq/circuits/_block_diagram_drawer.py,sha256=06ceNV01cMx4irIGYnztfLt_HDNhK3AwfsiNh686hjU,9510
@@ -269,7 +269,7 @@ cirq/ops/arithmetic_operation_test.py,sha256=axy8xy9IvDb-ATUV-LE1HNWRqCEz06VyZWV
269
269
  cirq/ops/boolean_hamiltonian.py,sha256=li003lNq6zS8pNPTobqzfzYJvyvaIpCVo3wkliI6Hzk,14930
270
270
  cirq/ops/boolean_hamiltonian_test.py,sha256=1ey5yfYZPKZDsfM3jpCPAOpbPs_y8i4K_WvDK2d5_4Y,8518
271
271
  cirq/ops/classically_controlled_operation.py,sha256=qTOsbGRZFbQIaBj9iee31V_V8oMLqWIJjgFomy3kg4A,9104
272
- cirq/ops/classically_controlled_operation_test.py,sha256=foRpG95H886b9WHxCB7VJpvWA8Vi7LX8L7QPRqvaO-s,47858
272
+ cirq/ops/classically_controlled_operation_test.py,sha256=nIYyXfNH4E2IibZSLk6QDVHpfJQbuI_iWwirCH8rhi8,50209
273
273
  cirq/ops/clifford_gate.py,sha256=qAKS0wqqoHljOF63treyR95I6H0yWFZBiHQoM4sLgSc,39350
274
274
  cirq/ops/clifford_gate_test.py,sha256=NF_if1X8LCMA9hy0vBO7lxvVPdumlvMMnI2XRQ-RLpk,37472
275
275
  cirq/ops/common_channels.py,sha256=uqgocTUhtuJ4VZI_9_3L34gBRTf1A10mByhZY4Q1fB8,38283
@@ -400,10 +400,10 @@ cirq/protocols/has_stabilizer_effect_protocol.py,sha256=XH6Lv9SGuYhuuSB0mi5v8Eg5
400
400
  cirq/protocols/has_stabilizer_effect_protocol_test.py,sha256=0ia7ehyGpmscjRP448dBANZKwnlbqSODdPUYRUhDEN0,3879
401
401
  cirq/protocols/has_unitary_protocol.py,sha256=inj17qr8Pz2Zofj0Lsp2o7TWlfmdU1TybtRjs1TWVow,5372
402
402
  cirq/protocols/has_unitary_protocol_test.py,sha256=IjmJ3dqvteFUUO4FLwCTokgUvYy8H2HJjLmTDzt2__Q,5610
403
- cirq/protocols/hash_from_pickle_test.py,sha256=kjGb1_7Hil8egA3b_fkvA8xOJpuac0vd5dH-GtWgMN8,4061
403
+ cirq/protocols/hash_from_pickle_test.py,sha256=rcY7nFo17Vo7ZEzvyW2bSIuPIoSq3hB6tpN1EjC4dNs,4384
404
404
  cirq/protocols/inverse_protocol.py,sha256=CEqtGRRj86WQyyALonRXxQrNq-fENOs_Zqrlr_BVau8,4115
405
405
  cirq/protocols/inverse_protocol_test.py,sha256=pqqIU4_G4Npc9Z-SeoM9eCB2T5JRTeI02NCXhP0UtaI,2017
406
- cirq/protocols/json_serialization.py,sha256=kzTl_2bGp6OXFG4preXtmEviEa_aGGSkkDirSAngywI,24344
406
+ cirq/protocols/json_serialization.py,sha256=zwNSm0nHBRJp5NBwOksJ3gkBVzl87Nw6ZC5b-OqvxGg,24517
407
407
  cirq/protocols/json_serialization_test.py,sha256=kOM7-DWVy0jy7SBx-RgNNiExm-Ot4wbYm0JKtl9uF0w,27737
408
408
  cirq/protocols/kraus_protocol.py,sha256=8jed4J2VhyB4NNeZd04Vk5UhCDifuOK-JVdWJyNYKzw,9140
409
409
  cirq/protocols/kraus_protocol_test.py,sha256=QpPwkk7XBiGKNdrOcjXqtvhESVbUzujnUPz47uUNyqc,5401
@@ -748,8 +748,8 @@ cirq/protocols/json_test_data/SwapPowGate.json,sha256=I1ZVxusP8SzxwW2n3Z1XjIugux
748
748
  cirq/protocols/json_test_data/SwapPowGate.repr,sha256=Zr6oWijotmJVMeywjUikY0dPwXUZnfBJ6UMDqZIEwLI,29
749
749
  cirq/protocols/json_test_data/SymmetricalQidPair.json_inward,sha256=RfD0Jy1OE8GRKrMHYLy5ADQsYZ2n_WUFKPy3YMEfihw,171
750
750
  cirq/protocols/json_test_data/SymmetricalQidPair.repr_inward,sha256=HoS6O8xbikCUU1k7CGjkCWNqBq0UUl-I5B1aQ7ebSXU,49
751
- cirq/protocols/json_test_data/SympyCondition.json,sha256=X4HTi8KotQDyP9-EEhXV59XmBJ2RuCv_M62JHazNS6o,259
752
- cirq/protocols/json_test_data/SympyCondition.repr,sha256=WWpULvB0W18b_mzWBD0Bs6HnWQR7uN1qV6CDvF06Q5Q,76
751
+ cirq/protocols/json_test_data/SympyCondition.json,sha256=E3CHdecvRGhpukhJLxRUzwU-7j_xOV2SpYHCMc6oasg,1244
752
+ cirq/protocols/json_test_data/SympyCondition.repr,sha256=bLvqMeovrpidl37-x46NhKkVbR-erYpZnVa1cf5g0DM,254
753
753
  cirq/protocols/json_test_data/T.json,sha256=cQ6Lr96RK4lbRN8w7BkhzwcyjbN3zEdOoAa1RPEmbEg,72
754
754
  cirq/protocols/json_test_data/T.repr,sha256=HNwqoQ8INnlYEf_he7OVMYgMGw_eQAjC1umsxuA9YRA,6
755
755
  cirq/protocols/json_test_data/TOFFOLI.json,sha256=-Ch9-If0fyeWYFak9stM8uJ8iHa2g8blkyK5hKqCg8o,71
@@ -848,6 +848,8 @@ cirq/protocols/json_test_data/pandas.MultiIndex.repr,sha256=g4q-1zFWYG8T7IAI0anQ
848
848
  cirq/protocols/json_test_data/spec.py,sha256=b_9-k4vW8eHi8umSwo7ryDAkjvUb74aW-UvZRKONaXY,5615
849
849
  cirq/protocols/json_test_data/sympy.Add.json,sha256=fVilRXllnMRnQcXuoU06IlwZOWK9Kwim1t6Q_s6z97g,1000
850
850
  cirq/protocols/json_test_data/sympy.Add.repr,sha256=9L_05ZlcrFpo8QoExFAAO_kEEpc7SSqGyp0vudkRlsU,228
851
+ cirq/protocols/json_test_data/sympy.And.json,sha256=eaM07ihBPjZbn44gRIy6TbXeEwblF-QN32Jb1ATAQ5Q,178
852
+ cirq/protocols/json_test_data/sympy.And.repr,sha256=EFN2FEj37avIYn5AUyYycrQdIXANEABEdS2xKjQaKRc,47
851
853
  cirq/protocols/json_test_data/sympy.E.json,sha256=d2NfgXTX-YhePH-I0SkkI-lSSJ6PkqTnUZ-yngh9GQk,39
852
854
  cirq/protocols/json_test_data/sympy.E.repr,sha256=5TZkWsfhPeqaM5BUy4U_PrJOeJi4OogjqHSHlNPwMb4,11
853
855
  cirq/protocols/json_test_data/sympy.Equality.json,sha256=QB4ZR-brr3-DYLIDlzesq9Rcy3GlgU4YS12psrzur5M,183
@@ -858,12 +860,20 @@ cirq/protocols/json_test_data/sympy.Float.json,sha256=HFkBmN51ZoGF93U16X_9vRUVkN
858
860
  cirq/protocols/json_test_data/sympy.Float.repr,sha256=H2uK53HNWTF4tAG6TTP1Wuhvss-aAqWnI26sLNWOG60,52
859
861
  cirq/protocols/json_test_data/sympy.GreaterThan.json,sha256=RceHlPzCXOgE-hRrW9BMsXgR9DF24ok_Q_ptbMHtZec,186
860
862
  cirq/protocols/json_test_data/sympy.GreaterThan.repr,sha256=1O4MH_mCEhNaksrE_Fau_JW-mENwZSpSEZb2D61OsYs,55
863
+ cirq/protocols/json_test_data/sympy.Indexed.json,sha256=p678vhUV1kP-O7TL85V3OWfGDxWP6p58sL4dX3K1e8M,270
864
+ cirq/protocols/json_test_data/sympy.Indexed.repr,sha256=oheRHGYZc1SRGSr7UeVbg0SAuQM-z4qNbqRlzUKByRw,68
865
+ cirq/protocols/json_test_data/sympy.IndexedBase.json,sha256=ROJjG422YZbFmC4AWbQN9cMQkXC50VRIbo_Bq2OifOk,120
866
+ cirq/protocols/json_test_data/sympy.IndexedBase.repr,sha256=4YW8dM4s85Di6x9B8ZBV5b3Lxccelt9Y-C5U4OlVygM,36
861
867
  cirq/protocols/json_test_data/sympy.Integer.json,sha256=P1T8fJhXoMMN9RwTCXNAVsPA0022btcv1NkyP5QA7_0,56
862
868
  cirq/protocols/json_test_data/sympy.Integer.repr,sha256=dabVVMIK3-iXbhD4-8GR573r8CXfC2gyTu5GX_8JoFs,21
863
869
  cirq/protocols/json_test_data/sympy.LessThan.json,sha256=pYMllJqZcjAcH6-EU_N7lmcyQkR4pAXwH-UXaEKveaE,183
864
870
  cirq/protocols/json_test_data/sympy.LessThan.repr,sha256=UiCWBJlPEM1mTrXODmmHdigaHjv8olz9hodXSJtfPkM,52
865
871
  cirq/protocols/json_test_data/sympy.Mul.json,sha256=v6ync9FPSpGCMm215OFP6Ys-aNzZEUfoaJjQvxjGwJs,794
866
872
  cirq/protocols/json_test_data/sympy.Mul.repr,sha256=PyuiEzSnRFkhTO43ZUyL5H63mWEIcPSYrsEtOSsLdQ0,179
873
+ cirq/protocols/json_test_data/sympy.Not.json,sha256=pbGra21C3e6nYfVLQPSUZi6-fGjDMjkouRpKqZsvy8w,112
874
+ cirq/protocols/json_test_data/sympy.Not.repr,sha256=4np2NPnSsMJJRKO1W1ez5Fsj_HKzDnItzfNNLhhYeyg,28
875
+ cirq/protocols/json_test_data/sympy.Or.json,sha256=ldjgZWPfy2SxrPtPIAoD5aJ5r5zUlS52K1FN4IQWyr8,177
876
+ cirq/protocols/json_test_data/sympy.Or.repr,sha256=_jBJmKzI6kOtrG17Fme6LcTRZa7A3L2rgBoqDBKuZ94,46
867
877
  cirq/protocols/json_test_data/sympy.Pow.json,sha256=9t2ho1233pZBRu42LWfplkLZb4mqmRkQQ72dZx28GeY,612
868
878
  cirq/protocols/json_test_data/sympy.Pow.repr,sha256=Pq980YU8aHzUv5j_BUmwDHeGgzVi1rXX8N06Uqc_exg,148
869
879
  cirq/protocols/json_test_data/sympy.Rational.json,sha256=Nwgk-Tu5ycAjHhuhkokNFx4nIl4zuw4QTwMYiTLIZvc,69
@@ -876,6 +886,8 @@ cirq/protocols/json_test_data/sympy.Symbol.json,sha256=MvEdH0ou6Z1CRhKrTcPAABSlD
876
886
  cirq/protocols/json_test_data/sympy.Symbol.repr,sha256=vnQ0m3ghzzcMgF7aQqFAIX44BKNzAKGArMuTLjOypKc,41
877
887
  cirq/protocols/json_test_data/sympy.Unequality.json,sha256=Bd2vedLFPwZuWyIcipOYXT6G3wfTj-_I8HmoZ0_pBLY,185
878
888
  cirq/protocols/json_test_data/sympy.Unequality.repr,sha256=PsC01doMaEuySfnFUQhHdcAq9tlmLzSdQ8WKe8PUaTM,54
889
+ cirq/protocols/json_test_data/sympy.Xor.json,sha256=irgOYOU5To1SNNxdGC_mRveem8RpX-dn8VUThzJOFZY,178
890
+ cirq/protocols/json_test_data/sympy.Xor.repr,sha256=JJQpRqs9zS_NGgbgvK6a_smY_xPWquua5VsbJ8V5slw,47
879
891
  cirq/protocols/json_test_data/sympy.pi.json,sha256=9LMRtr_ef-On0sxRe0vbUeXZt8cdDvvPvmmwXZ5iwnw,40
880
892
  cirq/protocols/json_test_data/sympy.pi.repr,sha256=ZQS0my0esr3dWTZ3mWlqgR63uorPCpuSkOgnvu_x_c4,12
881
893
  cirq/qis/__init__.py,sha256=7yOctnS4jY-rTfV9fKMbddVh1m8GjZDf3_hx4A7ZOcM,2892
@@ -1136,8 +1148,8 @@ cirq/value/angle.py,sha256=vNZfTE3WmbWPYBKSPt--wvTub5bgUhmKR7ao_dIlyBQ,3313
1136
1148
  cirq/value/angle_test.py,sha256=PqeTBGJw6zfain4cG8FYMobtYQsfyxLQeBu_CF5fIjg,3548
1137
1149
  cirq/value/classical_data.py,sha256=so7OCCfEGU2XU1yc5kWz2yhryK8s4FFChqi9GEV4hqE,11607
1138
1150
  cirq/value/classical_data_test.py,sha256=23ZraKZ-V3p-uux21bkcboQcEp81RW6VKnVIYPQc6_o,5231
1139
- cirq/value/condition.py,sha256=6zySgSYoBILG9jpybxQns3J_Yni3tsd-bM6aI69AUPo,6842
1140
- cirq/value/condition_test.py,sha256=qA2o54siDnTXdvCP2meoynhGgUnbIgqN-WiUqdruGbA,5208
1151
+ cirq/value/condition.py,sha256=ie1MBRAHkZpVdNEPAW8Ew3RnLeqAjctQlgly41vP1nU,7887
1152
+ cirq/value/condition_test.py,sha256=TViocolFwabyabjWS7-oACVI-b8vcolX9Zs_K-4b0_A,6835
1141
1153
  cirq/value/digits.py,sha256=pUQi6PIA1FMbXUOWknefb6dBApCyLsTkpLFrhvNgE0Q,6024
1142
1154
  cirq/value/digits_test.py,sha256=evx-y619LfjSN_gUO1B6K7O80X5HJmxxBPl61RrOovo,3812
1143
1155
  cirq/value/duration.py,sha256=isNzA1TuKb5rSaAYy4JpgT91Zt9_5XLQBSmMkuWCtD4,10358
@@ -1189,8 +1201,8 @@ cirq/work/sampler.py,sha256=bE5tmVkcR6cZZMLETxDfHehdsYUMbx2RvBeIBetehI4,19187
1189
1201
  cirq/work/sampler_test.py,sha256=hL2UWx3dz2ukZVNxWftiKVvJcQoLplLZdQm-k1QcA40,13282
1190
1202
  cirq/work/zeros_sampler.py,sha256=x1C7cup66a43n-3tm8QjhiqJa07qcJW10FxNp9jJ59Q,2356
1191
1203
  cirq/work/zeros_sampler_test.py,sha256=JIkpBBFPJe5Ba4142vzogyWyboG1Q1ZAm0UVGgOoZn8,3279
1192
- cirq_core-1.5.0.dev20250109220553.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
1193
- cirq_core-1.5.0.dev20250109220553.dist-info/METADATA,sha256=ITIZNTFrgB3-XegpYdDlo63TOjHMCZXodOZYpVG4p-4,2105
1194
- cirq_core-1.5.0.dev20250109220553.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
1195
- cirq_core-1.5.0.dev20250109220553.dist-info/top_level.txt,sha256=Sz9iOxHU0IEMLSFGwiwOCaN2e9K-jFbBbtpPN1hB73g,5
1196
- cirq_core-1.5.0.dev20250109220553.dist-info/RECORD,,
1204
+ cirq_core-1.5.0.dev20250110193226.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
1205
+ cirq_core-1.5.0.dev20250110193226.dist-info/METADATA,sha256=I3a4P7Jam0h67VTrRKlOgdr2TKumNO23dZrer3uLClU,2105
1206
+ cirq_core-1.5.0.dev20250110193226.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
1207
+ cirq_core-1.5.0.dev20250110193226.dist-info/top_level.txt,sha256=Sz9iOxHU0IEMLSFGwiwOCaN2e9K-jFbBbtpPN1hB73g,5
1208
+ cirq_core-1.5.0.dev20250110193226.dist-info/RECORD,,