cirq-core 1.5.0.dev20250409222543__py3-none-any.whl → 1.6.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of cirq-core might be problematic. Click here for more details.
- cirq/__init__.py +16 -17
- cirq/_compat.py +21 -20
- cirq/_compat_test.py +14 -34
- cirq/_doc.py +4 -2
- cirq/_import.py +8 -6
- cirq/_import_test.py +4 -2
- cirq/_version.py +6 -6
- cirq/_version_test.py +2 -2
- cirq/circuits/_block_diagram_drawer.py +11 -10
- cirq/circuits/_block_diagram_drawer_test.py +8 -6
- cirq/circuits/_box_drawing_character_data.py +8 -8
- cirq/circuits/_box_drawing_character_data_test.py +3 -1
- cirq/circuits/_bucket_priority_queue.py +9 -7
- cirq/circuits/_bucket_priority_queue_test.py +22 -20
- cirq/circuits/circuit.py +248 -172
- cirq/circuits/circuit_operation.py +73 -83
- cirq/circuits/circuit_operation_test.py +128 -90
- cirq/circuits/circuit_test.py +211 -151
- cirq/circuits/frozen_circuit.py +23 -60
- cirq/circuits/frozen_circuit_test.py +31 -8
- cirq/circuits/insert_strategy.py +7 -5
- cirq/circuits/insert_strategy_test.py +4 -2
- cirq/circuits/moment.py +88 -40
- cirq/circuits/moment_test.py +128 -51
- cirq/circuits/optimization_pass.py +5 -5
- cirq/circuits/optimization_pass_test.py +10 -10
- cirq/circuits/qasm_output.py +11 -11
- cirq/circuits/qasm_output_test.py +25 -22
- cirq/circuits/text_diagram_drawer.py +23 -38
- cirq/circuits/text_diagram_drawer_test.py +19 -17
- cirq/conftest.py +4 -3
- cirq/contrib/__init__.py +4 -4
- cirq/contrib/acquaintance/__init__.py +1 -1
- cirq/contrib/acquaintance/bipartite.py +5 -8
- cirq/contrib/acquaintance/bipartite_test.py +18 -13
- cirq/contrib/acquaintance/devices.py +2 -2
- cirq/contrib/acquaintance/devices_test.py +5 -3
- cirq/contrib/acquaintance/executor.py +5 -5
- cirq/contrib/acquaintance/executor_test.py +13 -9
- cirq/contrib/acquaintance/gates.py +18 -28
- cirq/contrib/acquaintance/gates_test.py +24 -20
- cirq/contrib/acquaintance/inspection_utils.py +8 -4
- cirq/contrib/acquaintance/inspection_utils_test.py +4 -2
- cirq/contrib/acquaintance/mutation_utils.py +4 -4
- cirq/contrib/acquaintance/mutation_utils_test.py +4 -2
- cirq/contrib/acquaintance/optimizers.py +4 -4
- cirq/contrib/acquaintance/optimizers_test.py +4 -1
- cirq/contrib/acquaintance/permutation.py +15 -27
- cirq/contrib/acquaintance/permutation_test.py +26 -17
- cirq/contrib/acquaintance/shift.py +4 -4
- cirq/contrib/acquaintance/shift_swap_network.py +4 -4
- cirq/contrib/acquaintance/shift_swap_network_test.py +9 -6
- cirq/contrib/acquaintance/shift_test.py +8 -6
- cirq/contrib/acquaintance/strategies/cubic.py +2 -2
- cirq/contrib/acquaintance/strategies/cubic_test.py +4 -2
- cirq/contrib/acquaintance/strategies/quartic_paired.py +6 -6
- cirq/contrib/acquaintance/strategies/quartic_paired_test.py +10 -6
- cirq/contrib/acquaintance/testing.py +2 -0
- cirq/contrib/acquaintance/topological_sort.py +2 -2
- cirq/contrib/acquaintance/topological_sort_test.py +3 -1
- cirq/contrib/bayesian_network/bayesian_network_gate.py +9 -10
- cirq/contrib/bayesian_network/bayesian_network_gate_test.py +14 -9
- cirq/contrib/circuitdag/circuit_dag.py +4 -4
- cirq/contrib/circuitdag/circuit_dag_test.py +17 -15
- cirq/contrib/custom_simulators/custom_state_simulator.py +5 -5
- cirq/contrib/custom_simulators/custom_state_simulator_test.py +22 -17
- cirq/contrib/graph_device/graph_device.py +12 -11
- cirq/contrib/graph_device/graph_device_test.py +18 -14
- cirq/contrib/graph_device/hypergraph.py +16 -14
- cirq/contrib/graph_device/hypergraph_test.py +13 -11
- cirq/contrib/graph_device/uniform_graph_device.py +6 -4
- cirq/contrib/graph_device/uniform_graph_device_test.py +11 -3
- cirq/contrib/hacks/disable_validation.py +6 -1
- cirq/contrib/hacks/disable_validation_test.py +3 -1
- cirq/contrib/json.py +31 -5
- cirq/contrib/json_test.py +6 -3
- cirq/contrib/json_test_data/DampedReadoutNoiseModel.json +12 -0
- cirq/contrib/json_test_data/DampedReadoutNoiseModel.repr +4 -0
- cirq/contrib/json_test_data/DepolarizingNoiseModel.json +12 -0
- cirq/contrib/json_test_data/DepolarizingNoiseModel.repr +4 -0
- cirq/contrib/json_test_data/DepolarizingWithDampedReadoutNoiseModel.json +6 -0
- cirq/contrib/json_test_data/DepolarizingWithDampedReadoutNoiseModel.repr +1 -0
- cirq/contrib/json_test_data/DepolarizingWithReadoutNoiseModel.json +5 -0
- cirq/contrib/json_test_data/DepolarizingWithReadoutNoiseModel.repr +1 -0
- cirq/contrib/json_test_data/ReadoutNoiseModel.json +12 -0
- cirq/contrib/json_test_data/ReadoutNoiseModel.repr +4 -0
- cirq/contrib/json_test_data/__init__.py +17 -0
- cirq/contrib/json_test_data/spec.py +32 -0
- cirq/contrib/noise_models/noise_models.py +119 -5
- cirq/contrib/noise_models/noise_models_test.py +37 -9
- cirq/contrib/paulistring/clifford_optimize.py +6 -4
- cirq/contrib/paulistring/clifford_optimize_test.py +6 -5
- cirq/contrib/paulistring/clifford_target_gateset.py +10 -10
- cirq/contrib/paulistring/clifford_target_gateset_test.py +13 -11
- cirq/contrib/paulistring/optimize.py +2 -0
- cirq/contrib/paulistring/optimize_test.py +4 -3
- cirq/contrib/paulistring/pauli_string_dag.py +2 -0
- cirq/contrib/paulistring/pauli_string_dag_test.py +3 -1
- cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py +255 -120
- cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation_test.py +398 -19
- cirq/contrib/paulistring/pauli_string_optimize.py +7 -1
- cirq/contrib/paulistring/pauli_string_optimize_test.py +5 -3
- cirq/contrib/paulistring/recombine.py +6 -4
- cirq/contrib/paulistring/recombine_test.py +3 -1
- cirq/contrib/paulistring/separate.py +9 -6
- cirq/contrib/paulistring/separate_test.py +3 -1
- cirq/contrib/qasm_import/_lexer.py +3 -2
- cirq/contrib/qasm_import/_lexer_test.py +49 -13
- cirq/contrib/qasm_import/_parser.py +547 -83
- cirq/contrib/qasm_import/_parser_test.py +988 -97
- cirq/contrib/qasm_import/exception.py +2 -0
- cirq/contrib/qasm_import/qasm.py +8 -2
- cirq/contrib/qasm_import/qasm_test.py +7 -4
- cirq/contrib/qcircuit/qcircuit_diagram_info.py +5 -5
- cirq/contrib/qcircuit/qcircuit_diagram_info_test.py +4 -1
- cirq/contrib/qcircuit/qcircuit_pdf.py +7 -3
- cirq/contrib/qcircuit/qcircuit_pdf_test.py +3 -1
- cirq/contrib/qcircuit/qcircuit_test.py +10 -8
- cirq/contrib/quantum_volume/quantum_volume.py +31 -27
- cirq/contrib/quantum_volume/quantum_volume_test.py +19 -16
- cirq/contrib/quimb/density_matrix.py +15 -14
- cirq/contrib/quimb/density_matrix_test.py +10 -7
- cirq/contrib/quimb/grid_circuits.py +5 -2
- cirq/contrib/quimb/grid_circuits_test.py +3 -0
- cirq/contrib/quimb/mps_simulator.py +20 -20
- cirq/contrib/quimb/mps_simulator_test.py +3 -0
- cirq/contrib/quimb/state_vector.py +12 -11
- cirq/contrib/quimb/state_vector_test.py +3 -0
- cirq/contrib/quirk/export_to_quirk.py +5 -3
- cirq/contrib/quirk/export_to_quirk_test.py +18 -16
- cirq/contrib/quirk/linearize_circuit.py +2 -0
- cirq/contrib/quirk/quirk_gate.py +18 -17
- cirq/contrib/routing/device.py +5 -3
- cirq/contrib/routing/device_test.py +2 -0
- cirq/contrib/routing/greedy.py +10 -21
- cirq/contrib/routing/greedy_test.py +4 -2
- cirq/contrib/routing/initialization.py +2 -2
- cirq/contrib/routing/initialization_test.py +5 -3
- cirq/contrib/routing/router.py +9 -5
- cirq/contrib/routing/router_test.py +2 -0
- cirq/contrib/routing/swap_network.py +3 -3
- cirq/contrib/routing/swap_network_test.py +3 -1
- cirq/contrib/routing/utils.py +2 -2
- cirq/contrib/routing/utils_test.py +3 -0
- cirq/contrib/shuffle_circuits/shuffle_circuits_with_readout_benchmarking.py +15 -9
- cirq/contrib/shuffle_circuits/shuffle_circuits_with_readout_benchmarking_test.py +3 -0
- cirq/contrib/svg/svg.py +3 -3
- cirq/contrib/svg/svg_test.py +8 -5
- cirq/devices/device.py +4 -4
- cirq/devices/device_test.py +7 -4
- cirq/devices/grid_device_metadata.py +10 -10
- cirq/devices/grid_device_metadata_test.py +3 -0
- cirq/devices/grid_qubit.py +29 -21
- cirq/devices/grid_qubit_test.py +3 -0
- cirq/devices/insertion_noise_model.py +7 -7
- cirq/devices/insertion_noise_model_test.py +7 -5
- cirq/devices/line_qubit.py +13 -13
- cirq/devices/line_qubit_test.py +2 -0
- cirq/devices/named_topologies.py +18 -29
- cirq/devices/named_topologies_test.py +13 -10
- cirq/devices/noise_model.py +3 -3
- cirq/devices/noise_model_test.py +19 -15
- cirq/devices/noise_properties.py +15 -6
- cirq/devices/noise_properties_test.py +34 -3
- cirq/devices/noise_utils.py +11 -9
- cirq/devices/noise_utils_test.py +2 -0
- cirq/devices/superconducting_qubits_noise_properties.py +23 -22
- cirq/devices/superconducting_qubits_noise_properties_test.py +6 -6
- cirq/devices/thermal_noise_model.py +107 -37
- cirq/devices/thermal_noise_model_test.py +21 -0
- cirq/devices/unconstrained_device.py +5 -3
- cirq/devices/unconstrained_device_test.py +2 -0
- cirq/experiments/__init__.py +4 -2
- cirq/experiments/benchmarking/__init__.py +17 -0
- cirq/experiments/benchmarking/parallel_xeb.py +677 -0
- cirq/experiments/benchmarking/parallel_xeb_test.py +447 -0
- cirq/experiments/fidelity_estimation.py +14 -8
- cirq/experiments/fidelity_estimation_test.py +3 -0
- cirq/experiments/n_qubit_tomography.py +17 -16
- cirq/experiments/n_qubit_tomography_test.py +8 -5
- cirq/experiments/purity_estimation.py +2 -0
- cirq/experiments/purity_estimation_test.py +2 -0
- cirq/experiments/qubit_characterizations.py +207 -103
- cirq/experiments/qubit_characterizations_test.py +40 -12
- cirq/experiments/random_quantum_circuit_generation.py +56 -70
- cirq/experiments/random_quantum_circuit_generation_test.py +11 -8
- cirq/experiments/readout_confusion_matrix.py +24 -22
- cirq/experiments/readout_confusion_matrix_test.py +2 -0
- cirq/experiments/single_qubit_readout_calibration.py +30 -15
- cirq/experiments/single_qubit_readout_calibration_test.py +5 -2
- cirq/experiments/t1_decay_experiment.py +9 -7
- cirq/experiments/t1_decay_experiment_test.py +13 -11
- cirq/experiments/t2_decay_experiment.py +16 -13
- cirq/experiments/t2_decay_experiment_test.py +2 -0
- cirq/experiments/two_qubit_xeb.py +64 -57
- cirq/experiments/two_qubit_xeb_test.py +10 -6
- cirq/experiments/xeb_fitting.py +39 -35
- cirq/experiments/xeb_sampling.py +37 -44
- cirq/experiments/xeb_sampling_test.py +3 -0
- cirq/experiments/xeb_simulation.py +14 -10
- cirq/experiments/xeb_simulation_test.py +5 -5
- cirq/experiments/z_phase_calibration.py +32 -29
- cirq/experiments/z_phase_calibration_test.py +3 -4
- cirq/interop/quirk/cells/__init__.py +1 -1
- cirq/interop/quirk/cells/all_cells.py +7 -2
- cirq/interop/quirk/cells/arithmetic_cells.py +29 -41
- cirq/interop/quirk/cells/arithmetic_cells_test.py +17 -14
- cirq/interop/quirk/cells/cell.py +19 -28
- cirq/interop/quirk/cells/cell_test.py +3 -0
- cirq/interop/quirk/cells/composite_cell.py +13 -28
- cirq/interop/quirk/cells/composite_cell_test.py +2 -0
- cirq/interop/quirk/cells/control_cells.py +15 -15
- cirq/interop/quirk/cells/control_cells_test.py +7 -5
- cirq/interop/quirk/cells/frequency_space_cells.py +4 -3
- cirq/interop/quirk/cells/frequency_space_cells_test.py +3 -1
- cirq/interop/quirk/cells/ignored_cells.py +3 -0
- cirq/interop/quirk/cells/ignored_cells_test.py +3 -1
- cirq/interop/quirk/cells/input_cells.py +7 -5
- cirq/interop/quirk/cells/input_cells_test.py +7 -5
- cirq/interop/quirk/cells/input_rotation_cells.py +15 -13
- cirq/interop/quirk/cells/input_rotation_cells_test.py +9 -7
- cirq/interop/quirk/cells/measurement_cells.py +5 -2
- cirq/interop/quirk/cells/measurement_cells_test.py +3 -1
- cirq/interop/quirk/cells/parse.py +22 -23
- cirq/interop/quirk/cells/parse_test.py +12 -10
- cirq/interop/quirk/cells/qubit_permutation_cells.py +5 -3
- cirq/interop/quirk/cells/qubit_permutation_cells_test.py +9 -7
- cirq/interop/quirk/cells/scalar_cells.py +4 -1
- cirq/interop/quirk/cells/scalar_cells_test.py +3 -1
- cirq/interop/quirk/cells/single_qubit_rotation_cells.py +5 -2
- cirq/interop/quirk/cells/single_qubit_rotation_cells_test.py +5 -3
- cirq/interop/quirk/cells/swap_cell.py +8 -6
- cirq/interop/quirk/cells/swap_cell_test.py +6 -4
- cirq/interop/quirk/cells/testing.py +6 -6
- cirq/interop/quirk/cells/testing_test.py +8 -6
- cirq/interop/quirk/cells/unsupported_cells.py +3 -0
- cirq/interop/quirk/cells/unsupported_cells_test.py +4 -2
- cirq/interop/quirk/url_to_circuit.py +23 -36
- cirq/interop/quirk/url_to_circuit_test.py +4 -1
- cirq/json_resolver_cache.py +14 -12
- cirq/linalg/__init__.py +4 -6
- cirq/linalg/combinators.py +7 -5
- cirq/linalg/combinators_test.py +10 -7
- cirq/linalg/decompositions.py +24 -35
- cirq/linalg/decompositions_test.py +3 -1
- cirq/linalg/diagonalize.py +6 -4
- cirq/linalg/diagonalize_test.py +15 -14
- cirq/linalg/operator_spaces.py +14 -14
- cirq/linalg/operator_spaces_test.py +13 -11
- cirq/linalg/predicates.py +18 -9
- cirq/linalg/predicates_test.py +5 -0
- cirq/linalg/tolerance.py +6 -3
- cirq/linalg/tolerance_test.py +6 -4
- cirq/linalg/transformations.py +23 -20
- cirq/linalg/transformations_test.py +73 -43
- cirq/neutral_atoms/convert_to_neutral_atom_gates.py +9 -3
- cirq/neutral_atoms/convert_to_neutral_atom_gates_test.py +3 -1
- cirq/neutral_atoms/neutral_atom_devices.py +2 -0
- cirq/ops/__init__.py +2 -0
- cirq/ops/arithmetic_operation.py +21 -21
- cirq/ops/arithmetic_operation_test.py +7 -8
- cirq/ops/boolean_hamiltonian.py +23 -22
- cirq/ops/boolean_hamiltonian_test.py +12 -9
- cirq/ops/classically_controlled_operation.py +31 -36
- cirq/ops/classically_controlled_operation_test.py +121 -117
- cirq/ops/clifford_gate.py +98 -81
- cirq/ops/clifford_gate_test.py +72 -57
- cirq/ops/common_channels.py +44 -44
- cirq/ops/common_channels_test.py +83 -81
- cirq/ops/common_gate_families.py +9 -7
- cirq/ops/common_gate_families_test.py +11 -7
- cirq/ops/common_gates.py +164 -183
- cirq/ops/common_gates_test.py +135 -95
- cirq/ops/control_values.py +23 -26
- cirq/ops/control_values_test.py +22 -20
- cirq/ops/controlled_gate.py +64 -112
- cirq/ops/controlled_gate_test.py +130 -35
- cirq/ops/controlled_operation.py +24 -35
- cirq/ops/controlled_operation_test.py +8 -6
- cirq/ops/dense_pauli_string.py +38 -49
- cirq/ops/dense_pauli_string_test.py +4 -2
- cirq/ops/diagonal_gate.py +18 -31
- cirq/ops/diagonal_gate_test.py +13 -13
- cirq/ops/eigen_gate.py +29 -29
- cirq/ops/eigen_gate_test.py +45 -28
- cirq/ops/fourier_transform.py +14 -20
- cirq/ops/fourier_transform_test.py +15 -12
- cirq/ops/fsim_gate.py +43 -42
- cirq/ops/fsim_gate_test.py +29 -29
- cirq/ops/gate_features.py +2 -0
- cirq/ops/gate_features_test.py +5 -3
- cirq/ops/gate_operation.py +43 -65
- cirq/ops/gate_operation_test.py +46 -42
- cirq/ops/gateset.py +28 -40
- cirq/ops/gateset_test.py +4 -2
- cirq/ops/global_phase_op.py +45 -20
- cirq/ops/global_phase_op_test.py +44 -20
- cirq/ops/greedy_qubit_manager.py +10 -8
- cirq/ops/greedy_qubit_manager_test.py +5 -3
- cirq/ops/identity.py +14 -12
- cirq/ops/identity_test.py +24 -20
- cirq/ops/kraus_channel.py +11 -8
- cirq/ops/kraus_channel_test.py +14 -11
- cirq/ops/linear_combinations.py +65 -77
- cirq/ops/linear_combinations_test.py +14 -9
- cirq/ops/matrix_gates.py +21 -18
- cirq/ops/matrix_gates_test.py +16 -0
- cirq/ops/measure_util.py +15 -20
- cirq/ops/measure_util_test.py +2 -0
- cirq/ops/measurement_gate.py +26 -37
- cirq/ops/measurement_gate_test.py +2 -0
- cirq/ops/mixed_unitary_channel.py +12 -9
- cirq/ops/mixed_unitary_channel_test.py +14 -11
- cirq/ops/named_qubit.py +16 -13
- cirq/ops/named_qubit_test.py +15 -13
- cirq/ops/op_tree.py +9 -7
- cirq/ops/op_tree_test.py +22 -19
- cirq/ops/parallel_gate.py +15 -17
- cirq/ops/parallel_gate_test.py +18 -16
- cirq/ops/parity_gates.py +23 -25
- cirq/ops/parity_gates_test.py +36 -32
- cirq/ops/pauli_gates.py +22 -21
- cirq/ops/pauli_gates_test.py +29 -20
- cirq/ops/pauli_interaction_gate.py +15 -19
- cirq/ops/pauli_interaction_gate_test.py +10 -8
- cirq/ops/pauli_measurement_gate.py +23 -35
- cirq/ops/pauli_measurement_gate_test.py +2 -0
- cirq/ops/pauli_string.py +92 -120
- cirq/ops/pauli_string_phasor.py +52 -45
- cirq/ops/pauli_string_phasor_test.py +4 -5
- cirq/ops/pauli_string_raw_types.py +9 -7
- cirq/ops/pauli_string_raw_types_test.py +2 -0
- cirq/ops/pauli_string_test.py +31 -154
- cirq/ops/pauli_sum_exponential.py +12 -12
- cirq/ops/pauli_sum_exponential_test.py +12 -10
- cirq/ops/permutation_gate.py +8 -6
- cirq/ops/permutation_gate_test.py +10 -8
- cirq/ops/phased_iswap_gate.py +16 -16
- cirq/ops/phased_iswap_gate_test.py +17 -15
- cirq/ops/phased_x_gate.py +16 -17
- cirq/ops/phased_x_gate_test.py +18 -16
- cirq/ops/phased_x_z_gate.py +24 -22
- cirq/ops/phased_x_z_gate_test.py +17 -11
- cirq/ops/projector.py +16 -11
- cirq/ops/projector_test.py +19 -16
- cirq/ops/qid_util.py +7 -5
- cirq/ops/qid_util_test.py +2 -0
- cirq/ops/qubit_manager.py +11 -9
- cirq/ops/qubit_manager_test.py +6 -4
- cirq/ops/qubit_order.py +11 -14
- cirq/ops/qubit_order_or_list.py +4 -2
- cirq/ops/qubit_order_test.py +12 -10
- cirq/ops/random_gate_channel.py +12 -10
- cirq/ops/random_gate_channel_test.py +14 -11
- cirq/ops/raw_types.py +109 -129
- cirq/ops/raw_types_test.py +63 -57
- cirq/ops/state_preparation_channel.py +7 -7
- cirq/ops/state_preparation_channel_test.py +11 -9
- cirq/ops/swap_gates.py +13 -15
- cirq/ops/swap_gates_test.py +19 -17
- cirq/ops/tags.py +5 -3
- cirq/ops/tags_test.py +4 -2
- cirq/ops/three_qubit_gates.py +43 -76
- cirq/ops/three_qubit_gates_test.py +19 -17
- cirq/ops/two_qubit_diagonal_gate.py +13 -13
- cirq/ops/two_qubit_diagonal_gate_test.py +10 -8
- cirq/ops/uniform_superposition_gate.py +5 -3
- cirq/ops/uniform_superposition_gate_test.py +5 -3
- cirq/ops/wait_gate.py +17 -14
- cirq/ops/wait_gate_test.py +9 -6
- cirq/protocols/__init__.py +0 -3
- cirq/protocols/act_on_protocol.py +8 -6
- cirq/protocols/act_on_protocol_test.py +15 -12
- cirq/protocols/apply_channel_protocol.py +10 -14
- cirq/protocols/apply_channel_protocol_test.py +2 -0
- cirq/protocols/apply_mixture_protocol.py +13 -42
- cirq/protocols/apply_mixture_protocol_test.py +7 -5
- cirq/protocols/apply_unitary_protocol.py +39 -34
- cirq/protocols/apply_unitary_protocol_test.py +4 -1
- cirq/protocols/approximate_equality_protocol.py +2 -0
- cirq/protocols/approximate_equality_protocol_test.py +2 -0
- cirq/protocols/circuit_diagram_info_protocol.py +58 -42
- cirq/protocols/circuit_diagram_info_protocol_test.py +70 -12
- cirq/protocols/commutes_protocol.py +8 -7
- cirq/protocols/commutes_protocol_test.py +2 -0
- cirq/protocols/control_key_protocol.py +6 -4
- cirq/protocols/control_key_protocol_test.py +3 -1
- cirq/protocols/decompose_protocol.py +49 -48
- cirq/protocols/decompose_protocol_test.py +27 -16
- cirq/protocols/equal_up_to_global_phase_protocol.py +2 -0
- cirq/protocols/equal_up_to_global_phase_protocol_test.py +9 -6
- cirq/protocols/has_stabilizer_effect_protocol.py +7 -5
- cirq/protocols/has_stabilizer_effect_protocol_test.py +7 -5
- cirq/protocols/has_unitary_protocol.py +10 -6
- cirq/protocols/has_unitary_protocol_test.py +13 -8
- cirq/protocols/hash_from_pickle_test.py +2 -11
- cirq/protocols/inverse_protocol.py +13 -16
- cirq/protocols/inverse_protocol_test.py +5 -3
- cirq/protocols/json_serialization.py +35 -54
- cirq/protocols/json_serialization_test.py +14 -21
- cirq/protocols/json_test_data/CXSWAP.json +46 -0
- cirq/protocols/json_test_data/CXSWAP.repr +13 -0
- cirq/protocols/json_test_data/CZSWAP.json +46 -0
- cirq/protocols/json_test_data/CZSWAP.repr +13 -0
- cirq/protocols/json_test_data/CircuitOperation.json +6 -3
- cirq/protocols/json_test_data/CircuitOperation.repr_inward +4 -2
- cirq/protocols/json_test_data/Moment.json +24 -1
- cirq/protocols/json_test_data/Moment.repr +6 -1
- cirq/protocols/json_test_data/ThermalNoiseModel.json +32 -0
- cirq/protocols/json_test_data/ThermalNoiseModel.repr +1 -0
- cirq/protocols/json_test_data/spec.py +6 -2
- cirq/protocols/kraus_protocol.py +47 -7
- cirq/protocols/kraus_protocol_test.py +86 -12
- cirq/protocols/measurement_key_protocol.py +15 -16
- cirq/protocols/measurement_key_protocol_test.py +13 -11
- cirq/protocols/mixture_protocol.py +7 -5
- cirq/protocols/mixture_protocol_test.py +4 -2
- cirq/protocols/mul_protocol.py +2 -3
- cirq/protocols/mul_protocol_test.py +2 -0
- cirq/protocols/pauli_expansion_protocol.py +6 -3
- cirq/protocols/pauli_expansion_protocol_test.py +5 -3
- cirq/protocols/phase_protocol.py +2 -0
- cirq/protocols/phase_protocol_test.py +3 -1
- cirq/protocols/pow_protocol.py +11 -16
- cirq/protocols/pow_protocol_test.py +2 -0
- cirq/protocols/qasm.py +14 -20
- cirq/protocols/qasm_test.py +6 -3
- cirq/protocols/qid_shape_protocol.py +8 -8
- cirq/protocols/qid_shape_protocol_test.py +3 -1
- cirq/protocols/resolve_parameters.py +5 -3
- cirq/protocols/resolve_parameters_test.py +8 -7
- cirq/protocols/trace_distance_bound.py +6 -4
- cirq/protocols/trace_distance_bound_test.py +3 -1
- cirq/protocols/unitary_protocol.py +17 -7
- cirq/protocols/unitary_protocol_test.py +12 -2
- cirq/qis/channels.py +6 -2
- cirq/qis/channels_test.py +20 -16
- cirq/qis/clifford_tableau.py +21 -19
- cirq/qis/clifford_tableau_test.py +2 -2
- cirq/qis/entropy.py +14 -3
- cirq/qis/entropy_test.py +3 -1
- cirq/qis/measures.py +13 -13
- cirq/qis/measures_test.py +20 -14
- cirq/qis/noise_utils.py +2 -0
- cirq/qis/noise_utils_test.py +9 -7
- cirq/qis/quantum_state_representation.py +7 -8
- cirq/qis/states.py +58 -56
- cirq/qis/states_test.py +2 -0
- cirq/sim/classical_simulator.py +23 -22
- cirq/sim/classical_simulator_test.py +2 -0
- cirq/sim/clifford/clifford_simulator.py +23 -21
- cirq/sim/clifford/clifford_simulator_test.py +7 -4
- cirq/sim/clifford/clifford_tableau_simulation_state.py +10 -7
- cirq/sim/clifford/clifford_tableau_simulation_state_test.py +5 -5
- cirq/sim/clifford/stabilizer_ch_form_simulation_state.py +8 -6
- cirq/sim/clifford/stabilizer_ch_form_simulation_state_test.py +8 -6
- cirq/sim/clifford/stabilizer_sampler.py +9 -7
- cirq/sim/clifford/stabilizer_sampler_test.py +4 -2
- cirq/sim/clifford/stabilizer_simulation_state.py +14 -13
- cirq/sim/clifford/stabilizer_simulation_state_test.py +6 -4
- cirq/sim/clifford/stabilizer_state_ch_form.py +13 -11
- cirq/sim/clifford/stabilizer_state_ch_form_test.py +4 -2
- cirq/sim/density_matrix_simulation_state.py +26 -27
- cirq/sim/density_matrix_simulation_state_test.py +10 -8
- cirq/sim/density_matrix_simulator.py +30 -28
- cirq/sim/density_matrix_simulator_test.py +48 -48
- cirq/sim/density_matrix_utils.py +13 -11
- cirq/sim/density_matrix_utils_test.py +38 -36
- cirq/sim/mux.py +33 -31
- cirq/sim/mux_test.py +3 -0
- cirq/sim/simulation_product_state.py +15 -15
- cirq/sim/simulation_product_state_test.py +29 -26
- cirq/sim/simulation_state.py +29 -38
- cirq/sim/simulation_state_base.py +21 -32
- cirq/sim/simulation_state_test.py +15 -13
- cirq/sim/simulation_utils.py +5 -2
- cirq/sim/simulation_utils_test.py +5 -2
- cirq/sim/simulator.py +90 -106
- cirq/sim/simulator_base.py +33 -45
- cirq/sim/simulator_base_test.py +20 -15
- cirq/sim/simulator_test.py +23 -14
- cirq/sim/sparse_simulator.py +19 -17
- cirq/sim/sparse_simulator_test.py +41 -40
- cirq/sim/state_vector.py +15 -12
- cirq/sim/state_vector_simulation_state.py +31 -31
- cirq/sim/state_vector_simulation_state_test.py +16 -14
- cirq/sim/state_vector_simulator.py +17 -14
- cirq/sim/state_vector_simulator_test.py +2 -0
- cirq/sim/state_vector_test.py +6 -3
- cirq/study/flatten_expressions.py +16 -15
- cirq/study/flatten_expressions_test.py +13 -11
- cirq/study/resolver.py +18 -17
- cirq/study/resolver_test.py +22 -20
- cirq/study/result.py +17 -27
- cirq/study/result_test.py +2 -0
- cirq/study/sweepable.py +12 -10
- cirq/study/sweepable_test.py +3 -0
- cirq/study/sweeps.py +42 -61
- cirq/study/sweeps_test.py +33 -0
- cirq/testing/__init__.py +7 -11
- cirq/testing/_compat_test_data/module_a/__init__.py +1 -0
- cirq/testing/_compat_test_data/module_a/module_b/__init__.py +1 -0
- cirq/testing/_compat_test_data/module_a/sub/__init__.py +1 -0
- cirq/testing/circuit_compare.py +8 -17
- cirq/testing/circuit_compare_test.py +2 -0
- cirq/testing/consistent_act_on.py +13 -11
- cirq/testing/consistent_act_on_test.py +5 -3
- cirq/testing/consistent_channels.py +2 -0
- cirq/testing/consistent_channels_test.py +10 -8
- cirq/testing/consistent_controlled_gate_op.py +5 -5
- cirq/testing/consistent_controlled_gate_op_test.py +18 -18
- cirq/testing/consistent_decomposition.py +2 -2
- cirq/testing/consistent_decomposition_test.py +4 -2
- cirq/testing/consistent_pauli_expansion.py +2 -0
- cirq/testing/consistent_pauli_expansion_test.py +3 -1
- cirq/testing/consistent_phase_by.py +2 -0
- cirq/testing/consistent_phase_by_test.py +3 -1
- cirq/testing/consistent_protocols.py +14 -20
- cirq/testing/consistent_protocols_test.py +13 -11
- cirq/testing/consistent_qasm.py +6 -4
- cirq/testing/consistent_qasm_test.py +7 -7
- cirq/testing/consistent_resolve_parameters.py +2 -0
- cirq/testing/consistent_specified_has_unitary.py +2 -2
- cirq/testing/consistent_specified_has_unitary_test.py +6 -4
- cirq/testing/consistent_unitary.py +1 -0
- cirq/testing/consistent_unitary_test.py +4 -2
- cirq/testing/deprecation.py +5 -2
- cirq/testing/deprecation_test.py +5 -2
- cirq/testing/devices.py +7 -4
- cirq/testing/devices_test.py +7 -4
- cirq/testing/equals_tester.py +4 -2
- cirq/testing/equals_tester_test.py +21 -17
- cirq/testing/equivalent_basis_map.py +6 -4
- cirq/testing/equivalent_basis_map_test.py +6 -4
- cirq/testing/equivalent_repr_eval.py +6 -4
- cirq/testing/equivalent_repr_eval_test.py +5 -3
- cirq/testing/gate_features.py +2 -0
- cirq/testing/gate_features_test.py +7 -5
- cirq/testing/json.py +19 -15
- cirq/testing/json_test.py +5 -3
- cirq/testing/lin_alg_utils.py +10 -11
- cirq/testing/lin_alg_utils_test.py +14 -12
- cirq/testing/logs.py +7 -6
- cirq/testing/logs_test.py +9 -7
- cirq/testing/no_identifier_qubit.py +4 -2
- cirq/testing/no_identifier_qubit_test.py +5 -3
- cirq/testing/op_tree.py +2 -0
- cirq/testing/op_tree_test.py +4 -1
- cirq/testing/order_tester.py +2 -0
- cirq/testing/order_tester_test.py +8 -6
- cirq/testing/pytest_utils.py +2 -0
- cirq/testing/pytest_utils_test.py +4 -2
- cirq/testing/random_circuit.py +21 -20
- cirq/testing/random_circuit_test.py +12 -9
- cirq/testing/repr_pretty_tester.py +1 -0
- cirq/testing/repr_pretty_tester_test.py +5 -3
- cirq/testing/routing_devices.py +4 -1
- cirq/testing/routing_devices_test.py +9 -6
- cirq/testing/sample_circuits.py +4 -1
- cirq/testing/sample_circuits_test.py +3 -1
- cirq/testing/sample_gates.py +3 -0
- cirq/testing/sample_gates_test.py +5 -2
- cirq/transformers/__init__.py +11 -4
- cirq/transformers/align.py +9 -7
- cirq/transformers/align_test.py +2 -0
- cirq/transformers/analytical_decompositions/__init__.py +3 -6
- cirq/transformers/analytical_decompositions/clifford_decomposition.py +18 -16
- cirq/transformers/analytical_decompositions/clifford_decomposition_test.py +2 -0
- cirq/transformers/analytical_decompositions/controlled_gate_decomposition.py +19 -16
- cirq/transformers/analytical_decompositions/controlled_gate_decomposition_test.py +2 -0
- cirq/transformers/analytical_decompositions/cphase_to_fsim.py +11 -9
- cirq/transformers/analytical_decompositions/cphase_to_fsim_test.py +5 -3
- cirq/transformers/analytical_decompositions/pauli_string_decomposition.py +5 -3
- cirq/transformers/analytical_decompositions/pauli_string_decomposition_test.py +5 -3
- cirq/transformers/analytical_decompositions/quantum_shannon_decomposition.py +141 -44
- cirq/transformers/analytical_decompositions/quantum_shannon_decomposition_test.py +35 -1
- cirq/transformers/analytical_decompositions/single_qubit_decompositions.py +8 -7
- cirq/transformers/analytical_decompositions/single_qubit_decompositions_test.py +2 -0
- cirq/transformers/analytical_decompositions/single_to_two_qubit_isometry.py +7 -4
- cirq/transformers/analytical_decompositions/single_to_two_qubit_isometry_test.py +3 -0
- cirq/transformers/analytical_decompositions/three_qubit_decomposition.py +11 -19
- cirq/transformers/analytical_decompositions/three_qubit_decomposition_test.py +8 -33
- cirq/transformers/analytical_decompositions/two_qubit_state_preparation.py +9 -11
- cirq/transformers/analytical_decompositions/two_qubit_state_preparation_test.py +2 -0
- cirq/transformers/analytical_decompositions/two_qubit_to_cz.py +91 -27
- cirq/transformers/analytical_decompositions/two_qubit_to_cz_test.py +36 -7
- cirq/transformers/analytical_decompositions/two_qubit_to_fsim.py +20 -21
- cirq/transformers/analytical_decompositions/two_qubit_to_fsim_test.py +8 -6
- cirq/transformers/analytical_decompositions/two_qubit_to_ms.py +13 -15
- cirq/transformers/analytical_decompositions/two_qubit_to_ms_test.py +3 -1
- cirq/transformers/analytical_decompositions/two_qubit_to_sqrt_iswap.py +39 -41
- cirq/transformers/analytical_decompositions/two_qubit_to_sqrt_iswap_test.py +2 -0
- cirq/transformers/drop_empty_moments.py +5 -3
- cirq/transformers/drop_empty_moments_test.py +4 -2
- cirq/transformers/drop_negligible_operations.py +7 -5
- cirq/transformers/drop_negligible_operations_test.py +2 -0
- cirq/transformers/dynamical_decoupling.py +49 -42
- cirq/transformers/dynamical_decoupling_test.py +223 -205
- cirq/transformers/eject_phased_paulis.py +28 -26
- cirq/transformers/eject_phased_paulis_test.py +12 -9
- cirq/transformers/eject_z.py +12 -12
- cirq/transformers/eject_z_test.py +2 -2
- cirq/transformers/expand_composite.py +6 -4
- cirq/transformers/expand_composite_test.py +3 -1
- cirq/transformers/gauge_compiling/__init__.py +3 -1
- cirq/transformers/gauge_compiling/cphase_gauge.py +2 -0
- cirq/transformers/gauge_compiling/cphase_gauge_test.py +2 -0
- cirq/transformers/gauge_compiling/cz_gauge.py +2 -0
- cirq/transformers/gauge_compiling/cz_gauge_test.py +1 -0
- cirq/transformers/gauge_compiling/gauge_compiling.py +45 -41
- cirq/transformers/gauge_compiling/gauge_compiling_test.py +2 -0
- cirq/transformers/gauge_compiling/gauge_compiling_test_utils.py +1 -0
- cirq/transformers/gauge_compiling/gauge_compiling_test_utils_test.py +5 -1
- cirq/transformers/gauge_compiling/iswap_gauge.py +2 -0
- cirq/transformers/gauge_compiling/iswap_gauge_test.py +1 -0
- cirq/transformers/gauge_compiling/spin_inversion_gauge.py +2 -0
- cirq/transformers/gauge_compiling/spin_inversion_gauge_test.py +2 -0
- cirq/transformers/gauge_compiling/sqrt_cz_gauge.py +7 -6
- cirq/transformers/gauge_compiling/sqrt_cz_gauge_test.py +2 -0
- cirq/transformers/gauge_compiling/sqrt_iswap_gauge.py +2 -0
- cirq/transformers/gauge_compiling/sqrt_iswap_gauge_test.py +2 -0
- cirq/transformers/heuristic_decompositions/gate_tabulation_math_utils.py +6 -3
- cirq/transformers/heuristic_decompositions/gate_tabulation_math_utils_test.py +3 -0
- cirq/transformers/heuristic_decompositions/two_qubit_gate_tabulation.py +12 -9
- cirq/transformers/heuristic_decompositions/two_qubit_gate_tabulation_test.py +9 -7
- cirq/transformers/insertion_sort.py +8 -6
- cirq/transformers/insertion_sort_test.py +3 -1
- cirq/transformers/measurement_transformers.py +29 -29
- cirq/transformers/measurement_transformers_test.py +2 -0
- cirq/transformers/merge_k_qubit_gates.py +12 -10
- cirq/transformers/merge_k_qubit_gates_test.py +18 -18
- cirq/transformers/merge_single_qubit_gates.py +197 -20
- cirq/transformers/merge_single_qubit_gates_test.py +177 -5
- cirq/transformers/noise_adding.py +5 -3
- cirq/transformers/noise_adding_test.py +2 -0
- cirq/transformers/optimize_for_target_gateset.py +19 -17
- cirq/transformers/optimize_for_target_gateset_test.py +11 -8
- cirq/transformers/qubit_management_transformers.py +13 -11
- cirq/transformers/qubit_management_transformers_test.py +5 -3
- cirq/transformers/randomized_measurements.py +16 -14
- cirq/transformers/randomized_measurements_test.py +10 -4
- cirq/transformers/routing/initial_mapper.py +6 -4
- cirq/transformers/routing/initial_mapper_test.py +2 -0
- cirq/transformers/routing/line_initial_mapper.py +16 -14
- cirq/transformers/routing/line_initial_mapper_test.py +9 -7
- cirq/transformers/routing/mapping_manager.py +10 -10
- cirq/transformers/routing/mapping_manager_test.py +2 -0
- cirq/transformers/routing/route_circuit_cqc.py +33 -31
- cirq/transformers/routing/route_circuit_cqc_test.py +15 -13
- cirq/transformers/routing/visualize_routed_circuit.py +8 -7
- cirq/transformers/routing/visualize_routed_circuit_test.py +4 -2
- cirq/transformers/stratify.py +17 -15
- cirq/transformers/stratify_test.py +3 -0
- cirq/transformers/symbolize.py +103 -0
- cirq/transformers/symbolize_test.py +62 -0
- cirq/transformers/synchronize_terminal_measurements.py +10 -10
- cirq/transformers/synchronize_terminal_measurements_test.py +12 -10
- cirq/transformers/tag_transformers.py +97 -0
- cirq/transformers/tag_transformers_test.py +103 -0
- cirq/transformers/target_gatesets/compilation_target_gateset.py +21 -19
- cirq/transformers/target_gatesets/compilation_target_gateset_test.py +20 -16
- cirq/transformers/target_gatesets/cz_gateset.py +7 -5
- cirq/transformers/target_gatesets/cz_gateset_test.py +21 -19
- cirq/transformers/target_gatesets/sqrt_iswap_gateset.py +9 -7
- cirq/transformers/target_gatesets/sqrt_iswap_gateset_test.py +25 -25
- cirq/transformers/transformer_api.py +34 -47
- cirq/transformers/transformer_api_test.py +9 -8
- cirq/transformers/transformer_primitives.py +39 -49
- cirq/transformers/transformer_primitives_test.py +10 -17
- cirq/value/abc_alt.py +6 -4
- cirq/value/abc_alt_test.py +5 -3
- cirq/value/angle.py +11 -12
- cirq/value/angle_test.py +5 -3
- cirq/value/classical_data.py +27 -27
- cirq/value/classical_data_test.py +11 -8
- cirq/value/condition.py +26 -24
- cirq/value/condition_test.py +2 -0
- cirq/value/digits.py +14 -11
- cirq/value/digits_test.py +2 -0
- cirq/value/duration.py +23 -20
- cirq/value/duration_test.py +2 -0
- cirq/value/linear_dict.py +25 -30
- cirq/value/linear_dict_test.py +10 -8
- cirq/value/measurement_key.py +12 -12
- cirq/value/measurement_key_test.py +2 -0
- cirq/value/periodic_value.py +4 -4
- cirq/value/periodic_value_test.py +11 -7
- cirq/value/probability.py +3 -1
- cirq/value/probability_test.py +4 -2
- cirq/value/product_state.py +15 -13
- cirq/value/product_state_test.py +4 -1
- cirq/value/random_state.py +2 -0
- cirq/value/random_state_test.py +5 -3
- cirq/value/timestamp.py +11 -7
- cirq/value/timestamp_test.py +14 -12
- cirq/value/type_alias.py +4 -4
- cirq/value/value_equality_attr.py +8 -9
- cirq/value/value_equality_attr_test.py +14 -11
- cirq/vis/density_matrix.py +3 -3
- cirq/vis/density_matrix_test.py +20 -17
- cirq/vis/heatmap.py +24 -37
- cirq/vis/heatmap_test.py +3 -0
- cirq/vis/histogram.py +9 -6
- cirq/vis/histogram_test.py +5 -2
- cirq/vis/state_histogram.py +10 -8
- cirq/vis/state_histogram_test.py +7 -5
- cirq/vis/vis_utils.py +4 -1
- cirq/vis/vis_utils_test.py +4 -1
- cirq/work/collector.py +12 -18
- cirq/work/collector_test.py +15 -10
- cirq/work/observable_grouping.py +6 -7
- cirq/work/observable_grouping_test.py +10 -9
- cirq/work/observable_measurement.py +47 -45
- cirq/work/observable_measurement_data.py +22 -17
- cirq/work/observable_measurement_data_test.py +4 -1
- cirq/work/observable_measurement_test.py +48 -29
- cirq/work/observable_readout_calibration.py +5 -2
- cirq/work/observable_readout_calibration_test.py +5 -2
- cirq/work/observable_settings.py +13 -22
- cirq/work/observable_settings_test.py +9 -7
- cirq/work/pauli_sum_collector.py +12 -10
- cirq/work/pauli_sum_collector_test.py +9 -9
- cirq/work/sampler.py +42 -43
- cirq/work/sampler_test.py +31 -24
- cirq/work/zeros_sampler.py +6 -4
- cirq/work/zeros_sampler_test.py +7 -5
- {cirq_core-1.5.0.dev20250409222543.dist-info → cirq_core-1.6.0.dist-info}/METADATA +7 -8
- cirq_core-1.6.0.dist-info/RECORD +1241 -0
- {cirq_core-1.5.0.dev20250409222543.dist-info → cirq_core-1.6.0.dist-info}/WHEEL +1 -1
- cirq_core-1.5.0.dev20250409222543.dist-info/RECORD +0 -1216
- {cirq_core-1.5.0.dev20250409222543.dist-info → cirq_core-1.6.0.dist-info}/licenses/LICENSE +0 -0
- {cirq_core-1.5.0.dev20250409222543.dist-info → cirq_core-1.6.0.dist-info}/top_level.txt +0 -0
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
15
17
|
import numpy as np
|
|
16
18
|
import pytest
|
|
17
19
|
import sympy
|
|
@@ -22,7 +24,7 @@ import cirq
|
|
|
22
24
|
ALL_SIMULATORS = (cirq.Simulator(), cirq.DensityMatrixSimulator(), cirq.CliffordSimulator())
|
|
23
25
|
|
|
24
26
|
|
|
25
|
-
def test_diagram():
|
|
27
|
+
def test_diagram() -> None:
|
|
26
28
|
q0, q1 = cirq.LineQubit.range(2)
|
|
27
29
|
circuit = cirq.Circuit(cirq.measure(q0, key='a'), cirq.X(q1).with_classical_controls('a'))
|
|
28
30
|
|
|
@@ -39,7 +41,7 @@ a: ═══@═══^═══
|
|
|
39
41
|
)
|
|
40
42
|
|
|
41
43
|
|
|
42
|
-
def test_diagram_pauli():
|
|
44
|
+
def test_diagram_pauli() -> None:
|
|
43
45
|
q0, q1 = cirq.LineQubit.range(2)
|
|
44
46
|
circuit = cirq.Circuit(
|
|
45
47
|
cirq.measure_single_paulistring(cirq.X(q0), key='a'),
|
|
@@ -59,7 +61,7 @@ a: ═══@══════^═══
|
|
|
59
61
|
)
|
|
60
62
|
|
|
61
63
|
|
|
62
|
-
def test_diagram_extra_measurements():
|
|
64
|
+
def test_diagram_extra_measurements() -> None:
|
|
63
65
|
q0, q1 = cirq.LineQubit.range(2)
|
|
64
66
|
circuit = cirq.Circuit(
|
|
65
67
|
cirq.measure(q0, key='a'),
|
|
@@ -80,7 +82,7 @@ a: ═══@═══^════════
|
|
|
80
82
|
)
|
|
81
83
|
|
|
82
84
|
|
|
83
|
-
def test_diagram_extra_controlled_bits():
|
|
85
|
+
def test_diagram_extra_controlled_bits() -> None:
|
|
84
86
|
q0, q1 = cirq.LineQubit.range(2)
|
|
85
87
|
circuit = cirq.Circuit(cirq.measure(q0, key='a'), cirq.CX(q0, q1).with_classical_controls('a'))
|
|
86
88
|
|
|
@@ -97,7 +99,7 @@ a: ═══@═══^═══
|
|
|
97
99
|
)
|
|
98
100
|
|
|
99
101
|
|
|
100
|
-
def test_diagram_extra_control_bits():
|
|
102
|
+
def test_diagram_extra_control_bits() -> None:
|
|
101
103
|
q0, q1 = cirq.LineQubit.range(2)
|
|
102
104
|
circuit = cirq.Circuit(
|
|
103
105
|
cirq.measure(q0, key='a'),
|
|
@@ -120,7 +122,7 @@ b: ═══════@═══^═══
|
|
|
120
122
|
)
|
|
121
123
|
|
|
122
124
|
|
|
123
|
-
def test_diagram_multiple_ops_single_moment():
|
|
125
|
+
def test_diagram_multiple_ops_single_moment() -> None:
|
|
124
126
|
q0, q1 = cirq.LineQubit.range(2)
|
|
125
127
|
circuit = cirq.Circuit(
|
|
126
128
|
cirq.measure(q0, key='a'),
|
|
@@ -146,7 +148,7 @@ b: ═════@══════^════
|
|
|
146
148
|
)
|
|
147
149
|
|
|
148
150
|
|
|
149
|
-
def test_diagram_subcircuit():
|
|
151
|
+
def test_diagram_subcircuit() -> None:
|
|
150
152
|
q0, q1 = cirq.LineQubit.range(2)
|
|
151
153
|
circuit = cirq.Circuit(
|
|
152
154
|
cirq.CircuitOperation(
|
|
@@ -169,7 +171,7 @@ def test_diagram_subcircuit():
|
|
|
169
171
|
)
|
|
170
172
|
|
|
171
173
|
|
|
172
|
-
def test_diagram_subcircuit_layered():
|
|
174
|
+
def test_diagram_subcircuit_layered() -> None:
|
|
173
175
|
q0, q1 = cirq.LineQubit.range(2)
|
|
174
176
|
circuit = cirq.Circuit(
|
|
175
177
|
cirq.measure(q0, key='a'),
|
|
@@ -196,7 +198,7 @@ a: ═══@═══╩══════════════════
|
|
|
196
198
|
)
|
|
197
199
|
|
|
198
200
|
|
|
199
|
-
def test_qasm_sympy_condition():
|
|
201
|
+
def test_qasm_sympy_condition() -> None:
|
|
200
202
|
q0, q1 = cirq.LineQubit.range(2)
|
|
201
203
|
circuit = cirq.Circuit(
|
|
202
204
|
cirq.measure(q0, key='a'),
|
|
@@ -222,7 +224,7 @@ if (m_a==0) x q[1];
|
|
|
222
224
|
)
|
|
223
225
|
|
|
224
226
|
|
|
225
|
-
def test_qasm_key_condition():
|
|
227
|
+
def test_qasm_key_condition() -> None:
|
|
226
228
|
q0, q1 = cirq.LineQubit.range(2)
|
|
227
229
|
circuit = cirq.Circuit(cirq.measure(q0, key='a'), cirq.X(q1).with_classical_controls('a'))
|
|
228
230
|
qasm = cirq.qasm(circuit)
|
|
@@ -245,7 +247,7 @@ if (m_a==1) x q[1];
|
|
|
245
247
|
)
|
|
246
248
|
|
|
247
249
|
|
|
248
|
-
def test_qasm_no_conditions():
|
|
250
|
+
def test_qasm_no_conditions() -> None:
|
|
249
251
|
q0, q1 = cirq.LineQubit.range(2)
|
|
250
252
|
circuit = cirq.Circuit(
|
|
251
253
|
cirq.measure(q0, key='a'), cirq.ClassicallyControlledOperation(cirq.X(q1), [])
|
|
@@ -270,7 +272,7 @@ x q[1];
|
|
|
270
272
|
)
|
|
271
273
|
|
|
272
274
|
|
|
273
|
-
def test_qasm_multiple_conditions():
|
|
275
|
+
def test_qasm_multiple_conditions() -> None:
|
|
274
276
|
q0, q1 = cirq.LineQubit.range(2)
|
|
275
277
|
circuit = cirq.Circuit(
|
|
276
278
|
cirq.measure(q0, key='a'),
|
|
@@ -284,7 +286,7 @@ def test_qasm_multiple_conditions():
|
|
|
284
286
|
|
|
285
287
|
|
|
286
288
|
@pytest.mark.parametrize('sim', ALL_SIMULATORS)
|
|
287
|
-
def test_key_unset(sim):
|
|
289
|
+
def test_key_unset(sim) -> None:
|
|
288
290
|
q0, q1 = cirq.LineQubit.range(2)
|
|
289
291
|
circuit = cirq.Circuit(
|
|
290
292
|
cirq.measure(q0, key='a'),
|
|
@@ -297,7 +299,7 @@ def test_key_unset(sim):
|
|
|
297
299
|
|
|
298
300
|
|
|
299
301
|
@pytest.mark.parametrize('sim', ALL_SIMULATORS)
|
|
300
|
-
def test_key_set(sim):
|
|
302
|
+
def test_key_set(sim) -> None:
|
|
301
303
|
q0, q1 = cirq.LineQubit.range(2)
|
|
302
304
|
circuit = cirq.Circuit(
|
|
303
305
|
cirq.X(q0),
|
|
@@ -311,7 +313,7 @@ def test_key_set(sim):
|
|
|
311
313
|
|
|
312
314
|
|
|
313
315
|
@pytest.mark.parametrize('sim', ALL_SIMULATORS)
|
|
314
|
-
def test_repeated_measurement_unset(sim):
|
|
316
|
+
def test_repeated_measurement_unset(sim) -> None:
|
|
315
317
|
q0, q1 = cirq.LineQubit.range(2)
|
|
316
318
|
circuit = cirq.Circuit(
|
|
317
319
|
cirq.measure(q0, key='a'),
|
|
@@ -330,7 +332,7 @@ def test_repeated_measurement_unset(sim):
|
|
|
330
332
|
|
|
331
333
|
|
|
332
334
|
@pytest.mark.parametrize('sim', ALL_SIMULATORS)
|
|
333
|
-
def test_repeated_measurement_set(sim):
|
|
335
|
+
def test_repeated_measurement_set(sim) -> None:
|
|
334
336
|
q0, q1 = cirq.LineQubit.range(2)
|
|
335
337
|
circuit = cirq.Circuit(
|
|
336
338
|
cirq.X(q0),
|
|
@@ -350,7 +352,7 @@ def test_repeated_measurement_set(sim):
|
|
|
350
352
|
|
|
351
353
|
|
|
352
354
|
@pytest.mark.parametrize('sim', ALL_SIMULATORS)
|
|
353
|
-
def test_subcircuit_key_unset(sim):
|
|
355
|
+
def test_subcircuit_key_unset(sim) -> None:
|
|
354
356
|
q0, q1 = cirq.LineQubit.range(2)
|
|
355
357
|
inner = cirq.Circuit(
|
|
356
358
|
cirq.measure(q0, key='c'),
|
|
@@ -358,7 +360,9 @@ def test_subcircuit_key_unset(sim):
|
|
|
358
360
|
cirq.measure(q1, key='b'),
|
|
359
361
|
)
|
|
360
362
|
circuit = cirq.Circuit(
|
|
361
|
-
cirq.CircuitOperation(
|
|
363
|
+
cirq.CircuitOperation(
|
|
364
|
+
inner.freeze(), repetitions=2, use_repetition_ids=True, measurement_key_map={'c': 'a'}
|
|
365
|
+
)
|
|
362
366
|
)
|
|
363
367
|
result = sim.run(circuit)
|
|
364
368
|
assert result.measurements['0:a'] == 0
|
|
@@ -368,7 +372,7 @@ def test_subcircuit_key_unset(sim):
|
|
|
368
372
|
|
|
369
373
|
|
|
370
374
|
@pytest.mark.parametrize('sim', ALL_SIMULATORS)
|
|
371
|
-
def test_subcircuit_key_set(sim):
|
|
375
|
+
def test_subcircuit_key_set(sim) -> None:
|
|
372
376
|
q0, q1 = cirq.LineQubit.range(2)
|
|
373
377
|
inner = cirq.Circuit(
|
|
374
378
|
cirq.X(q0),
|
|
@@ -377,7 +381,9 @@ def test_subcircuit_key_set(sim):
|
|
|
377
381
|
cirq.measure(q1, key='b'),
|
|
378
382
|
)
|
|
379
383
|
circuit = cirq.Circuit(
|
|
380
|
-
cirq.CircuitOperation(
|
|
384
|
+
cirq.CircuitOperation(
|
|
385
|
+
inner.freeze(), repetitions=4, use_repetition_ids=True, measurement_key_map={'c': 'a'}
|
|
386
|
+
)
|
|
381
387
|
)
|
|
382
388
|
result = sim.run(circuit)
|
|
383
389
|
assert result.measurements['0:a'] == 1
|
|
@@ -390,7 +396,7 @@ def test_subcircuit_key_set(sim):
|
|
|
390
396
|
assert result.measurements['3:b'] == 0
|
|
391
397
|
|
|
392
398
|
|
|
393
|
-
def test_key_unset_in_subcircuit_outer_scope():
|
|
399
|
+
def test_key_unset_in_subcircuit_outer_scope() -> None:
|
|
394
400
|
q0, q1 = cirq.LineQubit.range(2)
|
|
395
401
|
circuit = cirq.Circuit(
|
|
396
402
|
cirq.measure(q0, key='a'),
|
|
@@ -402,7 +408,7 @@ def test_key_unset_in_subcircuit_outer_scope():
|
|
|
402
408
|
assert result.measurements['b'] == 0
|
|
403
409
|
|
|
404
410
|
|
|
405
|
-
def test_key_set_in_subcircuit_outer_scope():
|
|
411
|
+
def test_key_set_in_subcircuit_outer_scope() -> None:
|
|
406
412
|
q0, q1 = cirq.LineQubit.range(2)
|
|
407
413
|
circuit = cirq.Circuit(
|
|
408
414
|
cirq.X(q0),
|
|
@@ -415,21 +421,21 @@ def test_key_set_in_subcircuit_outer_scope():
|
|
|
415
421
|
assert result.measurements['b'] == 1
|
|
416
422
|
|
|
417
423
|
|
|
418
|
-
def test_condition_types():
|
|
424
|
+
def test_condition_types() -> None:
|
|
419
425
|
q0 = cirq.LineQubit(0)
|
|
420
426
|
sympy_cond = sympy_parser.parse_expr('a >= 2')
|
|
421
427
|
op = cirq.X(q0).with_classical_controls(cirq.MeasurementKey('a'), 'b', 'a > b', sympy_cond)
|
|
422
428
|
assert set(map(str, op.classical_controls)) == {'a', 'b', 'a > b', 'a >= 2'}
|
|
423
429
|
|
|
424
430
|
|
|
425
|
-
def test_condition_flattening():
|
|
431
|
+
def test_condition_flattening() -> None:
|
|
426
432
|
q0 = cirq.LineQubit(0)
|
|
427
433
|
op = cirq.X(q0).with_classical_controls('a').with_classical_controls('b')
|
|
428
434
|
assert set(map(str, op.classical_controls)) == {'a', 'b'}
|
|
429
435
|
assert isinstance(op._sub_operation, cirq.GateOperation)
|
|
430
436
|
|
|
431
437
|
|
|
432
|
-
def test_condition_stacking():
|
|
438
|
+
def test_condition_stacking() -> None:
|
|
433
439
|
q0 = cirq.LineQubit(0)
|
|
434
440
|
op = cirq.X(q0).with_classical_controls('a').with_tags('t').with_classical_controls('b')
|
|
435
441
|
assert set(map(str, cirq.control_keys(op))) == {'a', 'b'}
|
|
@@ -437,7 +443,7 @@ def test_condition_stacking():
|
|
|
437
443
|
assert not op.tags
|
|
438
444
|
|
|
439
445
|
|
|
440
|
-
def test_condition_removal():
|
|
446
|
+
def test_condition_removal() -> None:
|
|
441
447
|
q0 = cirq.LineQubit(0)
|
|
442
448
|
op = (
|
|
443
449
|
cirq.X(q0)
|
|
@@ -452,13 +458,13 @@ def test_condition_removal():
|
|
|
452
458
|
assert not op.tags
|
|
453
459
|
|
|
454
460
|
|
|
455
|
-
def test_qubit_mapping():
|
|
461
|
+
def test_qubit_mapping() -> None:
|
|
456
462
|
q0, q1 = cirq.LineQubit.range(2)
|
|
457
463
|
op = cirq.X(q0).with_classical_controls('a')
|
|
458
464
|
assert op.with_qubits(q1).qubits == (q1,)
|
|
459
465
|
|
|
460
466
|
|
|
461
|
-
def test_parameterizable():
|
|
467
|
+
def test_parameterizable() -> None:
|
|
462
468
|
s = sympy.Symbol('s')
|
|
463
469
|
q0 = cirq.LineQubit(0)
|
|
464
470
|
op = cirq.X(q0).with_classical_controls('a')
|
|
@@ -468,7 +474,7 @@ def test_parameterizable():
|
|
|
468
474
|
assert cirq.resolve_parameters(opa, cirq.ParamResolver({'s': 1})) == op
|
|
469
475
|
|
|
470
476
|
|
|
471
|
-
def test_decompose():
|
|
477
|
+
def test_decompose() -> None:
|
|
472
478
|
q0 = cirq.LineQubit(0)
|
|
473
479
|
op = cirq.H(q0).with_classical_controls('a')
|
|
474
480
|
assert cirq.decompose(op) == [
|
|
@@ -477,17 +483,21 @@ def test_decompose():
|
|
|
477
483
|
]
|
|
478
484
|
|
|
479
485
|
|
|
480
|
-
def test_str():
|
|
486
|
+
def test_str() -> None:
|
|
481
487
|
q0 = cirq.LineQubit(0)
|
|
482
488
|
op = cirq.X(q0).with_classical_controls('a')
|
|
483
489
|
assert str(op) == 'X(q(0)).with_classical_controls(a)'
|
|
484
490
|
|
|
485
491
|
|
|
486
|
-
def test_scope_local():
|
|
492
|
+
def test_scope_local() -> None:
|
|
487
493
|
q = cirq.LineQubit(0)
|
|
488
494
|
inner = cirq.Circuit(cirq.measure(q, key='a'), cirq.X(q).with_classical_controls('a'))
|
|
489
|
-
middle = cirq.Circuit(
|
|
490
|
-
|
|
495
|
+
middle = cirq.Circuit(
|
|
496
|
+
cirq.CircuitOperation(inner.freeze(), repetitions=2, use_repetition_ids=True)
|
|
497
|
+
)
|
|
498
|
+
outer_subcircuit = cirq.CircuitOperation(
|
|
499
|
+
middle.freeze(), repetitions=2, use_repetition_ids=True
|
|
500
|
+
)
|
|
491
501
|
circuit = outer_subcircuit.mapped_circuit(deep=True)
|
|
492
502
|
internal_control_keys = [
|
|
493
503
|
str(condition) for op in circuit.all_operations() for condition in cirq.control_keys(op)
|
|
@@ -498,10 +508,10 @@ def test_scope_local():
|
|
|
498
508
|
cirq.testing.assert_has_diagram(
|
|
499
509
|
cirq.Circuit(outer_subcircuit),
|
|
500
510
|
"""
|
|
501
|
-
[ [ 0: ───M───X─── ]
|
|
502
|
-
0: ───[ 0: ───[ ║ ║ ]
|
|
503
|
-
[ [ a: ═══@═══^═══ ](loops=2) ](loops=2)
|
|
504
|
-
""",
|
|
511
|
+
[ [ 0: ───M───X─── ] ]
|
|
512
|
+
0: ───[ 0: ───[ ║ ║ ]───────────────────────────────────── ]─────────────────────────────────────
|
|
513
|
+
[ [ a: ═══@═══^═══ ](loops=2, use_repetition_ids=True) ](loops=2, use_repetition_ids=True)
|
|
514
|
+
""", # noqa: E501
|
|
505
515
|
use_unicode_characters=True,
|
|
506
516
|
)
|
|
507
517
|
cirq.testing.assert_has_diagram(
|
|
@@ -522,7 +532,7 @@ def test_scope_local():
|
|
|
522
532
|
assert circuit == cirq.Circuit(cirq.decompose(outer_subcircuit))
|
|
523
533
|
|
|
524
534
|
|
|
525
|
-
def test_scope_flatten_both():
|
|
535
|
+
def test_scope_flatten_both() -> None:
|
|
526
536
|
q = cirq.LineQubit(0)
|
|
527
537
|
inner = cirq.Circuit(cirq.measure(q, key='a'), cirq.X(q).with_classical_controls('a'))
|
|
528
538
|
middle = cirq.Circuit(
|
|
@@ -541,9 +551,9 @@ def test_scope_flatten_both():
|
|
|
541
551
|
cirq.testing.assert_has_diagram(
|
|
542
552
|
cirq.Circuit(outer_subcircuit),
|
|
543
553
|
"""
|
|
544
|
-
[ [ 0: ───M───X─── ]
|
|
545
|
-
0: ───[ 0: ───[ ║ ║ ]
|
|
546
|
-
[ [ a: ═══@═══^═══ ](loops=2
|
|
554
|
+
[ [ 0: ───M───X─── ] ]
|
|
555
|
+
0: ───[ 0: ───[ ║ ║ ]──────────── ]────────────
|
|
556
|
+
[ [ a: ═══@═══^═══ ](loops=2) ](loops=2)
|
|
547
557
|
""",
|
|
548
558
|
use_unicode_characters=True,
|
|
549
559
|
)
|
|
@@ -558,13 +568,13 @@ a: ═══@═══^═══@═══^═══@═══^═══@══
|
|
|
558
568
|
)
|
|
559
569
|
|
|
560
570
|
|
|
561
|
-
def test_scope_flatten_inner():
|
|
571
|
+
def test_scope_flatten_inner() -> None:
|
|
562
572
|
q = cirq.LineQubit(0)
|
|
563
573
|
inner = cirq.Circuit(cirq.measure(q, key='a'), cirq.X(q).with_classical_controls('a'))
|
|
564
|
-
middle = cirq.Circuit(
|
|
565
|
-
|
|
574
|
+
middle = cirq.Circuit(cirq.CircuitOperation(inner.freeze(), repetitions=2))
|
|
575
|
+
outer_subcircuit = cirq.CircuitOperation(
|
|
576
|
+
middle.freeze(), repetitions=2, use_repetition_ids=True
|
|
566
577
|
)
|
|
567
|
-
outer_subcircuit = cirq.CircuitOperation(middle.freeze(), repetitions=2)
|
|
568
578
|
circuit = outer_subcircuit.mapped_circuit(deep=True)
|
|
569
579
|
internal_control_keys = [
|
|
570
580
|
str(condition) for op in circuit.all_operations() for condition in cirq.control_keys(op)
|
|
@@ -575,9 +585,9 @@ def test_scope_flatten_inner():
|
|
|
575
585
|
cirq.testing.assert_has_diagram(
|
|
576
586
|
cirq.Circuit(outer_subcircuit),
|
|
577
587
|
"""
|
|
578
|
-
[ [ 0: ───M───X─── ]
|
|
579
|
-
0: ───[ 0: ───[ ║ ║ ]
|
|
580
|
-
[ [ a: ═══@═══^═══ ](loops=2
|
|
588
|
+
[ [ 0: ───M───X─── ] ]
|
|
589
|
+
0: ───[ 0: ───[ ║ ║ ]──────────── ]─────────────────────────────────────
|
|
590
|
+
[ [ a: ═══@═══^═══ ](loops=2) ](loops=2, use_repetition_ids=True)
|
|
581
591
|
""",
|
|
582
592
|
use_unicode_characters=True,
|
|
583
593
|
)
|
|
@@ -594,13 +604,13 @@ def test_scope_flatten_inner():
|
|
|
594
604
|
)
|
|
595
605
|
|
|
596
606
|
|
|
597
|
-
def test_scope_flatten_outer():
|
|
607
|
+
def test_scope_flatten_outer() -> None:
|
|
598
608
|
q = cirq.LineQubit(0)
|
|
599
609
|
inner = cirq.Circuit(cirq.measure(q, key='a'), cirq.X(q).with_classical_controls('a'))
|
|
600
|
-
middle = cirq.Circuit(
|
|
601
|
-
|
|
602
|
-
middle.freeze(), repetitions=2, use_repetition_ids=False
|
|
610
|
+
middle = cirq.Circuit(
|
|
611
|
+
cirq.CircuitOperation(inner.freeze(), repetitions=2, use_repetition_ids=True)
|
|
603
612
|
)
|
|
613
|
+
outer_subcircuit = cirq.CircuitOperation(middle.freeze(), repetitions=2)
|
|
604
614
|
circuit = outer_subcircuit.mapped_circuit(deep=True)
|
|
605
615
|
internal_control_keys = [
|
|
606
616
|
str(condition) for op in circuit.all_operations() for condition in cirq.control_keys(op)
|
|
@@ -611,9 +621,9 @@ def test_scope_flatten_outer():
|
|
|
611
621
|
cirq.testing.assert_has_diagram(
|
|
612
622
|
cirq.Circuit(outer_subcircuit),
|
|
613
623
|
"""
|
|
614
|
-
[ [ 0: ───M───X─── ]
|
|
615
|
-
0: ───[ 0: ───[ ║ ║ ]
|
|
616
|
-
[ [ a: ═══@═══^═══ ](loops=2) ](loops=2
|
|
624
|
+
[ [ 0: ───M───X─── ] ]
|
|
625
|
+
0: ───[ 0: ───[ ║ ║ ]───────────────────────────────────── ]────────────
|
|
626
|
+
[ [ a: ═══@═══^═══ ](loops=2, use_repetition_ids=True) ](loops=2)
|
|
617
627
|
""",
|
|
618
628
|
use_unicode_characters=True,
|
|
619
629
|
)
|
|
@@ -630,14 +640,16 @@ def test_scope_flatten_outer():
|
|
|
630
640
|
)
|
|
631
641
|
|
|
632
642
|
|
|
633
|
-
def test_scope_extern():
|
|
643
|
+
def test_scope_extern() -> None:
|
|
634
644
|
q = cirq.LineQubit(0)
|
|
635
645
|
inner = cirq.Circuit(cirq.measure(q, key='a'), cirq.X(q).with_classical_controls('b'))
|
|
636
646
|
middle = cirq.Circuit(
|
|
637
647
|
cirq.measure(q, key=cirq.MeasurementKey('b')),
|
|
638
|
-
cirq.CircuitOperation(inner.freeze(), repetitions=2),
|
|
648
|
+
cirq.CircuitOperation(inner.freeze(), repetitions=2, use_repetition_ids=True),
|
|
649
|
+
)
|
|
650
|
+
outer_subcircuit = cirq.CircuitOperation(
|
|
651
|
+
middle.freeze(), repetitions=2, use_repetition_ids=True
|
|
639
652
|
)
|
|
640
|
-
outer_subcircuit = cirq.CircuitOperation(middle.freeze(), repetitions=2)
|
|
641
653
|
circuit = outer_subcircuit.mapped_circuit(deep=True)
|
|
642
654
|
internal_control_keys = [
|
|
643
655
|
str(condition) for op in circuit.all_operations() for condition in cirq.control_keys(op)
|
|
@@ -648,12 +660,12 @@ def test_scope_extern():
|
|
|
648
660
|
cirq.testing.assert_has_diagram(
|
|
649
661
|
cirq.Circuit(outer_subcircuit),
|
|
650
662
|
"""
|
|
651
|
-
[ [ 0: ───M('a')───X─── ]
|
|
652
|
-
[ 0: ───M───[ ║ ]
|
|
653
|
-
0: ───[ ║ [ b: ════════════^═══ ](loops=2) ]
|
|
654
|
-
[ ║ ║
|
|
655
|
-
[ b:
|
|
656
|
-
""",
|
|
663
|
+
[ [ 0: ───M('a')───X─── ] ]
|
|
664
|
+
[ 0: ───M───[ ║ ]───────────────────────────────────── ]
|
|
665
|
+
0: ───[ ║ [ b: ════════════^═══ ](loops=2, use_repetition_ids=True) ]─────────────────────────────────────
|
|
666
|
+
[ ║ ║ ]
|
|
667
|
+
[ b: ═══@═══╩═══════════════════════════════════════════════════════════ ](loops=2, use_repetition_ids=True)
|
|
668
|
+
""", # noqa: E501
|
|
657
669
|
use_unicode_characters=True,
|
|
658
670
|
)
|
|
659
671
|
cirq.testing.assert_has_diagram(
|
|
@@ -670,7 +682,7 @@ def test_scope_extern():
|
|
|
670
682
|
assert circuit == cirq.Circuit(cirq.decompose(outer_subcircuit))
|
|
671
683
|
|
|
672
684
|
|
|
673
|
-
def test_scope_extern_wrapping_with_non_repeating_subcircuits():
|
|
685
|
+
def test_scope_extern_wrapping_with_non_repeating_subcircuits() -> None:
|
|
674
686
|
def wrap(*ops):
|
|
675
687
|
return cirq.CircuitOperation(cirq.FrozenCircuit(*ops))
|
|
676
688
|
|
|
@@ -683,9 +695,9 @@ def test_scope_extern_wrapping_with_non_repeating_subcircuits():
|
|
|
683
695
|
)
|
|
684
696
|
middle = wrap_frozen(
|
|
685
697
|
wrap(cirq.measure(q, key=cirq.MeasurementKey('b'))),
|
|
686
|
-
wrap(cirq.CircuitOperation(inner, repetitions=2)),
|
|
698
|
+
wrap(cirq.CircuitOperation(inner, repetitions=2, use_repetition_ids=True)),
|
|
687
699
|
)
|
|
688
|
-
outer_subcircuit = cirq.CircuitOperation(middle, repetitions=2)
|
|
700
|
+
outer_subcircuit = cirq.CircuitOperation(middle, repetitions=2, use_repetition_ids=True)
|
|
689
701
|
circuit = outer_subcircuit.mapped_circuit(deep=True)
|
|
690
702
|
internal_control_keys = [
|
|
691
703
|
str(condition) for op in circuit.all_operations() for condition in cirq.control_keys(op)
|
|
@@ -707,7 +719,7 @@ def test_scope_extern_wrapping_with_non_repeating_subcircuits():
|
|
|
707
719
|
assert circuit == cirq.Circuit(cirq.decompose(outer_subcircuit))
|
|
708
720
|
|
|
709
721
|
|
|
710
|
-
def test_scope_root():
|
|
722
|
+
def test_scope_root() -> None:
|
|
711
723
|
q = cirq.LineQubit(0)
|
|
712
724
|
inner = cirq.Circuit(cirq.measure(q, key='a'), cirq.X(q).with_classical_controls('b'))
|
|
713
725
|
middle = cirq.Circuit(
|
|
@@ -738,23 +750,25 @@ b: ═══╩═════════════════════
|
|
|
738
750
|
cirq.testing.assert_has_diagram(
|
|
739
751
|
circuit,
|
|
740
752
|
"""
|
|
741
|
-
0: ───M('
|
|
742
|
-
|
|
743
|
-
b:
|
|
753
|
+
0: ───M('c')───M('a')───X───M('a')───X───M('c')───M('a')───X───M('a')───X───
|
|
754
|
+
║ ║ ║ ║
|
|
755
|
+
b: ═════════════════════^════════════^═════════════════════^════════════^═══
|
|
744
756
|
""",
|
|
745
757
|
use_unicode_characters=True,
|
|
746
758
|
)
|
|
747
759
|
assert circuit == cirq.Circuit(cirq.decompose(outer_subcircuit))
|
|
748
760
|
|
|
749
761
|
|
|
750
|
-
def test_scope_extern_mismatch():
|
|
762
|
+
def test_scope_extern_mismatch() -> None:
|
|
751
763
|
q = cirq.LineQubit(0)
|
|
752
764
|
inner = cirq.Circuit(cirq.measure(q, key='a'), cirq.X(q).with_classical_controls('b'))
|
|
753
765
|
middle = cirq.Circuit(
|
|
754
766
|
cirq.measure(q, key=cirq.MeasurementKey('b', ('0',))),
|
|
755
|
-
cirq.CircuitOperation(inner.freeze(), repetitions=2),
|
|
767
|
+
cirq.CircuitOperation(inner.freeze(), repetitions=2, use_repetition_ids=True),
|
|
768
|
+
)
|
|
769
|
+
outer_subcircuit = cirq.CircuitOperation(
|
|
770
|
+
middle.freeze(), repetitions=2, use_repetition_ids=True
|
|
756
771
|
)
|
|
757
|
-
outer_subcircuit = cirq.CircuitOperation(middle.freeze(), repetitions=2)
|
|
758
772
|
circuit = outer_subcircuit.mapped_circuit(deep=True)
|
|
759
773
|
internal_control_keys = [
|
|
760
774
|
str(condition) for op in circuit.all_operations() for condition in cirq.control_keys(op)
|
|
@@ -765,14 +779,14 @@ def test_scope_extern_mismatch():
|
|
|
765
779
|
cirq.testing.assert_has_diagram(
|
|
766
780
|
cirq.Circuit(outer_subcircuit),
|
|
767
781
|
"""
|
|
768
|
-
[ [ 0: ───M('a')───X─── ]
|
|
769
|
-
[ 0: ───M('0:b')───[ ║ ]
|
|
770
|
-
0: ───[ [ b: ════════════^═══ ](loops=2) ]
|
|
771
|
-
[ ║
|
|
772
|
-
[ b:
|
|
782
|
+
[ [ 0: ───M('a')───X─── ] ]
|
|
783
|
+
[ 0: ───M('0:b')───[ ║ ]───────────────────────────────────── ]
|
|
784
|
+
0: ───[ [ b: ════════════^═══ ](loops=2, use_repetition_ids=True) ]─────────────────────────────────────
|
|
785
|
+
[ ║ ]
|
|
786
|
+
[ b: ══════════════╩═══════════════════════════════════════════════════════════ ](loops=2, use_repetition_ids=True)
|
|
773
787
|
║
|
|
774
|
-
b:
|
|
775
|
-
""",
|
|
788
|
+
b: ═══╩═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
|
|
789
|
+
""", # noqa: E501
|
|
776
790
|
use_unicode_characters=True,
|
|
777
791
|
)
|
|
778
792
|
cirq.testing.assert_has_diagram(
|
|
@@ -787,7 +801,7 @@ b: ═════════════════════════
|
|
|
787
801
|
assert circuit == cirq.Circuit(cirq.decompose(outer_subcircuit))
|
|
788
802
|
|
|
789
803
|
|
|
790
|
-
def test_repr():
|
|
804
|
+
def test_repr() -> None:
|
|
791
805
|
q0 = cirq.LineQubit(0)
|
|
792
806
|
op = cirq.X(q0).with_classical_controls('a')
|
|
793
807
|
assert repr(op) == (
|
|
@@ -797,13 +811,13 @@ def test_repr():
|
|
|
797
811
|
)
|
|
798
812
|
|
|
799
813
|
|
|
800
|
-
def test_no_measurement_gates():
|
|
814
|
+
def test_no_measurement_gates() -> None:
|
|
801
815
|
q0 = cirq.LineQubit(0)
|
|
802
816
|
with pytest.raises(ValueError, match='with measurements'):
|
|
803
817
|
_ = cirq.measure(q0).with_classical_controls('a')
|
|
804
818
|
|
|
805
819
|
|
|
806
|
-
def test_unmeasured_condition():
|
|
820
|
+
def test_unmeasured_condition() -> None:
|
|
807
821
|
q0 = cirq.LineQubit(0)
|
|
808
822
|
bad_circuit = cirq.Circuit(cirq.X(q0).with_classical_controls('a'))
|
|
809
823
|
with pytest.raises(
|
|
@@ -812,7 +826,7 @@ def test_unmeasured_condition():
|
|
|
812
826
|
_ = cirq.Simulator().simulate(bad_circuit)
|
|
813
827
|
|
|
814
828
|
|
|
815
|
-
def test_layered_circuit_operations_with_controls_in_between():
|
|
829
|
+
def test_layered_circuit_operations_with_controls_in_between() -> None:
|
|
816
830
|
q = cirq.LineQubit(0)
|
|
817
831
|
outer_subcircuit = cirq.CircuitOperation(
|
|
818
832
|
cirq.Circuit(
|
|
@@ -853,7 +867,7 @@ m: ═══^═══^═══
|
|
|
853
867
|
)
|
|
854
868
|
|
|
855
869
|
|
|
856
|
-
def test_sympy():
|
|
870
|
+
def test_sympy() -> None:
|
|
857
871
|
q0, q1, q2, q3, q_result = cirq.LineQubit.range(5)
|
|
858
872
|
for i in range(4):
|
|
859
873
|
for j in range(4):
|
|
@@ -878,7 +892,7 @@ def test_sympy():
|
|
|
878
892
|
assert result.measurements['m_result'][0][0] == (j > i)
|
|
879
893
|
|
|
880
894
|
|
|
881
|
-
def test_sympy_qudits():
|
|
895
|
+
def test_sympy_qudits() -> None:
|
|
882
896
|
q0 = cirq.LineQid(0, 3)
|
|
883
897
|
q1 = cirq.LineQid(1, 5)
|
|
884
898
|
q_result = cirq.LineQubit(2)
|
|
@@ -912,14 +926,14 @@ def test_sympy_qudits():
|
|
|
912
926
|
assert result.measurements['m_result'][0][0] == (i % 4 <= 1)
|
|
913
927
|
|
|
914
928
|
|
|
915
|
-
def test_sympy_path_prefix():
|
|
929
|
+
def test_sympy_path_prefix() -> None:
|
|
916
930
|
q = cirq.LineQubit(0)
|
|
917
931
|
op = cirq.X(q).with_classical_controls(sympy.Symbol('b'))
|
|
918
932
|
prefixed = cirq.with_key_path_prefix(op, ('0',))
|
|
919
933
|
assert cirq.control_keys(prefixed) == {'0:b'}
|
|
920
934
|
|
|
921
935
|
|
|
922
|
-
def test_sympy_scope():
|
|
936
|
+
def test_sympy_scope() -> None:
|
|
923
937
|
q = cirq.LineQubit(0)
|
|
924
938
|
a, b, c, d = sympy.symbols('a b c d')
|
|
925
939
|
inner = cirq.Circuit(
|
|
@@ -934,7 +948,7 @@ def test_sympy_scope():
|
|
|
934
948
|
outer_subcircuit = cirq.CircuitOperation(middle.freeze(), repetitions=2)
|
|
935
949
|
circuit = outer_subcircuit.mapped_circuit(deep=True)
|
|
936
950
|
internal_controls = [str(k) for op in circuit.all_operations() for k in cirq.control_keys(op)]
|
|
937
|
-
assert set(internal_controls) == {'
|
|
951
|
+
assert set(internal_controls) == {'a', 'b', 'c', 'd'}
|
|
938
952
|
assert cirq.control_keys(outer_subcircuit) == {'c', 'd'}
|
|
939
953
|
assert cirq.control_keys(circuit) == {'c', 'd'}
|
|
940
954
|
assert circuit == cirq.Circuit(cirq.decompose(outer_subcircuit))
|
|
@@ -964,34 +978,24 @@ d: ═══╩═════════════════════
|
|
|
964
978
|
use_unicode_characters=True,
|
|
965
979
|
)
|
|
966
980
|
|
|
967
|
-
# pylint: disable=line-too-long
|
|
968
981
|
cirq.testing.assert_has_diagram(
|
|
969
982
|
circuit,
|
|
970
983
|
"""
|
|
971
|
-
0:
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
1:1:a: ════════════════════════╬════════════════════════════════════════╬════════════════════════════════════╬════════════════════╬════════════════════════════════════@═══^════════════════════════════════════
|
|
982
|
-
║ ║ ║ ║ ║
|
|
983
|
-
1:b: ══════════════════════════╬════════════════════════════════════════╬════════════════════════════════════@════════════════════^════════════════════════════════════════^════════════════════════════════════
|
|
984
|
-
║ ║ ║ ║
|
|
985
|
-
c: ════════════════════════════^════════════════════════════════════════^═════════════════════════════════════════════════════════^════════════════════════════════════════^════════════════════════════════════
|
|
986
|
-
║ ║ ║ ║
|
|
987
|
-
d: ════════════════════════════^════════════════════════════════════════^═════════════════════════════════════════════════════════^════════════════════════════════════════^════════════════════════════════════
|
|
988
|
-
""",
|
|
984
|
+
0: ───M───M('0:c')───M───X(conditions=[c | d, a & b])───M───X(conditions=[c | d, a & b])───M───M('0:c')───M───X(conditions=[c | d, a & b])───M───X(conditions=[c | d, a & b])───
|
|
985
|
+
║ ║ ║ ║ ║ ║ ║ ║ ║ ║
|
|
986
|
+
a: ═══╬══════════════@═══^══════════════════════════════@═══^══════════════════════════════╬══════════════@═══^══════════════════════════════@═══^══════════════════════════════
|
|
987
|
+
║ ║ ║ ║ ║ ║
|
|
988
|
+
b: ═══@══════════════════^══════════════════════════════════^══════════════════════════════@══════════════════^══════════════════════════════════^══════════════════════════════
|
|
989
|
+
║ ║ ║ ║
|
|
990
|
+
c: ══════════════════════^══════════════════════════════════^═════════════════════════════════════════════════^══════════════════════════════════^══════════════════════════════
|
|
991
|
+
║ ║ ║ ║
|
|
992
|
+
d: ══════════════════════^══════════════════════════════════^═════════════════════════════════════════════════^══════════════════════════════════^══════════════════════════════
|
|
993
|
+
""", # noqa: E501
|
|
989
994
|
use_unicode_characters=True,
|
|
990
995
|
)
|
|
991
|
-
# pylint: enable=line-too-long
|
|
992
996
|
|
|
993
997
|
|
|
994
|
-
def test_sympy_scope_simulation():
|
|
998
|
+
def test_sympy_scope_simulation() -> None:
|
|
995
999
|
q0, q1, q2, q3, q_ignored, q_result = cirq.LineQubit.range(6)
|
|
996
1000
|
condition = sympy_parser.parse_expr('a & b | c & d')
|
|
997
1001
|
# We set up condition (a & b | c & d) plus an ignored measurement key, and run through the
|
|
@@ -1025,7 +1029,7 @@ def test_sympy_scope_simulation():
|
|
|
1025
1029
|
)
|
|
1026
1030
|
|
|
1027
1031
|
|
|
1028
|
-
def test_commutes():
|
|
1032
|
+
def test_commutes() -> None:
|
|
1029
1033
|
q0, q1 = cirq.LineQubit.range(2)
|
|
1030
1034
|
assert cirq.commutes(cirq.measure(q0, key='a'), cirq.X(q1).with_classical_controls('b'))
|
|
1031
1035
|
assert cirq.commutes(cirq.X(q1).with_classical_controls('b'), cirq.measure(q0, key='a'))
|
|
@@ -1042,7 +1046,7 @@ def test_commutes():
|
|
|
1042
1046
|
)
|
|
1043
1047
|
|
|
1044
1048
|
|
|
1045
|
-
def test_moment_diagram():
|
|
1049
|
+
def test_moment_diagram() -> None:
|
|
1046
1050
|
a, _, c, d = cirq.GridQubit.rect(2, 2)
|
|
1047
1051
|
m = cirq.Moment(cirq.CZ(a, d), cirq.X(c).with_classical_controls('m'))
|
|
1048
1052
|
assert (
|
|
@@ -1058,7 +1062,7 @@ def test_moment_diagram():
|
|
|
1058
1062
|
)
|
|
1059
1063
|
|
|
1060
1064
|
|
|
1061
|
-
def test_diagram_exponents():
|
|
1065
|
+
def test_diagram_exponents() -> None:
|
|
1062
1066
|
q0, q1 = cirq.LineQubit.range(2)
|
|
1063
1067
|
circuit = cirq.Circuit(
|
|
1064
1068
|
cirq.measure(q0, key='m'), (cirq.X(q1) ** 0.5).with_classical_controls('m')
|
|
@@ -1075,7 +1079,7 @@ m: ═══@═══^═══════
|
|
|
1075
1079
|
)
|
|
1076
1080
|
|
|
1077
1081
|
|
|
1078
|
-
def test_diagram_exponents_cx():
|
|
1082
|
+
def test_diagram_exponents_cx() -> None:
|
|
1079
1083
|
q0, q1, q2 = cirq.LineQubit.range(3)
|
|
1080
1084
|
circuit = cirq.Circuit(
|
|
1081
1085
|
cirq.measure(q0, key='m'), (cirq.CX(q2, q1) ** 0.5).with_classical_controls('m')
|
|
@@ -1094,7 +1098,7 @@ m: ═══@═══^═══════
|
|
|
1094
1098
|
)
|
|
1095
1099
|
|
|
1096
1100
|
|
|
1097
|
-
def test_diagram_exponents_multiple_keys():
|
|
1101
|
+
def test_diagram_exponents_multiple_keys() -> None:
|
|
1098
1102
|
q0, q1, q2 = cirq.LineQubit.range(3)
|
|
1099
1103
|
circuit = cirq.Circuit(
|
|
1100
1104
|
cirq.measure(q0, key='m0'),
|
|
@@ -1119,7 +1123,7 @@ m1: ═════@════^═══════
|
|
|
1119
1123
|
)
|
|
1120
1124
|
|
|
1121
1125
|
|
|
1122
|
-
def test_sympy_indexed_condition_circuit():
|
|
1126
|
+
def test_sympy_indexed_condition_circuit() -> None:
|
|
1123
1127
|
a = sympy.IndexedBase('a')
|
|
1124
1128
|
# XOR the 2nd and 3rd bits of the measurement (big-endian)
|
|
1125
1129
|
cond = cirq.SympyCondition(sympy.Xor(a[1], a[2]))
|