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
|
@@ -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
|
from typing import Any, Dict, Generic, Sequence, Type, TYPE_CHECKING
|
|
16
18
|
|
|
17
19
|
import numpy as np
|
|
@@ -47,7 +49,7 @@ class CustomStateSimulator(
|
|
|
47
49
|
self,
|
|
48
50
|
state_type: Type[TSimulationState],
|
|
49
51
|
*,
|
|
50
|
-
noise:
|
|
52
|
+
noise: cirq.NOISE_MODEL_LIKE = None,
|
|
51
53
|
split_untangled_states: bool = False,
|
|
52
54
|
):
|
|
53
55
|
"""Initializes a CustomStateSimulator.
|
|
@@ -63,24 +65,24 @@ class CustomStateSimulator(
|
|
|
63
65
|
|
|
64
66
|
def _create_simulator_trial_result(
|
|
65
67
|
self,
|
|
66
|
-
params:
|
|
68
|
+
params: cirq.ParamResolver,
|
|
67
69
|
measurements: Dict[str, np.ndarray],
|
|
68
|
-
final_simulator_state:
|
|
69
|
-
) ->
|
|
70
|
+
final_simulator_state: cirq.SimulationStateBase[TSimulationState],
|
|
71
|
+
) -> CustomStateTrialResult[TSimulationState]:
|
|
70
72
|
return CustomStateTrialResult(
|
|
71
73
|
params, measurements, final_simulator_state=final_simulator_state
|
|
72
74
|
)
|
|
73
75
|
|
|
74
76
|
def _create_step_result(
|
|
75
|
-
self, sim_state:
|
|
76
|
-
) ->
|
|
77
|
+
self, sim_state: cirq.SimulationStateBase[TSimulationState]
|
|
78
|
+
) -> CustomStateStepResult[TSimulationState]:
|
|
77
79
|
return CustomStateStepResult(sim_state)
|
|
78
80
|
|
|
79
81
|
def _create_partial_simulation_state(
|
|
80
82
|
self,
|
|
81
83
|
initial_state: Any,
|
|
82
|
-
qubits: Sequence[
|
|
83
|
-
classical_data:
|
|
84
|
+
qubits: Sequence[cirq.Qid],
|
|
85
|
+
classical_data: cirq.ClassicalDataStore,
|
|
84
86
|
) -> TSimulationState:
|
|
85
87
|
return self.state_type(
|
|
86
88
|
initial_state=initial_state, qubits=qubits, classical_data=classical_data
|
|
@@ -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
|
from typing import List, Sequence, Tuple
|
|
16
18
|
|
|
17
19
|
import numpy as np
|
|
@@ -25,10 +27,10 @@ class ComputationalBasisState(cirq.qis.QuantumStateRepresentation):
|
|
|
25
27
|
def __init__(self, initial_state: List[int]):
|
|
26
28
|
self.basis = initial_state
|
|
27
29
|
|
|
28
|
-
def copy(self, deep_copy_buffers: bool = True) ->
|
|
29
|
-
return ComputationalBasisState(self.basis)
|
|
30
|
+
def copy(self, deep_copy_buffers: bool = True) -> ComputationalBasisState:
|
|
31
|
+
return ComputationalBasisState(self.basis) # pragma: no cover
|
|
30
32
|
|
|
31
|
-
def measure(self, axes: Sequence[int], seed:
|
|
33
|
+
def measure(self, axes: Sequence[int], seed: cirq.RANDOM_STATE_OR_SEED_LIKE = None):
|
|
32
34
|
return [self.basis[i] for i in axes]
|
|
33
35
|
|
|
34
36
|
|
|
@@ -137,25 +139,27 @@ class ComputationalBasisProductState(cirq.qis.QuantumStateRepresentation):
|
|
|
137
139
|
def __init__(self, initial_state: List[int]):
|
|
138
140
|
self.basis = initial_state
|
|
139
141
|
|
|
140
|
-
def copy(self, deep_copy_buffers: bool = True) ->
|
|
142
|
+
def copy(self, deep_copy_buffers: bool = True) -> ComputationalBasisProductState:
|
|
141
143
|
return ComputationalBasisProductState(self.basis)
|
|
142
144
|
|
|
143
|
-
def measure(self, axes: Sequence[int], seed:
|
|
145
|
+
def measure(self, axes: Sequence[int], seed: cirq.RANDOM_STATE_OR_SEED_LIKE = None):
|
|
144
146
|
return [self.basis[i] for i in axes]
|
|
145
147
|
|
|
146
|
-
def kron(self, other:
|
|
148
|
+
def kron(self, other: ComputationalBasisProductState) -> ComputationalBasisProductState:
|
|
147
149
|
return ComputationalBasisProductState(self.basis + other.basis)
|
|
148
150
|
|
|
149
151
|
def factor(
|
|
150
152
|
self, axes: Sequence[int], *, validate=True, atol=1e-07
|
|
151
|
-
) -> Tuple[
|
|
152
|
-
extracted = ComputationalBasisProductState(
|
|
153
|
+
) -> Tuple[ComputationalBasisProductState, ComputationalBasisProductState]:
|
|
154
|
+
extracted = ComputationalBasisProductState(
|
|
155
|
+
[self.basis[i] for i in axes]
|
|
156
|
+
) # pragma: no cover
|
|
153
157
|
remainder = ComputationalBasisProductState(
|
|
154
158
|
[self.basis[i] for i in range(len(self.basis)) if i not in axes]
|
|
155
|
-
)
|
|
156
|
-
return extracted, remainder
|
|
159
|
+
) # pragma: no cover
|
|
160
|
+
return extracted, remainder # pragma: no cover
|
|
157
161
|
|
|
158
|
-
def reindex(self, axes: Sequence[int]) ->
|
|
162
|
+
def reindex(self, axes: Sequence[int]) -> ComputationalBasisProductState:
|
|
159
163
|
return ComputationalBasisProductState([self.basis[i] for i in axes])
|
|
160
164
|
|
|
161
165
|
@property
|
|
@@ -14,17 +14,17 @@
|
|
|
14
14
|
|
|
15
15
|
"""Tools for representing a device as an edge-labelled graph."""
|
|
16
16
|
|
|
17
|
-
from cirq.contrib.graph_device.hypergraph import UndirectedHypergraph
|
|
17
|
+
from cirq.contrib.graph_device.hypergraph import UndirectedHypergraph as UndirectedHypergraph
|
|
18
18
|
|
|
19
19
|
from cirq.contrib.graph_device.graph_device import (
|
|
20
|
-
is_undirected_device_graph,
|
|
21
|
-
is_crosstalk_graph,
|
|
22
|
-
FixedDurationUndirectedGraphDeviceEdge,
|
|
23
|
-
UndirectedGraphDevice,
|
|
24
|
-
UnconstrainedUndirectedGraphDeviceEdge,
|
|
20
|
+
is_undirected_device_graph as is_undirected_device_graph,
|
|
21
|
+
is_crosstalk_graph as is_crosstalk_graph,
|
|
22
|
+
FixedDurationUndirectedGraphDeviceEdge as FixedDurationUndirectedGraphDeviceEdge,
|
|
23
|
+
UndirectedGraphDevice as UndirectedGraphDevice,
|
|
24
|
+
UnconstrainedUndirectedGraphDeviceEdge as UnconstrainedUndirectedGraphDeviceEdge,
|
|
25
25
|
)
|
|
26
26
|
|
|
27
27
|
from cirq.contrib.graph_device.uniform_graph_device import (
|
|
28
|
-
uniform_undirected_graph_device,
|
|
29
|
-
uniform_undirected_linear_device,
|
|
28
|
+
uniform_undirected_graph_device as uniform_undirected_graph_device,
|
|
29
|
+
uniform_undirected_linear_device as uniform_undirected_linear_device,
|
|
30
30
|
)
|
|
@@ -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 __future__ import annotations
|
|
16
|
+
|
|
15
17
|
import abc
|
|
16
18
|
import itertools
|
|
17
|
-
|
|
18
|
-
from typing import Iterable, Optional, TYPE_CHECKING, Tuple, cast
|
|
19
|
+
from typing import cast, Iterable, Optional, Tuple, TYPE_CHECKING
|
|
19
20
|
|
|
20
21
|
from cirq import devices, ops, value
|
|
21
|
-
|
|
22
22
|
from cirq.contrib.graph_device.hypergraph import UndirectedHypergraph
|
|
23
23
|
|
|
24
24
|
if TYPE_CHECKING:
|
|
@@ -30,11 +30,11 @@ class UndirectedGraphDeviceEdge(metaclass=abc.ABCMeta):
|
|
|
30
30
|
|
|
31
31
|
@abc.abstractmethod
|
|
32
32
|
def duration_of(self, operation: ops.Operation) -> value.Duration:
|
|
33
|
-
pass
|
|
33
|
+
pass
|
|
34
34
|
|
|
35
35
|
@abc.abstractmethod
|
|
36
36
|
def validate_operation(self, operation: ops.Operation) -> None:
|
|
37
|
-
pass
|
|
37
|
+
pass
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
@value.value_equality
|
|
@@ -62,7 +62,7 @@ class _UnconstrainedUndirectedGraphDeviceEdge(UndirectedGraphDeviceEdge):
|
|
|
62
62
|
return value.Duration(picos=0)
|
|
63
63
|
|
|
64
64
|
def validate_operation(self, operation: ops.Operation) -> None:
|
|
65
|
-
pass
|
|
65
|
+
pass
|
|
66
66
|
|
|
67
67
|
def __eq__(self, other):
|
|
68
68
|
return self.__class__ == other.__class__
|
|
@@ -152,7 +152,7 @@ class UndirectedGraphDevice(devices.Device):
|
|
|
152
152
|
self.crosstalk_graph = crosstalk_graph
|
|
153
153
|
|
|
154
154
|
@property
|
|
155
|
-
def qubits(self) -> Tuple[
|
|
155
|
+
def qubits(self) -> Tuple[cirq.Qid, ...]:
|
|
156
156
|
return cast(Tuple['cirq.Qid', ...], tuple(sorted(self.device_graph.vertices)))
|
|
157
157
|
|
|
158
158
|
@property
|
|
@@ -194,7 +194,7 @@ class UndirectedGraphDevice(devices.Device):
|
|
|
194
194
|
):
|
|
195
195
|
validator(operation, *crosstalk_operations)
|
|
196
196
|
|
|
197
|
-
def validate_moment(self, moment:
|
|
197
|
+
def validate_moment(self, moment: cirq.Moment):
|
|
198
198
|
super().validate_moment(moment)
|
|
199
199
|
ops = moment.operations
|
|
200
200
|
for i, op in enumerate(ops):
|
cirq/contrib/json.py
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
# pylint: disable=wrong-or-nonexistent-copyright-notice
|
|
2
|
-
"""Functions for JSON serialization and de-serialization for classes in Contrib.
|
|
3
|
-
"""
|
|
2
|
+
"""Functions for JSON serialization and de-serialization for classes in Contrib."""
|
|
4
3
|
|
|
5
4
|
from cirq.protocols.json_serialization import DEFAULT_RESOLVERS
|
|
6
5
|
|
cirq/contrib/json_test.py
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# pylint: disable=wrong-or-nonexistent-copyright-notice
|
|
2
2
|
import cirq
|
|
3
|
-
from cirq.testing import assert_json_roundtrip_works
|
|
4
|
-
from cirq.contrib.json import DEFAULT_CONTRIB_RESOLVERS
|
|
5
3
|
from cirq.contrib.acquaintance import SwapPermutationGate
|
|
6
4
|
from cirq.contrib.bayesian_network import BayesianNetworkGate
|
|
5
|
+
from cirq.contrib.json import DEFAULT_CONTRIB_RESOLVERS
|
|
7
6
|
from cirq.contrib.quantum_volume import QuantumVolumeResult
|
|
7
|
+
from cirq.testing import assert_json_roundtrip_works
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
def test_bayesian_network_gate():
|
|
@@ -11,11 +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
|
-
|
|
15
14
|
from cirq.contrib.noise_models.noise_models import (
|
|
16
|
-
DepolarizingNoiseModel,
|
|
17
|
-
ReadoutNoiseModel,
|
|
18
|
-
DampedReadoutNoiseModel,
|
|
19
|
-
DepolarizingWithReadoutNoiseModel,
|
|
20
|
-
DepolarizingWithDampedReadoutNoiseModel,
|
|
15
|
+
DepolarizingNoiseModel as DepolarizingNoiseModel,
|
|
16
|
+
ReadoutNoiseModel as ReadoutNoiseModel,
|
|
17
|
+
DampedReadoutNoiseModel as DampedReadoutNoiseModel,
|
|
18
|
+
DepolarizingWithReadoutNoiseModel as DepolarizingWithReadoutNoiseModel,
|
|
19
|
+
DepolarizingWithDampedReadoutNoiseModel as DepolarizingWithDampedReadoutNoiseModel,
|
|
21
20
|
)
|
|
@@ -12,9 +12,11 @@
|
|
|
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
|
from typing import Sequence, TYPE_CHECKING
|
|
16
18
|
|
|
17
|
-
from cirq import circuits, devices,
|
|
19
|
+
from cirq import circuits, devices, ops, value
|
|
18
20
|
from cirq.devices.noise_model import validate_all_measurements
|
|
19
21
|
|
|
20
22
|
if TYPE_CHECKING:
|
|
@@ -40,7 +42,7 @@ class DepolarizingNoiseModel(devices.NoiseModel):
|
|
|
40
42
|
self.qubit_noise_gate = ops.DepolarizingChannel(depol_prob)
|
|
41
43
|
self._prepend = prepend
|
|
42
44
|
|
|
43
|
-
def noisy_moment(self, moment:
|
|
45
|
+
def noisy_moment(self, moment: cirq.Moment, system_qubits: Sequence[cirq.Qid]):
|
|
44
46
|
if validate_all_measurements(moment) or self.is_virtual_moment(moment): # pragma: no cover
|
|
45
47
|
return moment
|
|
46
48
|
|
|
@@ -76,7 +78,7 @@ class ReadoutNoiseModel(devices.NoiseModel):
|
|
|
76
78
|
self.readout_noise_gate = ops.BitFlipChannel(bitflip_prob)
|
|
77
79
|
self._prepend = prepend
|
|
78
80
|
|
|
79
|
-
def noisy_moment(self, moment:
|
|
81
|
+
def noisy_moment(self, moment: cirq.Moment, system_qubits: Sequence[cirq.Qid]):
|
|
80
82
|
if self.is_virtual_moment(moment):
|
|
81
83
|
return moment
|
|
82
84
|
if validate_all_measurements(moment):
|
|
@@ -113,7 +115,7 @@ class DampedReadoutNoiseModel(devices.NoiseModel):
|
|
|
113
115
|
self.readout_decay_gate = ops.AmplitudeDampingChannel(decay_prob)
|
|
114
116
|
self._prepend = prepend
|
|
115
117
|
|
|
116
|
-
def noisy_moment(self, moment:
|
|
118
|
+
def noisy_moment(self, moment: cirq.Moment, system_qubits: Sequence[cirq.Qid]):
|
|
117
119
|
if self.is_virtual_moment(moment):
|
|
118
120
|
return moment
|
|
119
121
|
if validate_all_measurements(moment):
|
|
@@ -146,7 +148,7 @@ class DepolarizingWithReadoutNoiseModel(devices.NoiseModel):
|
|
|
146
148
|
self.qubit_noise_gate = ops.DepolarizingChannel(depol_prob)
|
|
147
149
|
self.readout_noise_gate = ops.BitFlipChannel(bitflip_prob)
|
|
148
150
|
|
|
149
|
-
def noisy_moment(self, moment:
|
|
151
|
+
def noisy_moment(self, moment: cirq.Moment, system_qubits: Sequence[cirq.Qid]):
|
|
150
152
|
if validate_all_measurements(moment):
|
|
151
153
|
return [circuits.Moment(self.readout_noise_gate(q) for q in system_qubits), moment]
|
|
152
154
|
return [moment, circuits.Moment(self.qubit_noise_gate(q) for q in system_qubits)]
|
|
@@ -176,7 +178,7 @@ class DepolarizingWithDampedReadoutNoiseModel(devices.NoiseModel):
|
|
|
176
178
|
self.readout_noise_gate = ops.BitFlipChannel(bitflip_prob)
|
|
177
179
|
self.readout_decay_gate = ops.AmplitudeDampingChannel(decay_prob)
|
|
178
180
|
|
|
179
|
-
def noisy_moment(self, moment:
|
|
181
|
+
def noisy_moment(self, moment: cirq.Moment, system_qubits: Sequence[cirq.Qid]):
|
|
180
182
|
if validate_all_measurements(moment):
|
|
181
183
|
return [
|
|
182
184
|
circuits.Moment(self.readout_decay_gate(q) for q in system_qubits),
|
|
@@ -14,23 +14,35 @@
|
|
|
14
14
|
|
|
15
15
|
"""Methods related to optimizing and transforming PauliStrings."""
|
|
16
16
|
|
|
17
|
-
from cirq.contrib.paulistring.clifford_target_gateset import
|
|
17
|
+
from cirq.contrib.paulistring.clifford_target_gateset import (
|
|
18
|
+
CliffordTargetGateset as CliffordTargetGateset,
|
|
19
|
+
)
|
|
18
20
|
|
|
19
21
|
from cirq.contrib.paulistring.separate import (
|
|
20
|
-
convert_and_separate_circuit,
|
|
21
|
-
pauli_string_half,
|
|
22
|
-
regular_half,
|
|
22
|
+
convert_and_separate_circuit as convert_and_separate_circuit,
|
|
23
|
+
pauli_string_half as pauli_string_half,
|
|
24
|
+
regular_half as regular_half,
|
|
23
25
|
)
|
|
24
26
|
|
|
25
27
|
from cirq.contrib.paulistring.pauli_string_dag import (
|
|
26
|
-
pauli_string_dag_from_circuit,
|
|
27
|
-
pauli_string_reorder_pred,
|
|
28
|
+
pauli_string_dag_from_circuit as pauli_string_dag_from_circuit,
|
|
29
|
+
pauli_string_reorder_pred as pauli_string_reorder_pred,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
from cirq.contrib.paulistring.recombine import (
|
|
33
|
+
move_pauli_strings_into_circuit as move_pauli_strings_into_circuit,
|
|
28
34
|
)
|
|
29
35
|
|
|
30
|
-
from cirq.contrib.paulistring.
|
|
36
|
+
from cirq.contrib.paulistring.pauli_string_optimize import (
|
|
37
|
+
pauli_string_optimized_circuit as pauli_string_optimized_circuit,
|
|
38
|
+
)
|
|
31
39
|
|
|
32
|
-
from cirq.contrib.paulistring.
|
|
40
|
+
from cirq.contrib.paulistring.clifford_optimize import (
|
|
41
|
+
clifford_optimized_circuit as clifford_optimized_circuit,
|
|
42
|
+
)
|
|
33
43
|
|
|
34
|
-
from cirq.contrib.paulistring.
|
|
44
|
+
from cirq.contrib.paulistring.optimize import optimized_circuit as optimized_circuit
|
|
35
45
|
|
|
36
|
-
from cirq.contrib.paulistring.
|
|
46
|
+
from cirq.contrib.paulistring.pauli_string_measurement_with_readout_mitigation import (
|
|
47
|
+
measure_pauli_strings as measure_pauli_strings,
|
|
48
|
+
)
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
-
from typing import
|
|
15
|
+
from typing import cast, Tuple
|
|
16
16
|
|
|
17
17
|
from cirq import circuits, ops, protocols, transformers
|
|
18
18
|
from cirq.contrib.paulistring.clifford_target_gateset import CliffordTargetGateset
|
|
@@ -12,19 +12,22 @@
|
|
|
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
|
+
|
|
16
17
|
from enum import Enum
|
|
18
|
+
from types import NotImplementedType
|
|
19
|
+
from typing import cast, List, Type, TYPE_CHECKING, Union
|
|
20
|
+
|
|
17
21
|
import numpy as np
|
|
18
22
|
|
|
19
|
-
from cirq import
|
|
20
|
-
from cirq.type_workarounds import NotImplementedType
|
|
23
|
+
from cirq import linalg, ops, protocols, transformers
|
|
21
24
|
|
|
22
25
|
if TYPE_CHECKING:
|
|
23
26
|
import cirq
|
|
24
27
|
|
|
25
28
|
|
|
26
29
|
def _matrix_to_clifford_op(
|
|
27
|
-
mat: np.ndarray, qubit:
|
|
30
|
+
mat: np.ndarray, qubit: cirq.Qid, *, atol: float
|
|
28
31
|
) -> Union[ops.Operation, NotImplementedType]:
|
|
29
32
|
rotations = transformers.single_qubit_matrix_to_pauli_rotations(mat, atol)
|
|
30
33
|
clifford_gate = ops.SingleQubitCliffordGate.I
|
|
@@ -42,7 +45,7 @@ def _matrix_to_clifford_op(
|
|
|
42
45
|
|
|
43
46
|
|
|
44
47
|
def _matrix_to_pauli_string_phasors(
|
|
45
|
-
mat: np.ndarray, qubit:
|
|
48
|
+
mat: np.ndarray, qubit: cirq.Qid, *, keep_clifford: bool, atol: float
|
|
46
49
|
) -> ops.OP_TREE:
|
|
47
50
|
rotations = transformers.single_qubit_matrix_to_pauli_rotations(mat, atol)
|
|
48
51
|
out_ops: List[ops.GateOperation] = []
|
|
@@ -94,7 +97,7 @@ class CliffordTargetGateset(transformers.TwoQubitCompilationTargetGateset):
|
|
|
94
97
|
"""
|
|
95
98
|
self.atol = atol
|
|
96
99
|
self.single_qubit_target = single_qubit_target
|
|
97
|
-
gates: List[Union[
|
|
100
|
+
gates: List[Union[cirq.Gate, Type[cirq.Gate]]] = [ops.CZ, ops.MeasurementGate]
|
|
98
101
|
if single_qubit_target in [
|
|
99
102
|
self.SingleQubitTarget.SINGLE_QUBIT_CLIFFORDS,
|
|
100
103
|
self.SingleQubitTarget.PAULI_STRING_PHASORS_AND_CLIFFORDS,
|
|
@@ -108,8 +111,8 @@ class CliffordTargetGateset(transformers.TwoQubitCompilationTargetGateset):
|
|
|
108
111
|
super().__init__(*gates)
|
|
109
112
|
|
|
110
113
|
def _decompose_single_qubit_operation(
|
|
111
|
-
self, op:
|
|
112
|
-
) -> Union[NotImplementedType,
|
|
114
|
+
self, op: cirq.Operation, _
|
|
115
|
+
) -> Union[NotImplementedType, cirq.OP_TREE]:
|
|
113
116
|
if not protocols.has_unitary(op):
|
|
114
117
|
return NotImplemented
|
|
115
118
|
mat = protocols.unitary(op)
|
|
@@ -125,8 +128,8 @@ class CliffordTargetGateset(transformers.TwoQubitCompilationTargetGateset):
|
|
|
125
128
|
)
|
|
126
129
|
|
|
127
130
|
def _decompose_two_qubit_operation(
|
|
128
|
-
self, op:
|
|
129
|
-
) -> Union[NotImplementedType,
|
|
131
|
+
self, op: cirq.Operation, _
|
|
132
|
+
) -> Union[NotImplementedType, cirq.OP_TREE]:
|
|
130
133
|
if not protocols.has_unitary(op):
|
|
131
134
|
return NotImplemented
|
|
132
135
|
return transformers.two_qubit_matrix_to_cz_operations(
|
|
@@ -138,10 +141,10 @@ class CliffordTargetGateset(transformers.TwoQubitCompilationTargetGateset):
|
|
|
138
141
|
)
|
|
139
142
|
|
|
140
143
|
@property
|
|
141
|
-
def postprocess_transformers(self) -> List[
|
|
144
|
+
def postprocess_transformers(self) -> List[cirq.TRANSFORMER]:
|
|
142
145
|
"""List of transformers which should be run after decomposing individual operations."""
|
|
143
146
|
|
|
144
|
-
def rewriter(o:
|
|
147
|
+
def rewriter(o: cirq.CircuitOperation):
|
|
145
148
|
result = self._decompose_single_qubit_operation(o, -1)
|
|
146
149
|
return o.circuit.all_operations() if result is NotImplemented else result
|
|
147
150
|
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
|
|
15
15
|
from typing import Callable
|
|
16
16
|
|
|
17
|
-
from cirq import
|
|
18
|
-
from cirq.contrib.paulistring.pauli_string_optimize import pauli_string_optimized_circuit
|
|
17
|
+
from cirq import circuits, ops, transformers
|
|
19
18
|
from cirq.contrib.paulistring.clifford_optimize import clifford_optimized_circuit
|
|
19
|
+
from cirq.contrib.paulistring.pauli_string_optimize import pauli_string_optimized_circuit
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
class _CZTargetGateSet(transformers.CZTargetGateset):
|