From caadb0c306a58817b1d24cf82a440d0c42857126 Mon Sep 17 00:00:00 2001 From: Dax Fohl Date: Fri, 18 Mar 2022 15:06:33 -0700 Subject: [PATCH] Deprectate log_of_measurement_result input (#5100) Co-authored-by: Cirq Bot --- cirq-core/cirq/contrib/quimb/mps_simulator_test.py | 5 +++-- cirq-core/cirq/ops/clifford_gate.py | 5 +---- cirq-core/cirq/ops/clifford_gate_test.py | 11 ++--------- cirq-core/cirq/ops/common_channels_test.py | 1 - cirq-core/cirq/ops/common_gates_test.py | 8 -------- cirq-core/cirq/ops/global_phase_op_test.py | 6 ++---- cirq-core/cirq/ops/measurement_gate_test.py | 12 ------------ cirq-core/cirq/sim/act_on_args_container.py | 8 +++++++- cirq-core/cirq/sim/act_on_args_container_test.py | 12 ++++++------ cirq-core/cirq/sim/act_on_density_matrix_args.py | 6 ++++++ .../cirq/sim/act_on_density_matrix_args_test.py | 2 -- cirq-core/cirq/sim/act_on_state_vector_args.py | 6 ++++++ .../cirq/sim/act_on_state_vector_args_test.py | 6 ------ .../sim/clifford/act_on_clifford_tableau_args.py | 7 +++++++ .../clifford/act_on_clifford_tableau_args_test.py | 5 ----- .../sim/clifford/act_on_stabilizer_ch_form_args.py | 6 ++++++ .../act_on_stabilizer_ch_form_args_test.py | 7 ------- cirq-core/cirq/sim/clifford/stabilizer_sampler.py | 1 - .../cirq/sim/density_matrix_simulator_test.py | 5 +---- cirq-core/cirq/sim/sparse_simulator_test.py | 1 - cirq-core/cirq/sim/state_vector_simulator_test.py | 5 +---- cirq-core/cirq/testing/consistent_act_on.py | 3 --- .../clifford_decomposition.py | 4 +--- .../clifford_decomposition_test.py | 14 +++----------- examples/direct_fidelity_estimation.py | 2 +- 25 files changed, 53 insertions(+), 95 deletions(-) diff --git a/cirq-core/cirq/contrib/quimb/mps_simulator_test.py b/cirq-core/cirq/contrib/quimb/mps_simulator_test.py index 53b778d9fb3..aef78565ad2 100644 --- a/cirq-core/cirq/contrib/quimb/mps_simulator_test.py +++ b/cirq-core/cirq/contrib/quimb/mps_simulator_test.py @@ -550,7 +550,9 @@ def test_state_act_on_args_initializer(): s = ccq.mps_simulator.MPSState( qubits=(cirq.LineQubit(0),), prng=np.random.RandomState(0), - log_of_measurement_results={'test': [4]}, + classical_data=cirq.ClassicalDataDictionaryStore( + _records={cirq.MeasurementKey('test'): [(4,)]} + ), ) assert s.qubits == (cirq.LineQubit(0),) assert s.log_of_measurement_results == {'test': [4]} @@ -560,7 +562,6 @@ def test_act_on_gate(): args = ccq.mps_simulator.MPSState( qubits=cirq.LineQubit.range(3), prng=np.random.RandomState(0), - log_of_measurement_results={}, ) cirq.act_on(cirq.X, args, [cirq.LineQubit(1)]) diff --git a/cirq-core/cirq/ops/clifford_gate.py b/cirq-core/cirq/ops/clifford_gate.py index 8f11b7b9c8d..553923b1524 100644 --- a/cirq-core/cirq/ops/clifford_gate.py +++ b/cirq-core/cirq/ops/clifford_gate.py @@ -666,9 +666,7 @@ def _generate_clifford_from_known_gate( ) -> 'CliffordGate': qubits = devices.LineQubit.range(num_qubits) t = qis.CliffordTableau(num_qubits=num_qubits) - args = sim.ActOnCliffordTableauArgs( - tableau=t, qubits=qubits, prng=np.random.RandomState(), log_of_measurement_results={} - ) + args = sim.ActOnCliffordTableauArgs(tableau=t, qubits=qubits) protocols.act_on(gate, args, qubits, allow_decompose=False) return CliffordGate.from_clifford_tableau(args.tableau) @@ -732,7 +730,6 @@ def from_op_list( tableau=base_tableau, qubits=qubit_order, prng=np.random.RandomState(0), # unused - log_of_measurement_results={}, # unused ) for op in operations: protocols.act_on(op, args, allow_decompose=True) diff --git a/cirq-core/cirq/ops/clifford_gate_test.py b/cirq-core/cirq/ops/clifford_gate_test.py index 8fa12d6fdf2..f430f987d60 100644 --- a/cirq-core/cirq/ops/clifford_gate_test.py +++ b/cirq-core/cirq/ops/clifford_gate_test.py @@ -796,13 +796,11 @@ def test_clifford_gate_act_on_small_case(): tableau=cirq.CliffordTableau(num_qubits=5), qubits=qubits, prng=np.random.RandomState(), - log_of_measurement_results={}, ) expected_args = cirq.ActOnCliffordTableauArgs( tableau=cirq.CliffordTableau(num_qubits=5), qubits=qubits, prng=np.random.RandomState(), - log_of_measurement_results={}, ) cirq.act_on(cirq.H, expected_args, qubits=[qubits[0]], allow_decompose=False) cirq.act_on(cirq.CliffordGate.H, args, qubits=[qubits[0]], allow_decompose=False) @@ -833,12 +831,8 @@ def test_clifford_gate_act_on_large_case(): t1 = cirq.CliffordTableau(num_qubits=n) t2 = cirq.CliffordTableau(num_qubits=n) qubits = cirq.LineQubit.range(n) - args1 = cirq.ActOnCliffordTableauArgs( - tableau=t1, qubits=qubits, prng=prng, log_of_measurement_results={} - ) - args2 = cirq.ActOnCliffordTableauArgs( - tableau=t2, qubits=qubits, prng=prng, log_of_measurement_results={} - ) + args1 = cirq.ActOnCliffordTableauArgs(tableau=t1, qubits=qubits, prng=prng) + args2 = cirq.ActOnCliffordTableauArgs(tableau=t2, qubits=qubits, prng=prng) ops = [] for _ in range(num_ops): g = prng.randint(len(gate_candidate)) @@ -861,7 +855,6 @@ def test_clifford_gate_act_on_ch_form(): initial_state=cirq.StabilizerStateChForm(num_qubits=2, initial_state=1), qubits=cirq.LineQubit.range(2), prng=np.random.RandomState(), - log_of_measurement_results={}, ) cirq.act_on(cirq.CliffordGate.X, args, qubits=cirq.LineQubit.range(1)) np.testing.assert_allclose(args.state.state_vector(), np.array([0, 0, 0, 1])) diff --git a/cirq-core/cirq/ops/common_channels_test.py b/cirq-core/cirq/ops/common_channels_test.py index e0bf48052d5..3808e194163 100644 --- a/cirq-core/cirq/ops/common_channels_test.py +++ b/cirq-core/cirq/ops/common_channels_test.py @@ -498,7 +498,6 @@ def test_reset_act_on(): available_buffer=np.empty(shape=(2, 2, 2, 2, 2), dtype=np.complex64), qubits=cirq.LineQubit.range(5), prng=np.random.RandomState(), - log_of_measurement_results={}, initial_state=cirq.one_hot( index=(1, 1, 1, 1, 1), shape=(2, 2, 2, 2, 2), dtype=np.complex64 ), diff --git a/cirq-core/cirq/ops/common_gates_test.py b/cirq-core/cirq/ops/common_gates_test.py index 7d39d8f809b..f22af2f7501 100644 --- a/cirq-core/cirq/ops/common_gates_test.py +++ b/cirq-core/cirq/ops/common_gates_test.py @@ -309,7 +309,6 @@ def test_x_act_on_tableau(): tableau=original_tableau.copy(), qubits=cirq.LineQubit.range(5), prng=np.random.RandomState(), - log_of_measurement_results={}, ) cirq.act_on(cirq.X ** 0.5, args, [cirq.LineQubit(1)], allow_decompose=False) @@ -359,7 +358,6 @@ def test_y_act_on_tableau(): tableau=original_tableau.copy(), qubits=cirq.LineQubit.range(5), prng=np.random.RandomState(), - log_of_measurement_results={}, ) cirq.act_on(cirq.Y ** 0.5, args, [cirq.LineQubit(1)], allow_decompose=False) @@ -400,7 +398,6 @@ def test_z_h_act_on_tableau(): tableau=original_tableau.copy(), qubits=cirq.LineQubit.range(5), prng=np.random.RandomState(), - log_of_measurement_results={}, ) cirq.act_on(cirq.H, args, [cirq.LineQubit(1)], allow_decompose=False) @@ -451,7 +448,6 @@ def test_cx_act_on_tableau(): tableau=original_tableau.copy(), qubits=cirq.LineQubit.range(5), prng=np.random.RandomState(), - log_of_measurement_results={}, ) cirq.act_on(cirq.CX, args, cirq.LineQubit.range(2), allow_decompose=False) @@ -496,7 +492,6 @@ def test_cz_act_on_tableau(): tableau=original_tableau.copy(), qubits=cirq.LineQubit.range(5), prng=np.random.RandomState(), - log_of_measurement_results={}, ) cirq.act_on(cirq.CZ, args, cirq.LineQubit.range(2), allow_decompose=False) @@ -537,13 +532,11 @@ def test_cz_act_on_equivalent_to_h_cx_h_tableau(): tableau=cirq.CliffordTableau(num_qubits=2), qubits=cirq.LineQubit.range(2), prng=np.random.RandomState(), - log_of_measurement_results={}, ) args2 = cirq.ActOnCliffordTableauArgs( tableau=cirq.CliffordTableau(num_qubits=2), qubits=cirq.LineQubit.range(2), prng=np.random.RandomState(), - log_of_measurement_results={}, ) cirq.act_on(cirq.S, args=args1, qubits=[cirq.LineQubit(1)], allow_decompose=False) cirq.act_on(cirq.S, args=args2, qubits=[cirq.LineQubit(1)], allow_decompose=False) @@ -605,7 +598,6 @@ def test_act_on_ch_form(input_gate_sequence, outcome): args = cirq.ActOnStabilizerCHFormArgs( qubits=cirq.LineQubit.range(2), prng=np.random.RandomState(), - log_of_measurement_results={}, initial_state=original_state.copy(), ) diff --git a/cirq-core/cirq/ops/global_phase_op_test.py b/cirq-core/cirq/ops/global_phase_op_test.py index 1780aabb898..21153195374 100644 --- a/cirq-core/cirq/ops/global_phase_op_test.py +++ b/cirq-core/cirq/ops/global_phase_op_test.py @@ -43,7 +43,7 @@ def test_protocols(): @pytest.mark.parametrize('phase', [1, 1j, -1]) def test_act_on_tableau(phase): original_tableau = cirq.CliffordTableau(0) - args = cirq.ActOnCliffordTableauArgs(original_tableau.copy(), np.random.RandomState(), {}) + args = cirq.ActOnCliffordTableauArgs(original_tableau.copy(), np.random.RandomState()) cirq.act_on(cirq.global_phase_operation(phase), args, allow_decompose=False) assert args.tableau == original_tableau @@ -54,7 +54,6 @@ def test_act_on_ch_form(phase): args = cirq.ActOnStabilizerCHFormArgs( qubits=[], prng=np.random.RandomState(), - log_of_measurement_results={}, initial_state=state, ) cirq.act_on(cirq.global_phase_operation(phase), args, allow_decompose=False) @@ -309,7 +308,7 @@ def test_gate_protocols(): @pytest.mark.parametrize('phase', [1, 1j, -1]) def test_gate_act_on_tableau(phase): original_tableau = cirq.CliffordTableau(0) - args = cirq.ActOnCliffordTableauArgs(original_tableau.copy(), np.random.RandomState(), {}) + args = cirq.ActOnCliffordTableauArgs(original_tableau.copy(), np.random.RandomState()) cirq.act_on(cirq.GlobalPhaseGate(phase), args, qubits=(), allow_decompose=False) assert args.tableau == original_tableau @@ -320,7 +319,6 @@ def test_gate_act_on_ch_form(phase): args = cirq.ActOnStabilizerCHFormArgs( qubits=[], prng=np.random.RandomState(), - log_of_measurement_results={}, initial_state=state, ) cirq.act_on(cirq.GlobalPhaseGate(phase), args, qubits=(), allow_decompose=False) diff --git a/cirq-core/cirq/ops/measurement_gate_test.py b/cirq-core/cirq/ops/measurement_gate_test.py index 731ef914459..e281fb71123 100644 --- a/cirq-core/cirq/ops/measurement_gate_test.py +++ b/cirq-core/cirq/ops/measurement_gate_test.py @@ -298,7 +298,6 @@ def test_act_on_state_vector(): available_buffer=np.empty(shape=(2, 2, 2, 2, 2)), qubits=cirq.LineQubit.range(5), prng=np.random.RandomState(), - log_of_measurement_results={}, initial_state=cirq.one_hot(shape=(2, 2, 2, 2, 2), dtype=np.complex64), dtype=np.complex64, ) @@ -309,7 +308,6 @@ def test_act_on_state_vector(): available_buffer=np.empty(shape=(2, 2, 2, 2, 2)), qubits=cirq.LineQubit.range(5), prng=np.random.RandomState(), - log_of_measurement_results={}, initial_state=cirq.one_hot( index=(0, 1, 0, 0, 0), shape=(2, 2, 2, 2, 2), dtype=np.complex64 ), @@ -322,7 +320,6 @@ def test_act_on_state_vector(): available_buffer=np.empty(shape=(2, 2, 2, 2, 2)), qubits=cirq.LineQubit.range(5), prng=np.random.RandomState(), - log_of_measurement_results={}, initial_state=cirq.one_hot( index=(0, 1, 0, 1, 0), shape=(2, 2, 2, 2, 2), dtype=np.complex64 ), @@ -348,7 +345,6 @@ def test_act_on_clifford_tableau(): tableau=cirq.CliffordTableau(num_qubits=5, initial_state=0), qubits=cirq.LineQubit.range(5), prng=np.random.RandomState(), - log_of_measurement_results={}, ) cirq.act_on(m, args) assert args.log_of_measurement_results == {'out': [1, 0]} @@ -357,7 +353,6 @@ def test_act_on_clifford_tableau(): tableau=cirq.CliffordTableau(num_qubits=5, initial_state=8), qubits=cirq.LineQubit.range(5), prng=np.random.RandomState(), - log_of_measurement_results={}, ) cirq.act_on(m, args) @@ -367,7 +362,6 @@ def test_act_on_clifford_tableau(): tableau=cirq.CliffordTableau(num_qubits=5, initial_state=10), qubits=cirq.LineQubit.range(5), prng=np.random.RandomState(), - log_of_measurement_results={}, ) cirq.act_on(m, args) datastore = cast(cirq.ClassicalDataDictionaryStore, args.classical_data) @@ -388,7 +382,6 @@ def test_act_on_stabilizer_ch_form(): args = cirq.ActOnStabilizerCHFormArgs( qubits=cirq.LineQubit.range(5), prng=np.random.RandomState(), - log_of_measurement_results={}, initial_state=0, ) cirq.act_on(m, args) @@ -397,7 +390,6 @@ def test_act_on_stabilizer_ch_form(): args = cirq.ActOnStabilizerCHFormArgs( qubits=cirq.LineQubit.range(5), prng=np.random.RandomState(), - log_of_measurement_results={}, initial_state=8, ) @@ -407,7 +399,6 @@ def test_act_on_stabilizer_ch_form(): args = cirq.ActOnStabilizerCHFormArgs( qubits=cirq.LineQubit.range(5), prng=np.random.RandomState(), - log_of_measurement_results={}, initial_state=10, ) cirq.act_on(m, args) @@ -428,7 +419,6 @@ def test_act_on_qutrit(): available_buffer=np.empty(shape=(3, 3, 3, 3, 3)), qubits=cirq.LineQid.range(5, dimension=3), prng=np.random.RandomState(), - log_of_measurement_results={}, initial_state=cirq.one_hot( index=(0, 2, 0, 2, 0), shape=(3, 3, 3, 3, 3), dtype=np.complex64 ), @@ -441,7 +431,6 @@ def test_act_on_qutrit(): available_buffer=np.empty(shape=(3, 3, 3, 3, 3)), qubits=cirq.LineQid.range(5, dimension=3), prng=np.random.RandomState(), - log_of_measurement_results={}, initial_state=cirq.one_hot( index=(0, 1, 0, 2, 0), shape=(3, 3, 3, 3, 3), dtype=np.complex64 ), @@ -454,7 +443,6 @@ def test_act_on_qutrit(): available_buffer=np.empty(shape=(3, 3, 3, 3, 3)), qubits=cirq.LineQid.range(5, dimension=3), prng=np.random.RandomState(), - log_of_measurement_results={}, initial_state=cirq.one_hot( index=(0, 2, 0, 1, 0), shape=(3, 3, 3, 3, 3), dtype=np.complex64 ), diff --git a/cirq-core/cirq/sim/act_on_args_container.py b/cirq-core/cirq/sim/act_on_args_container.py index 1ee6d24acb0..64248ee20e5 100644 --- a/cirq-core/cirq/sim/act_on_args_container.py +++ b/cirq-core/cirq/sim/act_on_args_container.py @@ -31,7 +31,7 @@ import numpy as np from cirq import ops, protocols, value -from cirq._compat import deprecated +from cirq._compat import deprecated, deprecated_parameter from cirq.sim.operation_target import OperationTarget from cirq.sim.simulator import ( TActOnArgs, @@ -48,6 +48,12 @@ class ActOnArgsContainer( ): """A container for a `Qid`-to-`ActOnArgs` dictionary.""" + @deprecated_parameter( + deadline='v0.15', + fix='Use classical_data.', + parameter_desc='log_of_measurement_results and positional arguments', + match=lambda args, kwargs: 'log_of_measurement_results' in kwargs or len(args) > 4, + ) def __init__( self, args: Dict[Optional['cirq.Qid'], TActOnArgs], diff --git a/cirq-core/cirq/sim/act_on_args_container_test.py b/cirq-core/cirq/sim/act_on_args_container_test.py index 384af341ee3..8afba6fc738 100644 --- a/cirq-core/cirq/sim/act_on_args_container_test.py +++ b/cirq-core/cirq/sim/act_on_args_container_test.py @@ -11,16 +11,16 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -from typing import Any, Dict, List, Optional, Sequence, Union +from typing import Dict, List, Optional, Sequence, Union import cirq class EmptyActOnArgs(cirq.ActOnArgs): - def __init__(self, qubits, logs): + def __init__(self, qubits, classical_data): super().__init__( qubits=qubits, - log_of_measurement_results=logs, + classical_data=classical_data, ) def _perform_measurement(self, qubits: Sequence[cirq.Qid]) -> List[int]: @@ -30,7 +30,7 @@ def copy(self) -> 'EmptyActOnArgs': # type: ignore """The deep_copy_buffers parameter is omitted to trigger a deprecation warning test.""" return EmptyActOnArgs( qubits=self.qubits, - logs=self.log_of_measurement_results.copy(), + classical_data=self.classical_data.copy(), ) def _act_on_fallback_( @@ -70,7 +70,7 @@ def create_container( split_untangled_states=True, ) -> cirq.ActOnArgsContainer[EmptyActOnArgs]: args_map: Dict[Optional['cirq.Qid'], EmptyActOnArgs] = {} - log: Dict[str, Any] = {} + log = cirq.ClassicalDataDictionaryStore() if split_untangled_states: for q in reversed(qubits): args_map[q] = EmptyActOnArgs([q], log) @@ -80,7 +80,7 @@ def create_container( for q in qubits: args_map[q] = args args_map[None] = args if not split_untangled_states else EmptyActOnArgs((), log) - return cirq.ActOnArgsContainer(args_map, qubits, split_untangled_states, log) + return cirq.ActOnArgsContainer(args_map, qubits, split_untangled_states, classical_data=log) def test_entanglement_causes_join(): diff --git a/cirq-core/cirq/sim/act_on_density_matrix_args.py b/cirq-core/cirq/sim/act_on_density_matrix_args.py index 76f3737bae0..b92a3695a17 100644 --- a/cirq-core/cirq/sim/act_on_density_matrix_args.py +++ b/cirq-core/cirq/sim/act_on_density_matrix_args.py @@ -33,6 +33,12 @@ class ActOnDensityMatrixArgs(ActOnArgs): storing the density matrix of the quantum system with one axis per qubit. """ + @_compat.deprecated_parameter( + deadline='v0.15', + fix='Use classical_data.', + parameter_desc='log_of_measurement_results and positional arguments', + match=lambda args, kwargs: 'log_of_measurement_results' in kwargs or len(args) > 5, + ) @_compat.deprecated_parameter( deadline='v0.15', fix='Use cirq.dephase_measurements to transform the circuit before simulating.', diff --git a/cirq-core/cirq/sim/act_on_density_matrix_args_test.py b/cirq-core/cirq/sim/act_on_density_matrix_args_test.py index ca3442689ac..a9604adbfa8 100644 --- a/cirq-core/cirq/sim/act_on_density_matrix_args_test.py +++ b/cirq-core/cirq/sim/act_on_density_matrix_args_test.py @@ -73,7 +73,6 @@ def _decompose_(self, qubits): args = cirq.ActOnDensityMatrixArgs( qubits=cirq.LineQubit.range(1), prng=np.random.RandomState(), - log_of_measurement_results={}, initial_state=0, dtype=np.complex64, ) @@ -91,7 +90,6 @@ class NoDetails: args = cirq.ActOnDensityMatrixArgs( qubits=cirq.LineQubit.range(1), prng=np.random.RandomState(), - log_of_measurement_results={}, initial_state=0, dtype=np.complex64, ) diff --git a/cirq-core/cirq/sim/act_on_state_vector_args.py b/cirq-core/cirq/sim/act_on_state_vector_args.py index a1c2618e66f..f3f803945ad 100644 --- a/cirq-core/cirq/sim/act_on_state_vector_args.py +++ b/cirq-core/cirq/sim/act_on_state_vector_args.py @@ -37,6 +37,12 @@ class ActOnStateVectorArgs(ActOnArgs): then pass `available_buffer` into `swap_target_tensor_for`. """ + @_compat.deprecated_parameter( + deadline='v0.15', + fix='Use classical_data.', + parameter_desc='log_of_measurement_results and positional arguments', + match=lambda args, kwargs: 'log_of_measurement_results' in kwargs or len(args) > 4, + ) @_compat.deprecated_parameter( deadline='v0.15', fix='Use initial_state instead and specify all the arguments with keywords.', diff --git a/cirq-core/cirq/sim/act_on_state_vector_args_test.py b/cirq-core/cirq/sim/act_on_state_vector_args_test.py index c4a644eb925..9efa9181ec7 100644 --- a/cirq-core/cirq/sim/act_on_state_vector_args_test.py +++ b/cirq-core/cirq/sim/act_on_state_vector_args_test.py @@ -92,7 +92,6 @@ def _decompose_(self, qubits): available_buffer=np.empty((2, 2, 2), dtype=np.complex64), qubits=cirq.LineQubit.range(3), prng=np.random.RandomState(), - log_of_measurement_results={}, initial_state=cirq.one_hot(shape=(2, 2, 2), dtype=np.complex64), dtype=np.complex64, ) @@ -111,7 +110,6 @@ class NoDetails: available_buffer=np.empty((2, 2, 2), dtype=np.complex64), qubits=cirq.LineQubit.range(3), prng=np.random.RandomState(), - log_of_measurement_results={}, initial_state=cirq.one_hot(shape=(2, 2, 2), dtype=np.complex64), dtype=np.complex64, ) @@ -139,7 +137,6 @@ def _kraus_(self): available_buffer=np.empty_like(initial_state), qubits=cirq.LineQubit.range(4), prng=mock_prng, - log_of_measurement_results={}, initial_state=np.copy(initial_state), dtype=initial_state.dtype, ) @@ -159,7 +156,6 @@ def _kraus_(self): available_buffer=np.empty_like(initial_state), qubits=cirq.LineQubit.range(4), prng=mock_prng, - log_of_measurement_results={}, initial_state=np.copy(initial_state), dtype=initial_state.dtype, ) @@ -197,7 +193,6 @@ def get_result(state: np.ndarray, sample: float): available_buffer=np.empty_like(state), qubits=cirq.LineQubit.range(4), prng=mock_prng, - log_of_measurement_results={}, initial_state=np.copy(state), dtype=state.dtype, ) @@ -260,7 +255,6 @@ def _kraus_(self): available_buffer=np.empty(2, dtype=np.complex64), qubits=cirq.LineQubit.range(1), prng=mock_prng, - log_of_measurement_results={}, initial_state=np.array([1, 0], dtype=np.complex64), dtype=np.complex64, ) diff --git a/cirq-core/cirq/sim/clifford/act_on_clifford_tableau_args.py b/cirq-core/cirq/sim/clifford/act_on_clifford_tableau_args.py index e8608c6b93c..0f76546a20f 100644 --- a/cirq-core/cirq/sim/clifford/act_on_clifford_tableau_args.py +++ b/cirq-core/cirq/sim/clifford/act_on_clifford_tableau_args.py @@ -18,6 +18,7 @@ import numpy as np +from cirq._compat import deprecated_parameter from cirq.qis import clifford_tableau from cirq.sim.clifford.act_on_stabilizer_args import ActOnStabilizerArgs @@ -28,6 +29,12 @@ class ActOnCliffordTableauArgs(ActOnStabilizerArgs[clifford_tableau.CliffordTableau]): """State and context for an operation acting on a clifford tableau.""" + @deprecated_parameter( + deadline='v0.15', + fix='Use classical_data.', + parameter_desc='log_of_measurement_results and positional arguments', + match=lambda args, kwargs: 'log_of_measurement_results' in kwargs or len(args) > 3, + ) def __init__( self, tableau: 'cirq.CliffordTableau', diff --git a/cirq-core/cirq/sim/clifford/act_on_clifford_tableau_args_test.py b/cirq-core/cirq/sim/clifford/act_on_clifford_tableau_args_test.py index f49aaa64703..29157766bc5 100644 --- a/cirq-core/cirq/sim/clifford/act_on_clifford_tableau_args_test.py +++ b/cirq-core/cirq/sim/clifford/act_on_clifford_tableau_args_test.py @@ -40,7 +40,6 @@ def _unitary_(self): tableau=original_tableau.copy(), qubits=cirq.LineQubit.range(3), prng=np.random.RandomState(), - log_of_measurement_results={}, ) cirq.act_on(UnitaryXGate(), args, [cirq.LineQubit(1)]) @@ -50,14 +49,12 @@ def _unitary_(self): tableau=original_tableau.copy(), qubits=cirq.LineQubit.range(3), prng=np.random.RandomState(), - log_of_measurement_results={}, ) cirq.act_on(UnitaryYGate(), args, [cirq.LineQubit(1)]) expected_args = cirq.ActOnCliffordTableauArgs( tableau=original_tableau.copy(), qubits=cirq.LineQubit.range(3), prng=np.random.RandomState(), - log_of_measurement_results={}, ) cirq.act_on(cirq.Y, expected_args, [cirq.LineQubit(1)]) assert args.tableau == expected_args.tableau @@ -74,7 +71,6 @@ class NoDetailsSingleQubitGate(cirq.SingleQubitGate): tableau=cirq.CliffordTableau(num_qubits=3), qubits=cirq.LineQubit.range(3), prng=np.random.RandomState(), - log_of_measurement_results={}, ) with pytest.raises(TypeError, match="no _num_qubits_ or _qid_shape_"): @@ -89,7 +85,6 @@ def test_copy(): tableau=cirq.CliffordTableau(num_qubits=3), qubits=cirq.LineQubit.range(3), prng=np.random.RandomState(), - log_of_measurement_results={}, ) args1 = args.copy() assert isinstance(args1, cirq.ActOnCliffordTableauArgs) diff --git a/cirq-core/cirq/sim/clifford/act_on_stabilizer_ch_form_args.py b/cirq-core/cirq/sim/clifford/act_on_stabilizer_ch_form_args.py index 44689e4cc48..d7a67d8e198 100644 --- a/cirq-core/cirq/sim/clifford/act_on_stabilizer_ch_form_args.py +++ b/cirq-core/cirq/sim/clifford/act_on_stabilizer_ch_form_args.py @@ -29,6 +29,12 @@ class ActOnStabilizerCHFormArgs( ): """Wrapper around a stabilizer state in CH form for the act_on protocol.""" + @_compat.deprecated_parameter( + deadline='v0.15', + fix='Use classical_data.', + parameter_desc='log_of_measurement_results and positional arguments', + match=lambda args, kwargs: 'log_of_measurement_results' in kwargs or len(args) > 3, + ) @_compat.deprecated_parameter( deadline='v0.15', fix='Specify all the arguments with keywords, use initial_state instead of state.', diff --git a/cirq-core/cirq/sim/clifford/act_on_stabilizer_ch_form_args_test.py b/cirq-core/cirq/sim/clifford/act_on_stabilizer_ch_form_args_test.py index 11c93536a54..13133a0b44e 100644 --- a/cirq-core/cirq/sim/clifford/act_on_stabilizer_ch_form_args_test.py +++ b/cirq-core/cirq/sim/clifford/act_on_stabilizer_ch_form_args_test.py @@ -42,7 +42,6 @@ class NoDetails(cirq.SingleQubitGate): args = cirq.ActOnStabilizerCHFormArgs( qubits=[], prng=np.random.RandomState(), - log_of_measurement_results={}, ) with pytest.raises(TypeError, match="Failed to act"): @@ -61,7 +60,6 @@ def _act_on_(self, args, qubits): args = cirq.ActOnStabilizerCHFormArgs( qubits=cirq.LineQubit.range(3), prng=np.random.RandomState(), - log_of_measurement_results={}, initial_state=state, ) @@ -81,13 +79,11 @@ def _unitary_(self): args = cirq.ActOnStabilizerCHFormArgs( qubits=cirq.LineQubit.range(3), prng=np.random.RandomState(), - log_of_measurement_results={}, ) cirq.act_on(UnitaryYGate(), args, [cirq.LineQubit(1)]) expected_args = cirq.ActOnStabilizerCHFormArgs( qubits=cirq.LineQubit.range(3), prng=np.random.RandomState(), - log_of_measurement_results={}, ) cirq.act_on(cirq.Y, expected_args, [cirq.LineQubit(1)]) np.testing.assert_allclose(args.state.state_vector(), expected_args.state.state_vector()) @@ -104,13 +100,11 @@ def _unitary_(self): args = cirq.ActOnStabilizerCHFormArgs( qubits=cirq.LineQubit.range(3), prng=np.random.RandomState(), - log_of_measurement_results={}, ) cirq.act_on(UnitaryHGate(), args, [cirq.LineQubit(1)]) expected_args = cirq.ActOnStabilizerCHFormArgs( qubits=cirq.LineQubit.range(3), prng=np.random.RandomState(), - log_of_measurement_results={}, ) cirq.act_on(cirq.H, expected_args, [cirq.LineQubit(1)]) np.testing.assert_allclose(args.state.state_vector(), expected_args.state.state_vector()) @@ -120,7 +114,6 @@ def test_copy(): args = cirq.ActOnStabilizerCHFormArgs( qubits=cirq.LineQubit.range(3), prng=np.random.RandomState(), - log_of_measurement_results={}, ) args1 = args.copy() assert isinstance(args1, cirq.ActOnStabilizerCHFormArgs) diff --git a/cirq-core/cirq/sim/clifford/stabilizer_sampler.py b/cirq-core/cirq/sim/clifford/stabilizer_sampler.py index 42df418689b..38eb707a615 100644 --- a/cirq-core/cirq/sim/clifford/stabilizer_sampler.py +++ b/cirq-core/cirq/sim/clifford/stabilizer_sampler.py @@ -63,7 +63,6 @@ def _run(self, circuit: 'cirq.AbstractCircuit', repetitions: int) -> Dict[str, n CliffordTableau(num_qubits=len(qubits)), qubits=list(qubits), prng=self._prng, - log_of_measurement_results={}, ) for op in circuit.all_operations(): protocols.act_on(op, state) diff --git a/cirq-core/cirq/sim/density_matrix_simulator_test.py b/cirq-core/cirq/sim/density_matrix_simulator_test.py index 4ad776e0823..86aa6d1ae65 100644 --- a/cirq-core/cirq/sim/density_matrix_simulator_test.py +++ b/cirq-core/cirq/sim/density_matrix_simulator_test.py @@ -1145,7 +1145,6 @@ def test_density_matrix_trial_result_repr(): available_buffer=[], qid_shape=(2,), prng=np.random.RandomState(0), - log_of_measurement_results={}, qubits=[q0], initial_state=np.ones((2, 2), dtype=dtype) * 0.5, dtype=dtype, @@ -1170,7 +1169,7 @@ def test_density_matrix_trial_result_repr(): "dtype=np.complex64))" ) assert repr(trial_result) == expected_repr - with cirq.testing.assert_deprecated('Use initial_state instead', deadline='v0.15'): + with cirq.testing.assert_deprecated('Use initial_state instead', deadline='v0.15', count=2): assert eval(expected_repr) == trial_result @@ -1264,7 +1263,6 @@ def test_density_matrix_trial_result_str(): available_buffer=[], qid_shape=(2,), prng=np.random.RandomState(0), - log_of_measurement_results={}, qubits=[q0], initial_state=np.ones((2, 2), dtype=dtype) * 0.5, dtype=dtype, @@ -1291,7 +1289,6 @@ def test_density_matrix_trial_result_repr_pretty(): available_buffer=[], qid_shape=(2,), prng=np.random.RandomState(0), - log_of_measurement_results={}, qubits=[q0], initial_state=np.ones((2, 2), dtype=dtype) * 0.5, dtype=dtype, diff --git a/cirq-core/cirq/sim/sparse_simulator_test.py b/cirq-core/cirq/sim/sparse_simulator_test.py index 9de2b5655a6..decc516ca42 100644 --- a/cirq-core/cirq/sim/sparse_simulator_test.py +++ b/cirq-core/cirq/sim/sparse_simulator_test.py @@ -766,7 +766,6 @@ def _apply_unitary_(self, args: cirq.ApplyUnitaryArgs): def test_simulator_step_state_mixin(): qubits = cirq.LineQubit.range(2) args = cirq.ActOnStateVectorArgs( - log_of_measurement_results={'m': np.array([1, 2])}, available_buffer=np.array([0, 1, 0, 0]).reshape((2, 2)), prng=cirq.value.parse_random_state(0), qubits=qubits, diff --git a/cirq-core/cirq/sim/state_vector_simulator_test.py b/cirq-core/cirq/sim/state_vector_simulator_test.py index a378f17bed1..69911517b8c 100644 --- a/cirq-core/cirq/sim/state_vector_simulator_test.py +++ b/cirq-core/cirq/sim/state_vector_simulator_test.py @@ -25,7 +25,6 @@ def test_state_vector_trial_result_repr(): args = cirq.ActOnStateVectorArgs( available_buffer=np.array([0, 1], dtype=np.complex64), prng=np.random.RandomState(0), - log_of_measurement_results={}, qubits=[q0], initial_state=np.array([0, 1], dtype=np.complex64), dtype=np.complex64, @@ -49,7 +48,7 @@ def test_state_vector_trial_result_repr(): "dtype=np.complex64))" ) assert repr(trial_result) == expected_repr - with cirq.testing.assert_deprecated('Use initial_state instead', deadline='v0.15'): + with cirq.testing.assert_deprecated('Use initial_state instead', deadline='v0.15', count=2): assert eval(expected_repr) == trial_result @@ -176,7 +175,6 @@ def test_str_big(): qs = cirq.LineQubit.range(10) args = cirq.ActOnStateVectorArgs( prng=np.random.RandomState(0), - log_of_measurement_results={}, qubits=qs, initial_state=np.array([1] * 2 ** 10, dtype=np.complex64) * 0.03125, dtype=np.complex64, @@ -194,7 +192,6 @@ def test_pretty_print(): args = cirq.ActOnStateVectorArgs( available_buffer=np.array([1]), prng=np.random.RandomState(0), - log_of_measurement_results={}, qubits=[], initial_state=np.array([1], dtype=np.complex64), dtype=np.complex64, diff --git a/cirq-core/cirq/testing/consistent_act_on.py b/cirq-core/cirq/testing/consistent_act_on.py index 5c5146ec110..f4b617741a3 100644 --- a/cirq-core/cirq/testing/consistent_act_on.py +++ b/cirq-core/cirq/testing/consistent_act_on.py @@ -50,7 +50,6 @@ def state_vector_has_stabilizer(state_vector: np.ndarray, stabilizer: DensePauli available_buffer=np.empty_like(state_vector), qubits=qubits, prng=np.random.RandomState(), - log_of_measurement_results={}, initial_state=state_vector.copy(), dtype=state_vector.dtype, ) @@ -164,7 +163,6 @@ def _final_clifford_tableau( tableau=tableau, qubits=list(qubit_map.keys()), prng=np.random.RandomState(), - log_of_measurement_results={}, ) for op in circuit.all_operations(): try: @@ -194,7 +192,6 @@ def _final_stabilizer_state_ch_form( args = act_on_stabilizer_ch_form_args.ActOnStabilizerCHFormArgs( qubits=list(qubit_map.keys()), prng=np.random.RandomState(), - log_of_measurement_results={}, initial_state=stabilizer_ch_form, ) for op in circuit.all_operations(): diff --git a/cirq-core/cirq/transformers/analytical_decompositions/clifford_decomposition.py b/cirq-core/cirq/transformers/analytical_decompositions/clifford_decomposition.py index 63b56fbcb02..6c782d59769 100644 --- a/cirq-core/cirq/transformers/analytical_decompositions/clifford_decomposition.py +++ b/cirq-core/cirq/transformers/analytical_decompositions/clifford_decomposition.py @@ -114,9 +114,7 @@ def decompose_clifford_tableau_to_operations( t: qis.CliffordTableau = clifford_tableau.copy() operations: List[ops.Operation] = [] - args = sim.ActOnCliffordTableauArgs( - tableau=t, qubits=qubits, prng=np.random.RandomState(), log_of_measurement_results={} - ) + args = sim.ActOnCliffordTableauArgs(tableau=t, qubits=qubits, prng=np.random.RandomState()) _X_with_ops = functools.partial(_X, args=args, operations=operations, qubits=qubits) _Z_with_ops = functools.partial(_Z, args=args, operations=operations, qubits=qubits) diff --git a/cirq-core/cirq/transformers/analytical_decompositions/clifford_decomposition_test.py b/cirq-core/cirq/transformers/analytical_decompositions/clifford_decomposition_test.py index 75c016897a6..f339117eee8 100644 --- a/cirq-core/cirq/transformers/analytical_decompositions/clifford_decomposition_test.py +++ b/cirq-core/cirq/transformers/analytical_decompositions/clifford_decomposition_test.py @@ -43,7 +43,6 @@ def test_clifford_decompose_one_qubit(): tableau=cirq.CliffordTableau(num_qubits=1), qubits=qubits, prng=np.random.RandomState(), - log_of_measurement_results={}, ) cirq.act_on(cirq.X, args, qubits=[qubits[0]], allow_decompose=False) cirq.act_on(cirq.H, args, qubits=[qubits[0]], allow_decompose=False) @@ -58,7 +57,6 @@ def test_clifford_decompose_one_qubit(): tableau=cirq.CliffordTableau(num_qubits=1), qubits=qubits, prng=np.random.RandomState(), - log_of_measurement_results={}, ) cirq.act_on(cirq.Z, args, qubits=[qubits[0]], allow_decompose=False) cirq.act_on(cirq.H, args, qubits=[qubits[0]], allow_decompose=False) @@ -84,7 +82,6 @@ def test_clifford_decompose_two_qubits(): tableau=cirq.CliffordTableau(num_qubits=2), qubits=qubits, prng=np.random.RandomState(), - log_of_measurement_results={}, ) cirq.act_on(cirq.H, args, qubits=[qubits[0]], allow_decompose=False) cirq.act_on(cirq.CNOT, args, qubits=[qubits[0], qubits[1]], allow_decompose=False) @@ -98,7 +95,6 @@ def test_clifford_decompose_two_qubits(): tableau=cirq.CliffordTableau(num_qubits=2), qubits=qubits, prng=np.random.RandomState(), - log_of_measurement_results={}, ) cirq.act_on(cirq.H, args, qubits=[qubits[0]], allow_decompose=False) cirq.act_on(cirq.CNOT, args, qubits=[qubits[0], qubits[1]], allow_decompose=False) @@ -130,9 +126,7 @@ def test_clifford_decompose_by_unitary(): t = cirq.CliffordTableau(num_qubits=n) qubits = cirq.LineQubit.range(n) expect_circ = cirq.Circuit() - args = cirq.ActOnCliffordTableauArgs( - tableau=t, qubits=qubits, prng=prng, log_of_measurement_results={} - ) + args = cirq.ActOnCliffordTableauArgs(tableau=t, qubits=qubits, prng=prng) for _ in range(num_ops): g = prng.randint(len(gate_candidate)) indices = (prng.randint(n),) if g < 5 else prng.choice(n, 2, replace=False) @@ -159,9 +153,7 @@ def test_clifford_decompose_by_reconstruction(): t = cirq.CliffordTableau(num_qubits=n) qubits = cirq.LineQubit.range(n) expect_circ = cirq.Circuit() - args = cirq.ActOnCliffordTableauArgs( - tableau=t, qubits=qubits, prng=prng, log_of_measurement_results={} - ) + args = cirq.ActOnCliffordTableauArgs(tableau=t, qubits=qubits, prng=prng) for _ in range(num_ops): g = prng.randint(len(gate_candidate)) indices = (prng.randint(n),) if g < 5 else prng.choice(n, 2, replace=False) @@ -173,7 +165,7 @@ def test_clifford_decompose_by_reconstruction(): reconstruct_t = cirq.CliffordTableau(num_qubits=n) reconstruct_args = cirq.ActOnCliffordTableauArgs( - tableau=reconstruct_t, qubits=qubits, prng=prng, log_of_measurement_results={} + tableau=reconstruct_t, qubits=qubits, prng=prng ) for op in ops: cirq.act_on(op.gate, reconstruct_args, qubits=op.qubits, allow_decompose=False) diff --git a/examples/direct_fidelity_estimation.py b/examples/direct_fidelity_estimation.py index 44f2751fa18..518481e515c 100644 --- a/examples/direct_fidelity_estimation.py +++ b/examples/direct_fidelity_estimation.py @@ -372,7 +372,7 @@ def direct_fidelity_estimation( try: for gate in circuit.all_operations(): tableau_args = clifford.ActOnCliffordTableauArgs( - clifford_tableau, np.random.RandomState(), {}, qubits + tableau=clifford_tableau, qubits=qubits ) cirq.act_on(gate, tableau_args) except TypeError: