cirq-core 1.5.0.dev20250123021547__py3-none-any.whl → 1.5.0.dev20250124083125__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of cirq-core might be problematic. Click here for more details.
- cirq/_version.py +1 -1
- cirq/_version_test.py +1 -1
- cirq/circuits/circuit.py +80 -28
- cirq/circuits/circuit_test.py +27 -9
- cirq/contrib/acquaintance/executor.py +1 -0
- cirq/ops/phased_iswap_gate.py +3 -4
- cirq/ops/phased_iswap_gate_test.py +21 -5
- cirq/transformers/transformer_primitives.py +6 -27
- {cirq_core-1.5.0.dev20250123021547.dist-info → cirq_core-1.5.0.dev20250124083125.dist-info}/METADATA +1 -1
- {cirq_core-1.5.0.dev20250123021547.dist-info → cirq_core-1.5.0.dev20250124083125.dist-info}/RECORD +13 -13
- {cirq_core-1.5.0.dev20250123021547.dist-info → cirq_core-1.5.0.dev20250124083125.dist-info}/LICENSE +0 -0
- {cirq_core-1.5.0.dev20250123021547.dist-info → cirq_core-1.5.0.dev20250124083125.dist-info}/WHEEL +0 -0
- {cirq_core-1.5.0.dev20250123021547.dist-info → cirq_core-1.5.0.dev20250124083125.dist-info}/top_level.txt +0 -0
cirq/_version.py
CHANGED
cirq/_version_test.py
CHANGED
cirq/circuits/circuit.py
CHANGED
|
@@ -1769,6 +1769,7 @@ class Circuit(AbstractCircuit):
|
|
|
1769
1769
|
together. This option does not affect later insertions into the
|
|
1770
1770
|
circuit.
|
|
1771
1771
|
"""
|
|
1772
|
+
self._placement_cache: Optional[_PlacementCache] = _PlacementCache()
|
|
1772
1773
|
self._moments: List['cirq.Moment'] = []
|
|
1773
1774
|
|
|
1774
1775
|
# Implementation note: the following cached properties are set lazily and then
|
|
@@ -1779,9 +1780,11 @@ class Circuit(AbstractCircuit):
|
|
|
1779
1780
|
self._is_measurement: Optional[bool] = None
|
|
1780
1781
|
self._is_parameterized: Optional[bool] = None
|
|
1781
1782
|
self._parameter_names: Optional[AbstractSet[str]] = None
|
|
1782
|
-
|
|
1783
|
+
if not contents:
|
|
1784
|
+
return
|
|
1783
1785
|
flattened_contents = tuple(ops.flatten_to_ops_or_moments(contents))
|
|
1784
1786
|
if all(isinstance(c, Moment) for c in flattened_contents):
|
|
1787
|
+
self._placement_cache = None
|
|
1785
1788
|
self._moments[:] = cast(Iterable[Moment], flattened_contents)
|
|
1786
1789
|
return
|
|
1787
1790
|
with _compat.block_overlapping_deprecation('.*'):
|
|
@@ -1790,18 +1793,21 @@ class Circuit(AbstractCircuit):
|
|
|
1790
1793
|
else:
|
|
1791
1794
|
self.append(flattened_contents, strategy=strategy)
|
|
1792
1795
|
|
|
1793
|
-
def _mutated(self) -> None:
|
|
1796
|
+
def _mutated(self, *, preserve_placement_cache=False) -> None:
|
|
1794
1797
|
"""Clear cached properties in response to this circuit being mutated."""
|
|
1795
1798
|
self._all_qubits = None
|
|
1796
1799
|
self._frozen = None
|
|
1797
1800
|
self._is_measurement = None
|
|
1798
1801
|
self._is_parameterized = None
|
|
1799
1802
|
self._parameter_names = None
|
|
1803
|
+
if not preserve_placement_cache:
|
|
1804
|
+
self._placement_cache = None
|
|
1800
1805
|
|
|
1801
1806
|
@classmethod
|
|
1802
1807
|
def _from_moments(cls, moments: Iterable['cirq.Moment']) -> 'Circuit':
|
|
1803
1808
|
new_circuit = Circuit()
|
|
1804
1809
|
new_circuit._moments[:] = moments
|
|
1810
|
+
new_circuit._placement_cache = None
|
|
1805
1811
|
return new_circuit
|
|
1806
1812
|
|
|
1807
1813
|
def _load_contents_with_earliest_strategy(self, contents: 'cirq.OP_TREE'):
|
|
@@ -1823,27 +1829,18 @@ class Circuit(AbstractCircuit):
|
|
|
1823
1829
|
Non-moment entries will be inserted according to the EARLIEST
|
|
1824
1830
|
insertion strategy.
|
|
1825
1831
|
"""
|
|
1826
|
-
#
|
|
1827
|
-
|
|
1828
|
-
mkey_indices: Dict['cirq.MeasurementKey', int] = {}
|
|
1829
|
-
ckey_indices: Dict['cirq.MeasurementKey', int] = {}
|
|
1832
|
+
# PlacementCache holds dicts from the qubit/key to the greatest moment index that has it.
|
|
1833
|
+
placement_cache = cast(_PlacementCache, self._placement_cache)
|
|
1830
1834
|
|
|
1831
1835
|
# We also maintain the dict from moment index to moments/ops that go into it, for use when
|
|
1832
1836
|
# building the actual moments at the end.
|
|
1833
1837
|
op_lists_by_index: Dict[int, List['cirq.Operation']] = defaultdict(list)
|
|
1834
1838
|
moments_by_index: Dict[int, 'cirq.Moment'] = {}
|
|
1835
1839
|
|
|
1836
|
-
# For keeping track of length of the circuit thus far.
|
|
1837
|
-
length = 0
|
|
1838
|
-
|
|
1839
1840
|
# "mop" means current moment-or-operation
|
|
1840
1841
|
for mop in ops.flatten_to_ops_or_moments(contents):
|
|
1841
1842
|
# Identify the index of the moment to place this `mop` into.
|
|
1842
|
-
placement_index =
|
|
1843
|
-
mop, qubit_indices, mkey_indices, ckey_indices, length
|
|
1844
|
-
)
|
|
1845
|
-
length = max(length, placement_index + 1) # update the length of the circuit thus far
|
|
1846
|
-
|
|
1843
|
+
placement_index = placement_cache.append(mop)
|
|
1847
1844
|
if isinstance(mop, Moment):
|
|
1848
1845
|
moments_by_index[placement_index] = mop
|
|
1849
1846
|
else:
|
|
@@ -1851,7 +1848,7 @@ class Circuit(AbstractCircuit):
|
|
|
1851
1848
|
|
|
1852
1849
|
# Finally, once everything is placed, we can construct and append the actual moments for
|
|
1853
1850
|
# each index.
|
|
1854
|
-
for i in range(
|
|
1851
|
+
for i in range(placement_cache._length):
|
|
1855
1852
|
if i in moments_by_index:
|
|
1856
1853
|
self._moments.append(moments_by_index[i].with_operations(op_lists_by_index[i]))
|
|
1857
1854
|
else:
|
|
@@ -1899,6 +1896,7 @@ class Circuit(AbstractCircuit):
|
|
|
1899
1896
|
"""Return a copy of this circuit."""
|
|
1900
1897
|
copied_circuit = Circuit()
|
|
1901
1898
|
copied_circuit._moments = self._moments[:]
|
|
1899
|
+
copied_circuit._placement_cache = None
|
|
1902
1900
|
return copied_circuit
|
|
1903
1901
|
|
|
1904
1902
|
# pylint: disable=function-redefined
|
|
@@ -2172,20 +2170,25 @@ class Circuit(AbstractCircuit):
|
|
|
2172
2170
|
"""
|
|
2173
2171
|
# limit index to 0..len(self._moments), also deal with indices smaller 0
|
|
2174
2172
|
k = max(min(index if index >= 0 else len(self._moments) + index, len(self._moments)), 0)
|
|
2173
|
+
if strategy != InsertStrategy.EARLIEST or index != len(self._moments):
|
|
2174
|
+
self._placement_cache = None
|
|
2175
2175
|
for moment_or_op in list(ops.flatten_to_ops_or_moments(moment_or_operation_tree)):
|
|
2176
|
+
if self._placement_cache:
|
|
2177
|
+
p = self._placement_cache.append(moment_or_op)
|
|
2178
|
+
elif isinstance(moment_or_op, Moment):
|
|
2179
|
+
p = k
|
|
2180
|
+
else:
|
|
2181
|
+
p = self._pick_or_create_inserted_op_moment_index(k, moment_or_op, strategy)
|
|
2176
2182
|
if isinstance(moment_or_op, Moment):
|
|
2177
|
-
self._moments.insert(
|
|
2178
|
-
|
|
2183
|
+
self._moments.insert(p, moment_or_op)
|
|
2184
|
+
elif p == len(self._moments):
|
|
2185
|
+
self._moments.append(Moment(moment_or_op))
|
|
2179
2186
|
else:
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
k = max(k, p + 1)
|
|
2186
|
-
if strategy is InsertStrategy.NEW_THEN_INLINE:
|
|
2187
|
-
strategy = InsertStrategy.INLINE
|
|
2188
|
-
self._mutated()
|
|
2187
|
+
self._moments[p] = self._moments[p].with_operation(moment_or_op)
|
|
2188
|
+
k = max(k, p + 1)
|
|
2189
|
+
if strategy is InsertStrategy.NEW_THEN_INLINE:
|
|
2190
|
+
strategy = InsertStrategy.INLINE
|
|
2191
|
+
self._mutated(preserve_placement_cache=True)
|
|
2189
2192
|
return k
|
|
2190
2193
|
|
|
2191
2194
|
def insert_into_range(self, operations: 'cirq.OP_TREE', start: int, end: int) -> int:
|
|
@@ -2853,7 +2856,7 @@ def get_earliest_accommodating_moment_index(
|
|
|
2853
2856
|
Args:
|
|
2854
2857
|
moment_or_operation: The moment operation in question.
|
|
2855
2858
|
qubit_indices: A dictionary mapping qubits to the latest moments that address them.
|
|
2856
|
-
mkey_indices: A dictionary mapping
|
|
2859
|
+
mkey_indices: A dictionary mapping measurement keys to the latest moments that address them.
|
|
2857
2860
|
ckey_indices: A dictionary mapping control keys to the latest moments that address them.
|
|
2858
2861
|
length: The length of the circuit that we are trying to insert a moment or operation into.
|
|
2859
2862
|
Should probably be equal to the maximum of the values in `qubit_indices`,
|
|
@@ -2897,7 +2900,7 @@ def get_earliest_accommodating_moment_index(
|
|
|
2897
2900
|
if mop_ckeys:
|
|
2898
2901
|
last_conflict = max(last_conflict, *[mkey_indices.get(key, -1) for key in mop_ckeys])
|
|
2899
2902
|
|
|
2900
|
-
# The index of the moment to place this moment or
|
|
2903
|
+
# The index of the moment to place this moment or operation ("mop") into.
|
|
2901
2904
|
mop_index = last_conflict + 1
|
|
2902
2905
|
|
|
2903
2906
|
# Update our dicts with data from this `mop` placement. Note `mop_index` will always be greater
|
|
@@ -2910,3 +2913,52 @@ def get_earliest_accommodating_moment_index(
|
|
|
2910
2913
|
ckey_indices[key] = mop_index
|
|
2911
2914
|
|
|
2912
2915
|
return mop_index
|
|
2916
|
+
|
|
2917
|
+
|
|
2918
|
+
class _PlacementCache:
|
|
2919
|
+
"""Maintains qubit and cbit indices for quick op placement.
|
|
2920
|
+
|
|
2921
|
+
Here, we keep track of the greatest moment that contains each qubit,
|
|
2922
|
+
measurement key, and control key, and append operations to the moment after
|
|
2923
|
+
the maximum of these. This avoids having to iterate backwards, checking
|
|
2924
|
+
each moment one at a time.
|
|
2925
|
+
|
|
2926
|
+
It is only valid for `append` operations, and if any other insert strategy
|
|
2927
|
+
is used, or if any operation is added to the circuit without notifying the
|
|
2928
|
+
cache, then the cache must be invalidated for the circuit or rebuilt from
|
|
2929
|
+
scratch. Future improvements may ease this restriction.
|
|
2930
|
+
"""
|
|
2931
|
+
|
|
2932
|
+
def __init__(self) -> None:
|
|
2933
|
+
# These are dicts from the qubit/key to the greatest moment index that has it.
|
|
2934
|
+
self._qubit_indices: Dict['cirq.Qid', int] = {}
|
|
2935
|
+
self._mkey_indices: Dict['cirq.MeasurementKey', int] = {}
|
|
2936
|
+
self._ckey_indices: Dict['cirq.MeasurementKey', int] = {}
|
|
2937
|
+
|
|
2938
|
+
# For keeping track of length of the circuit thus far.
|
|
2939
|
+
self._length = 0
|
|
2940
|
+
|
|
2941
|
+
def append(self, moment_or_operation: Union['cirq.Moment', 'cirq.Operation']) -> int:
|
|
2942
|
+
"""Find placement for moment/operation and update cache.
|
|
2943
|
+
|
|
2944
|
+
Determines the placement index of the provided operation, assuming
|
|
2945
|
+
EARLIEST (append) strategy, and assuming that the internal cache
|
|
2946
|
+
correctly represents the circuit. It then updates the cache and returns
|
|
2947
|
+
the placement index.
|
|
2948
|
+
|
|
2949
|
+
Args:
|
|
2950
|
+
moment_or_operation: The moment or operation to append.
|
|
2951
|
+
|
|
2952
|
+
Returns:
|
|
2953
|
+
The index at which the moment/operation should be placed.
|
|
2954
|
+
"""
|
|
2955
|
+
# Identify the index of the moment to place this into.
|
|
2956
|
+
index = get_earliest_accommodating_moment_index(
|
|
2957
|
+
moment_or_operation,
|
|
2958
|
+
self._qubit_indices,
|
|
2959
|
+
self._mkey_indices,
|
|
2960
|
+
self._ckey_indices,
|
|
2961
|
+
self._length,
|
|
2962
|
+
)
|
|
2963
|
+
self._length = max(self._length, index + 1)
|
|
2964
|
+
return index
|
cirq/circuits/circuit_test.py
CHANGED
|
@@ -4845,18 +4845,36 @@ global phase: 0.5π
|
|
|
4845
4845
|
def test_create_speed():
|
|
4846
4846
|
# Added in https://github.com/quantumlib/Cirq/pull/5332
|
|
4847
4847
|
# Previously this took ~30s to run. Now it should take ~150ms. However the coverage test can
|
|
4848
|
-
# run this slowly, so allowing
|
|
4848
|
+
# run this slowly, so allowing 4 sec to account for things like that. Feel free to increase the
|
|
4849
4849
|
# buffer time or delete the test entirely if it ends up causing flakes.
|
|
4850
|
-
#
|
|
4851
|
-
# Updated in https://github.com/quantumlib/Cirq/pull/5756
|
|
4852
|
-
# After several tiny overtime failures of the GitHub CI Pytest MacOS (3.7)
|
|
4853
|
-
# the timeout was increased to 4 sec. A more thorough investigation or test
|
|
4854
|
-
# removal should be considered if this continues to time out.
|
|
4855
4850
|
qs = 100
|
|
4856
4851
|
moments = 500
|
|
4857
4852
|
xs = [cirq.X(cirq.LineQubit(i)) for i in range(qs)]
|
|
4858
|
-
|
|
4853
|
+
ops = [xs[i] for i in range(qs) for _ in range(moments)]
|
|
4854
|
+
t = time.perf_counter()
|
|
4855
|
+
c = cirq.Circuit(ops)
|
|
4856
|
+
duration = time.perf_counter() - t
|
|
4857
|
+
assert len(c) == moments
|
|
4858
|
+
assert duration < 4
|
|
4859
|
+
|
|
4860
|
+
|
|
4861
|
+
def test_append_speed():
|
|
4862
|
+
# Previously this took ~17s to run. Now it should take ~150ms. However the coverage test can
|
|
4863
|
+
# run this slowly, so allowing 5 sec to account for things like that. Feel free to increase the
|
|
4864
|
+
# buffer time or delete the test entirely if it ends up causing flakes.
|
|
4865
|
+
#
|
|
4866
|
+
# The `append` improvement mainly helps for deep circuits. It is less useful for wide circuits
|
|
4867
|
+
# because the Moment (immutable) needs verified and reconstructed each time an op is added.
|
|
4868
|
+
qs = 2
|
|
4869
|
+
moments = 10000
|
|
4870
|
+
xs = [cirq.X(cirq.LineQubit(i)) for i in range(qs)]
|
|
4871
|
+
c = cirq.Circuit()
|
|
4859
4872
|
t = time.perf_counter()
|
|
4860
|
-
|
|
4873
|
+
# Iterating with the moments in the inner loop highlights the improvement: when filling in the
|
|
4874
|
+
# second qubit, we no longer have to search backwards from moment 10000 for a placement index.
|
|
4875
|
+
for q in range(qs):
|
|
4876
|
+
for _ in range(moments):
|
|
4877
|
+
c.append(xs[q])
|
|
4878
|
+
duration = time.perf_counter() - t
|
|
4861
4879
|
assert len(c) == moments
|
|
4862
|
-
assert
|
|
4880
|
+
assert duration < 5
|
|
@@ -75,6 +75,7 @@ class ExecutionStrategy(metaclass=abc.ABCMeta):
|
|
|
75
75
|
strategy = StrategyExecutorTransformer(self)
|
|
76
76
|
final_circuit = strategy(input_circuit, **kwargs)
|
|
77
77
|
input_circuit._moments = final_circuit._moments
|
|
78
|
+
input_circuit._placement_cache = final_circuit._placement_cache
|
|
78
79
|
return strategy.mapping
|
|
79
80
|
|
|
80
81
|
|
cirq/ops/phased_iswap_gate.py
CHANGED
|
@@ -93,15 +93,14 @@ class PhasedISwapPowGate(eigen_gate.EigenGate):
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
def _value_equality_values_cls_(self):
|
|
96
|
-
if self.phase_exponent == 0:
|
|
97
|
-
return swap_gates.ISwapPowGate
|
|
98
96
|
return PhasedISwapPowGate
|
|
99
97
|
|
|
100
98
|
def _value_equality_values_(self):
|
|
101
|
-
if self.phase_exponent == 0:
|
|
102
|
-
return self._iswap._value_equality_values_()
|
|
103
99
|
return (self.phase_exponent, *self._iswap._value_equality_values_())
|
|
104
100
|
|
|
101
|
+
def _value_equality_approximate_values_(self):
|
|
102
|
+
return (self.phase_exponent, *self._iswap._value_equality_approximate_values_())
|
|
103
|
+
|
|
105
104
|
def _is_parameterized_(self) -> bool:
|
|
106
105
|
return protocols.is_parameterized(self._iswap) or protocols.is_parameterized(
|
|
107
106
|
self._phase_exponent
|
|
@@ -34,11 +34,10 @@ def test_phased_iswap_init():
|
|
|
34
34
|
|
|
35
35
|
def test_phased_iswap_equality():
|
|
36
36
|
eq = cirq.testing.EqualsTester()
|
|
37
|
-
eq.add_equality_group(cirq.PhasedISwapPowGate(phase_exponent=0, exponent=0.4)
|
|
38
|
-
eq.add_equality_group(
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
)
|
|
37
|
+
eq.add_equality_group(cirq.PhasedISwapPowGate(phase_exponent=0, exponent=0.4))
|
|
38
|
+
eq.add_equality_group(cirq.ISWAP**0.4)
|
|
39
|
+
eq.add_equality_group(cirq.PhasedISwapPowGate(phase_exponent=0, exponent=0.4, global_shift=0.3))
|
|
40
|
+
eq.add_equality_group(cirq.ISwapPowGate(global_shift=0.3) ** 0.4)
|
|
42
41
|
|
|
43
42
|
|
|
44
43
|
def test_repr():
|
|
@@ -204,3 +203,20 @@ def test_givens_rotation_equivalent_circuit():
|
|
|
204
203
|
@pytest.mark.parametrize('angle_rads', (-np.pi / 5, 0.4, 2, np.pi))
|
|
205
204
|
def test_givens_rotation_has_consistent_protocols(angle_rads):
|
|
206
205
|
cirq.testing.assert_implements_consistent_protocols(cirq.givens(angle_rads))
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
def test_approx_eq():
|
|
209
|
+
gate0 = cirq.PhasedISwapPowGate(phase_exponent=0)
|
|
210
|
+
gate1 = cirq.PhasedISwapPowGate(phase_exponent=1e-12)
|
|
211
|
+
gate2 = cirq.PhasedISwapPowGate(phase_exponent=2e-12)
|
|
212
|
+
gate3 = cirq.PhasedISwapPowGate(phase_exponent=0.345)
|
|
213
|
+
gate4 = cirq.ISwapPowGate()
|
|
214
|
+
|
|
215
|
+
assert cirq.approx_eq(gate1, gate2)
|
|
216
|
+
assert cirq.approx_eq(gate1, gate0)
|
|
217
|
+
assert not cirq.approx_eq(gate1, gate3)
|
|
218
|
+
assert not cirq.approx_eq(gate0, gate4)
|
|
219
|
+
|
|
220
|
+
assert cirq.equal_up_to_global_phase(gate1, gate2)
|
|
221
|
+
assert cirq.equal_up_to_global_phase(gate1, gate0)
|
|
222
|
+
assert not cirq.equal_up_to_global_phase(gate1, gate3)
|
|
@@ -196,37 +196,16 @@ def _map_operations_impl(
|
|
|
196
196
|
return mapped_ops
|
|
197
197
|
|
|
198
198
|
new_moments: List[List['cirq.Operation']] = []
|
|
199
|
-
|
|
200
|
-
# Keep track of the latest time index for each qubit, measurement key, and control key.
|
|
201
|
-
qubit_time_index: Dict['cirq.Qid', int] = {}
|
|
202
|
-
measurement_time_index: Dict['cirq.MeasurementKey', int] = {}
|
|
203
|
-
control_time_index: Dict['cirq.MeasurementKey', int] = {}
|
|
204
|
-
|
|
205
|
-
# New mapped operations in the current moment should be inserted after `last_moment_time_index`.
|
|
206
|
-
last_moment_time_index = -1
|
|
207
|
-
|
|
208
199
|
for idx, moment in enumerate(circuit):
|
|
209
|
-
if wrap_in_circuit_op
|
|
210
|
-
|
|
200
|
+
curr_moments: List[List['cirq.Operation']] = [[]] if wrap_in_circuit_op else []
|
|
201
|
+
placement_cache = circuits.circuit._PlacementCache()
|
|
211
202
|
for op in moment:
|
|
212
203
|
mapped_ops = apply_map_func(op, idx)
|
|
213
|
-
|
|
214
204
|
for mapped_op in mapped_ops:
|
|
215
|
-
|
|
216
|
-
placement_index
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
placement_index = max(placement_index, last_moment_time_index + 1)
|
|
220
|
-
new_moments.extend([[] for _ in range(placement_index - len(new_moments) + 1)])
|
|
221
|
-
new_moments[placement_index].append(mapped_op)
|
|
222
|
-
for qubit in mapped_op.qubits:
|
|
223
|
-
qubit_time_index[qubit] = placement_index
|
|
224
|
-
for key in protocols.measurement_key_objs(mapped_op):
|
|
225
|
-
measurement_time_index[key] = placement_index
|
|
226
|
-
for key in protocols.control_keys(mapped_op):
|
|
227
|
-
control_time_index[key] = placement_index
|
|
228
|
-
|
|
229
|
-
last_moment_time_index = len(new_moments) - 1
|
|
205
|
+
placement_index = placement_cache.append(mapped_op)
|
|
206
|
+
curr_moments.extend([[] for _ in range(placement_index - len(curr_moments) + 1)])
|
|
207
|
+
curr_moments[placement_index].append(mapped_op)
|
|
208
|
+
new_moments.extend(curr_moments)
|
|
230
209
|
|
|
231
210
|
return _create_target_circuit_type([circuits.Moment(moment) for moment in new_moments], circuit)
|
|
232
211
|
|
{cirq_core-1.5.0.dev20250123021547.dist-info → cirq_core-1.5.0.dev20250124083125.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: cirq-core
|
|
3
|
-
Version: 1.5.0.
|
|
3
|
+
Version: 1.5.0.dev20250124083125
|
|
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
|
{cirq_core-1.5.0.dev20250123021547.dist-info → cirq_core-1.5.0.dev20250124083125.dist-info}/RECORD
RENAMED
|
@@ -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=
|
|
8
|
-
cirq/_version_test.py,sha256=
|
|
7
|
+
cirq/_version.py,sha256=JHzy1sBc8gxV0tc2C6keMIRShBtpgrGSEp7liraq2DU,1206
|
|
8
|
+
cirq/_version_test.py,sha256=6gCIKSIrQjkIsGLbNAytGUQNjpfyatTFUpwJ_OmIJj8,147
|
|
9
9
|
cirq/conftest.py,sha256=X7yLFL8GLhg2CjPw0hp5e_dGASfvHx1-QT03aUbhKJw,1168
|
|
10
10
|
cirq/json_resolver_cache.py,sha256=p-vEOa-8GQ2cFIAdze-kd6C1un1uRvtujVPljVKaHBg,13557
|
|
11
11
|
cirq/py.typed,sha256=VFSlmh_lNwnaXzwY-ZuW-C2Ws5PkuDoVgBdNCs0jXJE,63
|
|
@@ -16,10 +16,10 @@ cirq/circuits/_box_drawing_character_data.py,sha256=QLoCXwcLL7091RdxEKO259goxt4R
|
|
|
16
16
|
cirq/circuits/_box_drawing_character_data_test.py,sha256=XO94z0piwZRHaNZHTf-5tKHQ4MKcDruMeRIKdT8GbYA,1624
|
|
17
17
|
cirq/circuits/_bucket_priority_queue.py,sha256=hxFuii2fKD8G6EKT_aVLEsA7FmSfqFXPwIbA0KsoSC4,6745
|
|
18
18
|
cirq/circuits/_bucket_priority_queue_test.py,sha256=t6u_hG7K2e2WKWrgCsKxNRtp4ghKwiCrp0_WSY0W25k,5288
|
|
19
|
-
cirq/circuits/circuit.py,sha256=
|
|
19
|
+
cirq/circuits/circuit.py,sha256=nbWC95tzQlm69JmvFJdJMwzDOia_s0pah8tH4i9u1Ug,118173
|
|
20
20
|
cirq/circuits/circuit_operation.py,sha256=MaQ6fPt1HctEE31fVaUDtl9MqOmoTyt3m2HYeGCdIaM,35440
|
|
21
21
|
cirq/circuits/circuit_operation_test.py,sha256=7ezTwTY2RaAchjfXOJythVrxs6Rom317gC0AUBe0GVM,45259
|
|
22
|
-
cirq/circuits/circuit_test.py,sha256=
|
|
22
|
+
cirq/circuits/circuit_test.py,sha256=BZjwavIekWR2hgG1yV0Acgt7-Q05cOjugozrLgYdx7k,161268
|
|
23
23
|
cirq/circuits/frozen_circuit.py,sha256=qSbLHqIszCbVipNZQy4N829v_mWf8N2926cYRzpxGqE,9243
|
|
24
24
|
cirq/circuits/frozen_circuit_test.py,sha256=rHyii8hLhOQ6jdA8dC1OcYPGnyeBC4uY5Q53XspkkCk,4133
|
|
25
25
|
cirq/circuits/insert_strategy.py,sha256=L0OLXuo24TtBfdJGOAG2PsVDMrbvQl4iN5lUk6IPuyo,2851
|
|
@@ -40,7 +40,7 @@ cirq/contrib/acquaintance/bipartite.py,sha256=iEElNihoQ0m1pt5f0bPOIubPnRqqbPJSEh
|
|
|
40
40
|
cirq/contrib/acquaintance/bipartite_test.py,sha256=hjdJfjDsd2pnUdpph5n9kTWEclSvocsAEmnTbBT21Ak,15648
|
|
41
41
|
cirq/contrib/acquaintance/devices.py,sha256=1hWW9_WF5TZQXFMu9-yXNTk3GfSETyjikNboPQvPYWk,3031
|
|
42
42
|
cirq/contrib/acquaintance/devices_test.py,sha256=icl_9SOp8PuZu7msfW5H7zP7_-zfTwTjyPPkajDu-w4,1088
|
|
43
|
-
cirq/contrib/acquaintance/executor.py,sha256=
|
|
43
|
+
cirq/contrib/acquaintance/executor.py,sha256=ZGPWcEVYAdkqA9rvECsp7WFgxYC_wAvfE6HKNqzT7AM,8681
|
|
44
44
|
cirq/contrib/acquaintance/executor_test.py,sha256=ir-LKuQTfHm5WCcjmLriJ8qCT89YnltLpFx89Q3bF_I,7837
|
|
45
45
|
cirq/contrib/acquaintance/gates.py,sha256=YSsxvvyXQQOsEOr9lKdy0s00w6EAN7mWbu3Y0zjHEU8,13545
|
|
46
46
|
cirq/contrib/acquaintance/gates_test.py,sha256=5FVX7zAtZSUqDPNsXk_Wm7LwDmHIApzgNhjAIX1IQBM,15010
|
|
@@ -343,8 +343,8 @@ cirq/ops/pauli_sum_exponential.py,sha256=n3fhKWJVMudzGuOcdPHskVNx3fHE2MAblVdkzbD
|
|
|
343
343
|
cirq/ops/pauli_sum_exponential_test.py,sha256=wVnJ3FSpEimHT8ERVkmljALrgSuuDYo6GRg91uJ7ztk,5370
|
|
344
344
|
cirq/ops/permutation_gate.py,sha256=2h8n76N2M3nu5MA8JkRQgVLByq5cOEluKUN042ClSRs,4196
|
|
345
345
|
cirq/ops/permutation_gate_test.py,sha256=SwXRgsZNLn5jnGhfcKPJ0J0CIssNzElbFaqylV2TXD8,3281
|
|
346
|
-
cirq/ops/phased_iswap_gate.py,sha256=
|
|
347
|
-
cirq/ops/phased_iswap_gate_test.py,sha256=
|
|
346
|
+
cirq/ops/phased_iswap_gate.py,sha256=Q-1PuSc4F3gsZL9UUN8EgrO31Ix6mA-7HoUIndvePbk,8990
|
|
347
|
+
cirq/ops/phased_iswap_gate_test.py,sha256=tB1MqH8Y0Kgr0QIxs1kq1yl2g0mKYI7Q_AaadBhFe2U,7360
|
|
348
348
|
cirq/ops/phased_x_gate.py,sha256=qjlkdbj7SWMvgTJkTqEqsLe2XDgAGioA6ayanns-apg,9983
|
|
349
349
|
cirq/ops/phased_x_gate_test.py,sha256=IpY-Z-MsqtYbyIEdxWu1NqgAJF2B7nddxPc2Hxafr4s,10202
|
|
350
350
|
cirq/ops/phased_x_z_gate.py,sha256=uVmROoiKYxGPs_QZbpwoi7EmVHV4J2-LRa7jyLeIbCM,11563
|
|
@@ -1075,7 +1075,7 @@ cirq/transformers/synchronize_terminal_measurements.py,sha256=p061MYYglY6HhWYYkF
|
|
|
1075
1075
|
cirq/transformers/synchronize_terminal_measurements_test.py,sha256=VTiw5S3s_Y31qR7ME8Mzv50LdJ_6M3DOtgwvtziQzPI,7742
|
|
1076
1076
|
cirq/transformers/transformer_api.py,sha256=f95sfOr-KYXLt4yxAaFXoG0-oEc8IKApzG4pyXsm3YY,16956
|
|
1077
1077
|
cirq/transformers/transformer_api_test.py,sha256=f-Vup0VCUvTqJKm5kWHf6xet7sFTerLMGYzJHy8Rc5s,13045
|
|
1078
|
-
cirq/transformers/transformer_primitives.py,sha256=
|
|
1078
|
+
cirq/transformers/transformer_primitives.py,sha256=LbGM_d5xqa1BR-juA08r4FkeWK9JqSU9yISeu4u6WkI,36661
|
|
1079
1079
|
cirq/transformers/transformer_primitives_test.py,sha256=5N23aI-DGRBj2T6Xd7VUiLBXWU6pgNsvmjZXJ3wwous,41725
|
|
1080
1080
|
cirq/transformers/analytical_decompositions/__init__.py,sha256=hMsoQSQtSvEn5mNohSvGPjsmf58VN4jzmIFnchVhZi8,3760
|
|
1081
1081
|
cirq/transformers/analytical_decompositions/clifford_decomposition.py,sha256=DsuuP91pm2dX0CO4rWwmJAJyAfuXMcA1UJK0g8krp7k,6726
|
|
@@ -1202,8 +1202,8 @@ cirq/work/sampler.py,sha256=bE5tmVkcR6cZZMLETxDfHehdsYUMbx2RvBeIBetehI4,19187
|
|
|
1202
1202
|
cirq/work/sampler_test.py,sha256=hL2UWx3dz2ukZVNxWftiKVvJcQoLplLZdQm-k1QcA40,13282
|
|
1203
1203
|
cirq/work/zeros_sampler.py,sha256=x1C7cup66a43n-3tm8QjhiqJa07qcJW10FxNp9jJ59Q,2356
|
|
1204
1204
|
cirq/work/zeros_sampler_test.py,sha256=JIkpBBFPJe5Ba4142vzogyWyboG1Q1ZAm0UVGgOoZn8,3279
|
|
1205
|
-
cirq_core-1.5.0.
|
|
1206
|
-
cirq_core-1.5.0.
|
|
1207
|
-
cirq_core-1.5.0.
|
|
1208
|
-
cirq_core-1.5.0.
|
|
1209
|
-
cirq_core-1.5.0.
|
|
1205
|
+
cirq_core-1.5.0.dev20250124083125.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
|
|
1206
|
+
cirq_core-1.5.0.dev20250124083125.dist-info/METADATA,sha256=Ygd4x48Fml3TYoTGIMPuS7MJxEz0XEbqwsp-G6E-Umw,2105
|
|
1207
|
+
cirq_core-1.5.0.dev20250124083125.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
|
1208
|
+
cirq_core-1.5.0.dev20250124083125.dist-info/top_level.txt,sha256=Sz9iOxHU0IEMLSFGwiwOCaN2e9K-jFbBbtpPN1hB73g,5
|
|
1209
|
+
cirq_core-1.5.0.dev20250124083125.dist-info/RECORD,,
|
{cirq_core-1.5.0.dev20250123021547.dist-info → cirq_core-1.5.0.dev20250124083125.dist-info}/LICENSE
RENAMED
|
File without changes
|
{cirq_core-1.5.0.dev20250123021547.dist-info → cirq_core-1.5.0.dev20250124083125.dist-info}/WHEEL
RENAMED
|
File without changes
|
|
File without changes
|