cirq-core 1.4.0.dev20240529225110__py3-none-any.whl → 1.5.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 +587 -569
- cirq/_compat.py +9 -0
- cirq/_compat_test.py +11 -9
- cirq/_import.py +7 -8
- cirq/_version.py +31 -1
- cirq/_version_test.py +1 -1
- cirq/circuits/__init__.py +15 -9
- cirq/circuits/_block_diagram_drawer.py +1 -2
- cirq/circuits/_block_diagram_drawer_test.py +3 -3
- cirq/circuits/_box_drawing_character_data.py +0 -1
- cirq/circuits/_box_drawing_character_data_test.py +2 -2
- cirq/circuits/_bucket_priority_queue.py +0 -1
- cirq/circuits/_bucket_priority_queue_test.py +1 -1
- cirq/circuits/circuit.py +336 -234
- cirq/circuits/circuit_operation.py +102 -52
- cirq/circuits/circuit_operation_test.py +85 -4
- cirq/circuits/circuit_test.py +101 -32
- cirq/circuits/frozen_circuit.py +36 -32
- cirq/circuits/insert_strategy.py +10 -0
- cirq/circuits/insert_strategy_test.py +20 -0
- cirq/circuits/moment.py +79 -80
- cirq/circuits/moment_test.py +105 -2
- cirq/circuits/optimization_pass.py +15 -15
- cirq/circuits/optimization_pass_test.py +8 -9
- cirq/circuits/qasm_output.py +64 -33
- cirq/circuits/qasm_output_test.py +63 -2
- cirq/circuits/text_diagram_drawer.py +26 -56
- cirq/circuits/text_diagram_drawer_test.py +5 -4
- cirq/contrib/__init__.py +2 -2
- cirq/contrib/acquaintance/__init__.py +44 -29
- cirq/contrib/acquaintance/bipartite.py +8 -7
- cirq/contrib/acquaintance/bipartite_test.py +11 -1
- cirq/contrib/acquaintance/devices.py +5 -4
- cirq/contrib/acquaintance/devices_test.py +5 -1
- cirq/contrib/acquaintance/executor.py +18 -21
- cirq/contrib/acquaintance/executor_test.py +3 -2
- cirq/contrib/acquaintance/gates.py +36 -27
- cirq/contrib/acquaintance/gates_test.py +1 -1
- cirq/contrib/acquaintance/inspection_utils.py +10 -9
- cirq/contrib/acquaintance/inspection_utils_test.py +6 -1
- cirq/contrib/acquaintance/mutation_utils.py +10 -10
- cirq/contrib/acquaintance/optimizers.py +7 -6
- cirq/contrib/acquaintance/optimizers_test.py +1 -1
- cirq/contrib/acquaintance/permutation.py +22 -21
- cirq/contrib/acquaintance/permutation_test.py +1 -1
- cirq/contrib/acquaintance/shift.py +8 -6
- cirq/contrib/acquaintance/shift_swap_network.py +6 -4
- cirq/contrib/acquaintance/strategies/__init__.py +9 -3
- cirq/contrib/acquaintance/strategies/complete.py +4 -3
- cirq/contrib/acquaintance/strategies/cubic.py +5 -3
- cirq/contrib/acquaintance/strategies/quartic_paired.py +8 -6
- cirq/contrib/acquaintance/topological_sort.py +4 -2
- cirq/contrib/bayesian_network/__init__.py +3 -1
- cirq/contrib/bayesian_network/bayesian_network_gate.py +5 -3
- cirq/contrib/circuitdag/__init__.py +1 -1
- cirq/contrib/circuitdag/circuit_dag.py +24 -24
- cirq/contrib/circuitdag/circuit_dag_test.py +1 -1
- cirq/contrib/custom_simulators/custom_state_simulator.py +10 -8
- cirq/contrib/custom_simulators/custom_state_simulator_test.py +15 -11
- cirq/contrib/graph_device/__init__.py +8 -8
- cirq/contrib/graph_device/graph_device.py +8 -8
- cirq/contrib/graph_device/graph_device_test.py +0 -1
- cirq/contrib/graph_device/hypergraph_test.py +1 -0
- cirq/contrib/json.py +1 -2
- cirq/contrib/json_test.py +2 -2
- cirq/contrib/noise_models/__init__.py +5 -6
- cirq/contrib/noise_models/noise_models.py +8 -6
- cirq/contrib/paulistring/__init__.py +22 -10
- cirq/contrib/paulistring/clifford_optimize.py +1 -1
- cirq/contrib/paulistring/clifford_optimize_test.py +0 -1
- cirq/contrib/paulistring/clifford_target_gateset.py +15 -12
- cirq/contrib/paulistring/optimize.py +2 -2
- cirq/contrib/paulistring/optimize_test.py +0 -1
- cirq/contrib/paulistring/pauli_string_dag_test.py +0 -1
- cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py +379 -0
- cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation_test.py +523 -0
- cirq/contrib/paulistring/pauli_string_optimize.py +3 -1
- cirq/contrib/paulistring/pauli_string_optimize_test.py +1 -3
- cirq/contrib/paulistring/recombine.py +2 -2
- cirq/contrib/paulistring/recombine_test.py +2 -2
- cirq/contrib/paulistring/separate.py +3 -4
- cirq/contrib/qasm_import/__init__.py +2 -2
- cirq/contrib/qasm_import/_lexer.py +21 -26
- cirq/contrib/qasm_import/_lexer_test.py +90 -6
- cirq/contrib/qasm_import/_parser.py +238 -47
- cirq/contrib/qasm_import/_parser_test.py +514 -59
- cirq/contrib/qasm_import/qasm_test.py +1 -1
- cirq/contrib/qcircuit/__init__.py +6 -4
- cirq/contrib/qcircuit/qcircuit_diagram.py +5 -2
- cirq/contrib/qcircuit/qcircuit_pdf.py +1 -2
- cirq/{experiments/grid_parallel_two_qubit_xeb_test.py → contrib/qcircuit/qcircuit_pdf_test.py} +13 -12
- cirq/contrib/qcircuit/qcircuit_test.py +1 -1
- cirq/contrib/quantum_volume/__init__.py +7 -7
- cirq/contrib/quantum_volume/quantum_volume.py +6 -11
- cirq/contrib/quantum_volume/quantum_volume_test.py +3 -1
- cirq/contrib/quimb/__init__.py +16 -13
- cirq/contrib/quimb/density_matrix.py +1 -1
- cirq/contrib/quimb/mps_simulator.py +27 -28
- cirq/contrib/quimb/mps_simulator_test.py +5 -0
- cirq/contrib/quimb/state_vector.py +3 -10
- cirq/contrib/quirk/__init__.py +1 -1
- cirq/contrib/quirk/export_to_quirk.py +3 -3
- cirq/contrib/routing/__init__.py +12 -9
- cirq/contrib/routing/device.py +1 -1
- cirq/contrib/routing/device_test.py +1 -2
- cirq/contrib/routing/greedy.py +7 -5
- cirq/contrib/routing/greedy_test.py +5 -3
- cirq/contrib/routing/initialization.py +3 -1
- cirq/contrib/routing/initialization_test.py +1 -1
- cirq/contrib/routing/swap_network.py +6 -6
- cirq/contrib/routing/utils.py +6 -4
- cirq/contrib/routing/utils_test.py +1 -2
- cirq/{type_workarounds.py → contrib/shuffle_circuits/__init__.py} +5 -10
- cirq/contrib/shuffle_circuits/shuffle_circuits_with_readout_benchmarking.py +250 -0
- cirq/contrib/shuffle_circuits/shuffle_circuits_with_readout_benchmarking_test.py +363 -0
- cirq/contrib/svg/__init__.py +1 -1
- cirq/contrib/svg/svg.py +12 -10
- cirq/contrib/svg/svg_test.py +3 -2
- cirq/devices/__init__.py +34 -25
- cirq/devices/device.py +16 -12
- cirq/devices/device_test.py +1 -0
- cirq/devices/grid_device_metadata.py +16 -12
- cirq/devices/grid_device_metadata_test.py +2 -1
- cirq/devices/grid_qubit.py +31 -26
- cirq/devices/grid_qubit_test.py +30 -1
- cirq/devices/insertion_noise_model.py +6 -6
- cirq/devices/insertion_noise_model_test.py +1 -1
- cirq/devices/line_qubit.py +28 -20
- cirq/devices/line_qubit_test.py +26 -0
- cirq/devices/named_topologies.py +12 -10
- cirq/devices/named_topologies_test.py +5 -4
- cirq/devices/noise_model.py +29 -33
- cirq/devices/noise_properties.py +2 -2
- cirq/devices/noise_properties_test.py +2 -2
- cirq/devices/noise_utils.py +3 -3
- cirq/devices/superconducting_qubits_noise_properties.py +2 -2
- cirq/devices/superconducting_qubits_noise_properties_test.py +3 -3
- cirq/devices/thermal_noise_model.py +2 -1
- cirq/devices/unconstrained_device.py +1 -1
- cirq/devices/unconstrained_device_test.py +6 -0
- cirq/experiments/__init__.py +51 -34
- cirq/experiments/qubit_characterizations.py +17 -15
- cirq/experiments/qubit_characterizations_test.py +4 -6
- cirq/experiments/random_quantum_circuit_generation.py +10 -9
- cirq/experiments/random_quantum_circuit_generation_test.py +21 -4
- cirq/experiments/readout_confusion_matrix.py +73 -8
- cirq/experiments/readout_confusion_matrix_test.py +104 -1
- cirq/experiments/single_qubit_readout_calibration.py +8 -6
- cirq/experiments/single_qubit_readout_calibration_test.py +1 -1
- cirq/experiments/t1_decay_experiment.py +4 -5
- cirq/experiments/t1_decay_experiment_test.py +1 -2
- cirq/experiments/t2_decay_experiment.py +0 -1
- cirq/experiments/t2_decay_experiment_test.py +1 -2
- cirq/experiments/two_qubit_xeb.py +157 -33
- cirq/experiments/two_qubit_xeb_test.py +38 -22
- cirq/experiments/xeb_fitting.py +99 -19
- cirq/experiments/xeb_fitting_test.py +64 -25
- cirq/experiments/xeb_sampling.py +14 -18
- cirq/experiments/xeb_simulation.py +4 -3
- cirq/experiments/xeb_simulation_test.py +20 -14
- cirq/experiments/z_phase_calibration.py +368 -0
- cirq/experiments/z_phase_calibration_test.py +241 -0
- cirq/interop/__init__.py +4 -1
- cirq/interop/quirk/__init__.py +7 -4
- cirq/interop/quirk/cells/__init__.py +17 -6
- cirq/interop/quirk/cells/arithmetic_cells.py +8 -8
- cirq/interop/quirk/cells/arithmetic_cells_test.py +1 -1
- cirq/interop/quirk/cells/cell.py +6 -6
- cirq/interop/quirk/cells/composite_cell.py +5 -5
- cirq/interop/quirk/cells/composite_cell_test.py +1 -1
- cirq/interop/quirk/cells/control_cells.py +1 -1
- cirq/interop/quirk/cells/frequency_space_cells.py +2 -2
- cirq/interop/quirk/cells/ignored_cells.py +1 -1
- cirq/interop/quirk/cells/input_cells.py +1 -1
- cirq/interop/quirk/cells/input_cells_test.py +1 -1
- cirq/interop/quirk/cells/input_rotation_cells.py +1 -1
- cirq/interop/quirk/cells/input_rotation_cells_test.py +1 -1
- cirq/interop/quirk/cells/measurement_cells.py +1 -1
- cirq/interop/quirk/cells/parse.py +8 -7
- cirq/interop/quirk/cells/parse_test.py +2 -2
- cirq/interop/quirk/cells/single_qubit_rotation_cells.py +1 -1
- cirq/interop/quirk/cells/swap_cell_test.py +1 -1
- cirq/interop/quirk/cells/unsupported_cells.py +1 -1
- cirq/interop/quirk/url_to_circuit.py +7 -7
- cirq/interop/quirk/url_to_circuit_test.py +1 -1
- cirq/ion/__init__.py +4 -2
- cirq/json_resolver_cache.py +15 -7
- cirq/linalg/__init__.py +62 -51
- cirq/linalg/combinators.py +4 -4
- cirq/linalg/combinators_test.py +4 -1
- cirq/linalg/decompositions.py +15 -40
- cirq/linalg/decompositions_test.py +16 -22
- cirq/linalg/diagonalize.py +1 -1
- cirq/linalg/diagonalize_test.py +1 -1
- cirq/linalg/operator_spaces.py +20 -4
- cirq/linalg/operator_spaces_test.py +15 -2
- cirq/linalg/predicates.py +3 -3
- cirq/linalg/predicates_test.py +1 -0
- cirq/linalg/tolerance.py +2 -2
- cirq/linalg/transformations.py +30 -12
- cirq/linalg/transformations_test.py +13 -0
- cirq/neutral_atoms/__init__.py +2 -2
- cirq/neutral_atoms/convert_to_neutral_atom_gates_test.py +0 -1
- cirq/ops/__init__.py +172 -132
- cirq/ops/arithmetic_operation.py +2 -2
- cirq/ops/arithmetic_operation_test.py +2 -2
- cirq/ops/boolean_hamiltonian.py +3 -2
- cirq/ops/classically_controlled_operation.py +39 -12
- cirq/ops/classically_controlled_operation_test.py +147 -1
- cirq/ops/clifford_gate.py +38 -36
- cirq/ops/clifford_gate_test.py +75 -1
- cirq/ops/common_channels.py +16 -45
- cirq/ops/common_channels_test.py +10 -0
- cirq/ops/common_gate_families.py +1 -1
- cirq/ops/common_gate_families_test.py +1 -0
- cirq/ops/common_gates.py +48 -49
- cirq/ops/common_gates_test.py +18 -2
- cirq/ops/control_values.py +3 -3
- cirq/ops/control_values_test.py +2 -1
- cirq/ops/controlled_gate.py +36 -23
- cirq/ops/controlled_gate_test.py +70 -3
- cirq/ops/controlled_operation.py +6 -5
- cirq/ops/controlled_operation_test.py +7 -3
- cirq/ops/dense_pauli_string.py +11 -11
- cirq/ops/diagonal_gate.py +2 -2
- cirq/ops/diagonal_gate_test.py +1 -0
- cirq/ops/eigen_gate.py +16 -36
- cirq/ops/eigen_gate_test.py +60 -10
- cirq/ops/fourier_transform.py +1 -3
- cirq/ops/fourier_transform_test.py +2 -1
- cirq/ops/fsim_gate.py +42 -3
- cirq/ops/fsim_gate_test.py +21 -0
- cirq/ops/gate_operation.py +8 -8
- cirq/ops/gate_operation_test.py +4 -2
- cirq/ops/gateset_test.py +11 -2
- cirq/ops/global_phase_op.py +8 -7
- cirq/ops/global_phase_op_test.py +1 -1
- cirq/ops/greedy_qubit_manager_test.py +5 -0
- cirq/ops/identity.py +14 -4
- cirq/ops/identity_test.py +24 -0
- cirq/ops/kraus_channel.py +1 -0
- cirq/ops/kraus_channel_test.py +3 -1
- cirq/ops/linear_combinations.py +27 -21
- cirq/ops/linear_combinations_test.py +23 -4
- cirq/ops/matrix_gates.py +24 -8
- cirq/ops/measure_util.py +2 -2
- cirq/ops/measurement_gate.py +7 -4
- cirq/ops/measurement_gate_test.py +2 -1
- cirq/ops/mixed_unitary_channel.py +1 -0
- cirq/ops/mixed_unitary_channel_test.py +3 -1
- cirq/ops/named_qubit.py +8 -1
- cirq/ops/op_tree.py +3 -30
- cirq/ops/op_tree_test.py +4 -0
- cirq/ops/parallel_gate.py +2 -3
- cirq/ops/parallel_gate_test.py +2 -1
- cirq/ops/parity_gates.py +7 -8
- cirq/ops/parity_gates_test.py +1 -0
- cirq/ops/pauli_gates.py +5 -11
- cirq/ops/pauli_gates_test.py +1 -0
- cirq/ops/pauli_interaction_gate.py +11 -5
- cirq/ops/pauli_interaction_gate_test.py +2 -3
- cirq/ops/pauli_measurement_gate.py +6 -5
- cirq/ops/pauli_measurement_gate_test.py +1 -0
- cirq/ops/pauli_string.py +115 -130
- cirq/ops/pauli_string_phasor.py +21 -20
- cirq/ops/pauli_string_phasor_test.py +13 -3
- cirq/ops/pauli_string_raw_types.py +1 -0
- cirq/ops/pauli_string_test.py +192 -55
- cirq/ops/pauli_sum_exponential.py +3 -4
- cirq/ops/pauli_sum_exponential_test.py +0 -1
- cirq/ops/permutation_gate.py +2 -2
- cirq/ops/permutation_gate_test.py +1 -1
- cirq/ops/phased_iswap_gate.py +6 -7
- cirq/ops/phased_iswap_gate_test.py +21 -5
- cirq/ops/phased_x_gate.py +11 -25
- cirq/ops/phased_x_gate_test.py +19 -3
- cirq/ops/phased_x_z_gate.py +12 -11
- cirq/ops/projector.py +4 -5
- cirq/ops/qubit_manager.py +2 -1
- cirq/ops/qubit_manager_test.py +2 -1
- cirq/ops/qubit_order.py +1 -1
- cirq/ops/random_gate_channel.py +1 -1
- cirq/ops/random_gate_channel_test.py +0 -6
- cirq/ops/raw_types.py +146 -50
- cirq/ops/raw_types_test.py +37 -3
- cirq/ops/state_preparation_channel.py +2 -2
- cirq/ops/state_preparation_channel_test.py +2 -1
- cirq/ops/swap_gates.py +9 -4
- cirq/ops/three_qubit_gates.py +8 -8
- cirq/ops/three_qubit_gates_test.py +1 -0
- cirq/ops/two_qubit_diagonal_gate.py +4 -3
- cirq/ops/uniform_superposition_gate.py +4 -4
- cirq/ops/uniform_superposition_gate_test.py +1 -0
- cirq/ops/wait_gate.py +6 -8
- cirq/protocols/__init__.py +135 -83
- cirq/protocols/act_on_protocol.py +1 -1
- cirq/protocols/act_on_protocol_test.py +1 -1
- cirq/protocols/apply_channel_protocol.py +3 -3
- cirq/protocols/apply_mixture_protocol.py +15 -9
- cirq/protocols/apply_mixture_protocol_test.py +11 -0
- cirq/protocols/apply_unitary_protocol.py +2 -2
- cirq/protocols/apply_unitary_protocol_test.py +2 -1
- cirq/protocols/approximate_equality_protocol.py +7 -8
- cirq/protocols/approximate_equality_protocol_test.py +3 -1
- cirq/protocols/circuit_diagram_info_protocol.py +8 -6
- cirq/protocols/circuit_diagram_info_protocol_test.py +5 -0
- cirq/protocols/commutes_protocol.py +6 -6
- cirq/protocols/control_key_protocol.py +1 -1
- cirq/protocols/decompose_protocol.py +4 -5
- cirq/protocols/decompose_protocol_test.py +2 -1
- cirq/protocols/equal_up_to_global_phase_protocol.py +3 -3
- cirq/protocols/equal_up_to_global_phase_protocol_test.py +7 -0
- cirq/protocols/has_stabilizer_effect_protocol.py +5 -5
- cirq/protocols/has_unitary_protocol.py +1 -1
- cirq/protocols/has_unitary_protocol_test.py +8 -7
- cirq/protocols/hash_from_pickle_test.py +120 -0
- cirq/protocols/inverse_protocol.py +1 -1
- cirq/protocols/json_serialization.py +14 -1
- cirq/protocols/json_serialization_test.py +28 -7
- cirq/protocols/json_test_data/BitMaskKeyCondition.json +86 -0
- cirq/protocols/json_test_data/BitMaskKeyCondition.repr +7 -0
- cirq/protocols/json_test_data/Concat.json +19 -0
- cirq/protocols/json_test_data/Concat.repr +1 -0
- cirq/protocols/json_test_data/README.md +4 -2
- cirq/protocols/json_test_data/SympyCondition.json +60 -15
- cirq/protocols/json_test_data/SympyCondition.repr +4 -1
- cirq/protocols/json_test_data/_InverseCompositeGate.json +10 -0
- cirq/protocols/json_test_data/_InverseCompositeGate.repr +1 -0
- cirq/protocols/json_test_data/__init__.py +1 -1
- cirq/protocols/json_test_data/sympy.And.json +13 -0
- cirq/protocols/json_test_data/sympy.And.repr +1 -0
- cirq/protocols/json_test_data/sympy.Indexed.json +18 -0
- cirq/protocols/json_test_data/sympy.Indexed.repr +1 -0
- cirq/protocols/json_test_data/sympy.IndexedBase.json +9 -0
- cirq/protocols/json_test_data/sympy.IndexedBase.repr +1 -0
- cirq/protocols/json_test_data/sympy.Not.json +9 -0
- cirq/protocols/json_test_data/sympy.Not.repr +1 -0
- cirq/protocols/json_test_data/sympy.Or.json +13 -0
- cirq/protocols/json_test_data/sympy.Or.repr +1 -0
- cirq/protocols/json_test_data/sympy.Xor.json +13 -0
- cirq/protocols/json_test_data/sympy.Xor.repr +1 -0
- cirq/protocols/kraus_protocol.py +8 -8
- cirq/protocols/kraus_protocol_test.py +0 -1
- cirq/protocols/measurement_key_protocol.py +1 -1
- cirq/protocols/measurement_key_protocol_test.py +7 -7
- cirq/protocols/mixture_protocol.py +6 -4
- cirq/protocols/mixture_protocol_test.py +21 -13
- cirq/protocols/pauli_expansion_protocol.py +1 -0
- cirq/protocols/pow_protocol.py +1 -1
- cirq/protocols/qasm.py +25 -6
- cirq/protocols/qasm_test.py +17 -0
- cirq/protocols/qid_shape_protocol.py +2 -2
- cirq/protocols/resolve_parameters.py +2 -3
- cirq/protocols/resolve_parameters_test.py +2 -1
- cirq/protocols/trace_distance_bound.py +1 -1
- cirq/protocols/trace_distance_bound_test.py +1 -0
- cirq/protocols/unitary_protocol.py +3 -3
- cirq/protocols/unitary_protocol_test.py +1 -1
- cirq/qis/__init__.py +48 -35
- cirq/qis/channels_test.py +0 -9
- cirq/qis/clifford_tableau.py +46 -26
- cirq/qis/clifford_tableau_test.py +2 -1
- cirq/qis/entropy.py +115 -0
- cirq/qis/entropy_test.py +43 -0
- cirq/qis/measures.py +5 -4
- cirq/qis/measures_test.py +7 -0
- cirq/qis/noise_utils_test.py +4 -4
- cirq/qis/quantum_state_representation.py +1 -1
- cirq/qis/states.py +7 -7
- cirq/sim/__init__.py +55 -37
- cirq/sim/classical_simulator.py +7 -6
- cirq/sim/classical_simulator_test.py +3 -1
- cirq/sim/clifford/__init__.py +17 -9
- cirq/sim/clifford/clifford_simulator.py +5 -4
- cirq/sim/clifford/clifford_simulator_test.py +32 -9
- cirq/sim/clifford/clifford_tableau_simulation_state.py +1 -1
- cirq/sim/clifford/stabilizer_simulation_state.py +1 -1
- cirq/sim/clifford/stabilizer_state_ch_form.py +4 -3
- cirq/sim/density_matrix_simulator.py +3 -2
- cirq/sim/density_matrix_simulator_test.py +12 -4
- cirq/sim/density_matrix_utils.py +1 -1
- cirq/sim/mux.py +2 -2
- cirq/sim/simulation_state.py +4 -5
- cirq/sim/simulation_state_base.py +2 -2
- cirq/sim/simulation_state_test.py +1 -1
- cirq/sim/simulation_utils.py +3 -1
- cirq/sim/simulation_utils_test.py +2 -3
- cirq/sim/simulator.py +7 -6
- cirq/sim/simulator_base.py +5 -5
- cirq/sim/simulator_test.py +14 -3
- cirq/sim/sparse_simulator.py +4 -3
- cirq/sim/sparse_simulator_test.py +17 -9
- cirq/sim/state_vector.py +2 -2
- cirq/sim/state_vector_simulation_state_test.py +1 -1
- cirq/sim/state_vector_simulator.py +4 -4
- cirq/sim/state_vector_test.py +27 -32
- cirq/study/__init__.py +27 -21
- cirq/study/flatten_expressions.py +5 -6
- cirq/study/flatten_expressions_test.py +1 -1
- cirq/study/resolver.py +14 -11
- cirq/study/resolver_test.py +10 -1
- cirq/study/result.py +3 -3
- cirq/study/sweepable.py +15 -9
- cirq/study/sweepable_test.py +27 -0
- cirq/study/sweeps.py +65 -10
- cirq/study/sweeps_test.py +123 -0
- cirq/testing/__init__.py +86 -57
- cirq/testing/_compat_test_data/module_a/__init__.py +2 -2
- cirq/testing/_compat_test_data/module_a/sub/subsub/__init__.py +1 -1
- cirq/testing/circuit_compare.py +3 -4
- cirq/testing/circuit_compare_test.py +7 -8
- cirq/testing/consistent_act_on.py +3 -3
- cirq/testing/consistent_channels_test.py +2 -1
- cirq/testing/consistent_controlled_gate_op.py +3 -2
- cirq/testing/consistent_controlled_gate_op_test.py +2 -3
- cirq/testing/consistent_decomposition.py +1 -1
- cirq/testing/consistent_decomposition_test.py +1 -2
- cirq/testing/consistent_pauli_expansion_test.py +1 -1
- cirq/testing/consistent_phase_by.py +1 -1
- cirq/testing/consistent_phase_by_test.py +1 -2
- cirq/testing/consistent_protocols.py +11 -11
- cirq/testing/consistent_protocols_test.py +4 -5
- cirq/testing/consistent_qasm.py +8 -12
- cirq/testing/consistent_qasm_test.py +1 -1
- cirq/testing/consistent_resolve_parameters.py +2 -1
- cirq/testing/consistent_specified_has_unitary_test.py +1 -1
- cirq/testing/consistent_unitary.py +3 -1
- cirq/testing/consistent_unitary_test.py +3 -3
- cirq/testing/devices.py +1 -1
- cirq/testing/devices_test.py +1 -0
- cirq/testing/equals_tester.py +2 -4
- cirq/testing/equals_tester_test.py +6 -5
- cirq/testing/equivalent_basis_map.py +1 -0
- cirq/testing/equivalent_basis_map_test.py +0 -1
- cirq/testing/gate_features_test.py +5 -0
- cirq/testing/json.py +4 -4
- cirq/testing/lin_alg_utils_test.py +1 -1
- cirq/testing/order_tester.py +1 -1
- cirq/testing/order_tester_test.py +1 -1
- cirq/testing/pytest_utils.py +57 -0
- cirq/testing/pytest_utils_test.py +35 -0
- cirq/testing/random_circuit.py +2 -2
- cirq/testing/random_circuit_test.py +2 -2
- cirq/testing/routing_devices_test.py +2 -1
- cirq/testing/sample_circuits.py +1 -1
- cirq/testing/sample_gates.py +5 -4
- cirq/testing/sample_gates_test.py +2 -2
- cirq/transformers/__init__.py +101 -82
- cirq/transformers/align.py +12 -1
- cirq/transformers/align_test.py +13 -0
- cirq/transformers/analytical_decompositions/__init__.py +27 -24
- cirq/transformers/analytical_decompositions/clifford_decomposition.py +2 -1
- cirq/transformers/analytical_decompositions/clifford_decomposition_test.py +1 -1
- cirq/transformers/analytical_decompositions/controlled_gate_decomposition.py +1 -1
- cirq/transformers/analytical_decompositions/controlled_gate_decomposition_test.py +2 -0
- cirq/transformers/analytical_decompositions/cphase_to_fsim.py +1 -1
- cirq/transformers/analytical_decompositions/cphase_to_fsim_test.py +1 -1
- cirq/transformers/analytical_decompositions/pauli_string_decomposition.py +2 -2
- cirq/transformers/analytical_decompositions/pauli_string_decomposition_test.py +4 -4
- cirq/transformers/analytical_decompositions/quantum_shannon_decomposition.py +99 -24
- cirq/transformers/analytical_decompositions/quantum_shannon_decomposition_test.py +105 -14
- cirq/transformers/analytical_decompositions/single_qubit_decompositions.py +1 -1
- cirq/transformers/analytical_decompositions/single_to_two_qubit_isometry.py +1 -1
- cirq/transformers/analytical_decompositions/single_to_two_qubit_isometry_test.py +1 -0
- cirq/transformers/analytical_decompositions/three_qubit_decomposition.py +3 -4
- cirq/transformers/analytical_decompositions/three_qubit_decomposition_test.py +1 -1
- cirq/transformers/analytical_decompositions/two_qubit_state_preparation.py +2 -1
- cirq/transformers/analytical_decompositions/two_qubit_state_preparation_test.py +2 -1
- cirq/transformers/analytical_decompositions/two_qubit_to_cz.py +5 -6
- cirq/transformers/analytical_decompositions/two_qubit_to_cz_test.py +2 -2
- cirq/transformers/analytical_decompositions/two_qubit_to_fsim.py +1 -1
- cirq/transformers/analytical_decompositions/two_qubit_to_fsim_test.py +1 -2
- cirq/transformers/analytical_decompositions/two_qubit_to_ms.py +2 -2
- cirq/transformers/analytical_decompositions/two_qubit_to_sqrt_iswap.py +2 -2
- cirq/transformers/analytical_decompositions/two_qubit_to_sqrt_iswap_test.py +2 -1
- cirq/transformers/drop_empty_moments.py +1 -0
- cirq/transformers/drop_negligible_operations.py +1 -0
- cirq/transformers/dynamical_decoupling.py +255 -43
- cirq/transformers/dynamical_decoupling_test.py +730 -17
- cirq/transformers/eject_phased_paulis.py +29 -15
- cirq/transformers/eject_phased_paulis_test.py +3 -8
- cirq/transformers/eject_z.py +3 -2
- cirq/transformers/eject_z_test.py +3 -3
- cirq/transformers/gauge_compiling/__init__.py +25 -9
- cirq/transformers/gauge_compiling/cphase_gauge.py +146 -0
- cirq/transformers/gauge_compiling/cphase_gauge_test.py +42 -0
- cirq/transformers/gauge_compiling/cz_gauge.py +4 -4
- cirq/transformers/gauge_compiling/gauge_compiling.py +245 -6
- cirq/transformers/gauge_compiling/gauge_compiling_test.py +107 -2
- cirq/transformers/gauge_compiling/gauge_compiling_test_utils.py +39 -2
- cirq/transformers/gauge_compiling/gauge_compiling_test_utils_test.py +10 -1
- cirq/transformers/gauge_compiling/iswap_gauge.py +2 -2
- cirq/transformers/gauge_compiling/spin_inversion_gauge.py +2 -2
- cirq/transformers/gauge_compiling/sqrt_cz_gauge.py +23 -5
- cirq/transformers/gauge_compiling/sqrt_iswap_gauge.py +3 -2
- cirq/transformers/heuristic_decompositions/__init__.py +3 -3
- cirq/transformers/heuristic_decompositions/gate_tabulation_math_utils.py +2 -1
- cirq/transformers/heuristic_decompositions/gate_tabulation_math_utils_test.py +1 -1
- cirq/transformers/heuristic_decompositions/two_qubit_gate_tabulation.py +4 -4
- cirq/transformers/heuristic_decompositions/two_qubit_gate_tabulation_test.py +4 -4
- cirq/transformers/insertion_sort.py +64 -0
- cirq/transformers/insertion_sort_test.py +34 -0
- cirq/transformers/measurement_transformers.py +14 -1
- cirq/transformers/measurement_transformers_test.py +35 -0
- cirq/transformers/merge_k_qubit_gates.py +2 -2
- cirq/transformers/merge_single_qubit_gates.py +1 -1
- cirq/transformers/merge_single_qubit_gates_test.py +1 -1
- cirq/transformers/noise_adding.py +115 -0
- cirq/transformers/noise_adding_test.py +54 -0
- cirq/transformers/optimize_for_target_gateset.py +1 -1
- cirq/transformers/optimize_for_target_gateset_test.py +3 -2
- cirq/transformers/qubit_management_transformers.py +1 -1
- cirq/transformers/randomized_measurements.py +171 -0
- cirq/transformers/randomized_measurements_test.py +68 -0
- cirq/transformers/routing/__init__.py +14 -5
- cirq/transformers/routing/initial_mapper.py +1 -1
- cirq/transformers/routing/initial_mapper_test.py +1 -0
- cirq/transformers/routing/line_initial_mapper.py +3 -2
- cirq/transformers/routing/mapping_manager.py +2 -2
- cirq/transformers/routing/mapping_manager_test.py +2 -2
- cirq/transformers/routing/route_circuit_cqc.py +3 -2
- cirq/transformers/routing/route_circuit_cqc_test.py +2 -1
- cirq/transformers/routing/visualize_routed_circuit.py +1 -0
- cirq/transformers/routing/visualize_routed_circuit_test.py +1 -0
- cirq/transformers/stratify.py +2 -2
- cirq/transformers/synchronize_terminal_measurements.py +2 -1
- cirq/transformers/target_gatesets/__init__.py +7 -5
- cirq/transformers/target_gatesets/compilation_target_gateset.py +16 -3
- cirq/transformers/target_gatesets/compilation_target_gateset_test.py +2 -0
- cirq/transformers/target_gatesets/cz_gateset.py +5 -1
- cirq/transformers/target_gatesets/cz_gateset_test.py +23 -2
- cirq/transformers/target_gatesets/sqrt_iswap_gateset.py +1 -1
- cirq/transformers/target_gatesets/sqrt_iswap_gateset_test.py +3 -2
- cirq/transformers/transformer_api.py +5 -4
- cirq/transformers/transformer_api_test.py +11 -3
- cirq/transformers/transformer_primitives.py +9 -31
- cirq/transformers/transformer_primitives_test.py +6 -5
- cirq/value/__init__.py +51 -30
- cirq/value/abc_alt.py +1 -2
- cirq/value/angle.py +2 -0
- cirq/value/classical_data.py +1 -0
- cirq/value/condition.py +149 -3
- cirq/value/condition_test.py +254 -0
- cirq/value/digits.py +1 -1
- cirq/value/duration.py +4 -4
- cirq/value/duration_test.py +2 -1
- cirq/value/linear_dict.py +85 -24
- cirq/value/linear_dict_test.py +94 -3
- cirq/value/measurement_key.py +9 -2
- cirq/value/periodic_value.py +2 -3
- cirq/value/periodic_value_test.py +5 -0
- cirq/value/probability.py +1 -0
- cirq/value/random_state.py +1 -1
- cirq/value/timestamp.py +2 -4
- cirq/value/timestamp_test.py +2 -1
- cirq/value/type_alias.py +2 -2
- cirq/value/value_equality_attr.py +14 -2
- cirq/value/value_equality_attr_test.py +1 -1
- cirq/vis/__init__.py +9 -6
- cirq/vis/density_matrix.py +1 -1
- cirq/vis/density_matrix_test.py +2 -5
- cirq/vis/heatmap.py +49 -12
- cirq/vis/heatmap_test.py +168 -4
- cirq/vis/histogram.py +1 -1
- cirq/vis/histogram_test.py +1 -2
- cirq/vis/state_histogram.py +7 -5
- cirq/vis/state_histogram_test.py +2 -2
- cirq/work/__init__.py +19 -13
- cirq/work/collector.py +2 -2
- cirq/work/observable_grouping.py +2 -2
- cirq/work/observable_measurement.py +3 -3
- cirq/work/observable_measurement_data.py +5 -2
- cirq/work/observable_measurement_test.py +8 -8
- cirq/work/observable_readout_calibration.py +2 -2
- cirq/work/observable_readout_calibration_test.py +2 -1
- cirq/work/observable_settings.py +8 -7
- cirq/work/observable_settings_test.py +3 -2
- cirq/work/pauli_sum_collector.py +1 -1
- cirq/work/sampler.py +8 -20
- cirq/work/sampler_test.py +4 -3
- cirq/work/zeros_sampler.py +1 -1
- cirq_core-1.5.0.dist-info/METADATA +125 -0
- {cirq_core-1.4.0.dev20240529225110.dist-info → cirq_core-1.5.0.dist-info}/RECORD +586 -552
- {cirq_core-1.4.0.dev20240529225110.dist-info → cirq_core-1.5.0.dist-info}/WHEEL +1 -1
- cirq/experiments/grid_parallel_two_qubit_xeb.py +0 -62
- cirq/protocols/json_test_data/GridParallelXEBMetadata.json +0 -119
- cirq/protocols/json_test_data/GridParallelXEBMetadata.repr +0 -1
- cirq_core-1.4.0.dev20240529225110.dist-info/METADATA +0 -50
- {cirq_core-1.4.0.dev20240529225110.dist-info → cirq_core-1.5.0.dist-info}/LICENSE +0 -0
- {cirq_core-1.4.0.dev20240529225110.dist-info → cirq_core-1.5.0.dist-info}/top_level.txt +0 -0
cirq/transformers/__init__.py
CHANGED
|
@@ -15,122 +15,141 @@
|
|
|
15
15
|
"""Classes and methods for transforming circuits."""
|
|
16
16
|
|
|
17
17
|
from cirq.transformers.analytical_decompositions import (
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
18
|
+
# pylint: disable=line-too-long
|
|
19
|
+
compute_cphase_exponents_for_fsim_decomposition as compute_cphase_exponents_for_fsim_decomposition,
|
|
20
|
+
decompose_cphase_into_two_fsim as decompose_cphase_into_two_fsim,
|
|
21
|
+
decompose_clifford_tableau_to_operations as decompose_clifford_tableau_to_operations,
|
|
22
|
+
decompose_multi_controlled_x as decompose_multi_controlled_x,
|
|
23
|
+
decompose_multi_controlled_rotation as decompose_multi_controlled_rotation,
|
|
24
|
+
decompose_two_qubit_interaction_into_four_fsim_gates as decompose_two_qubit_interaction_into_four_fsim_gates,
|
|
25
|
+
is_negligible_turn as is_negligible_turn,
|
|
26
|
+
parameterized_2q_op_to_sqrt_iswap_operations as parameterized_2q_op_to_sqrt_iswap_operations,
|
|
27
|
+
prepare_two_qubit_state_using_cz as prepare_two_qubit_state_using_cz,
|
|
28
|
+
prepare_two_qubit_state_using_iswap as prepare_two_qubit_state_using_iswap,
|
|
29
|
+
prepare_two_qubit_state_using_sqrt_iswap as prepare_two_qubit_state_using_sqrt_iswap,
|
|
30
|
+
quantum_shannon_decomposition as quantum_shannon_decomposition,
|
|
31
|
+
single_qubit_matrix_to_gates as single_qubit_matrix_to_gates,
|
|
32
|
+
single_qubit_matrix_to_pauli_rotations as single_qubit_matrix_to_pauli_rotations,
|
|
33
|
+
single_qubit_matrix_to_phased_x_z as single_qubit_matrix_to_phased_x_z,
|
|
34
|
+
single_qubit_matrix_to_phxz as single_qubit_matrix_to_phxz,
|
|
35
|
+
single_qubit_op_to_framed_phase_form as single_qubit_op_to_framed_phase_form,
|
|
36
|
+
three_qubit_matrix_to_operations as three_qubit_matrix_to_operations,
|
|
37
|
+
two_qubit_matrix_to_cz_isometry as two_qubit_matrix_to_cz_isometry,
|
|
38
|
+
two_qubit_matrix_to_cz_operations as two_qubit_matrix_to_cz_operations,
|
|
39
|
+
two_qubit_matrix_to_diagonal_and_cz_operations as two_qubit_matrix_to_diagonal_and_cz_operations,
|
|
40
|
+
two_qubit_matrix_to_ion_operations as two_qubit_matrix_to_ion_operations,
|
|
41
|
+
two_qubit_matrix_to_sqrt_iswap_operations as two_qubit_matrix_to_sqrt_iswap_operations,
|
|
42
|
+
unitary_to_pauli_string as unitary_to_pauli_string,
|
|
42
43
|
)
|
|
43
44
|
|
|
44
45
|
from cirq.transformers.heuristic_decompositions import (
|
|
45
|
-
TwoQubitGateTabulation,
|
|
46
|
-
TwoQubitGateTabulationResult,
|
|
47
|
-
two_qubit_gate_product_tabulation,
|
|
46
|
+
TwoQubitGateTabulation as TwoQubitGateTabulation,
|
|
47
|
+
TwoQubitGateTabulationResult as TwoQubitGateTabulationResult,
|
|
48
|
+
two_qubit_gate_product_tabulation as two_qubit_gate_product_tabulation,
|
|
48
49
|
)
|
|
49
50
|
|
|
50
51
|
from cirq.transformers.routing import (
|
|
51
|
-
AbstractInitialMapper,
|
|
52
|
-
HardCodedInitialMapper,
|
|
53
|
-
LineInitialMapper,
|
|
54
|
-
MappingManager,
|
|
55
|
-
RouteCQC,
|
|
56
|
-
routed_circuit_with_mapping,
|
|
52
|
+
AbstractInitialMapper as AbstractInitialMapper,
|
|
53
|
+
HardCodedInitialMapper as HardCodedInitialMapper,
|
|
54
|
+
LineInitialMapper as LineInitialMapper,
|
|
55
|
+
MappingManager as MappingManager,
|
|
56
|
+
RouteCQC as RouteCQC,
|
|
57
|
+
routed_circuit_with_mapping as routed_circuit_with_mapping,
|
|
57
58
|
)
|
|
58
59
|
|
|
59
60
|
from cirq.transformers.target_gatesets import (
|
|
60
|
-
create_transformer_with_kwargs,
|
|
61
|
-
CompilationTargetGateset,
|
|
62
|
-
CZTargetGateset,
|
|
63
|
-
SqrtIswapTargetGateset,
|
|
64
|
-
TwoQubitCompilationTargetGateset,
|
|
61
|
+
create_transformer_with_kwargs as create_transformer_with_kwargs,
|
|
62
|
+
CompilationTargetGateset as CompilationTargetGateset,
|
|
63
|
+
CZTargetGateset as CZTargetGateset,
|
|
64
|
+
SqrtIswapTargetGateset as SqrtIswapTargetGateset,
|
|
65
|
+
TwoQubitCompilationTargetGateset as TwoQubitCompilationTargetGateset,
|
|
65
66
|
)
|
|
66
67
|
|
|
67
|
-
from cirq.transformers.align import align_left, align_right
|
|
68
|
+
from cirq.transformers.align import align_left as align_left, align_right as align_right
|
|
68
69
|
|
|
69
|
-
from cirq.transformers.stratify import stratified_circuit
|
|
70
|
+
from cirq.transformers.stratify import stratified_circuit as stratified_circuit
|
|
70
71
|
|
|
71
|
-
from cirq.transformers.expand_composite import expand_composite
|
|
72
|
+
from cirq.transformers.expand_composite import expand_composite as expand_composite
|
|
72
73
|
|
|
73
|
-
from cirq.transformers.eject_phased_paulis import eject_phased_paulis
|
|
74
|
+
from cirq.transformers.eject_phased_paulis import eject_phased_paulis as eject_phased_paulis
|
|
74
75
|
|
|
75
|
-
from cirq.transformers.optimize_for_target_gateset import
|
|
76
|
+
from cirq.transformers.optimize_for_target_gateset import (
|
|
77
|
+
optimize_for_target_gateset as optimize_for_target_gateset,
|
|
78
|
+
)
|
|
76
79
|
|
|
77
|
-
from cirq.transformers.drop_empty_moments import drop_empty_moments
|
|
80
|
+
from cirq.transformers.drop_empty_moments import drop_empty_moments as drop_empty_moments
|
|
78
81
|
|
|
79
|
-
from cirq.transformers.drop_negligible_operations import
|
|
82
|
+
from cirq.transformers.drop_negligible_operations import (
|
|
83
|
+
drop_negligible_operations as drop_negligible_operations,
|
|
84
|
+
)
|
|
80
85
|
|
|
81
|
-
from cirq.transformers.dynamical_decoupling import
|
|
86
|
+
from cirq.transformers.dynamical_decoupling import (
|
|
87
|
+
add_dynamical_decoupling as add_dynamical_decoupling,
|
|
88
|
+
)
|
|
82
89
|
|
|
83
|
-
from cirq.transformers.eject_z import eject_z
|
|
90
|
+
from cirq.transformers.eject_z import eject_z as eject_z
|
|
84
91
|
|
|
85
92
|
from cirq.transformers.measurement_transformers import (
|
|
86
|
-
defer_measurements,
|
|
87
|
-
dephase_measurements,
|
|
88
|
-
drop_terminal_measurements,
|
|
93
|
+
defer_measurements as defer_measurements,
|
|
94
|
+
dephase_measurements as dephase_measurements,
|
|
95
|
+
drop_terminal_measurements as drop_terminal_measurements,
|
|
89
96
|
)
|
|
90
97
|
|
|
91
|
-
from cirq.transformers.merge_k_qubit_gates import merge_k_qubit_unitaries
|
|
98
|
+
from cirq.transformers.merge_k_qubit_gates import merge_k_qubit_unitaries as merge_k_qubit_unitaries
|
|
92
99
|
|
|
93
100
|
from cirq.transformers.merge_single_qubit_gates import (
|
|
94
|
-
merge_single_qubit_gates_to_phased_x_and_z,
|
|
95
|
-
merge_single_qubit_gates_to_phxz,
|
|
96
|
-
merge_single_qubit_moments_to_phxz,
|
|
101
|
+
merge_single_qubit_gates_to_phased_x_and_z as merge_single_qubit_gates_to_phased_x_and_z,
|
|
102
|
+
merge_single_qubit_gates_to_phxz as merge_single_qubit_gates_to_phxz,
|
|
103
|
+
merge_single_qubit_moments_to_phxz as merge_single_qubit_moments_to_phxz,
|
|
97
104
|
)
|
|
98
105
|
|
|
99
|
-
from cirq.transformers.qubit_management_transformers import
|
|
106
|
+
from cirq.transformers.qubit_management_transformers import (
|
|
107
|
+
map_clean_and_borrowable_qubits as map_clean_and_borrowable_qubits,
|
|
108
|
+
)
|
|
100
109
|
|
|
101
|
-
from cirq.transformers.synchronize_terminal_measurements import
|
|
110
|
+
from cirq.transformers.synchronize_terminal_measurements import (
|
|
111
|
+
synchronize_terminal_measurements as synchronize_terminal_measurements,
|
|
112
|
+
)
|
|
102
113
|
|
|
103
114
|
from cirq.transformers.transformer_api import (
|
|
104
|
-
LogLevel,
|
|
105
|
-
TRANSFORMER,
|
|
106
|
-
TransformerContext,
|
|
107
|
-
TransformerLogger,
|
|
108
|
-
transformer,
|
|
115
|
+
LogLevel as LogLevel,
|
|
116
|
+
TRANSFORMER as TRANSFORMER,
|
|
117
|
+
TransformerContext as TransformerContext,
|
|
118
|
+
TransformerLogger as TransformerLogger,
|
|
119
|
+
transformer as transformer,
|
|
109
120
|
)
|
|
110
121
|
|
|
111
122
|
from cirq.transformers.transformer_primitives import (
|
|
112
|
-
map_moments,
|
|
113
|
-
map_operations,
|
|
114
|
-
map_operations_and_unroll,
|
|
115
|
-
merge_k_qubit_unitaries_to_circuit_op,
|
|
116
|
-
merge_moments,
|
|
117
|
-
merge_operations,
|
|
118
|
-
merge_operations_to_circuit_op,
|
|
119
|
-
toggle_tags,
|
|
120
|
-
unroll_circuit_op,
|
|
121
|
-
unroll_circuit_op_greedy_earliest,
|
|
122
|
-
unroll_circuit_op_greedy_frontier,
|
|
123
|
+
map_moments as map_moments,
|
|
124
|
+
map_operations as map_operations,
|
|
125
|
+
map_operations_and_unroll as map_operations_and_unroll,
|
|
126
|
+
merge_k_qubit_unitaries_to_circuit_op as merge_k_qubit_unitaries_to_circuit_op,
|
|
127
|
+
merge_moments as merge_moments,
|
|
128
|
+
merge_operations as merge_operations,
|
|
129
|
+
merge_operations_to_circuit_op as merge_operations_to_circuit_op,
|
|
130
|
+
toggle_tags as toggle_tags,
|
|
131
|
+
unroll_circuit_op as unroll_circuit_op,
|
|
132
|
+
unroll_circuit_op_greedy_earliest as unroll_circuit_op_greedy_earliest,
|
|
133
|
+
unroll_circuit_op_greedy_frontier as unroll_circuit_op_greedy_frontier,
|
|
123
134
|
)
|
|
124
135
|
|
|
125
|
-
|
|
126
136
|
from cirq.transformers.gauge_compiling import (
|
|
127
|
-
CZGaugeTransformer,
|
|
128
|
-
ConstantGauge,
|
|
129
|
-
Gauge,
|
|
130
|
-
GaugeSelector,
|
|
131
|
-
GaugeTransformer,
|
|
132
|
-
ISWAPGaugeTransformer,
|
|
133
|
-
SpinInversionGaugeTransformer,
|
|
134
|
-
SqrtCZGaugeTransformer,
|
|
135
|
-
SqrtISWAPGaugeTransformer,
|
|
137
|
+
CZGaugeTransformer as CZGaugeTransformer,
|
|
138
|
+
ConstantGauge as ConstantGauge,
|
|
139
|
+
Gauge as Gauge,
|
|
140
|
+
GaugeSelector as GaugeSelector,
|
|
141
|
+
GaugeTransformer as GaugeTransformer,
|
|
142
|
+
ISWAPGaugeTransformer as ISWAPGaugeTransformer,
|
|
143
|
+
SpinInversionGaugeTransformer as SpinInversionGaugeTransformer,
|
|
144
|
+
SqrtCZGaugeTransformer as SqrtCZGaugeTransformer,
|
|
145
|
+
SqrtISWAPGaugeTransformer as SqrtISWAPGaugeTransformer,
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
from cirq.transformers.randomized_measurements import (
|
|
149
|
+
RandomizedMeasurements as RandomizedMeasurements,
|
|
150
|
+
)
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
from cirq.transformers.insertion_sort import (
|
|
154
|
+
insertion_sort_transformer as insertion_sort_transformer,
|
|
136
155
|
)
|
cirq/transformers/align.py
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
import dataclasses
|
|
18
18
|
from typing import Optional, TYPE_CHECKING
|
|
19
|
+
|
|
19
20
|
from cirq import circuits, ops
|
|
20
21
|
from cirq.transformers import transformer_api
|
|
21
22
|
|
|
@@ -73,4 +74,14 @@ def align_right(
|
|
|
73
74
|
"""
|
|
74
75
|
if context is not None and context.deep is True:
|
|
75
76
|
context = dataclasses.replace(context, deep=False)
|
|
76
|
-
|
|
77
|
+
# Reverse the circuit, align left, and reverse again. Note each moment also has to have its ops
|
|
78
|
+
# reversed internally, to avoid edge conditions where non-commuting but can-be-in-same-moment
|
|
79
|
+
# ops (measurements and classical controls, particularly) could end up getting swapped.
|
|
80
|
+
backwards = []
|
|
81
|
+
for moment in circuit[::-1]:
|
|
82
|
+
backwards.append(circuits.Moment(reversed(moment.operations)))
|
|
83
|
+
aligned_backwards = align_left(circuits.Circuit(backwards), context=context)
|
|
84
|
+
forwards = []
|
|
85
|
+
for moment in aligned_backwards[::-1]:
|
|
86
|
+
forwards.append(circuits.Moment(reversed(moment.operations)))
|
|
87
|
+
return circuits.Circuit(forwards)
|
cirq/transformers/align_test.py
CHANGED
|
@@ -208,3 +208,16 @@ def test_classical_control():
|
|
|
208
208
|
)
|
|
209
209
|
cirq.testing.assert_same_circuits(cirq.align_left(circuit), circuit)
|
|
210
210
|
cirq.testing.assert_same_circuits(cirq.align_right(circuit), circuit)
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
def test_measurement_and_classical_control_same_moment_preserve_order():
|
|
214
|
+
q0, q1 = cirq.LineQubit.range(2)
|
|
215
|
+
circuit = cirq.Circuit()
|
|
216
|
+
op_measure = cirq.measure(q0, key='m')
|
|
217
|
+
op_controlled = cirq.X(q1).with_classical_controls('m')
|
|
218
|
+
circuit.append(op_measure)
|
|
219
|
+
circuit.append(op_controlled, cirq.InsertStrategy.INLINE)
|
|
220
|
+
circuit = cirq.align_right(circuit)
|
|
221
|
+
ops_in_order = list(circuit.all_operations())
|
|
222
|
+
assert ops_in_order[0] == op_measure
|
|
223
|
+
assert ops_in_order[1] == op_controlled
|
|
@@ -15,64 +15,67 @@
|
|
|
15
15
|
"""Utilities for analytical decomposition of cirq gates."""
|
|
16
16
|
|
|
17
17
|
from cirq.transformers.analytical_decompositions.clifford_decomposition import (
|
|
18
|
-
decompose_clifford_tableau_to_operations,
|
|
18
|
+
decompose_clifford_tableau_to_operations as decompose_clifford_tableau_to_operations,
|
|
19
19
|
)
|
|
20
20
|
|
|
21
21
|
from cirq.transformers.analytical_decompositions.controlled_gate_decomposition import (
|
|
22
|
-
decompose_multi_controlled_x,
|
|
23
|
-
decompose_multi_controlled_rotation,
|
|
22
|
+
decompose_multi_controlled_x as decompose_multi_controlled_x,
|
|
23
|
+
decompose_multi_controlled_rotation as decompose_multi_controlled_rotation,
|
|
24
24
|
)
|
|
25
25
|
|
|
26
26
|
from cirq.transformers.analytical_decompositions.cphase_to_fsim import (
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
# pylint: disable=line-too-long
|
|
28
|
+
compute_cphase_exponents_for_fsim_decomposition as compute_cphase_exponents_for_fsim_decomposition,
|
|
29
|
+
decompose_cphase_into_two_fsim as decompose_cphase_into_two_fsim,
|
|
29
30
|
)
|
|
30
31
|
|
|
31
32
|
from cirq.transformers.analytical_decompositions.quantum_shannon_decomposition import (
|
|
32
|
-
quantum_shannon_decomposition,
|
|
33
|
+
quantum_shannon_decomposition as quantum_shannon_decomposition,
|
|
33
34
|
)
|
|
34
35
|
|
|
35
36
|
from cirq.transformers.analytical_decompositions.single_qubit_decompositions import (
|
|
36
|
-
is_negligible_turn,
|
|
37
|
-
single_qubit_matrix_to_gates,
|
|
38
|
-
single_qubit_matrix_to_pauli_rotations,
|
|
39
|
-
single_qubit_matrix_to_phased_x_z,
|
|
40
|
-
single_qubit_matrix_to_phxz,
|
|
41
|
-
single_qubit_op_to_framed_phase_form,
|
|
37
|
+
is_negligible_turn as is_negligible_turn,
|
|
38
|
+
single_qubit_matrix_to_gates as single_qubit_matrix_to_gates,
|
|
39
|
+
single_qubit_matrix_to_pauli_rotations as single_qubit_matrix_to_pauli_rotations,
|
|
40
|
+
single_qubit_matrix_to_phased_x_z as single_qubit_matrix_to_phased_x_z,
|
|
41
|
+
single_qubit_matrix_to_phxz as single_qubit_matrix_to_phxz,
|
|
42
|
+
single_qubit_op_to_framed_phase_form as single_qubit_op_to_framed_phase_form,
|
|
42
43
|
)
|
|
43
44
|
|
|
44
45
|
from cirq.transformers.analytical_decompositions.three_qubit_decomposition import (
|
|
45
|
-
three_qubit_matrix_to_operations,
|
|
46
|
+
three_qubit_matrix_to_operations as three_qubit_matrix_to_operations,
|
|
46
47
|
)
|
|
47
48
|
|
|
48
49
|
from cirq.transformers.analytical_decompositions.two_qubit_to_cz import (
|
|
49
|
-
|
|
50
|
-
|
|
50
|
+
# pylint: disable=line-too-long
|
|
51
|
+
two_qubit_matrix_to_cz_operations as two_qubit_matrix_to_cz_operations,
|
|
52
|
+
two_qubit_matrix_to_diagonal_and_cz_operations as two_qubit_matrix_to_diagonal_and_cz_operations,
|
|
51
53
|
)
|
|
52
54
|
|
|
53
55
|
from cirq.transformers.analytical_decompositions.two_qubit_to_fsim import (
|
|
54
|
-
|
|
56
|
+
# pylint: disable=line-too-long
|
|
57
|
+
decompose_two_qubit_interaction_into_four_fsim_gates as decompose_two_qubit_interaction_into_four_fsim_gates,
|
|
55
58
|
)
|
|
56
59
|
|
|
57
60
|
from cirq.transformers.analytical_decompositions.two_qubit_to_ms import (
|
|
58
|
-
two_qubit_matrix_to_ion_operations,
|
|
61
|
+
two_qubit_matrix_to_ion_operations as two_qubit_matrix_to_ion_operations,
|
|
59
62
|
)
|
|
60
63
|
|
|
61
64
|
from cirq.transformers.analytical_decompositions.two_qubit_to_sqrt_iswap import (
|
|
62
|
-
parameterized_2q_op_to_sqrt_iswap_operations,
|
|
63
|
-
two_qubit_matrix_to_sqrt_iswap_operations,
|
|
65
|
+
parameterized_2q_op_to_sqrt_iswap_operations as parameterized_2q_op_to_sqrt_iswap_operations,
|
|
66
|
+
two_qubit_matrix_to_sqrt_iswap_operations as two_qubit_matrix_to_sqrt_iswap_operations,
|
|
64
67
|
)
|
|
65
68
|
|
|
66
69
|
from cirq.transformers.analytical_decompositions.two_qubit_state_preparation import (
|
|
67
|
-
prepare_two_qubit_state_using_cz,
|
|
68
|
-
prepare_two_qubit_state_using_sqrt_iswap,
|
|
69
|
-
prepare_two_qubit_state_using_iswap,
|
|
70
|
+
prepare_two_qubit_state_using_cz as prepare_two_qubit_state_using_cz,
|
|
71
|
+
prepare_two_qubit_state_using_sqrt_iswap as prepare_two_qubit_state_using_sqrt_iswap,
|
|
72
|
+
prepare_two_qubit_state_using_iswap as prepare_two_qubit_state_using_iswap,
|
|
70
73
|
)
|
|
71
74
|
|
|
72
75
|
from cirq.transformers.analytical_decompositions.single_to_two_qubit_isometry import (
|
|
73
|
-
two_qubit_matrix_to_cz_isometry,
|
|
76
|
+
two_qubit_matrix_to_cz_isometry as two_qubit_matrix_to_cz_isometry,
|
|
74
77
|
)
|
|
75
78
|
|
|
76
79
|
from cirq.transformers.analytical_decompositions.pauli_string_decomposition import (
|
|
77
|
-
unitary_to_pauli_string,
|
|
80
|
+
unitary_to_pauli_string as unitary_to_pauli_string,
|
|
78
81
|
)
|
|
@@ -14,10 +14,11 @@
|
|
|
14
14
|
|
|
15
15
|
"""Utility methods to decompose Clifford gates into circuits."""
|
|
16
16
|
|
|
17
|
-
from typing import List, TYPE_CHECKING
|
|
18
17
|
import functools
|
|
18
|
+
from typing import List, TYPE_CHECKING
|
|
19
19
|
|
|
20
20
|
import numpy as np
|
|
21
|
+
|
|
21
22
|
from cirq import ops, protocols, qis, sim
|
|
22
23
|
|
|
23
24
|
if TYPE_CHECKING:
|
|
@@ -17,7 +17,7 @@ from typing import List, Tuple, TYPE_CHECKING
|
|
|
17
17
|
import numpy as np
|
|
18
18
|
|
|
19
19
|
from cirq import ops
|
|
20
|
-
from cirq.linalg import
|
|
20
|
+
from cirq.linalg import is_special_unitary, is_unitary, map_eigenvalues
|
|
21
21
|
from cirq.protocols import unitary
|
|
22
22
|
|
|
23
23
|
if TYPE_CHECKING:
|
|
@@ -87,6 +87,7 @@ def test_decompose_specific_matrices():
|
|
|
87
87
|
_test_decompose(cirq.unitary(gate), controls_count)
|
|
88
88
|
|
|
89
89
|
|
|
90
|
+
@cirq.testing.retry_once_with_later_random_values
|
|
90
91
|
def test_decompose_random_unitary():
|
|
91
92
|
for controls_count in range(5):
|
|
92
93
|
for _ in range(10):
|
|
@@ -95,6 +96,7 @@ def test_decompose_random_unitary():
|
|
|
95
96
|
_test_decompose(_random_unitary(), controls_count)
|
|
96
97
|
|
|
97
98
|
|
|
99
|
+
@cirq.testing.retry_once_with_later_random_values
|
|
98
100
|
def test_decompose_random_special_unitary():
|
|
99
101
|
for controls_count in range(5):
|
|
100
102
|
for _ in range(10):
|
|
@@ -56,7 +56,7 @@ def compute_cphase_exponents_for_fsim_decomposition(
|
|
|
56
56
|
"""
|
|
57
57
|
|
|
58
58
|
def nonempty_intervals(
|
|
59
|
-
intervals: Sequence[Tuple[float, float]]
|
|
59
|
+
intervals: Sequence[Tuple[float, float]],
|
|
60
60
|
) -> Sequence[Tuple[float, float]]:
|
|
61
61
|
return tuple((a, b) for a, b in intervals if a < b)
|
|
62
62
|
|
|
@@ -12,13 +12,13 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
-
from typing import Optional, Tuple
|
|
15
|
+
from typing import cast, Optional, Tuple
|
|
16
16
|
|
|
17
17
|
import numpy as np
|
|
18
18
|
import numpy.typing as npt
|
|
19
19
|
|
|
20
|
-
from cirq.ops import DensePauliString
|
|
21
20
|
from cirq import protocols
|
|
21
|
+
from cirq.ops import DensePauliString
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
def _argmax(V: npt.NDArray) -> Tuple[int, float]:
|
|
@@ -12,15 +12,15 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
-
from typing import cast
|
|
16
|
-
import itertools
|
|
17
15
|
import cmath
|
|
18
|
-
import
|
|
16
|
+
import itertools
|
|
17
|
+
from typing import cast
|
|
19
18
|
|
|
20
19
|
import numpy as np
|
|
20
|
+
import pytest
|
|
21
21
|
|
|
22
|
-
from cirq.ops import DensePauliString, T
|
|
23
22
|
from cirq import protocols
|
|
23
|
+
from cirq.ops import DensePauliString, T
|
|
24
24
|
from cirq.transformers.analytical_decompositions import unitary_to_pauli_string
|
|
25
25
|
|
|
26
26
|
|