cirq-core 1.7.0.dev20250824200454__py3-none-any.whl → 1.7.0.dev20250825201352__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/experiments/qubit_characterizations.py +32 -4
- cirq/experiments/qubit_characterizations_test.py +16 -0
- cirq/protocols/unitary_protocol.py +0 -4
- cirq/protocols/unitary_protocol_test.py +2 -5
- {cirq_core-1.7.0.dev20250824200454.dist-info → cirq_core-1.7.0.dev20250825201352.dist-info}/METADATA +1 -1
- {cirq_core-1.7.0.dev20250824200454.dist-info → cirq_core-1.7.0.dev20250825201352.dist-info}/RECORD +11 -11
- {cirq_core-1.7.0.dev20250824200454.dist-info → cirq_core-1.7.0.dev20250825201352.dist-info}/WHEEL +0 -0
- {cirq_core-1.7.0.dev20250824200454.dist-info → cirq_core-1.7.0.dev20250825201352.dist-info}/licenses/LICENSE +0 -0
- {cirq_core-1.7.0.dev20250824200454.dist-info → cirq_core-1.7.0.dev20250825201352.dist-info}/top_level.txt +0 -0
cirq/_version.py
CHANGED
cirq/_version_test.py
CHANGED
|
@@ -18,7 +18,7 @@ import dataclasses
|
|
|
18
18
|
import functools
|
|
19
19
|
import itertools
|
|
20
20
|
import uuid
|
|
21
|
-
from typing import Any, cast, Iterator, Mapping, Sequence, TYPE_CHECKING
|
|
21
|
+
from typing import Any, cast, Iterator, Mapping, Optional, Sequence, TYPE_CHECKING
|
|
22
22
|
|
|
23
23
|
import attrs
|
|
24
24
|
import numpy as np
|
|
@@ -73,7 +73,12 @@ class Cliffords:
|
|
|
73
73
|
class RandomizedBenchMarkResult:
|
|
74
74
|
"""Results from a randomized benchmarking experiment."""
|
|
75
75
|
|
|
76
|
-
def __init__(
|
|
76
|
+
def __init__(
|
|
77
|
+
self,
|
|
78
|
+
num_cliffords: Sequence[int],
|
|
79
|
+
ground_state_probabilities: Sequence[float],
|
|
80
|
+
ground_state_probabilities_std: Optional[Sequence[float]] | None = None,
|
|
81
|
+
):
|
|
77
82
|
"""Inits RandomizedBenchMarkResult.
|
|
78
83
|
|
|
79
84
|
Args:
|
|
@@ -81,9 +86,20 @@ class RandomizedBenchMarkResult:
|
|
|
81
86
|
study.
|
|
82
87
|
ground_state_probabilities: The corresponding average ground state
|
|
83
88
|
probabilities.
|
|
89
|
+
ground_state_probabilities_std: The standard deviation of the probabilities.
|
|
84
90
|
"""
|
|
85
91
|
self._num_cfds_seq = num_cliffords
|
|
86
92
|
self._gnd_state_probs = ground_state_probabilities
|
|
93
|
+
if ground_state_probabilities_std is None or np.all(
|
|
94
|
+
np.isclose(ground_state_probabilities_std, 0)
|
|
95
|
+
):
|
|
96
|
+
self._gnd_state_probs_std = None
|
|
97
|
+
else:
|
|
98
|
+
self._gnd_state_probs_std = np.array(ground_state_probabilities_std)
|
|
99
|
+
zeros = np.isclose(self._gnd_state_probs_std, 0)
|
|
100
|
+
self._gnd_state_probs_std[zeros] = self._gnd_state_probs_std[
|
|
101
|
+
np.logical_not(zeros)
|
|
102
|
+
].min()
|
|
87
103
|
|
|
88
104
|
@property
|
|
89
105
|
def data(self) -> Sequence[tuple[int, float]]:
|
|
@@ -142,6 +158,7 @@ class RandomizedBenchMarkResult:
|
|
|
142
158
|
f=exp_fit,
|
|
143
159
|
xdata=self._num_cfds_seq,
|
|
144
160
|
ydata=self._gnd_state_probs,
|
|
161
|
+
sigma=self._gnd_state_probs_std,
|
|
145
162
|
p0=[0.5, 0.5, 1.0 - 1e-3],
|
|
146
163
|
bounds=([0, -1, 0], [1, 1, 1]),
|
|
147
164
|
)
|
|
@@ -534,6 +551,7 @@ def parallel_single_qubit_rb(
|
|
|
534
551
|
# run circuits
|
|
535
552
|
results = sampler.run_batch(circuits_all, repetitions=parameters.repetitions)
|
|
536
553
|
gnd_probs: dict = {q: [] for q in qubits}
|
|
554
|
+
gnd_probs_std: dict = {q: [] for q in qubits}
|
|
537
555
|
idx = 0
|
|
538
556
|
for num_cliffords in parameters.num_clifford_range:
|
|
539
557
|
excited_probs: dict[cirq.Qid, list[float]] = {q: [] for q in qubits}
|
|
@@ -544,9 +562,17 @@ def parallel_single_qubit_rb(
|
|
|
544
562
|
idx += 1
|
|
545
563
|
for qubit in qubits:
|
|
546
564
|
gnd_probs[qubit].append(1.0 - np.mean(excited_probs[qubit]))
|
|
565
|
+
gnd_probs_std[qubit].append(
|
|
566
|
+
np.std(excited_probs[qubit]) / np.sqrt(parameters.repetitions)
|
|
567
|
+
)
|
|
547
568
|
|
|
548
569
|
return ParallelRandomizedBenchmarkingResult(
|
|
549
|
-
{
|
|
570
|
+
{
|
|
571
|
+
q: RandomizedBenchMarkResult(
|
|
572
|
+
parameters.num_clifford_range, gnd_probs[q], gnd_probs_std[q]
|
|
573
|
+
)
|
|
574
|
+
for q in qubits
|
|
575
|
+
}
|
|
550
576
|
)
|
|
551
577
|
|
|
552
578
|
|
|
@@ -595,6 +621,7 @@ def two_qubit_randomized_benchmarking(
|
|
|
595
621
|
cliffords = _single_qubit_cliffords()
|
|
596
622
|
cfd_matrices = _two_qubit_clifford_matrices(first_qubit, second_qubit, cliffords)
|
|
597
623
|
gnd_probs = []
|
|
624
|
+
gnd_probs_std = []
|
|
598
625
|
for num_cfds in num_clifford_range:
|
|
599
626
|
gnd_probs_l = []
|
|
600
627
|
for _ in range(num_circuits):
|
|
@@ -606,8 +633,9 @@ def two_qubit_randomized_benchmarking(
|
|
|
606
633
|
gnds = [(not r[0] and not r[1]) for r in results.measurements['z']]
|
|
607
634
|
gnd_probs_l.append(np.mean(gnds))
|
|
608
635
|
gnd_probs.append(float(np.mean(gnd_probs_l)))
|
|
636
|
+
gnd_probs_std.append(float(np.std(gnd_probs_l) / np.sqrt(repetitions)))
|
|
609
637
|
|
|
610
|
-
return RandomizedBenchMarkResult(num_clifford_range, gnd_probs)
|
|
638
|
+
return RandomizedBenchMarkResult(num_clifford_range, gnd_probs, gnd_probs_std)
|
|
611
639
|
|
|
612
640
|
|
|
613
641
|
def single_qubit_state_tomography(
|
|
@@ -140,6 +140,22 @@ def test_parallel_single_qubit_parallel_single_qubit_randomized_benchmarking() -
|
|
|
140
140
|
_ = results.plot_integrated_histogram()
|
|
141
141
|
|
|
142
142
|
|
|
143
|
+
@mock.patch.dict(os.environ, clear='CIRQ_TESTING')
|
|
144
|
+
def test_parallel_single_qubit_randomized_benchmarking_with_noise() -> None:
|
|
145
|
+
simulator = sim.Simulator(noise=cirq.depolarize(1e-3), seed=0)
|
|
146
|
+
qubits = (GridQubit(0, 0), GridQubit(0, 1))
|
|
147
|
+
num_cfds = range(5, 7, 1)
|
|
148
|
+
results = parallel_single_qubit_randomized_benchmarking(
|
|
149
|
+
simulator, num_clifford_range=num_cfds, repetitions=10, qubits=qubits
|
|
150
|
+
)
|
|
151
|
+
for qubit in qubits:
|
|
152
|
+
g_pops = np.asarray(results.results_dictionary[qubit].data)[:, 1]
|
|
153
|
+
assert np.isclose(np.mean(g_pops), 0.99, atol=1e-2)
|
|
154
|
+
_ = results.plot_single_qubit(qubit)
|
|
155
|
+
pauli_errors = results.pauli_error()
|
|
156
|
+
assert len(pauli_errors) == len(qubits)
|
|
157
|
+
|
|
158
|
+
|
|
143
159
|
def test_two_qubit_randomized_benchmarking() -> None:
|
|
144
160
|
# Check that the ground state population at the end of the Clifford
|
|
145
161
|
# sequences is always unity.
|
|
@@ -19,7 +19,6 @@ from typing import Any, Protocol, TypeVar
|
|
|
19
19
|
|
|
20
20
|
import numpy as np
|
|
21
21
|
|
|
22
|
-
from cirq import linalg
|
|
23
22
|
from cirq._doc import doc_private
|
|
24
23
|
from cirq.protocols import qid_shape_protocol
|
|
25
24
|
from cirq.protocols.apply_unitary_protocol import apply_unitaries, ApplyUnitaryArgs
|
|
@@ -111,11 +110,8 @@ def unitary(
|
|
|
111
110
|
Raises:
|
|
112
111
|
TypeError: `val` doesn't have a unitary effect and no default value was
|
|
113
112
|
specified.
|
|
114
|
-
ValueError: `val` is a numpy array that is not unitary.
|
|
115
113
|
"""
|
|
116
114
|
if isinstance(val, np.ndarray):
|
|
117
|
-
if not linalg.is_unitary(val):
|
|
118
|
-
raise ValueError("The provided numpy array is not unitary.")
|
|
119
115
|
return val
|
|
120
116
|
|
|
121
117
|
strats = [
|
|
@@ -163,12 +163,9 @@ def test_unitary():
|
|
|
163
163
|
|
|
164
164
|
# Test that numpy arrays are handled directly
|
|
165
165
|
test_matrix = np.array([[1, 0], [0, 1]])
|
|
166
|
-
assert cirq.unitary(test_matrix
|
|
167
|
-
|
|
168
|
-
# Test that non-unitary numpy arrays raise ValueError
|
|
166
|
+
assert cirq.unitary(test_matrix) is test_matrix
|
|
169
167
|
non_unitary_matrix = np.array([[1, 1], [0, 1]])
|
|
170
|
-
|
|
171
|
-
_ = cirq.unitary(non_unitary_matrix)
|
|
168
|
+
assert cirq.unitary(non_unitary_matrix) is non_unitary_matrix
|
|
172
169
|
|
|
173
170
|
assert cirq.unitary(NoMethod(), None) is None
|
|
174
171
|
assert cirq.unitary(ReturnsNotImplemented(), None) is None
|
{cirq_core-1.7.0.dev20250824200454.dist-info → cirq_core-1.7.0.dev20250825201352.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cirq-core
|
|
3
|
-
Version: 1.7.0.
|
|
3
|
+
Version: 1.7.0.dev20250825201352
|
|
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.7.0.dev20250824200454.dist-info → cirq_core-1.7.0.dev20250825201352.dist-info}/RECORD
RENAMED
|
@@ -4,8 +4,8 @@ cirq/_compat_test.py,sha256=emXpdD5ZvwLRlFAoQB8YatmZyU3b4e9jg6FppMTUhkU,33900
|
|
|
4
4
|
cirq/_doc.py,sha256=BrnoABo1hk5RgB3Cgww4zLHUfiyFny0F1V-tOMCbdaU,2909
|
|
5
5
|
cirq/_import.py,sha256=ixBu4EyGl46Ram2cP3p5eZVEFDW5L2DS-VyTjz4N9iw,8429
|
|
6
6
|
cirq/_import_test.py,sha256=oF4izzOVZLc7NZ0aZHFcGv-r01eiFFt_JORx_x7_D4s,1089
|
|
7
|
-
cirq/_version.py,sha256=
|
|
8
|
-
cirq/_version_test.py,sha256=
|
|
7
|
+
cirq/_version.py,sha256=c8XuyYustWARgawSw_lq0mSfvX3xI9eVP8Zbi1FUbn4,1206
|
|
8
|
+
cirq/_version_test.py,sha256=pLSg-ptHB9RvGeE-NkfHemLecVPZiskvVzvTppAqaxY,155
|
|
9
9
|
cirq/conftest.py,sha256=wSDKNdIQRDfLnXvOCWD3erheOw8JHRhdfQ53EyTUIXg,1239
|
|
10
10
|
cirq/json_resolver_cache.py,sha256=A5DIgFAY1hUNt9vai_C3-gGBv24116CJMzQxMcXOax4,13726
|
|
11
11
|
cirq/py.typed,sha256=VFSlmh_lNwnaXzwY-ZuW-C2Ws5PkuDoVgBdNCs0jXJE,63
|
|
@@ -199,8 +199,8 @@ cirq/experiments/n_qubit_tomography.py,sha256=16u0Tv14SyUM9WCk-ZxbBit9cl93MbZodG
|
|
|
199
199
|
cirq/experiments/n_qubit_tomography_test.py,sha256=8wIgs0O8DtlCGOyC0MZA_d3tLNoURX1ARcqnnp1360g,4439
|
|
200
200
|
cirq/experiments/purity_estimation.py,sha256=20MRvxDyxlcnWkwI94_PzMexOytS3NgnaaVbtFwLv2c,2516
|
|
201
201
|
cirq/experiments/purity_estimation_test.py,sha256=ZDU6k-pja5W5kQ-5cy4id1IWUQ86WMiQYNOiXyAI0YU,967
|
|
202
|
-
cirq/experiments/qubit_characterizations.py,sha256=
|
|
203
|
-
cirq/experiments/qubit_characterizations_test.py,sha256=
|
|
202
|
+
cirq/experiments/qubit_characterizations.py,sha256=FaCyAiBbiuzQvVT8YNjxZnuNvyrGMlxraQTjnoPUlKA,41990
|
|
203
|
+
cirq/experiments/qubit_characterizations_test.py,sha256=z5WFvZmFtvm3j2W_aF6A-dzPKvoYcW8KdD7zccW0aKk,11775
|
|
204
204
|
cirq/experiments/random_quantum_circuit_generation.py,sha256=90iD2KulPXKy9mu5MiHnir2ozCJ5bgGBzxNv9odw5FY,28016
|
|
205
205
|
cirq/experiments/random_quantum_circuit_generation_test.py,sha256=R4ShY12vAfLd4fTT9mX0VQM9VQol58ZdPsqBkZvFds4,16737
|
|
206
206
|
cirq/experiments/readout_confusion_matrix.py,sha256=qK6qDoNRuIHGTV7PS8xGkS7tCXGGyoDfUJJj6575-cE,20664
|
|
@@ -446,8 +446,8 @@ cirq/protocols/resolve_parameters.py,sha256=N1NJJ672v3ISQRusO-t6nwm1hOmOqMVBeXtq
|
|
|
446
446
|
cirq/protocols/resolve_parameters_test.py,sha256=2R2T2p4NkbD4IV2_4i8WkvSHu3OqjXo-Bf856Rwb-3w,4933
|
|
447
447
|
cirq/protocols/trace_distance_bound.py,sha256=xF_qfkFV_T7O3-5lBITupq6ulBYuzFXDHaYDv7it96E,4150
|
|
448
448
|
cirq/protocols/trace_distance_bound_test.py,sha256=0bI9uYttJj5eayM05kShPh9qkxeKG1egcZ9fXJPZWNU,1980
|
|
449
|
-
cirq/protocols/unitary_protocol.py,sha256=
|
|
450
|
-
cirq/protocols/unitary_protocol_test.py,sha256=
|
|
449
|
+
cirq/protocols/unitary_protocol.py,sha256=KsXGUA7bkHOkL9GqJXpyFmhA0HVQeLdZfypZJC7yU6g,8233
|
|
450
|
+
cirq/protocols/unitary_protocol_test.py,sha256=oj31ZmeGylf4wh2jv_EwsXmJ7YYgsu3YM43A-yXrPps,10480
|
|
451
451
|
cirq/protocols/json_test_data/AmplitudeDampingChannel.json,sha256=x3szAuG8j_1uAK5ghFapaB410g0twQ83aQNsvItXVdo,60
|
|
452
452
|
cirq/protocols/json_test_data/AmplitudeDampingChannel.repr,sha256=n_tJNGHkWlxYunXGMFtFO6-RuIv0y8Ki0YqE8w3hOl0,30
|
|
453
453
|
cirq/protocols/json_test_data/AnyIntegerPowerGateFamily.json,sha256=Qf8FTwvPV7en7WcPbhP1kvjLUUPYgbICoPFqT6w86hw,68
|
|
@@ -1234,8 +1234,8 @@ cirq/work/sampler.py,sha256=rxbMWvrhu3gfNSBjZKozw28lLKVvBAS_1EGyPdYe8Xg,19041
|
|
|
1234
1234
|
cirq/work/sampler_test.py,sha256=SsMrRvLDYELyOAWLKISjkdEfrBwLYWRsT6D8WrsLM3Q,13533
|
|
1235
1235
|
cirq/work/zeros_sampler.py,sha256=Fs2JWwq0n9zv7_G5Rm-9vPeHUag7uctcMOHg0JTkZpc,2371
|
|
1236
1236
|
cirq/work/zeros_sampler_test.py,sha256=lQLgQDGBLtfImryys2HzQ2jOSGxHgc7-koVBUhv8qYk,3345
|
|
1237
|
-
cirq_core-1.7.0.
|
|
1238
|
-
cirq_core-1.7.0.
|
|
1239
|
-
cirq_core-1.7.0.
|
|
1240
|
-
cirq_core-1.7.0.
|
|
1241
|
-
cirq_core-1.7.0.
|
|
1237
|
+
cirq_core-1.7.0.dev20250825201352.dist-info/licenses/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
|
|
1238
|
+
cirq_core-1.7.0.dev20250825201352.dist-info/METADATA,sha256=AZ2Qp-ke_tazWFur88_hu2iaYqCHuhxPkxYZuwIrW4A,4819
|
|
1239
|
+
cirq_core-1.7.0.dev20250825201352.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
1240
|
+
cirq_core-1.7.0.dev20250825201352.dist-info/top_level.txt,sha256=Sz9iOxHU0IEMLSFGwiwOCaN2e9K-jFbBbtpPN1hB73g,5
|
|
1241
|
+
cirq_core-1.7.0.dev20250825201352.dist-info/RECORD,,
|
{cirq_core-1.7.0.dev20250824200454.dist-info → cirq_core-1.7.0.dev20250825201352.dist-info}/WHEEL
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|