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,15 +14,15 @@ from cirq.transformers.heuristic_decompositions.gate_tabulation_math_utils impor
14
14
  )
15
15
 
16
16
 
17
- def test_weyl_chamber_mesh_spacing_too_small_throws_error():
17
+ def test_weyl_chamber_mesh_spacing_too_small_throws_error() -> None:
18
18
  with pytest.raises(ValueError, match='may cause system to crash'):
19
19
  weyl_chamber_mesh(spacing=5e-4)
20
20
 
21
21
 
22
- def test_kak_vector_infidelity_ignore_equivalent_nontrivial():
22
+ def test_kak_vector_infidelity_ignore_equivalent_nontrivial() -> None:
23
23
  x, y, z = np.pi / 4, 1, 0.5
24
- kak_0 = cirq.kak_canonicalize_vector(x, y, z).interaction_coefficients
25
- kak_1 = cirq.kak_canonicalize_vector(x - 1e-3, y, z).interaction_coefficients
24
+ kak_0 = np.asarray(cirq.kak_canonicalize_vector(x, y, z).interaction_coefficients)
25
+ kak_1 = np.asarray(cirq.kak_canonicalize_vector(x - 1e-3, y, z).interaction_coefficients)
26
26
 
27
27
  inf_check_equivalent = kak_vector_infidelity(kak_0, kak_1, False)
28
28
  inf_ignore_equivalent = kak_vector_infidelity(kak_0, kak_1, True)
@@ -30,7 +30,7 @@ def test_kak_vector_infidelity_ignore_equivalent_nontrivial():
30
30
  assert inf_check_equivalent < inf_ignore_equivalent
31
31
 
32
32
 
33
- def test_random_qubit_unitary_shape():
33
+ def test_random_qubit_unitary_shape() -> None:
34
34
  rng = value.parse_random_state(11)
35
35
  actual = random_qubit_unitary((3, 4, 5), True, rng).ravel()
36
36
  rng = value.parse_random_state(11)
@@ -38,7 +38,7 @@ def test_random_qubit_unitary_shape():
38
38
  np.testing.assert_almost_equal(actual, expected)
39
39
 
40
40
 
41
- def test_random_qubit_default():
41
+ def test_random_qubit_default() -> None:
42
42
  rng = value.parse_random_state(11)
43
43
  actual = random_qubit_unitary(randomize_global_phase=True, rng=rng).ravel()
44
44
  rng = value.parse_random_state(11)
@@ -17,9 +17,10 @@ with a product A k A."""
17
17
 
18
18
  from __future__ import annotations
19
19
 
20
+ from collections.abc import Sequence
20
21
  from dataclasses import dataclass
21
22
  from functools import reduce
22
- from typing import NamedTuple, Sequence
23
+ from typing import NamedTuple
23
24
 
24
25
  import numpy as np
25
26
 
@@ -16,7 +16,8 @@ from __future__ import annotations
16
16
 
17
17
  import itertools
18
18
  from collections import defaultdict
19
- from typing import Any, cast, Iterable, Sequence, TYPE_CHECKING
19
+ from collections.abc import Iterable, Sequence
20
+ from typing import Any, cast, TYPE_CHECKING
20
21
 
21
22
  import numpy as np
22
23
 
@@ -23,7 +23,7 @@ import cirq
23
23
  from cirq.transformers.measurement_transformers import _ConfusionChannel, _MeasurementQid, _mod_add
24
24
 
25
25
 
26
- def assert_equivalent_to_deferred(circuit: cirq.Circuit):
26
+ def assert_equivalent_to_deferred(circuit: cirq.Circuit) -> None:
27
27
  qubits = list(circuit.all_qubits())
28
28
  sim = cirq.Simulator()
29
29
  num_qubits = len(qubits)
@@ -40,7 +40,7 @@ def assert_equivalent_to_deferred(circuit: cirq.Circuit):
40
40
  np.testing.assert_equal(result.measurements, result1.measurements)
41
41
 
42
42
 
43
- def test_basic():
43
+ def test_basic() -> None:
44
44
  q0, q1 = cirq.LineQubit.range(2)
45
45
  circuit = cirq.Circuit(
46
46
  cirq.measure(q0, key='a'),
@@ -61,7 +61,7 @@ def test_basic():
61
61
  )
62
62
 
63
63
 
64
- def test_qudits():
64
+ def test_qudits() -> None:
65
65
  q0, q1 = cirq.LineQid.range(2, dimension=3)
66
66
  circuit = cirq.Circuit(
67
67
  cirq.measure(q0, key='a'),
@@ -82,7 +82,7 @@ def test_qudits():
82
82
  )
83
83
 
84
84
 
85
- def test_sympy_control():
85
+ def test_sympy_control() -> None:
86
86
  q0, q1 = cirq.LineQubit.range(2)
87
87
  circuit = cirq.Circuit(
88
88
  cirq.measure(q0, key='a'),
@@ -103,7 +103,7 @@ def test_sympy_control():
103
103
  )
104
104
 
105
105
 
106
- def test_sympy_qudits():
106
+ def test_sympy_qudits() -> None:
107
107
  q0, q1 = cirq.LineQid.range(2, dimension=3)
108
108
  circuit = cirq.Circuit(
109
109
  cirq.measure(q0, key='a'),
@@ -124,7 +124,7 @@ def test_sympy_qudits():
124
124
  )
125
125
 
126
126
 
127
- def test_sympy_control_complex():
127
+ def test_sympy_control_complex() -> None:
128
128
  q0, q1, q2 = cirq.LineQubit.range(3)
129
129
  circuit = cirq.Circuit(
130
130
  cirq.measure(q0, key='a'),
@@ -151,7 +151,7 @@ def test_sympy_control_complex():
151
151
  )
152
152
 
153
153
 
154
- def test_sympy_control_complex_qudit():
154
+ def test_sympy_control_complex_qudit() -> None:
155
155
  q0, q1, q2 = cirq.LineQid.for_qid_shape((4, 2, 2))
156
156
  circuit = cirq.Circuit(
157
157
  cirq.measure(q0, key='a'),
@@ -180,7 +180,7 @@ def test_sympy_control_complex_qudit():
180
180
  )
181
181
 
182
182
 
183
- def test_multiple_sympy_control_complex():
183
+ def test_multiple_sympy_control_complex() -> None:
184
184
  q0, q1, q2 = cirq.LineQubit.range(3)
185
185
  circuit = cirq.Circuit(
186
186
  cirq.measure(q0, key='a'),
@@ -209,7 +209,7 @@ def test_multiple_sympy_control_complex():
209
209
  )
210
210
 
211
211
 
212
- def test_sympy_and_key_control():
212
+ def test_sympy_and_key_control() -> None:
213
213
  q0, q1 = cirq.LineQubit.range(2)
214
214
  circuit = cirq.Circuit(
215
215
  cirq.measure(q0, key='a'),
@@ -230,7 +230,7 @@ def test_sympy_and_key_control():
230
230
  )
231
231
 
232
232
 
233
- def test_sympy_control_multiqubit():
233
+ def test_sympy_control_multiqubit() -> None:
234
234
  q0, q1, q2 = cirq.LineQubit.range(3)
235
235
  circuit = cirq.Circuit(
236
236
  cirq.measure(q0, q1, key='a'),
@@ -255,7 +255,7 @@ def test_sympy_control_multiqubit():
255
255
  )
256
256
 
257
257
 
258
- def test_nocompile_context():
258
+ def test_nocompile_context() -> None:
259
259
  q0, q1 = cirq.LineQubit.range(2)
260
260
  circuit = cirq.Circuit(
261
261
  cirq.measure(q0, key='a').with_tags('nocompile'),
@@ -268,7 +268,7 @@ def test_nocompile_context():
268
268
  cirq.testing.assert_same_circuits(deferred, circuit)
269
269
 
270
270
 
271
- def test_nocompile_context_leaves_invalid_circuit():
271
+ def test_nocompile_context_leaves_invalid_circuit() -> None:
272
272
  q0, q1 = cirq.LineQubit.range(2)
273
273
  circuit = cirq.Circuit(
274
274
  cirq.measure(q0, key='a').with_tags('nocompile'),
@@ -281,7 +281,7 @@ def test_nocompile_context_leaves_invalid_circuit():
281
281
  )
282
282
 
283
283
 
284
- def test_pauli():
284
+ def test_pauli() -> None:
285
285
  q0, q1 = cirq.LineQubit.range(2)
286
286
  circuit = cirq.Circuit(
287
287
  cirq.PauliMeasurementGate(cirq.DensePauliString('Y'), key='a').on(q0),
@@ -303,7 +303,7 @@ def test_pauli():
303
303
  )
304
304
 
305
305
 
306
- def test_extra_measurements():
306
+ def test_extra_measurements() -> None:
307
307
  q0, q1 = cirq.LineQubit.range(2)
308
308
  circuit = cirq.Circuit(
309
309
  cirq.measure(q0, key='a'),
@@ -326,7 +326,7 @@ def test_extra_measurements():
326
326
  )
327
327
 
328
328
 
329
- def test_extra_controlled_bits():
329
+ def test_extra_controlled_bits() -> None:
330
330
  q0, q1 = cirq.LineQubit.range(2)
331
331
  circuit = cirq.Circuit(
332
332
  cirq.measure(q0, key='a'),
@@ -347,7 +347,7 @@ def test_extra_controlled_bits():
347
347
  )
348
348
 
349
349
 
350
- def test_extra_control_bits():
350
+ def test_extra_control_bits() -> None:
351
351
  q0, q1 = cirq.LineQubit.range(2)
352
352
  circuit = cirq.Circuit(
353
353
  cirq.measure(q0, key='a'),
@@ -372,7 +372,7 @@ def test_extra_control_bits():
372
372
  )
373
373
 
374
374
 
375
- def test_subcircuit():
375
+ def test_subcircuit() -> None:
376
376
  q0, q1 = cirq.LineQubit.range(2)
377
377
  circuit = cirq.Circuit(
378
378
  cirq.CircuitOperation(
@@ -397,7 +397,7 @@ def test_subcircuit():
397
397
  )
398
398
 
399
399
 
400
- def test_multi_qubit_measurements():
400
+ def test_multi_qubit_measurements() -> None:
401
401
  q0, q1 = cirq.LineQubit.range(2)
402
402
  circuit = cirq.Circuit(
403
403
  cirq.measure(q0, q1, key='a'),
@@ -422,7 +422,7 @@ def test_multi_qubit_measurements():
422
422
  )
423
423
 
424
424
 
425
- def test_multi_qubit_control():
425
+ def test_multi_qubit_control() -> None:
426
426
  q0, q1, q2 = cirq.LineQubit.range(3)
427
427
  circuit = cirq.Circuit(
428
428
  cirq.measure(q0, q1, key='a'),
@@ -448,7 +448,7 @@ def test_multi_qubit_control():
448
448
 
449
449
 
450
450
  @pytest.mark.parametrize('index', [-3, -2, -1, 0, 1, 2])
451
- def test_repeated(index: int):
451
+ def test_repeated(index: int) -> None:
452
452
  q0, q1 = cirq.LineQubit.range(2)
453
453
  circuit = cirq.Circuit(
454
454
  cirq.measure(q0, key='a'), # The control measurement when `index` is 0 or -2
@@ -481,7 +481,7 @@ def test_repeated(index: int):
481
481
  )
482
482
 
483
483
 
484
- def test_diagram():
484
+ def test_diagram() -> None:
485
485
  q0, q1, q2, q3 = cirq.LineQubit.range(4)
486
486
  circuit = cirq.Circuit(
487
487
  cirq.measure(q0, q2, key='a'),
@@ -515,7 +515,7 @@ M('b[0]', q=q(3)): ───────X────M────────
515
515
  )
516
516
 
517
517
 
518
- def test_repr():
518
+ def test_repr() -> None:
519
519
  def test_repr(qid: _MeasurementQid):
520
520
  cirq.testing.assert_equivalent_repr(qid, global_vals={'_MeasurementQid': _MeasurementQid})
521
521
 
@@ -526,7 +526,7 @@ def test_repr():
526
526
  test_repr(_MeasurementQid('0:1:a', cirq.LineQid(9, 4)))
527
527
 
528
528
 
529
- def test_confusion_map():
529
+ def test_confusion_map() -> None:
530
530
  q0, q1 = cirq.LineQubit.range(2)
531
531
  circuit = cirq.Circuit(
532
532
  cirq.H(q0),
@@ -549,7 +549,7 @@ def test_confusion_map():
549
549
  assert np.all(result['a'] == result['b'])
550
550
 
551
551
 
552
- def test_confusion_map_density_matrix():
552
+ def test_confusion_map_density_matrix() -> None:
553
553
  q0, q1 = cirq.LineQubit.range(2)
554
554
  p_q0 = 0.3 # probability to measure 1 for q0
555
555
  confusion = np.array([[0.8, 0.2], [0.1, 0.9]])
@@ -573,20 +573,20 @@ def test_confusion_map_density_matrix():
573
573
  assert np.allclose(cirq.partial_trace(rho, [2]), expected)
574
574
 
575
575
 
576
- def test_confusion_map_invert_mask_ordering():
576
+ def test_confusion_map_invert_mask_ordering() -> None:
577
577
  q0 = cirq.LineQubit(0)
578
578
  # Confusion map sets the measurement to zero, and the invert mask changes it to one.
579
579
  # If these are run out of order then the result would be zero.
580
580
  circuit = cirq.Circuit(
581
581
  cirq.measure(
582
- q0, key='a', confusion_map={(0,): np.array([[1, 0], [1, 0]])}, invert_mask=(1,)
582
+ q0, key='a', confusion_map={(0,): np.array([[1, 0], [1, 0]])}, invert_mask=(True,)
583
583
  ),
584
584
  cirq.I(q0),
585
585
  )
586
586
  assert_equivalent_to_deferred(circuit)
587
587
 
588
588
 
589
- def test_confusion_map_qudits():
589
+ def test_confusion_map_qudits() -> None:
590
590
  q0 = cirq.LineQid(0, dimension=3)
591
591
  # First op takes q0 to superposed state, then confusion map measures 2 regardless.
592
592
  circuit = cirq.Circuit(
@@ -599,7 +599,7 @@ def test_confusion_map_qudits():
599
599
  assert_equivalent_to_deferred(circuit)
600
600
 
601
601
 
602
- def test_multi_qubit_confusion_map():
602
+ def test_multi_qubit_confusion_map() -> None:
603
603
  q0, q1, q2 = cirq.LineQubit.range(3)
604
604
  circuit = cirq.Circuit(
605
605
  cirq.measure(
@@ -638,7 +638,7 @@ def test_multi_qubit_confusion_map():
638
638
  assert np.sum(result['b']) == 100
639
639
 
640
640
 
641
- def test_confusion_map_errors():
641
+ def test_confusion_map_errors() -> None:
642
642
  q0, q1 = cirq.LineQubit.range(2)
643
643
  circuit = cirq.Circuit(
644
644
  cirq.measure(q0, key='a', confusion_map={(0,): np.array([1])}),
@@ -676,7 +676,7 @@ def test_confusion_map_errors():
676
676
  _ = cirq.defer_measurements(circuit)
677
677
 
678
678
 
679
- def test_dephase():
679
+ def test_dephase() -> None:
680
680
  q0, q1 = cirq.LineQubit.range(2)
681
681
  circuit = cirq.Circuit(
682
682
  cirq.CircuitOperation(
@@ -704,7 +704,7 @@ def test_dephase():
704
704
  )
705
705
 
706
706
 
707
- def test_dephase_classical_conditions():
707
+ def test_dephase_classical_conditions() -> None:
708
708
  q0, q1 = cirq.LineQubit.range(2)
709
709
  circuit = cirq.Circuit(
710
710
  cirq.measure(q0, key='a'),
@@ -715,7 +715,7 @@ def test_dephase_classical_conditions():
715
715
  _ = cirq.dephase_measurements(circuit)
716
716
 
717
717
 
718
- def test_dephase_nocompile_context():
718
+ def test_dephase_nocompile_context() -> None:
719
719
  q0, q1 = cirq.LineQubit.range(2)
720
720
  circuit = cirq.Circuit(
721
721
  cirq.CircuitOperation(
@@ -745,11 +745,13 @@ def test_dephase_nocompile_context():
745
745
  )
746
746
 
747
747
 
748
- def test_drop_terminal():
748
+ def test_drop_terminal() -> None:
749
749
  q0, q1 = cirq.LineQubit.range(2)
750
750
  circuit = cirq.Circuit(
751
751
  cirq.CircuitOperation(
752
- cirq.FrozenCircuit(cirq.CX(q0, q1), cirq.measure(q0, q1, key='a~b', invert_mask=[0, 1]))
752
+ cirq.FrozenCircuit(
753
+ cirq.CX(q0, q1), cirq.measure(q0, q1, key='a~b', invert_mask=(False, True))
754
+ )
753
755
  )
754
756
  )
755
757
  dropped = cirq.drop_terminal_measurements(circuit)
@@ -761,10 +763,12 @@ def test_drop_terminal():
761
763
  )
762
764
 
763
765
 
764
- def test_drop_terminal_qudit():
766
+ def test_drop_terminal_qudit() -> None:
765
767
  q0, q1 = cirq.LineQid.range(2, dimension=3)
766
768
  circuit = cirq.Circuit(
767
- cirq.CircuitOperation(cirq.FrozenCircuit(cirq.measure(q0, q1, key='m', invert_mask=[0, 1])))
769
+ cirq.CircuitOperation(
770
+ cirq.FrozenCircuit(cirq.measure(q0, q1, key='m', invert_mask=(False, True)))
771
+ )
768
772
  )
769
773
  dropped = cirq.drop_terminal_measurements(circuit)
770
774
  expected_inversion_matrix = np.array([[0, 1, 0], [1, 0, 0], [0, 0, 1]])
@@ -796,11 +800,13 @@ def test_drop_terminal_qudit():
796
800
  assert np.all(d2.measurements['m'] == [2, 2])
797
801
 
798
802
 
799
- def test_drop_terminal_nonterminal_error():
803
+ def test_drop_terminal_nonterminal_error() -> None:
800
804
  q0, q1 = cirq.LineQubit.range(2)
801
805
  circuit = cirq.Circuit(
802
806
  cirq.CircuitOperation(
803
- cirq.FrozenCircuit(cirq.measure(q0, q1, key='a~b', invert_mask=[0, 1]), cirq.CX(q0, q1))
807
+ cirq.FrozenCircuit(
808
+ cirq.measure(q0, q1, key='a~b', invert_mask=(False, True)), cirq.CX(q0, q1)
809
+ )
804
810
  )
805
811
  )
806
812
  with pytest.raises(ValueError, match='Circuit contains a non-terminal measurement'):
@@ -813,7 +819,7 @@ def test_drop_terminal_nonterminal_error():
813
819
  _ = cirq.drop_terminal_measurements(circuit, context=None)
814
820
 
815
821
 
816
- def test_confusion_channel_consistency():
822
+ def test_confusion_channel_consistency() -> None:
817
823
  two_d_chan = _ConfusionChannel(np.array([[0.5, 0.5], [0.4, 0.6]]), shape=(2,))
818
824
  cirq.testing.assert_has_consistent_apply_channel(two_d_chan)
819
825
  three_d_chan = _ConfusionChannel(
@@ -16,7 +16,8 @@
16
16
 
17
17
  from __future__ import annotations
18
18
 
19
- from typing import Callable, cast, TYPE_CHECKING
19
+ from collections.abc import Callable
20
+ from typing import cast, TYPE_CHECKING
20
21
 
21
22
  from cirq import circuits, ops, protocols
22
23
  from cirq.transformers import transformer_api, transformer_primitives
@@ -20,7 +20,7 @@ import pytest
20
20
  import cirq
21
21
 
22
22
 
23
- def assert_optimizes(optimized: cirq.AbstractCircuit, expected: cirq.AbstractCircuit):
23
+ def assert_optimizes(optimized: cirq.AbstractCircuit, expected: cirq.AbstractCircuit) -> None:
24
24
  # Ignore differences that would be caught by follow-up optimizations.
25
25
  followup_transformers: list[cirq.TRANSFORMER] = [
26
26
  cirq.drop_negligible_operations,
@@ -16,7 +16,8 @@
16
16
 
17
17
  from __future__ import annotations
18
18
 
19
- from typing import Callable, cast, Hashable, TYPE_CHECKING
19
+ from collections.abc import Callable, Hashable
20
+ from typing import cast, TYPE_CHECKING
20
21
 
21
22
  from cirq import circuits, ops, protocols
22
23
  from cirq.study.resolver import ParamResolver
@@ -21,7 +21,7 @@ import sympy
21
21
  import cirq
22
22
 
23
23
 
24
- def assert_optimizes(optimized: cirq.AbstractCircuit, expected: cirq.AbstractCircuit):
24
+ def assert_optimizes(optimized: cirq.AbstractCircuit, expected: cirq.AbstractCircuit) -> None:
25
25
  # Ignore differences that would be caught by follow-up optimizations.
26
26
  followup_transformers: list[cirq.TRANSFORMER] = [
27
27
  cirq.drop_negligible_operations,
@@ -34,7 +34,7 @@ def assert_optimizes(optimized: cirq.AbstractCircuit, expected: cirq.AbstractCir
34
34
  cirq.testing.assert_same_circuits(optimized, expected)
35
35
 
36
36
 
37
- def test_merge_single_qubit_gates_to_phased_x_and_z():
37
+ def test_merge_single_qubit_gates_to_phased_x_and_z() -> None:
38
38
  a, b = cirq.LineQubit.range(2)
39
39
  c = cirq.Circuit(
40
40
  cirq.X(a),
@@ -58,7 +58,7 @@ def test_merge_single_qubit_gates_to_phased_x_and_z():
58
58
  )
59
59
 
60
60
 
61
- def test_merge_single_qubit_gates_to_phased_x_and_z_deep():
61
+ def test_merge_single_qubit_gates_to_phased_x_and_z_deep() -> None:
62
62
  a = cirq.NamedQubit("a")
63
63
  c_nested = cirq.FrozenCircuit(cirq.H(a), cirq.Z(a), cirq.H(a).with_tags("ignore"))
64
64
  c_nested_merged = cirq.FrozenCircuit(
@@ -80,7 +80,7 @@ def test_merge_single_qubit_gates_to_phased_x_and_z_deep():
80
80
  c_nested_merged,
81
81
  cirq.CircuitOperation(c_nested_merged).repeat(6),
82
82
  )
83
- context = cirq.TransformerContext(tags_to_ignore=["ignore"], deep=True)
83
+ context = cirq.TransformerContext(tags_to_ignore=("ignore",), deep=True)
84
84
  c_new = cirq.merge_single_qubit_gates_to_phased_x_and_z(c_orig, context=context)
85
85
  cirq.testing.assert_same_circuits(c_new, c_expected)
86
86
 
@@ -89,7 +89,7 @@ def _phxz(a: float | sympy.Symbol, x: float | sympy.Symbol, z: float | sympy.Sym
89
89
  return cirq.PhasedXZGate(axis_phase_exponent=a, x_exponent=x, z_exponent=z)
90
90
 
91
91
 
92
- def test_merge_single_qubit_gates_to_phxz():
92
+ def test_merge_single_qubit_gates_to_phxz() -> None:
93
93
  a, b = cirq.LineQubit.range(2)
94
94
  c = cirq.Circuit(
95
95
  cirq.X(a),
@@ -113,7 +113,7 @@ def test_merge_single_qubit_gates_to_phxz():
113
113
  )
114
114
 
115
115
 
116
- def test_merge_single_qubit_gates_to_phxz_deep():
116
+ def test_merge_single_qubit_gates_to_phxz_deep() -> None:
117
117
  a = cirq.NamedQubit("a")
118
118
  c_nested = cirq.FrozenCircuit(cirq.H(a), cirq.Z(a), cirq.H(a).with_tags("ignore"))
119
119
  c_nested_merged = cirq.FrozenCircuit(_phxz(-0.5, 0.5, 0).on(a), cirq.H(a).with_tags("ignore"))
@@ -133,12 +133,12 @@ def test_merge_single_qubit_gates_to_phxz_deep():
133
133
  c_nested_merged,
134
134
  cirq.CircuitOperation(c_nested_merged).repeat(6),
135
135
  )
136
- context = cirq.TransformerContext(tags_to_ignore=["ignore"], deep=True)
136
+ context = cirq.TransformerContext(tags_to_ignore=("ignore",), deep=True)
137
137
  c_new = cirq.merge_single_qubit_gates_to_phxz(c_orig, context=context)
138
138
  cirq.testing.assert_same_circuits(c_new, c_expected)
139
139
 
140
140
 
141
- def test_merge_single_qubit_moments_to_phxz():
141
+ def test_merge_single_qubit_moments_to_phxz() -> None:
142
142
  q = cirq.LineQubit.range(3)
143
143
  c_orig = cirq.Circuit(
144
144
  cirq.Moment(cirq.X.on_each(*q[:2])),
@@ -182,7 +182,7 @@ a: ═════════════════════════
182
182
  )
183
183
 
184
184
 
185
- def test_merge_single_qubit_moments_to_phxz_deep():
185
+ def test_merge_single_qubit_moments_to_phxz_deep() -> None:
186
186
  q = cirq.LineQubit.range(3)
187
187
  x_t_y = cirq.FrozenCircuit(
188
188
  cirq.Moment(cirq.X.on_each(*q[:2])),
@@ -218,20 +218,20 @@ def test_merge_single_qubit_moments_to_phxz_deep():
218
218
  c_nested_merged,
219
219
  cirq.CircuitOperation(c_nested_merged).repeat(6),
220
220
  )
221
- context = cirq.TransformerContext(tags_to_ignore=["ignore"], deep=True)
221
+ context = cirq.TransformerContext(tags_to_ignore=("ignore",), deep=True)
222
222
  c_new = cirq.merge_single_qubit_moments_to_phxz(c_orig, context=context)
223
223
  cirq.testing.assert_allclose_up_to_global_phase(
224
224
  c_new.unitary(), c_expected.unitary(), atol=1e-7
225
225
  )
226
226
 
227
227
 
228
- def test_merge_single_qubit_gates_to_phxz_global_phase():
228
+ def test_merge_single_qubit_gates_to_phxz_global_phase() -> None:
229
229
  c = cirq.Circuit(cirq.GlobalPhaseGate(1j).on())
230
230
  c2 = cirq.merge_single_qubit_gates_to_phxz(c)
231
231
  assert c == c2
232
232
 
233
233
 
234
- def test_merge_single_qubit_gates_to_phased_x_and_z_global_phase():
234
+ def test_merge_single_qubit_gates_to_phased_x_and_z_global_phase() -> None:
235
235
  c = cirq.Circuit(cirq.GlobalPhaseGate(1j).on())
236
236
  c2 = cirq.merge_single_qubit_gates_to_phased_x_and_z(c)
237
237
  assert c == c2
@@ -240,7 +240,7 @@ def test_merge_single_qubit_gates_to_phased_x_and_z_global_phase():
240
240
  class TestMergeSingleQubitGatesSymbolized(TestCase):
241
241
  """Test suite for merge_single_qubit_gates_to_phxz_symbolized."""
242
242
 
243
- def test_case1(self):
243
+ def test_case1(self) -> None:
244
244
  """Test case diagram.
245
245
  Input circuit:
246
246
  0: ───X─────────@────────H[ignore]─H──X──PhXZ(a=a0,x=x0,z=z0)──X──PhXZ(a=a1,x=x1,z=z1)───
@@ -265,7 +265,7 @@ class TestMergeSingleQubitGatesSymbolized(TestCase):
265
265
  cirq.Moment(cirq.X(a)),
266
266
  cirq.Moment(_phxz(sa1, sx1, sz1).on(a)),
267
267
  )
268
- context = cirq.TransformerContext(tags_to_ignore=["ignore"])
268
+ context = cirq.TransformerContext(tags_to_ignore=("ignore",))
269
269
  sweep = cirq.Zip(
270
270
  cirq.Points(key="h_exp", points=[0, 1]),
271
271
  cirq.Points(key="cz_exp", points=[0, 1]),
@@ -295,7 +295,7 @@ class TestMergeSingleQubitGatesSymbolized(TestCase):
295
295
  {q: q for q in input_circuit.all_qubits()},
296
296
  )
297
297
 
298
- def test_with_gauge_compiling_as_sweep_success(self):
298
+ def test_with_gauge_compiling_as_sweep_success(self) -> None:
299
299
  qubits = cirq.LineQubit.range(7)
300
300
  c = cirq.Circuit(
301
301
  cirq.Moment(cirq.H(qubits[0]), cirq.H(qubits[3])),
@@ -318,7 +318,7 @@ class TestMergeSingleQubitGatesSymbolized(TestCase):
318
318
  {q: q for q in qubits},
319
319
  )
320
320
 
321
- def test_case_non_parameterized_singles(self):
321
+ def test_case_non_parameterized_singles(self) -> None:
322
322
  """Test merge_single_qubit_gates_to_phxz_symbolized when all single qubit gates are not
323
323
  parameterized."""
324
324
 
@@ -330,7 +330,7 @@ class TestMergeSingleQubitGatesSymbolized(TestCase):
330
330
  )
331
331
  assert_optimizes(output_circuit, expected_circuit)
332
332
 
333
- def test_fail_different_structures_error(self):
333
+ def test_fail_different_structures_error(self) -> None:
334
334
  """Tests that the function raises a ValueError if merged structures of the circuit differ
335
335
  for different parameterizations."""
336
336
  q0, q1 = cirq.LineQubit.range(2)
@@ -347,7 +347,7 @@ class TestMergeSingleQubitGatesSymbolized(TestCase):
347
347
  with pytest.raises(ValueError, match="Expect a PhasedXZGate or IdentityGate.*"):
348
348
  cirq.merge_single_qubit_gates_to_phxz_symbolized(circuit, sweep=sweep)
349
349
 
350
- def test_fail_unexpected_gate_error(self):
350
+ def test_fail_unexpected_gate_error(self) -> None:
351
351
  """Tests that the function raises a RuntimeError of unexpected gate."""
352
352
  a, b = cirq.LineQubit.range(2)
353
353
  circuit = cirq.Circuit(
@@ -373,7 +373,7 @@ class TestMergeSingleQubitGatesSymbolized(TestCase):
373
373
  cirq.merge_single_qubit_gates_to_phxz_symbolized(circuit, sweep=sweep)
374
374
 
375
375
 
376
- def test_merge_single_qubit_moments_to_phxz_with_global_phase_in_first_moment():
376
+ def test_merge_single_qubit_moments_to_phxz_with_global_phase_in_first_moment() -> None:
377
377
  q0 = cirq.LineQubit(0)
378
378
  c_orig = cirq.Circuit(
379
379
  cirq.Moment(cirq.Y(q0) ** 0.5, cirq.GlobalPhaseGate(1j**0.5).on()), cirq.Moment(cirq.X(q0))
@@ -384,12 +384,12 @@ def test_merge_single_qubit_moments_to_phxz_with_global_phase_in_first_moment():
384
384
  cirq.GlobalPhaseGate(1j**0.5).on(),
385
385
  )
386
386
  )
387
- context = cirq.TransformerContext(tags_to_ignore=["ignore"])
387
+ context = cirq.TransformerContext(tags_to_ignore=("ignore",))
388
388
  c_new = cirq.merge_single_qubit_moments_to_phxz(c_orig, context=context)
389
389
  assert c_new == c_expected
390
390
 
391
391
 
392
- def test_merge_single_qubit_moments_to_phxz_with_global_phase_in_second_moment():
392
+ def test_merge_single_qubit_moments_to_phxz_with_global_phase_in_second_moment() -> None:
393
393
  q0 = cirq.LineQubit(0)
394
394
  c_orig = cirq.Circuit(
395
395
  cirq.Moment(cirq.Y(q0) ** 0.5), cirq.Moment(cirq.X(q0), cirq.GlobalPhaseGate(1j**0.5).on())
@@ -400,6 +400,6 @@ def test_merge_single_qubit_moments_to_phxz_with_global_phase_in_second_moment()
400
400
  cirq.GlobalPhaseGate(1j**0.5).on(),
401
401
  )
402
402
  )
403
- context = cirq.TransformerContext(tags_to_ignore=["ignore"])
403
+ context = cirq.TransformerContext(tags_to_ignore=("ignore",))
404
404
  c_new = cirq.merge_single_qubit_moments_to_phxz(c_orig, context=context)
405
405
  assert c_new == c_expected
@@ -20,7 +20,7 @@ import cirq.transformers.noise_adding as na
20
20
  from cirq import circuits, devices, ops
21
21
 
22
22
 
23
- def test_noise_adding():
23
+ def test_noise_adding() -> None:
24
24
  qubits = devices.LineQubit.range(4)
25
25
  one_layer = circuits.Circuit(ops.CZ(*qubits[:2]), ops.CZ(*qubits[2:]))
26
26
  circuit = one_layer * 10
@@ -48,7 +48,7 @@ def test_noise_adding():
48
48
 
49
49
  # test that supplying a dictionary for p works
50
50
  transformed_circuit_p_dict = na.DepolarizingNoiseTransformer(
51
- {tuple(qubits[:2]): 1.0, tuple(qubits[2:]): 0.0}
51
+ {(qubits[0], qubits[1]): 1.0, (qubits[2], qubits[3]): 0.0}
52
52
  )(circuit)
53
53
  assert len(transformed_circuit_p_dict) == 20 # depth should be doubled
54
54
  assert transformed_circuit_p_dict[1::2].all_qubits() == frozenset(
@@ -16,7 +16,8 @@
16
16
 
17
17
  from __future__ import annotations
18
18
 
19
- from typing import Callable, Hashable, Sequence, TYPE_CHECKING
19
+ from collections.abc import Callable, Hashable, Sequence
20
+ from typing import TYPE_CHECKING
20
21
 
21
22
  from cirq import circuits
22
23
  from cirq.protocols import decompose_protocol as dp