From 84c0169e5bae985e859bd73104af8b900b2f0103 Mon Sep 17 00:00:00 2001 From: Doug Strain Date: Thu, 5 May 2022 11:35:52 -0700 Subject: [PATCH 1/5] Deprecate random circuits in experiments - Moved to ReCirq and can now remove them in Cirq. Fixes: #3327 --- .../google_v2_supremacy_circuit.py | 17 ++++++++++- .../google_v2_supremacy_circuit_test.py | 29 +++++++++++-------- 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/cirq-core/cirq/experiments/google_v2_supremacy_circuit.py b/cirq-core/cirq/experiments/google_v2_supremacy_circuit.py index bd732d2da69..32268f983b8 100644 --- a/cirq-core/cirq/experiments/google_v2_supremacy_circuit.py +++ b/cirq-core/cirq/experiments/google_v2_supremacy_circuit.py @@ -16,9 +16,14 @@ from typing import Callable, Iterable, TypeVar, cast, Sequence from cirq.circuits import InsertStrategy -from cirq import circuits, devices, ops +from cirq import _compat, circuits, devices, ops +@_compat.deprecated( + deadline='v0.16', + fix='Install ReCirq and use ' + + 'recirq.beyond_classical.generate_boixo_2018_beyond_classical_v2', +) def generate_boixo_2018_supremacy_circuits_v2( qubits: Iterable[devices.GridQubit], cz_depth: int, seed: int ) -> circuits.Circuit: @@ -81,6 +86,11 @@ def generate_boixo_2018_supremacy_circuits_v2( return circuit +@_compat.deprecated( + deadline='v0.16', + fix='Install ReCirq and use ' + + 'recirq.beyond_classical.generate_boixo_2018_beyond_classical_v2_grid', +) def generate_boixo_2018_supremacy_circuits_v2_grid( n_rows: int, n_cols: int, cz_depth: int, seed: int ) -> circuits.Circuit: @@ -183,6 +193,11 @@ def generate_boixo_2018_supremacy_circuits_v2_grid( ) +@_compat.deprecated( + deadline='v0.16', + fix='Install ReCirq and use ' + + 'recirq.beyond_classical.generate_boixo_2018_beyond_classical_v2_bristlecone', +) def generate_boixo_2018_supremacy_circuits_v2_bristlecone( n_rows: int, cz_depth: int, seed: int ) -> circuits.Circuit: diff --git a/cirq-core/cirq/experiments/google_v2_supremacy_circuit_test.py b/cirq-core/cirq/experiments/google_v2_supremacy_circuit_test.py index 6b0267ec16a..7d0fc4fb433 100644 --- a/cirq-core/cirq/experiments/google_v2_supremacy_circuit_test.py +++ b/cirq-core/cirq/experiments/google_v2_supremacy_circuit_test.py @@ -14,15 +14,17 @@ import pytest +import cirq from cirq import GridQubit from cirq import ops import cirq.experiments.google_v2_supremacy_circuit as supremacy_v2 def test_google_v2_supremacy_circuit(): - circuit = supremacy_v2.generate_boixo_2018_supremacy_circuits_v2_grid( - n_rows=4, n_cols=5, cz_depth=9, seed=0 - ) + with cirq.testing.assert_deprecated('_beyond_classical_', deadline='v0.16', count=2): + circuit = supremacy_v2.generate_boixo_2018_supremacy_circuits_v2_grid( + n_rows=4, n_cols=5, cz_depth=9, seed=0 + ) # We check that is exactly circuit inst_4x5_10_0 # in github.com/sboixo/GRCS cz_v2 assert len(circuit) == 11 @@ -47,9 +49,10 @@ def test_google_v2_supremacy_circuit(): def test_google_v2_supremacy_bristlecone(): pytest.importorskip("cirq_google") # Check instance consistency - c = supremacy_v2.generate_boixo_2018_supremacy_circuits_v2_bristlecone( - n_rows=11, cz_depth=8, seed=0 - ) + with cirq.testing.assert_deprecated('_beyond_classical_', deadline='v0.16', count=2): + c = supremacy_v2.generate_boixo_2018_supremacy_circuits_v2_bristlecone( + n_rows=11, cz_depth=8, seed=0 + ) assert len(c) == 10 assert len(c.all_qubits()) == 70 assert len(list(c.findall_operations_with_gate_type(ops.CZPowGate))) == 119 @@ -59,9 +62,10 @@ def test_google_v2_supremacy_bristlecone(): assert isinstance(c.operation_at(GridQubit(3, 2), 2).gate, ops.XPowGate) assert isinstance(c.operation_at(GridQubit(1, 6), 3).gate, ops.XPowGate) # test smaller subgraph - c = supremacy_v2.generate_boixo_2018_supremacy_circuits_v2_bristlecone( - n_rows=9, cz_depth=8, seed=0 - ) + with cirq.testing.assert_deprecated('_beyond_classical_', deadline='v0.16', count=2): + c = supremacy_v2.generate_boixo_2018_supremacy_circuits_v2_bristlecone( + n_rows=9, cz_depth=8, seed=0 + ) qubits = list(c.all_qubits()) qubits.sort() assert len(qubits) == 48 @@ -74,6 +78,7 @@ def test_google_v2_supremacy_bristlecone(): def test_n_rows_less_than_2(): pytest.importorskip("cirq_google") with pytest.raises(AssertionError): - supremacy_v2.generate_boixo_2018_supremacy_circuits_v2_bristlecone( - n_rows=1, cz_depth=0, seed=0 - ) + with cirq.testing.assert_deprecated('_beyond_classical_', deadline='v0.16'): + supremacy_v2.generate_boixo_2018_supremacy_circuits_v2_bristlecone( + n_rows=1, cz_depth=0, seed=0 + ) From ca8ada4343a515ea82cc3a50892a6e072cb7942d Mon Sep 17 00:00:00 2001 From: Doug Strain Date: Fri, 6 May 2022 10:05:02 -0700 Subject: [PATCH 2/5] Fix MPS simulator tests to use random_circuits. --- .../cirq/contrib/quimb/mps_simulator_test.py | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/cirq-core/cirq/contrib/quimb/mps_simulator_test.py b/cirq-core/cirq/contrib/quimb/mps_simulator_test.py index cd7d3649e58..d5291e5cb28 100644 --- a/cirq-core/cirq/contrib/quimb/mps_simulator_test.py +++ b/cirq-core/cirq/contrib/quimb/mps_simulator_test.py @@ -8,7 +8,6 @@ import cirq import cirq.contrib.quimb as ccq -import cirq.experiments.google_v2_supremacy_circuit as supremacy_v2 import cirq.testing from cirq import value @@ -353,17 +352,17 @@ def test_state_equal(): assert state1a != state1b -def test_supremacy_equal_more_rows(): - circuit = supremacy_v2.generate_boixo_2018_supremacy_circuits_v2_grid( - n_rows=3, n_cols=2, cz_depth=3, seed=0 +def test_random_circuits_equal_more_rows(): + circuit = cirq.testing.random_circuit( + qubits=cirq.GridQubit.rect(3, 2), n_moments=6, op_density=1.0 ) qubits = circuit.all_qubits() assert_same_output_as_dense(circuit, qubits) def test_supremacy_equal_more_cols(): - circuit = supremacy_v2.generate_boixo_2018_supremacy_circuits_v2_grid( - n_rows=2, n_cols=3, cz_depth=3, seed=0 + circuit = cirq.testing.random_circuit( + qubits=cirq.GridQubit.rect(2, 3), n_moments=6, op_density=1.0 ) qubits = circuit.all_qubits() assert_same_output_as_dense(circuit, qubits) @@ -380,9 +379,13 @@ def test_tensor_index_names(): assert state.mu_str(3, 0) == "mu_0_3" -def test_supremacy_big(): - circuit = supremacy_v2.generate_boixo_2018_supremacy_circuits_v2_grid( - n_rows=7, n_cols=7, cz_depth=6, seed=0 +def test_random_circuit_big(): + circuit = cirq.testing.random_circuit( + qubits=cirq.GridQubit.rect(4, 4), + n_moments=4, + op_density=1.0, + gate_domain={cirq.CZ: 2}, + random_state=np.random.RandomState(0), ) qubit_order = circuit.all_qubits() q0 = next(iter(qubit_order)) @@ -394,9 +397,9 @@ def test_supremacy_big(): result_1 = mps_simulator_1.simulate(circuit, qubit_order=qubit_order, initial_state=0) assert result_1.final_state.estimation_stats() == { - 'estimated_fidelity': 0.997, - 'memory_bytes': 11008, - 'num_coefs_used': 688, + 'estimated_fidelity': 0.998, + 'memory_bytes': 512, + 'num_coefs_used': 32, } mps_simulator_2 = ccq.mps_simulator.MPSSimulator( @@ -408,8 +411,8 @@ def test_supremacy_big(): assert result_2.final_state.estimation_stats() == { 'estimated_fidelity': 1.0, - 'memory_bytes': 1568, - 'num_coefs_used': 98, + 'memory_bytes': 512, + 'num_coefs_used': 32, } From 0def713b1a22421d285e662fa99453387cc8e379 Mon Sep 17 00:00:00 2001 From: Doug Strain Date: Wed, 11 May 2022 09:46:30 -0700 Subject: [PATCH 3/5] Fix formatting of long quotes. --- .../experiments/google_v2_supremacy_circuit.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/cirq-core/cirq/experiments/google_v2_supremacy_circuit.py b/cirq-core/cirq/experiments/google_v2_supremacy_circuit.py index 32268f983b8..6344ae614c0 100644 --- a/cirq-core/cirq/experiments/google_v2_supremacy_circuit.py +++ b/cirq-core/cirq/experiments/google_v2_supremacy_circuit.py @@ -21,8 +21,9 @@ @_compat.deprecated( deadline='v0.16', - fix='Install ReCirq and use ' - + 'recirq.beyond_classical.generate_boixo_2018_beyond_classical_v2', + fix=( + 'Install ReCirq and use ' 'recirq.beyond_classical.generate_boixo_2018_beyond_classical_v2' + ), ) def generate_boixo_2018_supremacy_circuits_v2( qubits: Iterable[devices.GridQubit], cz_depth: int, seed: int @@ -88,8 +89,10 @@ def generate_boixo_2018_supremacy_circuits_v2( @_compat.deprecated( deadline='v0.16', - fix='Install ReCirq and use ' - + 'recirq.beyond_classical.generate_boixo_2018_beyond_classical_v2_grid', + fix=( + 'Install ReCirq and use ' + 'recirq.beyond_classical.generate_boixo_2018_beyond_classical_v2_grid' + ), ) def generate_boixo_2018_supremacy_circuits_v2_grid( n_rows: int, n_cols: int, cz_depth: int, seed: int @@ -195,8 +198,10 @@ def generate_boixo_2018_supremacy_circuits_v2_grid( @_compat.deprecated( deadline='v0.16', - fix='Install ReCirq and use ' - + 'recirq.beyond_classical.generate_boixo_2018_beyond_classical_v2_bristlecone', + fix=( + 'Install ReCirq and use ' + 'recirq.beyond_classical.generate_boixo_2018_beyond_classical_v2_bristlecone' + ), ) def generate_boixo_2018_supremacy_circuits_v2_bristlecone( n_rows: int, cz_depth: int, seed: int From f693fb4b620e1dc1babda95496556a23ce780985 Mon Sep 17 00:00:00 2001 From: Doug Strain Date: Wed, 11 May 2022 10:14:08 -0700 Subject: [PATCH 4/5] Make big simulation less big since it makes things blow up. --- cirq-core/cirq/contrib/quimb/mps_simulator_test.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cirq-core/cirq/contrib/quimb/mps_simulator_test.py b/cirq-core/cirq/contrib/quimb/mps_simulator_test.py index d5291e5cb28..dbbce5de684 100644 --- a/cirq-core/cirq/contrib/quimb/mps_simulator_test.py +++ b/cirq-core/cirq/contrib/quimb/mps_simulator_test.py @@ -381,8 +381,8 @@ def test_tensor_index_names(): def test_random_circuit_big(): circuit = cirq.testing.random_circuit( - qubits=cirq.GridQubit.rect(4, 4), - n_moments=4, + qubits=cirq.GridQubit.rect(4, 3), + n_moments=3, op_density=1.0, gate_domain={cirq.CZ: 2}, random_state=np.random.RandomState(0), From d0949352d0252aec90ab71197b9258375eee9f05 Mon Sep 17 00:00:00 2001 From: Doug Strain Date: Wed, 11 May 2022 10:25:01 -0700 Subject: [PATCH 5/5] Remove big test. It is flaky with random circuits. --- .../cirq/contrib/quimb/mps_simulator_test.py | 37 ------------------- 1 file changed, 37 deletions(-) diff --git a/cirq-core/cirq/contrib/quimb/mps_simulator_test.py b/cirq-core/cirq/contrib/quimb/mps_simulator_test.py index dbbce5de684..d56d4611248 100644 --- a/cirq-core/cirq/contrib/quimb/mps_simulator_test.py +++ b/cirq-core/cirq/contrib/quimb/mps_simulator_test.py @@ -379,43 +379,6 @@ def test_tensor_index_names(): assert state.mu_str(3, 0) == "mu_0_3" -def test_random_circuit_big(): - circuit = cirq.testing.random_circuit( - qubits=cirq.GridQubit.rect(4, 3), - n_moments=3, - op_density=1.0, - gate_domain={cirq.CZ: 2}, - random_state=np.random.RandomState(0), - ) - qubit_order = circuit.all_qubits() - q0 = next(iter(qubit_order)) - circuit.append(cirq.measure(q0)) - - mps_simulator_1 = ccq.mps_simulator.MPSSimulator( - simulation_options=ccq.mps_simulator.MPSOptions(cutoff=5e-5) - ) - result_1 = mps_simulator_1.simulate(circuit, qubit_order=qubit_order, initial_state=0) - - assert result_1.final_state.estimation_stats() == { - 'estimated_fidelity': 0.998, - 'memory_bytes': 512, - 'num_coefs_used': 32, - } - - mps_simulator_2 = ccq.mps_simulator.MPSSimulator( - simulation_options=ccq.mps_simulator.MPSOptions( - method='isvd', max_bond=1, cutoff_mode='sum2' - ) - ) - result_2 = mps_simulator_2.simulate(circuit, qubit_order=qubit_order, initial_state=0) - - assert result_2.final_state.estimation_stats() == { - 'estimated_fidelity': 1.0, - 'memory_bytes': 512, - 'num_coefs_used': 32, - } - - def test_simulate_moment_steps_sample(): q0, q1 = cirq.LineQubit.range(2) circuit = cirq.Circuit(cirq.H(q0), cirq.CNOT(q0, q1))