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
@@ -0,0 +1,44 @@
1
+ # Copyright 2025 The Cirq Developers
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # https://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ import pathlib
16
+
17
+ import numpy as np
18
+
19
+ import cirq
20
+ from cirq.contrib.quantikz.circuit_to_latex_render import render_circuit
21
+
22
+
23
+ def test_render_circuit(tmp_path: pathlib.Path) -> None:
24
+ q0, q1 = cirq.LineQubit.range(2)
25
+ circuit = cirq.Circuit(
26
+ cirq.H(q0),
27
+ cirq.CNOT(q0, q1),
28
+ cirq.rx(0.25 * np.pi).on(q1),
29
+ cirq.measure(q0, q1, key='result'),
30
+ )
31
+ # Render and display in Jupyter (if available), also save to a file
32
+ img_or_path = render_circuit(
33
+ circuit,
34
+ output_png_path=tmp_path / "my_circuit.png",
35
+ output_tex_path=tmp_path / "my_circuit.tex",
36
+ output_pdf_path=tmp_path / "my_circuit.pdf",
37
+ fold_at=2,
38
+ debug=True,
39
+ wire_labels="qid",
40
+ )
41
+ assert img_or_path is not None
42
+ assert (tmp_path / "my_circuit.png").is_file()
43
+ assert (tmp_path / "my_circuit.tex").is_file()
44
+ assert (tmp_path / "my_circuit.pdf").is_file()
@@ -5,8 +5,9 @@ https://arxiv.org/abs/1811.12926.
5
5
 
6
6
  from __future__ import annotations
7
7
 
8
+ from collections.abc import Callable
8
9
  from dataclasses import dataclass
9
- from typing import Callable, TYPE_CHECKING
10
+ from typing import TYPE_CHECKING
10
11
 
11
12
  import numpy as np
12
13
 
@@ -2,8 +2,8 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ from collections.abc import Sequence
5
6
  from functools import lru_cache
6
- from typing import Sequence
7
7
 
8
8
  import numpy as np
9
9
  import quimb
@@ -14,7 +14,8 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import Iterator, TYPE_CHECKING
17
+ from collections.abc import Iterator
18
+ from typing import TYPE_CHECKING
18
19
 
19
20
  import cirq
20
21
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Sequence
5
+ from collections.abc import Sequence
6
6
 
7
7
  import networkx as nx
8
8
  import numpy as np
@@ -21,7 +21,8 @@ from __future__ import annotations
21
21
 
22
22
  import dataclasses
23
23
  import math
24
- from typing import Any, Sequence, TYPE_CHECKING
24
+ from collections.abc import Sequence
25
+ from typing import Any, TYPE_CHECKING
25
26
 
26
27
  import numpy as np
27
28
  import quimb.tensor as qtn
@@ -42,7 +43,7 @@ class MPSOptions:
42
43
 
43
44
  # How to split the tensor. Refer to the Quimb documentation for the exact meaning.
44
45
  method: str = 'svds'
45
- # If integer, the maxmimum number of singular values to keep, regardless of ``cutoff``.
46
+ # If integer, the maximum number of singular values to keep, regardless of ``cutoff``.
46
47
  max_bond: int | None = None
47
48
  # Method with which to apply the cutoff threshold. Refer to the Quimb documentation.
48
49
  cutoff_mode: str = 'rsum2'
@@ -142,7 +143,7 @@ class MPSSimulator(
142
143
 
143
144
 
144
145
  class MPSTrialResult(simulator_base.SimulationTrialResultBase['MPSState']):
145
- """A single trial reult"""
146
+ """A single trial result"""
146
147
 
147
148
  def __init__(
148
149
  self,
@@ -3,7 +3,8 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import warnings
6
- from typing import cast, Sequence, TYPE_CHECKING
6
+ from collections.abc import Sequence
7
+ from typing import cast, TYPE_CHECKING
7
8
 
8
9
  import quimb
9
10
  import quimb.tensor as qtn
@@ -16,7 +16,8 @@ from __future__ import annotations
16
16
 
17
17
  import json
18
18
  import urllib.parse
19
- from typing import Any, cast, Iterable
19
+ from collections.abc import Iterable
20
+ from typing import Any, cast
20
21
 
21
22
  from cirq import circuits, devices, ops, protocols
22
23
  from cirq.contrib.quirk.linearize_circuit import linearize_circuit_qubits
@@ -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, devices, ops
20
20
 
@@ -14,7 +14,8 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import Any, Callable, cast
17
+ from collections.abc import Callable
18
+ from typing import Any, cast
18
19
 
19
20
  import numpy as np
20
21
  import sympy
@@ -15,7 +15,7 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import itertools
18
- from typing import Iterable
18
+ from collections.abc import Iterable
19
19
 
20
20
  import networkx as nx
21
21
 
@@ -15,7 +15,8 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import itertools
18
- from typing import Callable, cast, Iterable, Sequence, TYPE_CHECKING
18
+ from collections.abc import Callable, Iterable, Sequence
19
+ from typing import cast, TYPE_CHECKING
19
20
 
20
21
  import networkx as nx
21
22
  import numpy as np
@@ -15,7 +15,8 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import itertools
18
- from typing import cast, Hashable, TYPE_CHECKING
18
+ from collections.abc import Hashable
19
+ from typing import cast, TYPE_CHECKING
19
20
 
20
21
  import networkx as nx
21
22
  from sortedcontainers import SortedDict, SortedSet
@@ -14,7 +14,8 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import Callable, TYPE_CHECKING
17
+ from collections.abc import Callable
18
+ from typing import TYPE_CHECKING
18
19
 
19
20
  from cirq import circuits, protocols
20
21
  from cirq.contrib.routing.greedy import route_circuit_greedily
@@ -14,7 +14,8 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import Iterable, TYPE_CHECKING
17
+ from collections.abc import Iterable
18
+ from typing import TYPE_CHECKING
18
19
 
19
20
  import cirq.contrib.acquaintance as cca
20
21
  from cirq import ops
@@ -16,7 +16,8 @@ from __future__ import annotations
16
16
 
17
17
  import operator
18
18
  import re
19
- from typing import Callable, Iterable, TYPE_CHECKING
19
+ from collections.abc import Callable, Iterable
20
+ from typing import TYPE_CHECKING
20
21
 
21
22
  import networkx as nx
22
23
 
@@ -17,7 +17,8 @@
17
17
  from __future__ import annotations
18
18
 
19
19
  import time
20
- from typing import Sequence, TYPE_CHECKING
20
+ from collections.abc import Sequence
21
+ from typing import TYPE_CHECKING
21
22
 
22
23
  import attrs
23
24
  import numpy as np
@@ -105,7 +106,7 @@ def _generate_readout_calibration_circuits(
105
106
  readout_calibration_circuits.append(
106
107
  circuits.Circuit(
107
108
  [bit_to_gate[bit](qubit) for bit, qubit in zip(bitstr, qubits)]
108
- + [ops.M(qubits, key="m")]
109
+ + [ops.M(qubits, key="result")]
109
110
  )
110
111
  )
111
112
  return readout_calibration_circuits, random_bitstrings
@@ -137,11 +138,12 @@ def _generate_parameterized_readout_calibration_circuit_with_sweep(
137
138
 
138
139
  exp_symbols = [sympy.Symbol(f'exp_{qubit}') for qubit in qubits]
139
140
  parameterized_readout_calibration_circuit = circuits.Circuit(
140
- [ops.X(qubit) ** exp for exp, qubit in zip(exp_symbols, qubits)], ops.M(*qubits, key="m")
141
+ [ops.X(qubit) ** exp for exp, qubit in zip(exp_symbols, qubits)],
142
+ ops.M(*qubits, key="result"),
141
143
  )
142
144
  sweep_params = []
143
145
  for bitstr in random_bitstrings:
144
- sweep_params.append({exp: bit for exp, bit in zip(exp_symbols, bitstr)})
146
+ sweep_params.append({str(exp): bit for exp, bit in zip(exp_symbols, bitstr)})
145
147
 
146
148
  return parameterized_readout_calibration_circuit, sweep_params, random_bitstrings
147
149
 
@@ -272,7 +274,7 @@ def _analyze_readout_results(
272
274
  )
273
275
 
274
276
 
275
- @deprecated(deadline="v2.0", fix="Use run_shuffled_circuits_with_readout_benchmarking() instead.")
277
+ @deprecated(deadline="v1.8", fix="Use run_shuffled_circuits_with_readout_benchmarking() instead.")
276
278
  def run_shuffled_with_readout_benchmarking(
277
279
  input_circuits: list[circuits.Circuit],
278
280
  sampler: work.Sampler,
@@ -15,7 +15,7 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import itertools
18
- from typing import Sequence
18
+ from collections.abc import Sequence
19
19
 
20
20
  import numpy as np
21
21
  import pytest
@@ -401,7 +401,7 @@ def test_deprecated_run_shuffled_with_readout_benchmarking() -> None:
401
401
  num_random_bitstrings = 100
402
402
 
403
403
  # Test with an integer seed.
404
- with cirq.testing.assert_deprecated(deadline='v2.0', count=1):
404
+ with cirq.testing.assert_deprecated(deadline='v1.8', count=1):
405
405
  measurements_seed, results_seed = sc_readout.run_shuffled_with_readout_benchmarking(
406
406
  input_circuits=input_circuits,
407
407
  sampler=sampler,
@@ -420,7 +420,7 @@ def test_deprecated_run_shuffled_with_readout_benchmarking() -> None:
420
420
  assert 0.18 < error < 0.22
421
421
 
422
422
  # Test with qubits=None to cover the auto-detection branch.
423
- with cirq.testing.assert_deprecated(deadline='v2.0', count=1):
423
+ with cirq.testing.assert_deprecated(deadline='v1.8', count=1):
424
424
  _, results_none = sc_readout.run_shuffled_with_readout_benchmarking(
425
425
  input_circuits=input_circuits,
426
426
  sampler=sampler,
@@ -434,7 +434,7 @@ def test_deprecated_run_shuffled_with_readout_benchmarking() -> None:
434
434
  assert set(qlist_none) == set(qubits)
435
435
 
436
436
  # Test circuit_repetitions must be > 0
437
- with cirq.testing.assert_deprecated(deadline="v2.0", count=1):
437
+ with cirq.testing.assert_deprecated(deadline="v1.8", count=1):
438
438
  with pytest.raises(ValueError, match="Must provide non-zero circuit_repetitions."):
439
439
  sc_readout.run_shuffled_with_readout_benchmarking(
440
440
  input_circuits,
@@ -446,7 +446,7 @@ def test_deprecated_run_shuffled_with_readout_benchmarking() -> None:
446
446
  )
447
447
 
448
448
  # Test num_random_bitstrings must be >= 0
449
- with cirq.testing.assert_deprecated(deadline="v2.0", count=1):
449
+ with cirq.testing.assert_deprecated(deadline="v1.8", count=1):
450
450
  with pytest.raises(ValueError, match="Must provide zero or more num_random_bitstrings."):
451
451
  sc_readout.run_shuffled_with_readout_benchmarking(
452
452
  input_circuits,
@@ -458,7 +458,7 @@ def test_deprecated_run_shuffled_with_readout_benchmarking() -> None:
458
458
  )
459
459
 
460
460
  # Test readout_repetitions must be > 0
461
- with cirq.testing.assert_deprecated(deadline="v2.0", count=1):
461
+ with cirq.testing.assert_deprecated(deadline="v1.8", count=1):
462
462
  with pytest.raises(
463
463
  ValueError, match="Must provide non-zero readout_repetitions for readout calibration."
464
464
  ):
cirq/devices/device.py CHANGED
@@ -15,7 +15,8 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import abc
18
- from typing import Iterable, TYPE_CHECKING
18
+ from collections.abc import Iterable
19
+ from typing import TYPE_CHECKING
19
20
 
20
21
  import networkx as nx
21
22
 
@@ -16,7 +16,8 @@
16
16
 
17
17
  from __future__ import annotations
18
18
 
19
- from typing import cast, Iterable, Mapping, TYPE_CHECKING
19
+ from collections.abc import Iterable, Mapping
20
+ from typing import cast, TYPE_CHECKING
20
21
 
21
22
  import networkx as nx
22
23
 
@@ -17,7 +17,8 @@ from __future__ import annotations
17
17
  import abc
18
18
  import functools
19
19
  import weakref
20
- from typing import Any, Iterable, Self, TYPE_CHECKING
20
+ from collections.abc import Iterable
21
+ from typing import Any, Self, TYPE_CHECKING
21
22
 
22
23
  import numpy as np
23
24
 
@@ -285,7 +286,7 @@ class GridQid(_BaseGridQid):
285
286
 
286
287
  @staticmethod
287
288
  def from_diagram(diagram: str, dimension: int) -> list[GridQid]:
288
- """Parse ASCII art device layout into a device.
289
+ r"""Parse ASCII art device layout into a device.
289
290
 
290
291
  As an example, the below diagram will create a list of GridQid in a
291
292
  pyramid structure.
@@ -322,7 +323,7 @@ class GridQid(_BaseGridQid):
322
323
  a row. Alphanumeric characters are assigned as qid.
323
324
  Dots ('.'), dashes ('-'), and spaces (' ') are treated as
324
325
  empty locations in the grid. If diagram has characters other
325
- than alphanumerics, spacers, and newlines ('\\n'), an error will
326
+ than alphanumerics, spacers, and newlines ('\n'), an error will
326
327
  be thrown. The top-left corner of the diagram will be have
327
328
  coordinate (0, 0).
328
329
 
@@ -439,7 +440,7 @@ class GridQubit(_BaseGridQid):
439
440
 
440
441
  @staticmethod
441
442
  def from_diagram(diagram: str) -> list[GridQubit]:
442
- """Parse ASCII art into device layout info.
443
+ r"""Parse ASCII art into device layout info.
443
444
 
444
445
  As an example, the below diagram will create a list of
445
446
  GridQubit in a pyramid structure.
@@ -476,7 +477,7 @@ class GridQubit(_BaseGridQid):
476
477
  a row. Alphanumeric characters are assigned as qid.
477
478
  Dots ('.'), dashes ('-'), and spaces (' ') are treated as
478
479
  empty locations in the grid. If diagram has characters other
479
- than alphanumerics, spacers, and newlines ('\\n'), an error will
480
+ than alphanumerics, spacers, and newlines ('\n'), an error will
480
481
  be thrown. The top-left corner of the diagram will be have
481
482
  coordinate (0,0).
482
483
 
@@ -503,7 +504,7 @@ class GridQubit(_BaseGridQid):
503
504
 
504
505
 
505
506
  def _ascii_diagram_to_coords(diagram: str) -> list[tuple[int, int]]:
506
- """Parse ASCII art device layout into info about qids coordinates
507
+ r"""Parse ASCII art device layout into info about qids coordinates
507
508
 
508
509
  Args:
509
510
  diagram: String representing the qid layout. Each line represents
@@ -15,7 +15,8 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import dataclasses
18
- from typing import Any, Mapping, Sequence, TYPE_CHECKING
18
+ from collections.abc import Mapping, Sequence
19
+ from typing import Any, TYPE_CHECKING
19
20
 
20
21
  from cirq import devices
21
22
  from cirq.devices import noise_utils
@@ -17,7 +17,8 @@ from __future__ import annotations
17
17
  import abc
18
18
  import functools
19
19
  import weakref
20
- from typing import Any, Iterable, Self, Sequence, TYPE_CHECKING
20
+ from collections.abc import Iterable, Sequence
21
+ from typing import Any, Self, TYPE_CHECKING
21
22
 
22
23
  from cirq import ops, protocols
23
24
 
@@ -16,8 +16,9 @@ from __future__ import annotations
16
16
 
17
17
  import abc
18
18
  import warnings
19
+ from collections.abc import Callable, Iterable, Sequence
19
20
  from dataclasses import dataclass
20
- from typing import Any, Callable, Iterable, Sequence, TYPE_CHECKING, Union
21
+ from typing import Any, TYPE_CHECKING, Union
21
22
 
22
23
  import networkx as nx
23
24
  from matplotlib import pyplot as plt
@@ -14,7 +14,8 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import Any, Callable, Iterable, Sequence, TYPE_CHECKING, Union
17
+ from collections.abc import Callable, Iterable, Sequence
18
+ from typing import Any, TYPE_CHECKING, Union
18
19
 
19
20
  from cirq import ops, protocols, value
20
21
  from cirq._doc import document
@@ -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 pytest
@@ -22,7 +22,8 @@ noise models to produce a single noise model which replicates device noise.
22
22
  from __future__ import annotations
23
23
 
24
24
  import abc
25
- from typing import Iterable, Sequence, TYPE_CHECKING
25
+ from collections.abc import Iterable, Sequence
26
+ from typing import TYPE_CHECKING
26
27
 
27
28
  from cirq import _import, devices, ops, protocols, value
28
29
  from cirq.devices.noise_utils import PHYSICAL_GATE_TAG
@@ -14,7 +14,8 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import Any, Sequence
17
+ from collections.abc import Sequence
18
+ from typing import Any
18
19
 
19
20
  import numpy as np
20
21
  import pytest
@@ -15,7 +15,8 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import functools
18
- from typing import Sequence, TYPE_CHECKING
18
+ from collections.abc import Sequence
19
+ from typing import TYPE_CHECKING
19
20
 
20
21
  import numpy as np
21
22
  import sympy
@@ -90,3 +90,5 @@ from cirq.experiments.z_phase_calibration import (
90
90
  z_phase_calibration_workflow as z_phase_calibration_workflow,
91
91
  calibrate_z_phases as calibrate_z_phases,
92
92
  )
93
+
94
+ from cirq.experiments.ghz_2d import generate_2d_ghz_circuit as generate_2d_ghz_circuit
@@ -16,8 +16,9 @@
16
16
 
17
17
  from __future__ import annotations
18
18
 
19
+ from collections.abc import Iterable, Mapping, Sequence
19
20
  from concurrent import futures
20
- from typing import Iterable, Mapping, overload, Sequence, TYPE_CHECKING, Union
21
+ from typing import overload, TYPE_CHECKING, Union
21
22
 
22
23
  import attrs
23
24
  import networkx as nx
@@ -15,8 +15,8 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import itertools
18
+ from collections.abc import Iterator
18
19
  from concurrent import futures
19
- from typing import Iterator
20
20
 
21
21
  import networkx as nx
22
22
  import numpy as np
@@ -16,7 +16,8 @@
16
16
 
17
17
  from __future__ import annotations
18
18
 
19
- from typing import Callable, Mapping, Sequence, TYPE_CHECKING
19
+ from collections.abc import Callable, Mapping, Sequence
20
+ from typing import TYPE_CHECKING
20
21
 
21
22
  import numpy as np
22
23
 
@@ -15,7 +15,7 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import itertools
18
- from typing import Sequence
18
+ from collections.abc import Sequence
19
19
 
20
20
  import numpy as np
21
21
  import pytest