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
cirq/sim/density_matrix_utils.py
CHANGED
|
@@ -216,7 +216,7 @@ def test_measure_density_matrix_partial_indices_all_orders() -> None:
|
|
|
216
216
|
assert bits == [bool(1 & (x >> (2 - p))) for p in perm]
|
|
217
217
|
|
|
218
218
|
|
|
219
|
-
def matrix_000_plus_010():
|
|
219
|
+
def matrix_000_plus_010() -> np.ndarray:
|
|
220
220
|
state = np.zeros(8, dtype=np.complex64)
|
|
221
221
|
state[0] = 1 / np.sqrt(2)
|
|
222
222
|
state[2] = 1j / np.sqrt(2)
|
cirq/sim/mux.py
CHANGED
|
@@ -19,12 +19,14 @@ Filename is a reference to multiplexing.
|
|
|
19
19
|
|
|
20
20
|
from __future__ import annotations
|
|
21
21
|
|
|
22
|
-
from
|
|
22
|
+
from collections.abc import Sequence
|
|
23
|
+
from typing import TYPE_CHECKING
|
|
23
24
|
|
|
24
25
|
import numpy as np
|
|
25
26
|
|
|
26
27
|
from cirq import circuits, devices, ops, protocols, study, value
|
|
27
28
|
from cirq._doc import document
|
|
29
|
+
from cirq.linalg import transformations
|
|
28
30
|
from cirq.sim import density_matrix_simulator, sparse_simulator
|
|
29
31
|
from cirq.sim.clifford import clifford_simulator
|
|
30
32
|
from cirq.transformers import measurement_transformers
|
|
@@ -291,16 +293,41 @@ def final_density_matrix(
|
|
|
291
293
|
return sparse_result.density_matrix_of()
|
|
292
294
|
else:
|
|
293
295
|
# noisy case: use DensityMatrixSimulator with dephasing
|
|
296
|
+
has_classical_control = circuit_like != measurement_transformers.defer_measurements(
|
|
297
|
+
circuit_like
|
|
298
|
+
)
|
|
299
|
+
handling_classical_control = ignore_measurement_results and has_classical_control
|
|
300
|
+
|
|
301
|
+
if handling_classical_control:
|
|
302
|
+
# case 1: classical control
|
|
303
|
+
noise_applied = circuit_like.with_noise(noise) if noise is not None else circuit_like
|
|
304
|
+
defered = measurement_transformers.defer_measurements(noise_applied)
|
|
305
|
+
dephased = measurement_transformers.dephase_measurements(defered)
|
|
306
|
+
program = dephased
|
|
307
|
+
elif ignore_measurement_results:
|
|
308
|
+
# case 2: no classical control, only terminal measurement
|
|
309
|
+
program = measurement_transformers.dephase_measurements(circuit_like)
|
|
310
|
+
else:
|
|
311
|
+
# case 3: no measurement
|
|
312
|
+
program = circuit_like
|
|
313
|
+
|
|
294
314
|
density_result = density_matrix_simulator.DensityMatrixSimulator(
|
|
295
|
-
dtype=dtype, noise=noise, seed=seed
|
|
315
|
+
dtype=dtype, noise=None if handling_classical_control else noise, seed=seed
|
|
296
316
|
).simulate(
|
|
297
|
-
program
|
|
298
|
-
measurement_transformers.dephase_measurements(circuit_like)
|
|
299
|
-
if ignore_measurement_results
|
|
300
|
-
else circuit_like
|
|
301
|
-
),
|
|
317
|
+
program,
|
|
302
318
|
initial_state=initial_state,
|
|
303
319
|
qubit_order=qubit_order,
|
|
304
320
|
param_resolver=param_resolver,
|
|
305
321
|
)
|
|
306
|
-
|
|
322
|
+
result = density_result.final_density_matrix
|
|
323
|
+
|
|
324
|
+
if handling_classical_control:
|
|
325
|
+
# assuming that the ancilla qubits from the transformations are at the end
|
|
326
|
+
keep = list(range(protocols.num_qubits(circuit_like)))
|
|
327
|
+
dephased_qid_shape = protocols.qid_shape(dephased)
|
|
328
|
+
tensor_form = np.reshape(result, dephased_qid_shape + dephased_qid_shape)
|
|
329
|
+
reduced_form = transformations.partial_trace(tensor_form, keep)
|
|
330
|
+
width = np.prod(protocols.qid_shape(circuit_like))
|
|
331
|
+
result = np.reshape(reduced_form, (width, width))
|
|
332
|
+
|
|
333
|
+
return result
|
cirq/sim/mux_test.py
CHANGED
|
@@ -23,10 +23,9 @@ import pytest
|
|
|
23
23
|
import sympy
|
|
24
24
|
|
|
25
25
|
import cirq
|
|
26
|
-
import cirq.testing
|
|
27
26
|
|
|
28
27
|
|
|
29
|
-
def test_sample():
|
|
28
|
+
def test_sample() -> None:
|
|
30
29
|
q = cirq.NamedQubit('q')
|
|
31
30
|
|
|
32
31
|
with pytest.raises(ValueError, match="no measurements"):
|
|
@@ -49,7 +48,7 @@ def test_sample():
|
|
|
49
48
|
assert results.histogram(key=q) == collections.Counter({0: 1})
|
|
50
49
|
|
|
51
50
|
|
|
52
|
-
def test_sample_seed_unitary():
|
|
51
|
+
def test_sample_seed_unitary() -> None:
|
|
53
52
|
q = cirq.NamedQubit('q')
|
|
54
53
|
circuit = cirq.Circuit(cirq.X(q) ** 0.2, cirq.measure(q))
|
|
55
54
|
result = cirq.sample(circuit, repetitions=10, seed=1234)
|
|
@@ -60,7 +59,7 @@ def test_sample_seed_unitary():
|
|
|
60
59
|
)
|
|
61
60
|
|
|
62
61
|
|
|
63
|
-
def test_sample_seed_non_unitary():
|
|
62
|
+
def test_sample_seed_non_unitary() -> None:
|
|
64
63
|
q = cirq.NamedQubit('q')
|
|
65
64
|
circuit = cirq.Circuit(cirq.depolarize(0.5).on(q), cirq.measure(q))
|
|
66
65
|
result = cirq.sample(circuit, repetitions=10, seed=1234)
|
|
@@ -70,7 +69,7 @@ def test_sample_seed_non_unitary():
|
|
|
70
69
|
)
|
|
71
70
|
|
|
72
71
|
|
|
73
|
-
def test_sample_sweep():
|
|
72
|
+
def test_sample_sweep() -> None:
|
|
74
73
|
q = cirq.NamedQubit('q')
|
|
75
74
|
c = cirq.Circuit(cirq.X(q), cirq.Y(q) ** sympy.Symbol('t'), cirq.measure(q))
|
|
76
75
|
|
|
@@ -102,7 +101,7 @@ def test_sample_sweep():
|
|
|
102
101
|
assert results[1].histogram(key=q) == collections.Counter({0: 3})
|
|
103
102
|
|
|
104
103
|
|
|
105
|
-
def test_sample_sweep_seed():
|
|
104
|
+
def test_sample_sweep_seed() -> None:
|
|
106
105
|
q = cirq.NamedQubit('q')
|
|
107
106
|
circuit = cirq.Circuit(cirq.X(q) ** sympy.Symbol('t'), cirq.measure(q))
|
|
108
107
|
|
|
@@ -124,7 +123,7 @@ def test_sample_sweep_seed():
|
|
|
124
123
|
assert np.all(results[2].measurements['q'] == [[True], [False]])
|
|
125
124
|
|
|
126
125
|
|
|
127
|
-
def test_final_state_vector_different_program_types():
|
|
126
|
+
def test_final_state_vector_different_program_types() -> None:
|
|
128
127
|
a, b = cirq.LineQubit.range(2)
|
|
129
128
|
|
|
130
129
|
np.testing.assert_allclose(cirq.final_state_vector(cirq.X), [0, 1], atol=1e-8)
|
|
@@ -140,7 +139,7 @@ def test_final_state_vector_different_program_types():
|
|
|
140
139
|
)
|
|
141
140
|
|
|
142
141
|
|
|
143
|
-
def test_final_state_vector_initial_state():
|
|
142
|
+
def test_final_state_vector_initial_state() -> None:
|
|
144
143
|
np.testing.assert_allclose(cirq.final_state_vector(cirq.X, initial_state=0), [0, 1], atol=1e-8)
|
|
145
144
|
|
|
146
145
|
np.testing.assert_allclose(cirq.final_state_vector(cirq.X, initial_state=1), [1, 0], atol=1e-8)
|
|
@@ -152,7 +151,7 @@ def test_final_state_vector_initial_state():
|
|
|
152
151
|
)
|
|
153
152
|
|
|
154
153
|
|
|
155
|
-
def test_final_state_vector_dtype_insensitive_to_initial_state():
|
|
154
|
+
def test_final_state_vector_dtype_insensitive_to_initial_state() -> None:
|
|
156
155
|
assert cirq.final_state_vector(cirq.X).dtype == np.complex64
|
|
157
156
|
|
|
158
157
|
assert cirq.final_state_vector(cirq.X, initial_state=0).dtype == np.complex64
|
|
@@ -181,7 +180,7 @@ def test_final_state_vector_dtype_insensitive_to_initial_state():
|
|
|
181
180
|
)
|
|
182
181
|
|
|
183
182
|
|
|
184
|
-
def test_final_state_vector_param_resolver():
|
|
183
|
+
def test_final_state_vector_param_resolver() -> None:
|
|
185
184
|
s = sympy.Symbol('s')
|
|
186
185
|
|
|
187
186
|
with pytest.raises(ValueError, match='not unitary'):
|
|
@@ -192,7 +191,7 @@ def test_final_state_vector_param_resolver():
|
|
|
192
191
|
)
|
|
193
192
|
|
|
194
193
|
|
|
195
|
-
def test_final_state_vector_qubit_order():
|
|
194
|
+
def test_final_state_vector_qubit_order() -> None:
|
|
196
195
|
a, b = cirq.LineQubit.range(2)
|
|
197
196
|
|
|
198
197
|
np.testing.assert_allclose(
|
|
@@ -206,7 +205,7 @@ def test_final_state_vector_qubit_order():
|
|
|
206
205
|
)
|
|
207
206
|
|
|
208
207
|
|
|
209
|
-
def test_final_state_vector_ignore_terminal_measurement():
|
|
208
|
+
def test_final_state_vector_ignore_terminal_measurement() -> None:
|
|
210
209
|
a, b = cirq.LineQubit.range(2)
|
|
211
210
|
|
|
212
211
|
np.testing.assert_allclose(
|
|
@@ -226,7 +225,7 @@ def test_final_state_vector_ignore_terminal_measurement():
|
|
|
226
225
|
|
|
227
226
|
|
|
228
227
|
@pytest.mark.parametrize('repetitions', (0, 1, 100))
|
|
229
|
-
def test_repetitions(repetitions):
|
|
228
|
+
def test_repetitions(repetitions) -> None:
|
|
230
229
|
a = cirq.LineQubit(0)
|
|
231
230
|
c = cirq.Circuit(cirq.H(a), cirq.measure(a, key='m'))
|
|
232
231
|
r = cirq.sample(c, repetitions=repetitions)
|
|
@@ -235,7 +234,7 @@ def test_repetitions(repetitions):
|
|
|
235
234
|
assert np.issubdtype(samples.dtype, np.integer)
|
|
236
235
|
|
|
237
236
|
|
|
238
|
-
def test_final_density_matrix_different_program_types():
|
|
237
|
+
def test_final_density_matrix_different_program_types() -> None:
|
|
239
238
|
a, b = cirq.LineQubit.range(2)
|
|
240
239
|
|
|
241
240
|
np.testing.assert_allclose(cirq.final_density_matrix(cirq.X), [[0, 0], [0, 1]], atol=1e-8)
|
|
@@ -244,12 +243,12 @@ def test_final_density_matrix_different_program_types():
|
|
|
244
243
|
|
|
245
244
|
np.testing.assert_allclose(
|
|
246
245
|
cirq.final_density_matrix(cirq.Circuit(ops)),
|
|
247
|
-
[[0.5, 0, 0, 0.5], [0, 0, 0, 0], [0, 0, 0, 0], [0.5, 0, 0, 0.5]],
|
|
246
|
+
np.asarray([[0.5, 0, 0, 0.5], [0, 0, 0, 0], [0, 0, 0, 0], [0.5, 0, 0, 0.5]]),
|
|
248
247
|
atol=1e-8,
|
|
249
248
|
)
|
|
250
249
|
|
|
251
250
|
|
|
252
|
-
def test_final_density_matrix_initial_state():
|
|
251
|
+
def test_final_density_matrix_initial_state() -> None:
|
|
253
252
|
np.testing.assert_allclose(
|
|
254
253
|
cirq.final_density_matrix(cirq.X, initial_state=0), [[0, 0], [0, 1]], atol=1e-8
|
|
255
254
|
)
|
|
@@ -265,7 +264,7 @@ def test_final_density_matrix_initial_state():
|
|
|
265
264
|
)
|
|
266
265
|
|
|
267
266
|
|
|
268
|
-
def test_final_density_matrix_dtype_insensitive_to_initial_state():
|
|
267
|
+
def test_final_density_matrix_dtype_insensitive_to_initial_state() -> None:
|
|
269
268
|
assert cirq.final_density_matrix(cirq.X).dtype == np.complex64
|
|
270
269
|
|
|
271
270
|
assert cirq.final_density_matrix(cirq.X, initial_state=0).dtype == np.complex64
|
|
@@ -296,7 +295,7 @@ def test_final_density_matrix_dtype_insensitive_to_initial_state():
|
|
|
296
295
|
)
|
|
297
296
|
|
|
298
297
|
|
|
299
|
-
def test_final_density_matrix_param_resolver():
|
|
298
|
+
def test_final_density_matrix_param_resolver() -> None:
|
|
300
299
|
s = sympy.Symbol('s')
|
|
301
300
|
|
|
302
301
|
with pytest.raises(ValueError, match='not specified in parameter sweep'):
|
|
@@ -308,17 +307,17 @@ def test_final_density_matrix_param_resolver():
|
|
|
308
307
|
)
|
|
309
308
|
|
|
310
309
|
|
|
311
|
-
def test_final_density_matrix_qubit_order():
|
|
310
|
+
def test_final_density_matrix_qubit_order() -> None:
|
|
312
311
|
a, b = cirq.LineQubit.range(2)
|
|
313
312
|
|
|
314
313
|
np.testing.assert_allclose(
|
|
315
314
|
cirq.final_density_matrix([cirq.X(a), cirq.X(b) ** 0.5], qubit_order=[a, b]),
|
|
316
|
-
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0.5, 0.5j], [0, 0, -0.5j, 0.5]],
|
|
315
|
+
np.asarray([[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0.5, 0.5j], [0, 0, -0.5j, 0.5]]),
|
|
317
316
|
)
|
|
318
317
|
|
|
319
318
|
np.testing.assert_allclose(
|
|
320
319
|
cirq.final_density_matrix([cirq.X(a), cirq.X(b) ** 0.5], qubit_order=[b, a]),
|
|
321
|
-
[[0, 0, 0, 0], [0, 0.5, 0, 0.5j], [0, 0, 0, 0], [0, -0.5j, 0, 0.5]],
|
|
320
|
+
np.asarray([[0, 0, 0, 0], [0, 0.5, 0, 0.5j], [0, 0, 0, 0], [0, -0.5j, 0, 0.5]]),
|
|
322
321
|
)
|
|
323
322
|
|
|
324
323
|
np.testing.assert_allclose(
|
|
@@ -331,7 +330,7 @@ def test_final_density_matrix_qubit_order():
|
|
|
331
330
|
)
|
|
332
331
|
|
|
333
332
|
|
|
334
|
-
def test_final_density_matrix_seed_with_dephasing():
|
|
333
|
+
def test_final_density_matrix_seed_with_dephasing() -> None:
|
|
335
334
|
a = cirq.LineQubit(0)
|
|
336
335
|
np.testing.assert_allclose(
|
|
337
336
|
cirq.final_density_matrix([cirq.X(a) ** 0.5, cirq.measure(a)], seed=123),
|
|
@@ -345,7 +344,7 @@ def test_final_density_matrix_seed_with_dephasing():
|
|
|
345
344
|
)
|
|
346
345
|
|
|
347
346
|
|
|
348
|
-
def test_final_density_matrix_seed_with_collapsing():
|
|
347
|
+
def test_final_density_matrix_seed_with_collapsing() -> None:
|
|
349
348
|
a = cirq.LineQubit(0)
|
|
350
349
|
np.testing.assert_allclose(
|
|
351
350
|
cirq.final_density_matrix(
|
|
@@ -363,7 +362,7 @@ def test_final_density_matrix_seed_with_collapsing():
|
|
|
363
362
|
)
|
|
364
363
|
|
|
365
364
|
|
|
366
|
-
def test_final_density_matrix_noise():
|
|
365
|
+
def test_final_density_matrix_noise() -> None:
|
|
367
366
|
a = cirq.LineQubit(0)
|
|
368
367
|
np.testing.assert_allclose(
|
|
369
368
|
cirq.final_density_matrix([cirq.H(a), cirq.Z(a), cirq.H(a), cirq.measure(a)]),
|
|
@@ -380,7 +379,21 @@ def test_final_density_matrix_noise():
|
|
|
380
379
|
)
|
|
381
380
|
|
|
382
381
|
|
|
383
|
-
def
|
|
382
|
+
def test_final_density_matrix_classical_control() -> None:
|
|
383
|
+
q0, q1 = cirq.LineQubit.range(2)
|
|
384
|
+
circuit = cirq.Circuit(
|
|
385
|
+
cirq.H(q0),
|
|
386
|
+
cirq.measure(q0, key='a'),
|
|
387
|
+
cirq.H(q1).with_classical_controls('a'),
|
|
388
|
+
cirq.measure(q1, key='b'),
|
|
389
|
+
)
|
|
390
|
+
np.testing.assert_allclose(
|
|
391
|
+
cirq.final_density_matrix(circuit),
|
|
392
|
+
np.diag(np.array([0.5, 0.0, 0.25, 0.25], dtype=np.complex64)),
|
|
393
|
+
)
|
|
394
|
+
|
|
395
|
+
|
|
396
|
+
def test_ps_initial_state_wfn() -> None:
|
|
384
397
|
q0, q1 = cirq.LineQubit.range(2)
|
|
385
398
|
s00 = cirq.KET_ZERO(q0) * cirq.KET_ZERO(q1)
|
|
386
399
|
sp0 = cirq.KET_PLUS(q0) * cirq.KET_ZERO(q1)
|
|
@@ -396,7 +409,7 @@ def test_ps_initial_state_wfn():
|
|
|
396
409
|
)
|
|
397
410
|
|
|
398
411
|
|
|
399
|
-
def test_ps_initial_state_dmat():
|
|
412
|
+
def test_ps_initial_state_dmat() -> None:
|
|
400
413
|
q0, q1 = cirq.LineQubit.range(2)
|
|
401
414
|
s00 = cirq.KET_ZERO(q0) * cirq.KET_ZERO(q1)
|
|
402
415
|
sp0 = cirq.KET_PLUS(q0) * cirq.KET_ZERO(q1)
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
17
|
from collections import abc
|
|
18
|
-
from
|
|
18
|
+
from collections.abc import Iterator, Mapping, Sequence
|
|
19
|
+
from typing import Any, Generic, TYPE_CHECKING
|
|
19
20
|
|
|
20
21
|
import numpy as np
|
|
21
22
|
|
|
@@ -14,29 +14,30 @@
|
|
|
14
14
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
|
-
from
|
|
17
|
+
from collections.abc import Sequence
|
|
18
|
+
from typing import Any, Self
|
|
18
19
|
|
|
19
20
|
import cirq
|
|
20
21
|
|
|
21
22
|
|
|
22
23
|
class EmptyQuantumState(cirq.QuantumStateRepresentation):
|
|
23
|
-
def copy(self, deep_copy_buffers=True):
|
|
24
|
+
def copy(self, deep_copy_buffers=True) -> Self:
|
|
24
25
|
return self
|
|
25
26
|
|
|
26
|
-
def measure(self, axes, seed=None):
|
|
27
|
+
def measure(self, axes, seed=None) -> list[int]:
|
|
27
28
|
return [0] * len(axes)
|
|
28
29
|
|
|
29
30
|
@property
|
|
30
|
-
def supports_factor(self):
|
|
31
|
+
def supports_factor(self) -> bool:
|
|
31
32
|
return True
|
|
32
33
|
|
|
33
|
-
def kron(self, other):
|
|
34
|
+
def kron(self, other) -> Self:
|
|
34
35
|
return self
|
|
35
36
|
|
|
36
|
-
def factor(self, axes, *, validate=True, atol=1e-07):
|
|
37
|
+
def factor(self, axes, *, validate=True, atol=1e-07) -> tuple[Self, Self]:
|
|
37
38
|
return self, self
|
|
38
39
|
|
|
39
|
-
def reindex(self, axes):
|
|
40
|
+
def reindex(self, axes) -> Self:
|
|
40
41
|
return self
|
|
41
42
|
|
|
42
43
|
|
cirq/sim/simulation_state.py
CHANGED
|
@@ -18,7 +18,8 @@ from __future__ import annotations
|
|
|
18
18
|
|
|
19
19
|
import abc
|
|
20
20
|
import copy
|
|
21
|
-
from
|
|
21
|
+
from collections.abc import Iterator, Sequence
|
|
22
|
+
from typing import Any, cast, Generic, Self, TYPE_CHECKING, TypeVar
|
|
22
23
|
|
|
23
24
|
import numpy as np
|
|
24
25
|
|
|
@@ -73,7 +74,7 @@ class SimulationState(SimulationStateBase, Generic[TState], metaclass=abc.ABCMet
|
|
|
73
74
|
key: str,
|
|
74
75
|
invert_mask: Sequence[bool],
|
|
75
76
|
confusion_map: dict[tuple[int, ...], np.ndarray],
|
|
76
|
-
):
|
|
77
|
+
) -> None:
|
|
77
78
|
"""Measures the qubits and records to `log_of_measurement_results`.
|
|
78
79
|
|
|
79
80
|
Any bitmasks will be applied to the measurement record.
|
|
@@ -209,7 +210,7 @@ class SimulationState(SimulationStateBase, Generic[TState], metaclass=abc.ABCMet
|
|
|
209
210
|
return extracted, remainder
|
|
210
211
|
|
|
211
212
|
@property
|
|
212
|
-
def allows_factoring(self):
|
|
213
|
+
def allows_factoring(self) -> bool:
|
|
213
214
|
"""Subclasses that allow factorization should override this."""
|
|
214
215
|
return self._state.supports_factor if self._state is not None else False
|
|
215
216
|
|
|
@@ -238,7 +239,7 @@ class SimulationState(SimulationStateBase, Generic[TState], metaclass=abc.ABCMet
|
|
|
238
239
|
def qubits(self) -> tuple[cirq.Qid, ...]:
|
|
239
240
|
return self._qubits
|
|
240
241
|
|
|
241
|
-
def swap(self, q1: cirq.Qid, q2: cirq.Qid, *, inplace=False):
|
|
242
|
+
def swap(self, q1: cirq.Qid, q2: cirq.Qid, *, inplace=False) -> Self:
|
|
242
243
|
"""Swaps two qubits.
|
|
243
244
|
|
|
244
245
|
This only affects the index, and does not modify the underlying
|
|
@@ -269,7 +270,7 @@ class SimulationState(SimulationStateBase, Generic[TState], metaclass=abc.ABCMet
|
|
|
269
270
|
args._set_qubits(qubits)
|
|
270
271
|
return args
|
|
271
272
|
|
|
272
|
-
def rename(self, q1: cirq.Qid, q2: cirq.Qid, *, inplace=False):
|
|
273
|
+
def rename(self, q1: cirq.Qid, q2: cirq.Qid, *, inplace=False) -> Self:
|
|
273
274
|
"""Renames `q1` to `q2`.
|
|
274
275
|
|
|
275
276
|
Args:
|
|
@@ -17,8 +17,9 @@
|
|
|
17
17
|
from __future__ import annotations
|
|
18
18
|
|
|
19
19
|
import abc
|
|
20
|
+
from collections.abc import Iterator, Mapping, Sequence
|
|
20
21
|
from types import NotImplementedType
|
|
21
|
-
from typing import Any, Generic,
|
|
22
|
+
from typing import Any, Generic, Self, TYPE_CHECKING, TypeVar
|
|
22
23
|
|
|
23
24
|
from cirq import protocols, value
|
|
24
25
|
|
|
@@ -81,7 +82,7 @@ class SimulationStateBase(Generic[TSimulationState], metaclass=abc.ABCMeta):
|
|
|
81
82
|
Returns:
|
|
82
83
|
True if the fallback applies, else NotImplemented."""
|
|
83
84
|
|
|
84
|
-
def apply_operation(self, op: cirq.Operation):
|
|
85
|
+
def apply_operation(self, op: cirq.Operation) -> None:
|
|
85
86
|
protocols.act_on(op, self)
|
|
86
87
|
|
|
87
88
|
@abc.abstractmethod
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
|
-
from
|
|
17
|
+
from collections.abc import Sequence
|
|
18
|
+
from typing import Any
|
|
18
19
|
|
|
19
20
|
import numpy as np
|
|
20
21
|
import pytest
|
|
@@ -25,13 +26,13 @@ from cirq.testing import PhaseUsingCleanAncilla, PhaseUsingDirtyAncilla
|
|
|
25
26
|
|
|
26
27
|
|
|
27
28
|
class ExampleQuantumState(cirq.QuantumStateRepresentation):
|
|
28
|
-
def copy(self, deep_copy_buffers=True):
|
|
29
|
-
|
|
29
|
+
def copy(self, deep_copy_buffers=True) -> ExampleQuantumState:
|
|
30
|
+
raise NotImplementedError()
|
|
30
31
|
|
|
31
|
-
def measure(self, axes, seed=None):
|
|
32
|
+
def measure(self, axes, seed=None) -> list[int]:
|
|
32
33
|
return [5, 3]
|
|
33
34
|
|
|
34
|
-
def reindex(self, axes):
|
|
35
|
+
def reindex(self, axes) -> ExampleQuantumState:
|
|
35
36
|
return self
|
|
36
37
|
|
|
37
38
|
|
|
@@ -44,7 +45,7 @@ class ExampleSimulationState(cirq.SimulationState):
|
|
|
44
45
|
) -> bool:
|
|
45
46
|
return True
|
|
46
47
|
|
|
47
|
-
def add_qubits(self, qubits):
|
|
48
|
+
def add_qubits(self, qubits) -> ExampleSimulationState:
|
|
48
49
|
super().add_qubits(qubits)
|
|
49
50
|
return self
|
|
50
51
|
|
cirq/sim/simulation_utils.py
CHANGED
cirq/sim/simulator.py
CHANGED
|
@@ -31,7 +31,8 @@ from __future__ import annotations
|
|
|
31
31
|
|
|
32
32
|
import abc
|
|
33
33
|
import collections
|
|
34
|
-
from
|
|
34
|
+
from collections.abc import Callable, Iterator, Mapping, Sequence
|
|
35
|
+
from typing import Any, cast, Generic, TYPE_CHECKING, TypeVar
|
|
35
36
|
|
|
36
37
|
import numpy as np
|
|
37
38
|
|
|
@@ -217,7 +218,7 @@ class SimulatesAmplitudes(metaclass=value.ABCMetaImplementAnyOneOf):
|
|
|
217
218
|
def sample_from_amplitudes(
|
|
218
219
|
self,
|
|
219
220
|
circuit: cirq.AbstractCircuit,
|
|
220
|
-
param_resolver: cirq.
|
|
221
|
+
param_resolver: cirq.ParamResolverOrSimilarType,
|
|
221
222
|
seed: cirq.RANDOM_STATE_OR_SEED_LIKE,
|
|
222
223
|
repetitions: int = 1,
|
|
223
224
|
qubit_order: cirq.QubitOrderOrList = ops.QubitOrder.DEFAULT,
|
|
@@ -938,7 +939,7 @@ def _qubit_map_to_shape(qubit_map: Mapping[cirq.Qid, int]) -> tuple[int, ...]:
|
|
|
938
939
|
return tuple(qid_shape)
|
|
939
940
|
|
|
940
941
|
|
|
941
|
-
def check_all_resolved(circuit):
|
|
942
|
+
def check_all_resolved(circuit) -> None:
|
|
942
943
|
"""Raises if the circuit contains unresolved symbols."""
|
|
943
944
|
if protocols.is_parameterized(circuit):
|
|
944
945
|
unresolved = [op for moment in circuit for op in moment if protocols.is_parameterized(op)]
|
cirq/sim/simulator_base.py
CHANGED
|
@@ -18,7 +18,8 @@ from __future__ import annotations
|
|
|
18
18
|
|
|
19
19
|
import abc
|
|
20
20
|
import collections
|
|
21
|
-
from
|
|
21
|
+
from collections.abc import Iterator, Sequence
|
|
22
|
+
from typing import Any, cast, Generic, TYPE_CHECKING, TypeVar
|
|
22
23
|
|
|
23
24
|
import numpy as np
|
|
24
25
|
|