cirq-core 1.5.0.dev20250409222543__py3-none-any.whl → 1.6.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of cirq-core might be problematic. Click here for more details.
- cirq/__init__.py +16 -17
- cirq/_compat.py +21 -20
- cirq/_compat_test.py +14 -34
- cirq/_doc.py +4 -2
- cirq/_import.py +8 -6
- cirq/_import_test.py +4 -2
- cirq/_version.py +6 -6
- cirq/_version_test.py +2 -2
- cirq/circuits/_block_diagram_drawer.py +11 -10
- cirq/circuits/_block_diagram_drawer_test.py +8 -6
- cirq/circuits/_box_drawing_character_data.py +8 -8
- cirq/circuits/_box_drawing_character_data_test.py +3 -1
- cirq/circuits/_bucket_priority_queue.py +9 -7
- cirq/circuits/_bucket_priority_queue_test.py +22 -20
- cirq/circuits/circuit.py +248 -172
- cirq/circuits/circuit_operation.py +73 -83
- cirq/circuits/circuit_operation_test.py +128 -90
- cirq/circuits/circuit_test.py +211 -151
- cirq/circuits/frozen_circuit.py +23 -60
- cirq/circuits/frozen_circuit_test.py +31 -8
- cirq/circuits/insert_strategy.py +7 -5
- cirq/circuits/insert_strategy_test.py +4 -2
- cirq/circuits/moment.py +88 -40
- cirq/circuits/moment_test.py +128 -51
- cirq/circuits/optimization_pass.py +5 -5
- cirq/circuits/optimization_pass_test.py +10 -10
- cirq/circuits/qasm_output.py +11 -11
- cirq/circuits/qasm_output_test.py +25 -22
- cirq/circuits/text_diagram_drawer.py +23 -38
- cirq/circuits/text_diagram_drawer_test.py +19 -17
- cirq/conftest.py +4 -3
- cirq/contrib/__init__.py +4 -4
- cirq/contrib/acquaintance/__init__.py +1 -1
- cirq/contrib/acquaintance/bipartite.py +5 -8
- cirq/contrib/acquaintance/bipartite_test.py +18 -13
- cirq/contrib/acquaintance/devices.py +2 -2
- cirq/contrib/acquaintance/devices_test.py +5 -3
- cirq/contrib/acquaintance/executor.py +5 -5
- cirq/contrib/acquaintance/executor_test.py +13 -9
- cirq/contrib/acquaintance/gates.py +18 -28
- cirq/contrib/acquaintance/gates_test.py +24 -20
- cirq/contrib/acquaintance/inspection_utils.py +8 -4
- cirq/contrib/acquaintance/inspection_utils_test.py +4 -2
- cirq/contrib/acquaintance/mutation_utils.py +4 -4
- cirq/contrib/acquaintance/mutation_utils_test.py +4 -2
- cirq/contrib/acquaintance/optimizers.py +4 -4
- cirq/contrib/acquaintance/optimizers_test.py +4 -1
- cirq/contrib/acquaintance/permutation.py +15 -27
- cirq/contrib/acquaintance/permutation_test.py +26 -17
- cirq/contrib/acquaintance/shift.py +4 -4
- cirq/contrib/acquaintance/shift_swap_network.py +4 -4
- cirq/contrib/acquaintance/shift_swap_network_test.py +9 -6
- cirq/contrib/acquaintance/shift_test.py +8 -6
- cirq/contrib/acquaintance/strategies/cubic.py +2 -2
- cirq/contrib/acquaintance/strategies/cubic_test.py +4 -2
- cirq/contrib/acquaintance/strategies/quartic_paired.py +6 -6
- cirq/contrib/acquaintance/strategies/quartic_paired_test.py +10 -6
- cirq/contrib/acquaintance/testing.py +2 -0
- cirq/contrib/acquaintance/topological_sort.py +2 -2
- cirq/contrib/acquaintance/topological_sort_test.py +3 -1
- cirq/contrib/bayesian_network/bayesian_network_gate.py +9 -10
- cirq/contrib/bayesian_network/bayesian_network_gate_test.py +14 -9
- cirq/contrib/circuitdag/circuit_dag.py +4 -4
- cirq/contrib/circuitdag/circuit_dag_test.py +17 -15
- cirq/contrib/custom_simulators/custom_state_simulator.py +5 -5
- cirq/contrib/custom_simulators/custom_state_simulator_test.py +22 -17
- cirq/contrib/graph_device/graph_device.py +12 -11
- cirq/contrib/graph_device/graph_device_test.py +18 -14
- cirq/contrib/graph_device/hypergraph.py +16 -14
- cirq/contrib/graph_device/hypergraph_test.py +13 -11
- cirq/contrib/graph_device/uniform_graph_device.py +6 -4
- cirq/contrib/graph_device/uniform_graph_device_test.py +11 -3
- cirq/contrib/hacks/disable_validation.py +6 -1
- cirq/contrib/hacks/disable_validation_test.py +3 -1
- cirq/contrib/json.py +31 -5
- cirq/contrib/json_test.py +6 -3
- cirq/contrib/json_test_data/DampedReadoutNoiseModel.json +12 -0
- cirq/contrib/json_test_data/DampedReadoutNoiseModel.repr +4 -0
- cirq/contrib/json_test_data/DepolarizingNoiseModel.json +12 -0
- cirq/contrib/json_test_data/DepolarizingNoiseModel.repr +4 -0
- cirq/contrib/json_test_data/DepolarizingWithDampedReadoutNoiseModel.json +6 -0
- cirq/contrib/json_test_data/DepolarizingWithDampedReadoutNoiseModel.repr +1 -0
- cirq/contrib/json_test_data/DepolarizingWithReadoutNoiseModel.json +5 -0
- cirq/contrib/json_test_data/DepolarizingWithReadoutNoiseModel.repr +1 -0
- cirq/contrib/json_test_data/ReadoutNoiseModel.json +12 -0
- cirq/contrib/json_test_data/ReadoutNoiseModel.repr +4 -0
- cirq/contrib/json_test_data/__init__.py +17 -0
- cirq/contrib/json_test_data/spec.py +32 -0
- cirq/contrib/noise_models/noise_models.py +119 -5
- cirq/contrib/noise_models/noise_models_test.py +37 -9
- cirq/contrib/paulistring/clifford_optimize.py +6 -4
- cirq/contrib/paulistring/clifford_optimize_test.py +6 -5
- cirq/contrib/paulistring/clifford_target_gateset.py +10 -10
- cirq/contrib/paulistring/clifford_target_gateset_test.py +13 -11
- cirq/contrib/paulistring/optimize.py +2 -0
- cirq/contrib/paulistring/optimize_test.py +4 -3
- cirq/contrib/paulistring/pauli_string_dag.py +2 -0
- cirq/contrib/paulistring/pauli_string_dag_test.py +3 -1
- cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py +255 -120
- cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation_test.py +398 -19
- cirq/contrib/paulistring/pauli_string_optimize.py +7 -1
- cirq/contrib/paulistring/pauli_string_optimize_test.py +5 -3
- cirq/contrib/paulistring/recombine.py +6 -4
- cirq/contrib/paulistring/recombine_test.py +3 -1
- cirq/contrib/paulistring/separate.py +9 -6
- cirq/contrib/paulistring/separate_test.py +3 -1
- cirq/contrib/qasm_import/_lexer.py +3 -2
- cirq/contrib/qasm_import/_lexer_test.py +49 -13
- cirq/contrib/qasm_import/_parser.py +547 -83
- cirq/contrib/qasm_import/_parser_test.py +988 -97
- cirq/contrib/qasm_import/exception.py +2 -0
- cirq/contrib/qasm_import/qasm.py +8 -2
- cirq/contrib/qasm_import/qasm_test.py +7 -4
- cirq/contrib/qcircuit/qcircuit_diagram_info.py +5 -5
- cirq/contrib/qcircuit/qcircuit_diagram_info_test.py +4 -1
- cirq/contrib/qcircuit/qcircuit_pdf.py +7 -3
- cirq/contrib/qcircuit/qcircuit_pdf_test.py +3 -1
- cirq/contrib/qcircuit/qcircuit_test.py +10 -8
- cirq/contrib/quantum_volume/quantum_volume.py +31 -27
- cirq/contrib/quantum_volume/quantum_volume_test.py +19 -16
- cirq/contrib/quimb/density_matrix.py +15 -14
- cirq/contrib/quimb/density_matrix_test.py +10 -7
- cirq/contrib/quimb/grid_circuits.py +5 -2
- cirq/contrib/quimb/grid_circuits_test.py +3 -0
- cirq/contrib/quimb/mps_simulator.py +20 -20
- cirq/contrib/quimb/mps_simulator_test.py +3 -0
- cirq/contrib/quimb/state_vector.py +12 -11
- cirq/contrib/quimb/state_vector_test.py +3 -0
- cirq/contrib/quirk/export_to_quirk.py +5 -3
- cirq/contrib/quirk/export_to_quirk_test.py +18 -16
- cirq/contrib/quirk/linearize_circuit.py +2 -0
- cirq/contrib/quirk/quirk_gate.py +18 -17
- cirq/contrib/routing/device.py +5 -3
- cirq/contrib/routing/device_test.py +2 -0
- cirq/contrib/routing/greedy.py +10 -21
- cirq/contrib/routing/greedy_test.py +4 -2
- cirq/contrib/routing/initialization.py +2 -2
- cirq/contrib/routing/initialization_test.py +5 -3
- cirq/contrib/routing/router.py +9 -5
- cirq/contrib/routing/router_test.py +2 -0
- cirq/contrib/routing/swap_network.py +3 -3
- cirq/contrib/routing/swap_network_test.py +3 -1
- cirq/contrib/routing/utils.py +2 -2
- cirq/contrib/routing/utils_test.py +3 -0
- cirq/contrib/shuffle_circuits/shuffle_circuits_with_readout_benchmarking.py +15 -9
- cirq/contrib/shuffle_circuits/shuffle_circuits_with_readout_benchmarking_test.py +3 -0
- cirq/contrib/svg/svg.py +3 -3
- cirq/contrib/svg/svg_test.py +8 -5
- cirq/devices/device.py +4 -4
- cirq/devices/device_test.py +7 -4
- cirq/devices/grid_device_metadata.py +10 -10
- cirq/devices/grid_device_metadata_test.py +3 -0
- cirq/devices/grid_qubit.py +29 -21
- cirq/devices/grid_qubit_test.py +3 -0
- cirq/devices/insertion_noise_model.py +7 -7
- cirq/devices/insertion_noise_model_test.py +7 -5
- cirq/devices/line_qubit.py +13 -13
- cirq/devices/line_qubit_test.py +2 -0
- cirq/devices/named_topologies.py +18 -29
- cirq/devices/named_topologies_test.py +13 -10
- cirq/devices/noise_model.py +3 -3
- cirq/devices/noise_model_test.py +19 -15
- cirq/devices/noise_properties.py +15 -6
- cirq/devices/noise_properties_test.py +34 -3
- cirq/devices/noise_utils.py +11 -9
- cirq/devices/noise_utils_test.py +2 -0
- cirq/devices/superconducting_qubits_noise_properties.py +23 -22
- cirq/devices/superconducting_qubits_noise_properties_test.py +6 -6
- cirq/devices/thermal_noise_model.py +107 -37
- cirq/devices/thermal_noise_model_test.py +21 -0
- cirq/devices/unconstrained_device.py +5 -3
- cirq/devices/unconstrained_device_test.py +2 -0
- cirq/experiments/__init__.py +4 -2
- cirq/experiments/benchmarking/__init__.py +17 -0
- cirq/experiments/benchmarking/parallel_xeb.py +677 -0
- cirq/experiments/benchmarking/parallel_xeb_test.py +447 -0
- cirq/experiments/fidelity_estimation.py +14 -8
- cirq/experiments/fidelity_estimation_test.py +3 -0
- cirq/experiments/n_qubit_tomography.py +17 -16
- cirq/experiments/n_qubit_tomography_test.py +8 -5
- cirq/experiments/purity_estimation.py +2 -0
- cirq/experiments/purity_estimation_test.py +2 -0
- cirq/experiments/qubit_characterizations.py +207 -103
- cirq/experiments/qubit_characterizations_test.py +40 -12
- cirq/experiments/random_quantum_circuit_generation.py +56 -70
- cirq/experiments/random_quantum_circuit_generation_test.py +11 -8
- cirq/experiments/readout_confusion_matrix.py +24 -22
- cirq/experiments/readout_confusion_matrix_test.py +2 -0
- cirq/experiments/single_qubit_readout_calibration.py +30 -15
- cirq/experiments/single_qubit_readout_calibration_test.py +5 -2
- cirq/experiments/t1_decay_experiment.py +9 -7
- cirq/experiments/t1_decay_experiment_test.py +13 -11
- cirq/experiments/t2_decay_experiment.py +16 -13
- cirq/experiments/t2_decay_experiment_test.py +2 -0
- cirq/experiments/two_qubit_xeb.py +64 -57
- cirq/experiments/two_qubit_xeb_test.py +10 -6
- cirq/experiments/xeb_fitting.py +39 -35
- cirq/experiments/xeb_sampling.py +37 -44
- cirq/experiments/xeb_sampling_test.py +3 -0
- cirq/experiments/xeb_simulation.py +14 -10
- cirq/experiments/xeb_simulation_test.py +5 -5
- cirq/experiments/z_phase_calibration.py +32 -29
- cirq/experiments/z_phase_calibration_test.py +3 -4
- cirq/interop/quirk/cells/__init__.py +1 -1
- cirq/interop/quirk/cells/all_cells.py +7 -2
- cirq/interop/quirk/cells/arithmetic_cells.py +29 -41
- cirq/interop/quirk/cells/arithmetic_cells_test.py +17 -14
- cirq/interop/quirk/cells/cell.py +19 -28
- cirq/interop/quirk/cells/cell_test.py +3 -0
- cirq/interop/quirk/cells/composite_cell.py +13 -28
- cirq/interop/quirk/cells/composite_cell_test.py +2 -0
- cirq/interop/quirk/cells/control_cells.py +15 -15
- cirq/interop/quirk/cells/control_cells_test.py +7 -5
- cirq/interop/quirk/cells/frequency_space_cells.py +4 -3
- cirq/interop/quirk/cells/frequency_space_cells_test.py +3 -1
- cirq/interop/quirk/cells/ignored_cells.py +3 -0
- cirq/interop/quirk/cells/ignored_cells_test.py +3 -1
- cirq/interop/quirk/cells/input_cells.py +7 -5
- cirq/interop/quirk/cells/input_cells_test.py +7 -5
- cirq/interop/quirk/cells/input_rotation_cells.py +15 -13
- cirq/interop/quirk/cells/input_rotation_cells_test.py +9 -7
- cirq/interop/quirk/cells/measurement_cells.py +5 -2
- cirq/interop/quirk/cells/measurement_cells_test.py +3 -1
- cirq/interop/quirk/cells/parse.py +22 -23
- cirq/interop/quirk/cells/parse_test.py +12 -10
- cirq/interop/quirk/cells/qubit_permutation_cells.py +5 -3
- cirq/interop/quirk/cells/qubit_permutation_cells_test.py +9 -7
- cirq/interop/quirk/cells/scalar_cells.py +4 -1
- cirq/interop/quirk/cells/scalar_cells_test.py +3 -1
- cirq/interop/quirk/cells/single_qubit_rotation_cells.py +5 -2
- cirq/interop/quirk/cells/single_qubit_rotation_cells_test.py +5 -3
- cirq/interop/quirk/cells/swap_cell.py +8 -6
- cirq/interop/quirk/cells/swap_cell_test.py +6 -4
- cirq/interop/quirk/cells/testing.py +6 -6
- cirq/interop/quirk/cells/testing_test.py +8 -6
- cirq/interop/quirk/cells/unsupported_cells.py +3 -0
- cirq/interop/quirk/cells/unsupported_cells_test.py +4 -2
- cirq/interop/quirk/url_to_circuit.py +23 -36
- cirq/interop/quirk/url_to_circuit_test.py +4 -1
- cirq/json_resolver_cache.py +14 -12
- cirq/linalg/__init__.py +4 -6
- cirq/linalg/combinators.py +7 -5
- cirq/linalg/combinators_test.py +10 -7
- cirq/linalg/decompositions.py +24 -35
- cirq/linalg/decompositions_test.py +3 -1
- cirq/linalg/diagonalize.py +6 -4
- cirq/linalg/diagonalize_test.py +15 -14
- cirq/linalg/operator_spaces.py +14 -14
- cirq/linalg/operator_spaces_test.py +13 -11
- cirq/linalg/predicates.py +18 -9
- cirq/linalg/predicates_test.py +5 -0
- cirq/linalg/tolerance.py +6 -3
- cirq/linalg/tolerance_test.py +6 -4
- cirq/linalg/transformations.py +23 -20
- cirq/linalg/transformations_test.py +73 -43
- cirq/neutral_atoms/convert_to_neutral_atom_gates.py +9 -3
- cirq/neutral_atoms/convert_to_neutral_atom_gates_test.py +3 -1
- cirq/neutral_atoms/neutral_atom_devices.py +2 -0
- cirq/ops/__init__.py +2 -0
- cirq/ops/arithmetic_operation.py +21 -21
- cirq/ops/arithmetic_operation_test.py +7 -8
- cirq/ops/boolean_hamiltonian.py +23 -22
- cirq/ops/boolean_hamiltonian_test.py +12 -9
- cirq/ops/classically_controlled_operation.py +31 -36
- cirq/ops/classically_controlled_operation_test.py +121 -117
- cirq/ops/clifford_gate.py +98 -81
- cirq/ops/clifford_gate_test.py +72 -57
- cirq/ops/common_channels.py +44 -44
- cirq/ops/common_channels_test.py +83 -81
- cirq/ops/common_gate_families.py +9 -7
- cirq/ops/common_gate_families_test.py +11 -7
- cirq/ops/common_gates.py +164 -183
- cirq/ops/common_gates_test.py +135 -95
- cirq/ops/control_values.py +23 -26
- cirq/ops/control_values_test.py +22 -20
- cirq/ops/controlled_gate.py +64 -112
- cirq/ops/controlled_gate_test.py +130 -35
- cirq/ops/controlled_operation.py +24 -35
- cirq/ops/controlled_operation_test.py +8 -6
- cirq/ops/dense_pauli_string.py +38 -49
- cirq/ops/dense_pauli_string_test.py +4 -2
- cirq/ops/diagonal_gate.py +18 -31
- cirq/ops/diagonal_gate_test.py +13 -13
- cirq/ops/eigen_gate.py +29 -29
- cirq/ops/eigen_gate_test.py +45 -28
- cirq/ops/fourier_transform.py +14 -20
- cirq/ops/fourier_transform_test.py +15 -12
- cirq/ops/fsim_gate.py +43 -42
- cirq/ops/fsim_gate_test.py +29 -29
- cirq/ops/gate_features.py +2 -0
- cirq/ops/gate_features_test.py +5 -3
- cirq/ops/gate_operation.py +43 -65
- cirq/ops/gate_operation_test.py +46 -42
- cirq/ops/gateset.py +28 -40
- cirq/ops/gateset_test.py +4 -2
- cirq/ops/global_phase_op.py +45 -20
- cirq/ops/global_phase_op_test.py +44 -20
- cirq/ops/greedy_qubit_manager.py +10 -8
- cirq/ops/greedy_qubit_manager_test.py +5 -3
- cirq/ops/identity.py +14 -12
- cirq/ops/identity_test.py +24 -20
- cirq/ops/kraus_channel.py +11 -8
- cirq/ops/kraus_channel_test.py +14 -11
- cirq/ops/linear_combinations.py +65 -77
- cirq/ops/linear_combinations_test.py +14 -9
- cirq/ops/matrix_gates.py +21 -18
- cirq/ops/matrix_gates_test.py +16 -0
- cirq/ops/measure_util.py +15 -20
- cirq/ops/measure_util_test.py +2 -0
- cirq/ops/measurement_gate.py +26 -37
- cirq/ops/measurement_gate_test.py +2 -0
- cirq/ops/mixed_unitary_channel.py +12 -9
- cirq/ops/mixed_unitary_channel_test.py +14 -11
- cirq/ops/named_qubit.py +16 -13
- cirq/ops/named_qubit_test.py +15 -13
- cirq/ops/op_tree.py +9 -7
- cirq/ops/op_tree_test.py +22 -19
- cirq/ops/parallel_gate.py +15 -17
- cirq/ops/parallel_gate_test.py +18 -16
- cirq/ops/parity_gates.py +23 -25
- cirq/ops/parity_gates_test.py +36 -32
- cirq/ops/pauli_gates.py +22 -21
- cirq/ops/pauli_gates_test.py +29 -20
- cirq/ops/pauli_interaction_gate.py +15 -19
- cirq/ops/pauli_interaction_gate_test.py +10 -8
- cirq/ops/pauli_measurement_gate.py +23 -35
- cirq/ops/pauli_measurement_gate_test.py +2 -0
- cirq/ops/pauli_string.py +92 -120
- cirq/ops/pauli_string_phasor.py +52 -45
- cirq/ops/pauli_string_phasor_test.py +4 -5
- cirq/ops/pauli_string_raw_types.py +9 -7
- cirq/ops/pauli_string_raw_types_test.py +2 -0
- cirq/ops/pauli_string_test.py +31 -154
- cirq/ops/pauli_sum_exponential.py +12 -12
- cirq/ops/pauli_sum_exponential_test.py +12 -10
- cirq/ops/permutation_gate.py +8 -6
- cirq/ops/permutation_gate_test.py +10 -8
- cirq/ops/phased_iswap_gate.py +16 -16
- cirq/ops/phased_iswap_gate_test.py +17 -15
- cirq/ops/phased_x_gate.py +16 -17
- cirq/ops/phased_x_gate_test.py +18 -16
- cirq/ops/phased_x_z_gate.py +24 -22
- cirq/ops/phased_x_z_gate_test.py +17 -11
- cirq/ops/projector.py +16 -11
- cirq/ops/projector_test.py +19 -16
- cirq/ops/qid_util.py +7 -5
- cirq/ops/qid_util_test.py +2 -0
- cirq/ops/qubit_manager.py +11 -9
- cirq/ops/qubit_manager_test.py +6 -4
- cirq/ops/qubit_order.py +11 -14
- cirq/ops/qubit_order_or_list.py +4 -2
- cirq/ops/qubit_order_test.py +12 -10
- cirq/ops/random_gate_channel.py +12 -10
- cirq/ops/random_gate_channel_test.py +14 -11
- cirq/ops/raw_types.py +109 -129
- cirq/ops/raw_types_test.py +63 -57
- cirq/ops/state_preparation_channel.py +7 -7
- cirq/ops/state_preparation_channel_test.py +11 -9
- cirq/ops/swap_gates.py +13 -15
- cirq/ops/swap_gates_test.py +19 -17
- cirq/ops/tags.py +5 -3
- cirq/ops/tags_test.py +4 -2
- cirq/ops/three_qubit_gates.py +43 -76
- cirq/ops/three_qubit_gates_test.py +19 -17
- cirq/ops/two_qubit_diagonal_gate.py +13 -13
- cirq/ops/two_qubit_diagonal_gate_test.py +10 -8
- cirq/ops/uniform_superposition_gate.py +5 -3
- cirq/ops/uniform_superposition_gate_test.py +5 -3
- cirq/ops/wait_gate.py +17 -14
- cirq/ops/wait_gate_test.py +9 -6
- cirq/protocols/__init__.py +0 -3
- cirq/protocols/act_on_protocol.py +8 -6
- cirq/protocols/act_on_protocol_test.py +15 -12
- cirq/protocols/apply_channel_protocol.py +10 -14
- cirq/protocols/apply_channel_protocol_test.py +2 -0
- cirq/protocols/apply_mixture_protocol.py +13 -42
- cirq/protocols/apply_mixture_protocol_test.py +7 -5
- cirq/protocols/apply_unitary_protocol.py +39 -34
- cirq/protocols/apply_unitary_protocol_test.py +4 -1
- cirq/protocols/approximate_equality_protocol.py +2 -0
- cirq/protocols/approximate_equality_protocol_test.py +2 -0
- cirq/protocols/circuit_diagram_info_protocol.py +58 -42
- cirq/protocols/circuit_diagram_info_protocol_test.py +70 -12
- cirq/protocols/commutes_protocol.py +8 -7
- cirq/protocols/commutes_protocol_test.py +2 -0
- cirq/protocols/control_key_protocol.py +6 -4
- cirq/protocols/control_key_protocol_test.py +3 -1
- cirq/protocols/decompose_protocol.py +49 -48
- cirq/protocols/decompose_protocol_test.py +27 -16
- cirq/protocols/equal_up_to_global_phase_protocol.py +2 -0
- cirq/protocols/equal_up_to_global_phase_protocol_test.py +9 -6
- cirq/protocols/has_stabilizer_effect_protocol.py +7 -5
- cirq/protocols/has_stabilizer_effect_protocol_test.py +7 -5
- cirq/protocols/has_unitary_protocol.py +10 -6
- cirq/protocols/has_unitary_protocol_test.py +13 -8
- cirq/protocols/hash_from_pickle_test.py +2 -11
- cirq/protocols/inverse_protocol.py +13 -16
- cirq/protocols/inverse_protocol_test.py +5 -3
- cirq/protocols/json_serialization.py +35 -54
- cirq/protocols/json_serialization_test.py +14 -21
- cirq/protocols/json_test_data/CXSWAP.json +46 -0
- cirq/protocols/json_test_data/CXSWAP.repr +13 -0
- cirq/protocols/json_test_data/CZSWAP.json +46 -0
- cirq/protocols/json_test_data/CZSWAP.repr +13 -0
- cirq/protocols/json_test_data/CircuitOperation.json +6 -3
- cirq/protocols/json_test_data/CircuitOperation.repr_inward +4 -2
- cirq/protocols/json_test_data/Moment.json +24 -1
- cirq/protocols/json_test_data/Moment.repr +6 -1
- cirq/protocols/json_test_data/ThermalNoiseModel.json +32 -0
- cirq/protocols/json_test_data/ThermalNoiseModel.repr +1 -0
- cirq/protocols/json_test_data/spec.py +6 -2
- cirq/protocols/kraus_protocol.py +47 -7
- cirq/protocols/kraus_protocol_test.py +86 -12
- cirq/protocols/measurement_key_protocol.py +15 -16
- cirq/protocols/measurement_key_protocol_test.py +13 -11
- cirq/protocols/mixture_protocol.py +7 -5
- cirq/protocols/mixture_protocol_test.py +4 -2
- cirq/protocols/mul_protocol.py +2 -3
- cirq/protocols/mul_protocol_test.py +2 -0
- cirq/protocols/pauli_expansion_protocol.py +6 -3
- cirq/protocols/pauli_expansion_protocol_test.py +5 -3
- cirq/protocols/phase_protocol.py +2 -0
- cirq/protocols/phase_protocol_test.py +3 -1
- cirq/protocols/pow_protocol.py +11 -16
- cirq/protocols/pow_protocol_test.py +2 -0
- cirq/protocols/qasm.py +14 -20
- cirq/protocols/qasm_test.py +6 -3
- cirq/protocols/qid_shape_protocol.py +8 -8
- cirq/protocols/qid_shape_protocol_test.py +3 -1
- cirq/protocols/resolve_parameters.py +5 -3
- cirq/protocols/resolve_parameters_test.py +8 -7
- cirq/protocols/trace_distance_bound.py +6 -4
- cirq/protocols/trace_distance_bound_test.py +3 -1
- cirq/protocols/unitary_protocol.py +17 -7
- cirq/protocols/unitary_protocol_test.py +12 -2
- cirq/qis/channels.py +6 -2
- cirq/qis/channels_test.py +20 -16
- cirq/qis/clifford_tableau.py +21 -19
- cirq/qis/clifford_tableau_test.py +2 -2
- cirq/qis/entropy.py +14 -3
- cirq/qis/entropy_test.py +3 -1
- cirq/qis/measures.py +13 -13
- cirq/qis/measures_test.py +20 -14
- cirq/qis/noise_utils.py +2 -0
- cirq/qis/noise_utils_test.py +9 -7
- cirq/qis/quantum_state_representation.py +7 -8
- cirq/qis/states.py +58 -56
- cirq/qis/states_test.py +2 -0
- cirq/sim/classical_simulator.py +23 -22
- cirq/sim/classical_simulator_test.py +2 -0
- cirq/sim/clifford/clifford_simulator.py +23 -21
- cirq/sim/clifford/clifford_simulator_test.py +7 -4
- cirq/sim/clifford/clifford_tableau_simulation_state.py +10 -7
- cirq/sim/clifford/clifford_tableau_simulation_state_test.py +5 -5
- cirq/sim/clifford/stabilizer_ch_form_simulation_state.py +8 -6
- cirq/sim/clifford/stabilizer_ch_form_simulation_state_test.py +8 -6
- cirq/sim/clifford/stabilizer_sampler.py +9 -7
- cirq/sim/clifford/stabilizer_sampler_test.py +4 -2
- cirq/sim/clifford/stabilizer_simulation_state.py +14 -13
- cirq/sim/clifford/stabilizer_simulation_state_test.py +6 -4
- cirq/sim/clifford/stabilizer_state_ch_form.py +13 -11
- cirq/sim/clifford/stabilizer_state_ch_form_test.py +4 -2
- cirq/sim/density_matrix_simulation_state.py +26 -27
- cirq/sim/density_matrix_simulation_state_test.py +10 -8
- cirq/sim/density_matrix_simulator.py +30 -28
- cirq/sim/density_matrix_simulator_test.py +48 -48
- cirq/sim/density_matrix_utils.py +13 -11
- cirq/sim/density_matrix_utils_test.py +38 -36
- cirq/sim/mux.py +33 -31
- cirq/sim/mux_test.py +3 -0
- cirq/sim/simulation_product_state.py +15 -15
- cirq/sim/simulation_product_state_test.py +29 -26
- cirq/sim/simulation_state.py +29 -38
- cirq/sim/simulation_state_base.py +21 -32
- cirq/sim/simulation_state_test.py +15 -13
- cirq/sim/simulation_utils.py +5 -2
- cirq/sim/simulation_utils_test.py +5 -2
- cirq/sim/simulator.py +90 -106
- cirq/sim/simulator_base.py +33 -45
- cirq/sim/simulator_base_test.py +20 -15
- cirq/sim/simulator_test.py +23 -14
- cirq/sim/sparse_simulator.py +19 -17
- cirq/sim/sparse_simulator_test.py +41 -40
- cirq/sim/state_vector.py +15 -12
- cirq/sim/state_vector_simulation_state.py +31 -31
- cirq/sim/state_vector_simulation_state_test.py +16 -14
- cirq/sim/state_vector_simulator.py +17 -14
- cirq/sim/state_vector_simulator_test.py +2 -0
- cirq/sim/state_vector_test.py +6 -3
- cirq/study/flatten_expressions.py +16 -15
- cirq/study/flatten_expressions_test.py +13 -11
- cirq/study/resolver.py +18 -17
- cirq/study/resolver_test.py +22 -20
- cirq/study/result.py +17 -27
- cirq/study/result_test.py +2 -0
- cirq/study/sweepable.py +12 -10
- cirq/study/sweepable_test.py +3 -0
- cirq/study/sweeps.py +42 -61
- cirq/study/sweeps_test.py +33 -0
- cirq/testing/__init__.py +7 -11
- cirq/testing/_compat_test_data/module_a/__init__.py +1 -0
- cirq/testing/_compat_test_data/module_a/module_b/__init__.py +1 -0
- cirq/testing/_compat_test_data/module_a/sub/__init__.py +1 -0
- cirq/testing/circuit_compare.py +8 -17
- cirq/testing/circuit_compare_test.py +2 -0
- cirq/testing/consistent_act_on.py +13 -11
- cirq/testing/consistent_act_on_test.py +5 -3
- cirq/testing/consistent_channels.py +2 -0
- cirq/testing/consistent_channels_test.py +10 -8
- cirq/testing/consistent_controlled_gate_op.py +5 -5
- cirq/testing/consistent_controlled_gate_op_test.py +18 -18
- cirq/testing/consistent_decomposition.py +2 -2
- cirq/testing/consistent_decomposition_test.py +4 -2
- cirq/testing/consistent_pauli_expansion.py +2 -0
- cirq/testing/consistent_pauli_expansion_test.py +3 -1
- cirq/testing/consistent_phase_by.py +2 -0
- cirq/testing/consistent_phase_by_test.py +3 -1
- cirq/testing/consistent_protocols.py +14 -20
- cirq/testing/consistent_protocols_test.py +13 -11
- cirq/testing/consistent_qasm.py +6 -4
- cirq/testing/consistent_qasm_test.py +7 -7
- cirq/testing/consistent_resolve_parameters.py +2 -0
- cirq/testing/consistent_specified_has_unitary.py +2 -2
- cirq/testing/consistent_specified_has_unitary_test.py +6 -4
- cirq/testing/consistent_unitary.py +1 -0
- cirq/testing/consistent_unitary_test.py +4 -2
- cirq/testing/deprecation.py +5 -2
- cirq/testing/deprecation_test.py +5 -2
- cirq/testing/devices.py +7 -4
- cirq/testing/devices_test.py +7 -4
- cirq/testing/equals_tester.py +4 -2
- cirq/testing/equals_tester_test.py +21 -17
- cirq/testing/equivalent_basis_map.py +6 -4
- cirq/testing/equivalent_basis_map_test.py +6 -4
- cirq/testing/equivalent_repr_eval.py +6 -4
- cirq/testing/equivalent_repr_eval_test.py +5 -3
- cirq/testing/gate_features.py +2 -0
- cirq/testing/gate_features_test.py +7 -5
- cirq/testing/json.py +19 -15
- cirq/testing/json_test.py +5 -3
- cirq/testing/lin_alg_utils.py +10 -11
- cirq/testing/lin_alg_utils_test.py +14 -12
- cirq/testing/logs.py +7 -6
- cirq/testing/logs_test.py +9 -7
- cirq/testing/no_identifier_qubit.py +4 -2
- cirq/testing/no_identifier_qubit_test.py +5 -3
- cirq/testing/op_tree.py +2 -0
- cirq/testing/op_tree_test.py +4 -1
- cirq/testing/order_tester.py +2 -0
- cirq/testing/order_tester_test.py +8 -6
- cirq/testing/pytest_utils.py +2 -0
- cirq/testing/pytest_utils_test.py +4 -2
- cirq/testing/random_circuit.py +21 -20
- cirq/testing/random_circuit_test.py +12 -9
- cirq/testing/repr_pretty_tester.py +1 -0
- cirq/testing/repr_pretty_tester_test.py +5 -3
- cirq/testing/routing_devices.py +4 -1
- cirq/testing/routing_devices_test.py +9 -6
- cirq/testing/sample_circuits.py +4 -1
- cirq/testing/sample_circuits_test.py +3 -1
- cirq/testing/sample_gates.py +3 -0
- cirq/testing/sample_gates_test.py +5 -2
- cirq/transformers/__init__.py +11 -4
- cirq/transformers/align.py +9 -7
- cirq/transformers/align_test.py +2 -0
- cirq/transformers/analytical_decompositions/__init__.py +3 -6
- cirq/transformers/analytical_decompositions/clifford_decomposition.py +18 -16
- cirq/transformers/analytical_decompositions/clifford_decomposition_test.py +2 -0
- cirq/transformers/analytical_decompositions/controlled_gate_decomposition.py +19 -16
- cirq/transformers/analytical_decompositions/controlled_gate_decomposition_test.py +2 -0
- cirq/transformers/analytical_decompositions/cphase_to_fsim.py +11 -9
- cirq/transformers/analytical_decompositions/cphase_to_fsim_test.py +5 -3
- cirq/transformers/analytical_decompositions/pauli_string_decomposition.py +5 -3
- cirq/transformers/analytical_decompositions/pauli_string_decomposition_test.py +5 -3
- cirq/transformers/analytical_decompositions/quantum_shannon_decomposition.py +141 -44
- cirq/transformers/analytical_decompositions/quantum_shannon_decomposition_test.py +35 -1
- cirq/transformers/analytical_decompositions/single_qubit_decompositions.py +8 -7
- cirq/transformers/analytical_decompositions/single_qubit_decompositions_test.py +2 -0
- cirq/transformers/analytical_decompositions/single_to_two_qubit_isometry.py +7 -4
- cirq/transformers/analytical_decompositions/single_to_two_qubit_isometry_test.py +3 -0
- cirq/transformers/analytical_decompositions/three_qubit_decomposition.py +11 -19
- cirq/transformers/analytical_decompositions/three_qubit_decomposition_test.py +8 -33
- cirq/transformers/analytical_decompositions/two_qubit_state_preparation.py +9 -11
- cirq/transformers/analytical_decompositions/two_qubit_state_preparation_test.py +2 -0
- cirq/transformers/analytical_decompositions/two_qubit_to_cz.py +91 -27
- cirq/transformers/analytical_decompositions/two_qubit_to_cz_test.py +36 -7
- cirq/transformers/analytical_decompositions/two_qubit_to_fsim.py +20 -21
- cirq/transformers/analytical_decompositions/two_qubit_to_fsim_test.py +8 -6
- cirq/transformers/analytical_decompositions/two_qubit_to_ms.py +13 -15
- cirq/transformers/analytical_decompositions/two_qubit_to_ms_test.py +3 -1
- cirq/transformers/analytical_decompositions/two_qubit_to_sqrt_iswap.py +39 -41
- cirq/transformers/analytical_decompositions/two_qubit_to_sqrt_iswap_test.py +2 -0
- cirq/transformers/drop_empty_moments.py +5 -3
- cirq/transformers/drop_empty_moments_test.py +4 -2
- cirq/transformers/drop_negligible_operations.py +7 -5
- cirq/transformers/drop_negligible_operations_test.py +2 -0
- cirq/transformers/dynamical_decoupling.py +49 -42
- cirq/transformers/dynamical_decoupling_test.py +223 -205
- cirq/transformers/eject_phased_paulis.py +28 -26
- cirq/transformers/eject_phased_paulis_test.py +12 -9
- cirq/transformers/eject_z.py +12 -12
- cirq/transformers/eject_z_test.py +2 -2
- cirq/transformers/expand_composite.py +6 -4
- cirq/transformers/expand_composite_test.py +3 -1
- cirq/transformers/gauge_compiling/__init__.py +3 -1
- cirq/transformers/gauge_compiling/cphase_gauge.py +2 -0
- cirq/transformers/gauge_compiling/cphase_gauge_test.py +2 -0
- cirq/transformers/gauge_compiling/cz_gauge.py +2 -0
- cirq/transformers/gauge_compiling/cz_gauge_test.py +1 -0
- cirq/transformers/gauge_compiling/gauge_compiling.py +45 -41
- cirq/transformers/gauge_compiling/gauge_compiling_test.py +2 -0
- cirq/transformers/gauge_compiling/gauge_compiling_test_utils.py +1 -0
- cirq/transformers/gauge_compiling/gauge_compiling_test_utils_test.py +5 -1
- cirq/transformers/gauge_compiling/iswap_gauge.py +2 -0
- cirq/transformers/gauge_compiling/iswap_gauge_test.py +1 -0
- cirq/transformers/gauge_compiling/spin_inversion_gauge.py +2 -0
- cirq/transformers/gauge_compiling/spin_inversion_gauge_test.py +2 -0
- cirq/transformers/gauge_compiling/sqrt_cz_gauge.py +7 -6
- cirq/transformers/gauge_compiling/sqrt_cz_gauge_test.py +2 -0
- cirq/transformers/gauge_compiling/sqrt_iswap_gauge.py +2 -0
- cirq/transformers/gauge_compiling/sqrt_iswap_gauge_test.py +2 -0
- cirq/transformers/heuristic_decompositions/gate_tabulation_math_utils.py +6 -3
- cirq/transformers/heuristic_decompositions/gate_tabulation_math_utils_test.py +3 -0
- cirq/transformers/heuristic_decompositions/two_qubit_gate_tabulation.py +12 -9
- cirq/transformers/heuristic_decompositions/two_qubit_gate_tabulation_test.py +9 -7
- cirq/transformers/insertion_sort.py +8 -6
- cirq/transformers/insertion_sort_test.py +3 -1
- cirq/transformers/measurement_transformers.py +29 -29
- cirq/transformers/measurement_transformers_test.py +2 -0
- cirq/transformers/merge_k_qubit_gates.py +12 -10
- cirq/transformers/merge_k_qubit_gates_test.py +18 -18
- cirq/transformers/merge_single_qubit_gates.py +197 -20
- cirq/transformers/merge_single_qubit_gates_test.py +177 -5
- cirq/transformers/noise_adding.py +5 -3
- cirq/transformers/noise_adding_test.py +2 -0
- cirq/transformers/optimize_for_target_gateset.py +19 -17
- cirq/transformers/optimize_for_target_gateset_test.py +11 -8
- cirq/transformers/qubit_management_transformers.py +13 -11
- cirq/transformers/qubit_management_transformers_test.py +5 -3
- cirq/transformers/randomized_measurements.py +16 -14
- cirq/transformers/randomized_measurements_test.py +10 -4
- cirq/transformers/routing/initial_mapper.py +6 -4
- cirq/transformers/routing/initial_mapper_test.py +2 -0
- cirq/transformers/routing/line_initial_mapper.py +16 -14
- cirq/transformers/routing/line_initial_mapper_test.py +9 -7
- cirq/transformers/routing/mapping_manager.py +10 -10
- cirq/transformers/routing/mapping_manager_test.py +2 -0
- cirq/transformers/routing/route_circuit_cqc.py +33 -31
- cirq/transformers/routing/route_circuit_cqc_test.py +15 -13
- cirq/transformers/routing/visualize_routed_circuit.py +8 -7
- cirq/transformers/routing/visualize_routed_circuit_test.py +4 -2
- cirq/transformers/stratify.py +17 -15
- cirq/transformers/stratify_test.py +3 -0
- cirq/transformers/symbolize.py +103 -0
- cirq/transformers/symbolize_test.py +62 -0
- cirq/transformers/synchronize_terminal_measurements.py +10 -10
- cirq/transformers/synchronize_terminal_measurements_test.py +12 -10
- cirq/transformers/tag_transformers.py +97 -0
- cirq/transformers/tag_transformers_test.py +103 -0
- cirq/transformers/target_gatesets/compilation_target_gateset.py +21 -19
- cirq/transformers/target_gatesets/compilation_target_gateset_test.py +20 -16
- cirq/transformers/target_gatesets/cz_gateset.py +7 -5
- cirq/transformers/target_gatesets/cz_gateset_test.py +21 -19
- cirq/transformers/target_gatesets/sqrt_iswap_gateset.py +9 -7
- cirq/transformers/target_gatesets/sqrt_iswap_gateset_test.py +25 -25
- cirq/transformers/transformer_api.py +34 -47
- cirq/transformers/transformer_api_test.py +9 -8
- cirq/transformers/transformer_primitives.py +39 -49
- cirq/transformers/transformer_primitives_test.py +10 -17
- cirq/value/abc_alt.py +6 -4
- cirq/value/abc_alt_test.py +5 -3
- cirq/value/angle.py +11 -12
- cirq/value/angle_test.py +5 -3
- cirq/value/classical_data.py +27 -27
- cirq/value/classical_data_test.py +11 -8
- cirq/value/condition.py +26 -24
- cirq/value/condition_test.py +2 -0
- cirq/value/digits.py +14 -11
- cirq/value/digits_test.py +2 -0
- cirq/value/duration.py +23 -20
- cirq/value/duration_test.py +2 -0
- cirq/value/linear_dict.py +25 -30
- cirq/value/linear_dict_test.py +10 -8
- cirq/value/measurement_key.py +12 -12
- cirq/value/measurement_key_test.py +2 -0
- cirq/value/periodic_value.py +4 -4
- cirq/value/periodic_value_test.py +11 -7
- cirq/value/probability.py +3 -1
- cirq/value/probability_test.py +4 -2
- cirq/value/product_state.py +15 -13
- cirq/value/product_state_test.py +4 -1
- cirq/value/random_state.py +2 -0
- cirq/value/random_state_test.py +5 -3
- cirq/value/timestamp.py +11 -7
- cirq/value/timestamp_test.py +14 -12
- cirq/value/type_alias.py +4 -4
- cirq/value/value_equality_attr.py +8 -9
- cirq/value/value_equality_attr_test.py +14 -11
- cirq/vis/density_matrix.py +3 -3
- cirq/vis/density_matrix_test.py +20 -17
- cirq/vis/heatmap.py +24 -37
- cirq/vis/heatmap_test.py +3 -0
- cirq/vis/histogram.py +9 -6
- cirq/vis/histogram_test.py +5 -2
- cirq/vis/state_histogram.py +10 -8
- cirq/vis/state_histogram_test.py +7 -5
- cirq/vis/vis_utils.py +4 -1
- cirq/vis/vis_utils_test.py +4 -1
- cirq/work/collector.py +12 -18
- cirq/work/collector_test.py +15 -10
- cirq/work/observable_grouping.py +6 -7
- cirq/work/observable_grouping_test.py +10 -9
- cirq/work/observable_measurement.py +47 -45
- cirq/work/observable_measurement_data.py +22 -17
- cirq/work/observable_measurement_data_test.py +4 -1
- cirq/work/observable_measurement_test.py +48 -29
- cirq/work/observable_readout_calibration.py +5 -2
- cirq/work/observable_readout_calibration_test.py +5 -2
- cirq/work/observable_settings.py +13 -22
- cirq/work/observable_settings_test.py +9 -7
- cirq/work/pauli_sum_collector.py +12 -10
- cirq/work/pauli_sum_collector_test.py +9 -9
- cirq/work/sampler.py +42 -43
- cirq/work/sampler_test.py +31 -24
- cirq/work/zeros_sampler.py +6 -4
- cirq/work/zeros_sampler_test.py +7 -5
- {cirq_core-1.5.0.dev20250409222543.dist-info → cirq_core-1.6.0.dist-info}/METADATA +7 -8
- cirq_core-1.6.0.dist-info/RECORD +1241 -0
- {cirq_core-1.5.0.dev20250409222543.dist-info → cirq_core-1.6.0.dist-info}/WHEEL +1 -1
- cirq_core-1.5.0.dev20250409222543.dist-info/RECORD +0 -1216
- {cirq_core-1.5.0.dev20250409222543.dist-info → cirq_core-1.6.0.dist-info}/licenses/LICENSE +0 -0
- {cirq_core-1.5.0.dev20250409222543.dist-info → cirq_core-1.6.0.dist-info}/top_level.txt +0 -0
|
@@ -12,7 +12,9 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
-
from
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
from typing import Any, Iterable, Iterator, TYPE_CHECKING
|
|
16
18
|
|
|
17
19
|
from cirq import ops, value
|
|
18
20
|
from cirq.interop.quirk.cells.cell import Cell, CellMaker
|
|
@@ -25,7 +27,7 @@ if TYPE_CHECKING:
|
|
|
25
27
|
class ControlCell(Cell):
|
|
26
28
|
"""A modifier that adds controls to other cells in the column."""
|
|
27
29
|
|
|
28
|
-
def __init__(self, qubit:
|
|
30
|
+
def __init__(self, qubit: cirq.Qid, basis_change: Iterable[cirq.Operation]):
|
|
29
31
|
self.qubit = qubit
|
|
30
32
|
self._basis_change = tuple(basis_change)
|
|
31
33
|
|
|
@@ -42,7 +44,7 @@ class ControlCell(Cell):
|
|
|
42
44
|
def gate_count(self) -> int:
|
|
43
45
|
return 0
|
|
44
46
|
|
|
45
|
-
def with_line_qubits_mapped_to(self, qubits:
|
|
47
|
+
def with_line_qubits_mapped_to(self, qubits: list[cirq.Qid]) -> Cell:
|
|
46
48
|
return ControlCell(
|
|
47
49
|
qubit=Cell._replace_qubit(self.qubit, qubits),
|
|
48
50
|
basis_change=tuple(
|
|
@@ -51,13 +53,13 @@ class ControlCell(Cell):
|
|
|
51
53
|
),
|
|
52
54
|
)
|
|
53
55
|
|
|
54
|
-
def modify_column(self, column:
|
|
56
|
+
def modify_column(self, column: list[Cell | None]):
|
|
55
57
|
for i in range(len(column)):
|
|
56
58
|
gate = column[i]
|
|
57
59
|
if gate is not None:
|
|
58
60
|
column[i] = gate.controlled_by(self.qubit)
|
|
59
61
|
|
|
60
|
-
def basis_change(self) ->
|
|
62
|
+
def basis_change(self) -> cirq.OP_TREE:
|
|
61
63
|
return self._basis_change
|
|
62
64
|
|
|
63
65
|
|
|
@@ -69,7 +71,7 @@ class ParityControlCell(Cell):
|
|
|
69
71
|
of them are individually satisfied.
|
|
70
72
|
"""
|
|
71
73
|
|
|
72
|
-
def __init__(self, qubits: Iterable[
|
|
74
|
+
def __init__(self, qubits: Iterable[cirq.Qid], basis_change: Iterable[cirq.Operation]):
|
|
73
75
|
self.qubits = list(qubits)
|
|
74
76
|
self._basis_change = list(basis_change)
|
|
75
77
|
|
|
@@ -86,7 +88,7 @@ class ParityControlCell(Cell):
|
|
|
86
88
|
def gate_count(self) -> int:
|
|
87
89
|
return 0
|
|
88
90
|
|
|
89
|
-
def with_line_qubits_mapped_to(self, qubits:
|
|
91
|
+
def with_line_qubits_mapped_to(self, qubits: list[cirq.Qid]) -> Cell:
|
|
90
92
|
return ParityControlCell(
|
|
91
93
|
qubits=Cell._replace_qubits(self.qubits, qubits),
|
|
92
94
|
basis_change=tuple(
|
|
@@ -95,7 +97,7 @@ class ParityControlCell(Cell):
|
|
|
95
97
|
),
|
|
96
98
|
)
|
|
97
99
|
|
|
98
|
-
def modify_column(self, column:
|
|
100
|
+
def modify_column(self, column: list[Cell | None]):
|
|
99
101
|
for i in range(len(column)):
|
|
100
102
|
gate = column[i]
|
|
101
103
|
if gate is self:
|
|
@@ -109,7 +111,7 @@ class ParityControlCell(Cell):
|
|
|
109
111
|
elif gate is not None:
|
|
110
112
|
column[i] = gate.controlled_by(self.qubits[0])
|
|
111
113
|
|
|
112
|
-
def basis_change(self) -> Iterator[
|
|
114
|
+
def basis_change(self) -> Iterator[cirq.OP_TREE]:
|
|
113
115
|
yield from self._basis_change
|
|
114
116
|
|
|
115
117
|
# Temporarily move the ZZZ..Z parity observable onto a single qubit.
|
|
@@ -132,7 +134,7 @@ def generate_all_control_cell_makers() -> Iterator[CellMaker]:
|
|
|
132
134
|
yield _reg_parity_control("zpar", basis_change=None)
|
|
133
135
|
|
|
134
136
|
|
|
135
|
-
def _reg_control(identifier: str, *, basis_change:
|
|
137
|
+
def _reg_control(identifier: str, *, basis_change: cirq.Gate | None) -> CellMaker:
|
|
136
138
|
return CellMaker(
|
|
137
139
|
identifier=identifier,
|
|
138
140
|
size=1,
|
|
@@ -142,9 +144,7 @@ def _reg_control(identifier: str, *, basis_change: Optional['cirq.Gate']) -> Cel
|
|
|
142
144
|
)
|
|
143
145
|
|
|
144
146
|
|
|
145
|
-
def _reg_parity_control(
|
|
146
|
-
identifier: str, *, basis_change: Optional['cirq.Gate'] = None
|
|
147
|
-
) -> CellMaker:
|
|
147
|
+
def _reg_parity_control(identifier: str, *, basis_change: cirq.Gate | None = None) -> CellMaker:
|
|
148
148
|
return CellMaker(
|
|
149
149
|
identifier=identifier,
|
|
150
150
|
size=1,
|
|
@@ -155,8 +155,8 @@ def _reg_parity_control(
|
|
|
155
155
|
|
|
156
156
|
|
|
157
157
|
def _basis_else_empty(
|
|
158
|
-
basis_change:
|
|
159
|
-
) -> Iterable[
|
|
158
|
+
basis_change: cirq.Gate | None, qureg: cirq.Qid | Iterable[cirq.Qid]
|
|
159
|
+
) -> Iterable[cirq.Operation]:
|
|
160
160
|
if basis_change is None:
|
|
161
161
|
return ()
|
|
162
162
|
return basis_change.on_each(qureg)
|
|
@@ -12,11 +12,13 @@
|
|
|
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 cirq
|
|
16
18
|
from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
|
|
17
19
|
|
|
18
20
|
|
|
19
|
-
def test_controls():
|
|
21
|
+
def test_controls() -> None:
|
|
20
22
|
a, b = cirq.LineQubit.range(2)
|
|
21
23
|
|
|
22
24
|
assert_url_to_circuit_returns('{"cols":[["•","X"]]}', cirq.Circuit(cirq.X(b).controlled_by(a)))
|
|
@@ -86,7 +88,7 @@ def test_controls():
|
|
|
86
88
|
)
|
|
87
89
|
|
|
88
90
|
|
|
89
|
-
def test_parity_controls():
|
|
91
|
+
def test_parity_controls() -> None:
|
|
90
92
|
a, b, c, d, e = cirq.LineQubit.range(5)
|
|
91
93
|
|
|
92
94
|
assert_url_to_circuit_returns(
|
|
@@ -106,7 +108,7 @@ def test_parity_controls():
|
|
|
106
108
|
)
|
|
107
109
|
|
|
108
110
|
|
|
109
|
-
def test_control_with_line_qubits_mapped_to():
|
|
111
|
+
def test_control_with_line_qubits_mapped_to() -> None:
|
|
110
112
|
a, b = cirq.LineQubit.range(2)
|
|
111
113
|
a2, b2 = cirq.NamedQubit.range(2, prefix='q')
|
|
112
114
|
cell = cirq.interop.quirk.cells.control_cells.ControlCell(a, [cirq.Y(b) ** 0.5])
|
|
@@ -115,7 +117,7 @@ def test_control_with_line_qubits_mapped_to():
|
|
|
115
117
|
assert cell.with_line_qubits_mapped_to([a2, b2]) == mapped_cell
|
|
116
118
|
|
|
117
119
|
|
|
118
|
-
def test_parity_control_with_line_qubits_mapped_to():
|
|
120
|
+
def test_parity_control_with_line_qubits_mapped_to() -> None:
|
|
119
121
|
a, b, c = cirq.LineQubit.range(3)
|
|
120
122
|
a2, b2, c2 = cirq.NamedQubit.range(3, prefix='q')
|
|
121
123
|
cell = cirq.interop.quirk.cells.control_cells.ParityControlCell([a, b], [cirq.Y(c) ** 0.5])
|
|
@@ -126,7 +128,7 @@ def test_parity_control_with_line_qubits_mapped_to():
|
|
|
126
128
|
assert cell.with_line_qubits_mapped_to([a2, b2, c2]) == mapped_cell
|
|
127
129
|
|
|
128
130
|
|
|
129
|
-
def test_repr():
|
|
131
|
+
def test_repr() -> None:
|
|
130
132
|
a, b, c = cirq.LineQubit.range(3)
|
|
131
133
|
cirq.testing.assert_equivalent_repr(
|
|
132
134
|
cirq.interop.quirk.cells.control_cells.ControlCell(a, [cirq.Y(b) ** 0.5])
|
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
14
17
|
from typing import Callable, Iterator
|
|
15
18
|
|
|
16
19
|
import sympy
|
|
@@ -41,9 +44,7 @@ def generate_all_frequency_space_cell_makers() -> Iterator[CellMaker]:
|
|
|
41
44
|
)
|
|
42
45
|
|
|
43
46
|
|
|
44
|
-
def _family(
|
|
45
|
-
identifier_prefix: str, gate_maker: Callable[[int], 'cirq.Gate']
|
|
46
|
-
) -> Iterator[CellMaker]:
|
|
47
|
+
def _family(identifier_prefix: str, gate_maker: Callable[[int], cirq.Gate]) -> Iterator[CellMaker]:
|
|
47
48
|
f = lambda args: ExplicitOperationsCell([gate_maker(len(args.qubits)).on(*args.qubits)])
|
|
48
49
|
yield CellMaker(identifier_prefix, 1, f)
|
|
49
50
|
for i in CELL_SIZES:
|
|
@@ -12,13 +12,15 @@
|
|
|
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 sympy
|
|
16
18
|
|
|
17
19
|
import cirq
|
|
18
20
|
from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
|
|
19
21
|
|
|
20
22
|
|
|
21
|
-
def test_frequency_space_gates():
|
|
23
|
+
def test_frequency_space_gates() -> None:
|
|
22
24
|
a, b, c = cirq.LineQubit.range(3)
|
|
23
25
|
|
|
24
26
|
assert_url_to_circuit_returns('{"cols":[["QFT3"]]}', cirq.Circuit(cirq.qft(a, b, c)))
|
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
14
17
|
from typing import Iterator
|
|
15
18
|
|
|
16
19
|
from cirq.interop.quirk.cells.cell import CELL_SIZES, CellMaker
|
|
@@ -12,11 +12,13 @@
|
|
|
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 cirq
|
|
16
18
|
from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
|
|
17
19
|
|
|
18
20
|
|
|
19
|
-
def test_displays():
|
|
21
|
+
def test_displays() -> None:
|
|
20
22
|
assert_url_to_circuit_returns(
|
|
21
23
|
'{"cols":[["Amps2"],[1,"Amps3"],["Chance"],'
|
|
22
24
|
'["Chance2"],["Density"],["Density3"],'
|
|
@@ -12,7 +12,9 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
-
from
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
from typing import Iterable, Iterator, TYPE_CHECKING
|
|
16
18
|
|
|
17
19
|
from cirq.interop.quirk.cells.cell import Cell, CELL_SIZES, CellMaker
|
|
18
20
|
|
|
@@ -23,17 +25,17 @@ if TYPE_CHECKING:
|
|
|
23
25
|
class InputCell(Cell):
|
|
24
26
|
"""A modifier that provides a quantum input to gates in the same column."""
|
|
25
27
|
|
|
26
|
-
def __init__(self, qubits: Iterable[
|
|
28
|
+
def __init__(self, qubits: Iterable[cirq.Qid], letter: str):
|
|
27
29
|
self.qubits = tuple(qubits)
|
|
28
30
|
self.letter = letter
|
|
29
31
|
|
|
30
32
|
def gate_count(self) -> int:
|
|
31
33
|
return 0
|
|
32
34
|
|
|
33
|
-
def with_line_qubits_mapped_to(self, qubits:
|
|
35
|
+
def with_line_qubits_mapped_to(self, qubits: list[cirq.Qid]) -> Cell:
|
|
34
36
|
return InputCell(qubits=Cell._replace_qubits(self.qubits, qubits), letter=self.letter)
|
|
35
37
|
|
|
36
|
-
def modify_column(self, column:
|
|
38
|
+
def modify_column(self, column: list[Cell | None]):
|
|
37
39
|
for i in range(len(column)):
|
|
38
40
|
cell = column[i]
|
|
39
41
|
if cell is not None:
|
|
@@ -50,7 +52,7 @@ class SetDefaultInputCell(Cell):
|
|
|
50
52
|
def gate_count(self) -> int:
|
|
51
53
|
return 0
|
|
52
54
|
|
|
53
|
-
def with_line_qubits_mapped_to(self, qubits:
|
|
55
|
+
def with_line_qubits_mapped_to(self, qubits: list[cirq.Qid]) -> Cell:
|
|
54
56
|
return self
|
|
55
57
|
|
|
56
58
|
def persistent_modifiers(self):
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
15
17
|
import pytest
|
|
16
18
|
|
|
17
19
|
from cirq import quirk_url_to_circuit
|
|
@@ -19,12 +21,12 @@ from cirq.interop.quirk.cells.input_cells import SetDefaultInputCell
|
|
|
19
21
|
from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
|
|
20
22
|
|
|
21
23
|
|
|
22
|
-
def test_missing_input_cell():
|
|
24
|
+
def test_missing_input_cell() -> None:
|
|
23
25
|
with pytest.raises(ValueError, match='Missing input'):
|
|
24
26
|
_ = quirk_url_to_circuit('https://algassert.com/quirk#circuit={"cols":[["+=A2"]]}')
|
|
25
27
|
|
|
26
28
|
|
|
27
|
-
def test_input_cell():
|
|
29
|
+
def test_input_cell() -> None:
|
|
28
30
|
assert_url_to_circuit_returns(
|
|
29
31
|
'{"cols":[["inputA4",1,1,1,"+=A4"]]}', maps={0x_0_0: 0x_0_0, 0x_2_3: 0x_2_5}
|
|
30
32
|
)
|
|
@@ -41,7 +43,7 @@ def test_input_cell():
|
|
|
41
43
|
)
|
|
42
44
|
|
|
43
45
|
|
|
44
|
-
def test_reversed_input_cell():
|
|
46
|
+
def test_reversed_input_cell() -> None:
|
|
45
47
|
assert_url_to_circuit_returns(
|
|
46
48
|
'{"cols":[["revinputA4",1,1,1,"+=A4"]]}',
|
|
47
49
|
maps={0x_0_0: 0x_0_0, 0x_2_3: 0x_2_7, 0x_1_3: 0x_1_B},
|
|
@@ -59,7 +61,7 @@ def test_reversed_input_cell():
|
|
|
59
61
|
)
|
|
60
62
|
|
|
61
63
|
|
|
62
|
-
def test_set_default_input_cell():
|
|
64
|
+
def test_set_default_input_cell() -> None:
|
|
63
65
|
# Later column.
|
|
64
66
|
assert_url_to_circuit_returns(
|
|
65
67
|
'{"cols":[[{"id":"setA","arg":11}],["+=A4"]]}', maps={0: 11, 4: 15, 5: 0}
|
|
@@ -98,6 +100,6 @@ def test_set_default_input_cell():
|
|
|
98
100
|
)
|
|
99
101
|
|
|
100
102
|
|
|
101
|
-
def test_with_line_qubits_mapped_to():
|
|
103
|
+
def test_with_line_qubits_mapped_to() -> None:
|
|
102
104
|
cell = SetDefaultInputCell('a', 5)
|
|
103
105
|
assert cell.with_line_qubits_mapped_to([]) is cell
|
|
@@ -12,7 +12,9 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
-
from
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
from typing import Any, Iterable, Iterator, Sequence
|
|
16
18
|
|
|
17
19
|
import numpy as np
|
|
18
20
|
|
|
@@ -28,8 +30,8 @@ class InputRotationCell(Cell):
|
|
|
28
30
|
def __init__(
|
|
29
31
|
self,
|
|
30
32
|
identifier: str,
|
|
31
|
-
register:
|
|
32
|
-
base_operation:
|
|
33
|
+
register: Sequence[cirq.Qid] | None,
|
|
34
|
+
base_operation: cirq.Operation,
|
|
33
35
|
exponent_sign: int,
|
|
34
36
|
):
|
|
35
37
|
self.identifier = identifier
|
|
@@ -52,7 +54,7 @@ class InputRotationCell(Cell):
|
|
|
52
54
|
def gate_count(self) -> int:
|
|
53
55
|
return 1
|
|
54
56
|
|
|
55
|
-
def with_line_qubits_mapped_to(self, qubits:
|
|
57
|
+
def with_line_qubits_mapped_to(self, qubits: list[cirq.Qid]) -> Cell:
|
|
56
58
|
return InputRotationCell(
|
|
57
59
|
self.identifier,
|
|
58
60
|
None if self.register is None else Cell._replace_qubits(self.register, qubits),
|
|
@@ -62,7 +64,7 @@ class InputRotationCell(Cell):
|
|
|
62
64
|
exponent_sign=self.exponent_sign,
|
|
63
65
|
)
|
|
64
66
|
|
|
65
|
-
def with_input(self, letter: str, register:
|
|
67
|
+
def with_input(self, letter: str, register: Sequence[cirq.Qid] | int) -> Cell:
|
|
66
68
|
# Parameterized rotations use input A as their parameter.
|
|
67
69
|
if self.register is None and letter == 'a':
|
|
68
70
|
if isinstance(register, int):
|
|
@@ -75,7 +77,7 @@ class InputRotationCell(Cell):
|
|
|
75
77
|
)
|
|
76
78
|
return self
|
|
77
79
|
|
|
78
|
-
def controlled_by(self, qubit:
|
|
80
|
+
def controlled_by(self, qubit: cirq.Qid):
|
|
79
81
|
return InputRotationCell(
|
|
80
82
|
self.identifier,
|
|
81
83
|
self.register,
|
|
@@ -83,7 +85,7 @@ class InputRotationCell(Cell):
|
|
|
83
85
|
self.exponent_sign,
|
|
84
86
|
)
|
|
85
87
|
|
|
86
|
-
def operations(self) ->
|
|
88
|
+
def operations(self) -> cirq.OP_TREE:
|
|
87
89
|
if self.register is None:
|
|
88
90
|
raise ValueError("Missing input 'a'")
|
|
89
91
|
return QuirkInputRotationOperation(
|
|
@@ -98,8 +100,8 @@ class QuirkInputRotationOperation(ops.Operation):
|
|
|
98
100
|
def __init__(
|
|
99
101
|
self,
|
|
100
102
|
identifier: str,
|
|
101
|
-
register: Iterable[
|
|
102
|
-
base_operation:
|
|
103
|
+
register: Iterable[cirq.Qid],
|
|
104
|
+
base_operation: cirq.Operation,
|
|
103
105
|
exponent_sign: int,
|
|
104
106
|
):
|
|
105
107
|
if exponent_sign not in [-1, +1]:
|
|
@@ -113,7 +115,7 @@ class QuirkInputRotationOperation(ops.Operation):
|
|
|
113
115
|
return (self.identifier, self.register, self.base_operation, self.exponent_sign)
|
|
114
116
|
|
|
115
117
|
@property
|
|
116
|
-
def qubits(self) ->
|
|
118
|
+
def qubits(self) -> tuple[cirq.Qid, ...]:
|
|
117
119
|
return tuple(self.base_operation.qubits) + self.register
|
|
118
120
|
|
|
119
121
|
def with_qubits(self, *new_qubits):
|
|
@@ -127,7 +129,7 @@ class QuirkInputRotationOperation(ops.Operation):
|
|
|
127
129
|
self.exponent_sign,
|
|
128
130
|
)
|
|
129
131
|
|
|
130
|
-
def _circuit_diagram_info_(self, args:
|
|
132
|
+
def _circuit_diagram_info_(self, args: cirq.CircuitDiagramInfoArgs):
|
|
131
133
|
sub_result = cirq.circuit_diagram_info(self.base_operation)
|
|
132
134
|
sign_char = '-' if self.exponent_sign == -1 else ''
|
|
133
135
|
symbols = list(sub_result.wire_symbols)
|
|
@@ -142,7 +144,7 @@ class QuirkInputRotationOperation(ops.Operation):
|
|
|
142
144
|
def _has_unitary_(self) -> bool:
|
|
143
145
|
return True
|
|
144
146
|
|
|
145
|
-
def _apply_unitary_(self, args:
|
|
147
|
+
def _apply_unitary_(self, args: cirq.ApplyUnitaryArgs):
|
|
146
148
|
transposed_args = args.with_axes_transposed_to_start()
|
|
147
149
|
|
|
148
150
|
target_axes = transposed_args.axes[: len(self.base_operation.qubits)]
|
|
@@ -184,7 +186,7 @@ def generate_all_input_rotation_cell_makers() -> Iterator[CellMaker]:
|
|
|
184
186
|
yield _input_rotation_gate("Z^(-A/2^n)", ops.Z, -1)
|
|
185
187
|
|
|
186
188
|
|
|
187
|
-
def _input_rotation_gate(identifier: str, gate:
|
|
189
|
+
def _input_rotation_gate(identifier: str, gate: cirq.Gate, exponent_sign: int) -> CellMaker:
|
|
188
190
|
return CellMaker(
|
|
189
191
|
identifier,
|
|
190
192
|
gate.num_qubits(),
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
15
17
|
import numpy as np
|
|
16
18
|
import pytest
|
|
17
19
|
|
|
@@ -20,7 +22,7 @@ from cirq import quirk_url_to_circuit
|
|
|
20
22
|
from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
|
|
21
23
|
|
|
22
24
|
|
|
23
|
-
def test_input_rotation_cells():
|
|
25
|
+
def test_input_rotation_cells() -> None:
|
|
24
26
|
with pytest.raises(ValueError, match='classical constant'):
|
|
25
27
|
_ = quirk_url_to_circuit(
|
|
26
28
|
'https://algassert.com/quirk#circuit={"cols":[["Z^(A/2^n)",{"id":"setA","arg":3}]]}'
|
|
@@ -105,7 +107,7 @@ def test_input_rotation_cells():
|
|
|
105
107
|
)
|
|
106
108
|
|
|
107
109
|
|
|
108
|
-
def test_input_rotation_cells_repr():
|
|
110
|
+
def test_input_rotation_cells_repr() -> None:
|
|
109
111
|
circuit = quirk_url_to_circuit(
|
|
110
112
|
'http://algassert.com/quirk#circuit={"cols":[["•","X^(-A/2^n)","inputA2"]]}'
|
|
111
113
|
)
|
|
@@ -113,7 +115,7 @@ def test_input_rotation_cells_repr():
|
|
|
113
115
|
cirq.testing.assert_equivalent_repr(op)
|
|
114
116
|
|
|
115
117
|
|
|
116
|
-
def test_validation():
|
|
118
|
+
def test_validation() -> None:
|
|
117
119
|
with pytest.raises(ValueError, match='sign'):
|
|
118
120
|
_ = cirq.interop.quirk.QuirkInputRotationOperation(
|
|
119
121
|
identifier='xxx',
|
|
@@ -123,7 +125,7 @@ def test_validation():
|
|
|
123
125
|
)
|
|
124
126
|
|
|
125
127
|
|
|
126
|
-
def test_input_rotation_with_qubits():
|
|
128
|
+
def test_input_rotation_with_qubits() -> None:
|
|
127
129
|
a, b, c, d, e = cirq.LineQubit.range(5)
|
|
128
130
|
x, y, z, t, w = cirq.LineQubit.range(10, 15)
|
|
129
131
|
op = cirq.interop.quirk.QuirkInputRotationOperation(
|
|
@@ -143,7 +145,7 @@ def test_input_rotation_with_qubits():
|
|
|
143
145
|
)
|
|
144
146
|
|
|
145
147
|
|
|
146
|
-
def test_input_rotation_cell_with_qubits():
|
|
148
|
+
def test_input_rotation_cell_with_qubits() -> None:
|
|
147
149
|
a, b, c, d, e = cirq.LineQubit.range(5)
|
|
148
150
|
x, y, z, t, w = cirq.LineQubit.range(10, 15)
|
|
149
151
|
cell = cirq.interop.quirk.cells.input_rotation_cells.InputRotationCell(
|
|
@@ -162,7 +164,7 @@ def test_input_rotation_cell_with_qubits():
|
|
|
162
164
|
)
|
|
163
165
|
|
|
164
166
|
|
|
165
|
-
def test_input_rotation_cell_with_qubits_before_register_specified():
|
|
167
|
+
def test_input_rotation_cell_with_qubits_before_register_specified() -> None:
|
|
166
168
|
d, e = cirq.LineQubit.range(3, 5)
|
|
167
169
|
x, y, z, t, w = cirq.LineQubit.range(10, 15)
|
|
168
170
|
cell = cirq.interop.quirk.cells.input_rotation_cells.InputRotationCell(
|
|
@@ -181,7 +183,7 @@ def test_input_rotation_cell_with_qubits_before_register_specified():
|
|
|
181
183
|
)
|
|
182
184
|
|
|
183
185
|
|
|
184
|
-
def test_repr():
|
|
186
|
+
def test_repr() -> None:
|
|
185
187
|
a, b, c, d, e = cirq.LineQubit.range(5)
|
|
186
188
|
cirq.testing.assert_equivalent_repr(
|
|
187
189
|
cirq.interop.quirk.cells.input_rotation_cells.InputRotationCell(
|
|
@@ -11,7 +11,10 @@
|
|
|
11
11
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
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
|
+
|
|
17
|
+
from typing import cast, Iterable, Iterator, TYPE_CHECKING
|
|
15
18
|
|
|
16
19
|
from cirq import ops
|
|
17
20
|
from cirq.interop.quirk.cells.cell import CellMaker, ExplicitOperationsCell
|
|
@@ -27,7 +30,7 @@ def generate_all_measurement_cell_makers() -> Iterator[CellMaker]:
|
|
|
27
30
|
yield _measurement("XDetector", basis_change=ops.Y**0.5)
|
|
28
31
|
|
|
29
32
|
|
|
30
|
-
def _measurement(identifier: str, basis_change:
|
|
33
|
+
def _measurement(identifier: str, basis_change: cirq.Gate | None = None) -> CellMaker:
|
|
31
34
|
return CellMaker(
|
|
32
35
|
identifier=identifier,
|
|
33
36
|
size=1,
|
|
@@ -12,11 +12,13 @@
|
|
|
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 cirq
|
|
16
18
|
from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
|
|
17
19
|
|
|
18
20
|
|
|
19
|
-
def test_measurement_gates():
|
|
21
|
+
def test_measurement_gates() -> None:
|
|
20
22
|
a, b, c = cirq.LineQubit.range(3)
|
|
21
23
|
assert_url_to_circuit_returns(
|
|
22
24
|
'{"cols":[["Measure","Measure"],["Measure","Measure"]]}',
|