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/ops/__init__.py
CHANGED
|
@@ -11,211 +11,251 @@
|
|
|
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
|
-
"""Gates (unitary and non-unitary), operations, base types, and gate sets.
|
|
15
|
-
"""
|
|
14
|
+
"""Gates (unitary and non-unitary), operations, base types, and gate sets."""
|
|
16
15
|
|
|
17
|
-
from cirq.ops.arithmetic_operation import ArithmeticGate
|
|
16
|
+
from cirq.ops.arithmetic_operation import ArithmeticGate as ArithmeticGate
|
|
18
17
|
|
|
19
|
-
from cirq.ops.clifford_gate import
|
|
18
|
+
from cirq.ops.clifford_gate import (
|
|
19
|
+
CliffordGate as CliffordGate,
|
|
20
|
+
SingleQubitCliffordGate as SingleQubitCliffordGate,
|
|
21
|
+
)
|
|
20
22
|
|
|
21
23
|
from cirq.ops.dense_pauli_string import (
|
|
22
|
-
BaseDensePauliString,
|
|
23
|
-
DensePauliString,
|
|
24
|
-
MutableDensePauliString,
|
|
24
|
+
BaseDensePauliString as BaseDensePauliString,
|
|
25
|
+
DensePauliString as DensePauliString,
|
|
26
|
+
MutableDensePauliString as MutableDensePauliString,
|
|
25
27
|
)
|
|
26
28
|
|
|
27
|
-
from cirq.ops.boolean_hamiltonian import BooleanHamiltonianGate
|
|
29
|
+
from cirq.ops.boolean_hamiltonian import BooleanHamiltonianGate as BooleanHamiltonianGate
|
|
28
30
|
|
|
29
31
|
from cirq.ops.common_channels import (
|
|
30
|
-
amplitude_damp,
|
|
31
|
-
AmplitudeDampingChannel,
|
|
32
|
-
asymmetric_depolarize,
|
|
33
|
-
AsymmetricDepolarizingChannel,
|
|
34
|
-
bit_flip,
|
|
35
|
-
BitFlipChannel,
|
|
36
|
-
depolarize,
|
|
37
|
-
DepolarizingChannel,
|
|
38
|
-
generalized_amplitude_damp,
|
|
39
|
-
GeneralizedAmplitudeDampingChannel,
|
|
40
|
-
phase_damp,
|
|
41
|
-
phase_flip,
|
|
42
|
-
PhaseDampingChannel,
|
|
43
|
-
PhaseFlipChannel,
|
|
44
|
-
R,
|
|
45
|
-
reset,
|
|
46
|
-
reset_each,
|
|
47
|
-
ResetChannel,
|
|
32
|
+
amplitude_damp as amplitude_damp,
|
|
33
|
+
AmplitudeDampingChannel as AmplitudeDampingChannel,
|
|
34
|
+
asymmetric_depolarize as asymmetric_depolarize,
|
|
35
|
+
AsymmetricDepolarizingChannel as AsymmetricDepolarizingChannel,
|
|
36
|
+
bit_flip as bit_flip,
|
|
37
|
+
BitFlipChannel as BitFlipChannel,
|
|
38
|
+
depolarize as depolarize,
|
|
39
|
+
DepolarizingChannel as DepolarizingChannel,
|
|
40
|
+
generalized_amplitude_damp as generalized_amplitude_damp,
|
|
41
|
+
GeneralizedAmplitudeDampingChannel as GeneralizedAmplitudeDampingChannel,
|
|
42
|
+
phase_damp as phase_damp,
|
|
43
|
+
phase_flip as phase_flip,
|
|
44
|
+
PhaseDampingChannel as PhaseDampingChannel,
|
|
45
|
+
PhaseFlipChannel as PhaseFlipChannel,
|
|
46
|
+
R as R,
|
|
47
|
+
reset as reset,
|
|
48
|
+
reset_each as reset_each,
|
|
49
|
+
ResetChannel as ResetChannel,
|
|
48
50
|
)
|
|
49
51
|
|
|
50
52
|
from cirq.ops.common_gates import (
|
|
51
|
-
CNOT,
|
|
52
|
-
CNotPowGate,
|
|
53
|
-
cphase,
|
|
54
|
-
CX,
|
|
55
|
-
CXPowGate,
|
|
56
|
-
CZ,
|
|
57
|
-
CZPowGate,
|
|
58
|
-
H,
|
|
59
|
-
HPowGate,
|
|
60
|
-
Rx,
|
|
61
|
-
Ry,
|
|
62
|
-
Rz,
|
|
63
|
-
rx,
|
|
64
|
-
ry,
|
|
65
|
-
rz,
|
|
66
|
-
S,
|
|
67
|
-
T,
|
|
68
|
-
XPowGate,
|
|
69
|
-
YPowGate,
|
|
70
|
-
ZPowGate,
|
|
53
|
+
CNOT as CNOT,
|
|
54
|
+
CNotPowGate as CNotPowGate,
|
|
55
|
+
cphase as cphase,
|
|
56
|
+
CX as CX,
|
|
57
|
+
CXPowGate as CXPowGate,
|
|
58
|
+
CZ as CZ,
|
|
59
|
+
CZPowGate as CZPowGate,
|
|
60
|
+
H as H,
|
|
61
|
+
HPowGate as HPowGate,
|
|
62
|
+
Rx as Rx,
|
|
63
|
+
Ry as Ry,
|
|
64
|
+
Rz as Rz,
|
|
65
|
+
rx as rx,
|
|
66
|
+
ry as ry,
|
|
67
|
+
rz as rz,
|
|
68
|
+
S as S,
|
|
69
|
+
T as T,
|
|
70
|
+
XPowGate as XPowGate,
|
|
71
|
+
YPowGate as YPowGate,
|
|
72
|
+
ZPowGate as ZPowGate,
|
|
71
73
|
)
|
|
72
74
|
|
|
73
75
|
from cirq.ops.common_gate_families import (
|
|
74
|
-
AnyUnitaryGateFamily,
|
|
75
|
-
AnyIntegerPowerGateFamily,
|
|
76
|
-
ParallelGateFamily,
|
|
76
|
+
AnyUnitaryGateFamily as AnyUnitaryGateFamily,
|
|
77
|
+
AnyIntegerPowerGateFamily as AnyIntegerPowerGateFamily,
|
|
78
|
+
ParallelGateFamily as ParallelGateFamily,
|
|
77
79
|
)
|
|
78
80
|
|
|
79
|
-
from cirq.ops.classically_controlled_operation import
|
|
81
|
+
from cirq.ops.classically_controlled_operation import (
|
|
82
|
+
ClassicallyControlledOperation as ClassicallyControlledOperation,
|
|
83
|
+
)
|
|
80
84
|
|
|
81
|
-
from cirq.ops.controlled_gate import ControlledGate
|
|
85
|
+
from cirq.ops.controlled_gate import ControlledGate as ControlledGate
|
|
82
86
|
|
|
83
|
-
from cirq.ops.diagonal_gate import DiagonalGate
|
|
87
|
+
from cirq.ops.diagonal_gate import DiagonalGate as DiagonalGate
|
|
84
88
|
|
|
85
|
-
from cirq.ops.eigen_gate import EigenGate
|
|
89
|
+
from cirq.ops.eigen_gate import EigenGate as EigenGate
|
|
86
90
|
|
|
87
|
-
from cirq.ops.fourier_transform import
|
|
91
|
+
from cirq.ops.fourier_transform import (
|
|
92
|
+
PhaseGradientGate as PhaseGradientGate,
|
|
93
|
+
qft as qft,
|
|
94
|
+
QuantumFourierTransformGate as QuantumFourierTransformGate,
|
|
95
|
+
)
|
|
88
96
|
|
|
89
|
-
from cirq.ops.fsim_gate import FSimGate, PhasedFSimGate
|
|
97
|
+
from cirq.ops.fsim_gate import FSimGate as FSimGate, PhasedFSimGate as PhasedFSimGate
|
|
90
98
|
|
|
91
|
-
from cirq.ops.gate_features import InterchangeableQubitsGate
|
|
99
|
+
from cirq.ops.gate_features import InterchangeableQubitsGate as InterchangeableQubitsGate
|
|
92
100
|
|
|
93
|
-
from cirq.ops.gate_operation import GateOperation
|
|
101
|
+
from cirq.ops.gate_operation import GateOperation as GateOperation
|
|
94
102
|
|
|
95
|
-
from cirq.ops.gateset import GateFamily, Gateset
|
|
103
|
+
from cirq.ops.gateset import GateFamily as GateFamily, Gateset as Gateset
|
|
96
104
|
|
|
97
|
-
from cirq.ops.identity import I, identity_each, IdentityGate
|
|
105
|
+
from cirq.ops.identity import I as I, identity_each as identity_each, IdentityGate as IdentityGate
|
|
98
106
|
|
|
99
|
-
from cirq.ops.global_phase_op import
|
|
107
|
+
from cirq.ops.global_phase_op import (
|
|
108
|
+
GlobalPhaseGate as GlobalPhaseGate,
|
|
109
|
+
global_phase_operation as global_phase_operation,
|
|
110
|
+
)
|
|
100
111
|
|
|
101
|
-
from cirq.ops.kraus_channel import KrausChannel
|
|
112
|
+
from cirq.ops.kraus_channel import KrausChannel as KrausChannel
|
|
102
113
|
|
|
103
114
|
from cirq.ops.linear_combinations import (
|
|
104
|
-
LinearCombinationOfGates,
|
|
105
|
-
LinearCombinationOfOperations,
|
|
106
|
-
PauliSum,
|
|
107
|
-
PauliSumLike,
|
|
108
|
-
ProjectorSum,
|
|
115
|
+
LinearCombinationOfGates as LinearCombinationOfGates,
|
|
116
|
+
LinearCombinationOfOperations as LinearCombinationOfOperations,
|
|
117
|
+
PauliSum as PauliSum,
|
|
118
|
+
PauliSumLike as PauliSumLike,
|
|
119
|
+
ProjectorSum as ProjectorSum,
|
|
109
120
|
)
|
|
110
121
|
|
|
111
|
-
from cirq.ops.mixed_unitary_channel import MixedUnitaryChannel
|
|
122
|
+
from cirq.ops.mixed_unitary_channel import MixedUnitaryChannel as MixedUnitaryChannel
|
|
112
123
|
|
|
113
|
-
from cirq.ops.pauli_sum_exponential import PauliSumExponential
|
|
124
|
+
from cirq.ops.pauli_sum_exponential import PauliSumExponential as PauliSumExponential
|
|
114
125
|
|
|
115
|
-
from cirq.ops.pauli_measurement_gate import PauliMeasurementGate
|
|
126
|
+
from cirq.ops.pauli_measurement_gate import PauliMeasurementGate as PauliMeasurementGate
|
|
116
127
|
|
|
117
|
-
from cirq.ops.parallel_gate import
|
|
128
|
+
from cirq.ops.parallel_gate import (
|
|
129
|
+
ParallelGate as ParallelGate,
|
|
130
|
+
parallel_gate_op as parallel_gate_op,
|
|
131
|
+
)
|
|
118
132
|
|
|
119
|
-
from cirq.ops.projector import ProjectorString
|
|
133
|
+
from cirq.ops.projector import ProjectorString as ProjectorString
|
|
120
134
|
|
|
121
|
-
from cirq.ops.controlled_operation import ControlledOperation
|
|
135
|
+
from cirq.ops.controlled_operation import ControlledOperation as ControlledOperation
|
|
122
136
|
|
|
123
|
-
from cirq.ops.qubit_manager import
|
|
137
|
+
from cirq.ops.qubit_manager import (
|
|
138
|
+
BorrowableQubit as BorrowableQubit,
|
|
139
|
+
CleanQubit as CleanQubit,
|
|
140
|
+
QubitManager as QubitManager,
|
|
141
|
+
SimpleQubitManager as SimpleQubitManager,
|
|
142
|
+
)
|
|
124
143
|
|
|
125
|
-
from cirq.ops.greedy_qubit_manager import GreedyQubitManager
|
|
144
|
+
from cirq.ops.greedy_qubit_manager import GreedyQubitManager as GreedyQubitManager
|
|
126
145
|
|
|
127
|
-
from cirq.ops.qubit_order import QubitOrder
|
|
146
|
+
from cirq.ops.qubit_order import QubitOrder as QubitOrder
|
|
128
147
|
|
|
129
|
-
from cirq.ops.qubit_order_or_list import QubitOrderOrList
|
|
148
|
+
from cirq.ops.qubit_order_or_list import QubitOrderOrList as QubitOrderOrList
|
|
130
149
|
|
|
131
|
-
from cirq.ops.matrix_gates import MatrixGate
|
|
150
|
+
from cirq.ops.matrix_gates import MatrixGate as MatrixGate
|
|
132
151
|
|
|
133
152
|
from cirq.ops.measure_util import (
|
|
134
|
-
M,
|
|
135
|
-
measure,
|
|
136
|
-
measure_each,
|
|
137
|
-
measure_paulistring_terms,
|
|
138
|
-
measure_single_paulistring,
|
|
153
|
+
M as M,
|
|
154
|
+
measure as measure,
|
|
155
|
+
measure_each as measure_each,
|
|
156
|
+
measure_paulistring_terms as measure_paulistring_terms,
|
|
157
|
+
measure_single_paulistring as measure_single_paulistring,
|
|
139
158
|
)
|
|
140
159
|
|
|
141
|
-
from cirq.ops.measurement_gate import MeasurementGate
|
|
160
|
+
from cirq.ops.measurement_gate import MeasurementGate as MeasurementGate
|
|
142
161
|
|
|
143
|
-
from cirq.ops.named_qubit import NamedQubit, NamedQid
|
|
162
|
+
from cirq.ops.named_qubit import NamedQubit as NamedQubit, NamedQid as NamedQid
|
|
144
163
|
|
|
145
164
|
from cirq.ops.op_tree import (
|
|
146
|
-
flatten_op_tree,
|
|
147
|
-
freeze_op_tree,
|
|
148
|
-
flatten_to_ops,
|
|
149
|
-
flatten_to_ops_or_moments,
|
|
150
|
-
OP_TREE,
|
|
151
|
-
transform_op_tree,
|
|
165
|
+
flatten_op_tree as flatten_op_tree,
|
|
166
|
+
freeze_op_tree as freeze_op_tree,
|
|
167
|
+
flatten_to_ops as flatten_to_ops,
|
|
168
|
+
flatten_to_ops_or_moments as flatten_to_ops_or_moments,
|
|
169
|
+
OP_TREE as OP_TREE,
|
|
170
|
+
transform_op_tree as transform_op_tree,
|
|
152
171
|
)
|
|
153
172
|
|
|
154
|
-
from cirq.ops.parity_gates import
|
|
173
|
+
from cirq.ops.parity_gates import (
|
|
174
|
+
XX as XX,
|
|
175
|
+
XXPowGate as XXPowGate,
|
|
176
|
+
YY as YY,
|
|
177
|
+
YYPowGate as YYPowGate,
|
|
178
|
+
ZZ as ZZ,
|
|
179
|
+
ZZPowGate as ZZPowGate,
|
|
180
|
+
MSGate as MSGate,
|
|
181
|
+
ms as ms,
|
|
182
|
+
)
|
|
155
183
|
|
|
156
|
-
from cirq.ops.pauli_gates import Pauli, X, Y, Z
|
|
184
|
+
from cirq.ops.pauli_gates import Pauli as Pauli, X as X, Y as Y, Z as Z
|
|
157
185
|
|
|
158
|
-
from cirq.ops.pauli_interaction_gate import PauliInteractionGate
|
|
186
|
+
from cirq.ops.pauli_interaction_gate import PauliInteractionGate as PauliInteractionGate
|
|
159
187
|
|
|
160
188
|
from cirq.ops.pauli_string import (
|
|
161
|
-
MutablePauliString,
|
|
162
|
-
PAULI_GATE_LIKE,
|
|
163
|
-
PAULI_STRING_LIKE,
|
|
164
|
-
PauliString,
|
|
165
|
-
SingleQubitPauliStringGateOperation,
|
|
189
|
+
MutablePauliString as MutablePauliString,
|
|
190
|
+
PAULI_GATE_LIKE as PAULI_GATE_LIKE,
|
|
191
|
+
PAULI_STRING_LIKE as PAULI_STRING_LIKE,
|
|
192
|
+
PauliString as PauliString,
|
|
193
|
+
SingleQubitPauliStringGateOperation as SingleQubitPauliStringGateOperation,
|
|
166
194
|
)
|
|
167
195
|
|
|
168
|
-
from cirq.ops.pauli_string_phasor import
|
|
196
|
+
from cirq.ops.pauli_string_phasor import (
|
|
197
|
+
PauliStringPhasor as PauliStringPhasor,
|
|
198
|
+
PauliStringPhasorGate as PauliStringPhasorGate,
|
|
199
|
+
)
|
|
169
200
|
|
|
170
|
-
from cirq.ops.pauli_string_raw_types import PauliStringGateOperation
|
|
201
|
+
from cirq.ops.pauli_string_raw_types import PauliStringGateOperation as PauliStringGateOperation
|
|
171
202
|
|
|
172
|
-
from cirq.ops.permutation_gate import QubitPermutationGate
|
|
203
|
+
from cirq.ops.permutation_gate import QubitPermutationGate as QubitPermutationGate
|
|
173
204
|
|
|
174
|
-
from cirq.ops.phased_iswap_gate import givens, PhasedISwapPowGate
|
|
205
|
+
from cirq.ops.phased_iswap_gate import givens as givens, PhasedISwapPowGate as PhasedISwapPowGate
|
|
175
206
|
|
|
176
|
-
from cirq.ops.phased_x_gate import PhasedXPowGate
|
|
207
|
+
from cirq.ops.phased_x_gate import PhasedXPowGate as PhasedXPowGate
|
|
177
208
|
|
|
178
|
-
from cirq.ops.phased_x_z_gate import PhasedXZGate
|
|
209
|
+
from cirq.ops.phased_x_z_gate import PhasedXZGate as PhasedXZGate
|
|
179
210
|
|
|
180
|
-
from cirq.ops.qid_util import q
|
|
211
|
+
from cirq.ops.qid_util import q as q
|
|
181
212
|
|
|
182
|
-
from cirq.ops.random_gate_channel import RandomGateChannel
|
|
213
|
+
from cirq.ops.random_gate_channel import RandomGateChannel as RandomGateChannel
|
|
183
214
|
|
|
184
|
-
from cirq.ops.raw_types import
|
|
215
|
+
from cirq.ops.raw_types import (
|
|
216
|
+
Gate as Gate,
|
|
217
|
+
Operation as Operation,
|
|
218
|
+
Qid as Qid,
|
|
219
|
+
TaggedOperation as TaggedOperation,
|
|
220
|
+
)
|
|
185
221
|
|
|
186
222
|
from cirq.ops.swap_gates import (
|
|
187
|
-
ISWAP,
|
|
188
|
-
ISwapPowGate,
|
|
189
|
-
ISWAP_INV,
|
|
190
|
-
riswap,
|
|
191
|
-
SQRT_ISWAP,
|
|
192
|
-
SQRT_ISWAP_INV,
|
|
193
|
-
SWAP,
|
|
194
|
-
SwapPowGate,
|
|
223
|
+
ISWAP as ISWAP,
|
|
224
|
+
ISwapPowGate as ISwapPowGate,
|
|
225
|
+
ISWAP_INV as ISWAP_INV,
|
|
226
|
+
riswap as riswap,
|
|
227
|
+
SQRT_ISWAP as SQRT_ISWAP,
|
|
228
|
+
SQRT_ISWAP_INV as SQRT_ISWAP_INV,
|
|
229
|
+
SWAP as SWAP,
|
|
230
|
+
SwapPowGate as SwapPowGate,
|
|
195
231
|
)
|
|
196
232
|
|
|
197
|
-
from cirq.ops.tags import RoutingSwapTag, VirtualTag
|
|
233
|
+
from cirq.ops.tags import RoutingSwapTag as RoutingSwapTag, VirtualTag as VirtualTag
|
|
198
234
|
|
|
199
235
|
from cirq.ops.three_qubit_gates import (
|
|
200
|
-
CCNOT,
|
|
201
|
-
CCNotPowGate,
|
|
202
|
-
CCX,
|
|
203
|
-
CCXPowGate,
|
|
204
|
-
CCZ,
|
|
205
|
-
CCZPowGate,
|
|
206
|
-
CSWAP,
|
|
207
|
-
CSwapGate,
|
|
208
|
-
FREDKIN,
|
|
209
|
-
ThreeQubitDiagonalGate,
|
|
210
|
-
TOFFOLI,
|
|
236
|
+
CCNOT as CCNOT,
|
|
237
|
+
CCNotPowGate as CCNotPowGate,
|
|
238
|
+
CCX as CCX,
|
|
239
|
+
CCXPowGate as CCXPowGate,
|
|
240
|
+
CCZ as CCZ,
|
|
241
|
+
CCZPowGate as CCZPowGate,
|
|
242
|
+
CSWAP as CSWAP,
|
|
243
|
+
CSwapGate as CSwapGate,
|
|
244
|
+
FREDKIN as FREDKIN,
|
|
245
|
+
ThreeQubitDiagonalGate as ThreeQubitDiagonalGate,
|
|
246
|
+
TOFFOLI as TOFFOLI,
|
|
211
247
|
)
|
|
212
248
|
|
|
213
|
-
from cirq.ops.two_qubit_diagonal_gate import TwoQubitDiagonalGate
|
|
249
|
+
from cirq.ops.two_qubit_diagonal_gate import TwoQubitDiagonalGate as TwoQubitDiagonalGate
|
|
214
250
|
|
|
215
|
-
from cirq.ops.wait_gate import wait, WaitGate
|
|
251
|
+
from cirq.ops.wait_gate import wait as wait, WaitGate as WaitGate
|
|
216
252
|
|
|
217
|
-
from cirq.ops.state_preparation_channel import StatePreparationChannel
|
|
253
|
+
from cirq.ops.state_preparation_channel import StatePreparationChannel as StatePreparationChannel
|
|
218
254
|
|
|
219
|
-
from cirq.ops.control_values import
|
|
255
|
+
from cirq.ops.control_values import (
|
|
256
|
+
AbstractControlValues as AbstractControlValues,
|
|
257
|
+
ProductOfSums as ProductOfSums,
|
|
258
|
+
SumOfProducts as SumOfProducts,
|
|
259
|
+
)
|
|
220
260
|
|
|
221
|
-
from cirq.ops.uniform_superposition_gate import UniformSuperpositionGate
|
|
261
|
+
from cirq.ops.uniform_superposition_gate import UniformSuperpositionGate as UniformSuperpositionGate
|
cirq/ops/arithmetic_operation.py
CHANGED
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
|
|
16
16
|
import abc
|
|
17
17
|
import itertools
|
|
18
|
-
from typing import
|
|
19
|
-
from typing_extensions import Self
|
|
18
|
+
from typing import cast, Iterable, List, Sequence, Tuple, TYPE_CHECKING, Union
|
|
20
19
|
|
|
21
20
|
import numpy as np
|
|
21
|
+
from typing_extensions import Self
|
|
22
22
|
|
|
23
23
|
from cirq.ops.raw_types import Gate
|
|
24
24
|
|
|
@@ -12,10 +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
|
|
15
|
+
from typing import Sequence, Union
|
|
16
16
|
|
|
17
|
-
import pytest
|
|
18
17
|
import numpy as np
|
|
18
|
+
import pytest
|
|
19
19
|
|
|
20
20
|
import cirq
|
|
21
21
|
|
cirq/ops/boolean_hamiltonian.py
CHANGED
|
@@ -31,7 +31,8 @@ import sympy.parsing.sympy_parser as sympy_parser
|
|
|
31
31
|
import cirq
|
|
32
32
|
from cirq import value
|
|
33
33
|
from cirq.ops import raw_types
|
|
34
|
-
from cirq.ops.linear_combinations import PauliSum
|
|
34
|
+
from cirq.ops.linear_combinations import PauliSum
|
|
35
|
+
from cirq.ops.pauli_string import PauliString
|
|
35
36
|
|
|
36
37
|
|
|
37
38
|
@value.value_equality
|
|
@@ -80,7 +81,7 @@ class BooleanHamiltonianGate(raw_types.Gate):
|
|
|
80
81
|
return (2,) * len(self._parameter_names)
|
|
81
82
|
|
|
82
83
|
def _value_equality_values_(self) -> Any:
|
|
83
|
-
return self._parameter_names, self._boolean_strs, self._theta
|
|
84
|
+
return tuple(self._parameter_names), tuple(self._boolean_strs), self._theta
|
|
84
85
|
|
|
85
86
|
def _json_dict_(self) -> Dict[str, Any]:
|
|
86
87
|
return {
|
|
@@ -14,14 +14,14 @@
|
|
|
14
14
|
from typing import (
|
|
15
15
|
AbstractSet,
|
|
16
16
|
Any,
|
|
17
|
-
Mapping,
|
|
18
17
|
Dict,
|
|
19
18
|
FrozenSet,
|
|
20
19
|
List,
|
|
20
|
+
Mapping,
|
|
21
21
|
Optional,
|
|
22
22
|
Sequence,
|
|
23
|
-
TYPE_CHECKING,
|
|
24
23
|
Tuple,
|
|
24
|
+
TYPE_CHECKING,
|
|
25
25
|
Union,
|
|
26
26
|
)
|
|
27
27
|
|
|
@@ -45,6 +45,36 @@ class ClassicallyControlledOperation(raw_types.Operation):
|
|
|
45
45
|
|
|
46
46
|
This object is typically created via
|
|
47
47
|
`operation.with_classical_controls(*conditions)`.
|
|
48
|
+
|
|
49
|
+
Examples:
|
|
50
|
+
|
|
51
|
+
>>> import cirq
|
|
52
|
+
>>> a, b, c = cirq.LineQubit.range(3)
|
|
53
|
+
>>> circuit1 = cirq.Circuit(
|
|
54
|
+
... cirq.measure(a, key='control_key'),
|
|
55
|
+
... cirq.X(b).with_classical_controls('control_key'))
|
|
56
|
+
>>> print(circuit1)
|
|
57
|
+
0: ─────────────M───────
|
|
58
|
+
║
|
|
59
|
+
1: ─────────────╫───X───
|
|
60
|
+
║ ║
|
|
61
|
+
control_key: ═══@═══^═══
|
|
62
|
+
>>> circuit2 = cirq.Circuit([
|
|
63
|
+
... cirq.measure(a, key='control_key1'),
|
|
64
|
+
... cirq.measure(b, key='control_key2'),
|
|
65
|
+
... cirq.X(c).with_classical_controls('control_key1', 'control_key2')])
|
|
66
|
+
>>> print(circuit2)
|
|
67
|
+
┌──┐
|
|
68
|
+
0: ───────────────M─────────
|
|
69
|
+
║
|
|
70
|
+
1: ───────────────╫M────────
|
|
71
|
+
║║
|
|
72
|
+
2: ───────────────╫╫────X───
|
|
73
|
+
║║ ║
|
|
74
|
+
control_key1: ════@╬════^═══
|
|
75
|
+
║ ║
|
|
76
|
+
control_key2: ═════@════^═══
|
|
77
|
+
└──┘
|
|
48
78
|
"""
|
|
49
79
|
|
|
50
80
|
def __init__(
|
|
@@ -169,15 +199,12 @@ class ClassicallyControlledOperation(raw_types.Operation):
|
|
|
169
199
|
+ ', '.join(str(c) for c in self._conditions)
|
|
170
200
|
+ '])',
|
|
171
201
|
) + wire_symbols[1:]
|
|
172
|
-
|
|
173
|
-
if
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
exponent_qubit_index = control_label_count
|
|
202
|
+
exp_index = sub_info.exponent_qubit_index
|
|
203
|
+
if exp_index is None:
|
|
204
|
+
# None means at bottom, which means the last of the original wire symbols
|
|
205
|
+
exp_index = len(sub_info.wire_symbols) - 1
|
|
177
206
|
return protocols.CircuitDiagramInfo(
|
|
178
|
-
wire_symbols=wire_symbols,
|
|
179
|
-
exponent=sub_info.exponent,
|
|
180
|
-
exponent_qubit_index=exponent_qubit_index,
|
|
207
|
+
wire_symbols=wire_symbols, exponent=sub_info.exponent, exponent_qubit_index=exp_index
|
|
181
208
|
)
|
|
182
209
|
|
|
183
210
|
def _json_dict_(self) -> Dict[str, Any]:
|
|
@@ -216,10 +243,10 @@ class ClassicallyControlledOperation(raw_types.Operation):
|
|
|
216
243
|
return local_keys.union(protocols.control_keys(self._sub_operation))
|
|
217
244
|
|
|
218
245
|
def _qasm_(self, args: 'cirq.QasmArgs') -> Optional[str]:
|
|
219
|
-
args.validate_version('2.0')
|
|
246
|
+
args.validate_version('2.0', '3.0')
|
|
220
247
|
if len(self._conditions) > 1:
|
|
221
248
|
raise ValueError('QASM does not support multiple conditions.')
|
|
222
249
|
subop_qasm = protocols.qasm(self._sub_operation, args=args)
|
|
223
250
|
if not self._conditions:
|
|
224
251
|
return subop_qasm
|
|
225
|
-
return f'if ({self._conditions[0]
|
|
252
|
+
return f'if ({protocols.qasm(self._conditions[0], args=args)}) {subop_qasm}'
|
|
@@ -196,7 +196,7 @@ a: ═══@═══╩══════════════════
|
|
|
196
196
|
)
|
|
197
197
|
|
|
198
198
|
|
|
199
|
-
def
|
|
199
|
+
def test_qasm_sympy_condition():
|
|
200
200
|
q0, q1 = cirq.LineQubit.range(2)
|
|
201
201
|
circuit = cirq.Circuit(
|
|
202
202
|
cirq.measure(q0, key='a'),
|
|
@@ -222,6 +222,29 @@ if (m_a==0) x q[1];
|
|
|
222
222
|
)
|
|
223
223
|
|
|
224
224
|
|
|
225
|
+
def test_qasm_key_condition():
|
|
226
|
+
q0, q1 = cirq.LineQubit.range(2)
|
|
227
|
+
circuit = cirq.Circuit(cirq.measure(q0, key='a'), cirq.X(q1).with_classical_controls('a'))
|
|
228
|
+
qasm = cirq.qasm(circuit)
|
|
229
|
+
assert (
|
|
230
|
+
qasm
|
|
231
|
+
== f"""// Generated from Cirq v{cirq.__version__}
|
|
232
|
+
|
|
233
|
+
OPENQASM 2.0;
|
|
234
|
+
include "qelib1.inc";
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
// Qubits: [q(0), q(1)]
|
|
238
|
+
qreg q[2];
|
|
239
|
+
creg m_a[1];
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
measure q[0] -> m_a[0];
|
|
243
|
+
if (m_a==1) x q[1];
|
|
244
|
+
"""
|
|
245
|
+
)
|
|
246
|
+
|
|
247
|
+
|
|
225
248
|
def test_qasm_no_conditions():
|
|
226
249
|
q0, q1 = cirq.LineQubit.range(2)
|
|
227
250
|
circuit = cirq.Circuit(
|
|
@@ -1033,3 +1056,126 @@ def test_moment_diagram():
|
|
|
1033
1056
|
│
|
|
1034
1057
|
""".strip()
|
|
1035
1058
|
)
|
|
1059
|
+
|
|
1060
|
+
|
|
1061
|
+
def test_diagram_exponents():
|
|
1062
|
+
q0, q1 = cirq.LineQubit.range(2)
|
|
1063
|
+
circuit = cirq.Circuit(
|
|
1064
|
+
cirq.measure(q0, key='m'), (cirq.X(q1) ** 0.5).with_classical_controls('m')
|
|
1065
|
+
)
|
|
1066
|
+
cirq.testing.assert_has_diagram(
|
|
1067
|
+
circuit,
|
|
1068
|
+
"""
|
|
1069
|
+
0: ───M───────────
|
|
1070
|
+
║
|
|
1071
|
+
1: ───╫───X^0.5───
|
|
1072
|
+
║ ║
|
|
1073
|
+
m: ═══@═══^═══════
|
|
1074
|
+
""",
|
|
1075
|
+
)
|
|
1076
|
+
|
|
1077
|
+
|
|
1078
|
+
def test_diagram_exponents_cx():
|
|
1079
|
+
q0, q1, q2 = cirq.LineQubit.range(3)
|
|
1080
|
+
circuit = cirq.Circuit(
|
|
1081
|
+
cirq.measure(q0, key='m'), (cirq.CX(q2, q1) ** 0.5).with_classical_controls('m')
|
|
1082
|
+
)
|
|
1083
|
+
cirq.testing.assert_has_diagram(
|
|
1084
|
+
circuit,
|
|
1085
|
+
"""
|
|
1086
|
+
0: ───M───────────
|
|
1087
|
+
║
|
|
1088
|
+
1: ───╫───X^0.5───
|
|
1089
|
+
║ ║
|
|
1090
|
+
2: ───╫───@───────
|
|
1091
|
+
║ ║
|
|
1092
|
+
m: ═══@═══^═══════
|
|
1093
|
+
""",
|
|
1094
|
+
)
|
|
1095
|
+
|
|
1096
|
+
|
|
1097
|
+
def test_diagram_exponents_multiple_keys():
|
|
1098
|
+
q0, q1, q2 = cirq.LineQubit.range(3)
|
|
1099
|
+
circuit = cirq.Circuit(
|
|
1100
|
+
cirq.measure(q0, key='m0'),
|
|
1101
|
+
cirq.measure(q1, key='m1'),
|
|
1102
|
+
(cirq.X(q2) ** 0.5).with_classical_controls('m0', 'm1'),
|
|
1103
|
+
)
|
|
1104
|
+
cirq.testing.assert_has_diagram(
|
|
1105
|
+
circuit,
|
|
1106
|
+
"""
|
|
1107
|
+
┌──┐
|
|
1108
|
+
0: ─────M─────────────
|
|
1109
|
+
║
|
|
1110
|
+
1: ─────╫M────────────
|
|
1111
|
+
║║
|
|
1112
|
+
2: ─────╫╫────X^0.5───
|
|
1113
|
+
║║ ║
|
|
1114
|
+
m0: ════@╬════^═══════
|
|
1115
|
+
║ ║
|
|
1116
|
+
m1: ═════@════^═══════
|
|
1117
|
+
└──┘
|
|
1118
|
+
""",
|
|
1119
|
+
)
|
|
1120
|
+
|
|
1121
|
+
|
|
1122
|
+
def test_sympy_indexed_condition_circuit():
|
|
1123
|
+
a = sympy.IndexedBase('a')
|
|
1124
|
+
# XOR the 2nd and 3rd bits of the measurement (big-endian)
|
|
1125
|
+
cond = cirq.SympyCondition(sympy.Xor(a[1], a[2]))
|
|
1126
|
+
q0, q1, q2, q3 = cirq.LineQubit.range(4)
|
|
1127
|
+
sim = cirq.Simulator()
|
|
1128
|
+
circuit = cirq.Circuit(
|
|
1129
|
+
cirq.measure(q0, q1, q2, key='a'),
|
|
1130
|
+
cirq.X(q3).with_classical_controls(cond),
|
|
1131
|
+
cirq.measure(q3, key='b'),
|
|
1132
|
+
)
|
|
1133
|
+
cirq.testing.assert_has_diagram(
|
|
1134
|
+
circuit,
|
|
1135
|
+
"""
|
|
1136
|
+
0: ───M──────────────────────────────────────────
|
|
1137
|
+
║
|
|
1138
|
+
1: ───M──────────────────────────────────────────
|
|
1139
|
+
║
|
|
1140
|
+
2: ───M──────────────────────────────────────────
|
|
1141
|
+
║
|
|
1142
|
+
3: ───╫───X(conditions=[a[1] ^ a[2]])───M('b')───
|
|
1143
|
+
║ ║
|
|
1144
|
+
a: ═══@═══^══════════════════════════════════════
|
|
1145
|
+
""",
|
|
1146
|
+
)
|
|
1147
|
+
result = sim.sample(circuit)
|
|
1148
|
+
assert result['a'][0] == 0b000
|
|
1149
|
+
assert result['b'][0] == 0
|
|
1150
|
+
circuit.insert(0, cirq.X(q2))
|
|
1151
|
+
result = sim.sample(circuit)
|
|
1152
|
+
assert result['a'][0] == 0b001
|
|
1153
|
+
assert result['b'][0] == 1
|
|
1154
|
+
circuit.insert(0, cirq.X(q1))
|
|
1155
|
+
circuit.insert(0, cirq.X(q2))
|
|
1156
|
+
result = sim.sample(circuit)
|
|
1157
|
+
assert result['a'][0] == 0b010
|
|
1158
|
+
assert result['b'][0] == 1
|
|
1159
|
+
circuit.insert(0, cirq.X(q2))
|
|
1160
|
+
result = sim.sample(circuit)
|
|
1161
|
+
assert result['a'][0] == 0b011
|
|
1162
|
+
assert result['b'][0] == 0
|
|
1163
|
+
circuit.insert(0, cirq.X(q0))
|
|
1164
|
+
circuit.insert(0, cirq.X(q1))
|
|
1165
|
+
circuit.insert(0, cirq.X(q2))
|
|
1166
|
+
result = sim.sample(circuit)
|
|
1167
|
+
assert result['a'][0] == 0b100
|
|
1168
|
+
assert result['b'][0] == 0
|
|
1169
|
+
circuit.insert(0, cirq.X(q2))
|
|
1170
|
+
result = sim.sample(circuit)
|
|
1171
|
+
assert result['a'][0] == 0b101
|
|
1172
|
+
assert result['b'][0] == 1
|
|
1173
|
+
circuit.insert(0, cirq.X(q1))
|
|
1174
|
+
circuit.insert(0, cirq.X(q2))
|
|
1175
|
+
result = sim.sample(circuit)
|
|
1176
|
+
assert result['a'][0] == 0b110
|
|
1177
|
+
assert result['b'][0] == 1
|
|
1178
|
+
circuit.insert(0, cirq.X(q2))
|
|
1179
|
+
result = sim.sample(circuit)
|
|
1180
|
+
assert result['a'][0] == 0b111
|
|
1181
|
+
assert result['b'][0] == 0
|