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
cirq/study/result_test.py
CHANGED
|
@@ -25,12 +25,12 @@ import cirq.testing
|
|
|
25
25
|
from cirq.study.result import _pack_digits
|
|
26
26
|
|
|
27
27
|
|
|
28
|
-
def test_result_init():
|
|
28
|
+
def test_result_init() -> None:
|
|
29
29
|
assert cirq.ResultDict(params=cirq.ParamResolver({}), measurements=None).repetitions == 0
|
|
30
30
|
assert cirq.ResultDict(params=cirq.ParamResolver({}), measurements={}).repetitions == 0
|
|
31
31
|
|
|
32
32
|
|
|
33
|
-
def test_default_repetitions():
|
|
33
|
+
def test_default_repetitions() -> None:
|
|
34
34
|
class MyResult(cirq.Result):
|
|
35
35
|
def __init__(self, records):
|
|
36
36
|
self._records = records
|
|
@@ -55,7 +55,7 @@ def test_default_repetitions():
|
|
|
55
55
|
assert MyResult({'a': np.zeros((5, 2, 3))}).repetitions == 5
|
|
56
56
|
|
|
57
57
|
|
|
58
|
-
def test_repr():
|
|
58
|
+
def test_repr() -> None:
|
|
59
59
|
v = cirq.ResultDict(
|
|
60
60
|
params=cirq.ParamResolver({'a': 2}), measurements={'xy': np.array([[1, 0], [0, 1]])}
|
|
61
61
|
)
|
|
@@ -68,7 +68,7 @@ def test_repr():
|
|
|
68
68
|
cirq.testing.assert_equivalent_repr(v)
|
|
69
69
|
|
|
70
70
|
|
|
71
|
-
def test_construct_from_measurements():
|
|
71
|
+
def test_construct_from_measurements() -> None:
|
|
72
72
|
r = cirq.ResultDict(
|
|
73
73
|
params=None,
|
|
74
74
|
measurements={'a': np.array([[0, 0], [1, 1]]), 'b': np.array([[0, 0, 0], [1, 1, 1]])},
|
|
@@ -79,7 +79,7 @@ def test_construct_from_measurements():
|
|
|
79
79
|
assert np.all(r.records['b'] == np.array([[[0, 0, 0]], [[1, 1, 1]]]))
|
|
80
80
|
|
|
81
81
|
|
|
82
|
-
def test_construct_from_repeated_measurements():
|
|
82
|
+
def test_construct_from_repeated_measurements() -> None:
|
|
83
83
|
r = cirq.ResultDict(
|
|
84
84
|
params=None,
|
|
85
85
|
records={
|
|
@@ -104,13 +104,13 @@ def test_construct_from_repeated_measurements():
|
|
|
104
104
|
assert r2.repetitions == 2
|
|
105
105
|
|
|
106
106
|
|
|
107
|
-
def test_empty_measurements():
|
|
107
|
+
def test_empty_measurements() -> None:
|
|
108
108
|
assert cirq.ResultDict(params=None).repetitions == 0
|
|
109
109
|
assert cirq.ResultDict(params=None, measurements={}).repetitions == 0
|
|
110
110
|
assert cirq.ResultDict(params=None, records={}).repetitions == 0
|
|
111
111
|
|
|
112
112
|
|
|
113
|
-
def test_str():
|
|
113
|
+
def test_str() -> None:
|
|
114
114
|
result = cirq.ResultDict(
|
|
115
115
|
params=cirq.ParamResolver({}),
|
|
116
116
|
measurements={
|
|
@@ -136,7 +136,7 @@ def test_str():
|
|
|
136
136
|
assert str(result) == 'c=1, 0\nc=0, 1'
|
|
137
137
|
|
|
138
138
|
|
|
139
|
-
def test_df():
|
|
139
|
+
def test_df() -> None:
|
|
140
140
|
result = cirq.ResultDict(
|
|
141
141
|
params=cirq.ParamResolver({}),
|
|
142
142
|
measurements={
|
|
@@ -156,7 +156,7 @@ def test_df():
|
|
|
156
156
|
assert df.c.value_counts().to_dict() == {0: 3, 1: 2}
|
|
157
157
|
|
|
158
158
|
|
|
159
|
-
def test_df_large():
|
|
159
|
+
def test_df_large() -> None:
|
|
160
160
|
result = cirq.ResultDict(
|
|
161
161
|
params=cirq.ParamResolver({}),
|
|
162
162
|
measurements={
|
|
@@ -171,7 +171,7 @@ def test_df_large():
|
|
|
171
171
|
assert result.data['d'].dtype == object
|
|
172
172
|
|
|
173
173
|
|
|
174
|
-
def test_histogram():
|
|
174
|
+
def test_histogram() -> None:
|
|
175
175
|
result = cirq.ResultDict(
|
|
176
176
|
params=cirq.ParamResolver({}),
|
|
177
177
|
measurements={
|
|
@@ -188,7 +188,7 @@ def test_histogram():
|
|
|
188
188
|
assert result.histogram(key='c') == collections.Counter({0: 3, 1: 2})
|
|
189
189
|
|
|
190
190
|
|
|
191
|
-
def test_multi_measurement_histogram():
|
|
191
|
+
def test_multi_measurement_histogram() -> None:
|
|
192
192
|
result = cirq.ResultDict(
|
|
193
193
|
params=cirq.ParamResolver({}),
|
|
194
194
|
measurements={
|
|
@@ -222,7 +222,7 @@ def test_multi_measurement_histogram():
|
|
|
222
222
|
)
|
|
223
223
|
|
|
224
224
|
|
|
225
|
-
def test_result_equality():
|
|
225
|
+
def test_result_equality() -> None:
|
|
226
226
|
et = cirq.testing.EqualsTester()
|
|
227
227
|
et.add_equality_group(
|
|
228
228
|
cirq.ResultDict(params=cirq.ParamResolver({}), measurements={'a': np.array([[0]] * 5)}),
|
|
@@ -239,7 +239,7 @@ def test_result_equality():
|
|
|
239
239
|
)
|
|
240
240
|
|
|
241
241
|
|
|
242
|
-
def test_result_addition_valid():
|
|
242
|
+
def test_result_addition_valid() -> None:
|
|
243
243
|
a = cirq.ResultDict(
|
|
244
244
|
params=cirq.ParamResolver({'ax': 1}),
|
|
245
245
|
measurements={
|
|
@@ -278,7 +278,7 @@ def test_result_addition_valid():
|
|
|
278
278
|
)
|
|
279
279
|
|
|
280
280
|
|
|
281
|
-
def test_result_addition_invalid():
|
|
281
|
+
def test_result_addition_invalid() -> None:
|
|
282
282
|
a = cirq.ResultDict(
|
|
283
283
|
params=cirq.ParamResolver({'ax': 1}),
|
|
284
284
|
measurements={
|
|
@@ -324,10 +324,10 @@ def test_result_addition_invalid():
|
|
|
324
324
|
with pytest.raises(ValueError, match='different measurement shapes'):
|
|
325
325
|
_ = a + e
|
|
326
326
|
with pytest.raises(TypeError):
|
|
327
|
-
_ = a + 'junk'
|
|
327
|
+
_ = a + 'junk' # type: ignore[operator]
|
|
328
328
|
|
|
329
329
|
|
|
330
|
-
def test_qubit_keys_for_histogram():
|
|
330
|
+
def test_qubit_keys_for_histogram() -> None:
|
|
331
331
|
a, b, c = cirq.LineQubit.range(3)
|
|
332
332
|
circuit = cirq.Circuit(cirq.measure(a, b), cirq.X(c), cirq.measure(c))
|
|
333
333
|
results = cirq.Simulator().run(program=circuit, repetitions=100)
|
|
@@ -339,7 +339,7 @@ def test_qubit_keys_for_histogram():
|
|
|
339
339
|
assert results.histogram(key=[c]) == collections.Counter({1: 100})
|
|
340
340
|
|
|
341
341
|
|
|
342
|
-
def test_text_diagram_jupyter():
|
|
342
|
+
def test_text_diagram_jupyter() -> None:
|
|
343
343
|
result = cirq.ResultDict(
|
|
344
344
|
params=cirq.ParamResolver({}),
|
|
345
345
|
measurements={
|
|
@@ -397,12 +397,12 @@ def test_json_bit_packing_and_dtype(use_records: bool) -> None:
|
|
|
397
397
|
np.testing.assert_allclose(len(bits_json), len(digits_json) / 8, rtol=0.02)
|
|
398
398
|
|
|
399
399
|
|
|
400
|
-
def test_json_bit_packing_error():
|
|
400
|
+
def test_json_bit_packing_error() -> None:
|
|
401
401
|
with pytest.raises(ValueError):
|
|
402
402
|
_pack_digits(np.ones(10), pack_bits='hi mom')
|
|
403
403
|
|
|
404
404
|
|
|
405
|
-
def test_json_bit_packing_force():
|
|
405
|
+
def test_json_bit_packing_force() -> None:
|
|
406
406
|
assert _pack_digits(np.ones(10, dtype=int), pack_bits='force') == _pack_digits(
|
|
407
407
|
np.ones(10), pack_bits='auto'
|
|
408
408
|
)
|
|
@@ -418,7 +418,7 @@ def test_json_bit_packing_force():
|
|
|
418
418
|
)
|
|
419
419
|
|
|
420
420
|
|
|
421
|
-
def test_json_unpack_compat():
|
|
421
|
+
def test_json_unpack_compat() -> None:
|
|
422
422
|
"""Test reading old json with serialized measurements array."""
|
|
423
423
|
old_json = """
|
|
424
424
|
{
|
cirq/study/sweepable.py
CHANGED
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
from __future__ import annotations
|
|
18
18
|
|
|
19
19
|
import warnings
|
|
20
|
-
from
|
|
20
|
+
from collections.abc import Iterable, Iterator, Sequence
|
|
21
|
+
from typing import cast, Protocol
|
|
21
22
|
|
|
22
23
|
from cirq._doc import document
|
|
23
24
|
from cirq.study.resolver import ParamResolver, ParamResolverOrSimilarType
|
cirq/study/sweepable_test.py
CHANGED
|
@@ -24,66 +24,66 @@ import sympy
|
|
|
24
24
|
import cirq
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
def test_to_resolvers_none():
|
|
27
|
+
def test_to_resolvers_none() -> None:
|
|
28
28
|
assert list(cirq.to_resolvers(None)) == [cirq.ParamResolver({})]
|
|
29
29
|
|
|
30
30
|
|
|
31
|
-
def test_to_resolvers_single():
|
|
31
|
+
def test_to_resolvers_single() -> None:
|
|
32
32
|
resolver = cirq.ParamResolver({})
|
|
33
33
|
assert list(cirq.to_resolvers(resolver)) == [resolver]
|
|
34
34
|
assert list(cirq.to_resolvers({})) == [resolver]
|
|
35
35
|
|
|
36
36
|
|
|
37
|
-
def test_to_resolvers_sweep():
|
|
37
|
+
def test_to_resolvers_sweep() -> None:
|
|
38
38
|
sweep = cirq.Linspace('a', 0, 1, 10)
|
|
39
39
|
assert list(cirq.to_resolvers(sweep)) == list(sweep)
|
|
40
40
|
|
|
41
41
|
|
|
42
|
-
def test_to_resolvers_iterable():
|
|
42
|
+
def test_to_resolvers_iterable() -> None:
|
|
43
43
|
resolvers = [cirq.ParamResolver({'a': 2}), cirq.ParamResolver({'a': 1})]
|
|
44
44
|
assert list(cirq.to_resolvers(resolvers)) == resolvers
|
|
45
45
|
assert list(cirq.to_resolvers([{'a': 2}, {'a': 1}])) == resolvers
|
|
46
46
|
|
|
47
47
|
|
|
48
|
-
def test_to_resolvers_iterable_sweeps():
|
|
48
|
+
def test_to_resolvers_iterable_sweeps() -> None:
|
|
49
49
|
sweeps = [cirq.Linspace('a', 0, 1, 10), cirq.Linspace('b', 0, 1, 10)]
|
|
50
50
|
assert list(cirq.to_resolvers(sweeps)) == list(itertools.chain(*sweeps))
|
|
51
51
|
|
|
52
52
|
|
|
53
|
-
def test_to_resolvers_bad():
|
|
53
|
+
def test_to_resolvers_bad() -> None:
|
|
54
54
|
with pytest.raises(TypeError, match='Unrecognized sweepable'):
|
|
55
55
|
for _ in cirq.study.to_resolvers('nope'):
|
|
56
56
|
pass
|
|
57
57
|
|
|
58
58
|
|
|
59
|
-
def test_to_sweeps_none():
|
|
59
|
+
def test_to_sweeps_none() -> None:
|
|
60
60
|
assert cirq.study.to_sweeps(None) == [cirq.UnitSweep]
|
|
61
61
|
|
|
62
62
|
|
|
63
|
-
def test_to_sweeps_single():
|
|
63
|
+
def test_to_sweeps_single() -> None:
|
|
64
64
|
resolver = cirq.ParamResolver({})
|
|
65
65
|
assert cirq.study.to_sweeps(resolver) == [cirq.UnitSweep]
|
|
66
66
|
assert cirq.study.to_sweeps({}) == [cirq.UnitSweep]
|
|
67
67
|
|
|
68
68
|
|
|
69
|
-
def test_to_sweeps_sweep():
|
|
69
|
+
def test_to_sweeps_sweep() -> None:
|
|
70
70
|
sweep = cirq.Linspace('a', 0, 1, 10)
|
|
71
71
|
assert cirq.study.to_sweeps(sweep) == [sweep]
|
|
72
72
|
|
|
73
73
|
|
|
74
|
-
def test_to_sweeps_iterable():
|
|
74
|
+
def test_to_sweeps_iterable() -> None:
|
|
75
75
|
resolvers = [cirq.ParamResolver({'a': 2}), cirq.ParamResolver({'a': 1})]
|
|
76
76
|
sweeps = [cirq.study.Zip(cirq.Points('a', [2])), cirq.study.Zip(cirq.Points('a', [1]))]
|
|
77
77
|
assert cirq.study.to_sweeps(resolvers) == sweeps
|
|
78
78
|
assert cirq.study.to_sweeps([{'a': 2}, {'a': 1}]) == sweeps
|
|
79
79
|
|
|
80
80
|
|
|
81
|
-
def test_to_sweeps_iterable_sweeps():
|
|
81
|
+
def test_to_sweeps_iterable_sweeps() -> None:
|
|
82
82
|
sweeps = [cirq.Linspace('a', 0, 1, 10), cirq.Linspace('b', 0, 1, 10)]
|
|
83
83
|
assert cirq.study.to_sweeps(sweeps) == sweeps
|
|
84
84
|
|
|
85
85
|
|
|
86
|
-
def test_to_sweeps_dictionary_of_list():
|
|
86
|
+
def test_to_sweeps_dictionary_of_list() -> None:
|
|
87
87
|
with pytest.warns(DeprecationWarning, match='dict_to_product_sweep'):
|
|
88
88
|
assert cirq.study.to_sweeps({'t': [0, 2, 3]}) == cirq.study.to_sweeps(
|
|
89
89
|
[{'t': 0}, {'t': 2}, {'t': 3}]
|
|
@@ -98,12 +98,12 @@ def test_to_sweeps_dictionary_of_list():
|
|
|
98
98
|
)
|
|
99
99
|
|
|
100
100
|
|
|
101
|
-
def test_to_sweeps_invalid():
|
|
101
|
+
def test_to_sweeps_invalid() -> None:
|
|
102
102
|
with pytest.raises(TypeError, match='Unrecognized sweepable'):
|
|
103
103
|
cirq.study.to_sweeps('nope')
|
|
104
104
|
|
|
105
105
|
|
|
106
|
-
def test_to_sweep_sweep():
|
|
106
|
+
def test_to_sweep_sweep() -> None:
|
|
107
107
|
sweep = cirq.Linspace('a', 0, 1, 10)
|
|
108
108
|
assert cirq.to_sweep(sweep) is sweep
|
|
109
109
|
|
|
@@ -117,7 +117,7 @@ def test_to_sweep_sweep():
|
|
|
117
117
|
lambda: cirq.ParamResolver({sympy.Symbol('a'): 1}),
|
|
118
118
|
],
|
|
119
119
|
)
|
|
120
|
-
def test_to_sweep_single_resolver(r_gen):
|
|
120
|
+
def test_to_sweep_single_resolver(r_gen) -> None:
|
|
121
121
|
sweep = cirq.to_sweep(r_gen())
|
|
122
122
|
assert isinstance(sweep, cirq.Sweep)
|
|
123
123
|
assert list(sweep) == [cirq.ParamResolver({'a': 1})]
|
|
@@ -141,18 +141,18 @@ def test_to_sweep_single_resolver(r_gen):
|
|
|
141
141
|
lambda: {object(): r for r in [{'a': 1}, {'a': 1.5}]}.values(),
|
|
142
142
|
],
|
|
143
143
|
)
|
|
144
|
-
def test_to_sweep_resolver_list(r_list_gen):
|
|
144
|
+
def test_to_sweep_resolver_list(r_list_gen) -> None:
|
|
145
145
|
sweep = cirq.to_sweep(r_list_gen())
|
|
146
146
|
assert isinstance(sweep, cirq.Sweep)
|
|
147
147
|
assert list(sweep) == [cirq.ParamResolver({'a': 1}), cirq.ParamResolver({'a': 1.5})]
|
|
148
148
|
|
|
149
149
|
|
|
150
|
-
def test_to_sweep_type_error():
|
|
150
|
+
def test_to_sweep_type_error() -> None:
|
|
151
151
|
with pytest.raises(TypeError, match='Unexpected sweep'):
|
|
152
|
-
cirq.to_sweep(5)
|
|
152
|
+
cirq.to_sweep(5) # type: ignore[arg-type]
|
|
153
153
|
|
|
154
154
|
|
|
155
|
-
def test_to_sweeps_with_param_dict_appends_metadata():
|
|
155
|
+
def test_to_sweeps_with_param_dict_appends_metadata() -> None:
|
|
156
156
|
params = {'a': 1, 'b': 2, 'c': 3}
|
|
157
157
|
unit_map = {'a': 'ns', 'b': 'ns'}
|
|
158
158
|
|
|
@@ -167,7 +167,7 @@ def test_to_sweeps_with_param_dict_appends_metadata():
|
|
|
167
167
|
]
|
|
168
168
|
|
|
169
169
|
|
|
170
|
-
def test_to_sweeps_with_param_list_appends_metadata():
|
|
170
|
+
def test_to_sweeps_with_param_list_appends_metadata() -> None:
|
|
171
171
|
resolvers = [cirq.ParamResolver({'a': 2}), cirq.ParamResolver({'a': 1})]
|
|
172
172
|
unit_map = {'a': 'ns'}
|
|
173
173
|
|
cirq/study/sweeps.py
CHANGED
|
@@ -17,7 +17,8 @@ from __future__ import annotations
|
|
|
17
17
|
import abc
|
|
18
18
|
import collections
|
|
19
19
|
import itertools
|
|
20
|
-
from
|
|
20
|
+
from collections.abc import Iterable, Iterator, Mapping, Sequence
|
|
21
|
+
from typing import Any, cast, overload, TYPE_CHECKING, Union
|
|
21
22
|
|
|
22
23
|
import sympy
|
|
23
24
|
|
|
@@ -653,3 +654,27 @@ def dict_to_zip_sweep(factor_dict: ProductOrZipSweepLike) -> Zip:
|
|
|
653
654
|
for k, v in factor_dict.items()
|
|
654
655
|
)
|
|
655
656
|
)
|
|
657
|
+
|
|
658
|
+
|
|
659
|
+
def list_of_dicts_to_zip(params: Sequence[Mapping[str, float]]) -> cirq.Zip:
|
|
660
|
+
"""Converts a list of dictionaries into a cirq.Zip of cirq.Points.
|
|
661
|
+
|
|
662
|
+
This will convert lists of dictionaries into a more compact
|
|
663
|
+
Sweep format. For large sweeps, this can vastly improve performance.
|
|
664
|
+
|
|
665
|
+
This will change [{'a': 1.0, 'b': 2.0}, {'a': 3.0, 'b': 4.0}]
|
|
666
|
+
into cirq.Zip(cirq.Points('a', [1.0, 3.0]), cirq.Points('b', [2.0, 4.0])_)
|
|
667
|
+
|
|
668
|
+
Raises:
|
|
669
|
+
ValueError if the keys in any of the list items are not the same.
|
|
670
|
+
"""
|
|
671
|
+
param_keys: dict[str, list[float]] = collections.defaultdict(list)
|
|
672
|
+
if len(params) < 1:
|
|
673
|
+
raise ValueError("Input dictionary to convert is empty.")
|
|
674
|
+
sweep_keys = params[0].keys()
|
|
675
|
+
for sweep_point in params:
|
|
676
|
+
if set(sweep_point.keys()) != sweep_keys:
|
|
677
|
+
raise ValueError("Keys must be the same in each sweep point.")
|
|
678
|
+
for key, value in sweep_point.items():
|
|
679
|
+
param_keys[key].append(value)
|
|
680
|
+
return Zip(*(Points(key, points) for key, points in param_keys.items()))
|