cirq-core 1.5.0.dev20250409225226__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.dev20250409225226.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.dev20250409225226.dist-info → cirq_core-1.6.0.dist-info}/WHEEL +1 -1
- cirq_core-1.5.0.dev20250409225226.dist-info/RECORD +0 -1216
- {cirq_core-1.5.0.dev20250409225226.dist-info → cirq_core-1.6.0.dist-info}/licenses/LICENSE +0 -0
- {cirq_core-1.5.0.dev20250409225226.dist-info → cirq_core-1.6.0.dist-info}/top_level.txt +0 -0
cirq/circuits/circuit_test.py
CHANGED
|
@@ -12,12 +12,14 @@
|
|
|
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 itertools
|
|
16
18
|
import os
|
|
17
19
|
import time
|
|
18
20
|
from collections import defaultdict
|
|
19
21
|
from random import randint, random, randrange, sample
|
|
20
|
-
from typing import Iterator,
|
|
22
|
+
from typing import Iterator, Sequence
|
|
21
23
|
|
|
22
24
|
import numpy as np
|
|
23
25
|
import pytest
|
|
@@ -53,7 +55,7 @@ BCONE = ValidatingTestDevice(
|
|
|
53
55
|
q0, q1, q2, q3 = cirq.LineQubit.range(4)
|
|
54
56
|
|
|
55
57
|
|
|
56
|
-
def test_from_moments():
|
|
58
|
+
def test_from_moments() -> None:
|
|
57
59
|
a, b, c, d = cirq.LineQubit.range(4)
|
|
58
60
|
moment = cirq.Moment(cirq.Z(a), cirq.Z(b))
|
|
59
61
|
subcircuit = cirq.FrozenCircuit.from_moments(cirq.X(c), cirq.Y(d))
|
|
@@ -81,15 +83,16 @@ def test_from_moments():
|
|
|
81
83
|
cirq.Moment(cirq.measure(a, b, key='ab'), cirq.measure(c, d, key='cd')),
|
|
82
84
|
)
|
|
83
85
|
assert circuit[0] is moment
|
|
86
|
+
assert isinstance(circuit[1].operations[0], cirq.CircuitOperation)
|
|
84
87
|
assert circuit[1].operations[0].circuit is subcircuit
|
|
85
88
|
|
|
86
89
|
|
|
87
|
-
def test_alignment():
|
|
90
|
+
def test_alignment() -> None:
|
|
88
91
|
assert repr(cirq.Alignment.LEFT) == 'cirq.Alignment.LEFT'
|
|
89
92
|
assert repr(cirq.Alignment.RIGHT) == 'cirq.Alignment.RIGHT'
|
|
90
93
|
|
|
91
94
|
|
|
92
|
-
def test_setitem():
|
|
95
|
+
def test_setitem() -> None:
|
|
93
96
|
circuit = cirq.Circuit([cirq.Moment(), cirq.Moment()])
|
|
94
97
|
|
|
95
98
|
circuit[1] = cirq.Moment([cirq.X(cirq.LineQubit(0))])
|
|
@@ -110,7 +113,7 @@ def test_setitem():
|
|
|
110
113
|
|
|
111
114
|
|
|
112
115
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
113
|
-
def test_equality(circuit_cls):
|
|
116
|
+
def test_equality(circuit_cls) -> None:
|
|
114
117
|
a = cirq.NamedQubit('a')
|
|
115
118
|
b = cirq.NamedQubit('b')
|
|
116
119
|
|
|
@@ -140,7 +143,7 @@ def test_equality(circuit_cls):
|
|
|
140
143
|
|
|
141
144
|
|
|
142
145
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
143
|
-
def test_approx_eq(circuit_cls):
|
|
146
|
+
def test_approx_eq(circuit_cls) -> None:
|
|
144
147
|
a = cirq.NamedQubit('a')
|
|
145
148
|
b = cirq.NamedQubit('b')
|
|
146
149
|
|
|
@@ -169,7 +172,7 @@ def test_approx_eq(circuit_cls):
|
|
|
169
172
|
)
|
|
170
173
|
|
|
171
174
|
|
|
172
|
-
def test_append_single():
|
|
175
|
+
def test_append_single() -> None:
|
|
173
176
|
a = cirq.NamedQubit('a')
|
|
174
177
|
|
|
175
178
|
c = cirq.Circuit()
|
|
@@ -191,7 +194,7 @@ def test_append_single():
|
|
|
191
194
|
)
|
|
192
195
|
|
|
193
196
|
|
|
194
|
-
def test_append_control_key():
|
|
197
|
+
def test_append_control_key() -> None:
|
|
195
198
|
q0, q1, q2 = cirq.LineQubit.range(3)
|
|
196
199
|
c = cirq.Circuit()
|
|
197
200
|
c.append(cirq.measure(q0, key='a'))
|
|
@@ -205,7 +208,7 @@ def test_append_control_key():
|
|
|
205
208
|
assert len(c) == 1
|
|
206
209
|
|
|
207
210
|
|
|
208
|
-
def test_append_multiple():
|
|
211
|
+
def test_append_multiple() -> None:
|
|
209
212
|
a = cirq.NamedQubit('a')
|
|
210
213
|
b = cirq.NamedQubit('b')
|
|
211
214
|
|
|
@@ -223,7 +226,7 @@ def test_append_multiple():
|
|
|
223
226
|
assert c == cirq.Circuit([cirq.Moment([cirq.X(a), cirq.X(b)])])
|
|
224
227
|
|
|
225
228
|
|
|
226
|
-
def test_append_control_key_subcircuit():
|
|
229
|
+
def test_append_control_key_subcircuit() -> None:
|
|
227
230
|
q0, q1 = cirq.LineQubit.range(2)
|
|
228
231
|
|
|
229
232
|
c = cirq.Circuit()
|
|
@@ -289,7 +292,7 @@ def test_append_control_key_subcircuit():
|
|
|
289
292
|
assert len(c) == 1
|
|
290
293
|
|
|
291
294
|
|
|
292
|
-
def test_measurement_key_paths():
|
|
295
|
+
def test_measurement_key_paths() -> None:
|
|
293
296
|
a = cirq.LineQubit(0)
|
|
294
297
|
circuit1 = cirq.Circuit(cirq.measure(a, key='A'))
|
|
295
298
|
assert cirq.measurement_key_names(circuit1) == {'A'}
|
|
@@ -299,7 +302,7 @@ def test_measurement_key_paths():
|
|
|
299
302
|
assert cirq.measurement_key_names(circuit3) == {'C:B:A'}
|
|
300
303
|
|
|
301
304
|
|
|
302
|
-
def test_append_moments():
|
|
305
|
+
def test_append_moments() -> None:
|
|
303
306
|
a = cirq.NamedQubit('a')
|
|
304
307
|
b = cirq.NamedQubit('b')
|
|
305
308
|
|
|
@@ -318,7 +321,7 @@ def test_append_moments():
|
|
|
318
321
|
|
|
319
322
|
|
|
320
323
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
321
|
-
def test_add_op_tree(circuit_cls):
|
|
324
|
+
def test_add_op_tree(circuit_cls) -> None:
|
|
322
325
|
a = cirq.NamedQubit('a')
|
|
323
326
|
b = cirq.NamedQubit('b')
|
|
324
327
|
|
|
@@ -335,7 +338,7 @@ def test_add_op_tree(circuit_cls):
|
|
|
335
338
|
|
|
336
339
|
|
|
337
340
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
338
|
-
def test_radd_op_tree(circuit_cls):
|
|
341
|
+
def test_radd_op_tree(circuit_cls) -> None:
|
|
339
342
|
a = cirq.NamedQubit('a')
|
|
340
343
|
b = cirq.NamedQubit('b')
|
|
341
344
|
|
|
@@ -353,6 +356,7 @@ def test_radd_op_tree(circuit_cls):
|
|
|
353
356
|
_ = 0 + c
|
|
354
357
|
|
|
355
358
|
# non-empty circuit addition
|
|
359
|
+
d: cirq.AbstractCircuit
|
|
356
360
|
if circuit_cls == cirq.FrozenCircuit:
|
|
357
361
|
d = cirq.FrozenCircuit(cirq.Y(b))
|
|
358
362
|
else:
|
|
@@ -364,7 +368,7 @@ def test_radd_op_tree(circuit_cls):
|
|
|
364
368
|
)
|
|
365
369
|
|
|
366
370
|
|
|
367
|
-
def test_add_iadd_equivalence():
|
|
371
|
+
def test_add_iadd_equivalence() -> None:
|
|
368
372
|
q0, q1 = cirq.LineQubit.range(2)
|
|
369
373
|
iadd_circuit = cirq.Circuit(cirq.X(q0))
|
|
370
374
|
iadd_circuit += cirq.H(q1)
|
|
@@ -374,13 +378,13 @@ def test_add_iadd_equivalence():
|
|
|
374
378
|
|
|
375
379
|
|
|
376
380
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
377
|
-
def test_bool(circuit_cls):
|
|
381
|
+
def test_bool(circuit_cls) -> None:
|
|
378
382
|
assert not circuit_cls()
|
|
379
383
|
assert circuit_cls(cirq.X(cirq.NamedQubit('a')))
|
|
380
384
|
|
|
381
385
|
|
|
382
386
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
383
|
-
def test_repr(circuit_cls):
|
|
387
|
+
def test_repr(circuit_cls) -> None:
|
|
384
388
|
assert repr(circuit_cls()) == f'cirq.{circuit_cls.__name__}()'
|
|
385
389
|
|
|
386
390
|
a = cirq.NamedQubit('a')
|
|
@@ -405,7 +409,7 @@ def test_repr(circuit_cls):
|
|
|
405
409
|
|
|
406
410
|
|
|
407
411
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
408
|
-
def test_empty_moments(circuit_cls):
|
|
412
|
+
def test_empty_moments(circuit_cls) -> None:
|
|
409
413
|
# 1-qubit test
|
|
410
414
|
op = cirq.X(cirq.NamedQubit('a'))
|
|
411
415
|
op_moment = cirq.Moment([op])
|
|
@@ -510,7 +514,7 @@ a b
|
|
|
510
514
|
|
|
511
515
|
|
|
512
516
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
513
|
-
def test_symbol_addition_in_gate_exponent(circuit_cls):
|
|
517
|
+
def test_symbol_addition_in_gate_exponent(circuit_cls) -> None:
|
|
514
518
|
# 1-qubit test
|
|
515
519
|
qubit = cirq.NamedQubit('a')
|
|
516
520
|
circuit = circuit_cls(
|
|
@@ -556,7 +560,7 @@ Y^(a + b)
|
|
|
556
560
|
|
|
557
561
|
|
|
558
562
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
559
|
-
def test_slice(circuit_cls):
|
|
563
|
+
def test_slice(circuit_cls) -> None:
|
|
560
564
|
a = cirq.NamedQubit('a')
|
|
561
565
|
b = cirq.NamedQubit('b')
|
|
562
566
|
c = circuit_cls(
|
|
@@ -581,7 +585,7 @@ def test_slice(circuit_cls):
|
|
|
581
585
|
assert c[0:2:-1] == circuit_cls()
|
|
582
586
|
|
|
583
587
|
|
|
584
|
-
def test_concatenate():
|
|
588
|
+
def test_concatenate() -> None:
|
|
585
589
|
a = cirq.NamedQubit('a')
|
|
586
590
|
b = cirq.NamedQubit('b')
|
|
587
591
|
|
|
@@ -614,7 +618,7 @@ def test_concatenate():
|
|
|
614
618
|
|
|
615
619
|
|
|
616
620
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
617
|
-
def test_multiply(circuit_cls):
|
|
621
|
+
def test_multiply(circuit_cls) -> None:
|
|
618
622
|
a = cirq.NamedQubit('a')
|
|
619
623
|
|
|
620
624
|
c = circuit_cls()
|
|
@@ -648,7 +652,7 @@ def test_multiply(circuit_cls):
|
|
|
648
652
|
|
|
649
653
|
|
|
650
654
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
651
|
-
def test_container_methods(circuit_cls):
|
|
655
|
+
def test_container_methods(circuit_cls) -> None:
|
|
652
656
|
a = cirq.NamedQubit('a')
|
|
653
657
|
b = cirq.NamedQubit('b')
|
|
654
658
|
c = circuit_cls(
|
|
@@ -670,7 +674,7 @@ def test_container_methods(circuit_cls):
|
|
|
670
674
|
|
|
671
675
|
|
|
672
676
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
673
|
-
def test_bad_index(circuit_cls):
|
|
677
|
+
def test_bad_index(circuit_cls) -> None:
|
|
674
678
|
a = cirq.NamedQubit('a')
|
|
675
679
|
b = cirq.NamedQubit('b')
|
|
676
680
|
c = circuit_cls([cirq.Moment([cirq.H(a), cirq.H(b)])])
|
|
@@ -678,7 +682,7 @@ def test_bad_index(circuit_cls):
|
|
|
678
682
|
_ = c['string']
|
|
679
683
|
|
|
680
684
|
|
|
681
|
-
def test_append_strategies():
|
|
685
|
+
def test_append_strategies() -> None:
|
|
682
686
|
a = cirq.NamedQubit('a')
|
|
683
687
|
b = cirq.NamedQubit('b')
|
|
684
688
|
stream = [cirq.X(a), cirq.CZ(a, b), cirq.X(b), cirq.X(b), cirq.X(a)]
|
|
@@ -718,7 +722,7 @@ def test_append_strategies():
|
|
|
718
722
|
)
|
|
719
723
|
|
|
720
724
|
|
|
721
|
-
def test_insert_op_tree_new():
|
|
725
|
+
def test_insert_op_tree_new() -> None:
|
|
722
726
|
a = cirq.NamedQubit('alice')
|
|
723
727
|
b = cirq.NamedQubit('bob')
|
|
724
728
|
c = cirq.Circuit()
|
|
@@ -751,7 +755,7 @@ def test_insert_op_tree_new():
|
|
|
751
755
|
c.insert(1, cirq.X(a), BAD_INSERT)
|
|
752
756
|
|
|
753
757
|
|
|
754
|
-
def test_insert_op_tree_newinline():
|
|
758
|
+
def test_insert_op_tree_newinline() -> None:
|
|
755
759
|
a = cirq.NamedQubit('alice')
|
|
756
760
|
b = cirq.NamedQubit('bob')
|
|
757
761
|
c = cirq.Circuit()
|
|
@@ -776,7 +780,7 @@ def test_insert_op_tree_newinline():
|
|
|
776
780
|
assert c == c2
|
|
777
781
|
|
|
778
782
|
|
|
779
|
-
def test_insert_op_tree_inline():
|
|
783
|
+
def test_insert_op_tree_inline() -> None:
|
|
780
784
|
a = cirq.NamedQubit('alice')
|
|
781
785
|
b = cirq.NamedQubit('bob')
|
|
782
786
|
c = cirq.Circuit([cirq.Moment([cirq.H(a)])])
|
|
@@ -796,7 +800,7 @@ def test_insert_op_tree_inline():
|
|
|
796
800
|
assert c.operation_at(qubits[i], actual_index) == op_list[i]
|
|
797
801
|
|
|
798
802
|
|
|
799
|
-
def test_insert_op_tree_earliest():
|
|
803
|
+
def test_insert_op_tree_earliest() -> None:
|
|
800
804
|
a = cirq.NamedQubit('alice')
|
|
801
805
|
b = cirq.NamedQubit('bob')
|
|
802
806
|
c = cirq.Circuit([cirq.Moment([cirq.H(a)])])
|
|
@@ -813,7 +817,7 @@ def test_insert_op_tree_earliest():
|
|
|
813
817
|
assert c.operation_at(qubits[i], actual_index[i]) == op_list[i]
|
|
814
818
|
|
|
815
819
|
|
|
816
|
-
def test_insert_moment():
|
|
820
|
+
def test_insert_moment() -> None:
|
|
817
821
|
a = cirq.NamedQubit('alice')
|
|
818
822
|
b = cirq.NamedQubit('bob')
|
|
819
823
|
c = cirq.Circuit()
|
|
@@ -831,18 +835,18 @@ def test_insert_moment():
|
|
|
831
835
|
assert c.operation_at(qubit, actual_index) == operation[0]
|
|
832
836
|
|
|
833
837
|
|
|
834
|
-
def test_circuit_length_inference():
|
|
838
|
+
def test_circuit_length_inference() -> None:
|
|
835
839
|
# tests that `get_earliest_accommodating_moment_index` properly computes circuit length
|
|
836
840
|
circuit = cirq.Circuit(cirq.X(cirq.q(0)))
|
|
837
|
-
qubit_indices = {cirq.q(0): 0}
|
|
838
|
-
mkey_indices = {}
|
|
839
|
-
ckey_indices = {}
|
|
841
|
+
qubit_indices: dict[cirq.Qid, int] = {cirq.q(0): 0}
|
|
842
|
+
mkey_indices: dict[cirq.MeasurementKey, int] = {}
|
|
843
|
+
ckey_indices: dict[cirq.MeasurementKey, int] = {}
|
|
840
844
|
assert circuits.circuit.get_earliest_accommodating_moment_index(
|
|
841
845
|
cirq.Moment(), qubit_indices, mkey_indices, ckey_indices
|
|
842
846
|
) == len(circuit)
|
|
843
847
|
|
|
844
848
|
|
|
845
|
-
def test_insert_inline_near_start():
|
|
849
|
+
def test_insert_inline_near_start() -> None:
|
|
846
850
|
a = cirq.NamedQubit('a')
|
|
847
851
|
b = cirq.NamedQubit('b')
|
|
848
852
|
|
|
@@ -865,7 +869,7 @@ def test_insert_inline_near_start():
|
|
|
865
869
|
)
|
|
866
870
|
|
|
867
871
|
|
|
868
|
-
def test_insert_at_frontier_init():
|
|
872
|
+
def test_insert_at_frontier_init() -> None:
|
|
869
873
|
x = cirq.NamedQubit('x')
|
|
870
874
|
op = cirq.X(x)
|
|
871
875
|
circuit = cirq.Circuit(op)
|
|
@@ -880,11 +884,11 @@ def test_insert_at_frontier_init():
|
|
|
880
884
|
|
|
881
885
|
with pytest.raises(ValueError):
|
|
882
886
|
circuit = cirq.Circuit([cirq.Moment(), cirq.Moment([op])])
|
|
883
|
-
frontier = {x: 2}
|
|
887
|
+
frontier: dict[cirq.Qid, int] = {x: 2}
|
|
884
888
|
circuit.insert_at_frontier(op, 0, frontier)
|
|
885
889
|
|
|
886
890
|
|
|
887
|
-
def test_insert_at_frontier():
|
|
891
|
+
def test_insert_at_frontier() -> None:
|
|
888
892
|
class Replacer(cirq.PointOptimizer):
|
|
889
893
|
def __init__(self, replacer=(lambda x: x)):
|
|
890
894
|
super().__init__()
|
|
@@ -892,7 +896,7 @@ def test_insert_at_frontier():
|
|
|
892
896
|
|
|
893
897
|
def optimization_at(
|
|
894
898
|
self, circuit: cirq.Circuit, index: int, op: cirq.Operation
|
|
895
|
-
) ->
|
|
899
|
+
) -> cirq.PointOptimizationSummary | None:
|
|
896
900
|
new_ops = self.replacer(op)
|
|
897
901
|
return cirq.PointOptimizationSummary(
|
|
898
902
|
clear_span=1, clear_qubits=op.qubits, new_operations=new_ops
|
|
@@ -989,7 +993,7 @@ d: ───@───────@───────
|
|
|
989
993
|
)
|
|
990
994
|
|
|
991
995
|
|
|
992
|
-
def test_insert_into_range():
|
|
996
|
+
def test_insert_into_range() -> None:
|
|
993
997
|
x = cirq.NamedQubit('x')
|
|
994
998
|
y = cirq.NamedQubit('y')
|
|
995
999
|
c = cirq.Circuit([cirq.Moment([cirq.X(x)])] * 4)
|
|
@@ -1038,7 +1042,7 @@ y: ───T───Y───Y───@───Y───@───H──
|
|
|
1038
1042
|
|
|
1039
1043
|
|
|
1040
1044
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
1041
|
-
def test_next_moment_operating_on(circuit_cls):
|
|
1045
|
+
def test_next_moment_operating_on(circuit_cls) -> None:
|
|
1042
1046
|
a = cirq.NamedQubit('a')
|
|
1043
1047
|
b = cirq.NamedQubit('b')
|
|
1044
1048
|
|
|
@@ -1078,7 +1082,7 @@ def test_next_moment_operating_on(circuit_cls):
|
|
|
1078
1082
|
|
|
1079
1083
|
|
|
1080
1084
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
1081
|
-
def test_next_moment_operating_on_distance(circuit_cls):
|
|
1085
|
+
def test_next_moment_operating_on_distance(circuit_cls) -> None:
|
|
1082
1086
|
a = cirq.NamedQubit('a')
|
|
1083
1087
|
|
|
1084
1088
|
c = circuit_cls(
|
|
@@ -1117,7 +1121,7 @@ def test_next_moment_operating_on_distance(circuit_cls):
|
|
|
1117
1121
|
|
|
1118
1122
|
|
|
1119
1123
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
1120
|
-
def test_prev_moment_operating_on(circuit_cls):
|
|
1124
|
+
def test_prev_moment_operating_on(circuit_cls) -> None:
|
|
1121
1125
|
a = cirq.NamedQubit('a')
|
|
1122
1126
|
b = cirq.NamedQubit('b')
|
|
1123
1127
|
|
|
@@ -1160,7 +1164,7 @@ def test_prev_moment_operating_on(circuit_cls):
|
|
|
1160
1164
|
|
|
1161
1165
|
|
|
1162
1166
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
1163
|
-
def test_prev_moment_operating_on_distance(circuit_cls):
|
|
1167
|
+
def test_prev_moment_operating_on_distance(circuit_cls) -> None:
|
|
1164
1168
|
a = cirq.NamedQubit('a')
|
|
1165
1169
|
|
|
1166
1170
|
c = circuit_cls(
|
|
@@ -1200,7 +1204,7 @@ def test_prev_moment_operating_on_distance(circuit_cls):
|
|
|
1200
1204
|
c.prev_moment_operating_on([a], 6, max_distance=-1)
|
|
1201
1205
|
|
|
1202
1206
|
|
|
1203
|
-
def test_earliest_available_moment():
|
|
1207
|
+
def test_earliest_available_moment() -> None:
|
|
1204
1208
|
q = cirq.LineQubit.range(3)
|
|
1205
1209
|
c = cirq.Circuit(
|
|
1206
1210
|
cirq.Moment(cirq.measure(q[0], key="m")),
|
|
@@ -1223,7 +1227,7 @@ def test_earliest_available_moment():
|
|
|
1223
1227
|
|
|
1224
1228
|
|
|
1225
1229
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
1226
|
-
def test_operation_at(circuit_cls):
|
|
1230
|
+
def test_operation_at(circuit_cls) -> None:
|
|
1227
1231
|
a = cirq.NamedQubit('a')
|
|
1228
1232
|
b = cirq.NamedQubit('b')
|
|
1229
1233
|
|
|
@@ -1246,7 +1250,7 @@ def test_operation_at(circuit_cls):
|
|
|
1246
1250
|
|
|
1247
1251
|
|
|
1248
1252
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
1249
|
-
def test_findall_operations(circuit_cls):
|
|
1253
|
+
def test_findall_operations(circuit_cls) -> None:
|
|
1250
1254
|
a = cirq.NamedQubit('a')
|
|
1251
1255
|
b = cirq.NamedQubit('b')
|
|
1252
1256
|
|
|
@@ -1290,7 +1294,7 @@ def test_findall_operations(circuit_cls):
|
|
|
1290
1294
|
|
|
1291
1295
|
|
|
1292
1296
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
1293
|
-
def test_findall_operations_with_gate(circuit_cls):
|
|
1297
|
+
def test_findall_operations_with_gate(circuit_cls) -> None:
|
|
1294
1298
|
a = cirq.NamedQubit('a')
|
|
1295
1299
|
b = cirq.NamedQubit('b')
|
|
1296
1300
|
c = circuit_cls(
|
|
@@ -1318,7 +1322,7 @@ def test_findall_operations_with_gate(circuit_cls):
|
|
|
1318
1322
|
|
|
1319
1323
|
def assert_findall_operations_until_blocked_as_expected(
|
|
1320
1324
|
circuit=None, start_frontier=None, is_blocker=None, expected_ops=None
|
|
1321
|
-
):
|
|
1325
|
+
) -> None:
|
|
1322
1326
|
if circuit is None:
|
|
1323
1327
|
circuit = cirq.Circuit()
|
|
1324
1328
|
if start_frontier is None:
|
|
@@ -1336,7 +1340,7 @@ def assert_findall_operations_until_blocked_as_expected(
|
|
|
1336
1340
|
|
|
1337
1341
|
|
|
1338
1342
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
1339
|
-
def test_findall_operations_until_blocked(circuit_cls):
|
|
1343
|
+
def test_findall_operations_until_blocked(circuit_cls) -> None:
|
|
1340
1344
|
a, b, c, d = cirq.LineQubit.range(4)
|
|
1341
1345
|
|
|
1342
1346
|
assert_findall_operations_until_blocked_as_expected()
|
|
@@ -1503,7 +1507,7 @@ def test_findall_operations_until_blocked(circuit_cls):
|
|
|
1503
1507
|
|
|
1504
1508
|
@pytest.mark.parametrize('seed', [randint(0, 2**31)])
|
|
1505
1509
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
1506
|
-
def test_findall_operations_until_blocked_docstring_examples(seed, circuit_cls):
|
|
1510
|
+
def test_findall_operations_until_blocked_docstring_examples(seed, circuit_cls) -> None:
|
|
1507
1511
|
prng = np.random.RandomState(seed)
|
|
1508
1512
|
|
|
1509
1513
|
class ExampleGate(cirq.Gate):
|
|
@@ -1616,7 +1620,7 @@ def test_findall_operations_until_blocked_docstring_examples(seed, circuit_cls):
|
|
|
1616
1620
|
|
|
1617
1621
|
|
|
1618
1622
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
1619
|
-
def test_has_measurements(circuit_cls):
|
|
1623
|
+
def test_has_measurements(circuit_cls) -> None:
|
|
1620
1624
|
a = cirq.NamedQubit('a')
|
|
1621
1625
|
b = cirq.NamedQubit('b')
|
|
1622
1626
|
|
|
@@ -1661,7 +1665,7 @@ def test_has_measurements(circuit_cls):
|
|
|
1661
1665
|
|
|
1662
1666
|
|
|
1663
1667
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
1664
|
-
def test_are_all_or_any_measurements_terminal(circuit_cls):
|
|
1668
|
+
def test_are_all_or_any_measurements_terminal(circuit_cls) -> None:
|
|
1665
1669
|
a = cirq.NamedQubit('a')
|
|
1666
1670
|
b = cirq.NamedQubit('b')
|
|
1667
1671
|
|
|
@@ -1717,7 +1721,7 @@ def test_are_all_or_any_measurements_terminal(circuit_cls):
|
|
|
1717
1721
|
|
|
1718
1722
|
|
|
1719
1723
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
1720
|
-
def test_all_or_any_terminal(circuit_cls):
|
|
1724
|
+
def test_all_or_any_terminal(circuit_cls) -> None:
|
|
1721
1725
|
def is_x_pow_gate(op):
|
|
1722
1726
|
return isinstance(op.gate, cirq.XPowGate)
|
|
1723
1727
|
|
|
@@ -1785,7 +1789,7 @@ def test_all_or_any_terminal(circuit_cls):
|
|
|
1785
1789
|
assert not c.are_any_matches_terminal(is_circuit_op)
|
|
1786
1790
|
|
|
1787
1791
|
|
|
1788
|
-
def test_clear_operations_touching():
|
|
1792
|
+
def test_clear_operations_touching() -> None:
|
|
1789
1793
|
a = cirq.NamedQubit('a')
|
|
1790
1794
|
b = cirq.NamedQubit('b')
|
|
1791
1795
|
|
|
@@ -1847,7 +1851,7 @@ def test_clear_operations_touching():
|
|
|
1847
1851
|
|
|
1848
1852
|
|
|
1849
1853
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
1850
|
-
def test_all_qubits(circuit_cls):
|
|
1854
|
+
def test_all_qubits(circuit_cls) -> None:
|
|
1851
1855
|
a = cirq.NamedQubit('a')
|
|
1852
1856
|
b = cirq.NamedQubit('b')
|
|
1853
1857
|
|
|
@@ -1865,7 +1869,7 @@ def test_all_qubits(circuit_cls):
|
|
|
1865
1869
|
|
|
1866
1870
|
|
|
1867
1871
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
1868
|
-
def test_all_operations(circuit_cls):
|
|
1872
|
+
def test_all_operations(circuit_cls) -> None:
|
|
1869
1873
|
a = cirq.NamedQubit('a')
|
|
1870
1874
|
b = cirq.NamedQubit('b')
|
|
1871
1875
|
|
|
@@ -1899,7 +1903,7 @@ def test_all_operations(circuit_cls):
|
|
|
1899
1903
|
|
|
1900
1904
|
|
|
1901
1905
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
1902
|
-
def test_qid_shape_qubit(circuit_cls):
|
|
1906
|
+
def test_qid_shape_qubit(circuit_cls) -> None:
|
|
1903
1907
|
a = cirq.NamedQubit('a')
|
|
1904
1908
|
b = cirq.NamedQubit('b')
|
|
1905
1909
|
c = cirq.NamedQubit('c')
|
|
@@ -1915,7 +1919,7 @@ def test_qid_shape_qubit(circuit_cls):
|
|
|
1915
1919
|
|
|
1916
1920
|
|
|
1917
1921
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
1918
|
-
def test_qid_shape_qudit(circuit_cls):
|
|
1922
|
+
def test_qid_shape_qudit(circuit_cls) -> None:
|
|
1919
1923
|
class PlusOneMod3Gate(cirq.testing.SingleQubitGate):
|
|
1920
1924
|
def _qid_shape_(self):
|
|
1921
1925
|
return (3,)
|
|
@@ -1941,7 +1945,7 @@ def test_qid_shape_qudit(circuit_cls):
|
|
|
1941
1945
|
|
|
1942
1946
|
|
|
1943
1947
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
1944
|
-
def test_to_text_diagram_teleportation_to_diagram(circuit_cls):
|
|
1948
|
+
def test_to_text_diagram_teleportation_to_diagram(circuit_cls) -> None:
|
|
1945
1949
|
ali = cirq.NamedQubit('(0, 0)')
|
|
1946
1950
|
bob = cirq.NamedQubit('(0, 1)')
|
|
1947
1951
|
msg = cirq.NamedQubit('(1, 0)')
|
|
@@ -2018,7 +2022,7 @@ M | M |
|
|
|
2018
2022
|
|
|
2019
2023
|
|
|
2020
2024
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
2021
|
-
def test_diagram_with_unknown_exponent(circuit_cls):
|
|
2025
|
+
def test_diagram_with_unknown_exponent(circuit_cls) -> None:
|
|
2022
2026
|
class WeirdGate(cirq.testing.SingleQubitGate):
|
|
2023
2027
|
def _circuit_diagram_info_(
|
|
2024
2028
|
self, args: cirq.CircuitDiagramInfoArgs
|
|
@@ -2038,7 +2042,7 @@ def test_diagram_with_unknown_exponent(circuit_cls):
|
|
|
2038
2042
|
|
|
2039
2043
|
|
|
2040
2044
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
2041
|
-
def test_circuit_diagram_on_gate_without_info(circuit_cls):
|
|
2045
|
+
def test_circuit_diagram_on_gate_without_info(circuit_cls) -> None:
|
|
2042
2046
|
q = cirq.NamedQubit('(0, 0)')
|
|
2043
2047
|
q2 = cirq.NamedQubit('(0, 1)')
|
|
2044
2048
|
q3 = cirq.NamedQubit('(0, 2)')
|
|
@@ -2079,7 +2083,7 @@ def test_circuit_diagram_on_gate_without_info(circuit_cls):
|
|
|
2079
2083
|
|
|
2080
2084
|
|
|
2081
2085
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
2082
|
-
def test_to_text_diagram_multi_qubit_gate(circuit_cls):
|
|
2086
|
+
def test_to_text_diagram_multi_qubit_gate(circuit_cls) -> None:
|
|
2083
2087
|
q1 = cirq.NamedQubit('(0, 0)')
|
|
2084
2088
|
q2 = cirq.NamedQubit('(0, 1)')
|
|
2085
2089
|
q3 = cirq.NamedQubit('(0, 2)')
|
|
@@ -2118,9 +2122,9 @@ M('msg')─M──────M
|
|
|
2118
2122
|
|
|
2119
2123
|
|
|
2120
2124
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
2121
|
-
def test_to_text_diagram_many_qubits_gate_but_multiple_wire_symbols(circuit_cls):
|
|
2125
|
+
def test_to_text_diagram_many_qubits_gate_but_multiple_wire_symbols(circuit_cls) -> None:
|
|
2122
2126
|
class BadGate(cirq.testing.ThreeQubitGate):
|
|
2123
|
-
def _circuit_diagram_info_(self, args: cirq.CircuitDiagramInfoArgs) ->
|
|
2127
|
+
def _circuit_diagram_info_(self, args: cirq.CircuitDiagramInfoArgs) -> tuple[str, str]:
|
|
2124
2128
|
return 'a', 'a'
|
|
2125
2129
|
|
|
2126
2130
|
q1 = cirq.NamedQubit('(0, 0)')
|
|
@@ -2132,7 +2136,7 @@ def test_to_text_diagram_many_qubits_gate_but_multiple_wire_symbols(circuit_cls)
|
|
|
2132
2136
|
|
|
2133
2137
|
|
|
2134
2138
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
2135
|
-
def test_to_text_diagram_parameterized_value(circuit_cls):
|
|
2139
|
+
def test_to_text_diagram_parameterized_value(circuit_cls) -> None:
|
|
2136
2140
|
q = cirq.NamedQubit('cube')
|
|
2137
2141
|
|
|
2138
2142
|
class PGate(cirq.testing.SingleQubitGate):
|
|
@@ -2154,7 +2158,7 @@ def test_to_text_diagram_parameterized_value(circuit_cls):
|
|
|
2154
2158
|
|
|
2155
2159
|
|
|
2156
2160
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
2157
|
-
def test_to_text_diagram_custom_order(circuit_cls):
|
|
2161
|
+
def test_to_text_diagram_custom_order(circuit_cls) -> None:
|
|
2158
2162
|
qa = cirq.NamedQubit('2')
|
|
2159
2163
|
qb = cirq.NamedQubit('3')
|
|
2160
2164
|
qc = cirq.NamedQubit('4')
|
|
@@ -2175,7 +2179,7 @@ def test_to_text_diagram_custom_order(circuit_cls):
|
|
|
2175
2179
|
|
|
2176
2180
|
|
|
2177
2181
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
2178
|
-
def test_overly_precise_diagram(circuit_cls):
|
|
2182
|
+
def test_overly_precise_diagram(circuit_cls) -> None:
|
|
2179
2183
|
# Test default precision of 3
|
|
2180
2184
|
qa = cirq.NamedQubit('a')
|
|
2181
2185
|
c = circuit_cls([cirq.Moment([cirq.X(qa) ** 0.12345678])])
|
|
@@ -2189,7 +2193,7 @@ a: ---X^0.123---
|
|
|
2189
2193
|
|
|
2190
2194
|
|
|
2191
2195
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
2192
|
-
def test_none_precision_diagram(circuit_cls):
|
|
2196
|
+
def test_none_precision_diagram(circuit_cls) -> None:
|
|
2193
2197
|
# Test default precision of 3
|
|
2194
2198
|
qa = cirq.NamedQubit('a')
|
|
2195
2199
|
c = circuit_cls([cirq.Moment([cirq.X(qa) ** 0.4921875])])
|
|
@@ -2204,7 +2208,7 @@ a: ---X^0.4921875---
|
|
|
2204
2208
|
|
|
2205
2209
|
|
|
2206
2210
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
2207
|
-
def test_diagram_custom_precision(circuit_cls):
|
|
2211
|
+
def test_diagram_custom_precision(circuit_cls) -> None:
|
|
2208
2212
|
qa = cirq.NamedQubit('a')
|
|
2209
2213
|
c = circuit_cls([cirq.Moment([cirq.X(qa) ** 0.12341234])])
|
|
2210
2214
|
cirq.testing.assert_has_diagram(
|
|
@@ -2218,7 +2222,7 @@ a: ---X^0.12341---
|
|
|
2218
2222
|
|
|
2219
2223
|
|
|
2220
2224
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
2221
|
-
def test_diagram_wgate(circuit_cls):
|
|
2225
|
+
def test_diagram_wgate(circuit_cls) -> None:
|
|
2222
2226
|
qa = cirq.NamedQubit('a')
|
|
2223
2227
|
test_wgate = cirq.PhasedXPowGate(exponent=0.12341234, phase_exponent=0.43214321)
|
|
2224
2228
|
c = circuit_cls([cirq.Moment([test_wgate.on(qa)])])
|
|
@@ -2233,7 +2237,7 @@ a: ---PhX(0.43)^(1/8)---
|
|
|
2233
2237
|
|
|
2234
2238
|
|
|
2235
2239
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
2236
|
-
def test_diagram_wgate_none_precision(circuit_cls):
|
|
2240
|
+
def test_diagram_wgate_none_precision(circuit_cls) -> None:
|
|
2237
2241
|
qa = cirq.NamedQubit('a')
|
|
2238
2242
|
test_wgate = cirq.PhasedXPowGate(exponent=0.12341234, phase_exponent=0.43214321)
|
|
2239
2243
|
c = circuit_cls([cirq.Moment([test_wgate.on(qa)])])
|
|
@@ -2248,7 +2252,7 @@ a: ---PhX(0.43214321)^0.12341234---
|
|
|
2248
2252
|
|
|
2249
2253
|
|
|
2250
2254
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
2251
|
-
def test_diagram_global_phase(circuit_cls):
|
|
2255
|
+
def test_diagram_global_phase(circuit_cls) -> None:
|
|
2252
2256
|
qa = cirq.NamedQubit('a')
|
|
2253
2257
|
global_phase = cirq.global_phase_operation(coefficient=1j)
|
|
2254
2258
|
c = circuit_cls([global_phase])
|
|
@@ -2297,7 +2301,7 @@ global phase: 0.5π 0.5π
|
|
|
2297
2301
|
|
|
2298
2302
|
|
|
2299
2303
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
2300
|
-
def test_has_unitary(circuit_cls):
|
|
2304
|
+
def test_has_unitary(circuit_cls) -> None:
|
|
2301
2305
|
class NonUnitary(cirq.testing.SingleQubitGate):
|
|
2302
2306
|
pass
|
|
2303
2307
|
|
|
@@ -2320,7 +2324,7 @@ def test_has_unitary(circuit_cls):
|
|
|
2320
2324
|
|
|
2321
2325
|
|
|
2322
2326
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
2323
|
-
def test_text_diagram_jupyter(circuit_cls):
|
|
2327
|
+
def test_text_diagram_jupyter(circuit_cls) -> None:
|
|
2324
2328
|
a = cirq.NamedQubit('a')
|
|
2325
2329
|
b = cirq.NamedQubit('b')
|
|
2326
2330
|
c = cirq.NamedQubit('c')
|
|
@@ -2351,7 +2355,7 @@ def test_text_diagram_jupyter(circuit_cls):
|
|
|
2351
2355
|
|
|
2352
2356
|
|
|
2353
2357
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
2354
|
-
def test_circuit_to_unitary_matrix(circuit_cls):
|
|
2358
|
+
def test_circuit_to_unitary_matrix(circuit_cls) -> None:
|
|
2355
2359
|
a = cirq.NamedQubit('a')
|
|
2356
2360
|
b = cirq.NamedQubit('b')
|
|
2357
2361
|
|
|
@@ -2475,7 +2479,7 @@ def test_circuit_to_unitary_matrix(circuit_cls):
|
|
|
2475
2479
|
|
|
2476
2480
|
|
|
2477
2481
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
2478
|
-
def test_circuit_unitary(circuit_cls):
|
|
2482
|
+
def test_circuit_unitary(circuit_cls) -> None:
|
|
2479
2483
|
q = cirq.NamedQubit('q')
|
|
2480
2484
|
|
|
2481
2485
|
with_inner_measure = circuit_cls(cirq.H(q), cirq.measure(q), cirq.H(q))
|
|
@@ -2483,14 +2487,14 @@ def test_circuit_unitary(circuit_cls):
|
|
|
2483
2487
|
assert cirq.unitary(with_inner_measure, None) is None
|
|
2484
2488
|
|
|
2485
2489
|
cirq.testing.assert_allclose_up_to_global_phase(
|
|
2486
|
-
cirq.unitary(circuit_cls(cirq.X(q) ** 0.5
|
|
2490
|
+
cirq.unitary(circuit_cls(cirq.X(q) ** 0.5, cirq.measure(q))),
|
|
2487
2491
|
np.array([[1j, 1], [1, 1j]]) * np.sqrt(0.5),
|
|
2488
2492
|
atol=1e-8,
|
|
2489
2493
|
)
|
|
2490
2494
|
|
|
2491
2495
|
|
|
2492
2496
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
2493
|
-
def test_simple_circuits_to_unitary_matrix(circuit_cls):
|
|
2497
|
+
def test_simple_circuits_to_unitary_matrix(circuit_cls) -> None:
|
|
2494
2498
|
a = cirq.NamedQubit('a')
|
|
2495
2499
|
b = cirq.NamedQubit('b')
|
|
2496
2500
|
|
|
@@ -2526,7 +2530,7 @@ def test_simple_circuits_to_unitary_matrix(circuit_cls):
|
|
|
2526
2530
|
|
|
2527
2531
|
|
|
2528
2532
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
2529
|
-
def test_composite_gate_to_unitary_matrix(circuit_cls):
|
|
2533
|
+
def test_composite_gate_to_unitary_matrix(circuit_cls) -> None:
|
|
2530
2534
|
class CnotComposite(cirq.testing.TwoQubitGate):
|
|
2531
2535
|
def _decompose_(self, qubits):
|
|
2532
2536
|
q0, q1 = qubits
|
|
@@ -2545,7 +2549,7 @@ def test_composite_gate_to_unitary_matrix(circuit_cls):
|
|
|
2545
2549
|
cirq.testing.assert_allclose_up_to_global_phase(mat, mat_expected, atol=1e-8)
|
|
2546
2550
|
|
|
2547
2551
|
|
|
2548
|
-
def test_circuit_superoperator_too_many_qubits():
|
|
2552
|
+
def test_circuit_superoperator_too_many_qubits() -> None:
|
|
2549
2553
|
circuit = cirq.Circuit(cirq.IdentityGate(num_qubits=11).on(*cirq.LineQubit.range(11)))
|
|
2550
2554
|
assert not circuit._has_superoperator_()
|
|
2551
2555
|
with pytest.raises(ValueError, match="too many"):
|
|
@@ -2595,7 +2599,7 @@ def test_circuit_superoperator_too_many_qubits():
|
|
|
2595
2599
|
),
|
|
2596
2600
|
),
|
|
2597
2601
|
)
|
|
2598
|
-
def test_circuit_superoperator_fixed_values(circuit, expected_superoperator):
|
|
2602
|
+
def test_circuit_superoperator_fixed_values(circuit, expected_superoperator) -> None:
|
|
2599
2603
|
"""Tests Circuit._superoperator_() on a few simple circuits."""
|
|
2600
2604
|
assert circuit._has_superoperator_()
|
|
2601
2605
|
assert np.allclose(circuit._superoperator_(), expected_superoperator)
|
|
@@ -2613,7 +2617,7 @@ def test_circuit_superoperator_fixed_values(circuit, expected_superoperator):
|
|
|
2613
2617
|
([0.1, 0.2, 0.3], 3),
|
|
2614
2618
|
),
|
|
2615
2619
|
)
|
|
2616
|
-
def test_circuit_superoperator_depolarizing_channel_compositions(rs, n_qubits):
|
|
2620
|
+
def test_circuit_superoperator_depolarizing_channel_compositions(rs, n_qubits) -> None:
|
|
2617
2621
|
"""Tests Circuit._superoperator_() on compositions of depolarizing channels."""
|
|
2618
2622
|
|
|
2619
2623
|
def pauli_error_probability(r: float, n_qubits: int) -> float:
|
|
@@ -2699,7 +2703,7 @@ def density_operator_basis(n_qubits: int) -> Iterator[np.ndarray]:
|
|
|
2699
2703
|
),
|
|
2700
2704
|
),
|
|
2701
2705
|
)
|
|
2702
|
-
def test_compare_circuits_superoperator_to_simulation(circuit, initial_state):
|
|
2706
|
+
def test_compare_circuits_superoperator_to_simulation(circuit, initial_state) -> None:
|
|
2703
2707
|
"""Compares action of circuit superoperator and circuit simulation."""
|
|
2704
2708
|
assert circuit._has_superoperator_()
|
|
2705
2709
|
superoperator = circuit._superoperator_()
|
|
@@ -2714,7 +2718,7 @@ def test_compare_circuits_superoperator_to_simulation(circuit, initial_state):
|
|
|
2714
2718
|
|
|
2715
2719
|
|
|
2716
2720
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
2717
|
-
def test_expanding_gate_symbols(circuit_cls):
|
|
2721
|
+
def test_expanding_gate_symbols(circuit_cls) -> None:
|
|
2718
2722
|
class MultiTargetCZ(cirq.Gate):
|
|
2719
2723
|
def __init__(self, num_qubits):
|
|
2720
2724
|
self._num_qubits = num_qubits
|
|
@@ -2722,7 +2726,7 @@ def test_expanding_gate_symbols(circuit_cls):
|
|
|
2722
2726
|
def num_qubits(self) -> int:
|
|
2723
2727
|
return self._num_qubits
|
|
2724
2728
|
|
|
2725
|
-
def _circuit_diagram_info_(self, args: cirq.CircuitDiagramInfoArgs) ->
|
|
2729
|
+
def _circuit_diagram_info_(self, args: cirq.CircuitDiagramInfoArgs) -> tuple[str, ...]:
|
|
2726
2730
|
assert args.known_qubit_count is not None
|
|
2727
2731
|
return ('@',) + ('Z',) * (args.known_qubit_count - 1)
|
|
2728
2732
|
|
|
@@ -2762,7 +2766,7 @@ c: ───@───
|
|
|
2762
2766
|
|
|
2763
2767
|
|
|
2764
2768
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
2765
|
-
def test_transposed_diagram_exponent_order(circuit_cls):
|
|
2769
|
+
def test_transposed_diagram_exponent_order(circuit_cls) -> None:
|
|
2766
2770
|
a, b, c = cirq.LineQubit.range(3)
|
|
2767
2771
|
circuit = circuit_cls(cirq.CZ(a, b) ** -0.5, cirq.CZ(a, c) ** 0.5, cirq.CZ(b, c) ** 0.125)
|
|
2768
2772
|
cirq.testing.assert_has_diagram(
|
|
@@ -2782,7 +2786,7 @@ def test_transposed_diagram_exponent_order(circuit_cls):
|
|
|
2782
2786
|
|
|
2783
2787
|
|
|
2784
2788
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
2785
|
-
def test_transposed_diagram_can_depend_on_transpose(circuit_cls):
|
|
2789
|
+
def test_transposed_diagram_can_depend_on_transpose(circuit_cls) -> None:
|
|
2786
2790
|
class TestGate(cirq.Gate):
|
|
2787
2791
|
def num_qubits(self):
|
|
2788
2792
|
return 1
|
|
@@ -2805,7 +2809,7 @@ t
|
|
|
2805
2809
|
)
|
|
2806
2810
|
|
|
2807
2811
|
|
|
2808
|
-
def test_insert_moments():
|
|
2812
|
+
def test_insert_moments() -> None:
|
|
2809
2813
|
q = cirq.NamedQubit('q')
|
|
2810
2814
|
c = cirq.Circuit()
|
|
2811
2815
|
|
|
@@ -2829,7 +2833,7 @@ def test_insert_moments():
|
|
|
2829
2833
|
|
|
2830
2834
|
|
|
2831
2835
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
2832
|
-
def test_final_state_vector(circuit_cls):
|
|
2836
|
+
def test_final_state_vector(circuit_cls) -> None:
|
|
2833
2837
|
a = cirq.NamedQubit('a')
|
|
2834
2838
|
b = cirq.NamedQubit('b')
|
|
2835
2839
|
|
|
@@ -3001,7 +3005,7 @@ def test_final_state_vector(circuit_cls):
|
|
|
3001
3005
|
|
|
3002
3006
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
3003
3007
|
@pytest.mark.parametrize('resolve_fn', [cirq.resolve_parameters, cirq.resolve_parameters_once])
|
|
3004
|
-
def test_is_parameterized(circuit_cls, resolve_fn):
|
|
3008
|
+
def test_is_parameterized(circuit_cls, resolve_fn) -> None:
|
|
3005
3009
|
a, b = cirq.LineQubit.range(2)
|
|
3006
3010
|
circuit = circuit_cls(
|
|
3007
3011
|
cirq.CZ(a, b) ** sympy.Symbol('u'),
|
|
@@ -3019,7 +3023,7 @@ def test_is_parameterized(circuit_cls, resolve_fn):
|
|
|
3019
3023
|
|
|
3020
3024
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
3021
3025
|
@pytest.mark.parametrize('resolve_fn', [cirq.resolve_parameters, cirq.resolve_parameters_once])
|
|
3022
|
-
def test_resolve_parameters(circuit_cls, resolve_fn):
|
|
3026
|
+
def test_resolve_parameters(circuit_cls, resolve_fn) -> None:
|
|
3023
3027
|
a, b = cirq.LineQubit.range(2)
|
|
3024
3028
|
circuit = circuit_cls(
|
|
3025
3029
|
cirq.CZ(a, b) ** sympy.Symbol('u'),
|
|
@@ -3049,7 +3053,7 @@ def test_resolve_parameters(circuit_cls, resolve_fn):
|
|
|
3049
3053
|
|
|
3050
3054
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
3051
3055
|
@pytest.mark.parametrize('resolve_fn', [cirq.resolve_parameters, cirq.resolve_parameters_once])
|
|
3052
|
-
def test_resolve_parameters_no_change(circuit_cls, resolve_fn):
|
|
3056
|
+
def test_resolve_parameters_no_change(circuit_cls, resolve_fn) -> None:
|
|
3053
3057
|
a, b = cirq.LineQubit.range(2)
|
|
3054
3058
|
circuit = circuit_cls(cirq.CZ(a, b), cirq.X(a), cirq.Y(b))
|
|
3055
3059
|
resolved_circuit = resolve_fn(circuit, cirq.ParamResolver({'u': 0.1, 'v': 0.3, 'w': 0.2}))
|
|
@@ -3066,7 +3070,7 @@ def test_resolve_parameters_no_change(circuit_cls, resolve_fn):
|
|
|
3066
3070
|
|
|
3067
3071
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
3068
3072
|
@pytest.mark.parametrize('resolve_fn', [cirq.resolve_parameters, cirq.resolve_parameters_once])
|
|
3069
|
-
def test_parameter_names(circuit_cls, resolve_fn):
|
|
3073
|
+
def test_parameter_names(circuit_cls, resolve_fn) -> None:
|
|
3070
3074
|
a, b = cirq.LineQubit.range(2)
|
|
3071
3075
|
circuit = circuit_cls(
|
|
3072
3076
|
cirq.CZ(a, b) ** sympy.Symbol('u'),
|
|
@@ -3078,7 +3082,7 @@ def test_parameter_names(circuit_cls, resolve_fn):
|
|
|
3078
3082
|
assert cirq.parameter_names(resolved_circuit) == set()
|
|
3079
3083
|
|
|
3080
3084
|
|
|
3081
|
-
def test_items():
|
|
3085
|
+
def test_items() -> None:
|
|
3082
3086
|
a = cirq.NamedQubit('a')
|
|
3083
3087
|
b = cirq.NamedQubit('b')
|
|
3084
3088
|
c = cirq.Circuit()
|
|
@@ -3106,12 +3110,12 @@ def test_items():
|
|
|
3106
3110
|
cirq.testing.assert_same_circuits(c, cirq.Circuit([m1]))
|
|
3107
3111
|
|
|
3108
3112
|
with pytest.raises(TypeError):
|
|
3109
|
-
c[:] = [m1, 1]
|
|
3113
|
+
c[:] = [m1, 1] # type: ignore
|
|
3110
3114
|
with pytest.raises(TypeError):
|
|
3111
|
-
c[0] = 1
|
|
3115
|
+
c[0] = 1 # type: ignore[call-overload]
|
|
3112
3116
|
|
|
3113
3117
|
|
|
3114
|
-
def test_copy():
|
|
3118
|
+
def test_copy() -> None:
|
|
3115
3119
|
a = cirq.NamedQubit('a')
|
|
3116
3120
|
b = cirq.NamedQubit('b')
|
|
3117
3121
|
c = cirq.Circuit(cirq.X(a), cirq.CZ(a, b), cirq.Z(a), cirq.Z(b))
|
|
@@ -3122,7 +3126,7 @@ def test_copy():
|
|
|
3122
3126
|
assert c2 != c
|
|
3123
3127
|
|
|
3124
3128
|
|
|
3125
|
-
def test_batch_remove():
|
|
3129
|
+
def test_batch_remove() -> None:
|
|
3126
3130
|
a = cirq.NamedQubit('a')
|
|
3127
3131
|
b = cirq.NamedQubit('b')
|
|
3128
3132
|
original = cirq.Circuit(
|
|
@@ -3201,7 +3205,7 @@ def test_batch_remove():
|
|
|
3201
3205
|
assert after == original
|
|
3202
3206
|
|
|
3203
3207
|
|
|
3204
|
-
def test_batch_replace():
|
|
3208
|
+
def test_batch_replace() -> None:
|
|
3205
3209
|
a = cirq.NamedQubit('a')
|
|
3206
3210
|
b = cirq.NamedQubit('b')
|
|
3207
3211
|
original = cirq.Circuit(
|
|
@@ -3255,7 +3259,7 @@ def test_batch_replace():
|
|
|
3255
3259
|
)
|
|
3256
3260
|
|
|
3257
3261
|
|
|
3258
|
-
def test_batch_insert_into():
|
|
3262
|
+
def test_batch_insert_into() -> None:
|
|
3259
3263
|
a = cirq.NamedQubit('a')
|
|
3260
3264
|
b = cirq.NamedQubit('b')
|
|
3261
3265
|
c = cirq.NamedQubit('c')
|
|
@@ -3358,7 +3362,7 @@ def test_batch_insert_into():
|
|
|
3358
3362
|
assert after == original
|
|
3359
3363
|
|
|
3360
3364
|
|
|
3361
|
-
def test_batch_insert():
|
|
3365
|
+
def test_batch_insert() -> None:
|
|
3362
3366
|
a = cirq.NamedQubit('a')
|
|
3363
3367
|
b = cirq.NamedQubit('b')
|
|
3364
3368
|
original = cirq.Circuit(
|
|
@@ -3390,7 +3394,7 @@ def test_batch_insert():
|
|
|
3390
3394
|
)
|
|
3391
3395
|
|
|
3392
3396
|
|
|
3393
|
-
def test_batch_insert_multiple_same_index():
|
|
3397
|
+
def test_batch_insert_multiple_same_index() -> None:
|
|
3394
3398
|
a, b = cirq.LineQubit.range(2)
|
|
3395
3399
|
c = cirq.Circuit()
|
|
3396
3400
|
c.batch_insert([(0, cirq.Z(a)), (0, cirq.Z(b)), (0, cirq.Z(a))])
|
|
@@ -3399,21 +3403,21 @@ def test_batch_insert_multiple_same_index():
|
|
|
3399
3403
|
)
|
|
3400
3404
|
|
|
3401
3405
|
|
|
3402
|
-
def test_batch_insert_reverses_order_for_same_index_inserts():
|
|
3406
|
+
def test_batch_insert_reverses_order_for_same_index_inserts() -> None:
|
|
3403
3407
|
a, b = cirq.LineQubit.range(2)
|
|
3404
3408
|
c = cirq.Circuit()
|
|
3405
3409
|
c.batch_insert([(0, cirq.Z(a)), (0, cirq.CZ(a, b)), (0, cirq.Z(b))])
|
|
3406
3410
|
assert c == cirq.Circuit(cirq.Z(b), cirq.CZ(a, b), cirq.Z(a))
|
|
3407
3411
|
|
|
3408
3412
|
|
|
3409
|
-
def test_batch_insert_maintains_order_despite_multiple_previous_inserts():
|
|
3413
|
+
def test_batch_insert_maintains_order_despite_multiple_previous_inserts() -> None:
|
|
3410
3414
|
a, b = cirq.LineQubit.range(2)
|
|
3411
3415
|
c = cirq.Circuit(cirq.H(a))
|
|
3412
3416
|
c.batch_insert([(0, cirq.Z(a)), (0, cirq.Z(a)), (0, cirq.Z(a)), (1, cirq.CZ(a, b))])
|
|
3413
3417
|
assert c == cirq.Circuit([cirq.Z(a)] * 3, cirq.H(a), cirq.CZ(a, b))
|
|
3414
3418
|
|
|
3415
3419
|
|
|
3416
|
-
def test_batch_insert_doesnt_overshift_due_to_previous_shifts():
|
|
3420
|
+
def test_batch_insert_doesnt_overshift_due_to_previous_shifts() -> None:
|
|
3417
3421
|
a = cirq.NamedQubit('a')
|
|
3418
3422
|
c = cirq.Circuit([cirq.H(a)] * 3)
|
|
3419
3423
|
c.batch_insert([(0, cirq.Z(a)), (0, cirq.Z(a)), (1, cirq.X(a)), (2, cirq.Y(a))])
|
|
@@ -3422,7 +3426,7 @@ def test_batch_insert_doesnt_overshift_due_to_previous_shifts():
|
|
|
3422
3426
|
)
|
|
3423
3427
|
|
|
3424
3428
|
|
|
3425
|
-
def test_batch_insert_doesnt_overshift_due_to_inline_inserts():
|
|
3429
|
+
def test_batch_insert_doesnt_overshift_due_to_inline_inserts() -> None:
|
|
3426
3430
|
a, b = cirq.LineQubit.range(2)
|
|
3427
3431
|
c = cirq.Circuit(cirq.SWAP(a, b), cirq.SWAP(a, b), cirq.H(a), cirq.SWAP(a, b), cirq.SWAP(a, b))
|
|
3428
3432
|
c.batch_insert([(0, cirq.X(a)), (3, cirq.X(b)), (4, cirq.Y(a))])
|
|
@@ -3439,7 +3443,7 @@ def test_batch_insert_doesnt_overshift_due_to_inline_inserts():
|
|
|
3439
3443
|
|
|
3440
3444
|
|
|
3441
3445
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
3442
|
-
def test_next_moments_operating_on(circuit_cls):
|
|
3446
|
+
def test_next_moments_operating_on(circuit_cls) -> None:
|
|
3443
3447
|
for _ in range(20):
|
|
3444
3448
|
n_moments = randint(1, 10)
|
|
3445
3449
|
circuit = cirq.testing.random_circuit(randint(1, 20), n_moments, random())
|
|
@@ -3456,7 +3460,7 @@ def test_next_moments_operating_on(circuit_cls):
|
|
|
3456
3460
|
assert (not p) or (p < start)
|
|
3457
3461
|
|
|
3458
3462
|
|
|
3459
|
-
def test_pick_inserted_ops_moment_indices():
|
|
3463
|
+
def test_pick_inserted_ops_moment_indices() -> None:
|
|
3460
3464
|
for _ in range(20):
|
|
3461
3465
|
n_moments = randint(1, 10)
|
|
3462
3466
|
n_qubits = randint(1, 20)
|
|
@@ -3482,7 +3486,7 @@ def test_pick_inserted_ops_moment_indices():
|
|
|
3482
3486
|
assert actual_circuit == expected_circuit
|
|
3483
3487
|
|
|
3484
3488
|
|
|
3485
|
-
def test_push_frontier_new_moments():
|
|
3489
|
+
def test_push_frontier_new_moments() -> None:
|
|
3486
3490
|
operation = cirq.X(cirq.NamedQubit('q'))
|
|
3487
3491
|
insertion_index = 3
|
|
3488
3492
|
circuit = cirq.Circuit()
|
|
@@ -3492,7 +3496,7 @@ def test_push_frontier_new_moments():
|
|
|
3492
3496
|
)
|
|
3493
3497
|
|
|
3494
3498
|
|
|
3495
|
-
def test_push_frontier_random_circuit():
|
|
3499
|
+
def test_push_frontier_random_circuit() -> None:
|
|
3496
3500
|
for _ in range(20):
|
|
3497
3501
|
n_moments = randint(1, 10)
|
|
3498
3502
|
circuit = cirq.testing.random_circuit(randint(1, 20), n_moments, random())
|
|
@@ -3527,7 +3531,7 @@ def test_push_frontier_random_circuit():
|
|
|
3527
3531
|
@pytest.mark.parametrize(
|
|
3528
3532
|
'circuit', [cirq.testing.random_circuit(cirq.LineQubit.range(10), 10, 0.5) for _ in range(20)]
|
|
3529
3533
|
)
|
|
3530
|
-
def test_insert_operations_random_circuits(circuit):
|
|
3534
|
+
def test_insert_operations_random_circuits(circuit) -> None:
|
|
3531
3535
|
n_moments = len(circuit)
|
|
3532
3536
|
operations, insert_indices = [], []
|
|
3533
3537
|
for moment_index, moment in enumerate(circuit):
|
|
@@ -3539,7 +3543,7 @@ def test_insert_operations_random_circuits(circuit):
|
|
|
3539
3543
|
assert circuit == other_circuit
|
|
3540
3544
|
|
|
3541
3545
|
|
|
3542
|
-
def test_insert_zero_index():
|
|
3546
|
+
def test_insert_zero_index() -> None:
|
|
3543
3547
|
# Should always go to moment[0], independent of qubit order or earliest/inline strategy.
|
|
3544
3548
|
q0, q1 = cirq.LineQubit.range(2)
|
|
3545
3549
|
c0 = cirq.Circuit(cirq.X(q0))
|
|
@@ -3557,7 +3561,7 @@ def test_insert_zero_index():
|
|
|
3557
3561
|
assert c3 == expected
|
|
3558
3562
|
|
|
3559
3563
|
|
|
3560
|
-
def test_insert_earliest_on_previous_moment():
|
|
3564
|
+
def test_insert_earliest_on_previous_moment() -> None:
|
|
3561
3565
|
q = cirq.LineQubit(0)
|
|
3562
3566
|
c = cirq.Circuit(cirq.Moment(cirq.X(q)), cirq.Moment(), cirq.Moment(), cirq.Moment(cirq.Z(q)))
|
|
3563
3567
|
c.insert(3, cirq.Y(q), strategy=cirq.InsertStrategy.EARLIEST)
|
|
@@ -3567,7 +3571,7 @@ def test_insert_earliest_on_previous_moment():
|
|
|
3567
3571
|
)
|
|
3568
3572
|
|
|
3569
3573
|
|
|
3570
|
-
def test_insert_inline_end_of_circuit():
|
|
3574
|
+
def test_insert_inline_end_of_circuit() -> None:
|
|
3571
3575
|
# If end index is specified, INLINE should place all ops there independent of qubit order.
|
|
3572
3576
|
q0, q1 = cirq.LineQubit.range(2)
|
|
3573
3577
|
c0 = cirq.Circuit(cirq.X(q0))
|
|
@@ -3585,7 +3589,7 @@ def test_insert_inline_end_of_circuit():
|
|
|
3585
3589
|
assert c3 == expected
|
|
3586
3590
|
|
|
3587
3591
|
|
|
3588
|
-
def test_insert_operations_errors():
|
|
3592
|
+
def test_insert_operations_errors() -> None:
|
|
3589
3593
|
a, b, c = (cirq.NamedQubit(s) for s in 'abc')
|
|
3590
3594
|
with pytest.raises(ValueError):
|
|
3591
3595
|
circuit = cirq.Circuit([cirq.Moment([cirq.Z(c)])])
|
|
@@ -3607,7 +3611,7 @@ def test_insert_operations_errors():
|
|
|
3607
3611
|
|
|
3608
3612
|
|
|
3609
3613
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
3610
|
-
def test_to_qasm(circuit_cls):
|
|
3614
|
+
def test_to_qasm(circuit_cls) -> None:
|
|
3611
3615
|
q0 = cirq.NamedQubit('q0')
|
|
3612
3616
|
circuit = circuit_cls(cirq.X(q0), cirq.measure(q0, key='mmm'))
|
|
3613
3617
|
assert circuit.to_qasm() == cirq.qasm(circuit)
|
|
@@ -3649,7 +3653,7 @@ m_mmm[0] = measure q[0];
|
|
|
3649
3653
|
|
|
3650
3654
|
|
|
3651
3655
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
3652
|
-
def test_save_qasm(tmpdir, circuit_cls):
|
|
3656
|
+
def test_save_qasm(tmpdir, circuit_cls) -> None:
|
|
3653
3657
|
file_path = os.path.join(tmpdir, 'test.qasm')
|
|
3654
3658
|
q0 = cirq.NamedQubit('q0')
|
|
3655
3659
|
circuit = circuit_cls(cirq.X(q0))
|
|
@@ -3675,7 +3679,7 @@ x q[0];
|
|
|
3675
3679
|
|
|
3676
3680
|
|
|
3677
3681
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
3678
|
-
def test_findall_operations_between(circuit_cls):
|
|
3682
|
+
def test_findall_operations_between(circuit_cls) -> None:
|
|
3679
3683
|
a, b, c, d = cirq.LineQubit.range(4)
|
|
3680
3684
|
|
|
3681
3685
|
# 0: ───H───@───────────────────────────────────────@───H───
|
|
@@ -3755,7 +3759,7 @@ def test_findall_operations_between(circuit_cls):
|
|
|
3755
3759
|
|
|
3756
3760
|
|
|
3757
3761
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
3758
|
-
def test_reachable_frontier_from(circuit_cls):
|
|
3762
|
+
def test_reachable_frontier_from(circuit_cls) -> None:
|
|
3759
3763
|
a, b, c, d = cirq.LineQubit.range(4)
|
|
3760
3764
|
|
|
3761
3765
|
# 0: ───H───@───────────────────────────────────────@───H───
|
|
@@ -3825,7 +3829,7 @@ def test_reachable_frontier_from(circuit_cls):
|
|
|
3825
3829
|
|
|
3826
3830
|
|
|
3827
3831
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
3828
|
-
def test_submoments(circuit_cls):
|
|
3832
|
+
def test_submoments(circuit_cls) -> None:
|
|
3829
3833
|
a, b, c, d, e, f = cirq.LineQubit.range(6)
|
|
3830
3834
|
circuit = circuit_cls(
|
|
3831
3835
|
cirq.H.on(a),
|
|
@@ -3925,7 +3929,7 @@ def test_submoments(circuit_cls):
|
|
|
3925
3929
|
|
|
3926
3930
|
|
|
3927
3931
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
3928
|
-
def test_decompose(circuit_cls):
|
|
3932
|
+
def test_decompose(circuit_cls) -> None:
|
|
3929
3933
|
a, b = cirq.LineQubit.range(2)
|
|
3930
3934
|
assert cirq.decompose(circuit_cls(cirq.X(a), cirq.Y(b), cirq.CZ(a, b))) == [
|
|
3931
3935
|
cirq.X(a),
|
|
@@ -3935,7 +3939,7 @@ def test_decompose(circuit_cls):
|
|
|
3935
3939
|
|
|
3936
3940
|
|
|
3937
3941
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
3938
|
-
def test_measurement_key_mapping(circuit_cls):
|
|
3942
|
+
def test_measurement_key_mapping(circuit_cls) -> None:
|
|
3939
3943
|
a, b = cirq.LineQubit.range(2)
|
|
3940
3944
|
c = circuit_cls(cirq.X(a), cirq.measure(a, key='m1'), cirq.measure(b, key='m2'))
|
|
3941
3945
|
assert c.all_measurement_key_names() == {'m1', 'm2'}
|
|
@@ -3964,7 +3968,7 @@ def test_measurement_key_mapping(circuit_cls):
|
|
|
3964
3968
|
|
|
3965
3969
|
|
|
3966
3970
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
3967
|
-
def test_measurement_key_mapping_preserves_moments(circuit_cls):
|
|
3971
|
+
def test_measurement_key_mapping_preserves_moments(circuit_cls) -> None:
|
|
3968
3972
|
a, b = cirq.LineQubit.range(2)
|
|
3969
3973
|
c = circuit_cls(
|
|
3970
3974
|
cirq.Moment(cirq.X(a)),
|
|
@@ -3981,7 +3985,7 @@ def test_measurement_key_mapping_preserves_moments(circuit_cls):
|
|
|
3981
3985
|
|
|
3982
3986
|
|
|
3983
3987
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
3984
|
-
def test_inverse(circuit_cls):
|
|
3988
|
+
def test_inverse(circuit_cls) -> None:
|
|
3985
3989
|
a, b = cirq.LineQubit.range(2)
|
|
3986
3990
|
forward = circuit_cls((cirq.X**0.5)(a), (cirq.Y**-0.2)(b), cirq.CZ(a, b))
|
|
3987
3991
|
backward = circuit_cls((cirq.CZ ** (-1.0))(a, b), (cirq.X ** (-0.5))(a), (cirq.Y ** (0.2))(b))
|
|
@@ -4000,7 +4004,7 @@ def test_inverse(circuit_cls):
|
|
|
4000
4004
|
|
|
4001
4005
|
|
|
4002
4006
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
4003
|
-
def test_pow_valid_only_for_minus_1(circuit_cls):
|
|
4007
|
+
def test_pow_valid_only_for_minus_1(circuit_cls) -> None:
|
|
4004
4008
|
a, b = cirq.LineQubit.range(2)
|
|
4005
4009
|
forward = circuit_cls((cirq.X**0.5)(a), (cirq.Y**-0.2)(b), cirq.CZ(a, b))
|
|
4006
4010
|
|
|
@@ -4015,7 +4019,7 @@ def test_pow_valid_only_for_minus_1(circuit_cls):
|
|
|
4015
4019
|
|
|
4016
4020
|
|
|
4017
4021
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
4018
|
-
def test_moment_groups(circuit_cls):
|
|
4022
|
+
def test_moment_groups(circuit_cls) -> None:
|
|
4019
4023
|
qubits = [cirq.GridQubit(x, y) for x in range(8) for y in range(8)]
|
|
4020
4024
|
c0 = cirq.H(qubits[0])
|
|
4021
4025
|
c7 = cirq.H(qubits[7])
|
|
@@ -4053,7 +4057,7 @@ def test_moment_groups(circuit_cls):
|
|
|
4053
4057
|
|
|
4054
4058
|
|
|
4055
4059
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
4056
|
-
def test_moments_property(circuit_cls):
|
|
4060
|
+
def test_moments_property(circuit_cls) -> None:
|
|
4057
4061
|
q = cirq.NamedQubit('q')
|
|
4058
4062
|
c = circuit_cls(cirq.X(q), cirq.Y(q))
|
|
4059
4063
|
assert c.moments[0] == cirq.Moment([cirq.X(q)])
|
|
@@ -4061,16 +4065,17 @@ def test_moments_property(circuit_cls):
|
|
|
4061
4065
|
|
|
4062
4066
|
|
|
4063
4067
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
4064
|
-
def test_json_dict(circuit_cls):
|
|
4068
|
+
def test_json_dict(circuit_cls) -> None:
|
|
4065
4069
|
q0, q1 = cirq.LineQubit.range(2)
|
|
4066
4070
|
c = circuit_cls(cirq.CNOT(q0, q1))
|
|
4071
|
+
moments: Sequence[cirq.Moment]
|
|
4067
4072
|
moments = [cirq.Moment([cirq.CNOT(q0, q1)])]
|
|
4068
4073
|
if circuit_cls == cirq.FrozenCircuit:
|
|
4069
4074
|
moments = tuple(moments)
|
|
4070
4075
|
assert c._json_dict_() == {'moments': moments}
|
|
4071
4076
|
|
|
4072
4077
|
|
|
4073
|
-
def test_with_noise():
|
|
4078
|
+
def test_with_noise() -> None:
|
|
4074
4079
|
class Noise(cirq.NoiseModel):
|
|
4075
4080
|
def noisy_operation(self, operation):
|
|
4076
4081
|
yield operation
|
|
@@ -4105,7 +4110,7 @@ def test_with_noise():
|
|
|
4105
4110
|
|
|
4106
4111
|
|
|
4107
4112
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
4108
|
-
def test_init_contents(circuit_cls):
|
|
4113
|
+
def test_init_contents(circuit_cls) -> None:
|
|
4109
4114
|
a, b = cirq.LineQubit.range(2)
|
|
4110
4115
|
|
|
4111
4116
|
# Moments are not subject to insertion rules.
|
|
@@ -4127,7 +4132,7 @@ def test_init_contents(circuit_cls):
|
|
|
4127
4132
|
circuit_cls()
|
|
4128
4133
|
|
|
4129
4134
|
|
|
4130
|
-
def test_transform_qubits():
|
|
4135
|
+
def test_transform_qubits() -> None:
|
|
4131
4136
|
a, b, c = cirq.LineQubit.range(3)
|
|
4132
4137
|
original = cirq.Circuit(
|
|
4133
4138
|
cirq.X(a), cirq.CNOT(a, b), cirq.Moment(), cirq.Moment([cirq.CNOT(b, c)])
|
|
@@ -4136,7 +4141,12 @@ def test_transform_qubits():
|
|
|
4136
4141
|
desired = cirq.Circuit(
|
|
4137
4142
|
cirq.X(x), cirq.CNOT(x, y), cirq.Moment(), cirq.Moment([cirq.CNOT(y, z)])
|
|
4138
4143
|
)
|
|
4139
|
-
assert
|
|
4144
|
+
assert (
|
|
4145
|
+
original.transform_qubits(
|
|
4146
|
+
lambda q: cirq.GridQubit(10 + q.x, 20) # type: ignore[attr-defined]
|
|
4147
|
+
)
|
|
4148
|
+
== desired
|
|
4149
|
+
)
|
|
4140
4150
|
assert (
|
|
4141
4151
|
original.transform_qubits(
|
|
4142
4152
|
{
|
|
@@ -4148,11 +4158,11 @@ def test_transform_qubits():
|
|
|
4148
4158
|
== desired
|
|
4149
4159
|
)
|
|
4150
4160
|
with pytest.raises(TypeError, match='must be a function or dict'):
|
|
4151
|
-
_ = original.transform_qubits('bad arg')
|
|
4161
|
+
_ = original.transform_qubits('bad arg') # type: ignore[arg-type]
|
|
4152
4162
|
|
|
4153
4163
|
|
|
4154
4164
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
4155
|
-
def test_indexing_by_pair(circuit_cls):
|
|
4165
|
+
def test_indexing_by_pair(circuit_cls) -> None:
|
|
4156
4166
|
# 0: ───H───@───X───@───
|
|
4157
4167
|
# │ │
|
|
4158
4168
|
# 1: ───────H───@───@───
|
|
@@ -4254,7 +4264,7 @@ def test_indexing_by_pair(circuit_cls):
|
|
|
4254
4264
|
|
|
4255
4265
|
|
|
4256
4266
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
4257
|
-
def test_indexing_by_numpy_integer(circuit_cls):
|
|
4267
|
+
def test_indexing_by_numpy_integer(circuit_cls) -> None:
|
|
4258
4268
|
q = cirq.NamedQubit('q')
|
|
4259
4269
|
c = circuit_cls(cirq.X(q), cirq.Y(q))
|
|
4260
4270
|
|
|
@@ -4263,7 +4273,7 @@ def test_indexing_by_numpy_integer(circuit_cls):
|
|
|
4263
4273
|
|
|
4264
4274
|
|
|
4265
4275
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
4266
|
-
def test_all_measurement_key_names(circuit_cls):
|
|
4276
|
+
def test_all_measurement_key_names(circuit_cls) -> None:
|
|
4267
4277
|
class Unknown(cirq.testing.SingleQubitGate):
|
|
4268
4278
|
def _measurement_key_name_(self):
|
|
4269
4279
|
return 'test'
|
|
@@ -4296,7 +4306,7 @@ def test_all_measurement_key_names(circuit_cls):
|
|
|
4296
4306
|
).all_measurement_key_names() == {'x', 'y'}
|
|
4297
4307
|
|
|
4298
4308
|
|
|
4299
|
-
def test_zip():
|
|
4309
|
+
def test_zip() -> None:
|
|
4300
4310
|
a, b, c, d = cirq.LineQubit.range(4)
|
|
4301
4311
|
|
|
4302
4312
|
circuit1 = cirq.Circuit(cirq.H(a), cirq.CNOT(a, b))
|
|
@@ -4338,7 +4348,7 @@ def test_zip():
|
|
|
4338
4348
|
|
|
4339
4349
|
|
|
4340
4350
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
4341
|
-
def test_zip_alignment(circuit_cls):
|
|
4351
|
+
def test_zip_alignment(circuit_cls) -> None:
|
|
4342
4352
|
a, b, c = cirq.LineQubit.range(3)
|
|
4343
4353
|
|
|
4344
4354
|
circuit1 = circuit_cls([cirq.H(a)] * 5)
|
|
@@ -4365,7 +4375,7 @@ def test_zip_alignment(circuit_cls):
|
|
|
4365
4375
|
|
|
4366
4376
|
|
|
4367
4377
|
@pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])
|
|
4368
|
-
def test_repr_html_escaping(circuit_cls):
|
|
4378
|
+
def test_repr_html_escaping(circuit_cls) -> None:
|
|
4369
4379
|
class TestGate(cirq.Gate):
|
|
4370
4380
|
def num_qubits(self):
|
|
4371
4381
|
return 2
|
|
@@ -4386,7 +4396,7 @@ def test_repr_html_escaping(circuit_cls):
|
|
|
4386
4396
|
assert '|c>' in circuit._repr_html_()
|
|
4387
4397
|
|
|
4388
4398
|
|
|
4389
|
-
def test_concat_ragged():
|
|
4399
|
+
def test_concat_ragged() -> None:
|
|
4390
4400
|
a, b = cirq.LineQubit.range(2)
|
|
4391
4401
|
empty = cirq.Circuit()
|
|
4392
4402
|
|
|
@@ -4533,6 +4543,7 @@ def test_concat_ragged():
|
|
|
4533
4543
|
)
|
|
4534
4544
|
|
|
4535
4545
|
# Types.
|
|
4546
|
+
v: cirq.AbstractCircuit
|
|
4536
4547
|
v = ha.freeze().concat_ragged(empty)
|
|
4537
4548
|
assert type(v) is cirq.FrozenCircuit and v == ha.freeze()
|
|
4538
4549
|
v = ha.concat_ragged(empty.freeze())
|
|
@@ -4545,7 +4556,7 @@ def test_concat_ragged():
|
|
|
4545
4556
|
assert type(v) is cirq.FrozenCircuit and v == ha.freeze()
|
|
4546
4557
|
|
|
4547
4558
|
|
|
4548
|
-
def test_concat_ragged_alignment():
|
|
4559
|
+
def test_concat_ragged_alignment() -> None:
|
|
4549
4560
|
a, b = cirq.LineQubit.range(2)
|
|
4550
4561
|
|
|
4551
4562
|
assert cirq.Circuit.concat_ragged(
|
|
@@ -4577,14 +4588,14 @@ def test_concat_ragged_alignment():
|
|
|
4577
4588
|
)
|
|
4578
4589
|
|
|
4579
4590
|
|
|
4580
|
-
def test_freeze_not_relocate_moments():
|
|
4591
|
+
def test_freeze_not_relocate_moments() -> None:
|
|
4581
4592
|
q = cirq.q(0)
|
|
4582
4593
|
c = cirq.Circuit(cirq.X(q), cirq.measure(q))
|
|
4583
4594
|
f = c.freeze()
|
|
4584
4595
|
assert [mc is fc for mc, fc in zip(c, f)] == [True, True]
|
|
4585
4596
|
|
|
4586
4597
|
|
|
4587
|
-
def test_freeze_is_cached():
|
|
4598
|
+
def test_freeze_is_cached() -> None:
|
|
4588
4599
|
q = cirq.q(0)
|
|
4589
4600
|
c = cirq.Circuit(cirq.X(q), cirq.measure(q))
|
|
4590
4601
|
f0 = c.freeze()
|
|
@@ -4643,7 +4654,7 @@ def test_freeze_is_cached():
|
|
|
4643
4654
|
),
|
|
4644
4655
|
],
|
|
4645
4656
|
)
|
|
4646
|
-
def test_mutation_clears_cached_attributes(circuit, mutate):
|
|
4657
|
+
def test_mutation_clears_cached_attributes(circuit, mutate) -> None:
|
|
4647
4658
|
cached_attributes = [
|
|
4648
4659
|
"_all_qubits",
|
|
4649
4660
|
"_frozen",
|
|
@@ -4678,7 +4689,7 @@ def test_mutation_clears_cached_attributes(circuit, mutate):
|
|
|
4678
4689
|
assert getattr(circuit, attr) is None, f"{attr=} is not None"
|
|
4679
4690
|
|
|
4680
4691
|
|
|
4681
|
-
def test_factorize_one_factor():
|
|
4692
|
+
def test_factorize_one_factor() -> None:
|
|
4682
4693
|
circuit = cirq.Circuit()
|
|
4683
4694
|
q0, q1, q2 = cirq.LineQubit.range(3)
|
|
4684
4695
|
circuit.append(
|
|
@@ -4697,7 +4708,7 @@ def test_factorize_one_factor():
|
|
|
4697
4708
|
cirq.testing.assert_has_diagram(factors[0], desired)
|
|
4698
4709
|
|
|
4699
4710
|
|
|
4700
|
-
def test_factorize_simple_circuit_two_factors():
|
|
4711
|
+
def test_factorize_simple_circuit_two_factors() -> None:
|
|
4701
4712
|
circuit = cirq.Circuit()
|
|
4702
4713
|
q0, q1, q2 = cirq.LineQubit.range(3)
|
|
4703
4714
|
circuit.append([cirq.H(q1), cirq.CZ(q0, q1), cirq.H(q2), cirq.H(q0), cirq.H(q0)])
|
|
@@ -4717,7 +4728,7 @@ def test_factorize_simple_circuit_two_factors():
|
|
|
4717
4728
|
cirq.testing.assert_has_diagram(f, d)
|
|
4718
4729
|
|
|
4719
4730
|
|
|
4720
|
-
def test_factorize_large_circuit():
|
|
4731
|
+
def test_factorize_large_circuit() -> None:
|
|
4721
4732
|
circuit = cirq.Circuit()
|
|
4722
4733
|
qubits = cirq.GridQubit.rect(3, 3)
|
|
4723
4734
|
circuit.append(cirq.Moment(cirq.X(q) for q in qubits))
|
|
@@ -4757,7 +4768,7 @@ def test_factorize_large_circuit():
|
|
|
4757
4768
|
cirq.testing.assert_has_diagram(f, d)
|
|
4758
4769
|
|
|
4759
4770
|
|
|
4760
|
-
def test_zero_target_operations_go_below_diagram():
|
|
4771
|
+
def test_zero_target_operations_go_below_diagram() -> None:
|
|
4761
4772
|
class CustomOperationAnnotation(cirq.Operation):
|
|
4762
4773
|
def __init__(self, text: str):
|
|
4763
4774
|
self.text = text
|
|
@@ -4872,7 +4883,7 @@ global phase: 0.5π
|
|
|
4872
4883
|
)
|
|
4873
4884
|
|
|
4874
4885
|
|
|
4875
|
-
def test_create_speed():
|
|
4886
|
+
def test_create_speed() -> None:
|
|
4876
4887
|
# Added in https://github.com/quantumlib/Cirq/pull/5332
|
|
4877
4888
|
# Previously this took ~30s to run. Now it should take ~150ms. However the coverage test can
|
|
4878
4889
|
# run this slowly, so allowing 4 sec to account for things like that. Feel free to increase the
|
|
@@ -4888,7 +4899,7 @@ def test_create_speed():
|
|
|
4888
4899
|
assert duration < 4
|
|
4889
4900
|
|
|
4890
4901
|
|
|
4891
|
-
def test_append_speed():
|
|
4902
|
+
def test_append_speed() -> None:
|
|
4892
4903
|
# Previously this took ~17s to run. Now it should take ~150ms. However the coverage test can
|
|
4893
4904
|
# run this slowly, so allowing 5 sec to account for things like that. Feel free to increase the
|
|
4894
4905
|
# buffer time or delete the test entirely if it ends up causing flakes.
|
|
@@ -4908,3 +4919,52 @@ def test_append_speed():
|
|
|
4908
4919
|
duration = time.perf_counter() - t
|
|
4909
4920
|
assert len(c) == moments
|
|
4910
4921
|
assert duration < 5
|
|
4922
|
+
|
|
4923
|
+
|
|
4924
|
+
def test_tagged_circuits() -> None:
|
|
4925
|
+
q = cirq.LineQubit(0)
|
|
4926
|
+
ops = [cirq.X(q), cirq.H(q)]
|
|
4927
|
+
tags = (sympy.Symbol("a"), "b")
|
|
4928
|
+
circuit = cirq.Circuit(ops)
|
|
4929
|
+
tagged_circuit = cirq.Circuit(ops, tags=tags)
|
|
4930
|
+
# Test equality
|
|
4931
|
+
assert tagged_circuit.tags == tags
|
|
4932
|
+
assert circuit != tagged_circuit
|
|
4933
|
+
assert not cirq.approx_eq(circuit, tagged_circuit)
|
|
4934
|
+
# Test _repr_ and _json_ round trips.
|
|
4935
|
+
cirq.testing.assert_equivalent_repr(tagged_circuit)
|
|
4936
|
+
cirq.testing.assert_json_roundtrip_works(tagged_circuit)
|
|
4937
|
+
# Test utility methods and constructors
|
|
4938
|
+
assert tagged_circuit.with_tags() is tagged_circuit
|
|
4939
|
+
assert circuit.with_tags(*tags) == tagged_circuit
|
|
4940
|
+
assert tagged_circuit.with_tags("c") == cirq.Circuit(ops, tags=[*tags, "c"])
|
|
4941
|
+
assert tagged_circuit.untagged == circuit
|
|
4942
|
+
assert circuit.untagged is circuit
|
|
4943
|
+
assert tagged_circuit.freeze().tags == tags
|
|
4944
|
+
assert tagged_circuit.unfreeze(copy=True).tags == tags
|
|
4945
|
+
assert tagged_circuit.unfreeze(copy=False).tags == tags
|
|
4946
|
+
# Test parameterized protocols
|
|
4947
|
+
assert cirq.is_parameterized(circuit) is False
|
|
4948
|
+
assert cirq.is_parameterized(tagged_circuit) is True
|
|
4949
|
+
assert cirq.parameter_names(tagged_circuit) == {"a"}
|
|
4950
|
+
assert cirq.resolve_parameters(tagged_circuit, {"a": 1}).tags == (1, "b")
|
|
4951
|
+
# Tags are not propagated to diagrams yet.
|
|
4952
|
+
assert str(circuit) == str(tagged_circuit)
|
|
4953
|
+
# Test tags are preserved through operations
|
|
4954
|
+
assert (tagged_circuit + circuit).tags == tags
|
|
4955
|
+
assert (circuit + tagged_circuit).tags == () # We only preserve the tags for the first one
|
|
4956
|
+
assert (2 * tagged_circuit).tags == tags
|
|
4957
|
+
assert (tagged_circuit * 2).tags == tags
|
|
4958
|
+
assert (tagged_circuit**-1).tags == tags
|
|
4959
|
+
assert tagged_circuit.with_noise(cirq.X).tags == tags
|
|
4960
|
+
for c in tagged_circuit.factorize():
|
|
4961
|
+
assert tagged_circuit.tags == tags
|
|
4962
|
+
|
|
4963
|
+
q2 = cirq.LineQubit(1)
|
|
4964
|
+
circuit2 = cirq.Circuit(cirq.X(q2), cirq.H(q2))
|
|
4965
|
+
assert tagged_circuit.zip(circuit2).tags == tags
|
|
4966
|
+
assert circuit2.zip(tagged_circuit).tags == () # We only preserve the tags for the first one
|
|
4967
|
+
assert tagged_circuit.concat_ragged(circuit2).tags == tags
|
|
4968
|
+
assert (
|
|
4969
|
+
circuit2.concat_ragged(tagged_circuit).tags == ()
|
|
4970
|
+
) # We only preserve the tags for the first one
|