cirq-core 1.5.0.dev20250409222543__py3-none-any.whl → 1.6.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of cirq-core might be problematic. Click here for more details.
- cirq/__init__.py +16 -17
- cirq/_compat.py +21 -20
- cirq/_compat_test.py +14 -34
- cirq/_doc.py +4 -2
- cirq/_import.py +8 -6
- cirq/_import_test.py +4 -2
- cirq/_version.py +6 -6
- cirq/_version_test.py +2 -2
- cirq/circuits/_block_diagram_drawer.py +11 -10
- cirq/circuits/_block_diagram_drawer_test.py +8 -6
- cirq/circuits/_box_drawing_character_data.py +8 -8
- cirq/circuits/_box_drawing_character_data_test.py +3 -1
- cirq/circuits/_bucket_priority_queue.py +9 -7
- cirq/circuits/_bucket_priority_queue_test.py +22 -20
- cirq/circuits/circuit.py +248 -172
- cirq/circuits/circuit_operation.py +73 -83
- cirq/circuits/circuit_operation_test.py +128 -90
- cirq/circuits/circuit_test.py +211 -151
- cirq/circuits/frozen_circuit.py +23 -60
- cirq/circuits/frozen_circuit_test.py +31 -8
- cirq/circuits/insert_strategy.py +7 -5
- cirq/circuits/insert_strategy_test.py +4 -2
- cirq/circuits/moment.py +88 -40
- cirq/circuits/moment_test.py +128 -51
- cirq/circuits/optimization_pass.py +5 -5
- cirq/circuits/optimization_pass_test.py +10 -10
- cirq/circuits/qasm_output.py +11 -11
- cirq/circuits/qasm_output_test.py +25 -22
- cirq/circuits/text_diagram_drawer.py +23 -38
- cirq/circuits/text_diagram_drawer_test.py +19 -17
- cirq/conftest.py +4 -3
- cirq/contrib/__init__.py +4 -4
- cirq/contrib/acquaintance/__init__.py +1 -1
- cirq/contrib/acquaintance/bipartite.py +5 -8
- cirq/contrib/acquaintance/bipartite_test.py +18 -13
- cirq/contrib/acquaintance/devices.py +2 -2
- cirq/contrib/acquaintance/devices_test.py +5 -3
- cirq/contrib/acquaintance/executor.py +5 -5
- cirq/contrib/acquaintance/executor_test.py +13 -9
- cirq/contrib/acquaintance/gates.py +18 -28
- cirq/contrib/acquaintance/gates_test.py +24 -20
- cirq/contrib/acquaintance/inspection_utils.py +8 -4
- cirq/contrib/acquaintance/inspection_utils_test.py +4 -2
- cirq/contrib/acquaintance/mutation_utils.py +4 -4
- cirq/contrib/acquaintance/mutation_utils_test.py +4 -2
- cirq/contrib/acquaintance/optimizers.py +4 -4
- cirq/contrib/acquaintance/optimizers_test.py +4 -1
- cirq/contrib/acquaintance/permutation.py +15 -27
- cirq/contrib/acquaintance/permutation_test.py +26 -17
- cirq/contrib/acquaintance/shift.py +4 -4
- cirq/contrib/acquaintance/shift_swap_network.py +4 -4
- cirq/contrib/acquaintance/shift_swap_network_test.py +9 -6
- cirq/contrib/acquaintance/shift_test.py +8 -6
- cirq/contrib/acquaintance/strategies/cubic.py +2 -2
- cirq/contrib/acquaintance/strategies/cubic_test.py +4 -2
- cirq/contrib/acquaintance/strategies/quartic_paired.py +6 -6
- cirq/contrib/acquaintance/strategies/quartic_paired_test.py +10 -6
- cirq/contrib/acquaintance/testing.py +2 -0
- cirq/contrib/acquaintance/topological_sort.py +2 -2
- cirq/contrib/acquaintance/topological_sort_test.py +3 -1
- cirq/contrib/bayesian_network/bayesian_network_gate.py +9 -10
- cirq/contrib/bayesian_network/bayesian_network_gate_test.py +14 -9
- cirq/contrib/circuitdag/circuit_dag.py +4 -4
- cirq/contrib/circuitdag/circuit_dag_test.py +17 -15
- cirq/contrib/custom_simulators/custom_state_simulator.py +5 -5
- cirq/contrib/custom_simulators/custom_state_simulator_test.py +22 -17
- cirq/contrib/graph_device/graph_device.py +12 -11
- cirq/contrib/graph_device/graph_device_test.py +18 -14
- cirq/contrib/graph_device/hypergraph.py +16 -14
- cirq/contrib/graph_device/hypergraph_test.py +13 -11
- cirq/contrib/graph_device/uniform_graph_device.py +6 -4
- cirq/contrib/graph_device/uniform_graph_device_test.py +11 -3
- cirq/contrib/hacks/disable_validation.py +6 -1
- cirq/contrib/hacks/disable_validation_test.py +3 -1
- cirq/contrib/json.py +31 -5
- cirq/contrib/json_test.py +6 -3
- cirq/contrib/json_test_data/DampedReadoutNoiseModel.json +12 -0
- cirq/contrib/json_test_data/DampedReadoutNoiseModel.repr +4 -0
- cirq/contrib/json_test_data/DepolarizingNoiseModel.json +12 -0
- cirq/contrib/json_test_data/DepolarizingNoiseModel.repr +4 -0
- cirq/contrib/json_test_data/DepolarizingWithDampedReadoutNoiseModel.json +6 -0
- cirq/contrib/json_test_data/DepolarizingWithDampedReadoutNoiseModel.repr +1 -0
- cirq/contrib/json_test_data/DepolarizingWithReadoutNoiseModel.json +5 -0
- cirq/contrib/json_test_data/DepolarizingWithReadoutNoiseModel.repr +1 -0
- cirq/contrib/json_test_data/ReadoutNoiseModel.json +12 -0
- cirq/contrib/json_test_data/ReadoutNoiseModel.repr +4 -0
- cirq/contrib/json_test_data/__init__.py +17 -0
- cirq/contrib/json_test_data/spec.py +32 -0
- cirq/contrib/noise_models/noise_models.py +119 -5
- cirq/contrib/noise_models/noise_models_test.py +37 -9
- cirq/contrib/paulistring/clifford_optimize.py +6 -4
- cirq/contrib/paulistring/clifford_optimize_test.py +6 -5
- cirq/contrib/paulistring/clifford_target_gateset.py +10 -10
- cirq/contrib/paulistring/clifford_target_gateset_test.py +13 -11
- cirq/contrib/paulistring/optimize.py +2 -0
- cirq/contrib/paulistring/optimize_test.py +4 -3
- cirq/contrib/paulistring/pauli_string_dag.py +2 -0
- cirq/contrib/paulistring/pauli_string_dag_test.py +3 -1
- cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py +255 -120
- cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation_test.py +398 -19
- cirq/contrib/paulistring/pauli_string_optimize.py +7 -1
- cirq/contrib/paulistring/pauli_string_optimize_test.py +5 -3
- cirq/contrib/paulistring/recombine.py +6 -4
- cirq/contrib/paulistring/recombine_test.py +3 -1
- cirq/contrib/paulistring/separate.py +9 -6
- cirq/contrib/paulistring/separate_test.py +3 -1
- cirq/contrib/qasm_import/_lexer.py +3 -2
- cirq/contrib/qasm_import/_lexer_test.py +49 -13
- cirq/contrib/qasm_import/_parser.py +547 -83
- cirq/contrib/qasm_import/_parser_test.py +988 -97
- cirq/contrib/qasm_import/exception.py +2 -0
- cirq/contrib/qasm_import/qasm.py +8 -2
- cirq/contrib/qasm_import/qasm_test.py +7 -4
- cirq/contrib/qcircuit/qcircuit_diagram_info.py +5 -5
- cirq/contrib/qcircuit/qcircuit_diagram_info_test.py +4 -1
- cirq/contrib/qcircuit/qcircuit_pdf.py +7 -3
- cirq/contrib/qcircuit/qcircuit_pdf_test.py +3 -1
- cirq/contrib/qcircuit/qcircuit_test.py +10 -8
- cirq/contrib/quantum_volume/quantum_volume.py +31 -27
- cirq/contrib/quantum_volume/quantum_volume_test.py +19 -16
- cirq/contrib/quimb/density_matrix.py +15 -14
- cirq/contrib/quimb/density_matrix_test.py +10 -7
- cirq/contrib/quimb/grid_circuits.py +5 -2
- cirq/contrib/quimb/grid_circuits_test.py +3 -0
- cirq/contrib/quimb/mps_simulator.py +20 -20
- cirq/contrib/quimb/mps_simulator_test.py +3 -0
- cirq/contrib/quimb/state_vector.py +12 -11
- cirq/contrib/quimb/state_vector_test.py +3 -0
- cirq/contrib/quirk/export_to_quirk.py +5 -3
- cirq/contrib/quirk/export_to_quirk_test.py +18 -16
- cirq/contrib/quirk/linearize_circuit.py +2 -0
- cirq/contrib/quirk/quirk_gate.py +18 -17
- cirq/contrib/routing/device.py +5 -3
- cirq/contrib/routing/device_test.py +2 -0
- cirq/contrib/routing/greedy.py +10 -21
- cirq/contrib/routing/greedy_test.py +4 -2
- cirq/contrib/routing/initialization.py +2 -2
- cirq/contrib/routing/initialization_test.py +5 -3
- cirq/contrib/routing/router.py +9 -5
- cirq/contrib/routing/router_test.py +2 -0
- cirq/contrib/routing/swap_network.py +3 -3
- cirq/contrib/routing/swap_network_test.py +3 -1
- cirq/contrib/routing/utils.py +2 -2
- cirq/contrib/routing/utils_test.py +3 -0
- cirq/contrib/shuffle_circuits/shuffle_circuits_with_readout_benchmarking.py +15 -9
- cirq/contrib/shuffle_circuits/shuffle_circuits_with_readout_benchmarking_test.py +3 -0
- cirq/contrib/svg/svg.py +3 -3
- cirq/contrib/svg/svg_test.py +8 -5
- cirq/devices/device.py +4 -4
- cirq/devices/device_test.py +7 -4
- cirq/devices/grid_device_metadata.py +10 -10
- cirq/devices/grid_device_metadata_test.py +3 -0
- cirq/devices/grid_qubit.py +29 -21
- cirq/devices/grid_qubit_test.py +3 -0
- cirq/devices/insertion_noise_model.py +7 -7
- cirq/devices/insertion_noise_model_test.py +7 -5
- cirq/devices/line_qubit.py +13 -13
- cirq/devices/line_qubit_test.py +2 -0
- cirq/devices/named_topologies.py +18 -29
- cirq/devices/named_topologies_test.py +13 -10
- cirq/devices/noise_model.py +3 -3
- cirq/devices/noise_model_test.py +19 -15
- cirq/devices/noise_properties.py +15 -6
- cirq/devices/noise_properties_test.py +34 -3
- cirq/devices/noise_utils.py +11 -9
- cirq/devices/noise_utils_test.py +2 -0
- cirq/devices/superconducting_qubits_noise_properties.py +23 -22
- cirq/devices/superconducting_qubits_noise_properties_test.py +6 -6
- cirq/devices/thermal_noise_model.py +107 -37
- cirq/devices/thermal_noise_model_test.py +21 -0
- cirq/devices/unconstrained_device.py +5 -3
- cirq/devices/unconstrained_device_test.py +2 -0
- cirq/experiments/__init__.py +4 -2
- cirq/experiments/benchmarking/__init__.py +17 -0
- cirq/experiments/benchmarking/parallel_xeb.py +677 -0
- cirq/experiments/benchmarking/parallel_xeb_test.py +447 -0
- cirq/experiments/fidelity_estimation.py +14 -8
- cirq/experiments/fidelity_estimation_test.py +3 -0
- cirq/experiments/n_qubit_tomography.py +17 -16
- cirq/experiments/n_qubit_tomography_test.py +8 -5
- cirq/experiments/purity_estimation.py +2 -0
- cirq/experiments/purity_estimation_test.py +2 -0
- cirq/experiments/qubit_characterizations.py +207 -103
- cirq/experiments/qubit_characterizations_test.py +40 -12
- cirq/experiments/random_quantum_circuit_generation.py +56 -70
- cirq/experiments/random_quantum_circuit_generation_test.py +11 -8
- cirq/experiments/readout_confusion_matrix.py +24 -22
- cirq/experiments/readout_confusion_matrix_test.py +2 -0
- cirq/experiments/single_qubit_readout_calibration.py +30 -15
- cirq/experiments/single_qubit_readout_calibration_test.py +5 -2
- cirq/experiments/t1_decay_experiment.py +9 -7
- cirq/experiments/t1_decay_experiment_test.py +13 -11
- cirq/experiments/t2_decay_experiment.py +16 -13
- cirq/experiments/t2_decay_experiment_test.py +2 -0
- cirq/experiments/two_qubit_xeb.py +64 -57
- cirq/experiments/two_qubit_xeb_test.py +10 -6
- cirq/experiments/xeb_fitting.py +39 -35
- cirq/experiments/xeb_sampling.py +37 -44
- cirq/experiments/xeb_sampling_test.py +3 -0
- cirq/experiments/xeb_simulation.py +14 -10
- cirq/experiments/xeb_simulation_test.py +5 -5
- cirq/experiments/z_phase_calibration.py +32 -29
- cirq/experiments/z_phase_calibration_test.py +3 -4
- cirq/interop/quirk/cells/__init__.py +1 -1
- cirq/interop/quirk/cells/all_cells.py +7 -2
- cirq/interop/quirk/cells/arithmetic_cells.py +29 -41
- cirq/interop/quirk/cells/arithmetic_cells_test.py +17 -14
- cirq/interop/quirk/cells/cell.py +19 -28
- cirq/interop/quirk/cells/cell_test.py +3 -0
- cirq/interop/quirk/cells/composite_cell.py +13 -28
- cirq/interop/quirk/cells/composite_cell_test.py +2 -0
- cirq/interop/quirk/cells/control_cells.py +15 -15
- cirq/interop/quirk/cells/control_cells_test.py +7 -5
- cirq/interop/quirk/cells/frequency_space_cells.py +4 -3
- cirq/interop/quirk/cells/frequency_space_cells_test.py +3 -1
- cirq/interop/quirk/cells/ignored_cells.py +3 -0
- cirq/interop/quirk/cells/ignored_cells_test.py +3 -1
- cirq/interop/quirk/cells/input_cells.py +7 -5
- cirq/interop/quirk/cells/input_cells_test.py +7 -5
- cirq/interop/quirk/cells/input_rotation_cells.py +15 -13
- cirq/interop/quirk/cells/input_rotation_cells_test.py +9 -7
- cirq/interop/quirk/cells/measurement_cells.py +5 -2
- cirq/interop/quirk/cells/measurement_cells_test.py +3 -1
- cirq/interop/quirk/cells/parse.py +22 -23
- cirq/interop/quirk/cells/parse_test.py +12 -10
- cirq/interop/quirk/cells/qubit_permutation_cells.py +5 -3
- cirq/interop/quirk/cells/qubit_permutation_cells_test.py +9 -7
- cirq/interop/quirk/cells/scalar_cells.py +4 -1
- cirq/interop/quirk/cells/scalar_cells_test.py +3 -1
- cirq/interop/quirk/cells/single_qubit_rotation_cells.py +5 -2
- cirq/interop/quirk/cells/single_qubit_rotation_cells_test.py +5 -3
- cirq/interop/quirk/cells/swap_cell.py +8 -6
- cirq/interop/quirk/cells/swap_cell_test.py +6 -4
- cirq/interop/quirk/cells/testing.py +6 -6
- cirq/interop/quirk/cells/testing_test.py +8 -6
- cirq/interop/quirk/cells/unsupported_cells.py +3 -0
- cirq/interop/quirk/cells/unsupported_cells_test.py +4 -2
- cirq/interop/quirk/url_to_circuit.py +23 -36
- cirq/interop/quirk/url_to_circuit_test.py +4 -1
- cirq/json_resolver_cache.py +14 -12
- cirq/linalg/__init__.py +4 -6
- cirq/linalg/combinators.py +7 -5
- cirq/linalg/combinators_test.py +10 -7
- cirq/linalg/decompositions.py +24 -35
- cirq/linalg/decompositions_test.py +3 -1
- cirq/linalg/diagonalize.py +6 -4
- cirq/linalg/diagonalize_test.py +15 -14
- cirq/linalg/operator_spaces.py +14 -14
- cirq/linalg/operator_spaces_test.py +13 -11
- cirq/linalg/predicates.py +18 -9
- cirq/linalg/predicates_test.py +5 -0
- cirq/linalg/tolerance.py +6 -3
- cirq/linalg/tolerance_test.py +6 -4
- cirq/linalg/transformations.py +23 -20
- cirq/linalg/transformations_test.py +73 -43
- cirq/neutral_atoms/convert_to_neutral_atom_gates.py +9 -3
- cirq/neutral_atoms/convert_to_neutral_atom_gates_test.py +3 -1
- cirq/neutral_atoms/neutral_atom_devices.py +2 -0
- cirq/ops/__init__.py +2 -0
- cirq/ops/arithmetic_operation.py +21 -21
- cirq/ops/arithmetic_operation_test.py +7 -8
- cirq/ops/boolean_hamiltonian.py +23 -22
- cirq/ops/boolean_hamiltonian_test.py +12 -9
- cirq/ops/classically_controlled_operation.py +31 -36
- cirq/ops/classically_controlled_operation_test.py +121 -117
- cirq/ops/clifford_gate.py +98 -81
- cirq/ops/clifford_gate_test.py +72 -57
- cirq/ops/common_channels.py +44 -44
- cirq/ops/common_channels_test.py +83 -81
- cirq/ops/common_gate_families.py +9 -7
- cirq/ops/common_gate_families_test.py +11 -7
- cirq/ops/common_gates.py +164 -183
- cirq/ops/common_gates_test.py +135 -95
- cirq/ops/control_values.py +23 -26
- cirq/ops/control_values_test.py +22 -20
- cirq/ops/controlled_gate.py +64 -112
- cirq/ops/controlled_gate_test.py +130 -35
- cirq/ops/controlled_operation.py +24 -35
- cirq/ops/controlled_operation_test.py +8 -6
- cirq/ops/dense_pauli_string.py +38 -49
- cirq/ops/dense_pauli_string_test.py +4 -2
- cirq/ops/diagonal_gate.py +18 -31
- cirq/ops/diagonal_gate_test.py +13 -13
- cirq/ops/eigen_gate.py +29 -29
- cirq/ops/eigen_gate_test.py +45 -28
- cirq/ops/fourier_transform.py +14 -20
- cirq/ops/fourier_transform_test.py +15 -12
- cirq/ops/fsim_gate.py +43 -42
- cirq/ops/fsim_gate_test.py +29 -29
- cirq/ops/gate_features.py +2 -0
- cirq/ops/gate_features_test.py +5 -3
- cirq/ops/gate_operation.py +43 -65
- cirq/ops/gate_operation_test.py +46 -42
- cirq/ops/gateset.py +28 -40
- cirq/ops/gateset_test.py +4 -2
- cirq/ops/global_phase_op.py +45 -20
- cirq/ops/global_phase_op_test.py +44 -20
- cirq/ops/greedy_qubit_manager.py +10 -8
- cirq/ops/greedy_qubit_manager_test.py +5 -3
- cirq/ops/identity.py +14 -12
- cirq/ops/identity_test.py +24 -20
- cirq/ops/kraus_channel.py +11 -8
- cirq/ops/kraus_channel_test.py +14 -11
- cirq/ops/linear_combinations.py +65 -77
- cirq/ops/linear_combinations_test.py +14 -9
- cirq/ops/matrix_gates.py +21 -18
- cirq/ops/matrix_gates_test.py +16 -0
- cirq/ops/measure_util.py +15 -20
- cirq/ops/measure_util_test.py +2 -0
- cirq/ops/measurement_gate.py +26 -37
- cirq/ops/measurement_gate_test.py +2 -0
- cirq/ops/mixed_unitary_channel.py +12 -9
- cirq/ops/mixed_unitary_channel_test.py +14 -11
- cirq/ops/named_qubit.py +16 -13
- cirq/ops/named_qubit_test.py +15 -13
- cirq/ops/op_tree.py +9 -7
- cirq/ops/op_tree_test.py +22 -19
- cirq/ops/parallel_gate.py +15 -17
- cirq/ops/parallel_gate_test.py +18 -16
- cirq/ops/parity_gates.py +23 -25
- cirq/ops/parity_gates_test.py +36 -32
- cirq/ops/pauli_gates.py +22 -21
- cirq/ops/pauli_gates_test.py +29 -20
- cirq/ops/pauli_interaction_gate.py +15 -19
- cirq/ops/pauli_interaction_gate_test.py +10 -8
- cirq/ops/pauli_measurement_gate.py +23 -35
- cirq/ops/pauli_measurement_gate_test.py +2 -0
- cirq/ops/pauli_string.py +92 -120
- cirq/ops/pauli_string_phasor.py +52 -45
- cirq/ops/pauli_string_phasor_test.py +4 -5
- cirq/ops/pauli_string_raw_types.py +9 -7
- cirq/ops/pauli_string_raw_types_test.py +2 -0
- cirq/ops/pauli_string_test.py +31 -154
- cirq/ops/pauli_sum_exponential.py +12 -12
- cirq/ops/pauli_sum_exponential_test.py +12 -10
- cirq/ops/permutation_gate.py +8 -6
- cirq/ops/permutation_gate_test.py +10 -8
- cirq/ops/phased_iswap_gate.py +16 -16
- cirq/ops/phased_iswap_gate_test.py +17 -15
- cirq/ops/phased_x_gate.py +16 -17
- cirq/ops/phased_x_gate_test.py +18 -16
- cirq/ops/phased_x_z_gate.py +24 -22
- cirq/ops/phased_x_z_gate_test.py +17 -11
- cirq/ops/projector.py +16 -11
- cirq/ops/projector_test.py +19 -16
- cirq/ops/qid_util.py +7 -5
- cirq/ops/qid_util_test.py +2 -0
- cirq/ops/qubit_manager.py +11 -9
- cirq/ops/qubit_manager_test.py +6 -4
- cirq/ops/qubit_order.py +11 -14
- cirq/ops/qubit_order_or_list.py +4 -2
- cirq/ops/qubit_order_test.py +12 -10
- cirq/ops/random_gate_channel.py +12 -10
- cirq/ops/random_gate_channel_test.py +14 -11
- cirq/ops/raw_types.py +109 -129
- cirq/ops/raw_types_test.py +63 -57
- cirq/ops/state_preparation_channel.py +7 -7
- cirq/ops/state_preparation_channel_test.py +11 -9
- cirq/ops/swap_gates.py +13 -15
- cirq/ops/swap_gates_test.py +19 -17
- cirq/ops/tags.py +5 -3
- cirq/ops/tags_test.py +4 -2
- cirq/ops/three_qubit_gates.py +43 -76
- cirq/ops/three_qubit_gates_test.py +19 -17
- cirq/ops/two_qubit_diagonal_gate.py +13 -13
- cirq/ops/two_qubit_diagonal_gate_test.py +10 -8
- cirq/ops/uniform_superposition_gate.py +5 -3
- cirq/ops/uniform_superposition_gate_test.py +5 -3
- cirq/ops/wait_gate.py +17 -14
- cirq/ops/wait_gate_test.py +9 -6
- cirq/protocols/__init__.py +0 -3
- cirq/protocols/act_on_protocol.py +8 -6
- cirq/protocols/act_on_protocol_test.py +15 -12
- cirq/protocols/apply_channel_protocol.py +10 -14
- cirq/protocols/apply_channel_protocol_test.py +2 -0
- cirq/protocols/apply_mixture_protocol.py +13 -42
- cirq/protocols/apply_mixture_protocol_test.py +7 -5
- cirq/protocols/apply_unitary_protocol.py +39 -34
- cirq/protocols/apply_unitary_protocol_test.py +4 -1
- cirq/protocols/approximate_equality_protocol.py +2 -0
- cirq/protocols/approximate_equality_protocol_test.py +2 -0
- cirq/protocols/circuit_diagram_info_protocol.py +58 -42
- cirq/protocols/circuit_diagram_info_protocol_test.py +70 -12
- cirq/protocols/commutes_protocol.py +8 -7
- cirq/protocols/commutes_protocol_test.py +2 -0
- cirq/protocols/control_key_protocol.py +6 -4
- cirq/protocols/control_key_protocol_test.py +3 -1
- cirq/protocols/decompose_protocol.py +49 -48
- cirq/protocols/decompose_protocol_test.py +27 -16
- cirq/protocols/equal_up_to_global_phase_protocol.py +2 -0
- cirq/protocols/equal_up_to_global_phase_protocol_test.py +9 -6
- cirq/protocols/has_stabilizer_effect_protocol.py +7 -5
- cirq/protocols/has_stabilizer_effect_protocol_test.py +7 -5
- cirq/protocols/has_unitary_protocol.py +10 -6
- cirq/protocols/has_unitary_protocol_test.py +13 -8
- cirq/protocols/hash_from_pickle_test.py +2 -11
- cirq/protocols/inverse_protocol.py +13 -16
- cirq/protocols/inverse_protocol_test.py +5 -3
- cirq/protocols/json_serialization.py +35 -54
- cirq/protocols/json_serialization_test.py +14 -21
- cirq/protocols/json_test_data/CXSWAP.json +46 -0
- cirq/protocols/json_test_data/CXSWAP.repr +13 -0
- cirq/protocols/json_test_data/CZSWAP.json +46 -0
- cirq/protocols/json_test_data/CZSWAP.repr +13 -0
- cirq/protocols/json_test_data/CircuitOperation.json +6 -3
- cirq/protocols/json_test_data/CircuitOperation.repr_inward +4 -2
- cirq/protocols/json_test_data/Moment.json +24 -1
- cirq/protocols/json_test_data/Moment.repr +6 -1
- cirq/protocols/json_test_data/ThermalNoiseModel.json +32 -0
- cirq/protocols/json_test_data/ThermalNoiseModel.repr +1 -0
- cirq/protocols/json_test_data/spec.py +6 -2
- cirq/protocols/kraus_protocol.py +47 -7
- cirq/protocols/kraus_protocol_test.py +86 -12
- cirq/protocols/measurement_key_protocol.py +15 -16
- cirq/protocols/measurement_key_protocol_test.py +13 -11
- cirq/protocols/mixture_protocol.py +7 -5
- cirq/protocols/mixture_protocol_test.py +4 -2
- cirq/protocols/mul_protocol.py +2 -3
- cirq/protocols/mul_protocol_test.py +2 -0
- cirq/protocols/pauli_expansion_protocol.py +6 -3
- cirq/protocols/pauli_expansion_protocol_test.py +5 -3
- cirq/protocols/phase_protocol.py +2 -0
- cirq/protocols/phase_protocol_test.py +3 -1
- cirq/protocols/pow_protocol.py +11 -16
- cirq/protocols/pow_protocol_test.py +2 -0
- cirq/protocols/qasm.py +14 -20
- cirq/protocols/qasm_test.py +6 -3
- cirq/protocols/qid_shape_protocol.py +8 -8
- cirq/protocols/qid_shape_protocol_test.py +3 -1
- cirq/protocols/resolve_parameters.py +5 -3
- cirq/protocols/resolve_parameters_test.py +8 -7
- cirq/protocols/trace_distance_bound.py +6 -4
- cirq/protocols/trace_distance_bound_test.py +3 -1
- cirq/protocols/unitary_protocol.py +17 -7
- cirq/protocols/unitary_protocol_test.py +12 -2
- cirq/qis/channels.py +6 -2
- cirq/qis/channels_test.py +20 -16
- cirq/qis/clifford_tableau.py +21 -19
- cirq/qis/clifford_tableau_test.py +2 -2
- cirq/qis/entropy.py +14 -3
- cirq/qis/entropy_test.py +3 -1
- cirq/qis/measures.py +13 -13
- cirq/qis/measures_test.py +20 -14
- cirq/qis/noise_utils.py +2 -0
- cirq/qis/noise_utils_test.py +9 -7
- cirq/qis/quantum_state_representation.py +7 -8
- cirq/qis/states.py +58 -56
- cirq/qis/states_test.py +2 -0
- cirq/sim/classical_simulator.py +23 -22
- cirq/sim/classical_simulator_test.py +2 -0
- cirq/sim/clifford/clifford_simulator.py +23 -21
- cirq/sim/clifford/clifford_simulator_test.py +7 -4
- cirq/sim/clifford/clifford_tableau_simulation_state.py +10 -7
- cirq/sim/clifford/clifford_tableau_simulation_state_test.py +5 -5
- cirq/sim/clifford/stabilizer_ch_form_simulation_state.py +8 -6
- cirq/sim/clifford/stabilizer_ch_form_simulation_state_test.py +8 -6
- cirq/sim/clifford/stabilizer_sampler.py +9 -7
- cirq/sim/clifford/stabilizer_sampler_test.py +4 -2
- cirq/sim/clifford/stabilizer_simulation_state.py +14 -13
- cirq/sim/clifford/stabilizer_simulation_state_test.py +6 -4
- cirq/sim/clifford/stabilizer_state_ch_form.py +13 -11
- cirq/sim/clifford/stabilizer_state_ch_form_test.py +4 -2
- cirq/sim/density_matrix_simulation_state.py +26 -27
- cirq/sim/density_matrix_simulation_state_test.py +10 -8
- cirq/sim/density_matrix_simulator.py +30 -28
- cirq/sim/density_matrix_simulator_test.py +48 -48
- cirq/sim/density_matrix_utils.py +13 -11
- cirq/sim/density_matrix_utils_test.py +38 -36
- cirq/sim/mux.py +33 -31
- cirq/sim/mux_test.py +3 -0
- cirq/sim/simulation_product_state.py +15 -15
- cirq/sim/simulation_product_state_test.py +29 -26
- cirq/sim/simulation_state.py +29 -38
- cirq/sim/simulation_state_base.py +21 -32
- cirq/sim/simulation_state_test.py +15 -13
- cirq/sim/simulation_utils.py +5 -2
- cirq/sim/simulation_utils_test.py +5 -2
- cirq/sim/simulator.py +90 -106
- cirq/sim/simulator_base.py +33 -45
- cirq/sim/simulator_base_test.py +20 -15
- cirq/sim/simulator_test.py +23 -14
- cirq/sim/sparse_simulator.py +19 -17
- cirq/sim/sparse_simulator_test.py +41 -40
- cirq/sim/state_vector.py +15 -12
- cirq/sim/state_vector_simulation_state.py +31 -31
- cirq/sim/state_vector_simulation_state_test.py +16 -14
- cirq/sim/state_vector_simulator.py +17 -14
- cirq/sim/state_vector_simulator_test.py +2 -0
- cirq/sim/state_vector_test.py +6 -3
- cirq/study/flatten_expressions.py +16 -15
- cirq/study/flatten_expressions_test.py +13 -11
- cirq/study/resolver.py +18 -17
- cirq/study/resolver_test.py +22 -20
- cirq/study/result.py +17 -27
- cirq/study/result_test.py +2 -0
- cirq/study/sweepable.py +12 -10
- cirq/study/sweepable_test.py +3 -0
- cirq/study/sweeps.py +42 -61
- cirq/study/sweeps_test.py +33 -0
- cirq/testing/__init__.py +7 -11
- cirq/testing/_compat_test_data/module_a/__init__.py +1 -0
- cirq/testing/_compat_test_data/module_a/module_b/__init__.py +1 -0
- cirq/testing/_compat_test_data/module_a/sub/__init__.py +1 -0
- cirq/testing/circuit_compare.py +8 -17
- cirq/testing/circuit_compare_test.py +2 -0
- cirq/testing/consistent_act_on.py +13 -11
- cirq/testing/consistent_act_on_test.py +5 -3
- cirq/testing/consistent_channels.py +2 -0
- cirq/testing/consistent_channels_test.py +10 -8
- cirq/testing/consistent_controlled_gate_op.py +5 -5
- cirq/testing/consistent_controlled_gate_op_test.py +18 -18
- cirq/testing/consistent_decomposition.py +2 -2
- cirq/testing/consistent_decomposition_test.py +4 -2
- cirq/testing/consistent_pauli_expansion.py +2 -0
- cirq/testing/consistent_pauli_expansion_test.py +3 -1
- cirq/testing/consistent_phase_by.py +2 -0
- cirq/testing/consistent_phase_by_test.py +3 -1
- cirq/testing/consistent_protocols.py +14 -20
- cirq/testing/consistent_protocols_test.py +13 -11
- cirq/testing/consistent_qasm.py +6 -4
- cirq/testing/consistent_qasm_test.py +7 -7
- cirq/testing/consistent_resolve_parameters.py +2 -0
- cirq/testing/consistent_specified_has_unitary.py +2 -2
- cirq/testing/consistent_specified_has_unitary_test.py +6 -4
- cirq/testing/consistent_unitary.py +1 -0
- cirq/testing/consistent_unitary_test.py +4 -2
- cirq/testing/deprecation.py +5 -2
- cirq/testing/deprecation_test.py +5 -2
- cirq/testing/devices.py +7 -4
- cirq/testing/devices_test.py +7 -4
- cirq/testing/equals_tester.py +4 -2
- cirq/testing/equals_tester_test.py +21 -17
- cirq/testing/equivalent_basis_map.py +6 -4
- cirq/testing/equivalent_basis_map_test.py +6 -4
- cirq/testing/equivalent_repr_eval.py +6 -4
- cirq/testing/equivalent_repr_eval_test.py +5 -3
- cirq/testing/gate_features.py +2 -0
- cirq/testing/gate_features_test.py +7 -5
- cirq/testing/json.py +19 -15
- cirq/testing/json_test.py +5 -3
- cirq/testing/lin_alg_utils.py +10 -11
- cirq/testing/lin_alg_utils_test.py +14 -12
- cirq/testing/logs.py +7 -6
- cirq/testing/logs_test.py +9 -7
- cirq/testing/no_identifier_qubit.py +4 -2
- cirq/testing/no_identifier_qubit_test.py +5 -3
- cirq/testing/op_tree.py +2 -0
- cirq/testing/op_tree_test.py +4 -1
- cirq/testing/order_tester.py +2 -0
- cirq/testing/order_tester_test.py +8 -6
- cirq/testing/pytest_utils.py +2 -0
- cirq/testing/pytest_utils_test.py +4 -2
- cirq/testing/random_circuit.py +21 -20
- cirq/testing/random_circuit_test.py +12 -9
- cirq/testing/repr_pretty_tester.py +1 -0
- cirq/testing/repr_pretty_tester_test.py +5 -3
- cirq/testing/routing_devices.py +4 -1
- cirq/testing/routing_devices_test.py +9 -6
- cirq/testing/sample_circuits.py +4 -1
- cirq/testing/sample_circuits_test.py +3 -1
- cirq/testing/sample_gates.py +3 -0
- cirq/testing/sample_gates_test.py +5 -2
- cirq/transformers/__init__.py +11 -4
- cirq/transformers/align.py +9 -7
- cirq/transformers/align_test.py +2 -0
- cirq/transformers/analytical_decompositions/__init__.py +3 -6
- cirq/transformers/analytical_decompositions/clifford_decomposition.py +18 -16
- cirq/transformers/analytical_decompositions/clifford_decomposition_test.py +2 -0
- cirq/transformers/analytical_decompositions/controlled_gate_decomposition.py +19 -16
- cirq/transformers/analytical_decompositions/controlled_gate_decomposition_test.py +2 -0
- cirq/transformers/analytical_decompositions/cphase_to_fsim.py +11 -9
- cirq/transformers/analytical_decompositions/cphase_to_fsim_test.py +5 -3
- cirq/transformers/analytical_decompositions/pauli_string_decomposition.py +5 -3
- cirq/transformers/analytical_decompositions/pauli_string_decomposition_test.py +5 -3
- cirq/transformers/analytical_decompositions/quantum_shannon_decomposition.py +141 -44
- cirq/transformers/analytical_decompositions/quantum_shannon_decomposition_test.py +35 -1
- cirq/transformers/analytical_decompositions/single_qubit_decompositions.py +8 -7
- cirq/transformers/analytical_decompositions/single_qubit_decompositions_test.py +2 -0
- cirq/transformers/analytical_decompositions/single_to_two_qubit_isometry.py +7 -4
- cirq/transformers/analytical_decompositions/single_to_two_qubit_isometry_test.py +3 -0
- cirq/transformers/analytical_decompositions/three_qubit_decomposition.py +11 -19
- cirq/transformers/analytical_decompositions/three_qubit_decomposition_test.py +8 -33
- cirq/transformers/analytical_decompositions/two_qubit_state_preparation.py +9 -11
- cirq/transformers/analytical_decompositions/two_qubit_state_preparation_test.py +2 -0
- cirq/transformers/analytical_decompositions/two_qubit_to_cz.py +91 -27
- cirq/transformers/analytical_decompositions/two_qubit_to_cz_test.py +36 -7
- cirq/transformers/analytical_decompositions/two_qubit_to_fsim.py +20 -21
- cirq/transformers/analytical_decompositions/two_qubit_to_fsim_test.py +8 -6
- cirq/transformers/analytical_decompositions/two_qubit_to_ms.py +13 -15
- cirq/transformers/analytical_decompositions/two_qubit_to_ms_test.py +3 -1
- cirq/transformers/analytical_decompositions/two_qubit_to_sqrt_iswap.py +39 -41
- cirq/transformers/analytical_decompositions/two_qubit_to_sqrt_iswap_test.py +2 -0
- cirq/transformers/drop_empty_moments.py +5 -3
- cirq/transformers/drop_empty_moments_test.py +4 -2
- cirq/transformers/drop_negligible_operations.py +7 -5
- cirq/transformers/drop_negligible_operations_test.py +2 -0
- cirq/transformers/dynamical_decoupling.py +49 -42
- cirq/transformers/dynamical_decoupling_test.py +223 -205
- cirq/transformers/eject_phased_paulis.py +28 -26
- cirq/transformers/eject_phased_paulis_test.py +12 -9
- cirq/transformers/eject_z.py +12 -12
- cirq/transformers/eject_z_test.py +2 -2
- cirq/transformers/expand_composite.py +6 -4
- cirq/transformers/expand_composite_test.py +3 -1
- cirq/transformers/gauge_compiling/__init__.py +3 -1
- cirq/transformers/gauge_compiling/cphase_gauge.py +2 -0
- cirq/transformers/gauge_compiling/cphase_gauge_test.py +2 -0
- cirq/transformers/gauge_compiling/cz_gauge.py +2 -0
- cirq/transformers/gauge_compiling/cz_gauge_test.py +1 -0
- cirq/transformers/gauge_compiling/gauge_compiling.py +45 -41
- cirq/transformers/gauge_compiling/gauge_compiling_test.py +2 -0
- cirq/transformers/gauge_compiling/gauge_compiling_test_utils.py +1 -0
- cirq/transformers/gauge_compiling/gauge_compiling_test_utils_test.py +5 -1
- cirq/transformers/gauge_compiling/iswap_gauge.py +2 -0
- cirq/transformers/gauge_compiling/iswap_gauge_test.py +1 -0
- cirq/transformers/gauge_compiling/spin_inversion_gauge.py +2 -0
- cirq/transformers/gauge_compiling/spin_inversion_gauge_test.py +2 -0
- cirq/transformers/gauge_compiling/sqrt_cz_gauge.py +7 -6
- cirq/transformers/gauge_compiling/sqrt_cz_gauge_test.py +2 -0
- cirq/transformers/gauge_compiling/sqrt_iswap_gauge.py +2 -0
- cirq/transformers/gauge_compiling/sqrt_iswap_gauge_test.py +2 -0
- cirq/transformers/heuristic_decompositions/gate_tabulation_math_utils.py +6 -3
- cirq/transformers/heuristic_decompositions/gate_tabulation_math_utils_test.py +3 -0
- cirq/transformers/heuristic_decompositions/two_qubit_gate_tabulation.py +12 -9
- cirq/transformers/heuristic_decompositions/two_qubit_gate_tabulation_test.py +9 -7
- cirq/transformers/insertion_sort.py +8 -6
- cirq/transformers/insertion_sort_test.py +3 -1
- cirq/transformers/measurement_transformers.py +29 -29
- cirq/transformers/measurement_transformers_test.py +2 -0
- cirq/transformers/merge_k_qubit_gates.py +12 -10
- cirq/transformers/merge_k_qubit_gates_test.py +18 -18
- cirq/transformers/merge_single_qubit_gates.py +197 -20
- cirq/transformers/merge_single_qubit_gates_test.py +177 -5
- cirq/transformers/noise_adding.py +5 -3
- cirq/transformers/noise_adding_test.py +2 -0
- cirq/transformers/optimize_for_target_gateset.py +19 -17
- cirq/transformers/optimize_for_target_gateset_test.py +11 -8
- cirq/transformers/qubit_management_transformers.py +13 -11
- cirq/transformers/qubit_management_transformers_test.py +5 -3
- cirq/transformers/randomized_measurements.py +16 -14
- cirq/transformers/randomized_measurements_test.py +10 -4
- cirq/transformers/routing/initial_mapper.py +6 -4
- cirq/transformers/routing/initial_mapper_test.py +2 -0
- cirq/transformers/routing/line_initial_mapper.py +16 -14
- cirq/transformers/routing/line_initial_mapper_test.py +9 -7
- cirq/transformers/routing/mapping_manager.py +10 -10
- cirq/transformers/routing/mapping_manager_test.py +2 -0
- cirq/transformers/routing/route_circuit_cqc.py +33 -31
- cirq/transformers/routing/route_circuit_cqc_test.py +15 -13
- cirq/transformers/routing/visualize_routed_circuit.py +8 -7
- cirq/transformers/routing/visualize_routed_circuit_test.py +4 -2
- cirq/transformers/stratify.py +17 -15
- cirq/transformers/stratify_test.py +3 -0
- cirq/transformers/symbolize.py +103 -0
- cirq/transformers/symbolize_test.py +62 -0
- cirq/transformers/synchronize_terminal_measurements.py +10 -10
- cirq/transformers/synchronize_terminal_measurements_test.py +12 -10
- cirq/transformers/tag_transformers.py +97 -0
- cirq/transformers/tag_transformers_test.py +103 -0
- cirq/transformers/target_gatesets/compilation_target_gateset.py +21 -19
- cirq/transformers/target_gatesets/compilation_target_gateset_test.py +20 -16
- cirq/transformers/target_gatesets/cz_gateset.py +7 -5
- cirq/transformers/target_gatesets/cz_gateset_test.py +21 -19
- cirq/transformers/target_gatesets/sqrt_iswap_gateset.py +9 -7
- cirq/transformers/target_gatesets/sqrt_iswap_gateset_test.py +25 -25
- cirq/transformers/transformer_api.py +34 -47
- cirq/transformers/transformer_api_test.py +9 -8
- cirq/transformers/transformer_primitives.py +39 -49
- cirq/transformers/transformer_primitives_test.py +10 -17
- cirq/value/abc_alt.py +6 -4
- cirq/value/abc_alt_test.py +5 -3
- cirq/value/angle.py +11 -12
- cirq/value/angle_test.py +5 -3
- cirq/value/classical_data.py +27 -27
- cirq/value/classical_data_test.py +11 -8
- cirq/value/condition.py +26 -24
- cirq/value/condition_test.py +2 -0
- cirq/value/digits.py +14 -11
- cirq/value/digits_test.py +2 -0
- cirq/value/duration.py +23 -20
- cirq/value/duration_test.py +2 -0
- cirq/value/linear_dict.py +25 -30
- cirq/value/linear_dict_test.py +10 -8
- cirq/value/measurement_key.py +12 -12
- cirq/value/measurement_key_test.py +2 -0
- cirq/value/periodic_value.py +4 -4
- cirq/value/periodic_value_test.py +11 -7
- cirq/value/probability.py +3 -1
- cirq/value/probability_test.py +4 -2
- cirq/value/product_state.py +15 -13
- cirq/value/product_state_test.py +4 -1
- cirq/value/random_state.py +2 -0
- cirq/value/random_state_test.py +5 -3
- cirq/value/timestamp.py +11 -7
- cirq/value/timestamp_test.py +14 -12
- cirq/value/type_alias.py +4 -4
- cirq/value/value_equality_attr.py +8 -9
- cirq/value/value_equality_attr_test.py +14 -11
- cirq/vis/density_matrix.py +3 -3
- cirq/vis/density_matrix_test.py +20 -17
- cirq/vis/heatmap.py +24 -37
- cirq/vis/heatmap_test.py +3 -0
- cirq/vis/histogram.py +9 -6
- cirq/vis/histogram_test.py +5 -2
- cirq/vis/state_histogram.py +10 -8
- cirq/vis/state_histogram_test.py +7 -5
- cirq/vis/vis_utils.py +4 -1
- cirq/vis/vis_utils_test.py +4 -1
- cirq/work/collector.py +12 -18
- cirq/work/collector_test.py +15 -10
- cirq/work/observable_grouping.py +6 -7
- cirq/work/observable_grouping_test.py +10 -9
- cirq/work/observable_measurement.py +47 -45
- cirq/work/observable_measurement_data.py +22 -17
- cirq/work/observable_measurement_data_test.py +4 -1
- cirq/work/observable_measurement_test.py +48 -29
- cirq/work/observable_readout_calibration.py +5 -2
- cirq/work/observable_readout_calibration_test.py +5 -2
- cirq/work/observable_settings.py +13 -22
- cirq/work/observable_settings_test.py +9 -7
- cirq/work/pauli_sum_collector.py +12 -10
- cirq/work/pauli_sum_collector_test.py +9 -9
- cirq/work/sampler.py +42 -43
- cirq/work/sampler_test.py +31 -24
- cirq/work/zeros_sampler.py +6 -4
- cirq/work/zeros_sampler_test.py +7 -5
- {cirq_core-1.5.0.dev20250409222543.dist-info → cirq_core-1.6.0.dist-info}/METADATA +7 -8
- cirq_core-1.6.0.dist-info/RECORD +1241 -0
- {cirq_core-1.5.0.dev20250409222543.dist-info → cirq_core-1.6.0.dist-info}/WHEEL +1 -1
- cirq_core-1.5.0.dev20250409222543.dist-info/RECORD +0 -1216
- {cirq_core-1.5.0.dev20250409222543.dist-info → cirq_core-1.6.0.dist-info}/licenses/LICENSE +0 -0
- {cirq_core-1.5.0.dev20250409222543.dist-info → cirq_core-1.6.0.dist-info}/top_level.txt +0 -0
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
14
17
|
import dataclasses
|
|
15
18
|
import datetime
|
|
16
19
|
import gzip
|
|
@@ -18,21 +21,7 @@ import json
|
|
|
18
21
|
import numbers
|
|
19
22
|
import pathlib
|
|
20
23
|
from types import NotImplementedType
|
|
21
|
-
from typing import
|
|
22
|
-
Any,
|
|
23
|
-
Callable,
|
|
24
|
-
cast,
|
|
25
|
-
Dict,
|
|
26
|
-
IO,
|
|
27
|
-
Iterable,
|
|
28
|
-
List,
|
|
29
|
-
Optional,
|
|
30
|
-
overload,
|
|
31
|
-
Sequence,
|
|
32
|
-
Tuple,
|
|
33
|
-
Type,
|
|
34
|
-
Union,
|
|
35
|
-
)
|
|
24
|
+
from typing import Any, Callable, cast, IO, Iterable, overload, Sequence
|
|
36
25
|
|
|
37
26
|
import attrs
|
|
38
27
|
import numpy as np
|
|
@@ -42,16 +31,16 @@ from typing_extensions import Protocol
|
|
|
42
31
|
|
|
43
32
|
from cirq._doc import doc_private
|
|
44
33
|
|
|
45
|
-
ObjectFactory =
|
|
34
|
+
ObjectFactory = type | Callable[..., Any]
|
|
46
35
|
|
|
47
36
|
|
|
48
37
|
class JsonResolver(Protocol):
|
|
49
38
|
"""Protocol for json resolver functions passed to read_json."""
|
|
50
39
|
|
|
51
|
-
def __call__(self, cirq_type: str) ->
|
|
40
|
+
def __call__(self, cirq_type: str) -> ObjectFactory | None: ...
|
|
52
41
|
|
|
53
42
|
|
|
54
|
-
def _lazy_resolver(dict_factory: Callable[[],
|
|
43
|
+
def _lazy_resolver(dict_factory: Callable[[], dict[str, ObjectFactory]]) -> JsonResolver:
|
|
55
44
|
"""A lazy JsonResolver based on a dict_factory.
|
|
56
45
|
|
|
57
46
|
It only calls dict_factory when the first key is accessed.
|
|
@@ -61,13 +50,13 @@ def _lazy_resolver(dict_factory: Callable[[], Dict[str, ObjectFactory]]) -> Json
|
|
|
61
50
|
class resolution map - it is assumed to be cached
|
|
62
51
|
"""
|
|
63
52
|
|
|
64
|
-
def json_resolver(cirq_type: str) ->
|
|
53
|
+
def json_resolver(cirq_type: str) -> ObjectFactory | None:
|
|
65
54
|
return dict_factory().get(cirq_type, None)
|
|
66
55
|
|
|
67
56
|
return json_resolver
|
|
68
57
|
|
|
69
58
|
|
|
70
|
-
DEFAULT_RESOLVERS:
|
|
59
|
+
DEFAULT_RESOLVERS: list[JsonResolver] = []
|
|
71
60
|
"""A default list of 'JsonResolver' functions for use in read_json.
|
|
72
61
|
|
|
73
62
|
For more information about cirq_type resolution during deserialization
|
|
@@ -87,7 +76,7 @@ prepended to this list:
|
|
|
87
76
|
"""
|
|
88
77
|
|
|
89
78
|
|
|
90
|
-
def _register_resolver(dict_factory: Callable[[],
|
|
79
|
+
def _register_resolver(dict_factory: Callable[[], dict[str, ObjectFactory]]) -> None:
|
|
91
80
|
"""Register a resolver based on a dict factory for lazy initialization.
|
|
92
81
|
|
|
93
82
|
Cirq modules are the ones referred in cirq/__init__.py. If a Cirq module
|
|
@@ -124,7 +113,7 @@ class SupportsJSON(Protocol):
|
|
|
124
113
|
"""
|
|
125
114
|
|
|
126
115
|
@doc_private
|
|
127
|
-
def _json_dict_(self) ->
|
|
116
|
+
def _json_dict_(self) -> None | NotImplementedType | dict[Any, Any]:
|
|
128
117
|
pass
|
|
129
118
|
|
|
130
119
|
|
|
@@ -145,7 +134,7 @@ class HasJSONNamespace(Protocol):
|
|
|
145
134
|
pass
|
|
146
135
|
|
|
147
136
|
|
|
148
|
-
def obj_to_dict_helper(obj: Any, attribute_names: Iterable[str]) ->
|
|
137
|
+
def obj_to_dict_helper(obj: Any, attribute_names: Iterable[str]) -> dict[str, Any]:
|
|
149
138
|
"""Construct a dictionary containing attributes from obj
|
|
150
139
|
|
|
151
140
|
This is useful as a helper function in objects implementing the
|
|
@@ -166,8 +155,7 @@ def obj_to_dict_helper(obj: Any, attribute_names: Iterable[str]) -> Dict[str, An
|
|
|
166
155
|
return d
|
|
167
156
|
|
|
168
157
|
|
|
169
|
-
|
|
170
|
-
def dataclass_json_dict(obj: Any) -> Dict[str, Any]:
|
|
158
|
+
def dataclass_json_dict(obj: Any) -> dict[str, Any]:
|
|
171
159
|
"""Return a dictionary suitable for `_json_dict_` from a dataclass.
|
|
172
160
|
|
|
173
161
|
Dataclasses keep track of their relevant fields, so we can automatically generate these.
|
|
@@ -183,7 +171,7 @@ def dataclass_json_dict(obj: Any) -> Dict[str, Any]:
|
|
|
183
171
|
return obj_to_dict_helper(obj, attribute_names)
|
|
184
172
|
|
|
185
173
|
|
|
186
|
-
def attrs_json_dict(obj: Any) ->
|
|
174
|
+
def attrs_json_dict(obj: Any) -> dict[str, Any]:
|
|
187
175
|
"""Return a dictionary suitable for `_json_dict_` from an attrs dataclass."""
|
|
188
176
|
attribute_names = [f.name for f in attrs.fields(type(obj))]
|
|
189
177
|
return obj_to_dict_helper(obj, attribute_names)
|
|
@@ -336,8 +324,8 @@ class ObjectHook:
|
|
|
336
324
|
|
|
337
325
|
def __init__(self, resolvers: Sequence[JsonResolver]) -> None:
|
|
338
326
|
self.resolvers = resolvers
|
|
339
|
-
self.memo:
|
|
340
|
-
self.context_map:
|
|
327
|
+
self.memo: dict[int, SerializableByKey] = {}
|
|
328
|
+
self.context_map: dict[int, SerializableByKey] = {}
|
|
341
329
|
|
|
342
330
|
def __call__(self, d):
|
|
343
331
|
cirq_type = d.get('cirq_type')
|
|
@@ -380,7 +368,7 @@ class SerializableByKey(SupportsJSON):
|
|
|
380
368
|
"""
|
|
381
369
|
|
|
382
370
|
|
|
383
|
-
def json_namespace(type_obj:
|
|
371
|
+
def json_namespace(type_obj: type) -> str:
|
|
384
372
|
"""Returns a namespace for JSON serialization of `type_obj`.
|
|
385
373
|
|
|
386
374
|
Types can provide custom namespaces with `_json_namespace_`; otherwise, a
|
|
@@ -404,7 +392,7 @@ def json_namespace(type_obj: Type) -> str:
|
|
|
404
392
|
raise ValueError(f'{type_obj} is not a Cirq type, and does not define _json_namespace_.')
|
|
405
393
|
|
|
406
394
|
|
|
407
|
-
def json_cirq_type(type_obj:
|
|
395
|
+
def json_cirq_type(type_obj: type) -> str:
|
|
408
396
|
"""Returns a string type for JSON serialization of `type_obj`.
|
|
409
397
|
|
|
410
398
|
This method is not part of the base serialization path. Together with
|
|
@@ -418,7 +406,7 @@ def json_cirq_type(type_obj: Type) -> str:
|
|
|
418
406
|
|
|
419
407
|
|
|
420
408
|
def factory_from_json(
|
|
421
|
-
type_str: str, resolvers:
|
|
409
|
+
type_str: str, resolvers: Sequence[JsonResolver] | None = None
|
|
422
410
|
) -> ObjectFactory:
|
|
423
411
|
"""Returns a factory for constructing objects of type `type_str`.
|
|
424
412
|
|
|
@@ -444,7 +432,7 @@ def factory_from_json(
|
|
|
444
432
|
raise ValueError(f"Could not resolve type '{type_str}' during deserialization")
|
|
445
433
|
|
|
446
434
|
|
|
447
|
-
def cirq_type_from_json(type_str: str, resolvers:
|
|
435
|
+
def cirq_type_from_json(type_str: str, resolvers: Sequence[JsonResolver] | None = None) -> type:
|
|
448
436
|
"""Returns a type object for JSON deserialization of `type_str`.
|
|
449
437
|
|
|
450
438
|
This method is not part of the base deserialization path. Together with
|
|
@@ -471,15 +459,9 @@ def cirq_type_from_json(type_str: str, resolvers: Optional[Sequence[JsonResolver
|
|
|
471
459
|
raise ValueError(f"Type {type_str} maps to a factory method instead of a type.")
|
|
472
460
|
|
|
473
461
|
|
|
474
|
-
# pylint: disable=function-redefined
|
|
475
462
|
@overload
|
|
476
463
|
def to_json(
|
|
477
|
-
obj: Any,
|
|
478
|
-
file_or_fn: Union[IO, pathlib.Path, str],
|
|
479
|
-
*,
|
|
480
|
-
indent=2,
|
|
481
|
-
separators=None,
|
|
482
|
-
cls=CirqEncoder,
|
|
464
|
+
obj: Any, file_or_fn: IO | pathlib.Path | str, *, indent=2, separators=None, cls=CirqEncoder
|
|
483
465
|
) -> None:
|
|
484
466
|
pass
|
|
485
467
|
|
|
@@ -493,12 +475,12 @@ def to_json(
|
|
|
493
475
|
|
|
494
476
|
def to_json(
|
|
495
477
|
obj: Any,
|
|
496
|
-
file_or_fn:
|
|
478
|
+
file_or_fn: None | IO | pathlib.Path | str = None,
|
|
497
479
|
*,
|
|
498
|
-
indent:
|
|
499
|
-
separators:
|
|
500
|
-
cls:
|
|
501
|
-
) ->
|
|
480
|
+
indent: int | None = 2,
|
|
481
|
+
separators: tuple[str, str] | None = None,
|
|
482
|
+
cls: type[json.JSONEncoder] = CirqEncoder,
|
|
483
|
+
) -> str | None:
|
|
502
484
|
"""Write a JSON file containing a representation of obj.
|
|
503
485
|
|
|
504
486
|
The object may be a cirq object or have data members that are cirq
|
|
@@ -533,12 +515,11 @@ def to_json(
|
|
|
533
515
|
return None
|
|
534
516
|
|
|
535
517
|
|
|
536
|
-
# pylint: enable=function-redefined
|
|
537
518
|
def read_json(
|
|
538
|
-
file_or_fn:
|
|
519
|
+
file_or_fn: None | IO | pathlib.Path | str = None,
|
|
539
520
|
*,
|
|
540
|
-
json_text:
|
|
541
|
-
resolvers:
|
|
521
|
+
json_text: str | None = None,
|
|
522
|
+
resolvers: Sequence[JsonResolver] | None = None,
|
|
542
523
|
):
|
|
543
524
|
"""Read a JSON file that optionally contains cirq objects.
|
|
544
525
|
|
|
@@ -582,11 +563,11 @@ def read_json(
|
|
|
582
563
|
|
|
583
564
|
def to_json_gzip(
|
|
584
565
|
obj: Any,
|
|
585
|
-
file_or_fn:
|
|
566
|
+
file_or_fn: None | IO | pathlib.Path | str = None,
|
|
586
567
|
*,
|
|
587
568
|
indent: int = 2,
|
|
588
|
-
cls:
|
|
589
|
-
) ->
|
|
569
|
+
cls: type[json.JSONEncoder] = CirqEncoder,
|
|
570
|
+
) -> bytes | None:
|
|
590
571
|
"""Write a gzipped JSON file containing a representation of obj.
|
|
591
572
|
|
|
592
573
|
The object may be a cirq object or have data members that are cirq
|
|
@@ -621,10 +602,10 @@ def to_json_gzip(
|
|
|
621
602
|
|
|
622
603
|
|
|
623
604
|
def read_json_gzip(
|
|
624
|
-
file_or_fn:
|
|
605
|
+
file_or_fn: None | IO | pathlib.Path | str = None,
|
|
625
606
|
*,
|
|
626
|
-
gzip_raw:
|
|
627
|
-
resolvers:
|
|
607
|
+
gzip_raw: bytes | None = None,
|
|
608
|
+
resolvers: Sequence[JsonResolver] | None = None,
|
|
628
609
|
):
|
|
629
610
|
"""Read a gzipped JSON file that optionally contains cirq objects.
|
|
630
611
|
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
15
17
|
import contextlib
|
|
16
18
|
import dataclasses
|
|
17
19
|
import datetime
|
|
@@ -21,7 +23,6 @@ import json
|
|
|
21
23
|
import os
|
|
22
24
|
import pathlib
|
|
23
25
|
import warnings
|
|
24
|
-
from typing import Dict, List, Optional, Tuple, Type
|
|
25
26
|
from unittest import mock
|
|
26
27
|
|
|
27
28
|
import attrs
|
|
@@ -46,25 +47,18 @@ class _ModuleDeprecation:
|
|
|
46
47
|
|
|
47
48
|
|
|
48
49
|
# tested modules and their deprecation settings
|
|
49
|
-
TESTED_MODULES:
|
|
50
|
+
TESTED_MODULES: dict[str, _ModuleDeprecation | None] = {
|
|
50
51
|
'cirq_aqt': None,
|
|
51
52
|
'cirq_ionq': None,
|
|
52
53
|
'cirq_google': None,
|
|
53
54
|
'cirq_pasqal': None,
|
|
54
|
-
'
|
|
55
|
+
f'cirq{"."}contrib': None,
|
|
55
56
|
'cirq.protocols': None,
|
|
56
57
|
'non_existent_should_be_fine': None,
|
|
57
58
|
}
|
|
58
59
|
|
|
59
|
-
# TODO(#6706) remove after cirq_rigetti supports NumPy 2.0
|
|
60
|
-
if np.__version__.startswith("2."): # pragma: no cover
|
|
61
|
-
warnings.warn(
|
|
62
|
-
"json_serialization_test - ignoring cirq_rigetti due to incompatibility with NumPy 2.0"
|
|
63
|
-
)
|
|
64
|
-
del TESTED_MODULES["cirq_rigetti"]
|
|
65
|
-
|
|
66
60
|
|
|
67
|
-
def _get_testspecs_for_modules() ->
|
|
61
|
+
def _get_testspecs_for_modules() -> list[ModuleJsonTestSpec]:
|
|
68
62
|
modules = []
|
|
69
63
|
for m in TESTED_MODULES.keys():
|
|
70
64
|
try:
|
|
@@ -357,9 +351,9 @@ class SBKImpl(cirq.SerializableByKey):
|
|
|
357
351
|
def __init__(
|
|
358
352
|
self,
|
|
359
353
|
name: str,
|
|
360
|
-
data_list:
|
|
361
|
-
data_tuple:
|
|
362
|
-
data_dict:
|
|
354
|
+
data_list: list | None = None,
|
|
355
|
+
data_tuple: tuple | None = None,
|
|
356
|
+
data_dict: dict | None = None,
|
|
363
357
|
):
|
|
364
358
|
self.name = name
|
|
365
359
|
self.data_list = data_list or []
|
|
@@ -524,7 +518,7 @@ def test_json_test_data_coverage(mod_spec: ModuleJsonTestSpec, cirq_obj_name: st
|
|
|
524
518
|
|
|
525
519
|
@dataclasses.dataclass
|
|
526
520
|
class SerializableTypeObject:
|
|
527
|
-
test_type:
|
|
521
|
+
test_type: type
|
|
528
522
|
|
|
529
523
|
def _json_dict_(self):
|
|
530
524
|
return {'test_type': json_serialization.json_cirq_type(self.test_type)}
|
|
@@ -556,9 +550,7 @@ def test_type_serialization(mod_spec: ModuleJsonTestSpec, cirq_obj_name: str, cl
|
|
|
556
550
|
|
|
557
551
|
sto = SerializableTypeObject(cls)
|
|
558
552
|
test_resolvers = [custom_resolver] + cirq.DEFAULT_RESOLVERS
|
|
559
|
-
expected_json =
|
|
560
|
-
f'{{\n "cirq_type": "SerializableTypeObject",\n' f' "test_type": "{typename}"\n}}'
|
|
561
|
-
)
|
|
553
|
+
expected_json = f'{{\n "cirq_type": "SerializableTypeObject",\n "test_type": "{typename}"\n}}'
|
|
562
554
|
assert cirq.to_json(sto) == expected_json
|
|
563
555
|
assert cirq.read_json(json_text=expected_json, resolvers=test_resolvers) == sto
|
|
564
556
|
assert_json_roundtrip_works(sto, resolvers=test_resolvers)
|
|
@@ -605,9 +597,9 @@ def test_to_from_json_gzip():
|
|
|
605
597
|
_ = cirq.read_json_gzip()
|
|
606
598
|
|
|
607
599
|
|
|
608
|
-
def _eval_repr_data_file(path: pathlib.Path, deprecation_deadline:
|
|
600
|
+
def _eval_repr_data_file(path: pathlib.Path, deprecation_deadline: str | None):
|
|
609
601
|
content = path.read_text()
|
|
610
|
-
ctx_managers:
|
|
602
|
+
ctx_managers: list[contextlib.AbstractContextManager] = [contextlib.suppress()]
|
|
611
603
|
if deprecation_deadline: # pragma: no cover
|
|
612
604
|
# we ignore coverage here, because sometimes there are no deprecations at all in any of the
|
|
613
605
|
# modules
|
|
@@ -617,6 +609,7 @@ def _eval_repr_data_file(path: pathlib.Path, deprecation_deadline: Optional[str]
|
|
|
617
609
|
if deprecation is not None and deprecation.old_name in content:
|
|
618
610
|
ctx_managers.append(deprecation.deprecation_assertion) # pragma: no cover
|
|
619
611
|
|
|
612
|
+
# TODO: consider to add the support for 'tunits'.
|
|
620
613
|
imports = {'cirq': cirq, 'pd': pd, 'sympy': sympy, 'np': np, 'datetime': datetime, 'nx': nx}
|
|
621
614
|
|
|
622
615
|
for m in TESTED_MODULES.keys():
|
|
@@ -637,7 +630,7 @@ def assert_repr_and_json_test_data_agree(
|
|
|
637
630
|
repr_path: pathlib.Path,
|
|
638
631
|
json_path: pathlib.Path,
|
|
639
632
|
inward_only: bool,
|
|
640
|
-
deprecation_deadline:
|
|
633
|
+
deprecation_deadline: str | None,
|
|
641
634
|
):
|
|
642
635
|
if not repr_path.exists() and not json_path.exists():
|
|
643
636
|
return
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cirq_type": "CliffordGate",
|
|
3
|
+
"n": 2,
|
|
4
|
+
"rs": [
|
|
5
|
+
false,
|
|
6
|
+
false,
|
|
7
|
+
false,
|
|
8
|
+
false
|
|
9
|
+
],
|
|
10
|
+
"xs": [
|
|
11
|
+
[
|
|
12
|
+
true,
|
|
13
|
+
true
|
|
14
|
+
],
|
|
15
|
+
[
|
|
16
|
+
true,
|
|
17
|
+
false
|
|
18
|
+
],
|
|
19
|
+
[
|
|
20
|
+
false,
|
|
21
|
+
false
|
|
22
|
+
],
|
|
23
|
+
[
|
|
24
|
+
false,
|
|
25
|
+
false
|
|
26
|
+
]
|
|
27
|
+
],
|
|
28
|
+
"zs": [
|
|
29
|
+
[
|
|
30
|
+
false,
|
|
31
|
+
false
|
|
32
|
+
],
|
|
33
|
+
[
|
|
34
|
+
false,
|
|
35
|
+
false
|
|
36
|
+
],
|
|
37
|
+
[
|
|
38
|
+
false,
|
|
39
|
+
true
|
|
40
|
+
],
|
|
41
|
+
[
|
|
42
|
+
true,
|
|
43
|
+
true
|
|
44
|
+
]
|
|
45
|
+
]
|
|
46
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
cirq.CliffordGate(_clifford_tableau=
|
|
2
|
+
cirq.CliffordTableau(
|
|
3
|
+
2,
|
|
4
|
+
rs=np.array([False, False, False, False], dtype=np.dtype('bool')),
|
|
5
|
+
xs=np.array(
|
|
6
|
+
[[True, True], [True, False], [False, False], [False, False]], dtype=np.dtype('bool')
|
|
7
|
+
),
|
|
8
|
+
zs=np.array(
|
|
9
|
+
[[False, False], [False, False], [False, True], [True, True]], dtype=np.dtype('bool')
|
|
10
|
+
),
|
|
11
|
+
initial_state=0,
|
|
12
|
+
)
|
|
13
|
+
)
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cirq_type": "CliffordGate",
|
|
3
|
+
"n": 2,
|
|
4
|
+
"rs": [
|
|
5
|
+
false,
|
|
6
|
+
false,
|
|
7
|
+
false,
|
|
8
|
+
false
|
|
9
|
+
],
|
|
10
|
+
"xs": [
|
|
11
|
+
[
|
|
12
|
+
false,
|
|
13
|
+
true
|
|
14
|
+
],
|
|
15
|
+
[
|
|
16
|
+
true,
|
|
17
|
+
false
|
|
18
|
+
],
|
|
19
|
+
[
|
|
20
|
+
false,
|
|
21
|
+
false
|
|
22
|
+
],
|
|
23
|
+
[
|
|
24
|
+
false,
|
|
25
|
+
false
|
|
26
|
+
]
|
|
27
|
+
],
|
|
28
|
+
"zs": [
|
|
29
|
+
[
|
|
30
|
+
true,
|
|
31
|
+
false
|
|
32
|
+
],
|
|
33
|
+
[
|
|
34
|
+
false,
|
|
35
|
+
true
|
|
36
|
+
],
|
|
37
|
+
[
|
|
38
|
+
false,
|
|
39
|
+
true
|
|
40
|
+
],
|
|
41
|
+
[
|
|
42
|
+
true,
|
|
43
|
+
false
|
|
44
|
+
]
|
|
45
|
+
]
|
|
46
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
cirq.CliffordGate(_clifford_tableau=
|
|
2
|
+
cirq.CliffordTableau(
|
|
3
|
+
2,
|
|
4
|
+
rs=np.array([False, False, False, False], dtype=np.dtype('bool')),
|
|
5
|
+
xs=np.array(
|
|
6
|
+
[[False, True], [True, False], [False, False], [False, False]], dtype=np.dtype('bool')
|
|
7
|
+
),
|
|
8
|
+
zs=np.array(
|
|
9
|
+
[[True, False], [False, True], [False, True], [True, False]], dtype=np.dtype('bool')
|
|
10
|
+
),
|
|
11
|
+
initial_state=0,
|
|
12
|
+
)
|
|
13
|
+
)
|
|
@@ -133,7 +133,8 @@
|
|
|
133
133
|
"parent_path": [],
|
|
134
134
|
"repetition_ids": [
|
|
135
135
|
"0"
|
|
136
|
-
]
|
|
136
|
+
],
|
|
137
|
+
"use_repetition_ids": true
|
|
137
138
|
},
|
|
138
139
|
{
|
|
139
140
|
"cirq_type": "CircuitOperation",
|
|
@@ -187,7 +188,8 @@
|
|
|
187
188
|
"repetition_ids": [
|
|
188
189
|
"a",
|
|
189
190
|
"b"
|
|
190
|
-
]
|
|
191
|
+
],
|
|
192
|
+
"use_repetition_ids": true
|
|
191
193
|
},
|
|
192
194
|
{
|
|
193
195
|
"cirq_type": "CircuitOperation",
|
|
@@ -217,7 +219,8 @@
|
|
|
217
219
|
"repetition_ids": [
|
|
218
220
|
"a",
|
|
219
221
|
"b"
|
|
220
|
-
]
|
|
222
|
+
],
|
|
223
|
+
"use_repetition_ids": true
|
|
221
224
|
},
|
|
222
225
|
{
|
|
223
226
|
"cirq_type": "CircuitOperation",
|
|
@@ -25,10 +25,12 @@ cirq.CircuitOperation(circuit=cirq.FrozenCircuit([
|
|
|
25
25
|
(cirq.X**sympy.Symbol('theta')).on(cirq.LineQubit(0)),
|
|
26
26
|
),
|
|
27
27
|
]),
|
|
28
|
-
param_resolver={sympy.Symbol('theta'): 1.5}
|
|
28
|
+
param_resolver={sympy.Symbol('theta'): 1.5},
|
|
29
|
+
use_repetition_ids=True),
|
|
29
30
|
cirq.CircuitOperation(circuit=cirq.FrozenCircuit([
|
|
30
31
|
cirq.Moment(
|
|
31
32
|
(cirq.X**sympy.Symbol('theta')).on(cirq.LineQubit(0)),
|
|
32
33
|
),
|
|
33
34
|
]),
|
|
34
|
-
param_resolver={sympy.Symbol('theta'): 1.5}
|
|
35
|
+
param_resolver={sympy.Symbol('theta'): 1.5},
|
|
36
|
+
use_repetition_ids=True)]
|
|
@@ -39,5 +39,28 @@
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
]
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"cirq_type": "Moment",
|
|
45
|
+
"operations": [
|
|
46
|
+
{
|
|
47
|
+
"cirq_type": "SingleQubitPauliStringGateOperation",
|
|
48
|
+
"pauli": {
|
|
49
|
+
"cirq_type": "_PauliX",
|
|
50
|
+
"exponent": 1.0,
|
|
51
|
+
"global_shift": 0.0
|
|
52
|
+
},
|
|
53
|
+
"qubit": {
|
|
54
|
+
"cirq_type": "LineQubit",
|
|
55
|
+
"x": 0
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"tags": [
|
|
60
|
+
{
|
|
61
|
+
"cirq_type": "Duration",
|
|
62
|
+
"picos": 25000
|
|
63
|
+
}
|
|
64
|
+
]
|
|
42
65
|
}
|
|
43
|
-
]
|
|
66
|
+
]
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cirq_type": "ThermalNoiseModel",
|
|
3
|
+
"qubits": [
|
|
4
|
+
{
|
|
5
|
+
"cirq_type": "LineQubit",
|
|
6
|
+
"x": 0
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"cirq_type": "LineQubit",
|
|
10
|
+
"x": 1
|
|
11
|
+
}
|
|
12
|
+
],
|
|
13
|
+
"gate_durations_ns": {
|
|
14
|
+
"ZPowGate": 5.0,
|
|
15
|
+
"CZPowGate": 12.0
|
|
16
|
+
},
|
|
17
|
+
"heat_rate_GHz": [
|
|
18
|
+
1e-05,
|
|
19
|
+
1e-05
|
|
20
|
+
],
|
|
21
|
+
"cool_rate_GHz": [
|
|
22
|
+
0.0001,
|
|
23
|
+
0.00015
|
|
24
|
+
],
|
|
25
|
+
"dephase_rate_GHz": [
|
|
26
|
+
0.0002,
|
|
27
|
+
0.0002
|
|
28
|
+
],
|
|
29
|
+
"require_physical_tag": false,
|
|
30
|
+
"skip_measurements": false,
|
|
31
|
+
"prepend": false
|
|
32
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
cirq.devices.ThermalNoiseModel(qubits={cirq.LineQubit(0), cirq.LineQubit(1)}, gate_durations_ns={cirq.ops.common_gates.ZPowGate: 5.0,cirq.ops.common_gates.CZPowGate: 12.0}, heat_rate_GHz=1e-05, cool_rate_GHz={cirq.LineQubit(0): 0.0001,cirq.LineQubit(1): 0.00015}, dephase_rate_GHz=0.0002, require_physical_tag=False, skip_measurements=False, prepend=False)
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
15
17
|
import pathlib
|
|
16
18
|
|
|
17
19
|
import cirq
|
|
@@ -164,15 +166,17 @@ TestSpec = ModuleJsonTestSpec(
|
|
|
164
166
|
'ParamMappingType',
|
|
165
167
|
# utility:
|
|
166
168
|
'CliffordSimulator',
|
|
167
|
-
'NoiseModelFromNoiseProperties',
|
|
168
169
|
'Simulator',
|
|
169
170
|
'StabilizerSampler',
|
|
170
171
|
'DEFAULT_RESOLVERS',
|
|
171
172
|
],
|
|
172
173
|
deprecated={},
|
|
173
174
|
tested_elsewhere=[
|
|
175
|
+
# Tested in cirq.devices.noise_properties_test module, because
|
|
176
|
+
# serde test uses a non-public SampleNoiseProperties class.
|
|
177
|
+
'NoiseModelFromNoiseProperties',
|
|
174
178
|
# SerializableByKey does not follow common serialization rules.
|
|
175
179
|
# It is tested separately in test_context_serialization.
|
|
176
|
-
'SerializableByKey'
|
|
180
|
+
'SerializableByKey',
|
|
177
181
|
],
|
|
178
182
|
)
|