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,150 @@
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
+ """Functions for generating and transforming 2D GHZ circuits."""
16
+
17
+ import networkx as nx
18
+ import numpy as np
19
+
20
+ import cirq.circuits as circuits
21
+ import cirq.devices as devices
22
+ import cirq.ops as ops
23
+ import cirq.protocols as protocols
24
+ import cirq.transformers as transformers
25
+
26
+
27
+ def _transform_circuit(circuit: circuits.Circuit) -> circuits.Circuit:
28
+ """Transforms a Cirq circuit by applying a series of modifications.
29
+
30
+ This is an internal helper function used exclusively by
31
+ `generate_2d_ghz_circuit` when `add_dd_and_align_right` is True.
32
+
33
+ The transformations for a circuit include:
34
+ 1. Adding a measurement to all qubits with a key 'm'.
35
+ It serves as a stopping gate for the DD operation.
36
+ 2. Aligning the circuit and merging single-qubit gates.
37
+ 3. Stratifying the operations based on qubit count
38
+ (1-qubit and 2-qubit gates).
39
+ 4. Applying dynamical decoupling to mitigate noise.
40
+ 5. Removing the final measurement operation to yield
41
+ the state preparation circuit.
42
+
43
+ Args:
44
+ circuit: A cirq.Circuit object.
45
+
46
+ Returns:
47
+ The modified cirq.Circuit object.
48
+ """
49
+ qubits = list(circuit.all_qubits())
50
+ circuit = circuit + circuits.Circuit(ops.measure(*qubits, key="m"))
51
+ circuit = transformers.align_right(transformers.merge_single_qubit_gates_to_phxz(circuit))
52
+ circuit = transformers.stratified_circuit(
53
+ circuit[::-1], categories=[lambda op: protocols.num_qubits(op) == k for k in (1, 2)]
54
+ )[::-1]
55
+ circuit = transformers.add_dynamical_decoupling(circuit)
56
+ circuit = circuits.Circuit(circuit[:-1])
57
+ return circuit
58
+
59
+
60
+ def generate_2d_ghz_circuit(
61
+ center: devices.GridQubit,
62
+ graph: nx.Graph,
63
+ num_qubits: int,
64
+ randomized: bool = False,
65
+ rng_or_seed: int | np.random.Generator | None = None,
66
+ add_dd_and_align_right: bool = False,
67
+ ) -> circuits.Circuit:
68
+ """Generates a 2D GHZ state circuit with 'num_qubits' qubits using BFS.
69
+
70
+ The circuit is constructed by connecting qubits
71
+ sequentially based on graph connectivity,
72
+ starting from the 'center' qubit.
73
+ The GHZ state is built using a series of H-CZ-H
74
+ gate sequences.
75
+
76
+
77
+ Args:
78
+ center: The starting qubit for the GHZ state.
79
+ graph: The connectivity graph of the qubits.
80
+ num_qubits: The number of qubits for the final
81
+ GHZ state. Must be greater than 0,
82
+ and less than or equal to
83
+ the total number of qubits
84
+ on the processor.
85
+ randomized: If True, neighbors are
86
+ added to the circuit in a random order.
87
+ If False, they are
88
+ added by distance from the center.
89
+ rng_or_seed: An optional seed or numpy random number
90
+ generator. Used only when randomized is True
91
+ add_dd_and_align_right: If True, adds dynamical
92
+ decoupling and aligns right.
93
+
94
+ Returns:
95
+ A cirq.Circuit object for the GHZ state.
96
+
97
+ Raises:
98
+ ValueError: If num_qubits is non-positive or exceeds the total
99
+ number of qubits on the processor.
100
+ """
101
+ if num_qubits <= 0:
102
+ raise ValueError("num_qubits must be a positive integer.")
103
+
104
+ if num_qubits > len(graph.nodes):
105
+ raise ValueError("num_qubits cannot exceed the total number of qubits on the processor.")
106
+
107
+ if randomized:
108
+ rng = (
109
+ rng_or_seed
110
+ if isinstance(rng_or_seed, np.random.Generator)
111
+ else np.random.default_rng(rng_or_seed)
112
+ )
113
+
114
+ def sort_neighbors_fn(neighbors: list) -> list:
115
+ """If 'randomized' is True, sort the neighbors randomly."""
116
+ neighbors = list(neighbors)
117
+ rng.shuffle(neighbors)
118
+ return neighbors
119
+
120
+ else:
121
+
122
+ def sort_neighbors_fn(neighbors: list) -> list:
123
+ """If 'randomized' is False, sort the neighbors as per
124
+ distance from the center.
125
+ """
126
+ return sorted(
127
+ neighbors, key=lambda q: (q.row - center.row) ** 2 + (q.col - center.col) ** 2
128
+ )
129
+
130
+ bfs_tree = nx.bfs_tree(graph, center, sort_neighbors=sort_neighbors_fn)
131
+ qubits_to_include = list(bfs_tree.nodes)[:num_qubits]
132
+ final_tree = bfs_tree.subgraph(qubits_to_include)
133
+
134
+ ghz_ops = []
135
+
136
+ for node in nx.topological_sort(final_tree):
137
+ # Handling the center qubit first
138
+ if node == center:
139
+ ghz_ops.append(ops.H(node))
140
+ continue
141
+
142
+ for parent in final_tree.predecessors(node):
143
+ ghz_ops.extend([ops.H(node), ops.CZ(parent, node), ops.H(node)])
144
+
145
+ circuit = circuits.Circuit(ghz_ops)
146
+
147
+ if add_dd_and_align_right:
148
+ return _transform_circuit(circuit)
149
+ else:
150
+ return circuit
@@ -0,0 +1,155 @@
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
+ """Tests for generating and validating 2D GHZ state circuits."""
16
+
17
+ from typing import cast
18
+
19
+ import networkx as nx
20
+ import numpy as np
21
+ import pytest
22
+
23
+ import cirq
24
+ import cirq.experiments.ghz_2d as ghz_2d
25
+
26
+
27
+ def _create_mock_graph():
28
+ qubits = cirq.GridQubit.rect(6, 6)
29
+ g = nx.Graph()
30
+ for q in qubits:
31
+ g.add_node(q)
32
+ if q.col + 1 < 6:
33
+ g.add_edge(q, cirq.GridQubit(q.row, q.col + 1))
34
+ if q.row + 1 < 6:
35
+ g.add_edge(q, cirq.GridQubit(q.row + 1, q.col))
36
+ return g, cirq.GridQubit(3, 3)
37
+
38
+
39
+ graph, center_qubit = _create_mock_graph()
40
+
41
+
42
+ @pytest.mark.parametrize("num_qubits", list(range(1, len(graph.nodes) + 1)))
43
+ @pytest.mark.parametrize("randomized", [True, False])
44
+ @pytest.mark.parametrize("add_dd_and_align_right", [True, False])
45
+ def test_ghz_circuits_size(num_qubits: int, randomized: bool, add_dd_and_align_right: bool) -> None:
46
+ """Tests the size of the GHZ circuits."""
47
+ circuit = ghz_2d.generate_2d_ghz_circuit(
48
+ center_qubit,
49
+ graph,
50
+ num_qubits=num_qubits,
51
+ randomized=randomized,
52
+ add_dd_and_align_right=add_dd_and_align_right,
53
+ )
54
+ assert len(circuit.all_qubits()) == num_qubits
55
+
56
+
57
+ @pytest.mark.parametrize("num_qubits", [2, 3, 4, 5, 6, 8, 10])
58
+ @pytest.mark.parametrize("randomized", [True, False])
59
+ @pytest.mark.parametrize("add_dd_and_align_right", [True, False]) # , True
60
+ def test_ghz_circuits_state(
61
+ num_qubits: int, randomized: bool, add_dd_and_align_right: bool
62
+ ) -> None:
63
+ """Tests the state vector form of the GHZ circuits."""
64
+
65
+ circuit = ghz_2d.generate_2d_ghz_circuit(
66
+ center_qubit,
67
+ graph,
68
+ num_qubits=num_qubits,
69
+ randomized=randomized,
70
+ add_dd_and_align_right=add_dd_and_align_right,
71
+ )
72
+
73
+ simulator = cirq.Simulator()
74
+ result = simulator.simulate(circuit)
75
+ state = result.final_state_vector
76
+
77
+ np.testing.assert_allclose(np.abs(state[0]), 1 / np.sqrt(2), atol=1e-7)
78
+ np.testing.assert_allclose(np.abs(state[-1]), 1 / np.sqrt(2), atol=1e-7)
79
+
80
+ if num_qubits > 1:
81
+ np.testing.assert_allclose(state[1:-1], 0)
82
+
83
+
84
+ def test_transform_circuit_properties() -> None:
85
+ """Tests that _transform_circuit preserves circuit properties."""
86
+ circuit = ghz_2d.generate_2d_ghz_circuit(
87
+ center_qubit, graph, num_qubits=9, randomized=False, add_dd_and_align_right=False
88
+ )
89
+ transformed_circuit = ghz_2d._transform_circuit(circuit)
90
+
91
+ assert transformed_circuit.all_qubits() == circuit.all_qubits()
92
+
93
+ assert len(transformed_circuit) >= len(circuit)
94
+
95
+ final_moment = transformed_circuit[-1]
96
+ assert not any(isinstance(op.gate, cirq.MeasurementGate) for op in final_moment)
97
+
98
+ assert cirq.equal_up_to_global_phase(circuit.unitary(), transformed_circuit.unitary())
99
+
100
+
101
+ def manhattan_distance(q1: cirq.GridQubit, q2: cirq.GridQubit) -> int:
102
+ """Calculates the Manhattan distance between two GridQubits."""
103
+ return abs(q1.row - q2.row) + abs(q1.col - q2.col)
104
+
105
+
106
+ @pytest.mark.parametrize("num_qubits", [2, 4, 9, 15, 20])
107
+ def test_ghz_circuits_bfs_order(num_qubits: int) -> None:
108
+ """Verifies that the circuit construction maintains BFS order"""
109
+
110
+ circuit = ghz_2d.generate_2d_ghz_circuit(
111
+ center_qubit,
112
+ graph,
113
+ num_qubits=num_qubits,
114
+ randomized=False, # Test must run on the deterministic BFS order
115
+ add_dd_and_align_right=False, # Test must run on the raw circuit
116
+ )
117
+
118
+ max_dist_seen = 0
119
+
120
+ for moment in circuit:
121
+ for op in moment:
122
+ if isinstance(op.gate, cirq.CZPowGate):
123
+ qubits = op.qubits
124
+
125
+ dist_q0 = manhattan_distance(center_qubit, cast(cirq.GridQubit, qubits[0]))
126
+ dist_q1 = manhattan_distance(center_qubit, cast(cirq.GridQubit, qubits[1]))
127
+
128
+ child_qubit_distance = max(dist_q0, dist_q1)
129
+
130
+ if child_qubit_distance > max_dist_seen:
131
+ assert child_qubit_distance == max_dist_seen + 1
132
+ max_dist_seen = child_qubit_distance
133
+
134
+ assert child_qubit_distance <= max_dist_seen
135
+
136
+ included_qubits = circuit.all_qubits()
137
+ if included_qubits:
138
+ max_dist_required = max(
139
+ manhattan_distance(center_qubit, cast(cirq.GridQubit, q)) for q in included_qubits
140
+ )
141
+ assert max_dist_seen == max_dist_required
142
+
143
+
144
+ def test_ghz_invalid_inputs():
145
+ """Tests that the function raises errors for invalid inputs."""
146
+
147
+ with pytest.raises(ValueError, match="num_qubits must be a positive integer."):
148
+ ghz_2d.generate_2d_ghz_circuit(center_qubit, graph, num_qubits=0) # invalid
149
+
150
+ with pytest.raises(
151
+ ValueError, match="num_qubits cannot exceed the total number of qubits on the processor."
152
+ ):
153
+ ghz_2d.generate_2d_ghz_circuit(
154
+ center_qubit, graph, num_qubits=len(graph.nodes) + 1 # invalid
155
+ )
@@ -20,7 +20,8 @@ so that occurs outside of the StateTomographyExperiment class.
20
20
 
21
21
  from __future__ import annotations
22
22
 
23
- from typing import Sequence, TYPE_CHECKING
23
+ from collections.abc import Sequence
24
+ from typing import TYPE_CHECKING
24
25
 
25
26
  import numpy as np
26
27
  import sympy
@@ -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
@@ -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
 
@@ -18,7 +18,8 @@ import dataclasses
18
18
  import functools
19
19
  import itertools
20
20
  import uuid
21
- from typing import Any, cast, Iterator, Mapping, Optional, Sequence, TYPE_CHECKING
21
+ from collections.abc import Iterator, Mapping, Sequence
22
+ from typing import Any, cast, Optional, TYPE_CHECKING
22
23
 
23
24
  import attrs
24
25
  import numpy as np
@@ -17,7 +17,8 @@ from __future__ import annotations
17
17
 
18
18
  import dataclasses
19
19
  import itertools
20
- from typing import Any, Callable, Container, Iterable, Iterator, Sequence, TYPE_CHECKING
20
+ from collections.abc import Callable, Container, Iterable, Iterator, Sequence
21
+ from typing import Any, TYPE_CHECKING
21
22
 
22
23
  import numpy as np
23
24
 
@@ -15,7 +15,8 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import itertools
18
- from typing import Callable, cast, Iterable, Sequence
18
+ from collections.abc import Callable, Iterable, Sequence
19
+ from typing import cast
19
20
 
20
21
  import networkx as nx
21
22
  import numpy as np
@@ -17,7 +17,8 @@
17
17
  from __future__ import annotations
18
18
 
19
19
  import time
20
- from typing import Any, cast, Sequence, TYPE_CHECKING
20
+ from collections.abc import Sequence
21
+ from typing import Any, cast, TYPE_CHECKING
21
22
 
22
23
  import numpy as np
23
24
  import scipy.optimize
@@ -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
@@ -18,7 +18,8 @@ from __future__ import annotations
18
18
 
19
19
  import dataclasses
20
20
  import time
21
- from typing import Any, cast, Iterable, TYPE_CHECKING
21
+ from collections.abc import Iterable
22
+ from typing import Any, cast, TYPE_CHECKING
22
23
 
23
24
  import matplotlib.pyplot as plt
24
25
  import numpy as np
@@ -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
@@ -15,7 +15,8 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import warnings
18
- from typing import Any, cast, Sequence, TYPE_CHECKING
18
+ from collections.abc import Sequence
19
+ from typing import Any, cast, TYPE_CHECKING
19
20
 
20
21
  import numpy as np
21
22
  import pandas as pd
@@ -18,9 +18,10 @@ from __future__ import annotations
18
18
 
19
19
  import functools
20
20
  import itertools
21
+ from collections.abc import Mapping, Sequence
21
22
  from dataclasses import dataclass
22
23
  from types import MappingProxyType
23
- from typing import Any, cast, Mapping, Sequence, TYPE_CHECKING
24
+ from typing import Any, cast, TYPE_CHECKING
24
25
 
25
26
  import networkx as nx
26
27
  import numpy as np
@@ -18,7 +18,7 @@ from __future__ import annotations
18
18
 
19
19
  import io
20
20
  import itertools
21
- from typing import Sequence
21
+ from collections.abc import Sequence
22
22
 
23
23
  import matplotlib.pyplot as plt
24
24
  import networkx as nx
@@ -18,7 +18,8 @@ from __future__ import annotations
18
18
 
19
19
  import dataclasses
20
20
  from abc import ABC, abstractmethod
21
- from typing import Iterable, Sequence, TYPE_CHECKING
21
+ from collections.abc import Iterable, Sequence
22
+ from typing import TYPE_CHECKING
22
23
 
23
24
  import numpy as np
24
25
  import pandas as pd
@@ -16,7 +16,7 @@ from __future__ import annotations
16
16
 
17
17
  import itertools
18
18
  import multiprocessing
19
- from typing import Iterable, Iterator, Sequence
19
+ from collections.abc import Iterable, Iterator, Sequence
20
20
 
21
21
  import networkx as nx
22
22
  import numpy as np
@@ -19,8 +19,10 @@ from __future__ import annotations
19
19
  import os
20
20
  import time
21
21
  import uuid
22
+ from collections.abc import Callable, Sequence
23
+ from contextlib import AbstractContextManager
22
24
  from dataclasses import dataclass
23
- from typing import Any, Callable, ContextManager, Sequence, TYPE_CHECKING
25
+ from typing import Any, TYPE_CHECKING
24
26
 
25
27
  import numpy as np
26
28
  import pandas as pd
@@ -257,7 +259,7 @@ def _execute_sample_2q_xeb_tasks_in_batches(
257
259
  combinations_by_layer: list[CircuitLibraryCombination],
258
260
  repetitions: int,
259
261
  batch_size: int,
260
- progress_bar: Callable[..., ContextManager],
262
+ progress_bar: Callable[..., AbstractContextManager],
261
263
  dataset_directory: str | None = None,
262
264
  ) -> list[dict[str, Any]]:
263
265
  """Helper function used in `sample_2q_xeb_circuits` to batch and execute sampling tasks."""
@@ -287,7 +289,7 @@ def sample_2q_xeb_circuits(
287
289
  *,
288
290
  repetitions: int = 10_000,
289
291
  batch_size: int = 9,
290
- progress_bar: Callable[..., ContextManager] | None = tqdm.tqdm,
292
+ progress_bar: Callable[..., AbstractContextManager] | None = tqdm.tqdm,
291
293
  combinations_by_layer: list[CircuitLibraryCombination] | None = None,
292
294
  shuffle: cirq.RANDOM_STATE_OR_SEED_LIKE | None = None,
293
295
  dataset_directory: str | None = None,
@@ -16,7 +16,7 @@ from __future__ import annotations
16
16
 
17
17
  import glob
18
18
  import itertools
19
- from typing import Iterable
19
+ from collections.abc import Iterable
20
20
 
21
21
  import networkx as nx
22
22
  import numpy as np
@@ -16,8 +16,9 @@
16
16
 
17
17
  from __future__ import annotations
18
18
 
19
+ from collections.abc import Sequence
19
20
  from dataclasses import dataclass
20
- from typing import Any, Sequence, TYPE_CHECKING
21
+ from typing import Any, TYPE_CHECKING
21
22
 
22
23
  import numpy as np
23
24
  import pandas as pd
@@ -15,7 +15,8 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import multiprocessing
18
- from typing import Any, Iterator, Sequence
18
+ from collections.abc import Iterator, Sequence
19
+ from typing import Any
19
20
 
20
21
  import numpy as np
21
22
  import pandas as pd
@@ -18,7 +18,8 @@ from __future__ import annotations
18
18
 
19
19
  import multiprocessing
20
20
  import multiprocessing.pool
21
- from typing import Any, Sequence, TYPE_CHECKING
21
+ from collections.abc import Sequence
22
+ from typing import Any, TYPE_CHECKING
22
23
 
23
24
  import matplotlib.pyplot as plt
24
25
  import numpy as np
@@ -14,6 +14,9 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
+ import multiprocessing
18
+ from collections.abc import Iterator
19
+
17
20
  import numpy as np
18
21
  import pandas as pd
19
22
  import pytest
@@ -31,6 +34,15 @@ _ANGLES = ['theta', 'phi', 'chi', 'zeta', 'gamma']
31
34
  # fix random generator seed to ensure reproducibility and faster convergence
32
35
  _SEED = 276154030
33
36
 
37
+ _POOL_NUM_PROCESSES = min(4, multiprocessing.cpu_count())
38
+
39
+
40
+ @pytest.fixture
41
+ def pool() -> Iterator[multiprocessing.pool.Pool]:
42
+ ctx = multiprocessing.get_context()
43
+ with ctx.Pool(_POOL_NUM_PROCESSES) as pool:
44
+ yield pool
45
+
34
46
 
35
47
  def _create_tests(n, with_options: bool = False):
36
48
  rng = np.random.default_rng(_SEED)
@@ -88,7 +100,7 @@ class _TestSimulator(cirq.Simulator):
88
100
  @pytest.mark.parametrize(
89
101
  ['angles', 'error', 'characterization_flags'], _create_tests(n=10, with_options=True)
90
102
  )
91
- def test_calibrate_z_phases(angles, error, characterization_flags) -> None:
103
+ def test_calibrate_z_phases(pool, angles, error, characterization_flags) -> None:
92
104
 
93
105
  original_gate = cirq.PhasedFSimGate(**{k: v for k, v in zip(_ANGLES, angles)})
94
106
  actual_gate = cirq.PhasedFSimGate(**{k: v + e for k, v, e in zip(_ANGLES, angles, error)})
@@ -109,6 +121,7 @@ def test_calibrate_z_phases(angles, error, characterization_flags) -> None:
109
121
  n_circuits=10,
110
122
  cycle_depths=range(3, 10),
111
123
  random_state=_SEED,
124
+ num_workers_or_pool=pool,
112
125
  )[qubits]
113
126
 
114
127
  initial_unitary = cirq.unitary(original_gate)
@@ -127,7 +140,7 @@ def test_calibrate_z_phases(angles, error, characterization_flags) -> None:
127
140
 
128
141
 
129
142
  @pytest.mark.parametrize(['angles', 'error'], _create_tests(n=3))
130
- def test_calibrate_z_phases_no_options(angles, error) -> None:
143
+ def test_calibrate_z_phases_no_options(pool, angles, error) -> None:
131
144
 
132
145
  original_gate = cirq.PhasedFSimGate(**{k: v for k, v in zip(_ANGLES, angles)})
133
146
  actual_gate = cirq.PhasedFSimGate(**{k: v + e for k, v, e in zip(_ANGLES, angles, error)})
@@ -144,6 +157,7 @@ def test_calibrate_z_phases_no_options(angles, error) -> None:
144
157
  n_circuits=10,
145
158
  cycle_depths=range(3, 10),
146
159
  random_state=_SEED,
160
+ num_workers_or_pool=pool,
147
161
  )[qubits]
148
162
 
149
163
  initial_unitary = cirq.unitary(original_gate)
@@ -162,7 +176,7 @@ def test_calibrate_z_phases_no_options(angles, error) -> None:
162
176
 
163
177
 
164
178
  @pytest.mark.parametrize(['angles', 'error'], _create_tests(n=3))
165
- def test_calibrate_z_phases_workflow_no_options(angles, error) -> None:
179
+ def test_calibrate_z_phases_workflow_no_options(pool, angles, error) -> None:
166
180
 
167
181
  original_gate = cirq.PhasedFSimGate(**{k: v for k, v in zip(_ANGLES, angles)})
168
182
  actual_gate = cirq.PhasedFSimGate(**{k: v + e for k, v, e in zip(_ANGLES, angles, error)})
@@ -179,6 +193,7 @@ def test_calibrate_z_phases_workflow_no_options(angles, error) -> None:
179
193
  n_circuits=1,
180
194
  cycle_depths=(1, 2),
181
195
  random_state=_SEED,
196
+ num_workers_or_pool=pool,
182
197
  )
183
198
 
184
199
  for params in result.final_params.values():
@@ -36,5 +36,4 @@ from cirq.interop.quirk.cells.input_rotation_cells import (
36
36
  QuirkInputRotationOperation as QuirkInputRotationOperation,
37
37
  )
38
38
 
39
- import cirq.interop.quirk.cells.swap_cell
40
- import cirq.interop.quirk.cells.control_cells # noqa: F401
39
+ from cirq.interop.quirk.cells import control_cells as control_cells, swap_cell as swap_cell
@@ -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
  from cirq.interop.quirk.cells.arithmetic_cells import generate_all_arithmetic_cell_makers
20
21
  from cirq.interop.quirk.cells.control_cells import generate_all_control_cell_makers
@@ -15,7 +15,8 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import inspect
18
- from typing import Any, Callable, cast, Iterable, Iterator, Sequence, TYPE_CHECKING
18
+ from collections.abc import Callable, Iterable, Iterator, Sequence
19
+ from typing import Any, cast, TYPE_CHECKING
19
20
 
20
21
  from cirq import ops, value
21
22
  from cirq.interop.quirk.cells.cell import Cell, CELL_SIZES, CellMaker
@@ -15,7 +15,8 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import abc
18
- from typing import Any, Callable, Iterable, NamedTuple, Sequence, TYPE_CHECKING, Union
18
+ from collections.abc import Callable, Iterable, Sequence
19
+ from typing import Any, NamedTuple, TYPE_CHECKING, Union
19
20
 
20
21
  from cirq import devices, ops, value
21
22
 
@@ -14,7 +14,8 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import Callable, cast, Iterable, Iterator, Sequence, TYPE_CHECKING, TypeVar
17
+ from collections.abc import Callable, Iterable, Iterator, Sequence
18
+ from typing import cast, TYPE_CHECKING, TypeVar
18
19
 
19
20
  from cirq import circuits
20
21
  from cirq.interop.quirk.cells.cell import Cell