cirq-core 1.7.0.dev20250924231107__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 +7 -13
- cirq/circuits/circuit_operation.py +2 -1
- cirq/circuits/circuit_test.py +13 -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 +74 -171
- cirq/contrib/paulistring/recombine.py +5 -2
- cirq/contrib/paulistring/separate.py +1 -1
- cirq/contrib/qasm_import/_parser.py +2 -1
- cirq/contrib/qasm_import/_parser_test.py +3 -3
- 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 +2 -1
- 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 +2 -1
- cirq/ops/arithmetic_operation.py +2 -1
- cirq/ops/arithmetic_operation_test.py +1 -1
- cirq/ops/boolean_hamiltonian.py +4 -3
- cirq/ops/classically_controlled_operation.py +3 -2
- cirq/ops/clifford_gate.py +2 -1
- cirq/ops/clifford_gate_test.py +1 -2
- cirq/ops/common_channels.py +2 -1
- cirq/ops/common_gates.py +2 -1
- 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 +3 -13
- 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 +8 -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 +8 -3
- cirq/ops/linear_combinations_test.py +23 -1
- cirq/ops/matrix_gates.py +2 -1
- cirq/ops/measure_util.py +2 -1
- 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/pauli_interaction_gate.py +2 -1
- cirq/ops/pauli_measurement_gate.py +2 -1
- cirq/ops/pauli_string.py +6 -12
- cirq/ops/pauli_string_phasor.py +3 -2
- cirq/ops/pauli_string_raw_types.py +2 -1
- cirq/ops/pauli_string_test.py +2 -2
- 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 +7 -15
- 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/decompose_protocol.py +2 -12
- cirq/protocols/has_stabilizer_effect_protocol.py +1 -1
- cirq/protocols/hash_from_pickle_test.py +2 -2
- cirq/protocols/inverse_protocol.py +2 -1
- cirq/protocols/json_serialization.py +2 -1
- cirq/protocols/kraus_protocol.py +4 -3
- cirq/protocols/kraus_protocol_test.py +2 -2
- cirq/protocols/measurement_key_protocol.py +2 -1
- cirq/protocols/mixture_protocol.py +2 -1
- cirq/protocols/pow_protocol.py +2 -1
- cirq/protocols/qasm.py +2 -1
- cirq/protocols/qid_shape_protocol.py +2 -1
- cirq/protocols/resolve_parameters.py +16 -14
- cirq/protocols/trace_distance_bound.py +2 -1
- cirq/protocols/unitary_protocol.py +21 -21
- cirq/qis/channels.py +1 -1
- cirq/qis/channels_test.py +1 -1
- cirq/qis/clifford_tableau.py +2 -1
- cirq/qis/entropy.py +2 -2
- cirq/qis/quantum_state_representation.py +2 -1
- cirq/qis/states.py +7 -2
- cirq/sim/classical_simulator.py +2 -1
- cirq/sim/clifford/clifford_simulator.py +2 -1
- cirq/sim/clifford/clifford_simulator_test.py +1 -1
- 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 +3 -2
- cirq/sim/clifford/stabilizer_state_ch_form_test.py +0 -1
- cirq/sim/density_matrix_simulation_state.py +2 -1
- cirq/sim/density_matrix_simulator.py +2 -1
- cirq/sim/density_matrix_utils.py +2 -1
- cirq/sim/mux.py +2 -1
- cirq/sim/mux_test.py +0 -1
- cirq/sim/simulation_product_state.py +2 -1
- cirq/sim/simulation_product_state_test.py +2 -1
- cirq/sim/simulation_state.py +2 -1
- cirq/sim/simulation_state_base.py +2 -1
- cirq/sim/simulation_state_test.py +2 -1
- cirq/sim/simulation_utils.py +2 -1
- cirq/sim/simulator.py +2 -1
- cirq/sim/simulator_base.py +2 -1
- cirq/sim/simulator_base_test.py +2 -1
- cirq/sim/simulator_test.py +2 -1
- cirq/sim/sparse_simulator.py +2 -1
- cirq/sim/state_vector.py +2 -1
- cirq/sim/state_vector_simulation_state.py +2 -1
- cirq/sim/state_vector_simulator.py +2 -1
- cirq/sim/state_vector_test.py +1 -2
- 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/sweepable.py +2 -1
- cirq/study/sweeps.py +26 -1
- cirq/study/sweeps_test.py +24 -0
- cirq/testing/_compat_test_data/__init__.py +3 -3
- cirq/testing/circuit_compare.py +2 -1
- cirq/testing/consistent_act_on_test.py +1 -1
- cirq/testing/consistent_controlled_gate_op.py +1 -1
- cirq/testing/consistent_controlled_gate_op_test.py +2 -1
- cirq/testing/consistent_protocols.py +2 -1
- cirq/testing/consistent_protocols_test.py +3 -3
- cirq/testing/consistent_qasm.py +2 -1
- 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/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 +4 -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 +8 -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 +5 -2
- 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 +2 -1
- 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 +2 -1
- 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.dev20250924231107.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/METADATA +4 -4
- {cirq_core-1.7.0.dev20250924231107.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/RECORD +391 -374
- cirq/contrib/json_test.py +0 -33
- {cirq_core-1.7.0.dev20250924231107.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/WHEEL +0 -0
- {cirq_core-1.7.0.dev20250924231107.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/licenses/LICENSE +0 -0
- {cirq_core-1.7.0.dev20250924231107.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/top_level.txt +0 -0
cirq/ops/gateset.py
CHANGED
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
|
|
17
17
|
from __future__ import annotations
|
|
18
18
|
|
|
19
|
-
from
|
|
19
|
+
from collections.abc import Callable, Hashable, Iterable
|
|
20
|
+
from typing import Any, cast, TYPE_CHECKING
|
|
20
21
|
|
|
21
22
|
from cirq import protocols, value
|
|
22
23
|
from cirq.ops import global_phase_op, op_tree, raw_types
|
|
@@ -340,6 +341,7 @@ class Gateset:
|
|
|
340
341
|
self._unroll_circuit_op = unroll_circuit_op
|
|
341
342
|
self._instance_gate_families: dict[raw_types.Gate, GateFamily] = {}
|
|
342
343
|
self._type_gate_families: dict[type[raw_types.Gate], GateFamily] = {}
|
|
344
|
+
self._gate_families_with_tags: list[GateFamily] = []
|
|
343
345
|
self._gates_repr_str = ", ".join([_gate_str(g, repr) for g in gates])
|
|
344
346
|
unique_gate_list: list[GateFamily] = list(
|
|
345
347
|
dict.fromkeys(g if isinstance(g, GateFamily) else GateFamily(gate=g) for g in gates)
|
|
@@ -351,6 +353,12 @@ class Gateset:
|
|
|
351
353
|
self._instance_gate_families[g.gate] = g
|
|
352
354
|
else:
|
|
353
355
|
self._type_gate_families[g.gate] = g
|
|
356
|
+
else:
|
|
357
|
+
if isinstance(g.gate, raw_types.Gate):
|
|
358
|
+
self._gate_families_with_tags.append(g)
|
|
359
|
+
else:
|
|
360
|
+
# Instance checks are faster, so test them first.
|
|
361
|
+
self._gate_families_with_tags.insert(0, g)
|
|
354
362
|
self._unique_gate_list = unique_gate_list
|
|
355
363
|
self._gates = frozenset(unique_gate_list)
|
|
356
364
|
|
|
@@ -422,6 +430,7 @@ class Gateset:
|
|
|
422
430
|
g = item if isinstance(item, raw_types.Gate) else item.gate
|
|
423
431
|
assert g is not None, f'`item`: {item} must be a gate or have a valid `item.gate`'
|
|
424
432
|
|
|
433
|
+
# Check "type" based GateFamily since isinstance is fast
|
|
425
434
|
for gate_mro_type in type(g).mro():
|
|
426
435
|
if gate_mro_type in self._type_gate_families:
|
|
427
436
|
assert item in self._type_gate_families[gate_mro_type], (
|
|
@@ -430,6 +439,7 @@ class Gateset:
|
|
|
430
439
|
)
|
|
431
440
|
return True
|
|
432
441
|
|
|
442
|
+
# Check exact instance equality next
|
|
433
443
|
if g in self._instance_gate_families:
|
|
434
444
|
assert item in self._instance_gate_families[g], (
|
|
435
445
|
f"{item} instance matches {self._instance_gate_families[g]} but "
|
|
@@ -437,7 +447,17 @@ class Gateset:
|
|
|
437
447
|
)
|
|
438
448
|
return True
|
|
439
449
|
|
|
440
|
-
|
|
450
|
+
# Check other GateFamilies next
|
|
451
|
+
if any(item in gate_family for gate_family in self._gate_families_with_tags):
|
|
452
|
+
return True
|
|
453
|
+
|
|
454
|
+
# Lastly, do a final exhaustive check to make sure this is not equivalent
|
|
455
|
+
# to another type of gate. This will catch things like:
|
|
456
|
+
# cirq.XPowGate(exponent=0) in cirq.GateFamily(cirq.I)
|
|
457
|
+
return any(
|
|
458
|
+
item in gate_family
|
|
459
|
+
for gate_family in self._gates.difference(self._gate_families_with_tags)
|
|
460
|
+
)
|
|
441
461
|
|
|
442
462
|
def validate(self, circuit_or_optree: cirq.AbstractCircuit | op_tree.OP_TREE) -> bool:
|
|
443
463
|
"""Validates gates forming `circuit_or_optree` should be contained in Gateset.
|
cirq/ops/global_phase_op.py
CHANGED
|
@@ -15,8 +15,9 @@
|
|
|
15
15
|
|
|
16
16
|
from __future__ import annotations
|
|
17
17
|
|
|
18
|
+
from collections.abc import Collection, Sequence, Set
|
|
18
19
|
from types import NotImplementedType
|
|
19
|
-
from typing import
|
|
20
|
+
from typing import Any, cast
|
|
20
21
|
|
|
21
22
|
import numpy as np
|
|
22
23
|
import sympy
|
|
@@ -83,7 +84,7 @@ class GlobalPhaseGate(raw_types.Gate):
|
|
|
83
84
|
def _is_parameterized_(self) -> bool:
|
|
84
85
|
return protocols.is_parameterized(self.coefficient)
|
|
85
86
|
|
|
86
|
-
def _parameter_names_(self) ->
|
|
87
|
+
def _parameter_names_(self) -> Set[str]:
|
|
87
88
|
return protocols.parameter_names(self.coefficient)
|
|
88
89
|
|
|
89
90
|
def _resolve_parameters_(
|
cirq/ops/greedy_qubit_manager.py
CHANGED
cirq/ops/identity.py
CHANGED
|
@@ -16,8 +16,9 @@
|
|
|
16
16
|
from __future__ import annotations
|
|
17
17
|
|
|
18
18
|
import numbers
|
|
19
|
+
from collections.abc import Sequence
|
|
19
20
|
from types import NotImplementedType
|
|
20
|
-
from typing import Any,
|
|
21
|
+
from typing import Any, TYPE_CHECKING
|
|
21
22
|
|
|
22
23
|
import numpy as np
|
|
23
24
|
import sympy
|
cirq/ops/kraus_channel.py
CHANGED
cirq/ops/linear_combinations.py
CHANGED
|
@@ -16,7 +16,8 @@ from __future__ import annotations
|
|
|
16
16
|
|
|
17
17
|
import numbers
|
|
18
18
|
from collections import defaultdict
|
|
19
|
-
from
|
|
19
|
+
from collections.abc import Iterable, Mapping, Set
|
|
20
|
+
from typing import Any, TYPE_CHECKING, Union
|
|
20
21
|
|
|
21
22
|
import numpy as np
|
|
22
23
|
import sympy
|
|
@@ -136,7 +137,7 @@ class LinearCombinationOfGates(value.LinearDict[raw_types.Gate]):
|
|
|
136
137
|
def _is_parameterized_(self) -> bool:
|
|
137
138
|
return any(protocols.is_parameterized(item) for item in self.items())
|
|
138
139
|
|
|
139
|
-
def _parameter_names_(self) ->
|
|
140
|
+
def _parameter_names_(self) -> Set[str]:
|
|
140
141
|
return {name for item in self.items() for name in protocols.parameter_names(item)}
|
|
141
142
|
|
|
142
143
|
def _resolve_parameters_(
|
|
@@ -253,7 +254,7 @@ class LinearCombinationOfOperations(value.LinearDict[raw_types.Operation]):
|
|
|
253
254
|
def _is_parameterized_(self) -> bool:
|
|
254
255
|
return any(protocols.is_parameterized(item) for item in self.items())
|
|
255
256
|
|
|
256
|
-
def _parameter_names_(self) ->
|
|
257
|
+
def _parameter_names_(self) -> Set[str]:
|
|
257
258
|
return {name for item in self.items() for name in protocols.parameter_names(item)}
|
|
258
259
|
|
|
259
260
|
def _resolve_parameters_(
|
|
@@ -742,6 +743,8 @@ class PauliSum:
|
|
|
742
743
|
return len(self._linear_dict)
|
|
743
744
|
|
|
744
745
|
def __iadd__(self, other):
|
|
746
|
+
if isinstance(other, raw_types.Operation):
|
|
747
|
+
other = pauli_string._try_interpret_as_pauli_string(other)
|
|
745
748
|
if isinstance(other, numbers.Complex):
|
|
746
749
|
other = PauliSum.from_pauli_strings([PauliString(coefficient=other)])
|
|
747
750
|
elif isinstance(other, PauliString):
|
|
@@ -766,6 +769,8 @@ class PauliSum:
|
|
|
766
769
|
return -self.__sub__(other)
|
|
767
770
|
|
|
768
771
|
def __isub__(self, other):
|
|
772
|
+
if isinstance(other, raw_types.Operation):
|
|
773
|
+
other = pauli_string._try_interpret_as_pauli_string(other)
|
|
769
774
|
if isinstance(other, numbers.Complex):
|
|
770
775
|
other = PauliSum.from_pauli_strings([PauliString(coefficient=other)])
|
|
771
776
|
elif isinstance(other, PauliString):
|
|
@@ -975,10 +975,16 @@ def test_paulisum_validation() -> None:
|
|
|
975
975
|
ps += cirq.I(cirq.LineQubit(0))
|
|
976
976
|
assert ps == cirq.PauliSum(cirq.LinearDict({frozenset(): complex(1)}))
|
|
977
977
|
|
|
978
|
+
ps = cirq.I(cirq.LineQubit(0)) + cirq.PauliSum()
|
|
979
|
+
assert ps == cirq.PauliSum(cirq.LinearDict({frozenset(): complex(1)}))
|
|
980
|
+
|
|
978
981
|
ps = cirq.PauliSum()
|
|
979
982
|
ps -= cirq.I(cirq.LineQubit(0))
|
|
980
983
|
assert ps == cirq.PauliSum(cirq.LinearDict({frozenset(): complex(-1)}))
|
|
981
984
|
|
|
985
|
+
ps = cirq.I(cirq.LineQubit(0)) - cirq.PauliSum()
|
|
986
|
+
assert ps == cirq.PauliSum(cirq.LinearDict({frozenset(): complex(1)}))
|
|
987
|
+
|
|
982
988
|
|
|
983
989
|
def test_add_number_paulisum() -> None:
|
|
984
990
|
q = cirq.LineQubit.range(2)
|
|
@@ -1008,6 +1014,22 @@ def test_add_number_paulistring() -> None:
|
|
|
1008
1014
|
== cirq.PauliSum.from_pauli_strings([cirq.PauliString() * 2, cirq.PauliString({a: cirq.X})])
|
|
1009
1015
|
)
|
|
1010
1016
|
|
|
1017
|
+
assert (
|
|
1018
|
+
cirq.X(a) - 2
|
|
1019
|
+
== -2 + cirq.X(a)
|
|
1020
|
+
== cirq.PauliSum.from_pauli_strings(
|
|
1021
|
+
[cirq.PauliString() * -2, cirq.PauliString({a: cirq.X})]
|
|
1022
|
+
)
|
|
1023
|
+
)
|
|
1024
|
+
|
|
1025
|
+
assert (
|
|
1026
|
+
2 - cirq.X(a)
|
|
1027
|
+
== 2 + -cirq.X(a)
|
|
1028
|
+
== cirq.PauliSum.from_pauli_strings(
|
|
1029
|
+
[cirq.PauliString() * 2, -cirq.PauliString({a: cirq.X})]
|
|
1030
|
+
)
|
|
1031
|
+
)
|
|
1032
|
+
|
|
1011
1033
|
|
|
1012
1034
|
def test_pauli_sum_formatting() -> None:
|
|
1013
1035
|
q = cirq.LineQubit.range(2)
|
|
@@ -1430,7 +1452,7 @@ def test_expectation_from_density_matrix_invalid_input() -> None:
|
|
|
1430
1452
|
with pytest.raises(ValueError, match='shape'):
|
|
1431
1453
|
psum.expectation_from_density_matrix(rho.reshape((8, 8, 1)), q_map)
|
|
1432
1454
|
with pytest.raises(ValueError, match='shape'):
|
|
1433
|
-
psum.expectation_from_density_matrix(rho.reshape((-1)), q_map)
|
|
1455
|
+
psum.expectation_from_density_matrix(rho.reshape((-1,)), q_map)
|
|
1434
1456
|
|
|
1435
1457
|
|
|
1436
1458
|
def test_expectation_from_density_matrix_check_preconditions() -> None:
|
cirq/ops/matrix_gates.py
CHANGED
cirq/ops/measure_util.py
CHANGED
cirq/ops/measurement_gate.py
CHANGED
cirq/ops/named_qubit.py
CHANGED
|
@@ -148,7 +148,7 @@ class NamedQid(_BaseNamedQid):
|
|
|
148
148
|
|
|
149
149
|
@staticmethod
|
|
150
150
|
def range(*args, prefix: str, dimension: int) -> list[NamedQid]:
|
|
151
|
-
"""Returns a range of ``NamedQid
|
|
151
|
+
"""Returns a range of ``NamedQid``s.
|
|
152
152
|
|
|
153
153
|
The range returned starts with the prefix, and followed by a qid for
|
|
154
154
|
each number in the range, e.g.:
|
|
@@ -166,7 +166,7 @@ class NamedQid(_BaseNamedQid):
|
|
|
166
166
|
dimension: The dimension of the qid's Hilbert space, i.e.
|
|
167
167
|
the number of quantum levels.
|
|
168
168
|
Returns:
|
|
169
|
-
A list of ``NamedQid
|
|
169
|
+
A list of ``NamedQid``s.
|
|
170
170
|
"""
|
|
171
171
|
return [NamedQid(f"{prefix}{i}", dimension=dimension) for i in range(*args)]
|
|
172
172
|
|
cirq/ops/op_tree.py
CHANGED
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
|
|
17
17
|
from __future__ import annotations
|
|
18
18
|
|
|
19
|
-
from
|
|
19
|
+
from collections.abc import Callable, Iterable, Iterator
|
|
20
|
+
from typing import NoReturn, TYPE_CHECKING
|
|
20
21
|
|
|
21
22
|
from cirq._doc import document
|
|
22
23
|
from cirq._import import LazyLoader
|
cirq/ops/parallel_gate.py
CHANGED
|
@@ -14,8 +14,9 @@
|
|
|
14
14
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
|
+
from collections.abc import Set
|
|
17
18
|
from types import NotImplementedType
|
|
18
|
-
from typing import
|
|
19
|
+
from typing import Any, TYPE_CHECKING
|
|
19
20
|
|
|
20
21
|
import numpy as np
|
|
21
22
|
|
|
@@ -90,7 +91,7 @@ class ParallelGate(raw_types.Gate):
|
|
|
90
91
|
def _is_parameterized_(self) -> bool:
|
|
91
92
|
return protocols.is_parameterized(self.sub_gate)
|
|
92
93
|
|
|
93
|
-
def _parameter_names_(self) ->
|
|
94
|
+
def _parameter_names_(self) -> Set[str]:
|
|
94
95
|
return protocols.parameter_names(self.sub_gate)
|
|
95
96
|
|
|
96
97
|
def _resolve_parameters_(self, resolver: cirq.ParamResolver, recursive: bool) -> ParallelGate:
|
cirq/ops/parity_gates.py
CHANGED
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
|
-
from
|
|
17
|
+
from collections.abc import Iterable, Iterator, Mapping, Sequence
|
|
18
|
+
from typing import Any, cast, TYPE_CHECKING
|
|
18
19
|
|
|
19
20
|
from cirq import protocols, value
|
|
20
21
|
from cirq.ops import (
|
cirq/ops/pauli_string.py
CHANGED
|
@@ -17,25 +17,19 @@ from __future__ import annotations
|
|
|
17
17
|
import cmath
|
|
18
18
|
import math
|
|
19
19
|
import numbers
|
|
20
|
-
from
|
|
21
|
-
from typing import (
|
|
22
|
-
AbstractSet,
|
|
23
|
-
Any,
|
|
20
|
+
from collections.abc import (
|
|
24
21
|
Callable,
|
|
25
|
-
cast,
|
|
26
|
-
Generic,
|
|
27
22
|
ItemsView,
|
|
28
23
|
Iterable,
|
|
29
24
|
Iterator,
|
|
30
25
|
KeysView,
|
|
31
26
|
Mapping,
|
|
32
|
-
overload,
|
|
33
27
|
Sequence,
|
|
34
|
-
|
|
35
|
-
TypeVar,
|
|
36
|
-
Union,
|
|
28
|
+
Set,
|
|
37
29
|
ValuesView,
|
|
38
30
|
)
|
|
31
|
+
from types import NotImplementedType
|
|
32
|
+
from typing import Any, cast, Generic, overload, TYPE_CHECKING, TypeVar, Union
|
|
39
33
|
|
|
40
34
|
import numpy as np
|
|
41
35
|
import sympy
|
|
@@ -1040,7 +1034,7 @@ class PauliString(raw_types.Operation, Generic[TKey]):
|
|
|
1040
1034
|
def _is_parameterized_(self) -> bool:
|
|
1041
1035
|
return protocols.is_parameterized(self.coefficient)
|
|
1042
1036
|
|
|
1043
|
-
def _parameter_names_(self) ->
|
|
1037
|
+
def _parameter_names_(self) -> Set[str]:
|
|
1044
1038
|
return protocols.parameter_names(self.coefficient)
|
|
1045
1039
|
|
|
1046
1040
|
def _resolve_parameters_(
|
|
@@ -1233,7 +1227,7 @@ class MutablePauliString(Generic[TKey]):
|
|
|
1233
1227
|
return sign
|
|
1234
1228
|
return -sign
|
|
1235
1229
|
|
|
1236
|
-
def keys(self) ->
|
|
1230
|
+
def keys(self) -> Set[TKey]:
|
|
1237
1231
|
"""Returns the sequence of qubits on which this pauli string acts."""
|
|
1238
1232
|
return self.pauli_int_dict.keys()
|
|
1239
1233
|
|
cirq/ops/pauli_string_phasor.py
CHANGED
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
17
|
import numbers
|
|
18
|
-
from
|
|
18
|
+
from collections.abc import Iterable, Iterator, Sequence, Set
|
|
19
|
+
from typing import cast, TYPE_CHECKING
|
|
19
20
|
|
|
20
21
|
from cirq import protocols, value
|
|
21
22
|
from cirq._compat import deprecated, proper_repr
|
|
@@ -388,7 +389,7 @@ class PauliStringPhasorGate(raw_types.Gate):
|
|
|
388
389
|
self.exponent_pos
|
|
389
390
|
)
|
|
390
391
|
|
|
391
|
-
def _parameter_names_(self) ->
|
|
392
|
+
def _parameter_names_(self) -> Set[str]:
|
|
392
393
|
return protocols.parameter_names(self.exponent_neg) | protocols.parameter_names(
|
|
393
394
|
self.exponent_pos
|
|
394
395
|
)
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
17
|
import abc
|
|
18
|
-
from
|
|
18
|
+
from collections.abc import Sequence
|
|
19
|
+
from typing import Any, Self, TYPE_CHECKING
|
|
19
20
|
|
|
20
21
|
from cirq import protocols
|
|
21
22
|
from cirq.ops import pauli_string as ps, raw_types
|
cirq/ops/pauli_string_test.py
CHANGED
|
@@ -16,7 +16,7 @@ from __future__ import annotations
|
|
|
16
16
|
|
|
17
17
|
import itertools
|
|
18
18
|
import math
|
|
19
|
-
from
|
|
19
|
+
from collections.abc import Iterator
|
|
20
20
|
|
|
21
21
|
import numpy as np
|
|
22
22
|
import pytest
|
|
@@ -1191,7 +1191,7 @@ def test_expectation_from_density_matrix_invalid_input() -> None:
|
|
|
1191
1191
|
with pytest.raises(ValueError, match='shape'):
|
|
1192
1192
|
ps.expectation_from_density_matrix(rho.reshape((4, 4, 1)), q_map_2)
|
|
1193
1193
|
with pytest.raises(ValueError, match='shape'):
|
|
1194
|
-
ps.expectation_from_density_matrix(rho.reshape((-1)), q_map_2)
|
|
1194
|
+
ps.expectation_from_density_matrix(rho.reshape((-1,)), q_map_2)
|
|
1195
1195
|
|
|
1196
1196
|
# Correctly shaped state_vectors.
|
|
1197
1197
|
with pytest.raises(ValueError, match='shape'):
|
cirq/ops/permutation_gate.py
CHANGED
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
|
-
from
|
|
17
|
+
from collections.abc import Iterator, Sequence
|
|
18
|
+
from typing import Any, TYPE_CHECKING
|
|
18
19
|
|
|
19
20
|
from cirq import protocols, value
|
|
20
21
|
from cirq.ops import raw_types, swap_gates
|
cirq/ops/phased_iswap_gate.py
CHANGED
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
|
|
16
16
|
from __future__ import annotations
|
|
17
17
|
|
|
18
|
-
from
|
|
18
|
+
from collections.abc import Iterator, Sequence, Set
|
|
19
|
+
from typing import Any, cast
|
|
19
20
|
|
|
20
21
|
import numpy as np
|
|
21
22
|
import sympy
|
|
@@ -108,7 +109,7 @@ class PhasedISwapPowGate(eigen_gate.EigenGate):
|
|
|
108
109
|
self._phase_exponent
|
|
109
110
|
)
|
|
110
111
|
|
|
111
|
-
def _parameter_names_(self) ->
|
|
112
|
+
def _parameter_names_(self) -> Set[str]:
|
|
112
113
|
return protocols.parameter_names(self._iswap) | protocols.parameter_names(
|
|
113
114
|
self._phase_exponent
|
|
114
115
|
)
|
cirq/ops/phased_x_gate.py
CHANGED
|
@@ -18,8 +18,9 @@ from __future__ import annotations
|
|
|
18
18
|
|
|
19
19
|
import math
|
|
20
20
|
import numbers
|
|
21
|
+
from collections.abc import Sequence, Set
|
|
21
22
|
from types import NotImplementedType
|
|
22
|
-
from typing import
|
|
23
|
+
from typing import Any, cast
|
|
23
24
|
|
|
24
25
|
import numpy as np
|
|
25
26
|
import sympy
|
|
@@ -166,7 +167,7 @@ class PhasedXPowGate(raw_types.Gate):
|
|
|
166
167
|
self._phase_exponent
|
|
167
168
|
)
|
|
168
169
|
|
|
169
|
-
def _parameter_names_(self) ->
|
|
170
|
+
def _parameter_names_(self) -> Set[str]:
|
|
170
171
|
"""See `cirq.SupportsParameterization`."""
|
|
171
172
|
return protocols.parameter_names(self._exponent) | protocols.parameter_names(
|
|
172
173
|
self._phase_exponent
|
|
@@ -176,12 +177,12 @@ class PhasedXPowGate(raw_types.Gate):
|
|
|
176
177
|
"""See `cirq.SupportsParameterization`."""
|
|
177
178
|
phase_exponent = resolver.value_of(self._phase_exponent, recursive)
|
|
178
179
|
exponent = resolver.value_of(self._exponent, recursive)
|
|
179
|
-
if isinstance(phase_exponent, numbers.Complex):
|
|
180
|
+
if not isinstance(phase_exponent, float) and isinstance(phase_exponent, numbers.Complex):
|
|
180
181
|
if isinstance(phase_exponent, numbers.Real):
|
|
181
182
|
phase_exponent = float(phase_exponent)
|
|
182
183
|
else:
|
|
183
184
|
raise ValueError(f'PhasedXPowGate does not support complex value {phase_exponent}')
|
|
184
|
-
if isinstance(exponent, numbers.Complex):
|
|
185
|
+
if not isinstance(exponent, float) and isinstance(exponent, numbers.Complex):
|
|
185
186
|
if isinstance(exponent, numbers.Real):
|
|
186
187
|
exponent = float(exponent)
|
|
187
188
|
else:
|
cirq/ops/phased_x_z_gate.py
CHANGED
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
17
|
import numbers
|
|
18
|
-
from
|
|
18
|
+
from collections.abc import Iterator, Sequence, Set
|
|
19
|
+
from typing import Any, TYPE_CHECKING
|
|
19
20
|
|
|
20
21
|
import numpy as np
|
|
21
22
|
import sympy
|
|
@@ -140,6 +141,10 @@ class PhasedXZGate(raw_types.Gate):
|
|
|
140
141
|
return self._axis_phase_exponent
|
|
141
142
|
|
|
142
143
|
def _value_equality_values_(self):
|
|
144
|
+
if self._is_parameterized_():
|
|
145
|
+
# If this is parameterized, do not try to calculate the canonical exponents
|
|
146
|
+
# as this results in some slow sympy operations.
|
|
147
|
+
return (self._x_exponent, self._z_exponent, self._axis_phase_exponent)
|
|
143
148
|
c = self._canonical()
|
|
144
149
|
return (
|
|
145
150
|
value.PeriodicValue(c._x_exponent, 2),
|
|
@@ -216,7 +221,7 @@ class PhasedXZGate(raw_types.Gate):
|
|
|
216
221
|
or protocols.is_parameterized(self._axis_phase_exponent)
|
|
217
222
|
)
|
|
218
223
|
|
|
219
|
-
def _parameter_names_(self) ->
|
|
224
|
+
def _parameter_names_(self) -> Set[str]:
|
|
220
225
|
"""See `cirq.SupportsParameterization`."""
|
|
221
226
|
return (
|
|
222
227
|
protocols.parameter_names(self._x_exponent)
|
|
@@ -231,17 +236,19 @@ class PhasedXZGate(raw_types.Gate):
|
|
|
231
236
|
z_exponent = resolver.value_of(self._z_exponent, recursive)
|
|
232
237
|
x_exponent = resolver.value_of(self._x_exponent, recursive)
|
|
233
238
|
axis_phase_exponent = resolver.value_of(self._axis_phase_exponent, recursive)
|
|
234
|
-
if isinstance(z_exponent, numbers.Complex):
|
|
239
|
+
if not isinstance(z_exponent, float) and isinstance(z_exponent, numbers.Complex):
|
|
235
240
|
if isinstance(z_exponent, numbers.Real):
|
|
236
241
|
z_exponent = float(z_exponent)
|
|
237
242
|
else:
|
|
238
243
|
raise ValueError(f'Complex exponent {z_exponent} not allowed in cirq.PhasedXZGate')
|
|
239
|
-
if isinstance(x_exponent, numbers.Complex):
|
|
244
|
+
if not isinstance(x_exponent, float) and isinstance(x_exponent, numbers.Complex):
|
|
240
245
|
if isinstance(x_exponent, numbers.Real):
|
|
241
246
|
x_exponent = float(x_exponent)
|
|
242
247
|
else:
|
|
243
248
|
raise ValueError(f'Complex exponent {x_exponent} not allowed in cirq.PhasedXZGate')
|
|
244
|
-
if isinstance(axis_phase_exponent,
|
|
249
|
+
if not isinstance(axis_phase_exponent, float) and isinstance(
|
|
250
|
+
axis_phase_exponent, numbers.Complex
|
|
251
|
+
):
|
|
245
252
|
if isinstance(axis_phase_exponent, numbers.Real):
|
|
246
253
|
axis_phase_exponent = float(axis_phase_exponent)
|
|
247
254
|
else:
|
cirq/ops/projector.py
CHANGED
|
@@ -4,7 +4,8 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import itertools
|
|
6
6
|
import math
|
|
7
|
-
from
|
|
7
|
+
from collections.abc import Iterable, Mapping
|
|
8
|
+
from typing import Any, TYPE_CHECKING
|
|
8
9
|
|
|
9
10
|
import numpy as np
|
|
10
11
|
from scipy.sparse import csr_matrix
|
cirq/ops/qubit_manager.py
CHANGED
cirq/ops/qubit_order.py
CHANGED
cirq/ops/qubit_order_or_list.py
CHANGED
cirq/ops/random_gate_channel.py
CHANGED
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
17
|
import numbers
|
|
18
|
-
from
|
|
18
|
+
from collections.abc import Set
|
|
19
|
+
from typing import Any, cast, SupportsFloat, TYPE_CHECKING
|
|
19
20
|
|
|
20
21
|
import numpy as np
|
|
21
22
|
|
|
@@ -74,7 +75,7 @@ class RandomGateChannel(raw_types.Gate):
|
|
|
74
75
|
self.sub_gate
|
|
75
76
|
)
|
|
76
77
|
|
|
77
|
-
def _parameter_names_(self) ->
|
|
78
|
+
def _parameter_names_(self) -> Set[str]:
|
|
78
79
|
return protocols.parameter_names(self.probability) | protocols.parameter_names(
|
|
79
80
|
self.sub_gate
|
|
80
81
|
)
|