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
|
@@ -13,22 +13,22 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
import inspect
|
|
15
15
|
from typing import (
|
|
16
|
+
Any,
|
|
16
17
|
Callable,
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
cast,
|
|
19
|
+
Dict,
|
|
19
20
|
Iterable,
|
|
20
|
-
Sequence,
|
|
21
21
|
Iterator,
|
|
22
|
-
Tuple,
|
|
23
|
-
Any,
|
|
24
|
-
cast,
|
|
25
22
|
List,
|
|
26
|
-
|
|
23
|
+
Optional,
|
|
24
|
+
Sequence,
|
|
25
|
+
Tuple,
|
|
27
26
|
TYPE_CHECKING,
|
|
27
|
+
Union,
|
|
28
28
|
)
|
|
29
29
|
|
|
30
30
|
from cirq import ops, value
|
|
31
|
-
from cirq.interop.quirk.cells.cell import Cell,
|
|
31
|
+
from cirq.interop.quirk.cells.cell import Cell, CELL_SIZES, CellMaker
|
|
32
32
|
|
|
33
33
|
if TYPE_CHECKING:
|
|
34
34
|
import cirq
|
|
@@ -17,9 +17,9 @@ import numpy as np
|
|
|
17
17
|
import pytest
|
|
18
18
|
|
|
19
19
|
import cirq
|
|
20
|
+
from cirq import quirk_url_to_circuit
|
|
20
21
|
from cirq.interop.quirk.cells import arithmetic_cells
|
|
21
22
|
from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
|
|
22
|
-
from cirq import quirk_url_to_circuit
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
def test_arithmetic_comparison_gates():
|
cirq/interop/quirk/cells/cell.py
CHANGED
|
@@ -13,20 +13,20 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
import abc
|
|
15
15
|
from typing import (
|
|
16
|
+
Any,
|
|
16
17
|
Callable,
|
|
17
|
-
|
|
18
|
+
Dict,
|
|
19
|
+
Iterable,
|
|
18
20
|
List,
|
|
19
21
|
NamedTuple,
|
|
20
|
-
|
|
21
|
-
Iterable,
|
|
22
|
+
Optional,
|
|
22
23
|
Sequence,
|
|
24
|
+
Tuple,
|
|
23
25
|
TYPE_CHECKING,
|
|
24
26
|
Union,
|
|
25
|
-
Dict,
|
|
26
|
-
Tuple,
|
|
27
27
|
)
|
|
28
28
|
|
|
29
|
-
from cirq import ops, value
|
|
29
|
+
from cirq import devices, ops, value
|
|
30
30
|
|
|
31
31
|
if TYPE_CHECKING:
|
|
32
32
|
import cirq
|
|
@@ -13,16 +13,16 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
15
|
from typing import (
|
|
16
|
-
List,
|
|
17
|
-
TYPE_CHECKING,
|
|
18
16
|
Callable,
|
|
19
|
-
Optional,
|
|
20
|
-
Iterator,
|
|
21
17
|
cast,
|
|
22
18
|
Iterable,
|
|
19
|
+
Iterator,
|
|
20
|
+
List,
|
|
21
|
+
Optional,
|
|
22
|
+
Sequence,
|
|
23
|
+
TYPE_CHECKING,
|
|
23
24
|
TypeVar,
|
|
24
25
|
Union,
|
|
25
|
-
Sequence,
|
|
26
26
|
)
|
|
27
27
|
|
|
28
28
|
from cirq import circuits
|
|
@@ -16,8 +16,8 @@ import pytest
|
|
|
16
16
|
|
|
17
17
|
import cirq
|
|
18
18
|
from cirq import quirk_json_to_circuit
|
|
19
|
-
from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
|
|
20
19
|
from cirq.interop.quirk.cells.composite_cell import _iterator_to_iterable
|
|
20
|
+
from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
def test_iterator_to_iterable():
|
|
@@ -109,7 +109,7 @@ class ParityControlCell(Cell):
|
|
|
109
109
|
elif gate is not None:
|
|
110
110
|
column[i] = gate.controlled_by(self.qubits[0])
|
|
111
111
|
|
|
112
|
-
def basis_change(self) -> 'cirq.OP_TREE':
|
|
112
|
+
def basis_change(self) -> Iterator['cirq.OP_TREE']:
|
|
113
113
|
yield from self._basis_change
|
|
114
114
|
|
|
115
115
|
# Temporarily move the ZZZ..Z parity observable onto a single qubit.
|
|
@@ -11,12 +11,12 @@
|
|
|
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
|
-
from typing import
|
|
14
|
+
from typing import Callable, Iterator
|
|
15
15
|
|
|
16
16
|
import sympy
|
|
17
17
|
|
|
18
18
|
import cirq
|
|
19
|
-
from cirq.interop.quirk.cells.cell import
|
|
19
|
+
from cirq.interop.quirk.cells.cell import CELL_SIZES, CellMaker, ExplicitOperationsCell
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
def generate_all_frequency_space_cell_makers() -> Iterator[CellMaker]:
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
from typing import Iterator
|
|
15
15
|
|
|
16
|
-
from cirq.interop.quirk.cells.cell import
|
|
16
|
+
from cirq.interop.quirk.cells.cell import CELL_SIZES, CellMaker
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
def generate_all_ignored_cell_makers() -> Iterator[CellMaker]:
|
|
@@ -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 Iterable, Iterator, List, Optional, TYPE_CHECKING
|
|
16
16
|
|
|
17
17
|
from cirq.interop.quirk.cells.cell import Cell, CELL_SIZES, CellMaker
|
|
18
18
|
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
import pytest
|
|
16
16
|
|
|
17
17
|
from cirq import quirk_url_to_circuit
|
|
18
|
-
from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
|
|
19
18
|
from cirq.interop.quirk.cells.input_cells import SetDefaultInputCell
|
|
19
|
+
from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
def test_missing_input_cell():
|
|
@@ -17,7 +17,7 @@ from typing import Any, Iterable, Iterator, List, Optional, Sequence, Tuple, Uni
|
|
|
17
17
|
import numpy as np
|
|
18
18
|
|
|
19
19
|
import cirq
|
|
20
|
-
from cirq import
|
|
20
|
+
from cirq import linalg, ops, value
|
|
21
21
|
from cirq.interop.quirk.cells.cell import Cell, CellMaker
|
|
22
22
|
|
|
23
23
|
|
|
@@ -16,8 +16,8 @@ import numpy as np
|
|
|
16
16
|
import pytest
|
|
17
17
|
|
|
18
18
|
import cirq
|
|
19
|
-
from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
|
|
20
19
|
from cirq import quirk_url_to_circuit
|
|
20
|
+
from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
def test_input_rotation_cells():
|
|
@@ -11,7 +11,7 @@
|
|
|
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
|
-
from typing import
|
|
14
|
+
from typing import cast, Iterable, Iterator, Optional, TYPE_CHECKING
|
|
15
15
|
|
|
16
16
|
from cirq import ops
|
|
17
17
|
from cirq.interop.quirk.cells.cell import CellMaker, ExplicitOperationsCell
|
|
@@ -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
|
+
import cmath
|
|
16
|
+
import re
|
|
15
17
|
from typing import (
|
|
16
18
|
Any,
|
|
17
19
|
Callable,
|
|
@@ -22,14 +24,11 @@ from typing import (
|
|
|
22
24
|
List,
|
|
23
25
|
Mapping,
|
|
24
26
|
Optional,
|
|
25
|
-
Union,
|
|
26
27
|
SupportsFloat,
|
|
27
28
|
TypeVar,
|
|
29
|
+
Union,
|
|
28
30
|
)
|
|
29
31
|
|
|
30
|
-
import cmath
|
|
31
|
-
import re
|
|
32
|
-
|
|
33
32
|
import numpy as np
|
|
34
33
|
import sympy
|
|
35
34
|
|
|
@@ -86,7 +85,7 @@ def _tokenize(text: str) -> List[str]:
|
|
|
86
85
|
return _merge_scientific_float_tokens(g for g in result if g.strip())
|
|
87
86
|
|
|
88
87
|
|
|
89
|
-
_ResolvedToken = Union[sympy.Expr,
|
|
88
|
+
_ResolvedToken = Union[sympy.Expr, complex]
|
|
90
89
|
|
|
91
90
|
|
|
92
91
|
class _CustomQuirkOperationToken:
|
|
@@ -154,7 +153,7 @@ def _parse_formula_using_token_map(
|
|
|
154
153
|
a = vals.pop()
|
|
155
154
|
# Note: vals seems to be _HangingToken
|
|
156
155
|
# func operates on _ResolvedTokens. Ignoring type issues for now.
|
|
157
|
-
vals.append(op.func(a, b))
|
|
156
|
+
vals.append(op.func(a, b))
|
|
158
157
|
|
|
159
158
|
def close_paren() -> None:
|
|
160
159
|
while True:
|
|
@@ -191,7 +190,9 @@ def _parse_formula_using_token_map(
|
|
|
191
190
|
elif token.unary_action is not None:
|
|
192
191
|
burn_ops(token.priority)
|
|
193
192
|
vals.append(None)
|
|
194
|
-
|
|
193
|
+
# this avoids mypy complaint about None not being callable
|
|
194
|
+
token_unary_action = token.unary_action
|
|
195
|
+
ops.append(_HangingNode(func=lambda _, b: token_unary_action(b), weight=np.inf))
|
|
195
196
|
elif token.binary_action is not None:
|
|
196
197
|
raise ValueError("Bad expression: binary op in bad spot.\ntext={text!r}")
|
|
197
198
|
|
|
@@ -16,7 +16,7 @@ import numpy as np
|
|
|
16
16
|
import pytest
|
|
17
17
|
import sympy
|
|
18
18
|
|
|
19
|
-
from cirq.interop.quirk.cells.parse import
|
|
19
|
+
from cirq.interop.quirk.cells.parse import parse_complex, parse_formula, parse_matrix
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
def test_parse_matrix():
|
|
@@ -102,7 +102,7 @@ def test_parse_complex_raw_cases_from_quirk():
|
|
|
102
102
|
|
|
103
103
|
assert parse_complex("3/2i") == 1.5j
|
|
104
104
|
|
|
105
|
-
assert parse_complex("\
|
|
105
|
+
assert parse_complex("\u221a2-\u2153i") == np.sqrt(2) - 1j / 3
|
|
106
106
|
|
|
107
107
|
assert parse_complex("1e-10") == 0.0000000001
|
|
108
108
|
assert parse_complex("1e+10") == 10000000000
|
|
@@ -11,7 +11,7 @@
|
|
|
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
|
-
from typing import
|
|
14
|
+
from typing import Callable, Iterator, TYPE_CHECKING
|
|
15
15
|
|
|
16
16
|
import sympy
|
|
17
17
|
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
import pytest
|
|
16
16
|
|
|
17
17
|
import cirq
|
|
18
|
-
from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
|
|
19
18
|
from cirq import quirk_url_to_circuit
|
|
19
|
+
from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
def test_swap():
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
from typing import Iterator
|
|
15
15
|
|
|
16
|
-
from cirq.interop.quirk.cells.cell import
|
|
16
|
+
from cirq.interop.quirk.cells.cell import CELL_SIZES, CellMaker
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
def generate_all_unsupported_cell_makers() -> Iterator[CellMaker]:
|
|
@@ -15,28 +15,28 @@ import json
|
|
|
15
15
|
import urllib.parse
|
|
16
16
|
from typing import (
|
|
17
17
|
Any,
|
|
18
|
-
|
|
18
|
+
cast,
|
|
19
19
|
Dict,
|
|
20
|
+
Iterable,
|
|
21
|
+
List,
|
|
22
|
+
Mapping,
|
|
20
23
|
Optional,
|
|
21
24
|
Sequence,
|
|
22
|
-
|
|
25
|
+
Tuple,
|
|
23
26
|
TYPE_CHECKING,
|
|
24
|
-
Iterable,
|
|
25
27
|
Union,
|
|
26
|
-
Mapping,
|
|
27
|
-
Tuple,
|
|
28
28
|
)
|
|
29
29
|
|
|
30
30
|
import numpy as np
|
|
31
31
|
|
|
32
|
-
from cirq import
|
|
32
|
+
from cirq import circuits, devices, ops, protocols
|
|
33
33
|
from cirq.interop.quirk.cells import (
|
|
34
34
|
Cell,
|
|
35
35
|
CellMaker,
|
|
36
36
|
CellMakerArgs,
|
|
37
37
|
CompositeCell,
|
|
38
|
-
generate_all_quirk_cell_makers,
|
|
39
38
|
ExplicitOperationsCell,
|
|
39
|
+
generate_all_quirk_cell_makers,
|
|
40
40
|
)
|
|
41
41
|
from cirq.interop.quirk.cells.parse import parse_matrix
|
|
42
42
|
|
|
@@ -18,7 +18,7 @@ import numpy as np
|
|
|
18
18
|
import pytest
|
|
19
19
|
|
|
20
20
|
import cirq
|
|
21
|
-
from cirq import
|
|
21
|
+
from cirq import quirk_json_to_circuit, quirk_url_to_circuit
|
|
22
22
|
from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
|
|
23
23
|
|
|
24
24
|
|
cirq/ion/__init__.py
CHANGED
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
|
|
15
15
|
"""Trapped ion devices, gates, and compiling utilties."""
|
|
16
16
|
|
|
17
|
-
from cirq.ops import ms
|
|
17
|
+
from cirq.ops import ms as ms
|
|
18
18
|
|
|
19
|
-
from cirq.transformers import
|
|
19
|
+
from cirq.transformers import (
|
|
20
|
+
two_qubit_matrix_to_ion_operations as two_qubit_matrix_to_ion_operations,
|
|
21
|
+
)
|
cirq/json_resolver_cache.py
CHANGED
|
@@ -20,8 +20,8 @@ from cirq.protocols.json_serialization import ObjectFactory
|
|
|
20
20
|
|
|
21
21
|
if TYPE_CHECKING:
|
|
22
22
|
import cirq
|
|
23
|
-
import cirq.ops.pauli_gates
|
|
24
23
|
import cirq.devices.unconstrained_device
|
|
24
|
+
import cirq.ops.pauli_gates
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
# Needed for backwards compatible named tuples of CrossEntropyResult
|
|
@@ -42,14 +42,14 @@ CrossEntropyResultDict = NamedTuple(
|
|
|
42
42
|
|
|
43
43
|
@functools.lru_cache()
|
|
44
44
|
def _class_resolver_dictionary() -> Dict[str, ObjectFactory]:
|
|
45
|
-
import cirq
|
|
46
|
-
from cirq.ops import raw_types
|
|
47
|
-
import pandas as pd
|
|
48
45
|
import numpy as np
|
|
49
|
-
|
|
46
|
+
import pandas as pd
|
|
47
|
+
|
|
48
|
+
import cirq
|
|
50
49
|
from cirq.devices import InsertionNoiseModel
|
|
50
|
+
from cirq.devices.noise_model import _NoNoiseModel
|
|
51
51
|
from cirq.experiments import GridInteractionLayer
|
|
52
|
-
from cirq.
|
|
52
|
+
from cirq.ops import raw_types
|
|
53
53
|
|
|
54
54
|
def _boolean_hamiltonian_gate_op(qubit_map, boolean_strs, theta):
|
|
55
55
|
return cirq.BooleanHamiltonianGate(
|
|
@@ -107,6 +107,7 @@ def _class_resolver_dictionary() -> Dict[str, ObjectFactory]:
|
|
|
107
107
|
'AnyUnitaryGateFamily': cirq.AnyUnitaryGateFamily,
|
|
108
108
|
'AsymmetricDepolarizingChannel': cirq.AsymmetricDepolarizingChannel,
|
|
109
109
|
'BitFlipChannel': cirq.BitFlipChannel,
|
|
110
|
+
'BitMaskKeyCondition': cirq.BitMaskKeyCondition,
|
|
110
111
|
'BitstringAccumulator': cirq.work.BitstringAccumulator,
|
|
111
112
|
'BooleanHamiltonianGate': cirq.BooleanHamiltonianGate,
|
|
112
113
|
'CCNotPowGate': cirq.CCNotPowGate,
|
|
@@ -120,6 +121,7 @@ def _class_resolver_dictionary() -> Dict[str, ObjectFactory]:
|
|
|
120
121
|
'CliffordState': cirq.CliffordState,
|
|
121
122
|
'CliffordTableau': cirq.CliffordTableau,
|
|
122
123
|
'CNotPowGate': cirq.CNotPowGate,
|
|
124
|
+
'Concat': cirq.Concat,
|
|
123
125
|
'ConstantQubitNoiseModel': cirq.ConstantQubitNoiseModel,
|
|
124
126
|
'ControlledGate': cirq.ControlledGate,
|
|
125
127
|
'ControlledOperation': cirq.ControlledOperation,
|
|
@@ -141,7 +143,6 @@ def _class_resolver_dictionary() -> Dict[str, ObjectFactory]:
|
|
|
141
143
|
'GlobalPhaseGate': cirq.GlobalPhaseGate,
|
|
142
144
|
'GridDeviceMetadata': cirq.GridDeviceMetadata,
|
|
143
145
|
'GridInteractionLayer': GridInteractionLayer,
|
|
144
|
-
'GridParallelXEBMetadata': GridParallelXEBMetadata,
|
|
145
146
|
'GridQid': cirq.GridQid,
|
|
146
147
|
'GridQubit': cirq.GridQubit,
|
|
147
148
|
'HPowGate': cirq.HPowGate,
|
|
@@ -149,6 +150,7 @@ def _class_resolver_dictionary() -> Dict[str, ObjectFactory]:
|
|
|
149
150
|
'IdentityGate': cirq.IdentityGate,
|
|
150
151
|
'InitObsSetting': cirq.work.InitObsSetting,
|
|
151
152
|
'InsertionNoiseModel': InsertionNoiseModel,
|
|
153
|
+
'_InverseCompositeGate': raw_types._InverseCompositeGate,
|
|
152
154
|
'KeyCondition': cirq.KeyCondition,
|
|
153
155
|
'KrausChannel': cirq.KrausChannel,
|
|
154
156
|
'LinearDict': cirq.LinearDict,
|
|
@@ -272,6 +274,12 @@ def _class_resolver_dictionary() -> Dict[str, ObjectFactory]:
|
|
|
272
274
|
'sympy.StrictLessThan': lambda args: sympy.StrictLessThan(*args),
|
|
273
275
|
'sympy.Equality': lambda args: sympy.Equality(*args),
|
|
274
276
|
'sympy.Unequality': lambda args: sympy.Unequality(*args),
|
|
277
|
+
'sympy.And': lambda args: sympy.And(*args),
|
|
278
|
+
'sympy.Or': lambda args: sympy.Or(*args),
|
|
279
|
+
'sympy.Not': lambda args: sympy.Not(*args),
|
|
280
|
+
'sympy.Xor': lambda args: sympy.Xor(*args),
|
|
281
|
+
'sympy.Indexed': lambda args: sympy.Indexed(*args),
|
|
282
|
+
'sympy.IndexedBase': lambda args: sympy.IndexedBase(*args),
|
|
275
283
|
'sympy.Float': lambda approx: sympy.Float(approx),
|
|
276
284
|
'sympy.Integer': sympy.Integer,
|
|
277
285
|
'sympy.Rational': sympy.Rational,
|
cirq/linalg/__init__.py
CHANGED
|
@@ -17,70 +17,81 @@ Focuses on methods useful for analyzing and optimizing quantum circuits.
|
|
|
17
17
|
Avoids duplicating functionality present in numpy.
|
|
18
18
|
"""
|
|
19
19
|
|
|
20
|
-
from cirq.linalg.combinators import
|
|
20
|
+
from cirq.linalg.combinators import (
|
|
21
|
+
block_diag as block_diag,
|
|
22
|
+
CONTROL_TAG as CONTROL_TAG,
|
|
23
|
+
dot as dot,
|
|
24
|
+
kron as kron,
|
|
25
|
+
kron_with_controls as kron_with_controls,
|
|
26
|
+
)
|
|
21
27
|
|
|
22
28
|
from cirq.linalg.decompositions import (
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
29
|
+
# pylint: disable=line-too-long
|
|
30
|
+
axis_angle as axis_angle,
|
|
31
|
+
AxisAngleDecomposition as AxisAngleDecomposition,
|
|
32
|
+
deconstruct_single_qubit_matrix_into_angles as deconstruct_single_qubit_matrix_into_angles,
|
|
33
|
+
extract_right_diag as extract_right_diag,
|
|
34
|
+
kak_canonicalize_vector as kak_canonicalize_vector,
|
|
35
|
+
kak_decomposition as kak_decomposition,
|
|
36
|
+
kak_vector as kak_vector,
|
|
37
|
+
KakDecomposition as KakDecomposition,
|
|
38
|
+
kron_factor_4x4_to_2x2s as kron_factor_4x4_to_2x2s,
|
|
39
|
+
map_eigenvalues as map_eigenvalues,
|
|
40
|
+
num_cnots_required as num_cnots_required,
|
|
41
|
+
unitary_eig as unitary_eig,
|
|
42
|
+
scatter_plot_normalized_kak_interaction_coefficients as scatter_plot_normalized_kak_interaction_coefficients,
|
|
43
|
+
so4_to_magic_su2s as so4_to_magic_su2s,
|
|
37
44
|
)
|
|
38
45
|
|
|
39
|
-
|
|
40
46
|
from cirq.linalg.diagonalize import (
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
47
|
+
# pylint: disable=line-too-long
|
|
48
|
+
bidiagonalize_real_matrix_pair_with_symmetric_products as bidiagonalize_real_matrix_pair_with_symmetric_products,
|
|
49
|
+
bidiagonalize_unitary_with_special_orthogonals as bidiagonalize_unitary_with_special_orthogonals,
|
|
50
|
+
diagonalize_real_symmetric_and_sorted_diagonal_matrices as diagonalize_real_symmetric_and_sorted_diagonal_matrices,
|
|
51
|
+
diagonalize_real_symmetric_matrix as diagonalize_real_symmetric_matrix,
|
|
45
52
|
)
|
|
46
53
|
|
|
47
54
|
from cirq.linalg.operator_spaces import (
|
|
48
|
-
expand_matrix_in_orthogonal_basis,
|
|
49
|
-
hilbert_schmidt_inner_product,
|
|
50
|
-
kron_bases,
|
|
51
|
-
matrix_from_basis_coefficients,
|
|
52
|
-
PAULI_BASIS,
|
|
53
|
-
pow_pauli_combination,
|
|
55
|
+
expand_matrix_in_orthogonal_basis as expand_matrix_in_orthogonal_basis,
|
|
56
|
+
hilbert_schmidt_inner_product as hilbert_schmidt_inner_product,
|
|
57
|
+
kron_bases as kron_bases,
|
|
58
|
+
matrix_from_basis_coefficients as matrix_from_basis_coefficients,
|
|
59
|
+
PAULI_BASIS as PAULI_BASIS,
|
|
60
|
+
pow_pauli_combination as pow_pauli_combination,
|
|
54
61
|
)
|
|
55
62
|
|
|
56
63
|
from cirq.linalg.predicates import (
|
|
57
|
-
allclose_up_to_global_phase,
|
|
58
|
-
is_cptp,
|
|
59
|
-
is_diagonal,
|
|
60
|
-
is_hermitian,
|
|
61
|
-
is_normal,
|
|
62
|
-
is_orthogonal,
|
|
63
|
-
is_special_orthogonal,
|
|
64
|
-
is_special_unitary,
|
|
65
|
-
is_unitary,
|
|
66
|
-
matrix_commutes,
|
|
67
|
-
slice_for_qubits_equal_to,
|
|
64
|
+
allclose_up_to_global_phase as allclose_up_to_global_phase,
|
|
65
|
+
is_cptp as is_cptp,
|
|
66
|
+
is_diagonal as is_diagonal,
|
|
67
|
+
is_hermitian as is_hermitian,
|
|
68
|
+
is_normal as is_normal,
|
|
69
|
+
is_orthogonal as is_orthogonal,
|
|
70
|
+
is_special_orthogonal as is_special_orthogonal,
|
|
71
|
+
is_special_unitary as is_special_unitary,
|
|
72
|
+
is_unitary as is_unitary,
|
|
73
|
+
matrix_commutes as matrix_commutes,
|
|
74
|
+
slice_for_qubits_equal_to as slice_for_qubits_equal_to,
|
|
68
75
|
)
|
|
69
76
|
|
|
70
|
-
from cirq.linalg.tolerance import
|
|
77
|
+
from cirq.linalg.tolerance import (
|
|
78
|
+
all_near_zero as all_near_zero,
|
|
79
|
+
all_near_zero_mod as all_near_zero_mod,
|
|
80
|
+
)
|
|
71
81
|
|
|
72
82
|
from cirq.linalg.transformations import (
|
|
73
|
-
apply_matrix_to_slices,
|
|
74
|
-
density_matrix_kronecker_product,
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
83
|
+
apply_matrix_to_slices as apply_matrix_to_slices,
|
|
84
|
+
density_matrix_kronecker_product as density_matrix_kronecker_product,
|
|
85
|
+
can_numpy_support_shape as can_numpy_support_shape,
|
|
86
|
+
match_global_phase as match_global_phase,
|
|
87
|
+
partial_trace as partial_trace,
|
|
88
|
+
partial_trace_of_state_vector_as_mixture as partial_trace_of_state_vector_as_mixture,
|
|
89
|
+
phase_delta as phase_delta,
|
|
90
|
+
reflection_matrix_pow as reflection_matrix_pow,
|
|
91
|
+
state_vector_kronecker_product as state_vector_kronecker_product,
|
|
92
|
+
sub_state_vector as sub_state_vector,
|
|
93
|
+
targeted_conjugate_about as targeted_conjugate_about,
|
|
94
|
+
targeted_left_multiply as targeted_left_multiply,
|
|
95
|
+
to_special as to_special,
|
|
96
|
+
transpose_flattened_array as transpose_flattened_array,
|
|
86
97
|
)
|
cirq/linalg/combinators.py
CHANGED
|
@@ -15,17 +15,17 @@
|
|
|
15
15
|
"""Utility methods for combining matrices."""
|
|
16
16
|
|
|
17
17
|
import functools
|
|
18
|
-
from typing import
|
|
18
|
+
from typing import TYPE_CHECKING, Union
|
|
19
19
|
|
|
20
20
|
import numpy as np
|
|
21
21
|
|
|
22
22
|
from cirq._doc import document
|
|
23
23
|
|
|
24
24
|
if TYPE_CHECKING:
|
|
25
|
-
from numpy.typing import
|
|
25
|
+
from numpy.typing import ArrayLike, DTypeLike
|
|
26
26
|
|
|
27
27
|
|
|
28
|
-
def kron(*factors: Union[np.ndarray, complex
|
|
28
|
+
def kron(*factors: Union[np.ndarray, complex], shape_len: int = 2) -> np.ndarray:
|
|
29
29
|
"""Computes the kronecker product of a sequence of values.
|
|
30
30
|
|
|
31
31
|
A *args version of lambda args: functools.reduce(np.kron, args).
|
|
@@ -56,7 +56,7 @@ document(
|
|
|
56
56
|
)
|
|
57
57
|
|
|
58
58
|
|
|
59
|
-
def kron_with_controls(*factors: Union[np.ndarray, complex
|
|
59
|
+
def kron_with_controls(*factors: Union[np.ndarray, complex]) -> np.ndarray:
|
|
60
60
|
"""Computes the kronecker product of a sequence of values and control tags.
|
|
61
61
|
|
|
62
62
|
Use `cirq.CONTROL_TAG` to represent controls. Any entry of the output
|
cirq/linalg/combinators_test.py
CHANGED
|
@@ -11,8 +11,8 @@
|
|
|
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
|
-
import pytest
|
|
15
14
|
import numpy as np
|
|
15
|
+
import pytest
|
|
16
16
|
|
|
17
17
|
import cirq
|
|
18
18
|
|
|
@@ -104,6 +104,9 @@ def test_block_diag():
|
|
|
104
104
|
),
|
|
105
105
|
)
|
|
106
106
|
|
|
107
|
+
with pytest.raises(ValueError, match='Blocks must be square'):
|
|
108
|
+
_ = cirq.block_diag(np.array([[1, 2, 3], [3, 4, 5]]))
|
|
109
|
+
|
|
107
110
|
|
|
108
111
|
def test_block_diag_dtype():
|
|
109
112
|
assert cirq.block_diag().dtype == np.complex128
|