cirq-core 1.4.0.dev20240529225110__py3-none-any.whl → 1.5.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of cirq-core might be problematic. Click here for more details.
- cirq/__init__.py +587 -569
- cirq/_compat.py +9 -0
- cirq/_compat_test.py +11 -9
- cirq/_import.py +7 -8
- cirq/_version.py +31 -1
- cirq/_version_test.py +1 -1
- cirq/circuits/__init__.py +15 -9
- cirq/circuits/_block_diagram_drawer.py +1 -2
- cirq/circuits/_block_diagram_drawer_test.py +3 -3
- cirq/circuits/_box_drawing_character_data.py +0 -1
- cirq/circuits/_box_drawing_character_data_test.py +2 -2
- cirq/circuits/_bucket_priority_queue.py +0 -1
- cirq/circuits/_bucket_priority_queue_test.py +1 -1
- cirq/circuits/circuit.py +336 -234
- cirq/circuits/circuit_operation.py +102 -52
- cirq/circuits/circuit_operation_test.py +85 -4
- cirq/circuits/circuit_test.py +101 -32
- cirq/circuits/frozen_circuit.py +36 -32
- cirq/circuits/insert_strategy.py +10 -0
- cirq/circuits/insert_strategy_test.py +20 -0
- cirq/circuits/moment.py +79 -80
- cirq/circuits/moment_test.py +105 -2
- cirq/circuits/optimization_pass.py +15 -15
- cirq/circuits/optimization_pass_test.py +8 -9
- cirq/circuits/qasm_output.py +64 -33
- cirq/circuits/qasm_output_test.py +63 -2
- cirq/circuits/text_diagram_drawer.py +26 -56
- cirq/circuits/text_diagram_drawer_test.py +5 -4
- cirq/contrib/__init__.py +2 -2
- cirq/contrib/acquaintance/__init__.py +44 -29
- cirq/contrib/acquaintance/bipartite.py +8 -7
- cirq/contrib/acquaintance/bipartite_test.py +11 -1
- cirq/contrib/acquaintance/devices.py +5 -4
- cirq/contrib/acquaintance/devices_test.py +5 -1
- cirq/contrib/acquaintance/executor.py +18 -21
- cirq/contrib/acquaintance/executor_test.py +3 -2
- cirq/contrib/acquaintance/gates.py +36 -27
- cirq/contrib/acquaintance/gates_test.py +1 -1
- cirq/contrib/acquaintance/inspection_utils.py +10 -9
- cirq/contrib/acquaintance/inspection_utils_test.py +6 -1
- cirq/contrib/acquaintance/mutation_utils.py +10 -10
- cirq/contrib/acquaintance/optimizers.py +7 -6
- cirq/contrib/acquaintance/optimizers_test.py +1 -1
- cirq/contrib/acquaintance/permutation.py +22 -21
- cirq/contrib/acquaintance/permutation_test.py +1 -1
- cirq/contrib/acquaintance/shift.py +8 -6
- cirq/contrib/acquaintance/shift_swap_network.py +6 -4
- cirq/contrib/acquaintance/strategies/__init__.py +9 -3
- cirq/contrib/acquaintance/strategies/complete.py +4 -3
- cirq/contrib/acquaintance/strategies/cubic.py +5 -3
- cirq/contrib/acquaintance/strategies/quartic_paired.py +8 -6
- cirq/contrib/acquaintance/topological_sort.py +4 -2
- cirq/contrib/bayesian_network/__init__.py +3 -1
- cirq/contrib/bayesian_network/bayesian_network_gate.py +5 -3
- cirq/contrib/circuitdag/__init__.py +1 -1
- cirq/contrib/circuitdag/circuit_dag.py +24 -24
- cirq/contrib/circuitdag/circuit_dag_test.py +1 -1
- cirq/contrib/custom_simulators/custom_state_simulator.py +10 -8
- cirq/contrib/custom_simulators/custom_state_simulator_test.py +15 -11
- cirq/contrib/graph_device/__init__.py +8 -8
- cirq/contrib/graph_device/graph_device.py +8 -8
- cirq/contrib/graph_device/graph_device_test.py +0 -1
- cirq/contrib/graph_device/hypergraph_test.py +1 -0
- cirq/contrib/json.py +1 -2
- cirq/contrib/json_test.py +2 -2
- cirq/contrib/noise_models/__init__.py +5 -6
- cirq/contrib/noise_models/noise_models.py +8 -6
- cirq/contrib/paulistring/__init__.py +22 -10
- cirq/contrib/paulistring/clifford_optimize.py +1 -1
- cirq/contrib/paulistring/clifford_optimize_test.py +0 -1
- cirq/contrib/paulistring/clifford_target_gateset.py +15 -12
- cirq/contrib/paulistring/optimize.py +2 -2
- cirq/contrib/paulistring/optimize_test.py +0 -1
- cirq/contrib/paulistring/pauli_string_dag_test.py +0 -1
- cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py +379 -0
- cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation_test.py +523 -0
- cirq/contrib/paulistring/pauli_string_optimize.py +3 -1
- cirq/contrib/paulistring/pauli_string_optimize_test.py +1 -3
- cirq/contrib/paulistring/recombine.py +2 -2
- cirq/contrib/paulistring/recombine_test.py +2 -2
- cirq/contrib/paulistring/separate.py +3 -4
- cirq/contrib/qasm_import/__init__.py +2 -2
- cirq/contrib/qasm_import/_lexer.py +21 -26
- cirq/contrib/qasm_import/_lexer_test.py +90 -6
- cirq/contrib/qasm_import/_parser.py +238 -47
- cirq/contrib/qasm_import/_parser_test.py +514 -59
- cirq/contrib/qasm_import/qasm_test.py +1 -1
- cirq/contrib/qcircuit/__init__.py +6 -4
- cirq/contrib/qcircuit/qcircuit_diagram.py +5 -2
- cirq/contrib/qcircuit/qcircuit_pdf.py +1 -2
- cirq/{experiments/grid_parallel_two_qubit_xeb_test.py → contrib/qcircuit/qcircuit_pdf_test.py} +13 -12
- cirq/contrib/qcircuit/qcircuit_test.py +1 -1
- cirq/contrib/quantum_volume/__init__.py +7 -7
- cirq/contrib/quantum_volume/quantum_volume.py +6 -11
- cirq/contrib/quantum_volume/quantum_volume_test.py +3 -1
- cirq/contrib/quimb/__init__.py +16 -13
- cirq/contrib/quimb/density_matrix.py +1 -1
- cirq/contrib/quimb/mps_simulator.py +27 -28
- cirq/contrib/quimb/mps_simulator_test.py +5 -0
- cirq/contrib/quimb/state_vector.py +3 -10
- cirq/contrib/quirk/__init__.py +1 -1
- cirq/contrib/quirk/export_to_quirk.py +3 -3
- cirq/contrib/routing/__init__.py +12 -9
- cirq/contrib/routing/device.py +1 -1
- cirq/contrib/routing/device_test.py +1 -2
- cirq/contrib/routing/greedy.py +7 -5
- cirq/contrib/routing/greedy_test.py +5 -3
- cirq/contrib/routing/initialization.py +3 -1
- cirq/contrib/routing/initialization_test.py +1 -1
- cirq/contrib/routing/swap_network.py +6 -6
- cirq/contrib/routing/utils.py +6 -4
- cirq/contrib/routing/utils_test.py +1 -2
- cirq/{type_workarounds.py → contrib/shuffle_circuits/__init__.py} +5 -10
- cirq/contrib/shuffle_circuits/shuffle_circuits_with_readout_benchmarking.py +250 -0
- cirq/contrib/shuffle_circuits/shuffle_circuits_with_readout_benchmarking_test.py +363 -0
- cirq/contrib/svg/__init__.py +1 -1
- cirq/contrib/svg/svg.py +12 -10
- cirq/contrib/svg/svg_test.py +3 -2
- cirq/devices/__init__.py +34 -25
- cirq/devices/device.py +16 -12
- cirq/devices/device_test.py +1 -0
- cirq/devices/grid_device_metadata.py +16 -12
- cirq/devices/grid_device_metadata_test.py +2 -1
- cirq/devices/grid_qubit.py +31 -26
- cirq/devices/grid_qubit_test.py +30 -1
- cirq/devices/insertion_noise_model.py +6 -6
- cirq/devices/insertion_noise_model_test.py +1 -1
- cirq/devices/line_qubit.py +28 -20
- cirq/devices/line_qubit_test.py +26 -0
- cirq/devices/named_topologies.py +12 -10
- cirq/devices/named_topologies_test.py +5 -4
- cirq/devices/noise_model.py +29 -33
- cirq/devices/noise_properties.py +2 -2
- cirq/devices/noise_properties_test.py +2 -2
- cirq/devices/noise_utils.py +3 -3
- cirq/devices/superconducting_qubits_noise_properties.py +2 -2
- cirq/devices/superconducting_qubits_noise_properties_test.py +3 -3
- cirq/devices/thermal_noise_model.py +2 -1
- cirq/devices/unconstrained_device.py +1 -1
- cirq/devices/unconstrained_device_test.py +6 -0
- cirq/experiments/__init__.py +51 -34
- cirq/experiments/qubit_characterizations.py +17 -15
- cirq/experiments/qubit_characterizations_test.py +4 -6
- cirq/experiments/random_quantum_circuit_generation.py +10 -9
- cirq/experiments/random_quantum_circuit_generation_test.py +21 -4
- cirq/experiments/readout_confusion_matrix.py +73 -8
- cirq/experiments/readout_confusion_matrix_test.py +104 -1
- cirq/experiments/single_qubit_readout_calibration.py +8 -6
- cirq/experiments/single_qubit_readout_calibration_test.py +1 -1
- cirq/experiments/t1_decay_experiment.py +4 -5
- cirq/experiments/t1_decay_experiment_test.py +1 -2
- cirq/experiments/t2_decay_experiment.py +0 -1
- cirq/experiments/t2_decay_experiment_test.py +1 -2
- cirq/experiments/two_qubit_xeb.py +157 -33
- cirq/experiments/two_qubit_xeb_test.py +38 -22
- cirq/experiments/xeb_fitting.py +99 -19
- cirq/experiments/xeb_fitting_test.py +64 -25
- cirq/experiments/xeb_sampling.py +14 -18
- cirq/experiments/xeb_simulation.py +4 -3
- cirq/experiments/xeb_simulation_test.py +20 -14
- cirq/experiments/z_phase_calibration.py +368 -0
- cirq/experiments/z_phase_calibration_test.py +241 -0
- cirq/interop/__init__.py +4 -1
- cirq/interop/quirk/__init__.py +7 -4
- cirq/interop/quirk/cells/__init__.py +17 -6
- cirq/interop/quirk/cells/arithmetic_cells.py +8 -8
- cirq/interop/quirk/cells/arithmetic_cells_test.py +1 -1
- cirq/interop/quirk/cells/cell.py +6 -6
- cirq/interop/quirk/cells/composite_cell.py +5 -5
- cirq/interop/quirk/cells/composite_cell_test.py +1 -1
- cirq/interop/quirk/cells/control_cells.py +1 -1
- cirq/interop/quirk/cells/frequency_space_cells.py +2 -2
- cirq/interop/quirk/cells/ignored_cells.py +1 -1
- cirq/interop/quirk/cells/input_cells.py +1 -1
- cirq/interop/quirk/cells/input_cells_test.py +1 -1
- cirq/interop/quirk/cells/input_rotation_cells.py +1 -1
- cirq/interop/quirk/cells/input_rotation_cells_test.py +1 -1
- cirq/interop/quirk/cells/measurement_cells.py +1 -1
- cirq/interop/quirk/cells/parse.py +8 -7
- cirq/interop/quirk/cells/parse_test.py +2 -2
- cirq/interop/quirk/cells/single_qubit_rotation_cells.py +1 -1
- cirq/interop/quirk/cells/swap_cell_test.py +1 -1
- cirq/interop/quirk/cells/unsupported_cells.py +1 -1
- cirq/interop/quirk/url_to_circuit.py +7 -7
- cirq/interop/quirk/url_to_circuit_test.py +1 -1
- cirq/ion/__init__.py +4 -2
- cirq/json_resolver_cache.py +15 -7
- cirq/linalg/__init__.py +62 -51
- cirq/linalg/combinators.py +4 -4
- cirq/linalg/combinators_test.py +4 -1
- cirq/linalg/decompositions.py +15 -40
- cirq/linalg/decompositions_test.py +16 -22
- cirq/linalg/diagonalize.py +1 -1
- cirq/linalg/diagonalize_test.py +1 -1
- cirq/linalg/operator_spaces.py +20 -4
- cirq/linalg/operator_spaces_test.py +15 -2
- cirq/linalg/predicates.py +3 -3
- cirq/linalg/predicates_test.py +1 -0
- cirq/linalg/tolerance.py +2 -2
- cirq/linalg/transformations.py +30 -12
- cirq/linalg/transformations_test.py +13 -0
- cirq/neutral_atoms/__init__.py +2 -2
- cirq/neutral_atoms/convert_to_neutral_atom_gates_test.py +0 -1
- cirq/ops/__init__.py +172 -132
- cirq/ops/arithmetic_operation.py +2 -2
- cirq/ops/arithmetic_operation_test.py +2 -2
- cirq/ops/boolean_hamiltonian.py +3 -2
- cirq/ops/classically_controlled_operation.py +39 -12
- cirq/ops/classically_controlled_operation_test.py +147 -1
- cirq/ops/clifford_gate.py +38 -36
- cirq/ops/clifford_gate_test.py +75 -1
- cirq/ops/common_channels.py +16 -45
- cirq/ops/common_channels_test.py +10 -0
- cirq/ops/common_gate_families.py +1 -1
- cirq/ops/common_gate_families_test.py +1 -0
- cirq/ops/common_gates.py +48 -49
- cirq/ops/common_gates_test.py +18 -2
- cirq/ops/control_values.py +3 -3
- cirq/ops/control_values_test.py +2 -1
- cirq/ops/controlled_gate.py +36 -23
- cirq/ops/controlled_gate_test.py +70 -3
- cirq/ops/controlled_operation.py +6 -5
- cirq/ops/controlled_operation_test.py +7 -3
- cirq/ops/dense_pauli_string.py +11 -11
- cirq/ops/diagonal_gate.py +2 -2
- cirq/ops/diagonal_gate_test.py +1 -0
- cirq/ops/eigen_gate.py +16 -36
- cirq/ops/eigen_gate_test.py +60 -10
- cirq/ops/fourier_transform.py +1 -3
- cirq/ops/fourier_transform_test.py +2 -1
- cirq/ops/fsim_gate.py +42 -3
- cirq/ops/fsim_gate_test.py +21 -0
- cirq/ops/gate_operation.py +8 -8
- cirq/ops/gate_operation_test.py +4 -2
- cirq/ops/gateset_test.py +11 -2
- cirq/ops/global_phase_op.py +8 -7
- cirq/ops/global_phase_op_test.py +1 -1
- cirq/ops/greedy_qubit_manager_test.py +5 -0
- cirq/ops/identity.py +14 -4
- cirq/ops/identity_test.py +24 -0
- cirq/ops/kraus_channel.py +1 -0
- cirq/ops/kraus_channel_test.py +3 -1
- cirq/ops/linear_combinations.py +27 -21
- cirq/ops/linear_combinations_test.py +23 -4
- cirq/ops/matrix_gates.py +24 -8
- cirq/ops/measure_util.py +2 -2
- cirq/ops/measurement_gate.py +7 -4
- cirq/ops/measurement_gate_test.py +2 -1
- cirq/ops/mixed_unitary_channel.py +1 -0
- cirq/ops/mixed_unitary_channel_test.py +3 -1
- cirq/ops/named_qubit.py +8 -1
- cirq/ops/op_tree.py +3 -30
- cirq/ops/op_tree_test.py +4 -0
- cirq/ops/parallel_gate.py +2 -3
- cirq/ops/parallel_gate_test.py +2 -1
- cirq/ops/parity_gates.py +7 -8
- cirq/ops/parity_gates_test.py +1 -0
- cirq/ops/pauli_gates.py +5 -11
- cirq/ops/pauli_gates_test.py +1 -0
- cirq/ops/pauli_interaction_gate.py +11 -5
- cirq/ops/pauli_interaction_gate_test.py +2 -3
- cirq/ops/pauli_measurement_gate.py +6 -5
- cirq/ops/pauli_measurement_gate_test.py +1 -0
- cirq/ops/pauli_string.py +115 -130
- cirq/ops/pauli_string_phasor.py +21 -20
- cirq/ops/pauli_string_phasor_test.py +13 -3
- cirq/ops/pauli_string_raw_types.py +1 -0
- cirq/ops/pauli_string_test.py +192 -55
- cirq/ops/pauli_sum_exponential.py +3 -4
- cirq/ops/pauli_sum_exponential_test.py +0 -1
- cirq/ops/permutation_gate.py +2 -2
- cirq/ops/permutation_gate_test.py +1 -1
- cirq/ops/phased_iswap_gate.py +6 -7
- cirq/ops/phased_iswap_gate_test.py +21 -5
- cirq/ops/phased_x_gate.py +11 -25
- cirq/ops/phased_x_gate_test.py +19 -3
- cirq/ops/phased_x_z_gate.py +12 -11
- cirq/ops/projector.py +4 -5
- cirq/ops/qubit_manager.py +2 -1
- cirq/ops/qubit_manager_test.py +2 -1
- cirq/ops/qubit_order.py +1 -1
- cirq/ops/random_gate_channel.py +1 -1
- cirq/ops/random_gate_channel_test.py +0 -6
- cirq/ops/raw_types.py +146 -50
- cirq/ops/raw_types_test.py +37 -3
- cirq/ops/state_preparation_channel.py +2 -2
- cirq/ops/state_preparation_channel_test.py +2 -1
- cirq/ops/swap_gates.py +9 -4
- cirq/ops/three_qubit_gates.py +8 -8
- cirq/ops/three_qubit_gates_test.py +1 -0
- cirq/ops/two_qubit_diagonal_gate.py +4 -3
- cirq/ops/uniform_superposition_gate.py +4 -4
- cirq/ops/uniform_superposition_gate_test.py +1 -0
- cirq/ops/wait_gate.py +6 -8
- cirq/protocols/__init__.py +135 -83
- cirq/protocols/act_on_protocol.py +1 -1
- cirq/protocols/act_on_protocol_test.py +1 -1
- cirq/protocols/apply_channel_protocol.py +3 -3
- cirq/protocols/apply_mixture_protocol.py +15 -9
- cirq/protocols/apply_mixture_protocol_test.py +11 -0
- cirq/protocols/apply_unitary_protocol.py +2 -2
- cirq/protocols/apply_unitary_protocol_test.py +2 -1
- cirq/protocols/approximate_equality_protocol.py +7 -8
- cirq/protocols/approximate_equality_protocol_test.py +3 -1
- cirq/protocols/circuit_diagram_info_protocol.py +8 -6
- cirq/protocols/circuit_diagram_info_protocol_test.py +5 -0
- cirq/protocols/commutes_protocol.py +6 -6
- cirq/protocols/control_key_protocol.py +1 -1
- cirq/protocols/decompose_protocol.py +4 -5
- cirq/protocols/decompose_protocol_test.py +2 -1
- cirq/protocols/equal_up_to_global_phase_protocol.py +3 -3
- cirq/protocols/equal_up_to_global_phase_protocol_test.py +7 -0
- cirq/protocols/has_stabilizer_effect_protocol.py +5 -5
- cirq/protocols/has_unitary_protocol.py +1 -1
- cirq/protocols/has_unitary_protocol_test.py +8 -7
- cirq/protocols/hash_from_pickle_test.py +120 -0
- cirq/protocols/inverse_protocol.py +1 -1
- cirq/protocols/json_serialization.py +14 -1
- cirq/protocols/json_serialization_test.py +28 -7
- cirq/protocols/json_test_data/BitMaskKeyCondition.json +86 -0
- cirq/protocols/json_test_data/BitMaskKeyCondition.repr +7 -0
- cirq/protocols/json_test_data/Concat.json +19 -0
- cirq/protocols/json_test_data/Concat.repr +1 -0
- cirq/protocols/json_test_data/README.md +4 -2
- cirq/protocols/json_test_data/SympyCondition.json +60 -15
- cirq/protocols/json_test_data/SympyCondition.repr +4 -1
- cirq/protocols/json_test_data/_InverseCompositeGate.json +10 -0
- cirq/protocols/json_test_data/_InverseCompositeGate.repr +1 -0
- cirq/protocols/json_test_data/__init__.py +1 -1
- cirq/protocols/json_test_data/sympy.And.json +13 -0
- cirq/protocols/json_test_data/sympy.And.repr +1 -0
- cirq/protocols/json_test_data/sympy.Indexed.json +18 -0
- cirq/protocols/json_test_data/sympy.Indexed.repr +1 -0
- cirq/protocols/json_test_data/sympy.IndexedBase.json +9 -0
- cirq/protocols/json_test_data/sympy.IndexedBase.repr +1 -0
- cirq/protocols/json_test_data/sympy.Not.json +9 -0
- cirq/protocols/json_test_data/sympy.Not.repr +1 -0
- cirq/protocols/json_test_data/sympy.Or.json +13 -0
- cirq/protocols/json_test_data/sympy.Or.repr +1 -0
- cirq/protocols/json_test_data/sympy.Xor.json +13 -0
- cirq/protocols/json_test_data/sympy.Xor.repr +1 -0
- cirq/protocols/kraus_protocol.py +8 -8
- cirq/protocols/kraus_protocol_test.py +0 -1
- cirq/protocols/measurement_key_protocol.py +1 -1
- cirq/protocols/measurement_key_protocol_test.py +7 -7
- cirq/protocols/mixture_protocol.py +6 -4
- cirq/protocols/mixture_protocol_test.py +21 -13
- cirq/protocols/pauli_expansion_protocol.py +1 -0
- cirq/protocols/pow_protocol.py +1 -1
- cirq/protocols/qasm.py +25 -6
- cirq/protocols/qasm_test.py +17 -0
- cirq/protocols/qid_shape_protocol.py +2 -2
- cirq/protocols/resolve_parameters.py +2 -3
- cirq/protocols/resolve_parameters_test.py +2 -1
- cirq/protocols/trace_distance_bound.py +1 -1
- cirq/protocols/trace_distance_bound_test.py +1 -0
- cirq/protocols/unitary_protocol.py +3 -3
- cirq/protocols/unitary_protocol_test.py +1 -1
- cirq/qis/__init__.py +48 -35
- cirq/qis/channels_test.py +0 -9
- cirq/qis/clifford_tableau.py +46 -26
- cirq/qis/clifford_tableau_test.py +2 -1
- cirq/qis/entropy.py +115 -0
- cirq/qis/entropy_test.py +43 -0
- cirq/qis/measures.py +5 -4
- cirq/qis/measures_test.py +7 -0
- cirq/qis/noise_utils_test.py +4 -4
- cirq/qis/quantum_state_representation.py +1 -1
- cirq/qis/states.py +7 -7
- cirq/sim/__init__.py +55 -37
- cirq/sim/classical_simulator.py +7 -6
- cirq/sim/classical_simulator_test.py +3 -1
- cirq/sim/clifford/__init__.py +17 -9
- cirq/sim/clifford/clifford_simulator.py +5 -4
- cirq/sim/clifford/clifford_simulator_test.py +32 -9
- cirq/sim/clifford/clifford_tableau_simulation_state.py +1 -1
- cirq/sim/clifford/stabilizer_simulation_state.py +1 -1
- cirq/sim/clifford/stabilizer_state_ch_form.py +4 -3
- cirq/sim/density_matrix_simulator.py +3 -2
- cirq/sim/density_matrix_simulator_test.py +12 -4
- cirq/sim/density_matrix_utils.py +1 -1
- cirq/sim/mux.py +2 -2
- cirq/sim/simulation_state.py +4 -5
- cirq/sim/simulation_state_base.py +2 -2
- cirq/sim/simulation_state_test.py +1 -1
- cirq/sim/simulation_utils.py +3 -1
- cirq/sim/simulation_utils_test.py +2 -3
- cirq/sim/simulator.py +7 -6
- cirq/sim/simulator_base.py +5 -5
- cirq/sim/simulator_test.py +14 -3
- cirq/sim/sparse_simulator.py +4 -3
- cirq/sim/sparse_simulator_test.py +17 -9
- cirq/sim/state_vector.py +2 -2
- cirq/sim/state_vector_simulation_state_test.py +1 -1
- cirq/sim/state_vector_simulator.py +4 -4
- cirq/sim/state_vector_test.py +27 -32
- cirq/study/__init__.py +27 -21
- cirq/study/flatten_expressions.py +5 -6
- cirq/study/flatten_expressions_test.py +1 -1
- cirq/study/resolver.py +14 -11
- cirq/study/resolver_test.py +10 -1
- cirq/study/result.py +3 -3
- cirq/study/sweepable.py +15 -9
- cirq/study/sweepable_test.py +27 -0
- cirq/study/sweeps.py +65 -10
- cirq/study/sweeps_test.py +123 -0
- cirq/testing/__init__.py +86 -57
- cirq/testing/_compat_test_data/module_a/__init__.py +2 -2
- cirq/testing/_compat_test_data/module_a/sub/subsub/__init__.py +1 -1
- cirq/testing/circuit_compare.py +3 -4
- cirq/testing/circuit_compare_test.py +7 -8
- cirq/testing/consistent_act_on.py +3 -3
- cirq/testing/consistent_channels_test.py +2 -1
- cirq/testing/consistent_controlled_gate_op.py +3 -2
- cirq/testing/consistent_controlled_gate_op_test.py +2 -3
- cirq/testing/consistent_decomposition.py +1 -1
- cirq/testing/consistent_decomposition_test.py +1 -2
- cirq/testing/consistent_pauli_expansion_test.py +1 -1
- cirq/testing/consistent_phase_by.py +1 -1
- cirq/testing/consistent_phase_by_test.py +1 -2
- cirq/testing/consistent_protocols.py +11 -11
- cirq/testing/consistent_protocols_test.py +4 -5
- cirq/testing/consistent_qasm.py +8 -12
- cirq/testing/consistent_qasm_test.py +1 -1
- cirq/testing/consistent_resolve_parameters.py +2 -1
- cirq/testing/consistent_specified_has_unitary_test.py +1 -1
- cirq/testing/consistent_unitary.py +3 -1
- cirq/testing/consistent_unitary_test.py +3 -3
- cirq/testing/devices.py +1 -1
- cirq/testing/devices_test.py +1 -0
- cirq/testing/equals_tester.py +2 -4
- cirq/testing/equals_tester_test.py +6 -5
- cirq/testing/equivalent_basis_map.py +1 -0
- cirq/testing/equivalent_basis_map_test.py +0 -1
- cirq/testing/gate_features_test.py +5 -0
- cirq/testing/json.py +4 -4
- cirq/testing/lin_alg_utils_test.py +1 -1
- cirq/testing/order_tester.py +1 -1
- cirq/testing/order_tester_test.py +1 -1
- cirq/testing/pytest_utils.py +57 -0
- cirq/testing/pytest_utils_test.py +35 -0
- cirq/testing/random_circuit.py +2 -2
- cirq/testing/random_circuit_test.py +2 -2
- cirq/testing/routing_devices_test.py +2 -1
- cirq/testing/sample_circuits.py +1 -1
- cirq/testing/sample_gates.py +5 -4
- cirq/testing/sample_gates_test.py +2 -2
- cirq/transformers/__init__.py +101 -82
- cirq/transformers/align.py +12 -1
- cirq/transformers/align_test.py +13 -0
- cirq/transformers/analytical_decompositions/__init__.py +27 -24
- cirq/transformers/analytical_decompositions/clifford_decomposition.py +2 -1
- cirq/transformers/analytical_decompositions/clifford_decomposition_test.py +1 -1
- cirq/transformers/analytical_decompositions/controlled_gate_decomposition.py +1 -1
- cirq/transformers/analytical_decompositions/controlled_gate_decomposition_test.py +2 -0
- cirq/transformers/analytical_decompositions/cphase_to_fsim.py +1 -1
- cirq/transformers/analytical_decompositions/cphase_to_fsim_test.py +1 -1
- cirq/transformers/analytical_decompositions/pauli_string_decomposition.py +2 -2
- cirq/transformers/analytical_decompositions/pauli_string_decomposition_test.py +4 -4
- cirq/transformers/analytical_decompositions/quantum_shannon_decomposition.py +99 -24
- cirq/transformers/analytical_decompositions/quantum_shannon_decomposition_test.py +105 -14
- cirq/transformers/analytical_decompositions/single_qubit_decompositions.py +1 -1
- cirq/transformers/analytical_decompositions/single_to_two_qubit_isometry.py +1 -1
- cirq/transformers/analytical_decompositions/single_to_two_qubit_isometry_test.py +1 -0
- cirq/transformers/analytical_decompositions/three_qubit_decomposition.py +3 -4
- cirq/transformers/analytical_decompositions/three_qubit_decomposition_test.py +1 -1
- cirq/transformers/analytical_decompositions/two_qubit_state_preparation.py +2 -1
- cirq/transformers/analytical_decompositions/two_qubit_state_preparation_test.py +2 -1
- cirq/transformers/analytical_decompositions/two_qubit_to_cz.py +5 -6
- cirq/transformers/analytical_decompositions/two_qubit_to_cz_test.py +2 -2
- cirq/transformers/analytical_decompositions/two_qubit_to_fsim.py +1 -1
- cirq/transformers/analytical_decompositions/two_qubit_to_fsim_test.py +1 -2
- cirq/transformers/analytical_decompositions/two_qubit_to_ms.py +2 -2
- cirq/transformers/analytical_decompositions/two_qubit_to_sqrt_iswap.py +2 -2
- cirq/transformers/analytical_decompositions/two_qubit_to_sqrt_iswap_test.py +2 -1
- cirq/transformers/drop_empty_moments.py +1 -0
- cirq/transformers/drop_negligible_operations.py +1 -0
- cirq/transformers/dynamical_decoupling.py +255 -43
- cirq/transformers/dynamical_decoupling_test.py +730 -17
- cirq/transformers/eject_phased_paulis.py +29 -15
- cirq/transformers/eject_phased_paulis_test.py +3 -8
- cirq/transformers/eject_z.py +3 -2
- cirq/transformers/eject_z_test.py +3 -3
- cirq/transformers/gauge_compiling/__init__.py +25 -9
- cirq/transformers/gauge_compiling/cphase_gauge.py +146 -0
- cirq/transformers/gauge_compiling/cphase_gauge_test.py +42 -0
- cirq/transformers/gauge_compiling/cz_gauge.py +4 -4
- cirq/transformers/gauge_compiling/gauge_compiling.py +245 -6
- cirq/transformers/gauge_compiling/gauge_compiling_test.py +107 -2
- cirq/transformers/gauge_compiling/gauge_compiling_test_utils.py +39 -2
- cirq/transformers/gauge_compiling/gauge_compiling_test_utils_test.py +10 -1
- cirq/transformers/gauge_compiling/iswap_gauge.py +2 -2
- cirq/transformers/gauge_compiling/spin_inversion_gauge.py +2 -2
- cirq/transformers/gauge_compiling/sqrt_cz_gauge.py +23 -5
- cirq/transformers/gauge_compiling/sqrt_iswap_gauge.py +3 -2
- cirq/transformers/heuristic_decompositions/__init__.py +3 -3
- cirq/transformers/heuristic_decompositions/gate_tabulation_math_utils.py +2 -1
- cirq/transformers/heuristic_decompositions/gate_tabulation_math_utils_test.py +1 -1
- cirq/transformers/heuristic_decompositions/two_qubit_gate_tabulation.py +4 -4
- cirq/transformers/heuristic_decompositions/two_qubit_gate_tabulation_test.py +4 -4
- cirq/transformers/insertion_sort.py +64 -0
- cirq/transformers/insertion_sort_test.py +34 -0
- cirq/transformers/measurement_transformers.py +14 -1
- cirq/transformers/measurement_transformers_test.py +35 -0
- cirq/transformers/merge_k_qubit_gates.py +2 -2
- cirq/transformers/merge_single_qubit_gates.py +1 -1
- cirq/transformers/merge_single_qubit_gates_test.py +1 -1
- cirq/transformers/noise_adding.py +115 -0
- cirq/transformers/noise_adding_test.py +54 -0
- cirq/transformers/optimize_for_target_gateset.py +1 -1
- cirq/transformers/optimize_for_target_gateset_test.py +3 -2
- cirq/transformers/qubit_management_transformers.py +1 -1
- cirq/transformers/randomized_measurements.py +171 -0
- cirq/transformers/randomized_measurements_test.py +68 -0
- cirq/transformers/routing/__init__.py +14 -5
- cirq/transformers/routing/initial_mapper.py +1 -1
- cirq/transformers/routing/initial_mapper_test.py +1 -0
- cirq/transformers/routing/line_initial_mapper.py +3 -2
- cirq/transformers/routing/mapping_manager.py +2 -2
- cirq/transformers/routing/mapping_manager_test.py +2 -2
- cirq/transformers/routing/route_circuit_cqc.py +3 -2
- cirq/transformers/routing/route_circuit_cqc_test.py +2 -1
- cirq/transformers/routing/visualize_routed_circuit.py +1 -0
- cirq/transformers/routing/visualize_routed_circuit_test.py +1 -0
- cirq/transformers/stratify.py +2 -2
- cirq/transformers/synchronize_terminal_measurements.py +2 -1
- cirq/transformers/target_gatesets/__init__.py +7 -5
- cirq/transformers/target_gatesets/compilation_target_gateset.py +16 -3
- cirq/transformers/target_gatesets/compilation_target_gateset_test.py +2 -0
- cirq/transformers/target_gatesets/cz_gateset.py +5 -1
- cirq/transformers/target_gatesets/cz_gateset_test.py +23 -2
- cirq/transformers/target_gatesets/sqrt_iswap_gateset.py +1 -1
- cirq/transformers/target_gatesets/sqrt_iswap_gateset_test.py +3 -2
- cirq/transformers/transformer_api.py +5 -4
- cirq/transformers/transformer_api_test.py +11 -3
- cirq/transformers/transformer_primitives.py +9 -31
- cirq/transformers/transformer_primitives_test.py +6 -5
- cirq/value/__init__.py +51 -30
- cirq/value/abc_alt.py +1 -2
- cirq/value/angle.py +2 -0
- cirq/value/classical_data.py +1 -0
- cirq/value/condition.py +149 -3
- cirq/value/condition_test.py +254 -0
- cirq/value/digits.py +1 -1
- cirq/value/duration.py +4 -4
- cirq/value/duration_test.py +2 -1
- cirq/value/linear_dict.py +85 -24
- cirq/value/linear_dict_test.py +94 -3
- cirq/value/measurement_key.py +9 -2
- cirq/value/periodic_value.py +2 -3
- cirq/value/periodic_value_test.py +5 -0
- cirq/value/probability.py +1 -0
- cirq/value/random_state.py +1 -1
- cirq/value/timestamp.py +2 -4
- cirq/value/timestamp_test.py +2 -1
- cirq/value/type_alias.py +2 -2
- cirq/value/value_equality_attr.py +14 -2
- cirq/value/value_equality_attr_test.py +1 -1
- cirq/vis/__init__.py +9 -6
- cirq/vis/density_matrix.py +1 -1
- cirq/vis/density_matrix_test.py +2 -5
- cirq/vis/heatmap.py +49 -12
- cirq/vis/heatmap_test.py +168 -4
- cirq/vis/histogram.py +1 -1
- cirq/vis/histogram_test.py +1 -2
- cirq/vis/state_histogram.py +7 -5
- cirq/vis/state_histogram_test.py +2 -2
- cirq/work/__init__.py +19 -13
- cirq/work/collector.py +2 -2
- cirq/work/observable_grouping.py +2 -2
- cirq/work/observable_measurement.py +3 -3
- cirq/work/observable_measurement_data.py +5 -2
- cirq/work/observable_measurement_test.py +8 -8
- cirq/work/observable_readout_calibration.py +2 -2
- cirq/work/observable_readout_calibration_test.py +2 -1
- cirq/work/observable_settings.py +8 -7
- cirq/work/observable_settings_test.py +3 -2
- cirq/work/pauli_sum_collector.py +1 -1
- cirq/work/sampler.py +8 -20
- cirq/work/sampler_test.py +4 -3
- cirq/work/zeros_sampler.py +1 -1
- cirq_core-1.5.0.dist-info/METADATA +125 -0
- {cirq_core-1.4.0.dev20240529225110.dist-info → cirq_core-1.5.0.dist-info}/RECORD +586 -552
- {cirq_core-1.4.0.dev20240529225110.dist-info → cirq_core-1.5.0.dist-info}/WHEEL +1 -1
- cirq/experiments/grid_parallel_two_qubit_xeb.py +0 -62
- cirq/protocols/json_test_data/GridParallelXEBMetadata.json +0 -119
- cirq/protocols/json_test_data/GridParallelXEBMetadata.repr +0 -1
- cirq_core-1.4.0.dev20240529225110.dist-info/METADATA +0 -50
- {cirq_core-1.4.0.dev20240529225110.dist-info → cirq_core-1.5.0.dist-info}/LICENSE +0 -0
- {cirq_core-1.4.0.dev20240529225110.dist-info → cirq_core-1.5.0.dist-info}/top_level.txt +0 -0
cirq/study/sweeps_test.py
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
import pytest
|
|
15
15
|
import sympy
|
|
16
|
+
|
|
16
17
|
import cirq
|
|
17
18
|
|
|
18
19
|
|
|
@@ -110,7 +111,9 @@ def test_zip_longest_compatibility():
|
|
|
110
111
|
|
|
111
112
|
|
|
112
113
|
def test_empty_zip():
|
|
114
|
+
assert len(cirq.Zip()) == 0
|
|
113
115
|
assert len(cirq.ZipLongest()) == 0
|
|
116
|
+
assert str(cirq.Zip()) == 'Zip()'
|
|
114
117
|
with pytest.raises(ValueError, match='non-empty'):
|
|
115
118
|
_ = cirq.ZipLongest(cirq.Points('e', []), cirq.Points('a', [1, 2, 3]))
|
|
116
119
|
|
|
@@ -141,10 +144,26 @@ def test_product():
|
|
|
141
144
|
assert _values(sweep, 'a') == [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3]
|
|
142
145
|
assert _values(sweep, 'b') == [4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7]
|
|
143
146
|
|
|
147
|
+
sweep = cirq.Points('a', [1, 2]) * (cirq.Points('b', [3, 4]) * cirq.Points('c', [5, 6]))
|
|
148
|
+
assert len(sweep) == 8
|
|
149
|
+
assert _values(sweep, 'a') == [1, 1, 1, 1, 2, 2, 2, 2]
|
|
150
|
+
assert _values(sweep, 'b') == [3, 3, 4, 4, 3, 3, 4, 4]
|
|
151
|
+
assert _values(sweep, 'c') == [5, 6, 5, 6, 5, 6, 5, 6]
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def test_zip_addition():
|
|
155
|
+
zip_sweep = cirq.Zip(cirq.Points('a', [1, 2]), cirq.Points('b', [3, 4]))
|
|
156
|
+
zip_sweep2 = cirq.Points('c', [5, 6]) + zip_sweep
|
|
157
|
+
assert len(zip_sweep2) == 2
|
|
158
|
+
assert _values(zip_sweep2, 'a') == [1, 2]
|
|
159
|
+
assert _values(zip_sweep2, 'b') == [3, 4]
|
|
160
|
+
assert _values(zip_sweep2, 'c') == [5, 6]
|
|
161
|
+
|
|
144
162
|
|
|
145
163
|
def test_empty_product():
|
|
146
164
|
sweep = cirq.Product()
|
|
147
165
|
assert len(sweep) == len(list(sweep)) == 1
|
|
166
|
+
assert str(sweep) == 'Product()'
|
|
148
167
|
|
|
149
168
|
|
|
150
169
|
def test_slice_access_error():
|
|
@@ -246,6 +265,8 @@ def test_equality():
|
|
|
246
265
|
et.make_equality_group(lambda: cirq.Linspace('b', 0, 10, 11))
|
|
247
266
|
et.make_equality_group(lambda: cirq.Points('a', list(range(11))))
|
|
248
267
|
et.make_equality_group(lambda: cirq.Points('b', list(range(11))))
|
|
268
|
+
et.make_equality_group(lambda: cirq.Concat(cirq.Linspace('a', 0, 10, 11)))
|
|
269
|
+
et.make_equality_group(lambda: cirq.Concat(cirq.Linspace('b', 0, 10, 11)))
|
|
249
270
|
|
|
250
271
|
# Product and Zip sweeps can also be equated.
|
|
251
272
|
et.make_equality_group(lambda: cirq.Linspace('a', 0, 5, 6) * cirq.Linspace('b', 10, 15, 6))
|
|
@@ -373,3 +394,105 @@ def test_dict_to_zip_sweep():
|
|
|
373
394
|
assert cirq.dict_to_zip_sweep({'t': [0, 1], 's': [2, 3], 'r': 4}) == (
|
|
374
395
|
cirq.Zip(cirq.Points('t', [0, 1]), cirq.Points('s', [2, 3]), cirq.Points('r', [4]))
|
|
375
396
|
)
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
def test_concat_linspace():
|
|
400
|
+
sweep1 = cirq.Linspace('a', 0.34, 9.16, 4)
|
|
401
|
+
sweep2 = cirq.Linspace('a', 10, 20, 4)
|
|
402
|
+
concat_sweep = cirq.Concat(sweep1, sweep2)
|
|
403
|
+
|
|
404
|
+
assert len(concat_sweep) == 8
|
|
405
|
+
assert concat_sweep.keys == ['a']
|
|
406
|
+
params = list(concat_sweep.param_tuples())
|
|
407
|
+
assert len(params) == 8
|
|
408
|
+
assert params[0] == (('a', 0.34),)
|
|
409
|
+
assert params[3] == (('a', 9.16),)
|
|
410
|
+
assert params[4] == (('a', 10.0),)
|
|
411
|
+
assert params[7] == (('a', 20.0),)
|
|
412
|
+
|
|
413
|
+
|
|
414
|
+
def test_concat_points():
|
|
415
|
+
sweep1 = cirq.Points('a', [1, 2])
|
|
416
|
+
sweep2 = cirq.Points('a', [3, 4, 5])
|
|
417
|
+
concat_sweep = cirq.Concat(sweep1, sweep2)
|
|
418
|
+
|
|
419
|
+
assert concat_sweep.keys == ['a']
|
|
420
|
+
assert len(concat_sweep) == 5
|
|
421
|
+
params = list(concat_sweep)
|
|
422
|
+
assert len(params) == 5
|
|
423
|
+
assert _values(concat_sweep, 'a') == [1, 2, 3, 4, 5]
|
|
424
|
+
|
|
425
|
+
|
|
426
|
+
def test_concat_many_points():
|
|
427
|
+
sweep1 = cirq.Points('a', [1, 2])
|
|
428
|
+
sweep2 = cirq.Points('a', [3, 4, 5])
|
|
429
|
+
sweep3 = cirq.Points('a', [6, 7, 8])
|
|
430
|
+
concat_sweep = cirq.Concat(sweep1, sweep2, sweep3)
|
|
431
|
+
|
|
432
|
+
assert len(concat_sweep) == 8
|
|
433
|
+
params = list(concat_sweep)
|
|
434
|
+
assert len(params) == 8
|
|
435
|
+
assert _values(concat_sweep, 'a') == [1, 2, 3, 4, 5, 6, 7, 8]
|
|
436
|
+
|
|
437
|
+
|
|
438
|
+
def test_concat_mixed():
|
|
439
|
+
sweep1 = cirq.Linspace('a', 0, 1, 3)
|
|
440
|
+
sweep2 = cirq.Points('a', [2, 3])
|
|
441
|
+
concat_sweep = cirq.Concat(sweep1, sweep2)
|
|
442
|
+
|
|
443
|
+
assert len(concat_sweep) == 5
|
|
444
|
+
assert _values(concat_sweep, 'a') == [0.0, 0.5, 1.0, 2, 3]
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
def test_concat_inconsistent_keys():
|
|
448
|
+
sweep1 = cirq.Linspace('a', 0, 1, 3)
|
|
449
|
+
sweep2 = cirq.Points('b', [2, 3])
|
|
450
|
+
|
|
451
|
+
with pytest.raises(ValueError, match="All sweeps must have the same descriptors"):
|
|
452
|
+
cirq.Concat(sweep1, sweep2)
|
|
453
|
+
|
|
454
|
+
|
|
455
|
+
def test_concat_sympy_symbol():
|
|
456
|
+
a = sympy.Symbol('a')
|
|
457
|
+
sweep1 = cirq.Linspace(a, 0, 1, 3)
|
|
458
|
+
sweep2 = cirq.Points(a, [2, 3])
|
|
459
|
+
concat_sweep = cirq.Concat(sweep1, sweep2)
|
|
460
|
+
|
|
461
|
+
assert len(concat_sweep) == 5
|
|
462
|
+
assert _values(concat_sweep, 'a') == [0.0, 0.5, 1.0, 2, 3]
|
|
463
|
+
|
|
464
|
+
|
|
465
|
+
def test_concat_repr_and_str():
|
|
466
|
+
sweep1 = cirq.Linspace('a', 0, 1, 3)
|
|
467
|
+
sweep2 = cirq.Points('a', [2, 3])
|
|
468
|
+
concat_sweep = cirq.Concat(sweep1, sweep2)
|
|
469
|
+
|
|
470
|
+
expected_repr = (
|
|
471
|
+
"cirq.Concat(cirq.Linspace('a', start=0, stop=1, length=3), cirq.Points('a', [2, 3]))"
|
|
472
|
+
)
|
|
473
|
+
expected_str = "Concat(cirq.Linspace('a', start=0, stop=1, length=3), cirq.Points('a', [2, 3]))"
|
|
474
|
+
|
|
475
|
+
assert repr(concat_sweep) == expected_repr
|
|
476
|
+
assert str(concat_sweep) == expected_str
|
|
477
|
+
|
|
478
|
+
|
|
479
|
+
def test_concat_large_sweep():
|
|
480
|
+
sweep1 = cirq.Points('a', list(range(101)))
|
|
481
|
+
sweep2 = cirq.Points('a', list(range(101, 202)))
|
|
482
|
+
concat_sweep = cirq.Concat(sweep1, sweep2)
|
|
483
|
+
|
|
484
|
+
assert len(concat_sweep) == 202
|
|
485
|
+
assert _values(concat_sweep, 'a') == list(range(101)) + list(range(101, 202))
|
|
486
|
+
|
|
487
|
+
|
|
488
|
+
def test_concat_different_keys_raises():
|
|
489
|
+
sweep1 = cirq.Linspace('a', 0, 1, 3)
|
|
490
|
+
sweep2 = cirq.Points('b', [2, 3])
|
|
491
|
+
|
|
492
|
+
with pytest.raises(ValueError, match="All sweeps must have the same descriptors."):
|
|
493
|
+
_ = cirq.Concat(sweep1, sweep2)
|
|
494
|
+
|
|
495
|
+
|
|
496
|
+
def test_concat_empty_sweep_raises():
|
|
497
|
+
with pytest.raises(ValueError, match="Concat requires at least one sweep."):
|
|
498
|
+
_ = cirq.Concat()
|
cirq/testing/__init__.py
CHANGED
|
@@ -15,107 +15,136 @@
|
|
|
15
15
|
"""Utilities for testing code."""
|
|
16
16
|
|
|
17
17
|
from cirq.testing.circuit_compare import (
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
18
|
+
# pylint: disable=line-too-long
|
|
19
|
+
assert_circuits_with_terminal_measurements_are_equivalent as assert_circuits_with_terminal_measurements_are_equivalent,
|
|
20
|
+
assert_circuits_have_same_unitary_given_final_permutation as assert_circuits_have_same_unitary_given_final_permutation,
|
|
21
|
+
assert_has_consistent_apply_channel as assert_has_consistent_apply_channel,
|
|
22
|
+
assert_has_consistent_apply_unitary as assert_has_consistent_apply_unitary,
|
|
23
|
+
assert_has_consistent_apply_unitary_for_various_exponents as assert_has_consistent_apply_unitary_for_various_exponents,
|
|
24
|
+
assert_has_diagram as assert_has_diagram,
|
|
25
|
+
assert_same_circuits as assert_same_circuits,
|
|
26
|
+
highlight_text_differences as highlight_text_differences,
|
|
27
|
+
assert_has_consistent_qid_shape as assert_has_consistent_qid_shape,
|
|
27
28
|
)
|
|
28
29
|
|
|
29
|
-
from cirq.testing.consistent_act_on import
|
|
30
|
+
from cirq.testing.consistent_act_on import (
|
|
31
|
+
# pylint: disable=line-too-long
|
|
32
|
+
assert_all_implemented_act_on_effects_match_unitary as assert_all_implemented_act_on_effects_match_unitary,
|
|
33
|
+
)
|
|
30
34
|
|
|
31
|
-
from cirq.testing.consistent_channels import
|
|
35
|
+
from cirq.testing.consistent_channels import (
|
|
36
|
+
assert_consistent_channel as assert_consistent_channel,
|
|
37
|
+
assert_consistent_mixture as assert_consistent_mixture,
|
|
38
|
+
)
|
|
32
39
|
|
|
33
40
|
from cirq.testing.consistent_controlled_gate_op import (
|
|
34
|
-
assert_controlled_and_controlled_by_identical,
|
|
35
|
-
assert_controlled_unitary_consistent,
|
|
41
|
+
assert_controlled_and_controlled_by_identical as assert_controlled_and_controlled_by_identical,
|
|
42
|
+
assert_controlled_unitary_consistent as assert_controlled_unitary_consistent,
|
|
36
43
|
)
|
|
37
44
|
|
|
38
45
|
from cirq.testing.consistent_decomposition import (
|
|
39
|
-
assert_decompose_ends_at_default_gateset,
|
|
40
|
-
assert_decompose_is_consistent_with_unitary,
|
|
46
|
+
assert_decompose_ends_at_default_gateset as assert_decompose_ends_at_default_gateset,
|
|
47
|
+
assert_decompose_is_consistent_with_unitary as assert_decompose_is_consistent_with_unitary,
|
|
41
48
|
)
|
|
42
49
|
|
|
43
50
|
from cirq.testing.consistent_pauli_expansion import (
|
|
44
|
-
|
|
51
|
+
# pylint: disable=line-too-long
|
|
52
|
+
assert_pauli_expansion_is_consistent_with_unitary as assert_pauli_expansion_is_consistent_with_unitary,
|
|
45
53
|
)
|
|
46
54
|
|
|
47
|
-
from cirq.testing.consistent_phase_by import
|
|
55
|
+
from cirq.testing.consistent_phase_by import (
|
|
56
|
+
assert_phase_by_is_consistent_with_unitary as assert_phase_by_is_consistent_with_unitary,
|
|
57
|
+
)
|
|
48
58
|
|
|
49
59
|
from cirq.testing.consistent_protocols import (
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
60
|
+
# pylint: disable=line-too-long
|
|
61
|
+
assert_eigengate_implements_consistent_protocols as assert_eigengate_implements_consistent_protocols,
|
|
62
|
+
assert_has_consistent_trace_distance_bound as assert_has_consistent_trace_distance_bound,
|
|
63
|
+
assert_implements_consistent_protocols as assert_implements_consistent_protocols,
|
|
64
|
+
assert_commutes_magic_method_consistent_with_unitaries as assert_commutes_magic_method_consistent_with_unitaries,
|
|
54
65
|
)
|
|
55
66
|
|
|
56
|
-
from cirq.testing.consistent_qasm import
|
|
67
|
+
from cirq.testing.consistent_qasm import (
|
|
68
|
+
assert_qasm_is_consistent_with_unitary as assert_qasm_is_consistent_with_unitary,
|
|
69
|
+
)
|
|
57
70
|
|
|
58
|
-
from cirq.testing.consistent_resolve_parameters import
|
|
71
|
+
from cirq.testing.consistent_resolve_parameters import (
|
|
72
|
+
assert_consistent_resolve_parameters as assert_consistent_resolve_parameters,
|
|
73
|
+
)
|
|
59
74
|
|
|
60
|
-
from cirq.testing.consistent_specified_has_unitary import
|
|
75
|
+
from cirq.testing.consistent_specified_has_unitary import (
|
|
76
|
+
assert_specifies_has_unitary_if_unitary as assert_specifies_has_unitary_if_unitary,
|
|
77
|
+
)
|
|
61
78
|
|
|
62
|
-
from cirq.testing.deprecation import assert_deprecated
|
|
79
|
+
from cirq.testing.deprecation import assert_deprecated as assert_deprecated
|
|
63
80
|
|
|
64
|
-
from cirq.testing.devices import ValidatingTestDevice
|
|
81
|
+
from cirq.testing.devices import ValidatingTestDevice as ValidatingTestDevice
|
|
65
82
|
|
|
66
|
-
from cirq.testing.equals_tester import EqualsTester
|
|
83
|
+
from cirq.testing.equals_tester import EqualsTester as EqualsTester
|
|
67
84
|
|
|
68
|
-
from cirq.testing.equivalent_basis_map import
|
|
85
|
+
from cirq.testing.equivalent_basis_map import (
|
|
86
|
+
assert_equivalent_computational_basis_map as assert_equivalent_computational_basis_map,
|
|
87
|
+
)
|
|
69
88
|
|
|
70
|
-
from cirq.testing.equivalent_repr_eval import assert_equivalent_repr
|
|
89
|
+
from cirq.testing.equivalent_repr_eval import assert_equivalent_repr as assert_equivalent_repr
|
|
71
90
|
|
|
72
91
|
from cirq.testing.gate_features import (
|
|
73
|
-
SingleQubitGate,
|
|
74
|
-
TwoQubitGate,
|
|
75
|
-
ThreeQubitGate,
|
|
76
|
-
DoesNotSupportSerializationGate,
|
|
92
|
+
SingleQubitGate as SingleQubitGate,
|
|
93
|
+
TwoQubitGate as TwoQubitGate,
|
|
94
|
+
ThreeQubitGate as ThreeQubitGate,
|
|
95
|
+
DoesNotSupportSerializationGate as DoesNotSupportSerializationGate,
|
|
77
96
|
)
|
|
78
97
|
|
|
79
|
-
from cirq.testing.json import assert_json_roundtrip_works
|
|
98
|
+
from cirq.testing.json import assert_json_roundtrip_works as assert_json_roundtrip_works
|
|
80
99
|
|
|
81
100
|
from cirq.testing.lin_alg_utils import (
|
|
82
|
-
assert_allclose_up_to_global_phase,
|
|
83
|
-
random_density_matrix,
|
|
84
|
-
random_orthogonal,
|
|
85
|
-
random_special_orthogonal,
|
|
86
|
-
random_special_unitary,
|
|
87
|
-
random_superposition,
|
|
88
|
-
random_unitary,
|
|
101
|
+
assert_allclose_up_to_global_phase as assert_allclose_up_to_global_phase,
|
|
102
|
+
random_density_matrix as random_density_matrix,
|
|
103
|
+
random_orthogonal as random_orthogonal,
|
|
104
|
+
random_special_orthogonal as random_special_orthogonal,
|
|
105
|
+
random_special_unitary as random_special_unitary,
|
|
106
|
+
random_superposition as random_superposition,
|
|
107
|
+
random_unitary as random_unitary,
|
|
89
108
|
)
|
|
90
109
|
|
|
91
|
-
from cirq.testing.logs import assert_logs
|
|
110
|
+
from cirq.testing.logs import assert_logs as assert_logs
|
|
111
|
+
|
|
112
|
+
from cirq.testing.no_identifier_qubit import NoIdentifierQubit as NoIdentifierQubit
|
|
92
113
|
|
|
93
|
-
from cirq.testing.
|
|
114
|
+
from cirq.testing.op_tree import assert_equivalent_op_tree as assert_equivalent_op_tree
|
|
94
115
|
|
|
95
|
-
from cirq.testing.
|
|
116
|
+
from cirq.testing.order_tester import OrderTester as OrderTester
|
|
96
117
|
|
|
97
|
-
from cirq.testing.
|
|
118
|
+
from cirq.testing.pytest_utils import (
|
|
119
|
+
retry_once_after_timeout as retry_once_after_timeout,
|
|
120
|
+
retry_once_with_later_random_values as retry_once_with_later_random_values,
|
|
121
|
+
)
|
|
98
122
|
|
|
99
123
|
from cirq.testing.random_circuit import (
|
|
100
|
-
DEFAULT_GATE_DOMAIN,
|
|
101
|
-
random_circuit,
|
|
102
|
-
random_two_qubit_circuit_with_czs,
|
|
124
|
+
DEFAULT_GATE_DOMAIN as DEFAULT_GATE_DOMAIN,
|
|
125
|
+
random_circuit as random_circuit,
|
|
126
|
+
random_two_qubit_circuit_with_czs as random_two_qubit_circuit_with_czs,
|
|
103
127
|
)
|
|
104
128
|
|
|
105
129
|
from cirq.testing.repr_pretty_tester import (
|
|
106
|
-
assert_repr_pretty,
|
|
107
|
-
assert_repr_pretty_contains,
|
|
108
|
-
FakePrinter,
|
|
130
|
+
assert_repr_pretty as assert_repr_pretty,
|
|
131
|
+
assert_repr_pretty_contains as assert_repr_pretty_contains,
|
|
132
|
+
FakePrinter as FakePrinter,
|
|
109
133
|
)
|
|
110
134
|
|
|
111
135
|
from cirq.testing.routing_devices import (
|
|
112
|
-
construct_grid_device,
|
|
113
|
-
construct_ring_device,
|
|
114
|
-
RoutingTestingDevice,
|
|
136
|
+
construct_grid_device as construct_grid_device,
|
|
137
|
+
construct_ring_device as construct_ring_device,
|
|
138
|
+
RoutingTestingDevice as RoutingTestingDevice,
|
|
115
139
|
)
|
|
116
140
|
|
|
117
|
-
from cirq.testing.sample_circuits import nonoptimal_toffoli_circuit
|
|
141
|
+
from cirq.testing.sample_circuits import nonoptimal_toffoli_circuit as nonoptimal_toffoli_circuit
|
|
118
142
|
|
|
119
|
-
from cirq.testing.sample_gates import
|
|
143
|
+
from cirq.testing.sample_gates import (
|
|
144
|
+
PhaseUsingCleanAncilla as PhaseUsingCleanAncilla,
|
|
145
|
+
PhaseUsingDirtyAncilla as PhaseUsingDirtyAncilla,
|
|
146
|
+
)
|
|
120
147
|
|
|
121
|
-
from cirq.testing.consistent_unitary import
|
|
148
|
+
from cirq.testing.consistent_unitary import (
|
|
149
|
+
assert_unitary_is_consistent as assert_unitary_is_consistent,
|
|
150
|
+
)
|
|
@@ -5,9 +5,9 @@ import logging
|
|
|
5
5
|
|
|
6
6
|
from cirq.testing._compat_test_data.module_a import module_b
|
|
7
7
|
|
|
8
|
-
from cirq.testing._compat_test_data.module_a.dupe import DUPE_CONSTANT
|
|
8
|
+
from cirq.testing._compat_test_data.module_a.dupe import DUPE_CONSTANT as DUPE_CONSTANT
|
|
9
9
|
|
|
10
|
-
from cirq.testing._compat_test_data.module_a.types import SampleType
|
|
10
|
+
from cirq.testing._compat_test_data.module_a.types import SampleType as SampleType
|
|
11
11
|
|
|
12
12
|
MODULE_A_ATTRIBUTE = "module_a"
|
|
13
13
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# pylint: disable=wrong-or-nonexistent-copyright-notice
|
|
2
|
-
from cirq.testing._compat_test_data.module_a.sub.subsub.dupe import DUPE_CONSTANT
|
|
2
|
+
from cirq.testing._compat_test_data.module_a.sub.subsub.dupe import DUPE_CONSTANT as DUPE_CONSTANT
|
cirq/testing/circuit_compare.py
CHANGED
|
@@ -12,16 +12,15 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
-
from typing import Any, Dict, Iterable, List, Optional, Sequence, Union
|
|
16
|
-
|
|
17
|
-
from collections import defaultdict
|
|
18
15
|
import itertools
|
|
19
16
|
import random
|
|
17
|
+
from collections import defaultdict
|
|
18
|
+
from typing import Any, Dict, Iterable, List, Optional, Sequence, Union
|
|
20
19
|
|
|
21
20
|
import numpy as np
|
|
22
21
|
import sympy
|
|
23
22
|
|
|
24
|
-
from cirq import circuits,
|
|
23
|
+
from cirq import circuits, linalg, ops, protocols, qis
|
|
25
24
|
from cirq.testing import lin_alg_utils
|
|
26
25
|
|
|
27
26
|
|
|
@@ -12,9 +12,8 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
-
import pytest
|
|
16
|
-
|
|
17
15
|
import numpy as np
|
|
16
|
+
import pytest
|
|
18
17
|
|
|
19
18
|
import cirq
|
|
20
19
|
from cirq.testing.circuit_compare import _assert_apply_unitary_works_when_axes_transposed
|
|
@@ -334,7 +333,7 @@ def test_assert_has_consistent_apply_unitary():
|
|
|
334
333
|
return args.available_buffer
|
|
335
334
|
|
|
336
335
|
def _unitary_(self):
|
|
337
|
-
return np.eye(2)
|
|
336
|
+
return np.eye(2) # pragma: no cover
|
|
338
337
|
|
|
339
338
|
def _num_qubits_(self):
|
|
340
339
|
return 1
|
|
@@ -367,7 +366,7 @@ def test_assert_has_consistent_apply_unitary():
|
|
|
367
366
|
return args.available_buffer
|
|
368
367
|
|
|
369
368
|
def _unitary_(self):
|
|
370
|
-
return np.array([[0, 1], [1, 0]])
|
|
369
|
+
return np.array([[0, 1], [1, 0]]) # pragma: no cover
|
|
371
370
|
|
|
372
371
|
def _num_qubits_(self):
|
|
373
372
|
return 1
|
|
@@ -484,7 +483,7 @@ def test_assert_has_consistent_qid_shape():
|
|
|
484
483
|
|
|
485
484
|
class ConsistentOp(cirq.Operation):
|
|
486
485
|
def with_qubits(self, *qubits):
|
|
487
|
-
raise NotImplementedError
|
|
486
|
+
raise NotImplementedError
|
|
488
487
|
|
|
489
488
|
@property
|
|
490
489
|
def qubits(self):
|
|
@@ -501,7 +500,7 @@ def test_assert_has_consistent_qid_shape():
|
|
|
501
500
|
# the three methods before finding an inconsistency and throwing an error.
|
|
502
501
|
class InconsistentOp1(cirq.Operation):
|
|
503
502
|
def with_qubits(self, *qubits):
|
|
504
|
-
raise NotImplementedError
|
|
503
|
+
raise NotImplementedError
|
|
505
504
|
|
|
506
505
|
@property
|
|
507
506
|
def qubits(self):
|
|
@@ -515,7 +514,7 @@ def test_assert_has_consistent_qid_shape():
|
|
|
515
514
|
|
|
516
515
|
class InconsistentOp2(cirq.Operation):
|
|
517
516
|
def with_qubits(self, *qubits):
|
|
518
|
-
raise NotImplementedError
|
|
517
|
+
raise NotImplementedError
|
|
519
518
|
|
|
520
519
|
@property
|
|
521
520
|
def qubits(self):
|
|
@@ -529,7 +528,7 @@ def test_assert_has_consistent_qid_shape():
|
|
|
529
528
|
|
|
530
529
|
class InconsistentOp3(cirq.Operation):
|
|
531
530
|
def with_qubits(self, *qubits):
|
|
532
|
-
raise NotImplementedError
|
|
531
|
+
raise NotImplementedError
|
|
533
532
|
|
|
534
533
|
@property
|
|
535
534
|
def qubits(self):
|
|
@@ -16,17 +16,17 @@ from typing import Any, cast, Optional, Type
|
|
|
16
16
|
|
|
17
17
|
import numpy as np
|
|
18
18
|
|
|
19
|
+
from cirq import protocols
|
|
19
20
|
from cirq.circuits.circuit import Circuit
|
|
20
21
|
from cirq.devices import LineQubit
|
|
21
22
|
from cirq.ops import common_gates
|
|
22
23
|
from cirq.ops.dense_pauli_string import DensePauliString
|
|
23
|
-
from cirq import protocols
|
|
24
24
|
from cirq.qis import clifford_tableau
|
|
25
|
-
from cirq.sim import
|
|
25
|
+
from cirq.sim import final_state_vector, state_vector_simulation_state
|
|
26
26
|
from cirq.sim.clifford import (
|
|
27
27
|
clifford_tableau_simulation_state,
|
|
28
|
-
stabilizer_state_ch_form,
|
|
29
28
|
stabilizer_ch_form_simulation_state,
|
|
29
|
+
stabilizer_state_ch_form,
|
|
30
30
|
)
|
|
31
31
|
|
|
32
32
|
|
|
@@ -12,11 +12,12 @@
|
|
|
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 Collection, Optional, Sequence, Union
|
|
16
16
|
|
|
17
|
-
from cirq import devices, ops, protocols
|
|
18
17
|
import numpy as np
|
|
19
18
|
|
|
19
|
+
from cirq import devices, ops, protocols
|
|
20
|
+
|
|
20
21
|
|
|
21
22
|
def assert_controlled_and_controlled_by_identical(
|
|
22
23
|
gate: ops.Gate,
|
|
@@ -12,11 +12,10 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
-
from typing import
|
|
16
|
-
|
|
17
|
-
import pytest
|
|
15
|
+
from typing import Collection, List, Optional, Sequence, Tuple, Union
|
|
18
16
|
|
|
19
17
|
import numpy as np
|
|
18
|
+
import pytest
|
|
20
19
|
|
|
21
20
|
import cirq
|
|
22
21
|
from cirq.ops import control_values as cv
|
|
@@ -13,34 +13,34 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
15
|
import itertools
|
|
16
|
-
from typing import Any, Dict, Optional, Sequence, Type
|
|
16
|
+
from typing import Any, Dict, Optional, Sequence, Type
|
|
17
17
|
|
|
18
18
|
import numpy as np
|
|
19
19
|
import sympy
|
|
20
20
|
|
|
21
21
|
from cirq import ops, protocols, value
|
|
22
|
-
from cirq.testing.consistent_act_on import assert_all_implemented_act_on_effects_match_unitary
|
|
23
22
|
from cirq.testing.circuit_compare import (
|
|
24
23
|
assert_has_consistent_apply_unitary,
|
|
25
24
|
assert_has_consistent_qid_shape,
|
|
26
25
|
)
|
|
26
|
+
from cirq.testing.consistent_act_on import assert_all_implemented_act_on_effects_match_unitary
|
|
27
|
+
from cirq.testing.consistent_controlled_gate_op import (
|
|
28
|
+
assert_controlled_and_controlled_by_identical,
|
|
29
|
+
assert_controlled_unitary_consistent,
|
|
30
|
+
)
|
|
27
31
|
from cirq.testing.consistent_decomposition import (
|
|
28
|
-
assert_decompose_is_consistent_with_unitary,
|
|
29
32
|
assert_decompose_ends_at_default_gateset,
|
|
33
|
+
assert_decompose_is_consistent_with_unitary,
|
|
30
34
|
)
|
|
31
|
-
from cirq.testing.consistent_phase_by import assert_phase_by_is_consistent_with_unitary
|
|
32
|
-
from cirq.testing.consistent_qasm import assert_qasm_is_consistent_with_unitary
|
|
33
35
|
from cirq.testing.consistent_pauli_expansion import (
|
|
34
36
|
assert_pauli_expansion_is_consistent_with_unitary,
|
|
35
37
|
)
|
|
38
|
+
from cirq.testing.consistent_phase_by import assert_phase_by_is_consistent_with_unitary
|
|
39
|
+
from cirq.testing.consistent_qasm import assert_qasm_is_consistent_with_unitary
|
|
36
40
|
from cirq.testing.consistent_resolve_parameters import assert_consistent_resolve_parameters
|
|
37
41
|
from cirq.testing.consistent_specified_has_unitary import assert_specifies_has_unitary_if_unitary
|
|
38
|
-
from cirq.testing.equivalent_repr_eval import assert_equivalent_repr
|
|
39
|
-
from cirq.testing.consistent_controlled_gate_op import (
|
|
40
|
-
assert_controlled_and_controlled_by_identical,
|
|
41
|
-
assert_controlled_unitary_consistent,
|
|
42
|
-
)
|
|
43
42
|
from cirq.testing.consistent_unitary import assert_unitary_is_consistent
|
|
43
|
+
from cirq.testing.equivalent_repr_eval import assert_equivalent_repr
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
def assert_implements_consistent_protocols(
|
|
@@ -175,7 +175,7 @@ def _assert_meets_standards_helper(
|
|
|
175
175
|
|
|
176
176
|
|
|
177
177
|
def assert_commutes_magic_method_consistent_with_unitaries(
|
|
178
|
-
*vals: Sequence[Any], atol:
|
|
178
|
+
*vals: Sequence[Any], atol: float = 1e-8
|
|
179
179
|
) -> None:
|
|
180
180
|
if any(isinstance(val, ops.Operation) for val in vals):
|
|
181
181
|
raise TypeError('`_commutes_` need not be consistent with unitaries for `Operation`.')
|
|
@@ -12,17 +12,16 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
-
from
|
|
16
|
-
|
|
17
|
-
import pytest
|
|
15
|
+
from types import NotImplementedType
|
|
16
|
+
from typing import AbstractSet, List, Sequence, Tuple, Union
|
|
18
17
|
|
|
19
18
|
import numpy as np
|
|
19
|
+
import pytest
|
|
20
20
|
import sympy
|
|
21
21
|
|
|
22
22
|
import cirq
|
|
23
|
-
from cirq._compat import proper_repr
|
|
24
|
-
from cirq.type_workarounds import NotImplementedType
|
|
25
23
|
import cirq.testing.consistent_controlled_gate_op_test as controlled_gate_op_test
|
|
24
|
+
from cirq._compat import proper_repr
|
|
26
25
|
|
|
27
26
|
|
|
28
27
|
class GoodGate(cirq.testing.SingleQubitGate):
|