cirq-core 1.7.0.dev20250825174419__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 (426) 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 +19 -17
  10. cirq/circuits/circuit_operation.py +2 -1
  11. cirq/circuits/circuit_operation_test.py +19 -0
  12. cirq/circuits/circuit_test.py +31 -12
  13. cirq/circuits/frozen_circuit.py +3 -2
  14. cirq/circuits/moment.py +3 -15
  15. cirq/circuits/optimization_pass.py +2 -1
  16. cirq/circuits/qasm_output.py +39 -10
  17. cirq/circuits/qasm_output_test.py +51 -2
  18. cirq/circuits/text_diagram_drawer.py +2 -1
  19. cirq/contrib/acquaintance/bipartite.py +2 -1
  20. cirq/contrib/acquaintance/devices.py +1 -1
  21. cirq/contrib/acquaintance/executor.py +4 -5
  22. cirq/contrib/acquaintance/executor_test.py +2 -1
  23. cirq/contrib/acquaintance/gates.py +2 -1
  24. cirq/contrib/acquaintance/gates_test.py +1 -1
  25. cirq/contrib/acquaintance/inspection_utils.py +2 -1
  26. cirq/contrib/acquaintance/mutation_utils.py +2 -1
  27. cirq/contrib/acquaintance/optimizers.py +2 -1
  28. cirq/contrib/acquaintance/permutation.py +2 -1
  29. cirq/contrib/acquaintance/permutation_test.py +1 -1
  30. cirq/contrib/acquaintance/shift.py +2 -1
  31. cirq/contrib/acquaintance/shift_swap_network.py +2 -1
  32. cirq/contrib/acquaintance/strategies/complete.py +3 -2
  33. cirq/contrib/acquaintance/strategies/cubic.py +2 -1
  34. cirq/contrib/acquaintance/strategies/quartic_paired.py +2 -1
  35. cirq/contrib/acquaintance/strategies/quartic_paired_test.py +1 -1
  36. cirq/contrib/acquaintance/testing.py +2 -1
  37. cirq/contrib/acquaintance/topological_sort.py +2 -1
  38. cirq/contrib/bayesian_network/bayesian_network_gate.py +3 -2
  39. cirq/contrib/circuitdag/circuit_dag.py +4 -2
  40. cirq/contrib/custom_simulators/custom_state_simulator.py +2 -1
  41. cirq/contrib/custom_simulators/custom_state_simulator_test.py +1 -1
  42. cirq/contrib/graph_device/graph_device.py +2 -1
  43. cirq/contrib/graph_device/graph_device_test.py +2 -1
  44. cirq/contrib/graph_device/hypergraph.py +2 -1
  45. cirq/contrib/graph_device/uniform_graph_device.py +2 -1
  46. cirq/contrib/json.py +14 -2
  47. cirq/contrib/json_test_data/BayesianNetworkGate.json +10 -0
  48. cirq/contrib/json_test_data/BayesianNetworkGate.repr +3 -0
  49. cirq/contrib/json_test_data/QuantumVolumeResult.json +169 -0
  50. cirq/contrib/json_test_data/QuantumVolumeResult.repr +22 -0
  51. cirq/contrib/json_test_data/SwapPermutationGate.json +3 -0
  52. cirq/contrib/json_test_data/SwapPermutationGate.repr +1 -0
  53. cirq/contrib/json_test_data/spec.py +0 -2
  54. cirq/contrib/noise_models/noise_models.py +2 -1
  55. cirq/contrib/paulistring/clifford_optimize.py +20 -2
  56. cirq/contrib/paulistring/optimize.py +1 -1
  57. cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py +146 -35
  58. cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation_test.py +81 -178
  59. cirq/contrib/paulistring/recombine.py +5 -2
  60. cirq/contrib/paulistring/separate.py +1 -1
  61. cirq/contrib/qasm_import/_lexer.py +6 -1
  62. cirq/contrib/qasm_import/_lexer_test.py +1 -1
  63. cirq/contrib/qasm_import/_parser.py +24 -8
  64. cirq/contrib/qasm_import/_parser_test.py +44 -6
  65. cirq/contrib/qcircuit/qcircuit_pdf_test.py +6 -9
  66. cirq/contrib/quantikz/__init__.py +21 -0
  67. cirq/contrib/quantikz/circuit_to_latex_quantikz.py +680 -0
  68. cirq/contrib/quantikz/circuit_to_latex_quantikz_test.py +253 -0
  69. cirq/contrib/quantikz/circuit_to_latex_render.py +424 -0
  70. cirq/contrib/quantikz/circuit_to_latex_render_test.py +44 -0
  71. cirq/contrib/quantum_volume/quantum_volume.py +2 -1
  72. cirq/contrib/quimb/density_matrix.py +1 -1
  73. cirq/contrib/quimb/grid_circuits.py +2 -1
  74. cirq/contrib/quimb/grid_circuits_test.py +1 -1
  75. cirq/contrib/quimb/mps_simulator.py +4 -3
  76. cirq/contrib/quimb/state_vector.py +2 -1
  77. cirq/contrib/quirk/export_to_quirk.py +2 -1
  78. cirq/contrib/quirk/linearize_circuit.py +1 -1
  79. cirq/contrib/quirk/quirk_gate.py +2 -1
  80. cirq/contrib/routing/device.py +1 -1
  81. cirq/contrib/routing/greedy.py +2 -1
  82. cirq/contrib/routing/initialization.py +2 -1
  83. cirq/contrib/routing/router.py +2 -1
  84. cirq/contrib/routing/swap_network.py +2 -1
  85. cirq/contrib/routing/utils.py +2 -1
  86. cirq/contrib/shuffle_circuits/shuffle_circuits_with_readout_benchmarking.py +7 -5
  87. cirq/contrib/shuffle_circuits/shuffle_circuits_with_readout_benchmarking_test.py +6 -6
  88. cirq/devices/device.py +2 -1
  89. cirq/devices/grid_device_metadata.py +2 -1
  90. cirq/devices/grid_qubit.py +7 -6
  91. cirq/devices/insertion_noise_model.py +2 -1
  92. cirq/devices/line_qubit.py +2 -1
  93. cirq/devices/named_topologies.py +2 -1
  94. cirq/devices/noise_model.py +2 -1
  95. cirq/devices/noise_model_test.py +1 -1
  96. cirq/devices/noise_properties.py +2 -1
  97. cirq/devices/superconducting_qubits_noise_properties_test.py +2 -1
  98. cirq/devices/thermal_noise_model.py +2 -1
  99. cirq/experiments/__init__.py +2 -0
  100. cirq/experiments/benchmarking/parallel_xeb.py +2 -1
  101. cirq/experiments/benchmarking/parallel_xeb_test.py +1 -1
  102. cirq/experiments/fidelity_estimation.py +2 -1
  103. cirq/experiments/fidelity_estimation_test.py +1 -1
  104. cirq/experiments/ghz_2d.py +150 -0
  105. cirq/experiments/ghz_2d_test.py +155 -0
  106. cirq/experiments/n_qubit_tomography.py +2 -1
  107. cirq/experiments/n_qubit_tomography_test.py +1 -1
  108. cirq/experiments/purity_estimation.py +1 -1
  109. cirq/experiments/qubit_characterizations.py +33 -4
  110. cirq/experiments/qubit_characterizations_test.py +16 -0
  111. cirq/experiments/random_quantum_circuit_generation.py +2 -1
  112. cirq/experiments/random_quantum_circuit_generation_test.py +2 -1
  113. cirq/experiments/readout_confusion_matrix.py +2 -1
  114. cirq/experiments/readout_confusion_matrix_test.py +1 -1
  115. cirq/experiments/single_qubit_readout_calibration.py +2 -1
  116. cirq/experiments/single_qubit_readout_calibration_test.py +1 -1
  117. cirq/experiments/t1_decay_experiment.py +2 -1
  118. cirq/experiments/two_qubit_xeb.py +2 -1
  119. cirq/experiments/two_qubit_xeb_test.py +1 -1
  120. cirq/experiments/xeb_fitting.py +2 -1
  121. cirq/experiments/xeb_fitting_test.py +1 -1
  122. cirq/experiments/xeb_sampling.py +5 -3
  123. cirq/experiments/xeb_sampling_test.py +1 -1
  124. cirq/experiments/xeb_simulation.py +2 -1
  125. cirq/experiments/xeb_simulation_test.py +2 -1
  126. cirq/experiments/z_phase_calibration.py +2 -1
  127. cirq/experiments/z_phase_calibration_test.py +18 -3
  128. cirq/interop/quirk/cells/__init__.py +1 -2
  129. cirq/interop/quirk/cells/all_cells.py +2 -1
  130. cirq/interop/quirk/cells/arithmetic_cells.py +2 -1
  131. cirq/interop/quirk/cells/cell.py +2 -1
  132. cirq/interop/quirk/cells/composite_cell.py +2 -1
  133. cirq/interop/quirk/cells/composite_cell_test.py +1 -1
  134. cirq/interop/quirk/cells/control_cells.py +2 -1
  135. cirq/interop/quirk/cells/frequency_space_cells.py +1 -1
  136. cirq/interop/quirk/cells/ignored_cells.py +1 -1
  137. cirq/interop/quirk/cells/input_cells.py +2 -1
  138. cirq/interop/quirk/cells/input_rotation_cells.py +2 -1
  139. cirq/interop/quirk/cells/measurement_cells.py +2 -1
  140. cirq/interop/quirk/cells/parse.py +2 -11
  141. cirq/interop/quirk/cells/qubit_permutation_cells.py +2 -1
  142. cirq/interop/quirk/cells/scalar_cells.py +2 -1
  143. cirq/interop/quirk/cells/single_qubit_rotation_cells.py +2 -1
  144. cirq/interop/quirk/cells/swap_cell.py +2 -1
  145. cirq/interop/quirk/cells/unsupported_cells.py +1 -1
  146. cirq/interop/quirk/url_to_circuit.py +2 -1
  147. cirq/json_resolver_cache.py +0 -2
  148. cirq/linalg/decompositions.py +6 -2
  149. cirq/linalg/decompositions_test.py +1 -0
  150. cirq/linalg/diagonalize.py +1 -1
  151. cirq/linalg/predicates.py +2 -1
  152. cirq/linalg/tolerance.py +2 -1
  153. cirq/linalg/transformations.py +3 -2
  154. cirq/ops/arithmetic_operation.py +4 -3
  155. cirq/ops/arithmetic_operation_test.py +1 -1
  156. cirq/ops/boolean_hamiltonian.py +4 -3
  157. cirq/ops/classically_controlled_operation.py +11 -11
  158. cirq/ops/classically_controlled_operation_test.py +26 -2
  159. cirq/ops/clifford_gate.py +3 -2
  160. cirq/ops/clifford_gate_test.py +1 -2
  161. cirq/ops/common_channels.py +2 -1
  162. cirq/ops/common_gates.py +3 -2
  163. cirq/ops/control_values.py +2 -1
  164. cirq/ops/controlled_gate.py +3 -2
  165. cirq/ops/controlled_gate_test.py +2 -1
  166. cirq/ops/controlled_operation.py +3 -2
  167. cirq/ops/controlled_operation_test.py +2 -1
  168. cirq/ops/dense_pauli_string.py +44 -81
  169. cirq/ops/dense_pauli_string_test.py +21 -0
  170. cirq/ops/diagonal_gate.py +3 -2
  171. cirq/ops/eigen_gate.py +9 -7
  172. cirq/ops/fourier_transform.py +3 -2
  173. cirq/ops/fourier_transform_test.py +2 -4
  174. cirq/ops/fsim_gate.py +3 -2
  175. cirq/ops/gate_operation.py +23 -12
  176. cirq/ops/gateset.py +22 -2
  177. cirq/ops/global_phase_op.py +3 -2
  178. cirq/ops/greedy_qubit_manager.py +2 -1
  179. cirq/ops/identity.py +2 -1
  180. cirq/ops/kraus_channel.py +2 -1
  181. cirq/ops/linear_combinations.py +12 -17
  182. cirq/ops/linear_combinations_test.py +23 -1
  183. cirq/ops/matrix_gates.py +2 -1
  184. cirq/ops/measure_util.py +8 -6
  185. cirq/ops/measurement_gate.py +2 -1
  186. cirq/ops/mixed_unitary_channel.py +2 -1
  187. cirq/ops/named_qubit.py +2 -2
  188. cirq/ops/op_tree.py +2 -1
  189. cirq/ops/parallel_gate.py +3 -2
  190. cirq/ops/parity_gates.py +2 -1
  191. cirq/ops/parity_gates_test.py +35 -0
  192. cirq/ops/pauli_interaction_gate.py +2 -1
  193. cirq/ops/pauli_measurement_gate.py +2 -1
  194. cirq/ops/pauli_string.py +37 -57
  195. cirq/ops/pauli_string_phasor.py +6 -5
  196. cirq/ops/pauli_string_raw_types.py +2 -1
  197. cirq/ops/pauli_string_test.py +49 -6
  198. cirq/ops/pauli_sum_exponential.py +2 -1
  199. cirq/ops/permutation_gate.py +2 -1
  200. cirq/ops/phased_iswap_gate.py +3 -2
  201. cirq/ops/phased_x_gate.py +5 -4
  202. cirq/ops/phased_x_z_gate.py +12 -5
  203. cirq/ops/projector.py +2 -1
  204. cirq/ops/qubit_manager.py +2 -1
  205. cirq/ops/qubit_order.py +2 -1
  206. cirq/ops/qubit_order_or_list.py +1 -1
  207. cirq/ops/random_gate_channel.py +3 -2
  208. cirq/ops/raw_types.py +33 -16
  209. cirq/ops/raw_types_test.py +4 -3
  210. cirq/ops/state_preparation_channel.py +2 -1
  211. cirq/ops/three_qubit_gates.py +3 -2
  212. cirq/ops/two_qubit_diagonal_gate.py +3 -2
  213. cirq/ops/uniform_superposition_gate.py +2 -1
  214. cirq/ops/wait_gate.py +10 -4
  215. cirq/protocols/act_on_protocol.py +2 -1
  216. cirq/protocols/act_on_protocol_test.py +2 -1
  217. cirq/protocols/apply_channel_protocol.py +2 -1
  218. cirq/protocols/apply_mixture_protocol.py +2 -1
  219. cirq/protocols/apply_mixture_protocol_test.py +2 -1
  220. cirq/protocols/apply_unitary_protocol.py +2 -1
  221. cirq/protocols/apply_unitary_protocol_test.py +2 -0
  222. cirq/protocols/approximate_equality_protocol.py +2 -1
  223. cirq/protocols/circuit_diagram_info_protocol.py +2 -1
  224. cirq/protocols/control_key_protocol.py +7 -0
  225. cirq/protocols/decompose_protocol.py +2 -12
  226. cirq/protocols/has_stabilizer_effect_protocol.py +1 -1
  227. cirq/protocols/has_stabilizer_effect_protocol_test.py +11 -9
  228. cirq/protocols/has_unitary_protocol_test.py +3 -3
  229. cirq/protocols/hash_from_pickle_test.py +2 -2
  230. cirq/protocols/inverse_protocol.py +2 -1
  231. cirq/protocols/json_serialization.py +5 -4
  232. cirq/protocols/json_serialization_test.py +31 -31
  233. cirq/protocols/kraus_protocol.py +4 -3
  234. cirq/protocols/kraus_protocol_test.py +7 -7
  235. cirq/protocols/measurement_key_protocol.py +32 -8
  236. cirq/protocols/mixture_protocol.py +3 -2
  237. cirq/protocols/mixture_protocol_test.py +7 -7
  238. cirq/protocols/mul_protocol_test.py +4 -4
  239. cirq/protocols/phase_protocol.py +13 -4
  240. cirq/protocols/pow_protocol.py +2 -1
  241. cirq/protocols/pow_protocol_test.py +5 -5
  242. cirq/protocols/qasm.py +2 -1
  243. cirq/protocols/qid_shape_protocol.py +2 -1
  244. cirq/protocols/resolve_parameters.py +17 -15
  245. cirq/protocols/trace_distance_bound.py +2 -1
  246. cirq/protocols/unitary_protocol.py +21 -21
  247. cirq/protocols/unitary_protocol_test.py +31 -19
  248. cirq/qis/channels.py +1 -1
  249. cirq/qis/channels_test.py +1 -1
  250. cirq/qis/clifford_tableau.py +16 -15
  251. cirq/qis/clifford_tableau_test.py +17 -17
  252. cirq/qis/entropy.py +3 -3
  253. cirq/qis/entropy_test.py +1 -1
  254. cirq/qis/quantum_state_representation.py +2 -1
  255. cirq/qis/states.py +7 -2
  256. cirq/qis/states_test.py +54 -54
  257. cirq/sim/classical_simulator.py +25 -14
  258. cirq/sim/classical_simulator_test.py +85 -30
  259. cirq/sim/clifford/clifford_simulator.py +7 -6
  260. cirq/sim/clifford/clifford_simulator_test.py +51 -50
  261. cirq/sim/clifford/clifford_tableau_simulation_state.py +2 -1
  262. cirq/sim/clifford/stabilizer_ch_form_simulation_state.py +2 -1
  263. cirq/sim/clifford/stabilizer_sampler.py +1 -1
  264. cirq/sim/clifford/stabilizer_simulation_state.py +2 -1
  265. cirq/sim/clifford/stabilizer_state_ch_form.py +16 -15
  266. cirq/sim/clifford/stabilizer_state_ch_form_test.py +0 -1
  267. cirq/sim/density_matrix_simulation_state.py +7 -6
  268. cirq/sim/density_matrix_simulator.py +3 -2
  269. cirq/sim/density_matrix_simulator_test.py +94 -84
  270. cirq/sim/density_matrix_utils.py +2 -1
  271. cirq/sim/density_matrix_utils_test.py +1 -1
  272. cirq/sim/mux.py +35 -8
  273. cirq/sim/mux_test.py +39 -26
  274. cirq/sim/simulation_product_state.py +2 -1
  275. cirq/sim/simulation_product_state_test.py +8 -7
  276. cirq/sim/simulation_state.py +6 -5
  277. cirq/sim/simulation_state_base.py +3 -2
  278. cirq/sim/simulation_state_test.py +7 -6
  279. cirq/sim/simulation_utils.py +2 -1
  280. cirq/sim/simulator.py +4 -3
  281. cirq/sim/simulator_base.py +2 -1
  282. cirq/sim/simulator_base_test.py +51 -36
  283. cirq/sim/simulator_test.py +41 -36
  284. cirq/sim/sparse_simulator.py +3 -2
  285. cirq/sim/sparse_simulator_test.py +92 -82
  286. cirq/sim/state_vector.py +5 -6
  287. cirq/sim/state_vector_simulation_state.py +10 -9
  288. cirq/sim/state_vector_simulator.py +2 -1
  289. cirq/sim/state_vector_simulator_test.py +9 -9
  290. cirq/sim/state_vector_test.py +40 -39
  291. cirq/study/__init__.py +1 -0
  292. cirq/study/flatten_expressions.py +2 -1
  293. cirq/study/resolver.py +31 -18
  294. cirq/study/resolver_test.py +1 -1
  295. cirq/study/result.py +2 -1
  296. cirq/study/result_test.py +20 -20
  297. cirq/study/sweepable.py +2 -1
  298. cirq/study/sweepable_test.py +20 -20
  299. cirq/study/sweeps.py +26 -1
  300. cirq/study/sweeps_test.py +67 -43
  301. cirq/testing/_compat_test_data/__init__.py +3 -3
  302. cirq/testing/circuit_compare.py +2 -1
  303. cirq/testing/circuit_compare_test.py +16 -14
  304. cirq/testing/consistent_act_on_test.py +1 -1
  305. cirq/testing/consistent_channels.py +2 -2
  306. cirq/testing/consistent_controlled_gate_op.py +2 -2
  307. cirq/testing/consistent_controlled_gate_op_test.py +2 -1
  308. cirq/testing/consistent_decomposition.py +4 -2
  309. cirq/testing/consistent_phase_by.py +1 -1
  310. cirq/testing/consistent_protocols.py +2 -1
  311. cirq/testing/consistent_protocols_test.py +3 -3
  312. cirq/testing/consistent_qasm.py +4 -3
  313. cirq/testing/consistent_qasm_test.py +3 -3
  314. cirq/testing/consistent_resolve_parameters.py +1 -1
  315. cirq/testing/consistent_unitary.py +1 -1
  316. cirq/testing/consistent_unitary_test.py +1 -1
  317. cirq/testing/deprecation.py +1 -1
  318. cirq/testing/devices.py +3 -2
  319. cirq/testing/equals_tester.py +4 -3
  320. cirq/testing/equivalent_basis_map.py +4 -2
  321. cirq/testing/json.py +3 -2
  322. cirq/testing/lin_alg_utils.py +1 -1
  323. cirq/testing/logs.py +1 -1
  324. cirq/testing/op_tree.py +1 -1
  325. cirq/testing/order_tester.py +2 -2
  326. cirq/testing/pytest_utils.py +2 -1
  327. cirq/testing/random_circuit.py +2 -1
  328. cirq/testing/random_circuit_test.py +2 -1
  329. cirq/testing/repr_pretty_tester.py +3 -3
  330. cirq/transformers/__init__.py +1 -0
  331. cirq/transformers/_connected_component.py +231 -0
  332. cirq/transformers/_connected_component_test.py +200 -0
  333. cirq/transformers/align_test.py +13 -13
  334. cirq/transformers/analytical_decompositions/clifford_decomposition.py +8 -7
  335. cirq/transformers/analytical_decompositions/clifford_decomposition_test.py +5 -5
  336. cirq/transformers/analytical_decompositions/controlled_gate_decomposition.py +11 -10
  337. cirq/transformers/analytical_decompositions/controlled_gate_decomposition_test.py +6 -6
  338. cirq/transformers/analytical_decompositions/cphase_to_fsim.py +3 -2
  339. cirq/transformers/analytical_decompositions/cphase_to_fsim_test.py +11 -10
  340. cirq/transformers/analytical_decompositions/quantum_shannon_decomposition.py +8 -7
  341. cirq/transformers/analytical_decompositions/quantum_shannon_decomposition_test.py +17 -20
  342. cirq/transformers/analytical_decompositions/single_qubit_decompositions_test.py +33 -27
  343. cirq/transformers/analytical_decompositions/single_to_two_qubit_isometry_test.py +1 -1
  344. cirq/transformers/analytical_decompositions/three_qubit_decomposition.py +1 -1
  345. cirq/transformers/analytical_decompositions/two_qubit_state_preparation_test.py +12 -11
  346. cirq/transformers/analytical_decompositions/two_qubit_to_cz.py +5 -2
  347. cirq/transformers/analytical_decompositions/two_qubit_to_cz_test.py +3 -3
  348. cirq/transformers/analytical_decompositions/two_qubit_to_fsim.py +2 -1
  349. cirq/transformers/analytical_decompositions/two_qubit_to_ms.py +2 -1
  350. cirq/transformers/analytical_decompositions/two_qubit_to_ms_test.py +2 -2
  351. cirq/transformers/analytical_decompositions/two_qubit_to_sqrt_iswap.py +2 -1
  352. cirq/transformers/analytical_decompositions/two_qubit_to_sqrt_iswap_test.py +32 -30
  353. cirq/transformers/drop_negligible_operations_test.py +7 -7
  354. cirq/transformers/dynamical_decoupling.py +185 -112
  355. cirq/transformers/dynamical_decoupling_test.py +195 -201
  356. cirq/transformers/eject_phased_paulis.py +2 -1
  357. cirq/transformers/eject_phased_paulis_test.py +3 -2
  358. cirq/transformers/eject_z.py +5 -3
  359. cirq/transformers/eject_z_test.py +23 -25
  360. cirq/transformers/expand_composite.py +3 -2
  361. cirq/transformers/expand_composite_test.py +14 -14
  362. cirq/transformers/gauge_compiling/__init__.py +13 -0
  363. cirq/transformers/gauge_compiling/gauge_compiling.py +3 -2
  364. cirq/transformers/gauge_compiling/gauge_compiling_test.py +14 -12
  365. cirq/transformers/gauge_compiling/gauge_compiling_test_utils.py +3 -3
  366. cirq/transformers/gauge_compiling/idle_moments_gauge.py +225 -0
  367. cirq/transformers/gauge_compiling/idle_moments_gauge_test.py +193 -0
  368. cirq/transformers/gauge_compiling/multi_moment_cphase_gauge.py +242 -0
  369. cirq/transformers/gauge_compiling/multi_moment_cphase_gauge_test.py +243 -0
  370. cirq/transformers/gauge_compiling/multi_moment_gauge_compiling.py +151 -0
  371. cirq/transformers/gauge_compiling/sqrt_cz_gauge.py +2 -1
  372. cirq/transformers/heuristic_decompositions/gate_tabulation_math_utils.py +1 -1
  373. cirq/transformers/heuristic_decompositions/gate_tabulation_math_utils_test.py +6 -6
  374. cirq/transformers/heuristic_decompositions/two_qubit_gate_tabulation.py +3 -2
  375. cirq/transformers/measurement_transformers.py +2 -1
  376. cirq/transformers/measurement_transformers_test.py +45 -39
  377. cirq/transformers/merge_k_qubit_gates.py +2 -1
  378. cirq/transformers/merge_k_qubit_gates_test.py +1 -1
  379. cirq/transformers/merge_single_qubit_gates.py +9 -5
  380. cirq/transformers/merge_single_qubit_gates_test.py +22 -22
  381. cirq/transformers/noise_adding_test.py +2 -2
  382. cirq/transformers/optimize_for_target_gateset.py +2 -1
  383. cirq/transformers/optimize_for_target_gateset_test.py +11 -9
  384. cirq/transformers/qubit_management_transformers_test.py +6 -2
  385. cirq/transformers/routing/mapping_manager.py +2 -1
  386. cirq/transformers/routing/route_circuit_cqc.py +2 -1
  387. cirq/transformers/stratify.py +2 -1
  388. cirq/transformers/symbolize.py +2 -1
  389. cirq/transformers/tag_transformers.py +2 -1
  390. cirq/transformers/target_gatesets/compilation_target_gateset.py +2 -1
  391. cirq/transformers/target_gatesets/cz_gateset.py +2 -1
  392. cirq/transformers/target_gatesets/cz_gateset_test.py +1 -1
  393. cirq/transformers/target_gatesets/sqrt_iswap_gateset.py +2 -1
  394. cirq/transformers/transformer_api.py +2 -1
  395. cirq/transformers/transformer_primitives.py +271 -145
  396. cirq/transformers/transformer_primitives_test.py +185 -1
  397. cirq/value/abc_alt.py +2 -1
  398. cirq/value/classical_data.py +2 -1
  399. cirq/value/condition.py +2 -1
  400. cirq/value/digits.py +9 -2
  401. cirq/value/duration.py +6 -5
  402. cirq/value/linear_dict.py +4 -9
  403. cirq/value/measurement_key.py +2 -1
  404. cirq/value/periodic_value.py +3 -2
  405. cirq/value/product_state.py +2 -1
  406. cirq/value/value_equality_attr.py +2 -1
  407. cirq/vis/density_matrix.py +1 -1
  408. cirq/vis/heatmap.py +2 -1
  409. cirq/vis/histogram.py +2 -1
  410. cirq/vis/state_histogram.py +2 -1
  411. cirq/work/collector.py +2 -1
  412. cirq/work/observable_grouping.py +2 -1
  413. cirq/work/observable_measurement.py +2 -1
  414. cirq/work/observable_measurement_data.py +2 -1
  415. cirq/work/observable_measurement_test.py +1 -1
  416. cirq/work/observable_readout_calibration.py +2 -1
  417. cirq/work/observable_readout_calibration_test.py +1 -1
  418. cirq/work/observable_settings.py +2 -1
  419. cirq/work/sampler.py +2 -1
  420. cirq/work/sampler_test.py +1 -1
  421. {cirq_core-1.7.0.dev20250825174419.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/METADATA +5 -6
  422. {cirq_core-1.7.0.dev20250825174419.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/RECORD +425 -406
  423. cirq/contrib/json_test.py +0 -33
  424. {cirq_core-1.7.0.dev20250825174419.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/WHEEL +0 -0
  425. {cirq_core-1.7.0.dev20250825174419.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/licenses/LICENSE +0 -0
  426. {cirq_core-1.7.0.dev20250825174419.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/top_level.txt +0 -0
@@ -16,7 +16,8 @@
16
16
 
17
17
  from __future__ import annotations
18
18
 
19
- from typing import Sequence, TYPE_CHECKING
19
+ from collections.abc import Sequence
20
+ from typing import TYPE_CHECKING
20
21
 
21
22
  import numpy as np
22
23
 
@@ -216,7 +216,7 @@ def test_measure_density_matrix_partial_indices_all_orders() -> None:
216
216
  assert bits == [bool(1 & (x >> (2 - p))) for p in perm]
217
217
 
218
218
 
219
- def matrix_000_plus_010():
219
+ def matrix_000_plus_010() -> np.ndarray:
220
220
  state = np.zeros(8, dtype=np.complex64)
221
221
  state[0] = 1 / np.sqrt(2)
222
222
  state[2] = 1j / np.sqrt(2)
cirq/sim/mux.py CHANGED
@@ -19,12 +19,14 @@ Filename is a reference to multiplexing.
19
19
 
20
20
  from __future__ import annotations
21
21
 
22
- from typing import Sequence, TYPE_CHECKING
22
+ from collections.abc import Sequence
23
+ from typing import TYPE_CHECKING
23
24
 
24
25
  import numpy as np
25
26
 
26
27
  from cirq import circuits, devices, ops, protocols, study, value
27
28
  from cirq._doc import document
29
+ from cirq.linalg import transformations
28
30
  from cirq.sim import density_matrix_simulator, sparse_simulator
29
31
  from cirq.sim.clifford import clifford_simulator
30
32
  from cirq.transformers import measurement_transformers
@@ -291,16 +293,41 @@ def final_density_matrix(
291
293
  return sparse_result.density_matrix_of()
292
294
  else:
293
295
  # noisy case: use DensityMatrixSimulator with dephasing
296
+ has_classical_control = circuit_like != measurement_transformers.defer_measurements(
297
+ circuit_like
298
+ )
299
+ handling_classical_control = ignore_measurement_results and has_classical_control
300
+
301
+ if handling_classical_control:
302
+ # case 1: classical control
303
+ noise_applied = circuit_like.with_noise(noise) if noise is not None else circuit_like
304
+ defered = measurement_transformers.defer_measurements(noise_applied)
305
+ dephased = measurement_transformers.dephase_measurements(defered)
306
+ program = dephased
307
+ elif ignore_measurement_results:
308
+ # case 2: no classical control, only terminal measurement
309
+ program = measurement_transformers.dephase_measurements(circuit_like)
310
+ else:
311
+ # case 3: no measurement
312
+ program = circuit_like
313
+
294
314
  density_result = density_matrix_simulator.DensityMatrixSimulator(
295
- dtype=dtype, noise=noise, seed=seed
315
+ dtype=dtype, noise=None if handling_classical_control else noise, seed=seed
296
316
  ).simulate(
297
- program=(
298
- measurement_transformers.dephase_measurements(circuit_like)
299
- if ignore_measurement_results
300
- else circuit_like
301
- ),
317
+ program,
302
318
  initial_state=initial_state,
303
319
  qubit_order=qubit_order,
304
320
  param_resolver=param_resolver,
305
321
  )
306
- return density_result.final_density_matrix
322
+ result = density_result.final_density_matrix
323
+
324
+ if handling_classical_control:
325
+ # assuming that the ancilla qubits from the transformations are at the end
326
+ keep = list(range(protocols.num_qubits(circuit_like)))
327
+ dephased_qid_shape = protocols.qid_shape(dephased)
328
+ tensor_form = np.reshape(result, dephased_qid_shape + dephased_qid_shape)
329
+ reduced_form = transformations.partial_trace(tensor_form, keep)
330
+ width = np.prod(protocols.qid_shape(circuit_like))
331
+ result = np.reshape(reduced_form, (width, width))
332
+
333
+ return result
cirq/sim/mux_test.py CHANGED
@@ -23,10 +23,9 @@ import pytest
23
23
  import sympy
24
24
 
25
25
  import cirq
26
- import cirq.testing
27
26
 
28
27
 
29
- def test_sample():
28
+ def test_sample() -> None:
30
29
  q = cirq.NamedQubit('q')
31
30
 
32
31
  with pytest.raises(ValueError, match="no measurements"):
@@ -49,7 +48,7 @@ def test_sample():
49
48
  assert results.histogram(key=q) == collections.Counter({0: 1})
50
49
 
51
50
 
52
- def test_sample_seed_unitary():
51
+ def test_sample_seed_unitary() -> None:
53
52
  q = cirq.NamedQubit('q')
54
53
  circuit = cirq.Circuit(cirq.X(q) ** 0.2, cirq.measure(q))
55
54
  result = cirq.sample(circuit, repetitions=10, seed=1234)
@@ -60,7 +59,7 @@ def test_sample_seed_unitary():
60
59
  )
61
60
 
62
61
 
63
- def test_sample_seed_non_unitary():
62
+ def test_sample_seed_non_unitary() -> None:
64
63
  q = cirq.NamedQubit('q')
65
64
  circuit = cirq.Circuit(cirq.depolarize(0.5).on(q), cirq.measure(q))
66
65
  result = cirq.sample(circuit, repetitions=10, seed=1234)
@@ -70,7 +69,7 @@ def test_sample_seed_non_unitary():
70
69
  )
71
70
 
72
71
 
73
- def test_sample_sweep():
72
+ def test_sample_sweep() -> None:
74
73
  q = cirq.NamedQubit('q')
75
74
  c = cirq.Circuit(cirq.X(q), cirq.Y(q) ** sympy.Symbol('t'), cirq.measure(q))
76
75
 
@@ -102,7 +101,7 @@ def test_sample_sweep():
102
101
  assert results[1].histogram(key=q) == collections.Counter({0: 3})
103
102
 
104
103
 
105
- def test_sample_sweep_seed():
104
+ def test_sample_sweep_seed() -> None:
106
105
  q = cirq.NamedQubit('q')
107
106
  circuit = cirq.Circuit(cirq.X(q) ** sympy.Symbol('t'), cirq.measure(q))
108
107
 
@@ -124,7 +123,7 @@ def test_sample_sweep_seed():
124
123
  assert np.all(results[2].measurements['q'] == [[True], [False]])
125
124
 
126
125
 
127
- def test_final_state_vector_different_program_types():
126
+ def test_final_state_vector_different_program_types() -> None:
128
127
  a, b = cirq.LineQubit.range(2)
129
128
 
130
129
  np.testing.assert_allclose(cirq.final_state_vector(cirq.X), [0, 1], atol=1e-8)
@@ -140,7 +139,7 @@ def test_final_state_vector_different_program_types():
140
139
  )
141
140
 
142
141
 
143
- def test_final_state_vector_initial_state():
142
+ def test_final_state_vector_initial_state() -> None:
144
143
  np.testing.assert_allclose(cirq.final_state_vector(cirq.X, initial_state=0), [0, 1], atol=1e-8)
145
144
 
146
145
  np.testing.assert_allclose(cirq.final_state_vector(cirq.X, initial_state=1), [1, 0], atol=1e-8)
@@ -152,7 +151,7 @@ def test_final_state_vector_initial_state():
152
151
  )
153
152
 
154
153
 
155
- def test_final_state_vector_dtype_insensitive_to_initial_state():
154
+ def test_final_state_vector_dtype_insensitive_to_initial_state() -> None:
156
155
  assert cirq.final_state_vector(cirq.X).dtype == np.complex64
157
156
 
158
157
  assert cirq.final_state_vector(cirq.X, initial_state=0).dtype == np.complex64
@@ -181,7 +180,7 @@ def test_final_state_vector_dtype_insensitive_to_initial_state():
181
180
  )
182
181
 
183
182
 
184
- def test_final_state_vector_param_resolver():
183
+ def test_final_state_vector_param_resolver() -> None:
185
184
  s = sympy.Symbol('s')
186
185
 
187
186
  with pytest.raises(ValueError, match='not unitary'):
@@ -192,7 +191,7 @@ def test_final_state_vector_param_resolver():
192
191
  )
193
192
 
194
193
 
195
- def test_final_state_vector_qubit_order():
194
+ def test_final_state_vector_qubit_order() -> None:
196
195
  a, b = cirq.LineQubit.range(2)
197
196
 
198
197
  np.testing.assert_allclose(
@@ -206,7 +205,7 @@ def test_final_state_vector_qubit_order():
206
205
  )
207
206
 
208
207
 
209
- def test_final_state_vector_ignore_terminal_measurement():
208
+ def test_final_state_vector_ignore_terminal_measurement() -> None:
210
209
  a, b = cirq.LineQubit.range(2)
211
210
 
212
211
  np.testing.assert_allclose(
@@ -226,7 +225,7 @@ def test_final_state_vector_ignore_terminal_measurement():
226
225
 
227
226
 
228
227
  @pytest.mark.parametrize('repetitions', (0, 1, 100))
229
- def test_repetitions(repetitions):
228
+ def test_repetitions(repetitions) -> None:
230
229
  a = cirq.LineQubit(0)
231
230
  c = cirq.Circuit(cirq.H(a), cirq.measure(a, key='m'))
232
231
  r = cirq.sample(c, repetitions=repetitions)
@@ -235,7 +234,7 @@ def test_repetitions(repetitions):
235
234
  assert np.issubdtype(samples.dtype, np.integer)
236
235
 
237
236
 
238
- def test_final_density_matrix_different_program_types():
237
+ def test_final_density_matrix_different_program_types() -> None:
239
238
  a, b = cirq.LineQubit.range(2)
240
239
 
241
240
  np.testing.assert_allclose(cirq.final_density_matrix(cirq.X), [[0, 0], [0, 1]], atol=1e-8)
@@ -244,12 +243,12 @@ def test_final_density_matrix_different_program_types():
244
243
 
245
244
  np.testing.assert_allclose(
246
245
  cirq.final_density_matrix(cirq.Circuit(ops)),
247
- [[0.5, 0, 0, 0.5], [0, 0, 0, 0], [0, 0, 0, 0], [0.5, 0, 0, 0.5]],
246
+ np.asarray([[0.5, 0, 0, 0.5], [0, 0, 0, 0], [0, 0, 0, 0], [0.5, 0, 0, 0.5]]),
248
247
  atol=1e-8,
249
248
  )
250
249
 
251
250
 
252
- def test_final_density_matrix_initial_state():
251
+ def test_final_density_matrix_initial_state() -> None:
253
252
  np.testing.assert_allclose(
254
253
  cirq.final_density_matrix(cirq.X, initial_state=0), [[0, 0], [0, 1]], atol=1e-8
255
254
  )
@@ -265,7 +264,7 @@ def test_final_density_matrix_initial_state():
265
264
  )
266
265
 
267
266
 
268
- def test_final_density_matrix_dtype_insensitive_to_initial_state():
267
+ def test_final_density_matrix_dtype_insensitive_to_initial_state() -> None:
269
268
  assert cirq.final_density_matrix(cirq.X).dtype == np.complex64
270
269
 
271
270
  assert cirq.final_density_matrix(cirq.X, initial_state=0).dtype == np.complex64
@@ -296,7 +295,7 @@ def test_final_density_matrix_dtype_insensitive_to_initial_state():
296
295
  )
297
296
 
298
297
 
299
- def test_final_density_matrix_param_resolver():
298
+ def test_final_density_matrix_param_resolver() -> None:
300
299
  s = sympy.Symbol('s')
301
300
 
302
301
  with pytest.raises(ValueError, match='not specified in parameter sweep'):
@@ -308,17 +307,17 @@ def test_final_density_matrix_param_resolver():
308
307
  )
309
308
 
310
309
 
311
- def test_final_density_matrix_qubit_order():
310
+ def test_final_density_matrix_qubit_order() -> None:
312
311
  a, b = cirq.LineQubit.range(2)
313
312
 
314
313
  np.testing.assert_allclose(
315
314
  cirq.final_density_matrix([cirq.X(a), cirq.X(b) ** 0.5], qubit_order=[a, b]),
316
- [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0.5, 0.5j], [0, 0, -0.5j, 0.5]],
315
+ np.asarray([[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0.5, 0.5j], [0, 0, -0.5j, 0.5]]),
317
316
  )
318
317
 
319
318
  np.testing.assert_allclose(
320
319
  cirq.final_density_matrix([cirq.X(a), cirq.X(b) ** 0.5], qubit_order=[b, a]),
321
- [[0, 0, 0, 0], [0, 0.5, 0, 0.5j], [0, 0, 0, 0], [0, -0.5j, 0, 0.5]],
320
+ np.asarray([[0, 0, 0, 0], [0, 0.5, 0, 0.5j], [0, 0, 0, 0], [0, -0.5j, 0, 0.5]]),
322
321
  )
323
322
 
324
323
  np.testing.assert_allclose(
@@ -331,7 +330,7 @@ def test_final_density_matrix_qubit_order():
331
330
  )
332
331
 
333
332
 
334
- def test_final_density_matrix_seed_with_dephasing():
333
+ def test_final_density_matrix_seed_with_dephasing() -> None:
335
334
  a = cirq.LineQubit(0)
336
335
  np.testing.assert_allclose(
337
336
  cirq.final_density_matrix([cirq.X(a) ** 0.5, cirq.measure(a)], seed=123),
@@ -345,7 +344,7 @@ def test_final_density_matrix_seed_with_dephasing():
345
344
  )
346
345
 
347
346
 
348
- def test_final_density_matrix_seed_with_collapsing():
347
+ def test_final_density_matrix_seed_with_collapsing() -> None:
349
348
  a = cirq.LineQubit(0)
350
349
  np.testing.assert_allclose(
351
350
  cirq.final_density_matrix(
@@ -363,7 +362,7 @@ def test_final_density_matrix_seed_with_collapsing():
363
362
  )
364
363
 
365
364
 
366
- def test_final_density_matrix_noise():
365
+ def test_final_density_matrix_noise() -> None:
367
366
  a = cirq.LineQubit(0)
368
367
  np.testing.assert_allclose(
369
368
  cirq.final_density_matrix([cirq.H(a), cirq.Z(a), cirq.H(a), cirq.measure(a)]),
@@ -380,7 +379,21 @@ def test_final_density_matrix_noise():
380
379
  )
381
380
 
382
381
 
383
- def test_ps_initial_state_wfn():
382
+ def test_final_density_matrix_classical_control() -> None:
383
+ q0, q1 = cirq.LineQubit.range(2)
384
+ circuit = cirq.Circuit(
385
+ cirq.H(q0),
386
+ cirq.measure(q0, key='a'),
387
+ cirq.H(q1).with_classical_controls('a'),
388
+ cirq.measure(q1, key='b'),
389
+ )
390
+ np.testing.assert_allclose(
391
+ cirq.final_density_matrix(circuit),
392
+ np.diag(np.array([0.5, 0.0, 0.25, 0.25], dtype=np.complex64)),
393
+ )
394
+
395
+
396
+ def test_ps_initial_state_wfn() -> None:
384
397
  q0, q1 = cirq.LineQubit.range(2)
385
398
  s00 = cirq.KET_ZERO(q0) * cirq.KET_ZERO(q1)
386
399
  sp0 = cirq.KET_PLUS(q0) * cirq.KET_ZERO(q1)
@@ -396,7 +409,7 @@ def test_ps_initial_state_wfn():
396
409
  )
397
410
 
398
411
 
399
- def test_ps_initial_state_dmat():
412
+ def test_ps_initial_state_dmat() -> None:
400
413
  q0, q1 = cirq.LineQubit.range(2)
401
414
  s00 = cirq.KET_ZERO(q0) * cirq.KET_ZERO(q1)
402
415
  sp0 = cirq.KET_PLUS(q0) * cirq.KET_ZERO(q1)
@@ -15,7 +15,8 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  from collections import abc
18
- from typing import Any, Generic, Iterator, Mapping, Sequence, TYPE_CHECKING
18
+ from collections.abc import Iterator, Mapping, Sequence
19
+ from typing import Any, Generic, TYPE_CHECKING
19
20
 
20
21
  import numpy as np
21
22
 
@@ -14,29 +14,30 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import Any, Sequence
17
+ from collections.abc import Sequence
18
+ from typing import Any, Self
18
19
 
19
20
  import cirq
20
21
 
21
22
 
22
23
  class EmptyQuantumState(cirq.QuantumStateRepresentation):
23
- def copy(self, deep_copy_buffers=True):
24
+ def copy(self, deep_copy_buffers=True) -> Self:
24
25
  return self
25
26
 
26
- def measure(self, axes, seed=None):
27
+ def measure(self, axes, seed=None) -> list[int]:
27
28
  return [0] * len(axes)
28
29
 
29
30
  @property
30
- def supports_factor(self):
31
+ def supports_factor(self) -> bool:
31
32
  return True
32
33
 
33
- def kron(self, other):
34
+ def kron(self, other) -> Self:
34
35
  return self
35
36
 
36
- def factor(self, axes, *, validate=True, atol=1e-07):
37
+ def factor(self, axes, *, validate=True, atol=1e-07) -> tuple[Self, Self]:
37
38
  return self, self
38
39
 
39
- def reindex(self, axes):
40
+ def reindex(self, axes) -> Self:
40
41
  return self
41
42
 
42
43
 
@@ -18,7 +18,8 @@ from __future__ import annotations
18
18
 
19
19
  import abc
20
20
  import copy
21
- from typing import Any, cast, Generic, Iterator, Self, Sequence, TYPE_CHECKING, TypeVar
21
+ from collections.abc import Iterator, Sequence
22
+ from typing import Any, cast, Generic, Self, TYPE_CHECKING, TypeVar
22
23
 
23
24
  import numpy as np
24
25
 
@@ -73,7 +74,7 @@ class SimulationState(SimulationStateBase, Generic[TState], metaclass=abc.ABCMet
73
74
  key: str,
74
75
  invert_mask: Sequence[bool],
75
76
  confusion_map: dict[tuple[int, ...], np.ndarray],
76
- ):
77
+ ) -> None:
77
78
  """Measures the qubits and records to `log_of_measurement_results`.
78
79
 
79
80
  Any bitmasks will be applied to the measurement record.
@@ -209,7 +210,7 @@ class SimulationState(SimulationStateBase, Generic[TState], metaclass=abc.ABCMet
209
210
  return extracted, remainder
210
211
 
211
212
  @property
212
- def allows_factoring(self):
213
+ def allows_factoring(self) -> bool:
213
214
  """Subclasses that allow factorization should override this."""
214
215
  return self._state.supports_factor if self._state is not None else False
215
216
 
@@ -238,7 +239,7 @@ class SimulationState(SimulationStateBase, Generic[TState], metaclass=abc.ABCMet
238
239
  def qubits(self) -> tuple[cirq.Qid, ...]:
239
240
  return self._qubits
240
241
 
241
- def swap(self, q1: cirq.Qid, q2: cirq.Qid, *, inplace=False):
242
+ def swap(self, q1: cirq.Qid, q2: cirq.Qid, *, inplace=False) -> Self:
242
243
  """Swaps two qubits.
243
244
 
244
245
  This only affects the index, and does not modify the underlying
@@ -269,7 +270,7 @@ class SimulationState(SimulationStateBase, Generic[TState], metaclass=abc.ABCMet
269
270
  args._set_qubits(qubits)
270
271
  return args
271
272
 
272
- def rename(self, q1: cirq.Qid, q2: cirq.Qid, *, inplace=False):
273
+ def rename(self, q1: cirq.Qid, q2: cirq.Qid, *, inplace=False) -> Self:
273
274
  """Renames `q1` to `q2`.
274
275
 
275
276
  Args:
@@ -17,8 +17,9 @@
17
17
  from __future__ import annotations
18
18
 
19
19
  import abc
20
+ from collections.abc import Iterator, Mapping, Sequence
20
21
  from types import NotImplementedType
21
- from typing import Any, Generic, Iterator, Mapping, Self, Sequence, TYPE_CHECKING, TypeVar
22
+ from typing import Any, Generic, Self, TYPE_CHECKING, TypeVar
22
23
 
23
24
  from cirq import protocols, value
24
25
 
@@ -81,7 +82,7 @@ class SimulationStateBase(Generic[TSimulationState], metaclass=abc.ABCMeta):
81
82
  Returns:
82
83
  True if the fallback applies, else NotImplemented."""
83
84
 
84
- def apply_operation(self, op: cirq.Operation):
85
+ def apply_operation(self, op: cirq.Operation) -> None:
85
86
  protocols.act_on(op, self)
86
87
 
87
88
  @abc.abstractmethod
@@ -14,7 +14,8 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import Any, Sequence
17
+ from collections.abc import Sequence
18
+ from typing import Any
18
19
 
19
20
  import numpy as np
20
21
  import pytest
@@ -25,13 +26,13 @@ from cirq.testing import PhaseUsingCleanAncilla, PhaseUsingDirtyAncilla
25
26
 
26
27
 
27
28
  class ExampleQuantumState(cirq.QuantumStateRepresentation):
28
- def copy(self, deep_copy_buffers=True):
29
- pass
29
+ def copy(self, deep_copy_buffers=True) -> ExampleQuantumState:
30
+ raise NotImplementedError()
30
31
 
31
- def measure(self, axes, seed=None):
32
+ def measure(self, axes, seed=None) -> list[int]:
32
33
  return [5, 3]
33
34
 
34
- def reindex(self, axes):
35
+ def reindex(self, axes) -> ExampleQuantumState:
35
36
  return self
36
37
 
37
38
 
@@ -44,7 +45,7 @@ class ExampleSimulationState(cirq.SimulationState):
44
45
  ) -> bool:
45
46
  return True
46
47
 
47
- def add_qubits(self, qubits):
48
+ def add_qubits(self, qubits) -> ExampleSimulationState:
48
49
  super().add_qubits(qubits)
49
50
  return self
50
51
 
@@ -13,7 +13,8 @@
13
13
  # limitations under the License.
14
14
  from __future__ import annotations
15
15
 
16
- from typing import Any, Sequence
16
+ from collections.abc import Sequence
17
+ from typing import Any
17
18
 
18
19
  import numpy as np
19
20
 
cirq/sim/simulator.py CHANGED
@@ -31,7 +31,8 @@ from __future__ import annotations
31
31
 
32
32
  import abc
33
33
  import collections
34
- from typing import Any, Callable, cast, Generic, Iterator, Mapping, Sequence, TYPE_CHECKING, TypeVar
34
+ from collections.abc import Callable, Iterator, Mapping, Sequence
35
+ from typing import Any, cast, Generic, TYPE_CHECKING, TypeVar
35
36
 
36
37
  import numpy as np
37
38
 
@@ -217,7 +218,7 @@ class SimulatesAmplitudes(metaclass=value.ABCMetaImplementAnyOneOf):
217
218
  def sample_from_amplitudes(
218
219
  self,
219
220
  circuit: cirq.AbstractCircuit,
220
- param_resolver: cirq.ParamResolver,
221
+ param_resolver: cirq.ParamResolverOrSimilarType,
221
222
  seed: cirq.RANDOM_STATE_OR_SEED_LIKE,
222
223
  repetitions: int = 1,
223
224
  qubit_order: cirq.QubitOrderOrList = ops.QubitOrder.DEFAULT,
@@ -938,7 +939,7 @@ def _qubit_map_to_shape(qubit_map: Mapping[cirq.Qid, int]) -> tuple[int, ...]:
938
939
  return tuple(qid_shape)
939
940
 
940
941
 
941
- def check_all_resolved(circuit):
942
+ def check_all_resolved(circuit) -> None:
942
943
  """Raises if the circuit contains unresolved symbols."""
943
944
  if protocols.is_parameterized(circuit):
944
945
  unresolved = [op for moment in circuit for op in moment if protocols.is_parameterized(op)]
@@ -18,7 +18,8 @@ from __future__ import annotations
18
18
 
19
19
  import abc
20
20
  import collections
21
- from typing import Any, cast, Generic, Iterator, Sequence, TYPE_CHECKING, TypeVar
21
+ from collections.abc import Iterator, Sequence
22
+ from typing import Any, cast, Generic, TYPE_CHECKING, TypeVar
22
23
 
23
24
  import numpy as np
24
25