cirq-core 1.7.0.dev20250924231107__py3-none-any.whl → 1.7.0.dev20251203004401__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (392) hide show
  1. cirq/__init__.py +1 -0
  2. cirq/_compat.py +3 -2
  3. cirq/_compat_test.py +16 -15
  4. cirq/_doc.py +4 -3
  5. cirq/_import.py +2 -1
  6. cirq/_version.py +1 -1
  7. cirq/_version_test.py +1 -1
  8. cirq/circuits/_bucket_priority_queue.py +2 -1
  9. cirq/circuits/circuit.py +7 -13
  10. cirq/circuits/circuit_operation.py +2 -1
  11. cirq/circuits/circuit_test.py +13 -12
  12. cirq/circuits/frozen_circuit.py +3 -2
  13. cirq/circuits/moment.py +3 -15
  14. cirq/circuits/optimization_pass.py +2 -1
  15. cirq/circuits/qasm_output.py +39 -10
  16. cirq/circuits/qasm_output_test.py +51 -2
  17. cirq/circuits/text_diagram_drawer.py +2 -1
  18. cirq/contrib/acquaintance/bipartite.py +2 -1
  19. cirq/contrib/acquaintance/devices.py +1 -1
  20. cirq/contrib/acquaintance/executor.py +4 -5
  21. cirq/contrib/acquaintance/executor_test.py +2 -1
  22. cirq/contrib/acquaintance/gates.py +2 -1
  23. cirq/contrib/acquaintance/gates_test.py +1 -1
  24. cirq/contrib/acquaintance/inspection_utils.py +2 -1
  25. cirq/contrib/acquaintance/mutation_utils.py +2 -1
  26. cirq/contrib/acquaintance/optimizers.py +2 -1
  27. cirq/contrib/acquaintance/permutation.py +2 -1
  28. cirq/contrib/acquaintance/permutation_test.py +1 -1
  29. cirq/contrib/acquaintance/shift.py +2 -1
  30. cirq/contrib/acquaintance/shift_swap_network.py +2 -1
  31. cirq/contrib/acquaintance/strategies/complete.py +3 -2
  32. cirq/contrib/acquaintance/strategies/cubic.py +2 -1
  33. cirq/contrib/acquaintance/strategies/quartic_paired.py +2 -1
  34. cirq/contrib/acquaintance/strategies/quartic_paired_test.py +1 -1
  35. cirq/contrib/acquaintance/testing.py +2 -1
  36. cirq/contrib/acquaintance/topological_sort.py +2 -1
  37. cirq/contrib/bayesian_network/bayesian_network_gate.py +3 -2
  38. cirq/contrib/circuitdag/circuit_dag.py +4 -2
  39. cirq/contrib/custom_simulators/custom_state_simulator.py +2 -1
  40. cirq/contrib/custom_simulators/custom_state_simulator_test.py +1 -1
  41. cirq/contrib/graph_device/graph_device.py +2 -1
  42. cirq/contrib/graph_device/graph_device_test.py +2 -1
  43. cirq/contrib/graph_device/hypergraph.py +2 -1
  44. cirq/contrib/graph_device/uniform_graph_device.py +2 -1
  45. cirq/contrib/json.py +14 -2
  46. cirq/contrib/json_test_data/BayesianNetworkGate.json +10 -0
  47. cirq/contrib/json_test_data/BayesianNetworkGate.repr +3 -0
  48. cirq/contrib/json_test_data/QuantumVolumeResult.json +169 -0
  49. cirq/contrib/json_test_data/QuantumVolumeResult.repr +22 -0
  50. cirq/contrib/json_test_data/SwapPermutationGate.json +3 -0
  51. cirq/contrib/json_test_data/SwapPermutationGate.repr +1 -0
  52. cirq/contrib/json_test_data/spec.py +0 -2
  53. cirq/contrib/noise_models/noise_models.py +2 -1
  54. cirq/contrib/paulistring/clifford_optimize.py +20 -2
  55. cirq/contrib/paulistring/optimize.py +1 -1
  56. cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py +146 -35
  57. cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation_test.py +74 -171
  58. cirq/contrib/paulistring/recombine.py +5 -2
  59. cirq/contrib/paulistring/separate.py +1 -1
  60. cirq/contrib/qasm_import/_parser.py +2 -1
  61. cirq/contrib/qasm_import/_parser_test.py +3 -3
  62. cirq/contrib/quantikz/__init__.py +21 -0
  63. cirq/contrib/quantikz/circuit_to_latex_quantikz.py +680 -0
  64. cirq/contrib/quantikz/circuit_to_latex_quantikz_test.py +253 -0
  65. cirq/contrib/quantikz/circuit_to_latex_render.py +424 -0
  66. cirq/contrib/quantikz/circuit_to_latex_render_test.py +44 -0
  67. cirq/contrib/quantum_volume/quantum_volume.py +2 -1
  68. cirq/contrib/quimb/density_matrix.py +1 -1
  69. cirq/contrib/quimb/grid_circuits.py +2 -1
  70. cirq/contrib/quimb/grid_circuits_test.py +1 -1
  71. cirq/contrib/quimb/mps_simulator.py +4 -3
  72. cirq/contrib/quimb/state_vector.py +2 -1
  73. cirq/contrib/quirk/export_to_quirk.py +2 -1
  74. cirq/contrib/quirk/linearize_circuit.py +1 -1
  75. cirq/contrib/quirk/quirk_gate.py +2 -1
  76. cirq/contrib/routing/device.py +1 -1
  77. cirq/contrib/routing/greedy.py +2 -1
  78. cirq/contrib/routing/initialization.py +2 -1
  79. cirq/contrib/routing/router.py +2 -1
  80. cirq/contrib/routing/swap_network.py +2 -1
  81. cirq/contrib/routing/utils.py +2 -1
  82. cirq/contrib/shuffle_circuits/shuffle_circuits_with_readout_benchmarking.py +7 -5
  83. cirq/contrib/shuffle_circuits/shuffle_circuits_with_readout_benchmarking_test.py +6 -6
  84. cirq/devices/device.py +2 -1
  85. cirq/devices/grid_device_metadata.py +2 -1
  86. cirq/devices/grid_qubit.py +7 -6
  87. cirq/devices/insertion_noise_model.py +2 -1
  88. cirq/devices/line_qubit.py +2 -1
  89. cirq/devices/named_topologies.py +2 -1
  90. cirq/devices/noise_model.py +2 -1
  91. cirq/devices/noise_model_test.py +1 -1
  92. cirq/devices/noise_properties.py +2 -1
  93. cirq/devices/superconducting_qubits_noise_properties_test.py +2 -1
  94. cirq/devices/thermal_noise_model.py +2 -1
  95. cirq/experiments/__init__.py +2 -0
  96. cirq/experiments/benchmarking/parallel_xeb.py +2 -1
  97. cirq/experiments/benchmarking/parallel_xeb_test.py +1 -1
  98. cirq/experiments/fidelity_estimation.py +2 -1
  99. cirq/experiments/fidelity_estimation_test.py +1 -1
  100. cirq/experiments/ghz_2d.py +150 -0
  101. cirq/experiments/ghz_2d_test.py +155 -0
  102. cirq/experiments/n_qubit_tomography.py +2 -1
  103. cirq/experiments/n_qubit_tomography_test.py +1 -1
  104. cirq/experiments/purity_estimation.py +1 -1
  105. cirq/experiments/qubit_characterizations.py +2 -1
  106. cirq/experiments/random_quantum_circuit_generation.py +2 -1
  107. cirq/experiments/random_quantum_circuit_generation_test.py +2 -1
  108. cirq/experiments/readout_confusion_matrix.py +2 -1
  109. cirq/experiments/readout_confusion_matrix_test.py +1 -1
  110. cirq/experiments/single_qubit_readout_calibration.py +2 -1
  111. cirq/experiments/single_qubit_readout_calibration_test.py +1 -1
  112. cirq/experiments/t1_decay_experiment.py +2 -1
  113. cirq/experiments/two_qubit_xeb.py +2 -1
  114. cirq/experiments/two_qubit_xeb_test.py +1 -1
  115. cirq/experiments/xeb_fitting.py +2 -1
  116. cirq/experiments/xeb_fitting_test.py +1 -1
  117. cirq/experiments/xeb_sampling.py +5 -3
  118. cirq/experiments/xeb_sampling_test.py +1 -1
  119. cirq/experiments/xeb_simulation.py +2 -1
  120. cirq/experiments/xeb_simulation_test.py +2 -1
  121. cirq/experiments/z_phase_calibration.py +2 -1
  122. cirq/experiments/z_phase_calibration_test.py +18 -3
  123. cirq/interop/quirk/cells/__init__.py +1 -2
  124. cirq/interop/quirk/cells/all_cells.py +2 -1
  125. cirq/interop/quirk/cells/arithmetic_cells.py +2 -1
  126. cirq/interop/quirk/cells/cell.py +2 -1
  127. cirq/interop/quirk/cells/composite_cell.py +2 -1
  128. cirq/interop/quirk/cells/composite_cell_test.py +1 -1
  129. cirq/interop/quirk/cells/control_cells.py +2 -1
  130. cirq/interop/quirk/cells/frequency_space_cells.py +1 -1
  131. cirq/interop/quirk/cells/ignored_cells.py +1 -1
  132. cirq/interop/quirk/cells/input_cells.py +2 -1
  133. cirq/interop/quirk/cells/input_rotation_cells.py +2 -1
  134. cirq/interop/quirk/cells/measurement_cells.py +2 -1
  135. cirq/interop/quirk/cells/parse.py +2 -11
  136. cirq/interop/quirk/cells/qubit_permutation_cells.py +2 -1
  137. cirq/interop/quirk/cells/scalar_cells.py +2 -1
  138. cirq/interop/quirk/cells/single_qubit_rotation_cells.py +2 -1
  139. cirq/interop/quirk/cells/swap_cell.py +2 -1
  140. cirq/interop/quirk/cells/unsupported_cells.py +1 -1
  141. cirq/interop/quirk/url_to_circuit.py +2 -1
  142. cirq/json_resolver_cache.py +0 -2
  143. cirq/linalg/decompositions.py +6 -2
  144. cirq/linalg/decompositions_test.py +1 -0
  145. cirq/linalg/diagonalize.py +1 -1
  146. cirq/linalg/predicates.py +2 -1
  147. cirq/linalg/tolerance.py +2 -1
  148. cirq/linalg/transformations.py +2 -1
  149. cirq/ops/arithmetic_operation.py +2 -1
  150. cirq/ops/arithmetic_operation_test.py +1 -1
  151. cirq/ops/boolean_hamiltonian.py +4 -3
  152. cirq/ops/classically_controlled_operation.py +3 -2
  153. cirq/ops/clifford_gate.py +2 -1
  154. cirq/ops/clifford_gate_test.py +1 -2
  155. cirq/ops/common_channels.py +2 -1
  156. cirq/ops/common_gates.py +2 -1
  157. cirq/ops/control_values.py +2 -1
  158. cirq/ops/controlled_gate.py +3 -2
  159. cirq/ops/controlled_gate_test.py +2 -1
  160. cirq/ops/controlled_operation.py +3 -2
  161. cirq/ops/controlled_operation_test.py +2 -1
  162. cirq/ops/dense_pauli_string.py +3 -13
  163. cirq/ops/diagonal_gate.py +3 -2
  164. cirq/ops/eigen_gate.py +9 -7
  165. cirq/ops/fourier_transform.py +3 -2
  166. cirq/ops/fourier_transform_test.py +2 -4
  167. cirq/ops/fsim_gate.py +3 -2
  168. cirq/ops/gate_operation.py +8 -12
  169. cirq/ops/gateset.py +22 -2
  170. cirq/ops/global_phase_op.py +3 -2
  171. cirq/ops/greedy_qubit_manager.py +2 -1
  172. cirq/ops/identity.py +2 -1
  173. cirq/ops/kraus_channel.py +2 -1
  174. cirq/ops/linear_combinations.py +8 -3
  175. cirq/ops/linear_combinations_test.py +23 -1
  176. cirq/ops/matrix_gates.py +2 -1
  177. cirq/ops/measure_util.py +2 -1
  178. cirq/ops/measurement_gate.py +2 -1
  179. cirq/ops/mixed_unitary_channel.py +2 -1
  180. cirq/ops/named_qubit.py +2 -2
  181. cirq/ops/op_tree.py +2 -1
  182. cirq/ops/parallel_gate.py +3 -2
  183. cirq/ops/parity_gates.py +2 -1
  184. cirq/ops/pauli_interaction_gate.py +2 -1
  185. cirq/ops/pauli_measurement_gate.py +2 -1
  186. cirq/ops/pauli_string.py +6 -12
  187. cirq/ops/pauli_string_phasor.py +3 -2
  188. cirq/ops/pauli_string_raw_types.py +2 -1
  189. cirq/ops/pauli_string_test.py +2 -2
  190. cirq/ops/pauli_sum_exponential.py +2 -1
  191. cirq/ops/permutation_gate.py +2 -1
  192. cirq/ops/phased_iswap_gate.py +3 -2
  193. cirq/ops/phased_x_gate.py +5 -4
  194. cirq/ops/phased_x_z_gate.py +12 -5
  195. cirq/ops/projector.py +2 -1
  196. cirq/ops/qubit_manager.py +2 -1
  197. cirq/ops/qubit_order.py +2 -1
  198. cirq/ops/qubit_order_or_list.py +1 -1
  199. cirq/ops/random_gate_channel.py +3 -2
  200. cirq/ops/raw_types.py +7 -15
  201. cirq/ops/raw_types_test.py +4 -3
  202. cirq/ops/state_preparation_channel.py +2 -1
  203. cirq/ops/three_qubit_gates.py +3 -2
  204. cirq/ops/two_qubit_diagonal_gate.py +3 -2
  205. cirq/ops/uniform_superposition_gate.py +2 -1
  206. cirq/ops/wait_gate.py +10 -4
  207. cirq/protocols/act_on_protocol.py +2 -1
  208. cirq/protocols/act_on_protocol_test.py +2 -1
  209. cirq/protocols/apply_channel_protocol.py +2 -1
  210. cirq/protocols/apply_mixture_protocol.py +2 -1
  211. cirq/protocols/apply_mixture_protocol_test.py +2 -1
  212. cirq/protocols/apply_unitary_protocol.py +2 -1
  213. cirq/protocols/apply_unitary_protocol_test.py +2 -0
  214. cirq/protocols/approximate_equality_protocol.py +2 -1
  215. cirq/protocols/circuit_diagram_info_protocol.py +2 -1
  216. cirq/protocols/decompose_protocol.py +2 -12
  217. cirq/protocols/has_stabilizer_effect_protocol.py +1 -1
  218. cirq/protocols/hash_from_pickle_test.py +2 -2
  219. cirq/protocols/inverse_protocol.py +2 -1
  220. cirq/protocols/json_serialization.py +2 -1
  221. cirq/protocols/kraus_protocol.py +4 -3
  222. cirq/protocols/kraus_protocol_test.py +2 -2
  223. cirq/protocols/measurement_key_protocol.py +2 -1
  224. cirq/protocols/mixture_protocol.py +2 -1
  225. cirq/protocols/pow_protocol.py +2 -1
  226. cirq/protocols/qasm.py +2 -1
  227. cirq/protocols/qid_shape_protocol.py +2 -1
  228. cirq/protocols/resolve_parameters.py +16 -14
  229. cirq/protocols/trace_distance_bound.py +2 -1
  230. cirq/protocols/unitary_protocol.py +21 -21
  231. cirq/qis/channels.py +1 -1
  232. cirq/qis/channels_test.py +1 -1
  233. cirq/qis/clifford_tableau.py +2 -1
  234. cirq/qis/entropy.py +2 -2
  235. cirq/qis/quantum_state_representation.py +2 -1
  236. cirq/qis/states.py +7 -2
  237. cirq/sim/classical_simulator.py +2 -1
  238. cirq/sim/clifford/clifford_simulator.py +2 -1
  239. cirq/sim/clifford/clifford_simulator_test.py +1 -1
  240. cirq/sim/clifford/clifford_tableau_simulation_state.py +2 -1
  241. cirq/sim/clifford/stabilizer_ch_form_simulation_state.py +2 -1
  242. cirq/sim/clifford/stabilizer_sampler.py +1 -1
  243. cirq/sim/clifford/stabilizer_simulation_state.py +2 -1
  244. cirq/sim/clifford/stabilizer_state_ch_form.py +3 -2
  245. cirq/sim/clifford/stabilizer_state_ch_form_test.py +0 -1
  246. cirq/sim/density_matrix_simulation_state.py +2 -1
  247. cirq/sim/density_matrix_simulator.py +2 -1
  248. cirq/sim/density_matrix_utils.py +2 -1
  249. cirq/sim/mux.py +2 -1
  250. cirq/sim/mux_test.py +0 -1
  251. cirq/sim/simulation_product_state.py +2 -1
  252. cirq/sim/simulation_product_state_test.py +2 -1
  253. cirq/sim/simulation_state.py +2 -1
  254. cirq/sim/simulation_state_base.py +2 -1
  255. cirq/sim/simulation_state_test.py +2 -1
  256. cirq/sim/simulation_utils.py +2 -1
  257. cirq/sim/simulator.py +2 -1
  258. cirq/sim/simulator_base.py +2 -1
  259. cirq/sim/simulator_base_test.py +2 -1
  260. cirq/sim/simulator_test.py +2 -1
  261. cirq/sim/sparse_simulator.py +2 -1
  262. cirq/sim/state_vector.py +2 -1
  263. cirq/sim/state_vector_simulation_state.py +2 -1
  264. cirq/sim/state_vector_simulator.py +2 -1
  265. cirq/sim/state_vector_test.py +1 -2
  266. cirq/study/__init__.py +1 -0
  267. cirq/study/flatten_expressions.py +2 -1
  268. cirq/study/resolver.py +31 -18
  269. cirq/study/resolver_test.py +1 -1
  270. cirq/study/result.py +2 -1
  271. cirq/study/sweepable.py +2 -1
  272. cirq/study/sweeps.py +26 -1
  273. cirq/study/sweeps_test.py +24 -0
  274. cirq/testing/_compat_test_data/__init__.py +3 -3
  275. cirq/testing/circuit_compare.py +2 -1
  276. cirq/testing/consistent_act_on_test.py +1 -1
  277. cirq/testing/consistent_controlled_gate_op.py +1 -1
  278. cirq/testing/consistent_controlled_gate_op_test.py +2 -1
  279. cirq/testing/consistent_protocols.py +2 -1
  280. cirq/testing/consistent_protocols_test.py +3 -3
  281. cirq/testing/consistent_qasm.py +2 -1
  282. cirq/testing/consistent_resolve_parameters.py +1 -1
  283. cirq/testing/consistent_unitary.py +1 -1
  284. cirq/testing/consistent_unitary_test.py +1 -1
  285. cirq/testing/deprecation.py +1 -1
  286. cirq/testing/devices.py +3 -2
  287. cirq/testing/equals_tester.py +4 -3
  288. cirq/testing/equivalent_basis_map.py +4 -2
  289. cirq/testing/json.py +3 -2
  290. cirq/testing/logs.py +1 -1
  291. cirq/testing/op_tree.py +1 -1
  292. cirq/testing/order_tester.py +2 -2
  293. cirq/testing/pytest_utils.py +2 -1
  294. cirq/testing/random_circuit.py +2 -1
  295. cirq/testing/random_circuit_test.py +2 -1
  296. cirq/testing/repr_pretty_tester.py +3 -3
  297. cirq/transformers/__init__.py +1 -0
  298. cirq/transformers/_connected_component.py +231 -0
  299. cirq/transformers/_connected_component_test.py +200 -0
  300. cirq/transformers/align_test.py +13 -13
  301. cirq/transformers/analytical_decompositions/clifford_decomposition.py +8 -7
  302. cirq/transformers/analytical_decompositions/clifford_decomposition_test.py +5 -5
  303. cirq/transformers/analytical_decompositions/controlled_gate_decomposition.py +11 -10
  304. cirq/transformers/analytical_decompositions/controlled_gate_decomposition_test.py +6 -6
  305. cirq/transformers/analytical_decompositions/cphase_to_fsim.py +3 -2
  306. cirq/transformers/analytical_decompositions/cphase_to_fsim_test.py +11 -10
  307. cirq/transformers/analytical_decompositions/quantum_shannon_decomposition.py +8 -7
  308. cirq/transformers/analytical_decompositions/quantum_shannon_decomposition_test.py +17 -20
  309. cirq/transformers/analytical_decompositions/single_qubit_decompositions_test.py +33 -27
  310. cirq/transformers/analytical_decompositions/single_to_two_qubit_isometry_test.py +1 -1
  311. cirq/transformers/analytical_decompositions/three_qubit_decomposition.py +1 -1
  312. cirq/transformers/analytical_decompositions/two_qubit_state_preparation_test.py +12 -11
  313. cirq/transformers/analytical_decompositions/two_qubit_to_cz.py +5 -2
  314. cirq/transformers/analytical_decompositions/two_qubit_to_cz_test.py +3 -3
  315. cirq/transformers/analytical_decompositions/two_qubit_to_fsim.py +2 -1
  316. cirq/transformers/analytical_decompositions/two_qubit_to_ms.py +2 -1
  317. cirq/transformers/analytical_decompositions/two_qubit_to_ms_test.py +2 -2
  318. cirq/transformers/analytical_decompositions/two_qubit_to_sqrt_iswap.py +2 -1
  319. cirq/transformers/analytical_decompositions/two_qubit_to_sqrt_iswap_test.py +32 -30
  320. cirq/transformers/drop_negligible_operations_test.py +7 -7
  321. cirq/transformers/dynamical_decoupling.py +185 -112
  322. cirq/transformers/dynamical_decoupling_test.py +195 -201
  323. cirq/transformers/eject_phased_paulis.py +2 -1
  324. cirq/transformers/eject_phased_paulis_test.py +3 -2
  325. cirq/transformers/eject_z.py +4 -3
  326. cirq/transformers/eject_z_test.py +23 -25
  327. cirq/transformers/expand_composite.py +3 -2
  328. cirq/transformers/expand_composite_test.py +14 -14
  329. cirq/transformers/gauge_compiling/__init__.py +8 -0
  330. cirq/transformers/gauge_compiling/gauge_compiling.py +3 -2
  331. cirq/transformers/gauge_compiling/gauge_compiling_test.py +14 -12
  332. cirq/transformers/gauge_compiling/gauge_compiling_test_utils.py +3 -3
  333. cirq/transformers/gauge_compiling/idle_moments_gauge.py +5 -2
  334. cirq/transformers/gauge_compiling/multi_moment_cphase_gauge.py +242 -0
  335. cirq/transformers/gauge_compiling/multi_moment_cphase_gauge_test.py +243 -0
  336. cirq/transformers/gauge_compiling/multi_moment_gauge_compiling.py +151 -0
  337. cirq/transformers/gauge_compiling/sqrt_cz_gauge.py +2 -1
  338. cirq/transformers/heuristic_decompositions/gate_tabulation_math_utils.py +1 -1
  339. cirq/transformers/heuristic_decompositions/gate_tabulation_math_utils_test.py +6 -6
  340. cirq/transformers/heuristic_decompositions/two_qubit_gate_tabulation.py +2 -1
  341. cirq/transformers/measurement_transformers.py +2 -1
  342. cirq/transformers/measurement_transformers_test.py +45 -39
  343. cirq/transformers/merge_k_qubit_gates.py +2 -1
  344. cirq/transformers/merge_k_qubit_gates_test.py +1 -1
  345. cirq/transformers/merge_single_qubit_gates.py +2 -1
  346. cirq/transformers/merge_single_qubit_gates_test.py +22 -22
  347. cirq/transformers/noise_adding_test.py +2 -2
  348. cirq/transformers/optimize_for_target_gateset.py +2 -1
  349. cirq/transformers/optimize_for_target_gateset_test.py +11 -9
  350. cirq/transformers/qubit_management_transformers_test.py +6 -2
  351. cirq/transformers/routing/mapping_manager.py +2 -1
  352. cirq/transformers/routing/route_circuit_cqc.py +2 -1
  353. cirq/transformers/stratify.py +2 -1
  354. cirq/transformers/symbolize.py +2 -1
  355. cirq/transformers/tag_transformers.py +2 -1
  356. cirq/transformers/target_gatesets/compilation_target_gateset.py +2 -1
  357. cirq/transformers/target_gatesets/cz_gateset.py +2 -1
  358. cirq/transformers/target_gatesets/cz_gateset_test.py +1 -1
  359. cirq/transformers/target_gatesets/sqrt_iswap_gateset.py +2 -1
  360. cirq/transformers/transformer_api.py +2 -1
  361. cirq/transformers/transformer_primitives.py +271 -145
  362. cirq/transformers/transformer_primitives_test.py +185 -1
  363. cirq/value/abc_alt.py +2 -1
  364. cirq/value/classical_data.py +2 -1
  365. cirq/value/condition.py +2 -1
  366. cirq/value/digits.py +9 -2
  367. cirq/value/duration.py +6 -5
  368. cirq/value/linear_dict.py +4 -9
  369. cirq/value/measurement_key.py +2 -1
  370. cirq/value/periodic_value.py +3 -2
  371. cirq/value/product_state.py +2 -1
  372. cirq/value/value_equality_attr.py +2 -1
  373. cirq/vis/density_matrix.py +1 -1
  374. cirq/vis/heatmap.py +2 -1
  375. cirq/vis/histogram.py +2 -1
  376. cirq/vis/state_histogram.py +2 -1
  377. cirq/work/collector.py +2 -1
  378. cirq/work/observable_grouping.py +2 -1
  379. cirq/work/observable_measurement.py +2 -1
  380. cirq/work/observable_measurement_data.py +2 -1
  381. cirq/work/observable_measurement_test.py +1 -1
  382. cirq/work/observable_readout_calibration.py +2 -1
  383. cirq/work/observable_readout_calibration_test.py +1 -1
  384. cirq/work/observable_settings.py +2 -1
  385. cirq/work/sampler.py +2 -1
  386. cirq/work/sampler_test.py +1 -1
  387. {cirq_core-1.7.0.dev20250924231107.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/METADATA +4 -4
  388. {cirq_core-1.7.0.dev20250924231107.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/RECORD +391 -374
  389. cirq/contrib/json_test.py +0 -33
  390. {cirq_core-1.7.0.dev20250924231107.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/WHEEL +0 -0
  391. {cirq_core-1.7.0.dev20250924231107.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/licenses/LICENSE +0 -0
  392. {cirq_core-1.7.0.dev20250924231107.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/top_level.txt +0 -0
@@ -14,7 +14,8 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import cast, Sequence, TYPE_CHECKING
17
+ from collections.abc import Sequence
18
+ from typing import cast, TYPE_CHECKING
18
19
 
19
20
  from cirq import circuits
20
21
  from cirq.contrib.acquaintance.executor import AcquaintanceOperation
@@ -15,8 +15,9 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import abc
18
+ from collections.abc import Iterable, Iterator, Sequence
18
19
  from types import NotImplementedType
19
- from typing import Any, cast, Iterable, Iterator, Sequence, TYPE_CHECKING, TypeVar
20
+ from typing import Any, cast, TYPE_CHECKING, TypeVar
20
21
 
21
22
  from cirq import circuits, ops, protocols, transformers, value
22
23
 
@@ -15,7 +15,7 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import random
18
- from typing import Iterator
18
+ from collections.abc import Iterator
19
19
 
20
20
  import pytest
21
21
 
@@ -15,7 +15,8 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import itertools
18
- from typing import Any, Iterator, Sequence, TYPE_CHECKING
18
+ from collections.abc import Iterator, Sequence
19
+ from typing import Any, TYPE_CHECKING
19
20
 
20
21
  from cirq import ops, value
21
22
  from cirq.contrib.acquaintance.permutation import PermutationGate, SwapPermutationGate
@@ -16,7 +16,8 @@ from __future__ import annotations
16
16
 
17
17
  import functools
18
18
  import itertools
19
- from typing import Iterable, Iterator, Sequence, TYPE_CHECKING
19
+ from collections.abc import Iterable, Iterator, Sequence
20
+ from typing import TYPE_CHECKING
20
21
 
21
22
  from cirq import ops
22
23
  from cirq.contrib.acquaintance.gates import acquaint
@@ -14,7 +14,8 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import Sequence, TYPE_CHECKING
17
+ from collections.abc import Sequence
18
+ from typing import TYPE_CHECKING
18
19
 
19
20
  from cirq import circuits, ops
20
21
  from cirq.contrib.acquaintance.gates import acquaint
@@ -54,7 +55,7 @@ def complete_acquaintance_strategy(
54
55
  if acquaintance_size == len(qubit_order):
55
56
  return circuits.Circuit(acquaint(*qubit_order))
56
57
 
57
- strategy = circuits.Circuit((acquaint(q) for q in qubit_order))
58
+ strategy = circuits.Circuit(acquaint(q) for q in qubit_order)
58
59
  for size_to_acquaint in range(2, acquaintance_size + 1):
59
60
  expose_acquaintance_gates(strategy)
60
61
  replace_acquaintance_with_swap_network(strategy, qubit_order, size_to_acquaint, swap_gate)
@@ -15,7 +15,8 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import itertools
18
- from typing import Iterable, Sequence, TYPE_CHECKING, TypeVar
18
+ from collections.abc import Iterable, Sequence
19
+ from typing import TYPE_CHECKING, TypeVar
19
20
 
20
21
  from cirq import circuits, ops
21
22
  from cirq.contrib.acquaintance.gates import acquaint
@@ -14,7 +14,8 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import cast, Iterable, Sequence, TYPE_CHECKING
17
+ from collections.abc import Iterable, Sequence
18
+ from typing import cast, TYPE_CHECKING
18
19
 
19
20
  from cirq import circuits
20
21
  from cirq.contrib.acquaintance.gates import acquaint, SwapNetworkGate
@@ -16,7 +16,7 @@ from __future__ import annotations
16
16
 
17
17
  import itertools
18
18
  import random
19
- from typing import Iterable
19
+ from collections.abc import Iterable
20
20
 
21
21
  import pytest
22
22
 
@@ -14,7 +14,8 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import cast, Sequence, TYPE_CHECKING
17
+ from collections.abc import Sequence
18
+ from typing import cast, TYPE_CHECKING
18
19
 
19
20
  from cirq import devices, ops, protocols
20
21
  from cirq.contrib.acquaintance.permutation import PermutationGate, update_mapping
@@ -16,7 +16,8 @@ from __future__ import annotations
16
16
 
17
17
  import operator
18
18
  import random
19
- from typing import Any, Callable, cast, Iterable, TYPE_CHECKING
19
+ from collections.abc import Callable, Iterable
20
+ from typing import Any, cast, TYPE_CHECKING
20
21
 
21
22
  from cirq import ops
22
23
 
@@ -15,7 +15,8 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import math
18
- from typing import Any, cast, Iterator, Sequence, TYPE_CHECKING
18
+ from collections.abc import Iterator, Sequence
19
+ from typing import Any, cast, TYPE_CHECKING
19
20
 
20
21
  from sympy.combinatorics import GrayCode
21
22
 
@@ -70,7 +71,7 @@ def _generate_got_set_for_init_prob(qubit, init_prob):
70
71
  yield common_gates.ry(_prob_to_angle(init_prob)).on(qubit)
71
72
 
72
73
 
73
- @value.value_equality
74
+ @value.value_equality(unhashable=True)
74
75
  class BayesianNetworkGate(raw_types.Gate):
75
76
  """A gate that represents a Bayesian network.
76
77
 
@@ -15,7 +15,8 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import functools
18
- from typing import Any, Callable, cast, Generic, Iterator, TypeVar
18
+ from collections.abc import Callable, Iterator
19
+ from typing import Any, cast, Generic, TypeVar
19
20
 
20
21
  import networkx
21
22
 
@@ -72,8 +73,9 @@ class CircuitDag(networkx.DiGraph):
72
73
 
73
74
  def __init__(
74
75
  self,
75
- can_reorder: Callable[[cirq.Operation, cirq.Operation], bool] = _disjoint_qubits,
76
76
  incoming_graph_data: Any = None,
77
+ *,
78
+ can_reorder: Callable[[cirq.Operation, cirq.Operation], bool] = _disjoint_qubits,
77
79
  ) -> None:
78
80
  """Initializes a CircuitDag.
79
81
 
@@ -14,7 +14,8 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import Any, Generic, Sequence, TYPE_CHECKING
17
+ from collections.abc import Sequence
18
+ from typing import Any, Generic, TYPE_CHECKING
18
19
 
19
20
  from cirq import sim
20
21
  from cirq.sim.simulation_state import TSimulationState
@@ -14,7 +14,7 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import Sequence
17
+ from collections.abc import Sequence
18
18
 
19
19
  import numpy as np
20
20
  import sympy
@@ -16,7 +16,8 @@ from __future__ import annotations
16
16
 
17
17
  import abc
18
18
  import itertools
19
- from typing import Any, cast, Hashable, Iterable, NoReturn, TYPE_CHECKING
19
+ from collections.abc import Hashable, Iterable
20
+ from typing import Any, cast, NoReturn, TYPE_CHECKING
20
21
 
21
22
  from cirq import devices, ops, value
22
23
  from cirq.contrib.graph_device.hypergraph import UndirectedHypergraph
@@ -14,7 +14,8 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import Any, Hashable, Iterable
17
+ from collections.abc import Hashable, Iterable
18
+ from typing import Any
18
19
 
19
20
  import pytest
20
21
 
@@ -16,7 +16,8 @@ from __future__ import annotations
16
16
 
17
17
  import itertools
18
18
  import random
19
- from typing import Any, Hashable, Iterable, Mapping
19
+ from collections.abc import Hashable, Iterable, Mapping
20
+ from typing import Any
20
21
 
21
22
  AdjacencyList = set[frozenset[Hashable]]
22
23
 
@@ -14,7 +14,8 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import Any, Hashable, Iterable, Mapping
17
+ from collections.abc import Hashable, Iterable, Mapping
18
+ from typing import Any
18
19
 
19
20
  from cirq import devices, ops
20
21
  from cirq.contrib.graph_device.graph_device import UndirectedGraphDevice, UndirectedGraphDeviceEdge
cirq/contrib/json.py CHANGED
@@ -5,6 +5,7 @@ from __future__ import annotations
5
5
 
6
6
  import functools
7
7
 
8
+ from cirq import _compat
8
9
  from cirq.protocols.json_serialization import _register_resolver, DEFAULT_RESOLVERS, ObjectFactory
9
10
 
10
11
 
@@ -39,6 +40,17 @@ def _class_resolver_dictionary() -> dict[str, ObjectFactory]:
39
40
  return {cls.__name__: cls for cls in classes}
40
41
 
41
42
 
42
- DEFAULT_CONTRIB_RESOLVERS = [contrib_class_resolver] + DEFAULT_RESOLVERS
43
-
44
43
  _register_resolver(_class_resolver_dictionary)
44
+
45
+ DEFAULT_CONTRIB_RESOLVERS = [contrib_class_resolver, *DEFAULT_RESOLVERS]
46
+
47
+ _compat.deprecate_attributes(
48
+ __name__,
49
+ {
50
+ 'DEFAULT_CONTRIB_RESOLVERS': (
51
+ 'v1.8',
52
+ 'DEFAULT_CONTRIB_RESOLVERS is no longer necessary as contrib classes are now '
53
+ 'automatically recognized and resolved with an import of cirq.contrib.',
54
+ )
55
+ },
56
+ )
@@ -0,0 +1,10 @@
1
+ {
2
+ "cirq_type": "BayesianNetworkGate",
3
+ "init_probs": [
4
+ ["q0", 0.125],
5
+ ["q1", null]
6
+ ],
7
+ "arc_probs": [
8
+ ["q1", ["q0"], [0.25, 0.5]]
9
+ ]
10
+ }
@@ -0,0 +1,3 @@
1
+ cirq.contrib.bayesian_network.BayesianNetworkGate(
2
+ init_probs=[('q0', 0.125), ('q1', None)], arc_probs=[('q1', ('q0',), [0.25, 0.5])]
3
+ )
@@ -0,0 +1,169 @@
1
+ {
2
+ "cirq_type": "QuantumVolumeResult",
3
+ "model_circuit": {
4
+ "cirq_type": "Circuit",
5
+ "moments": [
6
+ {
7
+ "cirq_type": "Moment",
8
+ "operations": [
9
+ {
10
+ "cirq_type": "GateOperation",
11
+ "gate": {
12
+ "cirq_type": "HPowGate",
13
+ "exponent": 1.0,
14
+ "global_shift": 0.0
15
+ },
16
+ "qubits": [
17
+ {
18
+ "cirq_type": "LineQubit",
19
+ "x": 0
20
+ }
21
+ ]
22
+ },
23
+ {
24
+ "cirq_type": "GateOperation",
25
+ "gate": {
26
+ "cirq_type": "HPowGate",
27
+ "exponent": 1.0,
28
+ "global_shift": 0.0
29
+ },
30
+ "qubits": [
31
+ {
32
+ "cirq_type": "LineQubit",
33
+ "x": 1
34
+ }
35
+ ]
36
+ },
37
+ {
38
+ "cirq_type": "GateOperation",
39
+ "gate": {
40
+ "cirq_type": "HPowGate",
41
+ "exponent": 1.0,
42
+ "global_shift": 0.0
43
+ },
44
+ "qubits": [
45
+ {
46
+ "cirq_type": "LineQubit",
47
+ "x": 2
48
+ }
49
+ ]
50
+ },
51
+ {
52
+ "cirq_type": "GateOperation",
53
+ "gate": {
54
+ "cirq_type": "HPowGate",
55
+ "exponent": 1.0,
56
+ "global_shift": 0.0
57
+ },
58
+ "qubits": [
59
+ {
60
+ "cirq_type": "LineQubit",
61
+ "x": 3
62
+ }
63
+ ]
64
+ },
65
+ {
66
+ "cirq_type": "GateOperation",
67
+ "gate": {
68
+ "cirq_type": "HPowGate",
69
+ "exponent": 1.0,
70
+ "global_shift": 0.0
71
+ },
72
+ "qubits": [
73
+ {
74
+ "cirq_type": "LineQubit",
75
+ "x": 4
76
+ }
77
+ ]
78
+ }
79
+ ]
80
+ }
81
+ ]
82
+ },
83
+ "heavy_set": [
84
+ 1,
85
+ 2,
86
+ 3
87
+ ],
88
+ "compiled_circuit": {
89
+ "cirq_type": "Circuit",
90
+ "moments": [
91
+ {
92
+ "cirq_type": "Moment",
93
+ "operations": [
94
+ {
95
+ "cirq_type": "GateOperation",
96
+ "gate": {
97
+ "cirq_type": "HPowGate",
98
+ "exponent": 1.0,
99
+ "global_shift": 0.0
100
+ },
101
+ "qubits": [
102
+ {
103
+ "cirq_type": "LineQubit",
104
+ "x": 0
105
+ }
106
+ ]
107
+ },
108
+ {
109
+ "cirq_type": "GateOperation",
110
+ "gate": {
111
+ "cirq_type": "HPowGate",
112
+ "exponent": 1.0,
113
+ "global_shift": 0.0
114
+ },
115
+ "qubits": [
116
+ {
117
+ "cirq_type": "LineQubit",
118
+ "x": 1
119
+ }
120
+ ]
121
+ },
122
+ {
123
+ "cirq_type": "GateOperation",
124
+ "gate": {
125
+ "cirq_type": "HPowGate",
126
+ "exponent": 1.0,
127
+ "global_shift": 0.0
128
+ },
129
+ "qubits": [
130
+ {
131
+ "cirq_type": "LineQubit",
132
+ "x": 2
133
+ }
134
+ ]
135
+ },
136
+ {
137
+ "cirq_type": "GateOperation",
138
+ "gate": {
139
+ "cirq_type": "HPowGate",
140
+ "exponent": 1.0,
141
+ "global_shift": 0.0
142
+ },
143
+ "qubits": [
144
+ {
145
+ "cirq_type": "LineQubit",
146
+ "x": 3
147
+ }
148
+ ]
149
+ },
150
+ {
151
+ "cirq_type": "GateOperation",
152
+ "gate": {
153
+ "cirq_type": "HPowGate",
154
+ "exponent": 1.0,
155
+ "global_shift": 0.0
156
+ },
157
+ "qubits": [
158
+ {
159
+ "cirq_type": "LineQubit",
160
+ "x": 4
161
+ }
162
+ ]
163
+ }
164
+ ]
165
+ }
166
+ ]
167
+ },
168
+ "sampler_result": 0.1
169
+ }
@@ -0,0 +1,22 @@
1
+ cirq.contrib.quantum_volume.QuantumVolumeResult(
2
+ model_circuit=cirq.Circuit(
3
+ cirq.Moment(
4
+ cirq.H(cirq.LineQubit(0)),
5
+ cirq.H(cirq.LineQubit(1)),
6
+ cirq.H(cirq.LineQubit(2)),
7
+ cirq.H(cirq.LineQubit(3)),
8
+ cirq.H(cirq.LineQubit(4)),
9
+ )
10
+ ),
11
+ heavy_set=[1, 2, 3],
12
+ compiled_circuit=cirq.Circuit(
13
+ cirq.Moment(
14
+ cirq.H(cirq.LineQubit(0)),
15
+ cirq.H(cirq.LineQubit(1)),
16
+ cirq.H(cirq.LineQubit(2)),
17
+ cirq.H(cirq.LineQubit(3)),
18
+ cirq.H(cirq.LineQubit(4)),
19
+ )
20
+ ),
21
+ sampler_result=0.1,
22
+ )
@@ -0,0 +1,3 @@
1
+ {
2
+ "cirq_type": "SwapPermutationGate"
3
+ }
@@ -0,0 +1 @@
1
+ cirq.contrib.acquaintance.SwapPermutationGate(swap_gate=cirq.SWAP)
@@ -27,6 +27,4 @@ TestSpec = ModuleJsonTestSpec(
27
27
  should_not_be_serialized=["Unique", "CircuitDag"],
28
28
  resolver_cache=_class_resolver_dictionary(),
29
29
  deprecated={},
30
- # TODO: #7520 - create .json and .repr for these so they can be tested here
31
- tested_elsewhere=["QuantumVolumeResult", "SwapPermutationGate", "BayesianNetworkGate"],
32
30
  )
@@ -14,7 +14,8 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import Sequence, TYPE_CHECKING
17
+ from collections.abc import Sequence
18
+ from typing import TYPE_CHECKING
18
19
 
19
20
  from cirq import circuits, devices, ops, value
20
21
  from cirq.devices.noise_model import validate_all_measurements
@@ -21,8 +21,26 @@ from cirq.contrib.paulistring.clifford_target_gateset import CliffordTargetGates
21
21
 
22
22
 
23
23
  def clifford_optimized_circuit(circuit: circuits.Circuit, atol: float = 1e-8) -> circuits.Circuit:
24
- # Convert to a circuit with SingleQubitCliffordGates,
25
- # CZs and other ignored gates
24
+ """Optimizes a circuit composed of Clifford and CZ gates.
25
+
26
+ This function attempts to simplify a circuit by finding local optimizations.
27
+ It works in two stages:
28
+ 1. It converts the circuit to a target gateset consisting of
29
+ `cirq.SingleQubitCliffordGate` and `cirq.CZPowGate` gates.
30
+ 2. It then iterates through the circuit, applying the following rules:
31
+ - Merges adjacent single-qubit Clifford gates.
32
+ - Commutes single-qubit Clifford gates past CZ gates, attempting to
33
+ merge them with other single-qubit Clifford gates.
34
+ - Cancels pairs of identical CZ gates.
35
+
36
+ Args:
37
+ circuit: The circuit to optimize.
38
+ atol: A limit on the amount of absolute error introduced by the decomposition.
39
+
40
+ Returns:
41
+ The optimized circuit.
42
+ """
43
+ # Convert to a circuit with SingleQubitCliffordGates, CZs and other ignored gates.
26
44
  c_cliff = transformers.optimize_for_target_gateset(
27
45
  circuit, gateset=CliffordTargetGateset(atol=atol)
28
46
  )
@@ -14,7 +14,7 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import Callable
17
+ from collections.abc import Callable
18
18
 
19
19
  from cirq import circuits, ops, transformers
20
20
  from cirq.contrib.paulistring.clifford_optimize import clifford_optimized_circuit