cirq-core 1.7.0.dev20250825174419__py3-none-any.whl → 1.7.0.dev20251203004401__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.
- cirq/__init__.py +1 -0
- cirq/_compat.py +3 -2
- cirq/_compat_test.py +16 -15
- cirq/_doc.py +4 -3
- cirq/_import.py +2 -1
- cirq/_version.py +1 -1
- cirq/_version_test.py +1 -1
- cirq/circuits/_bucket_priority_queue.py +2 -1
- cirq/circuits/circuit.py +19 -17
- cirq/circuits/circuit_operation.py +2 -1
- cirq/circuits/circuit_operation_test.py +19 -0
- cirq/circuits/circuit_test.py +31 -12
- cirq/circuits/frozen_circuit.py +3 -2
- cirq/circuits/moment.py +3 -15
- cirq/circuits/optimization_pass.py +2 -1
- cirq/circuits/qasm_output.py +39 -10
- cirq/circuits/qasm_output_test.py +51 -2
- cirq/circuits/text_diagram_drawer.py +2 -1
- cirq/contrib/acquaintance/bipartite.py +2 -1
- cirq/contrib/acquaintance/devices.py +1 -1
- cirq/contrib/acquaintance/executor.py +4 -5
- cirq/contrib/acquaintance/executor_test.py +2 -1
- cirq/contrib/acquaintance/gates.py +2 -1
- cirq/contrib/acquaintance/gates_test.py +1 -1
- cirq/contrib/acquaintance/inspection_utils.py +2 -1
- cirq/contrib/acquaintance/mutation_utils.py +2 -1
- cirq/contrib/acquaintance/optimizers.py +2 -1
- cirq/contrib/acquaintance/permutation.py +2 -1
- cirq/contrib/acquaintance/permutation_test.py +1 -1
- cirq/contrib/acquaintance/shift.py +2 -1
- cirq/contrib/acquaintance/shift_swap_network.py +2 -1
- cirq/contrib/acquaintance/strategies/complete.py +3 -2
- cirq/contrib/acquaintance/strategies/cubic.py +2 -1
- cirq/contrib/acquaintance/strategies/quartic_paired.py +2 -1
- cirq/contrib/acquaintance/strategies/quartic_paired_test.py +1 -1
- cirq/contrib/acquaintance/testing.py +2 -1
- cirq/contrib/acquaintance/topological_sort.py +2 -1
- cirq/contrib/bayesian_network/bayesian_network_gate.py +3 -2
- cirq/contrib/circuitdag/circuit_dag.py +4 -2
- cirq/contrib/custom_simulators/custom_state_simulator.py +2 -1
- cirq/contrib/custom_simulators/custom_state_simulator_test.py +1 -1
- cirq/contrib/graph_device/graph_device.py +2 -1
- cirq/contrib/graph_device/graph_device_test.py +2 -1
- cirq/contrib/graph_device/hypergraph.py +2 -1
- cirq/contrib/graph_device/uniform_graph_device.py +2 -1
- cirq/contrib/json.py +14 -2
- cirq/contrib/json_test_data/BayesianNetworkGate.json +10 -0
- cirq/contrib/json_test_data/BayesianNetworkGate.repr +3 -0
- cirq/contrib/json_test_data/QuantumVolumeResult.json +169 -0
- cirq/contrib/json_test_data/QuantumVolumeResult.repr +22 -0
- cirq/contrib/json_test_data/SwapPermutationGate.json +3 -0
- cirq/contrib/json_test_data/SwapPermutationGate.repr +1 -0
- cirq/contrib/json_test_data/spec.py +0 -2
- cirq/contrib/noise_models/noise_models.py +2 -1
- cirq/contrib/paulistring/clifford_optimize.py +20 -2
- cirq/contrib/paulistring/optimize.py +1 -1
- cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py +146 -35
- cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation_test.py +81 -178
- cirq/contrib/paulistring/recombine.py +5 -2
- cirq/contrib/paulistring/separate.py +1 -1
- cirq/contrib/qasm_import/_lexer.py +6 -1
- cirq/contrib/qasm_import/_lexer_test.py +1 -1
- cirq/contrib/qasm_import/_parser.py +24 -8
- cirq/contrib/qasm_import/_parser_test.py +44 -6
- cirq/contrib/qcircuit/qcircuit_pdf_test.py +6 -9
- cirq/contrib/quantikz/__init__.py +21 -0
- cirq/contrib/quantikz/circuit_to_latex_quantikz.py +680 -0
- cirq/contrib/quantikz/circuit_to_latex_quantikz_test.py +253 -0
- cirq/contrib/quantikz/circuit_to_latex_render.py +424 -0
- cirq/contrib/quantikz/circuit_to_latex_render_test.py +44 -0
- cirq/contrib/quantum_volume/quantum_volume.py +2 -1
- cirq/contrib/quimb/density_matrix.py +1 -1
- cirq/contrib/quimb/grid_circuits.py +2 -1
- cirq/contrib/quimb/grid_circuits_test.py +1 -1
- cirq/contrib/quimb/mps_simulator.py +4 -3
- cirq/contrib/quimb/state_vector.py +2 -1
- cirq/contrib/quirk/export_to_quirk.py +2 -1
- cirq/contrib/quirk/linearize_circuit.py +1 -1
- cirq/contrib/quirk/quirk_gate.py +2 -1
- cirq/contrib/routing/device.py +1 -1
- cirq/contrib/routing/greedy.py +2 -1
- cirq/contrib/routing/initialization.py +2 -1
- cirq/contrib/routing/router.py +2 -1
- cirq/contrib/routing/swap_network.py +2 -1
- cirq/contrib/routing/utils.py +2 -1
- cirq/contrib/shuffle_circuits/shuffle_circuits_with_readout_benchmarking.py +7 -5
- cirq/contrib/shuffle_circuits/shuffle_circuits_with_readout_benchmarking_test.py +6 -6
- cirq/devices/device.py +2 -1
- cirq/devices/grid_device_metadata.py +2 -1
- cirq/devices/grid_qubit.py +7 -6
- cirq/devices/insertion_noise_model.py +2 -1
- cirq/devices/line_qubit.py +2 -1
- cirq/devices/named_topologies.py +2 -1
- cirq/devices/noise_model.py +2 -1
- cirq/devices/noise_model_test.py +1 -1
- cirq/devices/noise_properties.py +2 -1
- cirq/devices/superconducting_qubits_noise_properties_test.py +2 -1
- cirq/devices/thermal_noise_model.py +2 -1
- cirq/experiments/__init__.py +2 -0
- cirq/experiments/benchmarking/parallel_xeb.py +2 -1
- cirq/experiments/benchmarking/parallel_xeb_test.py +1 -1
- cirq/experiments/fidelity_estimation.py +2 -1
- cirq/experiments/fidelity_estimation_test.py +1 -1
- cirq/experiments/ghz_2d.py +150 -0
- cirq/experiments/ghz_2d_test.py +155 -0
- cirq/experiments/n_qubit_tomography.py +2 -1
- cirq/experiments/n_qubit_tomography_test.py +1 -1
- cirq/experiments/purity_estimation.py +1 -1
- cirq/experiments/qubit_characterizations.py +33 -4
- cirq/experiments/qubit_characterizations_test.py +16 -0
- cirq/experiments/random_quantum_circuit_generation.py +2 -1
- cirq/experiments/random_quantum_circuit_generation_test.py +2 -1
- cirq/experiments/readout_confusion_matrix.py +2 -1
- cirq/experiments/readout_confusion_matrix_test.py +1 -1
- cirq/experiments/single_qubit_readout_calibration.py +2 -1
- cirq/experiments/single_qubit_readout_calibration_test.py +1 -1
- cirq/experiments/t1_decay_experiment.py +2 -1
- cirq/experiments/two_qubit_xeb.py +2 -1
- cirq/experiments/two_qubit_xeb_test.py +1 -1
- cirq/experiments/xeb_fitting.py +2 -1
- cirq/experiments/xeb_fitting_test.py +1 -1
- cirq/experiments/xeb_sampling.py +5 -3
- cirq/experiments/xeb_sampling_test.py +1 -1
- cirq/experiments/xeb_simulation.py +2 -1
- cirq/experiments/xeb_simulation_test.py +2 -1
- cirq/experiments/z_phase_calibration.py +2 -1
- cirq/experiments/z_phase_calibration_test.py +18 -3
- cirq/interop/quirk/cells/__init__.py +1 -2
- cirq/interop/quirk/cells/all_cells.py +2 -1
- cirq/interop/quirk/cells/arithmetic_cells.py +2 -1
- cirq/interop/quirk/cells/cell.py +2 -1
- cirq/interop/quirk/cells/composite_cell.py +2 -1
- cirq/interop/quirk/cells/composite_cell_test.py +1 -1
- cirq/interop/quirk/cells/control_cells.py +2 -1
- cirq/interop/quirk/cells/frequency_space_cells.py +1 -1
- cirq/interop/quirk/cells/ignored_cells.py +1 -1
- cirq/interop/quirk/cells/input_cells.py +2 -1
- cirq/interop/quirk/cells/input_rotation_cells.py +2 -1
- cirq/interop/quirk/cells/measurement_cells.py +2 -1
- cirq/interop/quirk/cells/parse.py +2 -11
- cirq/interop/quirk/cells/qubit_permutation_cells.py +2 -1
- cirq/interop/quirk/cells/scalar_cells.py +2 -1
- cirq/interop/quirk/cells/single_qubit_rotation_cells.py +2 -1
- cirq/interop/quirk/cells/swap_cell.py +2 -1
- cirq/interop/quirk/cells/unsupported_cells.py +1 -1
- cirq/interop/quirk/url_to_circuit.py +2 -1
- cirq/json_resolver_cache.py +0 -2
- cirq/linalg/decompositions.py +6 -2
- cirq/linalg/decompositions_test.py +1 -0
- cirq/linalg/diagonalize.py +1 -1
- cirq/linalg/predicates.py +2 -1
- cirq/linalg/tolerance.py +2 -1
- cirq/linalg/transformations.py +3 -2
- cirq/ops/arithmetic_operation.py +4 -3
- cirq/ops/arithmetic_operation_test.py +1 -1
- cirq/ops/boolean_hamiltonian.py +4 -3
- cirq/ops/classically_controlled_operation.py +11 -11
- cirq/ops/classically_controlled_operation_test.py +26 -2
- cirq/ops/clifford_gate.py +3 -2
- cirq/ops/clifford_gate_test.py +1 -2
- cirq/ops/common_channels.py +2 -1
- cirq/ops/common_gates.py +3 -2
- cirq/ops/control_values.py +2 -1
- cirq/ops/controlled_gate.py +3 -2
- cirq/ops/controlled_gate_test.py +2 -1
- cirq/ops/controlled_operation.py +3 -2
- cirq/ops/controlled_operation_test.py +2 -1
- cirq/ops/dense_pauli_string.py +44 -81
- cirq/ops/dense_pauli_string_test.py +21 -0
- cirq/ops/diagonal_gate.py +3 -2
- cirq/ops/eigen_gate.py +9 -7
- cirq/ops/fourier_transform.py +3 -2
- cirq/ops/fourier_transform_test.py +2 -4
- cirq/ops/fsim_gate.py +3 -2
- cirq/ops/gate_operation.py +23 -12
- cirq/ops/gateset.py +22 -2
- cirq/ops/global_phase_op.py +3 -2
- cirq/ops/greedy_qubit_manager.py +2 -1
- cirq/ops/identity.py +2 -1
- cirq/ops/kraus_channel.py +2 -1
- cirq/ops/linear_combinations.py +12 -17
- cirq/ops/linear_combinations_test.py +23 -1
- cirq/ops/matrix_gates.py +2 -1
- cirq/ops/measure_util.py +8 -6
- cirq/ops/measurement_gate.py +2 -1
- cirq/ops/mixed_unitary_channel.py +2 -1
- cirq/ops/named_qubit.py +2 -2
- cirq/ops/op_tree.py +2 -1
- cirq/ops/parallel_gate.py +3 -2
- cirq/ops/parity_gates.py +2 -1
- cirq/ops/parity_gates_test.py +35 -0
- cirq/ops/pauli_interaction_gate.py +2 -1
- cirq/ops/pauli_measurement_gate.py +2 -1
- cirq/ops/pauli_string.py +37 -57
- cirq/ops/pauli_string_phasor.py +6 -5
- cirq/ops/pauli_string_raw_types.py +2 -1
- cirq/ops/pauli_string_test.py +49 -6
- cirq/ops/pauli_sum_exponential.py +2 -1
- cirq/ops/permutation_gate.py +2 -1
- cirq/ops/phased_iswap_gate.py +3 -2
- cirq/ops/phased_x_gate.py +5 -4
- cirq/ops/phased_x_z_gate.py +12 -5
- cirq/ops/projector.py +2 -1
- cirq/ops/qubit_manager.py +2 -1
- cirq/ops/qubit_order.py +2 -1
- cirq/ops/qubit_order_or_list.py +1 -1
- cirq/ops/random_gate_channel.py +3 -2
- cirq/ops/raw_types.py +33 -16
- cirq/ops/raw_types_test.py +4 -3
- cirq/ops/state_preparation_channel.py +2 -1
- cirq/ops/three_qubit_gates.py +3 -2
- cirq/ops/two_qubit_diagonal_gate.py +3 -2
- cirq/ops/uniform_superposition_gate.py +2 -1
- cirq/ops/wait_gate.py +10 -4
- cirq/protocols/act_on_protocol.py +2 -1
- cirq/protocols/act_on_protocol_test.py +2 -1
- cirq/protocols/apply_channel_protocol.py +2 -1
- cirq/protocols/apply_mixture_protocol.py +2 -1
- cirq/protocols/apply_mixture_protocol_test.py +2 -1
- cirq/protocols/apply_unitary_protocol.py +2 -1
- cirq/protocols/apply_unitary_protocol_test.py +2 -0
- cirq/protocols/approximate_equality_protocol.py +2 -1
- cirq/protocols/circuit_diagram_info_protocol.py +2 -1
- cirq/protocols/control_key_protocol.py +7 -0
- cirq/protocols/decompose_protocol.py +2 -12
- cirq/protocols/has_stabilizer_effect_protocol.py +1 -1
- cirq/protocols/has_stabilizer_effect_protocol_test.py +11 -9
- cirq/protocols/has_unitary_protocol_test.py +3 -3
- cirq/protocols/hash_from_pickle_test.py +2 -2
- cirq/protocols/inverse_protocol.py +2 -1
- cirq/protocols/json_serialization.py +5 -4
- cirq/protocols/json_serialization_test.py +31 -31
- cirq/protocols/kraus_protocol.py +4 -3
- cirq/protocols/kraus_protocol_test.py +7 -7
- cirq/protocols/measurement_key_protocol.py +32 -8
- cirq/protocols/mixture_protocol.py +3 -2
- cirq/protocols/mixture_protocol_test.py +7 -7
- cirq/protocols/mul_protocol_test.py +4 -4
- cirq/protocols/phase_protocol.py +13 -4
- cirq/protocols/pow_protocol.py +2 -1
- cirq/protocols/pow_protocol_test.py +5 -5
- cirq/protocols/qasm.py +2 -1
- cirq/protocols/qid_shape_protocol.py +2 -1
- cirq/protocols/resolve_parameters.py +17 -15
- cirq/protocols/trace_distance_bound.py +2 -1
- cirq/protocols/unitary_protocol.py +21 -21
- cirq/protocols/unitary_protocol_test.py +31 -19
- cirq/qis/channels.py +1 -1
- cirq/qis/channels_test.py +1 -1
- cirq/qis/clifford_tableau.py +16 -15
- cirq/qis/clifford_tableau_test.py +17 -17
- cirq/qis/entropy.py +3 -3
- cirq/qis/entropy_test.py +1 -1
- cirq/qis/quantum_state_representation.py +2 -1
- cirq/qis/states.py +7 -2
- cirq/qis/states_test.py +54 -54
- cirq/sim/classical_simulator.py +25 -14
- cirq/sim/classical_simulator_test.py +85 -30
- cirq/sim/clifford/clifford_simulator.py +7 -6
- cirq/sim/clifford/clifford_simulator_test.py +51 -50
- cirq/sim/clifford/clifford_tableau_simulation_state.py +2 -1
- cirq/sim/clifford/stabilizer_ch_form_simulation_state.py +2 -1
- cirq/sim/clifford/stabilizer_sampler.py +1 -1
- cirq/sim/clifford/stabilizer_simulation_state.py +2 -1
- cirq/sim/clifford/stabilizer_state_ch_form.py +16 -15
- cirq/sim/clifford/stabilizer_state_ch_form_test.py +0 -1
- cirq/sim/density_matrix_simulation_state.py +7 -6
- cirq/sim/density_matrix_simulator.py +3 -2
- cirq/sim/density_matrix_simulator_test.py +94 -84
- cirq/sim/density_matrix_utils.py +2 -1
- cirq/sim/density_matrix_utils_test.py +1 -1
- cirq/sim/mux.py +35 -8
- cirq/sim/mux_test.py +39 -26
- cirq/sim/simulation_product_state.py +2 -1
- cirq/sim/simulation_product_state_test.py +8 -7
- cirq/sim/simulation_state.py +6 -5
- cirq/sim/simulation_state_base.py +3 -2
- cirq/sim/simulation_state_test.py +7 -6
- cirq/sim/simulation_utils.py +2 -1
- cirq/sim/simulator.py +4 -3
- cirq/sim/simulator_base.py +2 -1
- cirq/sim/simulator_base_test.py +51 -36
- cirq/sim/simulator_test.py +41 -36
- cirq/sim/sparse_simulator.py +3 -2
- cirq/sim/sparse_simulator_test.py +92 -82
- cirq/sim/state_vector.py +5 -6
- cirq/sim/state_vector_simulation_state.py +10 -9
- cirq/sim/state_vector_simulator.py +2 -1
- cirq/sim/state_vector_simulator_test.py +9 -9
- cirq/sim/state_vector_test.py +40 -39
- cirq/study/__init__.py +1 -0
- cirq/study/flatten_expressions.py +2 -1
- cirq/study/resolver.py +31 -18
- cirq/study/resolver_test.py +1 -1
- cirq/study/result.py +2 -1
- cirq/study/result_test.py +20 -20
- cirq/study/sweepable.py +2 -1
- cirq/study/sweepable_test.py +20 -20
- cirq/study/sweeps.py +26 -1
- cirq/study/sweeps_test.py +67 -43
- cirq/testing/_compat_test_data/__init__.py +3 -3
- cirq/testing/circuit_compare.py +2 -1
- cirq/testing/circuit_compare_test.py +16 -14
- cirq/testing/consistent_act_on_test.py +1 -1
- cirq/testing/consistent_channels.py +2 -2
- cirq/testing/consistent_controlled_gate_op.py +2 -2
- cirq/testing/consistent_controlled_gate_op_test.py +2 -1
- cirq/testing/consistent_decomposition.py +4 -2
- cirq/testing/consistent_phase_by.py +1 -1
- cirq/testing/consistent_protocols.py +2 -1
- cirq/testing/consistent_protocols_test.py +3 -3
- cirq/testing/consistent_qasm.py +4 -3
- cirq/testing/consistent_qasm_test.py +3 -3
- cirq/testing/consistent_resolve_parameters.py +1 -1
- cirq/testing/consistent_unitary.py +1 -1
- cirq/testing/consistent_unitary_test.py +1 -1
- cirq/testing/deprecation.py +1 -1
- cirq/testing/devices.py +3 -2
- cirq/testing/equals_tester.py +4 -3
- cirq/testing/equivalent_basis_map.py +4 -2
- cirq/testing/json.py +3 -2
- cirq/testing/lin_alg_utils.py +1 -1
- cirq/testing/logs.py +1 -1
- cirq/testing/op_tree.py +1 -1
- cirq/testing/order_tester.py +2 -2
- cirq/testing/pytest_utils.py +2 -1
- cirq/testing/random_circuit.py +2 -1
- cirq/testing/random_circuit_test.py +2 -1
- cirq/testing/repr_pretty_tester.py +3 -3
- cirq/transformers/__init__.py +1 -0
- cirq/transformers/_connected_component.py +231 -0
- cirq/transformers/_connected_component_test.py +200 -0
- cirq/transformers/align_test.py +13 -13
- cirq/transformers/analytical_decompositions/clifford_decomposition.py +8 -7
- cirq/transformers/analytical_decompositions/clifford_decomposition_test.py +5 -5
- cirq/transformers/analytical_decompositions/controlled_gate_decomposition.py +11 -10
- cirq/transformers/analytical_decompositions/controlled_gate_decomposition_test.py +6 -6
- cirq/transformers/analytical_decompositions/cphase_to_fsim.py +3 -2
- cirq/transformers/analytical_decompositions/cphase_to_fsim_test.py +11 -10
- cirq/transformers/analytical_decompositions/quantum_shannon_decomposition.py +8 -7
- cirq/transformers/analytical_decompositions/quantum_shannon_decomposition_test.py +17 -20
- cirq/transformers/analytical_decompositions/single_qubit_decompositions_test.py +33 -27
- cirq/transformers/analytical_decompositions/single_to_two_qubit_isometry_test.py +1 -1
- cirq/transformers/analytical_decompositions/three_qubit_decomposition.py +1 -1
- cirq/transformers/analytical_decompositions/two_qubit_state_preparation_test.py +12 -11
- cirq/transformers/analytical_decompositions/two_qubit_to_cz.py +5 -2
- cirq/transformers/analytical_decompositions/two_qubit_to_cz_test.py +3 -3
- cirq/transformers/analytical_decompositions/two_qubit_to_fsim.py +2 -1
- cirq/transformers/analytical_decompositions/two_qubit_to_ms.py +2 -1
- cirq/transformers/analytical_decompositions/two_qubit_to_ms_test.py +2 -2
- cirq/transformers/analytical_decompositions/two_qubit_to_sqrt_iswap.py +2 -1
- cirq/transformers/analytical_decompositions/two_qubit_to_sqrt_iswap_test.py +32 -30
- cirq/transformers/drop_negligible_operations_test.py +7 -7
- cirq/transformers/dynamical_decoupling.py +185 -112
- cirq/transformers/dynamical_decoupling_test.py +195 -201
- cirq/transformers/eject_phased_paulis.py +2 -1
- cirq/transformers/eject_phased_paulis_test.py +3 -2
- cirq/transformers/eject_z.py +5 -3
- cirq/transformers/eject_z_test.py +23 -25
- cirq/transformers/expand_composite.py +3 -2
- cirq/transformers/expand_composite_test.py +14 -14
- cirq/transformers/gauge_compiling/__init__.py +13 -0
- cirq/transformers/gauge_compiling/gauge_compiling.py +3 -2
- cirq/transformers/gauge_compiling/gauge_compiling_test.py +14 -12
- cirq/transformers/gauge_compiling/gauge_compiling_test_utils.py +3 -3
- cirq/transformers/gauge_compiling/idle_moments_gauge.py +225 -0
- cirq/transformers/gauge_compiling/idle_moments_gauge_test.py +193 -0
- cirq/transformers/gauge_compiling/multi_moment_cphase_gauge.py +242 -0
- cirq/transformers/gauge_compiling/multi_moment_cphase_gauge_test.py +243 -0
- cirq/transformers/gauge_compiling/multi_moment_gauge_compiling.py +151 -0
- cirq/transformers/gauge_compiling/sqrt_cz_gauge.py +2 -1
- cirq/transformers/heuristic_decompositions/gate_tabulation_math_utils.py +1 -1
- cirq/transformers/heuristic_decompositions/gate_tabulation_math_utils_test.py +6 -6
- cirq/transformers/heuristic_decompositions/two_qubit_gate_tabulation.py +3 -2
- cirq/transformers/measurement_transformers.py +2 -1
- cirq/transformers/measurement_transformers_test.py +45 -39
- cirq/transformers/merge_k_qubit_gates.py +2 -1
- cirq/transformers/merge_k_qubit_gates_test.py +1 -1
- cirq/transformers/merge_single_qubit_gates.py +9 -5
- cirq/transformers/merge_single_qubit_gates_test.py +22 -22
- cirq/transformers/noise_adding_test.py +2 -2
- cirq/transformers/optimize_for_target_gateset.py +2 -1
- cirq/transformers/optimize_for_target_gateset_test.py +11 -9
- cirq/transformers/qubit_management_transformers_test.py +6 -2
- cirq/transformers/routing/mapping_manager.py +2 -1
- cirq/transformers/routing/route_circuit_cqc.py +2 -1
- cirq/transformers/stratify.py +2 -1
- cirq/transformers/symbolize.py +2 -1
- cirq/transformers/tag_transformers.py +2 -1
- cirq/transformers/target_gatesets/compilation_target_gateset.py +2 -1
- cirq/transformers/target_gatesets/cz_gateset.py +2 -1
- cirq/transformers/target_gatesets/cz_gateset_test.py +1 -1
- cirq/transformers/target_gatesets/sqrt_iswap_gateset.py +2 -1
- cirq/transformers/transformer_api.py +2 -1
- cirq/transformers/transformer_primitives.py +271 -145
- cirq/transformers/transformer_primitives_test.py +185 -1
- cirq/value/abc_alt.py +2 -1
- cirq/value/classical_data.py +2 -1
- cirq/value/condition.py +2 -1
- cirq/value/digits.py +9 -2
- cirq/value/duration.py +6 -5
- cirq/value/linear_dict.py +4 -9
- cirq/value/measurement_key.py +2 -1
- cirq/value/periodic_value.py +3 -2
- cirq/value/product_state.py +2 -1
- cirq/value/value_equality_attr.py +2 -1
- cirq/vis/density_matrix.py +1 -1
- cirq/vis/heatmap.py +2 -1
- cirq/vis/histogram.py +2 -1
- cirq/vis/state_histogram.py +2 -1
- cirq/work/collector.py +2 -1
- cirq/work/observable_grouping.py +2 -1
- cirq/work/observable_measurement.py +2 -1
- cirq/work/observable_measurement_data.py +2 -1
- cirq/work/observable_measurement_test.py +1 -1
- cirq/work/observable_readout_calibration.py +2 -1
- cirq/work/observable_readout_calibration_test.py +1 -1
- cirq/work/observable_settings.py +2 -1
- cirq/work/sampler.py +2 -1
- cirq/work/sampler_test.py +1 -1
- {cirq_core-1.7.0.dev20250825174419.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/METADATA +5 -6
- {cirq_core-1.7.0.dev20250825174419.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/RECORD +425 -406
- cirq/contrib/json_test.py +0 -33
- {cirq_core-1.7.0.dev20250825174419.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/WHEEL +0 -0
- {cirq_core-1.7.0.dev20250825174419.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/licenses/LICENSE +0 -0
- {cirq_core-1.7.0.dev20250825174419.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/top_level.txt +0 -0
|
@@ -16,7 +16,8 @@ from __future__ import annotations
|
|
|
16
16
|
|
|
17
17
|
import enum
|
|
18
18
|
import itertools
|
|
19
|
-
from
|
|
19
|
+
from collections.abc import Iterator, Sequence
|
|
20
|
+
from typing import TYPE_CHECKING
|
|
20
21
|
|
|
21
22
|
from cirq import ops
|
|
22
23
|
from cirq.contrib.acquaintance.gates import acquaint
|
|
@@ -45,7 +45,7 @@ class AcquaintanceDevice(devices.Device, metaclass=abc.ABCMeta):
|
|
|
45
45
|
def get_acquaintance_size(obj: circuits.Circuit | ops.Operation) -> int:
|
|
46
46
|
"""The maximum number of qubits to be acquainted with each other."""
|
|
47
47
|
if isinstance(obj, circuits.Circuit):
|
|
48
|
-
return max(
|
|
48
|
+
return max((get_acquaintance_size(op) for op in obj.all_operations()), default=0)
|
|
49
49
|
if not isinstance(obj, ops.Operation):
|
|
50
50
|
raise TypeError('not isinstance(obj, (Circuit, Operation))')
|
|
51
51
|
if not isinstance(obj, ops.GateOperation):
|
|
@@ -16,7 +16,8 @@ from __future__ import annotations
|
|
|
16
16
|
|
|
17
17
|
import abc
|
|
18
18
|
from collections import defaultdict
|
|
19
|
-
from
|
|
19
|
+
from collections.abc import Iterator, Sequence
|
|
20
|
+
from typing import TYPE_CHECKING
|
|
20
21
|
|
|
21
22
|
from cirq import circuits, devices, ops, protocols, transformers
|
|
22
23
|
from cirq.contrib.acquaintance.gates import AcquaintanceOpportunityGate
|
|
@@ -66,10 +67,8 @@ class ExecutionStrategy(metaclass=abc.ABCMeta):
|
|
|
66
67
|
"""
|
|
67
68
|
if len(args) < 1 or not isinstance(args[0], circuits.AbstractCircuit):
|
|
68
69
|
raise ValueError(
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
"circuits.AbstractCircuit must be passed in as the first non-keyword argument"
|
|
72
|
-
)
|
|
70
|
+
"To call ExecutionStrategy, an argument of type "
|
|
71
|
+
"circuits.AbstractCircuit must be passed in as the first non-keyword argument"
|
|
73
72
|
)
|
|
74
73
|
input_circuit = args[0]
|
|
75
74
|
strategy = StrategyExecutorTransformer(self)
|
|
@@ -14,9 +14,10 @@
|
|
|
14
14
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
|
+
from collections.abc import Sequence
|
|
17
18
|
from itertools import combinations
|
|
18
19
|
from string import ascii_lowercase
|
|
19
|
-
from typing import Any
|
|
20
|
+
from typing import Any
|
|
20
21
|
|
|
21
22
|
import numpy as np
|
|
22
23
|
import pytest
|
|
@@ -18,7 +18,8 @@ import functools
|
|
|
18
18
|
import itertools
|
|
19
19
|
import math
|
|
20
20
|
import operator
|
|
21
|
-
from
|
|
21
|
+
from collections.abc import Iterable, Iterator, Sequence
|
|
22
|
+
from typing import NamedTuple, TYPE_CHECKING
|
|
22
23
|
|
|
23
24
|
from cirq import ops, protocols, value
|
|
24
25
|
from cirq.contrib.acquaintance.permutation import (
|
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
|
+
from collections.abc import Sequence
|
|
17
18
|
from itertools import combinations, product
|
|
18
19
|
from random import randint
|
|
19
20
|
from string import ascii_lowercase as alphabet
|
|
20
|
-
from typing import Sequence
|
|
21
21
|
|
|
22
22
|
import numpy
|
|
23
23
|
import pytest
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
17
|
import collections
|
|
18
|
-
from
|
|
18
|
+
from collections.abc import Sequence
|
|
19
|
+
from typing import cast, TYPE_CHECKING
|
|
19
20
|
|
|
20
21
|
from cirq import circuits, ops, transformers
|
|
21
22
|
from cirq.contrib.acquaintance.devices import get_acquaintance_size
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
|
-
from
|
|
17
|
+
from collections.abc import Sequence
|
|
18
|
+
from typing import cast, TYPE_CHECKING
|
|
18
19
|
|
|
19
20
|
from cirq import circuits
|
|
20
21
|
from cirq.contrib.acquaintance.executor import AcquaintanceOperation
|
|
@@ -15,8 +15,9 @@
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
17
|
import abc
|
|
18
|
+
from collections.abc import Iterable, Iterator, Sequence
|
|
18
19
|
from types import NotImplementedType
|
|
19
|
-
from typing import Any, cast,
|
|
20
|
+
from typing import Any, cast, TYPE_CHECKING, TypeVar
|
|
20
21
|
|
|
21
22
|
from cirq import circuits, ops, protocols, transformers, value
|
|
22
23
|
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
17
|
import itertools
|
|
18
|
-
from
|
|
18
|
+
from collections.abc import Iterator, Sequence
|
|
19
|
+
from typing import Any, TYPE_CHECKING
|
|
19
20
|
|
|
20
21
|
from cirq import ops, value
|
|
21
22
|
from cirq.contrib.acquaintance.permutation import PermutationGate, SwapPermutationGate
|
|
@@ -16,7 +16,8 @@ from __future__ import annotations
|
|
|
16
16
|
|
|
17
17
|
import functools
|
|
18
18
|
import itertools
|
|
19
|
-
from
|
|
19
|
+
from collections.abc import Iterable, Iterator, Sequence
|
|
20
|
+
from typing import TYPE_CHECKING
|
|
20
21
|
|
|
21
22
|
from cirq import ops
|
|
22
23
|
from cirq.contrib.acquaintance.gates import acquaint
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
|
-
from
|
|
17
|
+
from collections.abc import Sequence
|
|
18
|
+
from typing import TYPE_CHECKING
|
|
18
19
|
|
|
19
20
|
from cirq import circuits, ops
|
|
20
21
|
from cirq.contrib.acquaintance.gates import acquaint
|
|
@@ -54,7 +55,7 @@ def complete_acquaintance_strategy(
|
|
|
54
55
|
if acquaintance_size == len(qubit_order):
|
|
55
56
|
return circuits.Circuit(acquaint(*qubit_order))
|
|
56
57
|
|
|
57
|
-
strategy = circuits.Circuit(
|
|
58
|
+
strategy = circuits.Circuit(acquaint(q) for q in qubit_order)
|
|
58
59
|
for size_to_acquaint in range(2, acquaintance_size + 1):
|
|
59
60
|
expose_acquaintance_gates(strategy)
|
|
60
61
|
replace_acquaintance_with_swap_network(strategy, qubit_order, size_to_acquaint, swap_gate)
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
17
|
import itertools
|
|
18
|
-
from
|
|
18
|
+
from collections.abc import Iterable, Sequence
|
|
19
|
+
from typing import TYPE_CHECKING, TypeVar
|
|
19
20
|
|
|
20
21
|
from cirq import circuits, ops
|
|
21
22
|
from cirq.contrib.acquaintance.gates import acquaint
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
|
-
from
|
|
17
|
+
from collections.abc import Iterable, Sequence
|
|
18
|
+
from typing import cast, TYPE_CHECKING
|
|
18
19
|
|
|
19
20
|
from cirq import circuits
|
|
20
21
|
from cirq.contrib.acquaintance.gates import acquaint, SwapNetworkGate
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
|
-
from
|
|
17
|
+
from collections.abc import Sequence
|
|
18
|
+
from typing import cast, TYPE_CHECKING
|
|
18
19
|
|
|
19
20
|
from cirq import devices, ops, protocols
|
|
20
21
|
from cirq.contrib.acquaintance.permutation import PermutationGate, update_mapping
|
|
@@ -16,7 +16,8 @@ from __future__ import annotations
|
|
|
16
16
|
|
|
17
17
|
import operator
|
|
18
18
|
import random
|
|
19
|
-
from
|
|
19
|
+
from collections.abc import Callable, Iterable
|
|
20
|
+
from typing import Any, cast, TYPE_CHECKING
|
|
20
21
|
|
|
21
22
|
from cirq import ops
|
|
22
23
|
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
17
|
import math
|
|
18
|
-
from
|
|
18
|
+
from collections.abc import Iterator, Sequence
|
|
19
|
+
from typing import Any, cast, TYPE_CHECKING
|
|
19
20
|
|
|
20
21
|
from sympy.combinatorics import GrayCode
|
|
21
22
|
|
|
@@ -70,7 +71,7 @@ def _generate_got_set_for_init_prob(qubit, init_prob):
|
|
|
70
71
|
yield common_gates.ry(_prob_to_angle(init_prob)).on(qubit)
|
|
71
72
|
|
|
72
73
|
|
|
73
|
-
@value.value_equality
|
|
74
|
+
@value.value_equality(unhashable=True)
|
|
74
75
|
class BayesianNetworkGate(raw_types.Gate):
|
|
75
76
|
"""A gate that represents a Bayesian network.
|
|
76
77
|
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
17
|
import functools
|
|
18
|
-
from
|
|
18
|
+
from collections.abc import Callable, Iterator
|
|
19
|
+
from typing import Any, cast, Generic, TypeVar
|
|
19
20
|
|
|
20
21
|
import networkx
|
|
21
22
|
|
|
@@ -72,8 +73,9 @@ class CircuitDag(networkx.DiGraph):
|
|
|
72
73
|
|
|
73
74
|
def __init__(
|
|
74
75
|
self,
|
|
75
|
-
can_reorder: Callable[[cirq.Operation, cirq.Operation], bool] = _disjoint_qubits,
|
|
76
76
|
incoming_graph_data: Any = None,
|
|
77
|
+
*,
|
|
78
|
+
can_reorder: Callable[[cirq.Operation, cirq.Operation], bool] = _disjoint_qubits,
|
|
77
79
|
) -> None:
|
|
78
80
|
"""Initializes a CircuitDag.
|
|
79
81
|
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
|
-
from
|
|
17
|
+
from collections.abc import Sequence
|
|
18
|
+
from typing import Any, Generic, TYPE_CHECKING
|
|
18
19
|
|
|
19
20
|
from cirq import sim
|
|
20
21
|
from cirq.sim.simulation_state import TSimulationState
|
|
@@ -16,7 +16,8 @@ from __future__ import annotations
|
|
|
16
16
|
|
|
17
17
|
import abc
|
|
18
18
|
import itertools
|
|
19
|
-
from
|
|
19
|
+
from collections.abc import Hashable, Iterable
|
|
20
|
+
from typing import Any, cast, NoReturn, TYPE_CHECKING
|
|
20
21
|
|
|
21
22
|
from cirq import devices, ops, value
|
|
22
23
|
from cirq.contrib.graph_device.hypergraph import UndirectedHypergraph
|
|
@@ -16,7 +16,8 @@ from __future__ import annotations
|
|
|
16
16
|
|
|
17
17
|
import itertools
|
|
18
18
|
import random
|
|
19
|
-
from
|
|
19
|
+
from collections.abc import Hashable, Iterable, Mapping
|
|
20
|
+
from typing import Any
|
|
20
21
|
|
|
21
22
|
AdjacencyList = set[frozenset[Hashable]]
|
|
22
23
|
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
|
-
from
|
|
17
|
+
from collections.abc import Hashable, Iterable, Mapping
|
|
18
|
+
from typing import Any
|
|
18
19
|
|
|
19
20
|
from cirq import devices, ops
|
|
20
21
|
from cirq.contrib.graph_device.graph_device import UndirectedGraphDevice, UndirectedGraphDeviceEdge
|
cirq/contrib/json.py
CHANGED
|
@@ -5,6 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
|
|
6
6
|
import functools
|
|
7
7
|
|
|
8
|
+
from cirq import _compat
|
|
8
9
|
from cirq.protocols.json_serialization import _register_resolver, DEFAULT_RESOLVERS, ObjectFactory
|
|
9
10
|
|
|
10
11
|
|
|
@@ -39,6 +40,17 @@ def _class_resolver_dictionary() -> dict[str, ObjectFactory]:
|
|
|
39
40
|
return {cls.__name__: cls for cls in classes}
|
|
40
41
|
|
|
41
42
|
|
|
42
|
-
DEFAULT_CONTRIB_RESOLVERS = [contrib_class_resolver] + DEFAULT_RESOLVERS
|
|
43
|
-
|
|
44
43
|
_register_resolver(_class_resolver_dictionary)
|
|
44
|
+
|
|
45
|
+
DEFAULT_CONTRIB_RESOLVERS = [contrib_class_resolver, *DEFAULT_RESOLVERS]
|
|
46
|
+
|
|
47
|
+
_compat.deprecate_attributes(
|
|
48
|
+
__name__,
|
|
49
|
+
{
|
|
50
|
+
'DEFAULT_CONTRIB_RESOLVERS': (
|
|
51
|
+
'v1.8',
|
|
52
|
+
'DEFAULT_CONTRIB_RESOLVERS is no longer necessary as contrib classes are now '
|
|
53
|
+
'automatically recognized and resolved with an import of cirq.contrib.',
|
|
54
|
+
)
|
|
55
|
+
},
|
|
56
|
+
)
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cirq_type": "QuantumVolumeResult",
|
|
3
|
+
"model_circuit": {
|
|
4
|
+
"cirq_type": "Circuit",
|
|
5
|
+
"moments": [
|
|
6
|
+
{
|
|
7
|
+
"cirq_type": "Moment",
|
|
8
|
+
"operations": [
|
|
9
|
+
{
|
|
10
|
+
"cirq_type": "GateOperation",
|
|
11
|
+
"gate": {
|
|
12
|
+
"cirq_type": "HPowGate",
|
|
13
|
+
"exponent": 1.0,
|
|
14
|
+
"global_shift": 0.0
|
|
15
|
+
},
|
|
16
|
+
"qubits": [
|
|
17
|
+
{
|
|
18
|
+
"cirq_type": "LineQubit",
|
|
19
|
+
"x": 0
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"cirq_type": "GateOperation",
|
|
25
|
+
"gate": {
|
|
26
|
+
"cirq_type": "HPowGate",
|
|
27
|
+
"exponent": 1.0,
|
|
28
|
+
"global_shift": 0.0
|
|
29
|
+
},
|
|
30
|
+
"qubits": [
|
|
31
|
+
{
|
|
32
|
+
"cirq_type": "LineQubit",
|
|
33
|
+
"x": 1
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"cirq_type": "GateOperation",
|
|
39
|
+
"gate": {
|
|
40
|
+
"cirq_type": "HPowGate",
|
|
41
|
+
"exponent": 1.0,
|
|
42
|
+
"global_shift": 0.0
|
|
43
|
+
},
|
|
44
|
+
"qubits": [
|
|
45
|
+
{
|
|
46
|
+
"cirq_type": "LineQubit",
|
|
47
|
+
"x": 2
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"cirq_type": "GateOperation",
|
|
53
|
+
"gate": {
|
|
54
|
+
"cirq_type": "HPowGate",
|
|
55
|
+
"exponent": 1.0,
|
|
56
|
+
"global_shift": 0.0
|
|
57
|
+
},
|
|
58
|
+
"qubits": [
|
|
59
|
+
{
|
|
60
|
+
"cirq_type": "LineQubit",
|
|
61
|
+
"x": 3
|
|
62
|
+
}
|
|
63
|
+
]
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"cirq_type": "GateOperation",
|
|
67
|
+
"gate": {
|
|
68
|
+
"cirq_type": "HPowGate",
|
|
69
|
+
"exponent": 1.0,
|
|
70
|
+
"global_shift": 0.0
|
|
71
|
+
},
|
|
72
|
+
"qubits": [
|
|
73
|
+
{
|
|
74
|
+
"cirq_type": "LineQubit",
|
|
75
|
+
"x": 4
|
|
76
|
+
}
|
|
77
|
+
]
|
|
78
|
+
}
|
|
79
|
+
]
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
"heavy_set": [
|
|
84
|
+
1,
|
|
85
|
+
2,
|
|
86
|
+
3
|
|
87
|
+
],
|
|
88
|
+
"compiled_circuit": {
|
|
89
|
+
"cirq_type": "Circuit",
|
|
90
|
+
"moments": [
|
|
91
|
+
{
|
|
92
|
+
"cirq_type": "Moment",
|
|
93
|
+
"operations": [
|
|
94
|
+
{
|
|
95
|
+
"cirq_type": "GateOperation",
|
|
96
|
+
"gate": {
|
|
97
|
+
"cirq_type": "HPowGate",
|
|
98
|
+
"exponent": 1.0,
|
|
99
|
+
"global_shift": 0.0
|
|
100
|
+
},
|
|
101
|
+
"qubits": [
|
|
102
|
+
{
|
|
103
|
+
"cirq_type": "LineQubit",
|
|
104
|
+
"x": 0
|
|
105
|
+
}
|
|
106
|
+
]
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"cirq_type": "GateOperation",
|
|
110
|
+
"gate": {
|
|
111
|
+
"cirq_type": "HPowGate",
|
|
112
|
+
"exponent": 1.0,
|
|
113
|
+
"global_shift": 0.0
|
|
114
|
+
},
|
|
115
|
+
"qubits": [
|
|
116
|
+
{
|
|
117
|
+
"cirq_type": "LineQubit",
|
|
118
|
+
"x": 1
|
|
119
|
+
}
|
|
120
|
+
]
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"cirq_type": "GateOperation",
|
|
124
|
+
"gate": {
|
|
125
|
+
"cirq_type": "HPowGate",
|
|
126
|
+
"exponent": 1.0,
|
|
127
|
+
"global_shift": 0.0
|
|
128
|
+
},
|
|
129
|
+
"qubits": [
|
|
130
|
+
{
|
|
131
|
+
"cirq_type": "LineQubit",
|
|
132
|
+
"x": 2
|
|
133
|
+
}
|
|
134
|
+
]
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"cirq_type": "GateOperation",
|
|
138
|
+
"gate": {
|
|
139
|
+
"cirq_type": "HPowGate",
|
|
140
|
+
"exponent": 1.0,
|
|
141
|
+
"global_shift": 0.0
|
|
142
|
+
},
|
|
143
|
+
"qubits": [
|
|
144
|
+
{
|
|
145
|
+
"cirq_type": "LineQubit",
|
|
146
|
+
"x": 3
|
|
147
|
+
}
|
|
148
|
+
]
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"cirq_type": "GateOperation",
|
|
152
|
+
"gate": {
|
|
153
|
+
"cirq_type": "HPowGate",
|
|
154
|
+
"exponent": 1.0,
|
|
155
|
+
"global_shift": 0.0
|
|
156
|
+
},
|
|
157
|
+
"qubits": [
|
|
158
|
+
{
|
|
159
|
+
"cirq_type": "LineQubit",
|
|
160
|
+
"x": 4
|
|
161
|
+
}
|
|
162
|
+
]
|
|
163
|
+
}
|
|
164
|
+
]
|
|
165
|
+
}
|
|
166
|
+
]
|
|
167
|
+
},
|
|
168
|
+
"sampler_result": 0.1
|
|
169
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
cirq.contrib.quantum_volume.QuantumVolumeResult(
|
|
2
|
+
model_circuit=cirq.Circuit(
|
|
3
|
+
cirq.Moment(
|
|
4
|
+
cirq.H(cirq.LineQubit(0)),
|
|
5
|
+
cirq.H(cirq.LineQubit(1)),
|
|
6
|
+
cirq.H(cirq.LineQubit(2)),
|
|
7
|
+
cirq.H(cirq.LineQubit(3)),
|
|
8
|
+
cirq.H(cirq.LineQubit(4)),
|
|
9
|
+
)
|
|
10
|
+
),
|
|
11
|
+
heavy_set=[1, 2, 3],
|
|
12
|
+
compiled_circuit=cirq.Circuit(
|
|
13
|
+
cirq.Moment(
|
|
14
|
+
cirq.H(cirq.LineQubit(0)),
|
|
15
|
+
cirq.H(cirq.LineQubit(1)),
|
|
16
|
+
cirq.H(cirq.LineQubit(2)),
|
|
17
|
+
cirq.H(cirq.LineQubit(3)),
|
|
18
|
+
cirq.H(cirq.LineQubit(4)),
|
|
19
|
+
)
|
|
20
|
+
),
|
|
21
|
+
sampler_result=0.1,
|
|
22
|
+
)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
cirq.contrib.acquaintance.SwapPermutationGate(swap_gate=cirq.SWAP)
|
|
@@ -27,6 +27,4 @@ TestSpec = ModuleJsonTestSpec(
|
|
|
27
27
|
should_not_be_serialized=["Unique", "CircuitDag"],
|
|
28
28
|
resolver_cache=_class_resolver_dictionary(),
|
|
29
29
|
deprecated={},
|
|
30
|
-
# TODO: #7520 - create .json and .repr for these so they can be tested here
|
|
31
|
-
tested_elsewhere=["QuantumVolumeResult", "SwapPermutationGate", "BayesianNetworkGate"],
|
|
32
30
|
)
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
|
-
from
|
|
17
|
+
from collections.abc import Sequence
|
|
18
|
+
from typing import TYPE_CHECKING
|
|
18
19
|
|
|
19
20
|
from cirq import circuits, devices, ops, value
|
|
20
21
|
from cirq.devices.noise_model import validate_all_measurements
|
|
@@ -21,8 +21,26 @@ from cirq.contrib.paulistring.clifford_target_gateset import CliffordTargetGates
|
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
def clifford_optimized_circuit(circuit: circuits.Circuit, atol: float = 1e-8) -> circuits.Circuit:
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
"""Optimizes a circuit composed of Clifford and CZ gates.
|
|
25
|
+
|
|
26
|
+
This function attempts to simplify a circuit by finding local optimizations.
|
|
27
|
+
It works in two stages:
|
|
28
|
+
1. It converts the circuit to a target gateset consisting of
|
|
29
|
+
`cirq.SingleQubitCliffordGate` and `cirq.CZPowGate` gates.
|
|
30
|
+
2. It then iterates through the circuit, applying the following rules:
|
|
31
|
+
- Merges adjacent single-qubit Clifford gates.
|
|
32
|
+
- Commutes single-qubit Clifford gates past CZ gates, attempting to
|
|
33
|
+
merge them with other single-qubit Clifford gates.
|
|
34
|
+
- Cancels pairs of identical CZ gates.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
circuit: The circuit to optimize.
|
|
38
|
+
atol: A limit on the amount of absolute error introduced by the decomposition.
|
|
39
|
+
|
|
40
|
+
Returns:
|
|
41
|
+
The optimized circuit.
|
|
42
|
+
"""
|
|
43
|
+
# Convert to a circuit with SingleQubitCliffordGates, CZs and other ignored gates.
|
|
26
44
|
c_cliff = transformers.optimize_for_target_gateset(
|
|
27
45
|
circuit, gateset=CliffordTargetGateset(atol=atol)
|
|
28
46
|
)
|