cirq-core 1.7.0.dev20250825174419__py3-none-any.whl → 1.7.0.dev20251203004401__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.
- cirq/__init__.py +1 -0
- cirq/_compat.py +3 -2
- cirq/_compat_test.py +16 -15
- cirq/_doc.py +4 -3
- cirq/_import.py +2 -1
- cirq/_version.py +1 -1
- cirq/_version_test.py +1 -1
- cirq/circuits/_bucket_priority_queue.py +2 -1
- cirq/circuits/circuit.py +19 -17
- cirq/circuits/circuit_operation.py +2 -1
- cirq/circuits/circuit_operation_test.py +19 -0
- cirq/circuits/circuit_test.py +31 -12
- cirq/circuits/frozen_circuit.py +3 -2
- cirq/circuits/moment.py +3 -15
- cirq/circuits/optimization_pass.py +2 -1
- cirq/circuits/qasm_output.py +39 -10
- cirq/circuits/qasm_output_test.py +51 -2
- cirq/circuits/text_diagram_drawer.py +2 -1
- cirq/contrib/acquaintance/bipartite.py +2 -1
- cirq/contrib/acquaintance/devices.py +1 -1
- cirq/contrib/acquaintance/executor.py +4 -5
- cirq/contrib/acquaintance/executor_test.py +2 -1
- cirq/contrib/acquaintance/gates.py +2 -1
- cirq/contrib/acquaintance/gates_test.py +1 -1
- cirq/contrib/acquaintance/inspection_utils.py +2 -1
- cirq/contrib/acquaintance/mutation_utils.py +2 -1
- cirq/contrib/acquaintance/optimizers.py +2 -1
- cirq/contrib/acquaintance/permutation.py +2 -1
- cirq/contrib/acquaintance/permutation_test.py +1 -1
- cirq/contrib/acquaintance/shift.py +2 -1
- cirq/contrib/acquaintance/shift_swap_network.py +2 -1
- cirq/contrib/acquaintance/strategies/complete.py +3 -2
- cirq/contrib/acquaintance/strategies/cubic.py +2 -1
- cirq/contrib/acquaintance/strategies/quartic_paired.py +2 -1
- cirq/contrib/acquaintance/strategies/quartic_paired_test.py +1 -1
- cirq/contrib/acquaintance/testing.py +2 -1
- cirq/contrib/acquaintance/topological_sort.py +2 -1
- cirq/contrib/bayesian_network/bayesian_network_gate.py +3 -2
- cirq/contrib/circuitdag/circuit_dag.py +4 -2
- cirq/contrib/custom_simulators/custom_state_simulator.py +2 -1
- cirq/contrib/custom_simulators/custom_state_simulator_test.py +1 -1
- cirq/contrib/graph_device/graph_device.py +2 -1
- cirq/contrib/graph_device/graph_device_test.py +2 -1
- cirq/contrib/graph_device/hypergraph.py +2 -1
- cirq/contrib/graph_device/uniform_graph_device.py +2 -1
- cirq/contrib/json.py +14 -2
- cirq/contrib/json_test_data/BayesianNetworkGate.json +10 -0
- cirq/contrib/json_test_data/BayesianNetworkGate.repr +3 -0
- cirq/contrib/json_test_data/QuantumVolumeResult.json +169 -0
- cirq/contrib/json_test_data/QuantumVolumeResult.repr +22 -0
- cirq/contrib/json_test_data/SwapPermutationGate.json +3 -0
- cirq/contrib/json_test_data/SwapPermutationGate.repr +1 -0
- cirq/contrib/json_test_data/spec.py +0 -2
- cirq/contrib/noise_models/noise_models.py +2 -1
- cirq/contrib/paulistring/clifford_optimize.py +20 -2
- cirq/contrib/paulistring/optimize.py +1 -1
- cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py +146 -35
- cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation_test.py +81 -178
- cirq/contrib/paulistring/recombine.py +5 -2
- cirq/contrib/paulistring/separate.py +1 -1
- cirq/contrib/qasm_import/_lexer.py +6 -1
- cirq/contrib/qasm_import/_lexer_test.py +1 -1
- cirq/contrib/qasm_import/_parser.py +24 -8
- cirq/contrib/qasm_import/_parser_test.py +44 -6
- cirq/contrib/qcircuit/qcircuit_pdf_test.py +6 -9
- cirq/contrib/quantikz/__init__.py +21 -0
- cirq/contrib/quantikz/circuit_to_latex_quantikz.py +680 -0
- cirq/contrib/quantikz/circuit_to_latex_quantikz_test.py +253 -0
- cirq/contrib/quantikz/circuit_to_latex_render.py +424 -0
- cirq/contrib/quantikz/circuit_to_latex_render_test.py +44 -0
- cirq/contrib/quantum_volume/quantum_volume.py +2 -1
- cirq/contrib/quimb/density_matrix.py +1 -1
- cirq/contrib/quimb/grid_circuits.py +2 -1
- cirq/contrib/quimb/grid_circuits_test.py +1 -1
- cirq/contrib/quimb/mps_simulator.py +4 -3
- cirq/contrib/quimb/state_vector.py +2 -1
- cirq/contrib/quirk/export_to_quirk.py +2 -1
- cirq/contrib/quirk/linearize_circuit.py +1 -1
- cirq/contrib/quirk/quirk_gate.py +2 -1
- cirq/contrib/routing/device.py +1 -1
- cirq/contrib/routing/greedy.py +2 -1
- cirq/contrib/routing/initialization.py +2 -1
- cirq/contrib/routing/router.py +2 -1
- cirq/contrib/routing/swap_network.py +2 -1
- cirq/contrib/routing/utils.py +2 -1
- cirq/contrib/shuffle_circuits/shuffle_circuits_with_readout_benchmarking.py +7 -5
- cirq/contrib/shuffle_circuits/shuffle_circuits_with_readout_benchmarking_test.py +6 -6
- cirq/devices/device.py +2 -1
- cirq/devices/grid_device_metadata.py +2 -1
- cirq/devices/grid_qubit.py +7 -6
- cirq/devices/insertion_noise_model.py +2 -1
- cirq/devices/line_qubit.py +2 -1
- cirq/devices/named_topologies.py +2 -1
- cirq/devices/noise_model.py +2 -1
- cirq/devices/noise_model_test.py +1 -1
- cirq/devices/noise_properties.py +2 -1
- cirq/devices/superconducting_qubits_noise_properties_test.py +2 -1
- cirq/devices/thermal_noise_model.py +2 -1
- cirq/experiments/__init__.py +2 -0
- cirq/experiments/benchmarking/parallel_xeb.py +2 -1
- cirq/experiments/benchmarking/parallel_xeb_test.py +1 -1
- cirq/experiments/fidelity_estimation.py +2 -1
- cirq/experiments/fidelity_estimation_test.py +1 -1
- cirq/experiments/ghz_2d.py +150 -0
- cirq/experiments/ghz_2d_test.py +155 -0
- cirq/experiments/n_qubit_tomography.py +2 -1
- cirq/experiments/n_qubit_tomography_test.py +1 -1
- cirq/experiments/purity_estimation.py +1 -1
- cirq/experiments/qubit_characterizations.py +33 -4
- cirq/experiments/qubit_characterizations_test.py +16 -0
- cirq/experiments/random_quantum_circuit_generation.py +2 -1
- cirq/experiments/random_quantum_circuit_generation_test.py +2 -1
- cirq/experiments/readout_confusion_matrix.py +2 -1
- cirq/experiments/readout_confusion_matrix_test.py +1 -1
- cirq/experiments/single_qubit_readout_calibration.py +2 -1
- cirq/experiments/single_qubit_readout_calibration_test.py +1 -1
- cirq/experiments/t1_decay_experiment.py +2 -1
- cirq/experiments/two_qubit_xeb.py +2 -1
- cirq/experiments/two_qubit_xeb_test.py +1 -1
- cirq/experiments/xeb_fitting.py +2 -1
- cirq/experiments/xeb_fitting_test.py +1 -1
- cirq/experiments/xeb_sampling.py +5 -3
- cirq/experiments/xeb_sampling_test.py +1 -1
- cirq/experiments/xeb_simulation.py +2 -1
- cirq/experiments/xeb_simulation_test.py +2 -1
- cirq/experiments/z_phase_calibration.py +2 -1
- cirq/experiments/z_phase_calibration_test.py +18 -3
- cirq/interop/quirk/cells/__init__.py +1 -2
- cirq/interop/quirk/cells/all_cells.py +2 -1
- cirq/interop/quirk/cells/arithmetic_cells.py +2 -1
- cirq/interop/quirk/cells/cell.py +2 -1
- cirq/interop/quirk/cells/composite_cell.py +2 -1
- cirq/interop/quirk/cells/composite_cell_test.py +1 -1
- cirq/interop/quirk/cells/control_cells.py +2 -1
- cirq/interop/quirk/cells/frequency_space_cells.py +1 -1
- cirq/interop/quirk/cells/ignored_cells.py +1 -1
- cirq/interop/quirk/cells/input_cells.py +2 -1
- cirq/interop/quirk/cells/input_rotation_cells.py +2 -1
- cirq/interop/quirk/cells/measurement_cells.py +2 -1
- cirq/interop/quirk/cells/parse.py +2 -11
- cirq/interop/quirk/cells/qubit_permutation_cells.py +2 -1
- cirq/interop/quirk/cells/scalar_cells.py +2 -1
- cirq/interop/quirk/cells/single_qubit_rotation_cells.py +2 -1
- cirq/interop/quirk/cells/swap_cell.py +2 -1
- cirq/interop/quirk/cells/unsupported_cells.py +1 -1
- cirq/interop/quirk/url_to_circuit.py +2 -1
- cirq/json_resolver_cache.py +0 -2
- cirq/linalg/decompositions.py +6 -2
- cirq/linalg/decompositions_test.py +1 -0
- cirq/linalg/diagonalize.py +1 -1
- cirq/linalg/predicates.py +2 -1
- cirq/linalg/tolerance.py +2 -1
- cirq/linalg/transformations.py +3 -2
- cirq/ops/arithmetic_operation.py +4 -3
- cirq/ops/arithmetic_operation_test.py +1 -1
- cirq/ops/boolean_hamiltonian.py +4 -3
- cirq/ops/classically_controlled_operation.py +11 -11
- cirq/ops/classically_controlled_operation_test.py +26 -2
- cirq/ops/clifford_gate.py +3 -2
- cirq/ops/clifford_gate_test.py +1 -2
- cirq/ops/common_channels.py +2 -1
- cirq/ops/common_gates.py +3 -2
- cirq/ops/control_values.py +2 -1
- cirq/ops/controlled_gate.py +3 -2
- cirq/ops/controlled_gate_test.py +2 -1
- cirq/ops/controlled_operation.py +3 -2
- cirq/ops/controlled_operation_test.py +2 -1
- cirq/ops/dense_pauli_string.py +44 -81
- cirq/ops/dense_pauli_string_test.py +21 -0
- cirq/ops/diagonal_gate.py +3 -2
- cirq/ops/eigen_gate.py +9 -7
- cirq/ops/fourier_transform.py +3 -2
- cirq/ops/fourier_transform_test.py +2 -4
- cirq/ops/fsim_gate.py +3 -2
- cirq/ops/gate_operation.py +23 -12
- cirq/ops/gateset.py +22 -2
- cirq/ops/global_phase_op.py +3 -2
- cirq/ops/greedy_qubit_manager.py +2 -1
- cirq/ops/identity.py +2 -1
- cirq/ops/kraus_channel.py +2 -1
- cirq/ops/linear_combinations.py +12 -17
- cirq/ops/linear_combinations_test.py +23 -1
- cirq/ops/matrix_gates.py +2 -1
- cirq/ops/measure_util.py +8 -6
- cirq/ops/measurement_gate.py +2 -1
- cirq/ops/mixed_unitary_channel.py +2 -1
- cirq/ops/named_qubit.py +2 -2
- cirq/ops/op_tree.py +2 -1
- cirq/ops/parallel_gate.py +3 -2
- cirq/ops/parity_gates.py +2 -1
- cirq/ops/parity_gates_test.py +35 -0
- cirq/ops/pauli_interaction_gate.py +2 -1
- cirq/ops/pauli_measurement_gate.py +2 -1
- cirq/ops/pauli_string.py +37 -57
- cirq/ops/pauli_string_phasor.py +6 -5
- cirq/ops/pauli_string_raw_types.py +2 -1
- cirq/ops/pauli_string_test.py +49 -6
- cirq/ops/pauli_sum_exponential.py +2 -1
- cirq/ops/permutation_gate.py +2 -1
- cirq/ops/phased_iswap_gate.py +3 -2
- cirq/ops/phased_x_gate.py +5 -4
- cirq/ops/phased_x_z_gate.py +12 -5
- cirq/ops/projector.py +2 -1
- cirq/ops/qubit_manager.py +2 -1
- cirq/ops/qubit_order.py +2 -1
- cirq/ops/qubit_order_or_list.py +1 -1
- cirq/ops/random_gate_channel.py +3 -2
- cirq/ops/raw_types.py +33 -16
- cirq/ops/raw_types_test.py +4 -3
- cirq/ops/state_preparation_channel.py +2 -1
- cirq/ops/three_qubit_gates.py +3 -2
- cirq/ops/two_qubit_diagonal_gate.py +3 -2
- cirq/ops/uniform_superposition_gate.py +2 -1
- cirq/ops/wait_gate.py +10 -4
- cirq/protocols/act_on_protocol.py +2 -1
- cirq/protocols/act_on_protocol_test.py +2 -1
- cirq/protocols/apply_channel_protocol.py +2 -1
- cirq/protocols/apply_mixture_protocol.py +2 -1
- cirq/protocols/apply_mixture_protocol_test.py +2 -1
- cirq/protocols/apply_unitary_protocol.py +2 -1
- cirq/protocols/apply_unitary_protocol_test.py +2 -0
- cirq/protocols/approximate_equality_protocol.py +2 -1
- cirq/protocols/circuit_diagram_info_protocol.py +2 -1
- cirq/protocols/control_key_protocol.py +7 -0
- cirq/protocols/decompose_protocol.py +2 -12
- cirq/protocols/has_stabilizer_effect_protocol.py +1 -1
- cirq/protocols/has_stabilizer_effect_protocol_test.py +11 -9
- cirq/protocols/has_unitary_protocol_test.py +3 -3
- cirq/protocols/hash_from_pickle_test.py +2 -2
- cirq/protocols/inverse_protocol.py +2 -1
- cirq/protocols/json_serialization.py +5 -4
- cirq/protocols/json_serialization_test.py +31 -31
- cirq/protocols/kraus_protocol.py +4 -3
- cirq/protocols/kraus_protocol_test.py +7 -7
- cirq/protocols/measurement_key_protocol.py +32 -8
- cirq/protocols/mixture_protocol.py +3 -2
- cirq/protocols/mixture_protocol_test.py +7 -7
- cirq/protocols/mul_protocol_test.py +4 -4
- cirq/protocols/phase_protocol.py +13 -4
- cirq/protocols/pow_protocol.py +2 -1
- cirq/protocols/pow_protocol_test.py +5 -5
- cirq/protocols/qasm.py +2 -1
- cirq/protocols/qid_shape_protocol.py +2 -1
- cirq/protocols/resolve_parameters.py +17 -15
- cirq/protocols/trace_distance_bound.py +2 -1
- cirq/protocols/unitary_protocol.py +21 -21
- cirq/protocols/unitary_protocol_test.py +31 -19
- cirq/qis/channels.py +1 -1
- cirq/qis/channels_test.py +1 -1
- cirq/qis/clifford_tableau.py +16 -15
- cirq/qis/clifford_tableau_test.py +17 -17
- cirq/qis/entropy.py +3 -3
- cirq/qis/entropy_test.py +1 -1
- cirq/qis/quantum_state_representation.py +2 -1
- cirq/qis/states.py +7 -2
- cirq/qis/states_test.py +54 -54
- cirq/sim/classical_simulator.py +25 -14
- cirq/sim/classical_simulator_test.py +85 -30
- cirq/sim/clifford/clifford_simulator.py +7 -6
- cirq/sim/clifford/clifford_simulator_test.py +51 -50
- cirq/sim/clifford/clifford_tableau_simulation_state.py +2 -1
- cirq/sim/clifford/stabilizer_ch_form_simulation_state.py +2 -1
- cirq/sim/clifford/stabilizer_sampler.py +1 -1
- cirq/sim/clifford/stabilizer_simulation_state.py +2 -1
- cirq/sim/clifford/stabilizer_state_ch_form.py +16 -15
- cirq/sim/clifford/stabilizer_state_ch_form_test.py +0 -1
- cirq/sim/density_matrix_simulation_state.py +7 -6
- cirq/sim/density_matrix_simulator.py +3 -2
- cirq/sim/density_matrix_simulator_test.py +94 -84
- cirq/sim/density_matrix_utils.py +2 -1
- cirq/sim/density_matrix_utils_test.py +1 -1
- cirq/sim/mux.py +35 -8
- cirq/sim/mux_test.py +39 -26
- cirq/sim/simulation_product_state.py +2 -1
- cirq/sim/simulation_product_state_test.py +8 -7
- cirq/sim/simulation_state.py +6 -5
- cirq/sim/simulation_state_base.py +3 -2
- cirq/sim/simulation_state_test.py +7 -6
- cirq/sim/simulation_utils.py +2 -1
- cirq/sim/simulator.py +4 -3
- cirq/sim/simulator_base.py +2 -1
- cirq/sim/simulator_base_test.py +51 -36
- cirq/sim/simulator_test.py +41 -36
- cirq/sim/sparse_simulator.py +3 -2
- cirq/sim/sparse_simulator_test.py +92 -82
- cirq/sim/state_vector.py +5 -6
- cirq/sim/state_vector_simulation_state.py +10 -9
- cirq/sim/state_vector_simulator.py +2 -1
- cirq/sim/state_vector_simulator_test.py +9 -9
- cirq/sim/state_vector_test.py +40 -39
- cirq/study/__init__.py +1 -0
- cirq/study/flatten_expressions.py +2 -1
- cirq/study/resolver.py +31 -18
- cirq/study/resolver_test.py +1 -1
- cirq/study/result.py +2 -1
- cirq/study/result_test.py +20 -20
- cirq/study/sweepable.py +2 -1
- cirq/study/sweepable_test.py +20 -20
- cirq/study/sweeps.py +26 -1
- cirq/study/sweeps_test.py +67 -43
- cirq/testing/_compat_test_data/__init__.py +3 -3
- cirq/testing/circuit_compare.py +2 -1
- cirq/testing/circuit_compare_test.py +16 -14
- cirq/testing/consistent_act_on_test.py +1 -1
- cirq/testing/consistent_channels.py +2 -2
- cirq/testing/consistent_controlled_gate_op.py +2 -2
- cirq/testing/consistent_controlled_gate_op_test.py +2 -1
- cirq/testing/consistent_decomposition.py +4 -2
- cirq/testing/consistent_phase_by.py +1 -1
- cirq/testing/consistent_protocols.py +2 -1
- cirq/testing/consistent_protocols_test.py +3 -3
- cirq/testing/consistent_qasm.py +4 -3
- cirq/testing/consistent_qasm_test.py +3 -3
- cirq/testing/consistent_resolve_parameters.py +1 -1
- cirq/testing/consistent_unitary.py +1 -1
- cirq/testing/consistent_unitary_test.py +1 -1
- cirq/testing/deprecation.py +1 -1
- cirq/testing/devices.py +3 -2
- cirq/testing/equals_tester.py +4 -3
- cirq/testing/equivalent_basis_map.py +4 -2
- cirq/testing/json.py +3 -2
- cirq/testing/lin_alg_utils.py +1 -1
- cirq/testing/logs.py +1 -1
- cirq/testing/op_tree.py +1 -1
- cirq/testing/order_tester.py +2 -2
- cirq/testing/pytest_utils.py +2 -1
- cirq/testing/random_circuit.py +2 -1
- cirq/testing/random_circuit_test.py +2 -1
- cirq/testing/repr_pretty_tester.py +3 -3
- cirq/transformers/__init__.py +1 -0
- cirq/transformers/_connected_component.py +231 -0
- cirq/transformers/_connected_component_test.py +200 -0
- cirq/transformers/align_test.py +13 -13
- cirq/transformers/analytical_decompositions/clifford_decomposition.py +8 -7
- cirq/transformers/analytical_decompositions/clifford_decomposition_test.py +5 -5
- cirq/transformers/analytical_decompositions/controlled_gate_decomposition.py +11 -10
- cirq/transformers/analytical_decompositions/controlled_gate_decomposition_test.py +6 -6
- cirq/transformers/analytical_decompositions/cphase_to_fsim.py +3 -2
- cirq/transformers/analytical_decompositions/cphase_to_fsim_test.py +11 -10
- cirq/transformers/analytical_decompositions/quantum_shannon_decomposition.py +8 -7
- cirq/transformers/analytical_decompositions/quantum_shannon_decomposition_test.py +17 -20
- cirq/transformers/analytical_decompositions/single_qubit_decompositions_test.py +33 -27
- cirq/transformers/analytical_decompositions/single_to_two_qubit_isometry_test.py +1 -1
- cirq/transformers/analytical_decompositions/three_qubit_decomposition.py +1 -1
- cirq/transformers/analytical_decompositions/two_qubit_state_preparation_test.py +12 -11
- cirq/transformers/analytical_decompositions/two_qubit_to_cz.py +5 -2
- cirq/transformers/analytical_decompositions/two_qubit_to_cz_test.py +3 -3
- cirq/transformers/analytical_decompositions/two_qubit_to_fsim.py +2 -1
- cirq/transformers/analytical_decompositions/two_qubit_to_ms.py +2 -1
- cirq/transformers/analytical_decompositions/two_qubit_to_ms_test.py +2 -2
- cirq/transformers/analytical_decompositions/two_qubit_to_sqrt_iswap.py +2 -1
- cirq/transformers/analytical_decompositions/two_qubit_to_sqrt_iswap_test.py +32 -30
- cirq/transformers/drop_negligible_operations_test.py +7 -7
- cirq/transformers/dynamical_decoupling.py +185 -112
- cirq/transformers/dynamical_decoupling_test.py +195 -201
- cirq/transformers/eject_phased_paulis.py +2 -1
- cirq/transformers/eject_phased_paulis_test.py +3 -2
- cirq/transformers/eject_z.py +5 -3
- cirq/transformers/eject_z_test.py +23 -25
- cirq/transformers/expand_composite.py +3 -2
- cirq/transformers/expand_composite_test.py +14 -14
- cirq/transformers/gauge_compiling/__init__.py +13 -0
- cirq/transformers/gauge_compiling/gauge_compiling.py +3 -2
- cirq/transformers/gauge_compiling/gauge_compiling_test.py +14 -12
- cirq/transformers/gauge_compiling/gauge_compiling_test_utils.py +3 -3
- cirq/transformers/gauge_compiling/idle_moments_gauge.py +225 -0
- cirq/transformers/gauge_compiling/idle_moments_gauge_test.py +193 -0
- cirq/transformers/gauge_compiling/multi_moment_cphase_gauge.py +242 -0
- cirq/transformers/gauge_compiling/multi_moment_cphase_gauge_test.py +243 -0
- cirq/transformers/gauge_compiling/multi_moment_gauge_compiling.py +151 -0
- cirq/transformers/gauge_compiling/sqrt_cz_gauge.py +2 -1
- cirq/transformers/heuristic_decompositions/gate_tabulation_math_utils.py +1 -1
- cirq/transformers/heuristic_decompositions/gate_tabulation_math_utils_test.py +6 -6
- cirq/transformers/heuristic_decompositions/two_qubit_gate_tabulation.py +3 -2
- cirq/transformers/measurement_transformers.py +2 -1
- cirq/transformers/measurement_transformers_test.py +45 -39
- cirq/transformers/merge_k_qubit_gates.py +2 -1
- cirq/transformers/merge_k_qubit_gates_test.py +1 -1
- cirq/transformers/merge_single_qubit_gates.py +9 -5
- cirq/transformers/merge_single_qubit_gates_test.py +22 -22
- cirq/transformers/noise_adding_test.py +2 -2
- cirq/transformers/optimize_for_target_gateset.py +2 -1
- cirq/transformers/optimize_for_target_gateset_test.py +11 -9
- cirq/transformers/qubit_management_transformers_test.py +6 -2
- cirq/transformers/routing/mapping_manager.py +2 -1
- cirq/transformers/routing/route_circuit_cqc.py +2 -1
- cirq/transformers/stratify.py +2 -1
- cirq/transformers/symbolize.py +2 -1
- cirq/transformers/tag_transformers.py +2 -1
- cirq/transformers/target_gatesets/compilation_target_gateset.py +2 -1
- cirq/transformers/target_gatesets/cz_gateset.py +2 -1
- cirq/transformers/target_gatesets/cz_gateset_test.py +1 -1
- cirq/transformers/target_gatesets/sqrt_iswap_gateset.py +2 -1
- cirq/transformers/transformer_api.py +2 -1
- cirq/transformers/transformer_primitives.py +271 -145
- cirq/transformers/transformer_primitives_test.py +185 -1
- cirq/value/abc_alt.py +2 -1
- cirq/value/classical_data.py +2 -1
- cirq/value/condition.py +2 -1
- cirq/value/digits.py +9 -2
- cirq/value/duration.py +6 -5
- cirq/value/linear_dict.py +4 -9
- cirq/value/measurement_key.py +2 -1
- cirq/value/periodic_value.py +3 -2
- cirq/value/product_state.py +2 -1
- cirq/value/value_equality_attr.py +2 -1
- cirq/vis/density_matrix.py +1 -1
- cirq/vis/heatmap.py +2 -1
- cirq/vis/histogram.py +2 -1
- cirq/vis/state_histogram.py +2 -1
- cirq/work/collector.py +2 -1
- cirq/work/observable_grouping.py +2 -1
- cirq/work/observable_measurement.py +2 -1
- cirq/work/observable_measurement_data.py +2 -1
- cirq/work/observable_measurement_test.py +1 -1
- cirq/work/observable_readout_calibration.py +2 -1
- cirq/work/observable_readout_calibration_test.py +1 -1
- cirq/work/observable_settings.py +2 -1
- cirq/work/sampler.py +2 -1
- cirq/work/sampler_test.py +1 -1
- {cirq_core-1.7.0.dev20250825174419.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/METADATA +5 -6
- {cirq_core-1.7.0.dev20250825174419.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/RECORD +425 -406
- cirq/contrib/json_test.py +0 -33
- {cirq_core-1.7.0.dev20250825174419.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/WHEEL +0 -0
- {cirq_core-1.7.0.dev20250825174419.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/licenses/LICENSE +0 -0
- {cirq_core-1.7.0.dev20250825174419.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/top_level.txt +0 -0
|
@@ -23,7 +23,7 @@ import sympy
|
|
|
23
23
|
import cirq
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
def test_x_gate():
|
|
26
|
+
def test_x_gate() -> None:
|
|
27
27
|
q0, q1 = cirq.LineQubit.range(2)
|
|
28
28
|
circuit = cirq.Circuit()
|
|
29
29
|
circuit.append(cirq.X(q0))
|
|
@@ -31,36 +31,59 @@ def test_x_gate():
|
|
|
31
31
|
circuit.append(cirq.X(q1))
|
|
32
32
|
circuit.append(cirq.measure((q0, q1), key='key'))
|
|
33
33
|
expected_results = {'key': np.array([[[1, 0]]], dtype=np.uint8)}
|
|
34
|
+
sim: cirq.ClassicalStateSimulator
|
|
34
35
|
sim = cirq.ClassicalStateSimulator()
|
|
35
36
|
results = sim.run(circuit, param_resolver=None, repetitions=1).records
|
|
36
37
|
np.testing.assert_equal(results, expected_results)
|
|
37
38
|
|
|
38
39
|
|
|
39
|
-
def test_CNOT():
|
|
40
|
+
def test_CNOT() -> None:
|
|
40
41
|
q0, q1 = cirq.LineQubit.range(2)
|
|
41
42
|
circuit = cirq.Circuit()
|
|
42
43
|
circuit.append(cirq.X(q0))
|
|
43
44
|
circuit.append(cirq.CNOT(q0, q1))
|
|
44
45
|
circuit.append(cirq.measure(q1, key='key'))
|
|
45
46
|
expected_results = {'key': np.array([[[1]]], dtype=np.uint8)}
|
|
47
|
+
sim: cirq.ClassicalStateSimulator
|
|
46
48
|
sim = cirq.ClassicalStateSimulator()
|
|
47
49
|
results = sim.run(circuit, param_resolver=None, repetitions=1).records
|
|
48
50
|
np.testing.assert_equal(results, expected_results)
|
|
49
51
|
|
|
50
52
|
|
|
51
|
-
def test_Swap():
|
|
53
|
+
def test_Swap() -> None:
|
|
52
54
|
q0, q1 = cirq.LineQubit.range(2)
|
|
53
55
|
circuit = cirq.Circuit()
|
|
54
56
|
circuit.append(cirq.X(q0))
|
|
55
57
|
circuit.append(cirq.SWAP(q0, q1))
|
|
56
58
|
circuit.append(cirq.measure((q0, q1), key='key'))
|
|
57
59
|
expected_results = {'key': np.array([[[0, 1]]], dtype=np.uint8)}
|
|
60
|
+
sim: cirq.ClassicalStateSimulator
|
|
58
61
|
sim = cirq.ClassicalStateSimulator()
|
|
59
62
|
results = sim.run(circuit, param_resolver=None, repetitions=1).records
|
|
60
63
|
np.testing.assert_equal(results, expected_results)
|
|
61
64
|
|
|
62
65
|
|
|
63
|
-
|
|
66
|
+
@pytest.mark.parametrize(
|
|
67
|
+
"n,perm,state",
|
|
68
|
+
[
|
|
69
|
+
(n, np.random.permutation(n).tolist(), np.random.choice(2, size=n))
|
|
70
|
+
for n in np.random.randint(3, 8, size=10)
|
|
71
|
+
],
|
|
72
|
+
)
|
|
73
|
+
def test_qubit_permutation_gate(n, perm, state) -> None:
|
|
74
|
+
qubits = cirq.LineQubit.range(n)
|
|
75
|
+
perm_gate = cirq.QubitPermutationGate(perm)
|
|
76
|
+
circuit = cirq.Circuit(perm_gate(*qubits), cirq.measure(*qubits, key='key'))
|
|
77
|
+
sim: cirq.ClassicalStateSimulator
|
|
78
|
+
sim = cirq.ClassicalStateSimulator()
|
|
79
|
+
result = sim.simulate(circuit, initial_state=state)
|
|
80
|
+
expected = [0] * n
|
|
81
|
+
for i in range(n):
|
|
82
|
+
expected[perm[i]] = state[i]
|
|
83
|
+
np.testing.assert_equal(result.measurements['key'], expected)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def test_CCNOT() -> None:
|
|
64
87
|
q0, q1, q2 = cirq.LineQubit.range(3)
|
|
65
88
|
circuit = cirq.Circuit()
|
|
66
89
|
circuit.append(cirq.CCNOT(q0, q1, q2))
|
|
@@ -78,13 +101,14 @@ def test_CCNOT():
|
|
|
78
101
|
expected_results = {
|
|
79
102
|
'key': np.array([[[0, 0, 0], [1, 0, 0], [0, 1, 0], [1, 1, 1]]], dtype=np.uint8)
|
|
80
103
|
}
|
|
104
|
+
sim: cirq.ClassicalStateSimulator
|
|
81
105
|
sim = cirq.ClassicalStateSimulator()
|
|
82
106
|
results = sim.run(circuit, param_resolver=None, repetitions=1).records
|
|
83
107
|
np.testing.assert_equal(results, expected_results)
|
|
84
108
|
|
|
85
109
|
|
|
86
110
|
@pytest.mark.parametrize(['initial_state'], [(list(x),) for x in product([0, 1], repeat=4)])
|
|
87
|
-
def test_CCCX(initial_state):
|
|
111
|
+
def test_CCCX(initial_state) -> None:
|
|
88
112
|
CCCX = cirq.CCNOT.controlled()
|
|
89
113
|
qubits = cirq.LineQubit.range(4)
|
|
90
114
|
|
|
@@ -95,13 +119,14 @@ def test_CCCX(initial_state):
|
|
|
95
119
|
final_state = initial_state.copy()
|
|
96
120
|
final_state[-1] ^= all(final_state[:-1])
|
|
97
121
|
|
|
122
|
+
sim: cirq.ClassicalStateSimulator
|
|
98
123
|
sim = cirq.ClassicalStateSimulator()
|
|
99
124
|
results = sim.simulate(circuit, initial_state=initial_state).measurements['key']
|
|
100
125
|
np.testing.assert_equal(results, final_state)
|
|
101
126
|
|
|
102
127
|
|
|
103
128
|
@pytest.mark.parametrize(['initial_state'], [(list(x),) for x in product([0, 1], repeat=3)])
|
|
104
|
-
def test_CSWAP(initial_state):
|
|
129
|
+
def test_CSWAP(initial_state) -> None:
|
|
105
130
|
CSWAP = cirq.SWAP.controlled()
|
|
106
131
|
qubits = cirq.LineQubit.range(3)
|
|
107
132
|
circuit = cirq.Circuit()
|
|
@@ -115,46 +140,50 @@ def test_CSWAP(initial_state):
|
|
|
115
140
|
b, c = c, b
|
|
116
141
|
final_state = [a, b, c]
|
|
117
142
|
|
|
143
|
+
sim: cirq.ClassicalStateSimulator
|
|
118
144
|
sim = cirq.ClassicalStateSimulator()
|
|
119
145
|
results = sim.simulate(circuit, initial_state=initial_state).measurements['key']
|
|
120
146
|
np.testing.assert_equal(results, final_state)
|
|
121
147
|
|
|
122
148
|
|
|
123
|
-
def test_measurement_gate():
|
|
149
|
+
def test_measurement_gate() -> None:
|
|
124
150
|
q0, q1 = cirq.LineQubit.range(2)
|
|
125
151
|
circuit = cirq.Circuit()
|
|
126
152
|
circuit.append(cirq.measure((q0, q1), key='key'))
|
|
127
153
|
expected_results = {'key': np.array([[[0, 0]]], dtype=np.uint8)}
|
|
154
|
+
sim: cirq.ClassicalStateSimulator
|
|
128
155
|
sim = cirq.ClassicalStateSimulator()
|
|
129
156
|
results = sim.run(circuit, param_resolver=None, repetitions=1).records
|
|
130
157
|
np.testing.assert_equal(results, expected_results)
|
|
131
158
|
|
|
132
159
|
|
|
133
|
-
def test_qubit_order():
|
|
160
|
+
def test_qubit_order() -> None:
|
|
134
161
|
q0, q1 = cirq.LineQubit.range(2)
|
|
135
162
|
circuit = cirq.Circuit()
|
|
136
163
|
circuit.append(cirq.CNOT(q0, q1))
|
|
137
164
|
circuit.append(cirq.X(q0))
|
|
138
165
|
circuit.append(cirq.measure((q0, q1), key='key'))
|
|
139
166
|
expected_results = {'key': np.array([[[1, 0]]], dtype=np.uint8)}
|
|
167
|
+
sim: cirq.ClassicalStateSimulator
|
|
140
168
|
sim = cirq.ClassicalStateSimulator()
|
|
141
169
|
results = sim.run(circuit, param_resolver=None, repetitions=1).records
|
|
142
170
|
np.testing.assert_equal(results, expected_results)
|
|
143
171
|
|
|
144
172
|
|
|
145
|
-
def test_same_key_instances():
|
|
173
|
+
def test_same_key_instances() -> None:
|
|
146
174
|
q0, q1 = cirq.LineQubit.range(2)
|
|
147
175
|
circuit = cirq.Circuit()
|
|
148
176
|
circuit.append(cirq.measure((q0, q1), key='key'))
|
|
149
177
|
circuit.append(cirq.X(q0))
|
|
150
178
|
circuit.append(cirq.measure((q0, q1), key='key'))
|
|
151
179
|
expected_results = {'key': np.array([[[0, 0], [1, 0]]], dtype=np.uint8)}
|
|
180
|
+
sim: cirq.ClassicalStateSimulator
|
|
152
181
|
sim = cirq.ClassicalStateSimulator()
|
|
153
182
|
results = sim.run(circuit, param_resolver=None, repetitions=1).records
|
|
154
183
|
np.testing.assert_equal(results, expected_results)
|
|
155
184
|
|
|
156
185
|
|
|
157
|
-
def test_same_key_instances_order():
|
|
186
|
+
def test_same_key_instances_order() -> None:
|
|
158
187
|
q0, q1 = cirq.LineQubit.range(2)
|
|
159
188
|
circuit = cirq.Circuit()
|
|
160
189
|
circuit.append(cirq.X(q0))
|
|
@@ -162,12 +191,13 @@ def test_same_key_instances_order():
|
|
|
162
191
|
circuit.append(cirq.X(q0))
|
|
163
192
|
circuit.append(cirq.measure((q1, q0), key='key'))
|
|
164
193
|
expected_results = {'key': np.array([[[1, 0], [0, 0]]], dtype=np.uint8)}
|
|
194
|
+
sim: cirq.ClassicalStateSimulator
|
|
165
195
|
sim = cirq.ClassicalStateSimulator()
|
|
166
196
|
results = sim.run(circuit, param_resolver=None, repetitions=1).records
|
|
167
197
|
np.testing.assert_equal(results, expected_results)
|
|
168
198
|
|
|
169
199
|
|
|
170
|
-
def test_repetitions():
|
|
200
|
+
def test_repetitions() -> None:
|
|
171
201
|
q0 = cirq.LineQubit.range(1)
|
|
172
202
|
circuit = cirq.Circuit()
|
|
173
203
|
circuit.append(cirq.measure(q0, key='key'))
|
|
@@ -176,12 +206,13 @@ def test_repetitions():
|
|
|
176
206
|
[[[0]], [[0]], [[0]], [[0]], [[0]], [[0]], [[0]], [[0]], [[0]], [[0]]], dtype=np.uint8
|
|
177
207
|
)
|
|
178
208
|
}
|
|
209
|
+
sim: cirq.ClassicalStateSimulator
|
|
179
210
|
sim = cirq.ClassicalStateSimulator()
|
|
180
211
|
results = sim.run(circuit, param_resolver=None, repetitions=10).records
|
|
181
212
|
np.testing.assert_equal(results, expected_results)
|
|
182
213
|
|
|
183
214
|
|
|
184
|
-
def test_multiple_gates():
|
|
215
|
+
def test_multiple_gates() -> None:
|
|
185
216
|
q0, q1 = cirq.LineQubit.range(2)
|
|
186
217
|
circuit = cirq.Circuit()
|
|
187
218
|
circuit.append(cirq.X(q0))
|
|
@@ -191,12 +222,13 @@ def test_multiple_gates():
|
|
|
191
222
|
circuit.append(cirq.X(q1))
|
|
192
223
|
circuit.append(cirq.measure((q0, q1), key='key'))
|
|
193
224
|
expected_results = {'key': np.array([[[1, 0]]], dtype=np.uint8)}
|
|
225
|
+
sim: cirq.ClassicalStateSimulator
|
|
194
226
|
sim = cirq.ClassicalStateSimulator()
|
|
195
227
|
results = sim.run(circuit, param_resolver=None, repetitions=1).records
|
|
196
228
|
np.testing.assert_equal(results, expected_results)
|
|
197
229
|
|
|
198
230
|
|
|
199
|
-
def test_multiple_gates_order():
|
|
231
|
+
def test_multiple_gates_order() -> None:
|
|
200
232
|
q0, q1 = cirq.LineQubit.range(2)
|
|
201
233
|
circuit = cirq.Circuit()
|
|
202
234
|
circuit.append(cirq.X(q0))
|
|
@@ -204,12 +236,22 @@ def test_multiple_gates_order():
|
|
|
204
236
|
circuit.append(cirq.CNOT(q1, q0))
|
|
205
237
|
circuit.append(cirq.measure((q0, q1), key='key'))
|
|
206
238
|
expected_results = {'key': np.array([[[0, 1]]], dtype=np.uint8)}
|
|
239
|
+
sim: cirq.ClassicalStateSimulator
|
|
207
240
|
sim = cirq.ClassicalStateSimulator()
|
|
208
241
|
results = sim.run(circuit, param_resolver=None, repetitions=1).records
|
|
209
242
|
np.testing.assert_equal(results, expected_results)
|
|
210
243
|
|
|
211
244
|
|
|
212
|
-
def
|
|
245
|
+
def test_tuple_initial_state() -> None:
|
|
246
|
+
q0, q1, q2 = cirq.LineQubit.range(3)
|
|
247
|
+
circuit = cirq.Circuit(cirq.X(q0), cirq.measure(q0, q1, q2, key='key'))
|
|
248
|
+
sim: cirq.ClassicalStateSimulator
|
|
249
|
+
sim = cirq.ClassicalStateSimulator()
|
|
250
|
+
result = sim.simulate(circuit, initial_state=(0, 1, 0))
|
|
251
|
+
np.testing.assert_equal(result.measurements['key'], [1, 1, 0])
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
def test_param_resolver() -> None:
|
|
213
255
|
gate = cirq.CNOT ** sympy.Symbol('t')
|
|
214
256
|
q0, q1 = cirq.LineQubit.range(2)
|
|
215
257
|
circuit = cirq.Circuit()
|
|
@@ -217,6 +259,7 @@ def test_param_resolver():
|
|
|
217
259
|
circuit.append(gate(q0, q1))
|
|
218
260
|
circuit.append(cirq.measure((q1), key='key'))
|
|
219
261
|
resolver = cirq.ParamResolver({'t': 0})
|
|
262
|
+
sim: cirq.ClassicalStateSimulator
|
|
220
263
|
sim = cirq.ClassicalStateSimulator()
|
|
221
264
|
results_with_parameter_zero = sim.run(circuit, param_resolver=resolver, repetitions=1).records
|
|
222
265
|
resolver = cirq.ParamResolver({'t': 1})
|
|
@@ -225,33 +268,37 @@ def test_param_resolver():
|
|
|
225
268
|
np.testing.assert_equal(results_with_parameter_one, {'key': np.array([[[1]]], dtype=np.uint8)})
|
|
226
269
|
|
|
227
270
|
|
|
228
|
-
def test_unknown_gates():
|
|
271
|
+
def test_unknown_gates() -> None:
|
|
229
272
|
gate = cirq.Y
|
|
230
273
|
q = cirq.LineQubit(0)
|
|
231
274
|
circuit = cirq.Circuit(gate(q), cirq.measure((q), key='key'))
|
|
275
|
+
sim: cirq.ClassicalStateSimulator
|
|
232
276
|
sim = cirq.ClassicalStateSimulator()
|
|
233
277
|
with pytest.raises(ValueError):
|
|
234
278
|
_ = sim.run(circuit).records
|
|
235
279
|
|
|
236
280
|
|
|
237
|
-
def test_incompatible_measurements():
|
|
281
|
+
def test_incompatible_measurements() -> None:
|
|
238
282
|
qs = cirq.LineQubit.range(2)
|
|
239
283
|
c = cirq.Circuit(cirq.measure(qs, key='key'), cirq.measure(qs[0], key='key'))
|
|
284
|
+
sim: cirq.ClassicalStateSimulator
|
|
240
285
|
sim = cirq.ClassicalStateSimulator()
|
|
241
286
|
with pytest.raises(ValueError):
|
|
242
287
|
_ = sim.run(c)
|
|
243
288
|
|
|
244
289
|
|
|
245
|
-
def test_compatible_measurement():
|
|
290
|
+
def test_compatible_measurement() -> None:
|
|
246
291
|
qs = cirq.LineQubit.range(2)
|
|
247
292
|
c = cirq.Circuit(cirq.measure(qs, key='key'), cirq.X.on_each(qs), cirq.measure(qs, key='key'))
|
|
293
|
+
sim: cirq.ClassicalStateSimulator
|
|
248
294
|
sim = cirq.ClassicalStateSimulator()
|
|
249
295
|
res = sim.run(c, repetitions=3).records
|
|
250
296
|
np.testing.assert_equal(res['key'], np.array([[[0, 0], [1, 1]]] * 3, dtype=np.uint8))
|
|
251
297
|
|
|
252
298
|
|
|
253
|
-
def test_simulate_sweeps_param_resolver():
|
|
299
|
+
def test_simulate_sweeps_param_resolver() -> None:
|
|
254
300
|
q0, q1 = cirq.LineQubit.range(2)
|
|
301
|
+
simulator: cirq.ClassicalStateSimulator
|
|
255
302
|
simulator = cirq.ClassicalStateSimulator()
|
|
256
303
|
for b0 in [0, 1]:
|
|
257
304
|
for b1 in [0, 1]:
|
|
@@ -268,18 +315,22 @@ def test_simulate_sweeps_param_resolver():
|
|
|
268
315
|
assert results[1].params == params[1]
|
|
269
316
|
|
|
270
317
|
|
|
271
|
-
def test_create_partial_simulation_state_from_int_with_no_qubits():
|
|
318
|
+
def test_create_partial_simulation_state_from_int_with_no_qubits() -> None:
|
|
319
|
+
sim: cirq.ClassicalStateSimulator
|
|
272
320
|
sim = cirq.ClassicalStateSimulator()
|
|
273
321
|
initial_state = 5
|
|
274
322
|
qs = None
|
|
275
323
|
classical_data = cirq.value.ClassicalDataDictionaryStore()
|
|
276
324
|
with pytest.raises(ValueError):
|
|
277
325
|
sim._create_partial_simulation_state(
|
|
278
|
-
initial_state=initial_state,
|
|
326
|
+
initial_state=initial_state,
|
|
327
|
+
qubits=qs, # type: ignore[arg-type]
|
|
328
|
+
classical_data=classical_data,
|
|
279
329
|
)
|
|
280
330
|
|
|
281
331
|
|
|
282
|
-
def test_create_partial_simulation_state_from_invalid_state():
|
|
332
|
+
def test_create_partial_simulation_state_from_invalid_state() -> None:
|
|
333
|
+
sim: cirq.ClassicalStateSimulator
|
|
283
334
|
sim = cirq.ClassicalStateSimulator()
|
|
284
335
|
initial_state = None
|
|
285
336
|
qs = cirq.LineQubit.range(2)
|
|
@@ -290,7 +341,8 @@ def test_create_partial_simulation_state_from_invalid_state():
|
|
|
290
341
|
)
|
|
291
342
|
|
|
292
343
|
|
|
293
|
-
def test_create_partial_simulation_state_from_int():
|
|
344
|
+
def test_create_partial_simulation_state_from_int() -> None:
|
|
345
|
+
sim: cirq.ClassicalStateSimulator
|
|
294
346
|
sim = cirq.ClassicalStateSimulator()
|
|
295
347
|
initial_state = 15
|
|
296
348
|
qs = cirq.LineQubit.range(4)
|
|
@@ -302,7 +354,8 @@ def test_create_partial_simulation_state_from_int():
|
|
|
302
354
|
assert result == expected_result
|
|
303
355
|
|
|
304
356
|
|
|
305
|
-
def test_create_valid_partial_simulation_state_from_list():
|
|
357
|
+
def test_create_valid_partial_simulation_state_from_list() -> None:
|
|
358
|
+
sim: cirq.ClassicalStateSimulator
|
|
306
359
|
sim = cirq.ClassicalStateSimulator()
|
|
307
360
|
initial_state = [1, 1, 1, 1]
|
|
308
361
|
qs = cirq.LineQubit.range(4)
|
|
@@ -314,7 +367,8 @@ def test_create_valid_partial_simulation_state_from_list():
|
|
|
314
367
|
assert result == expected_result
|
|
315
368
|
|
|
316
369
|
|
|
317
|
-
def test_create_valid_partial_simulation_state_from_np():
|
|
370
|
+
def test_create_valid_partial_simulation_state_from_np() -> None:
|
|
371
|
+
sim: cirq.ClassicalStateSimulator
|
|
318
372
|
sim = cirq.ClassicalStateSimulator()
|
|
319
373
|
initial_state = np.array([1, 1])
|
|
320
374
|
qs = cirq.LineQubit.range(2)
|
|
@@ -328,19 +382,20 @@ def test_create_valid_partial_simulation_state_from_np():
|
|
|
328
382
|
np.testing.assert_equal(result, expected_result)
|
|
329
383
|
|
|
330
384
|
|
|
331
|
-
def test_create_invalid_partial_simulation_state_from_np():
|
|
385
|
+
def test_create_invalid_partial_simulation_state_from_np() -> None:
|
|
332
386
|
initial_state = np.array([[1, 1], [1, 1]])
|
|
333
387
|
qs = cirq.LineQubit.range(2)
|
|
334
388
|
classical_data = cirq.value.ClassicalDataDictionaryStore()
|
|
389
|
+
sim: cirq.ClassicalStateSimulator
|
|
335
390
|
sim = cirq.ClassicalStateSimulator()
|
|
336
|
-
|
|
337
|
-
initial_state=initial_state, qubits=qs, classical_data=classical_data
|
|
338
|
-
)
|
|
391
|
+
|
|
339
392
|
with pytest.raises(ValueError):
|
|
340
|
-
|
|
393
|
+
sim._create_partial_simulation_state(
|
|
394
|
+
initial_state=initial_state, qubits=qs, classical_data=classical_data
|
|
395
|
+
)
|
|
341
396
|
|
|
342
397
|
|
|
343
|
-
def test_noise_model():
|
|
398
|
+
def test_noise_model() -> None:
|
|
344
399
|
noise_model = cirq.NoiseModel.from_noise_model_like(cirq.depolarize(p=0.01))
|
|
345
400
|
with pytest.raises(ValueError):
|
|
346
401
|
cirq.ClassicalStateSimulator(noise=noise_model)
|
|
@@ -32,7 +32,8 @@ The quantum state is specified in two forms:
|
|
|
32
32
|
|
|
33
33
|
from __future__ import annotations
|
|
34
34
|
|
|
35
|
-
from
|
|
35
|
+
from collections.abc import Sequence
|
|
36
|
+
from typing import Any
|
|
36
37
|
|
|
37
38
|
import numpy as np
|
|
38
39
|
|
|
@@ -161,7 +162,7 @@ class CliffordSimulatorStepResult(
|
|
|
161
162
|
sim_state: The qubit:SimulationState lookup for this step.
|
|
162
163
|
"""
|
|
163
164
|
super().__init__(sim_state)
|
|
164
|
-
self._clifford_state = None
|
|
165
|
+
self._clifford_state: CliffordState | None = None
|
|
165
166
|
|
|
166
167
|
def __str__(self) -> str:
|
|
167
168
|
def bitstring(vals):
|
|
@@ -183,7 +184,7 @@ class CliffordSimulatorStepResult(
|
|
|
183
184
|
p.text("cirq.CliffordSimulatorStateResult(...)" if cycle else self.__str__())
|
|
184
185
|
|
|
185
186
|
@property
|
|
186
|
-
def state(self):
|
|
187
|
+
def state(self) -> CliffordState:
|
|
187
188
|
if self._clifford_state is None:
|
|
188
189
|
clifford_state = CliffordState(self._qubit_mapping)
|
|
189
190
|
clifford_state.ch_form = self._merged_sim_state.state.copy()
|
|
@@ -240,10 +241,10 @@ class CliffordState:
|
|
|
240
241
|
def to_numpy(self) -> np.ndarray:
|
|
241
242
|
return self.ch_form.to_state_vector()
|
|
242
243
|
|
|
243
|
-
def state_vector(self):
|
|
244
|
+
def state_vector(self) -> np.ndarray:
|
|
244
245
|
return self.ch_form.state_vector()
|
|
245
246
|
|
|
246
|
-
def apply_unitary(self, op: cirq.Operation):
|
|
247
|
+
def apply_unitary(self, op: cirq.Operation) -> None:
|
|
247
248
|
ch_form_args = clifford.StabilizerChFormSimulationState(
|
|
248
249
|
prng=np.random.RandomState(), qubits=self.qubit_map.keys(), initial_state=self.ch_form
|
|
249
250
|
)
|
|
@@ -259,7 +260,7 @@ class CliffordState:
|
|
|
259
260
|
measurements: dict[str, list[int]],
|
|
260
261
|
prng: np.random.RandomState,
|
|
261
262
|
collapse_state_vector=True,
|
|
262
|
-
):
|
|
263
|
+
) -> None:
|
|
263
264
|
if not isinstance(op.gate, cirq.MeasurementGate):
|
|
264
265
|
raise TypeError(
|
|
265
266
|
f'apply_measurement only supports cirq.MeasurementGate operations. '
|