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
@@ -23,7 +23,7 @@ import sympy
23
23
  import cirq
24
24
 
25
25
 
26
- def test_x_gate():
26
+ def test_x_gate() -> None:
27
27
  q0, q1 = cirq.LineQubit.range(2)
28
28
  circuit = cirq.Circuit()
29
29
  circuit.append(cirq.X(q0))
@@ -31,36 +31,59 @@ def test_x_gate():
31
31
  circuit.append(cirq.X(q1))
32
32
  circuit.append(cirq.measure((q0, q1), key='key'))
33
33
  expected_results = {'key': np.array([[[1, 0]]], dtype=np.uint8)}
34
+ sim: cirq.ClassicalStateSimulator
34
35
  sim = cirq.ClassicalStateSimulator()
35
36
  results = sim.run(circuit, param_resolver=None, repetitions=1).records
36
37
  np.testing.assert_equal(results, expected_results)
37
38
 
38
39
 
39
- def test_CNOT():
40
+ def test_CNOT() -> None:
40
41
  q0, q1 = cirq.LineQubit.range(2)
41
42
  circuit = cirq.Circuit()
42
43
  circuit.append(cirq.X(q0))
43
44
  circuit.append(cirq.CNOT(q0, q1))
44
45
  circuit.append(cirq.measure(q1, key='key'))
45
46
  expected_results = {'key': np.array([[[1]]], dtype=np.uint8)}
47
+ sim: cirq.ClassicalStateSimulator
46
48
  sim = cirq.ClassicalStateSimulator()
47
49
  results = sim.run(circuit, param_resolver=None, repetitions=1).records
48
50
  np.testing.assert_equal(results, expected_results)
49
51
 
50
52
 
51
- def test_Swap():
53
+ def test_Swap() -> None:
52
54
  q0, q1 = cirq.LineQubit.range(2)
53
55
  circuit = cirq.Circuit()
54
56
  circuit.append(cirq.X(q0))
55
57
  circuit.append(cirq.SWAP(q0, q1))
56
58
  circuit.append(cirq.measure((q0, q1), key='key'))
57
59
  expected_results = {'key': np.array([[[0, 1]]], dtype=np.uint8)}
60
+ sim: cirq.ClassicalStateSimulator
58
61
  sim = cirq.ClassicalStateSimulator()
59
62
  results = sim.run(circuit, param_resolver=None, repetitions=1).records
60
63
  np.testing.assert_equal(results, expected_results)
61
64
 
62
65
 
63
- def test_CCNOT():
66
+ @pytest.mark.parametrize(
67
+ "n,perm,state",
68
+ [
69
+ (n, np.random.permutation(n).tolist(), np.random.choice(2, size=n))
70
+ for n in np.random.randint(3, 8, size=10)
71
+ ],
72
+ )
73
+ def test_qubit_permutation_gate(n, perm, state) -> None:
74
+ qubits = cirq.LineQubit.range(n)
75
+ perm_gate = cirq.QubitPermutationGate(perm)
76
+ circuit = cirq.Circuit(perm_gate(*qubits), cirq.measure(*qubits, key='key'))
77
+ sim: cirq.ClassicalStateSimulator
78
+ sim = cirq.ClassicalStateSimulator()
79
+ result = sim.simulate(circuit, initial_state=state)
80
+ expected = [0] * n
81
+ for i in range(n):
82
+ expected[perm[i]] = state[i]
83
+ np.testing.assert_equal(result.measurements['key'], expected)
84
+
85
+
86
+ def test_CCNOT() -> None:
64
87
  q0, q1, q2 = cirq.LineQubit.range(3)
65
88
  circuit = cirq.Circuit()
66
89
  circuit.append(cirq.CCNOT(q0, q1, q2))
@@ -78,13 +101,14 @@ def test_CCNOT():
78
101
  expected_results = {
79
102
  'key': np.array([[[0, 0, 0], [1, 0, 0], [0, 1, 0], [1, 1, 1]]], dtype=np.uint8)
80
103
  }
104
+ sim: cirq.ClassicalStateSimulator
81
105
  sim = cirq.ClassicalStateSimulator()
82
106
  results = sim.run(circuit, param_resolver=None, repetitions=1).records
83
107
  np.testing.assert_equal(results, expected_results)
84
108
 
85
109
 
86
110
  @pytest.mark.parametrize(['initial_state'], [(list(x),) for x in product([0, 1], repeat=4)])
87
- def test_CCCX(initial_state):
111
+ def test_CCCX(initial_state) -> None:
88
112
  CCCX = cirq.CCNOT.controlled()
89
113
  qubits = cirq.LineQubit.range(4)
90
114
 
@@ -95,13 +119,14 @@ def test_CCCX(initial_state):
95
119
  final_state = initial_state.copy()
96
120
  final_state[-1] ^= all(final_state[:-1])
97
121
 
122
+ sim: cirq.ClassicalStateSimulator
98
123
  sim = cirq.ClassicalStateSimulator()
99
124
  results = sim.simulate(circuit, initial_state=initial_state).measurements['key']
100
125
  np.testing.assert_equal(results, final_state)
101
126
 
102
127
 
103
128
  @pytest.mark.parametrize(['initial_state'], [(list(x),) for x in product([0, 1], repeat=3)])
104
- def test_CSWAP(initial_state):
129
+ def test_CSWAP(initial_state) -> None:
105
130
  CSWAP = cirq.SWAP.controlled()
106
131
  qubits = cirq.LineQubit.range(3)
107
132
  circuit = cirq.Circuit()
@@ -115,46 +140,50 @@ def test_CSWAP(initial_state):
115
140
  b, c = c, b
116
141
  final_state = [a, b, c]
117
142
 
143
+ sim: cirq.ClassicalStateSimulator
118
144
  sim = cirq.ClassicalStateSimulator()
119
145
  results = sim.simulate(circuit, initial_state=initial_state).measurements['key']
120
146
  np.testing.assert_equal(results, final_state)
121
147
 
122
148
 
123
- def test_measurement_gate():
149
+ def test_measurement_gate() -> None:
124
150
  q0, q1 = cirq.LineQubit.range(2)
125
151
  circuit = cirq.Circuit()
126
152
  circuit.append(cirq.measure((q0, q1), key='key'))
127
153
  expected_results = {'key': np.array([[[0, 0]]], dtype=np.uint8)}
154
+ sim: cirq.ClassicalStateSimulator
128
155
  sim = cirq.ClassicalStateSimulator()
129
156
  results = sim.run(circuit, param_resolver=None, repetitions=1).records
130
157
  np.testing.assert_equal(results, expected_results)
131
158
 
132
159
 
133
- def test_qubit_order():
160
+ def test_qubit_order() -> None:
134
161
  q0, q1 = cirq.LineQubit.range(2)
135
162
  circuit = cirq.Circuit()
136
163
  circuit.append(cirq.CNOT(q0, q1))
137
164
  circuit.append(cirq.X(q0))
138
165
  circuit.append(cirq.measure((q0, q1), key='key'))
139
166
  expected_results = {'key': np.array([[[1, 0]]], dtype=np.uint8)}
167
+ sim: cirq.ClassicalStateSimulator
140
168
  sim = cirq.ClassicalStateSimulator()
141
169
  results = sim.run(circuit, param_resolver=None, repetitions=1).records
142
170
  np.testing.assert_equal(results, expected_results)
143
171
 
144
172
 
145
- def test_same_key_instances():
173
+ def test_same_key_instances() -> None:
146
174
  q0, q1 = cirq.LineQubit.range(2)
147
175
  circuit = cirq.Circuit()
148
176
  circuit.append(cirq.measure((q0, q1), key='key'))
149
177
  circuit.append(cirq.X(q0))
150
178
  circuit.append(cirq.measure((q0, q1), key='key'))
151
179
  expected_results = {'key': np.array([[[0, 0], [1, 0]]], dtype=np.uint8)}
180
+ sim: cirq.ClassicalStateSimulator
152
181
  sim = cirq.ClassicalStateSimulator()
153
182
  results = sim.run(circuit, param_resolver=None, repetitions=1).records
154
183
  np.testing.assert_equal(results, expected_results)
155
184
 
156
185
 
157
- def test_same_key_instances_order():
186
+ def test_same_key_instances_order() -> None:
158
187
  q0, q1 = cirq.LineQubit.range(2)
159
188
  circuit = cirq.Circuit()
160
189
  circuit.append(cirq.X(q0))
@@ -162,12 +191,13 @@ def test_same_key_instances_order():
162
191
  circuit.append(cirq.X(q0))
163
192
  circuit.append(cirq.measure((q1, q0), key='key'))
164
193
  expected_results = {'key': np.array([[[1, 0], [0, 0]]], dtype=np.uint8)}
194
+ sim: cirq.ClassicalStateSimulator
165
195
  sim = cirq.ClassicalStateSimulator()
166
196
  results = sim.run(circuit, param_resolver=None, repetitions=1).records
167
197
  np.testing.assert_equal(results, expected_results)
168
198
 
169
199
 
170
- def test_repetitions():
200
+ def test_repetitions() -> None:
171
201
  q0 = cirq.LineQubit.range(1)
172
202
  circuit = cirq.Circuit()
173
203
  circuit.append(cirq.measure(q0, key='key'))
@@ -176,12 +206,13 @@ def test_repetitions():
176
206
  [[[0]], [[0]], [[0]], [[0]], [[0]], [[0]], [[0]], [[0]], [[0]], [[0]]], dtype=np.uint8
177
207
  )
178
208
  }
209
+ sim: cirq.ClassicalStateSimulator
179
210
  sim = cirq.ClassicalStateSimulator()
180
211
  results = sim.run(circuit, param_resolver=None, repetitions=10).records
181
212
  np.testing.assert_equal(results, expected_results)
182
213
 
183
214
 
184
- def test_multiple_gates():
215
+ def test_multiple_gates() -> None:
185
216
  q0, q1 = cirq.LineQubit.range(2)
186
217
  circuit = cirq.Circuit()
187
218
  circuit.append(cirq.X(q0))
@@ -191,12 +222,13 @@ def test_multiple_gates():
191
222
  circuit.append(cirq.X(q1))
192
223
  circuit.append(cirq.measure((q0, q1), key='key'))
193
224
  expected_results = {'key': np.array([[[1, 0]]], dtype=np.uint8)}
225
+ sim: cirq.ClassicalStateSimulator
194
226
  sim = cirq.ClassicalStateSimulator()
195
227
  results = sim.run(circuit, param_resolver=None, repetitions=1).records
196
228
  np.testing.assert_equal(results, expected_results)
197
229
 
198
230
 
199
- def test_multiple_gates_order():
231
+ def test_multiple_gates_order() -> None:
200
232
  q0, q1 = cirq.LineQubit.range(2)
201
233
  circuit = cirq.Circuit()
202
234
  circuit.append(cirq.X(q0))
@@ -204,12 +236,22 @@ def test_multiple_gates_order():
204
236
  circuit.append(cirq.CNOT(q1, q0))
205
237
  circuit.append(cirq.measure((q0, q1), key='key'))
206
238
  expected_results = {'key': np.array([[[0, 1]]], dtype=np.uint8)}
239
+ sim: cirq.ClassicalStateSimulator
207
240
  sim = cirq.ClassicalStateSimulator()
208
241
  results = sim.run(circuit, param_resolver=None, repetitions=1).records
209
242
  np.testing.assert_equal(results, expected_results)
210
243
 
211
244
 
212
- def test_param_resolver():
245
+ def test_tuple_initial_state() -> None:
246
+ q0, q1, q2 = cirq.LineQubit.range(3)
247
+ circuit = cirq.Circuit(cirq.X(q0), cirq.measure(q0, q1, q2, key='key'))
248
+ sim: cirq.ClassicalStateSimulator
249
+ sim = cirq.ClassicalStateSimulator()
250
+ result = sim.simulate(circuit, initial_state=(0, 1, 0))
251
+ np.testing.assert_equal(result.measurements['key'], [1, 1, 0])
252
+
253
+
254
+ def test_param_resolver() -> None:
213
255
  gate = cirq.CNOT ** sympy.Symbol('t')
214
256
  q0, q1 = cirq.LineQubit.range(2)
215
257
  circuit = cirq.Circuit()
@@ -217,6 +259,7 @@ def test_param_resolver():
217
259
  circuit.append(gate(q0, q1))
218
260
  circuit.append(cirq.measure((q1), key='key'))
219
261
  resolver = cirq.ParamResolver({'t': 0})
262
+ sim: cirq.ClassicalStateSimulator
220
263
  sim = cirq.ClassicalStateSimulator()
221
264
  results_with_parameter_zero = sim.run(circuit, param_resolver=resolver, repetitions=1).records
222
265
  resolver = cirq.ParamResolver({'t': 1})
@@ -225,33 +268,37 @@ def test_param_resolver():
225
268
  np.testing.assert_equal(results_with_parameter_one, {'key': np.array([[[1]]], dtype=np.uint8)})
226
269
 
227
270
 
228
- def test_unknown_gates():
271
+ def test_unknown_gates() -> None:
229
272
  gate = cirq.Y
230
273
  q = cirq.LineQubit(0)
231
274
  circuit = cirq.Circuit(gate(q), cirq.measure((q), key='key'))
275
+ sim: cirq.ClassicalStateSimulator
232
276
  sim = cirq.ClassicalStateSimulator()
233
277
  with pytest.raises(ValueError):
234
278
  _ = sim.run(circuit).records
235
279
 
236
280
 
237
- def test_incompatible_measurements():
281
+ def test_incompatible_measurements() -> None:
238
282
  qs = cirq.LineQubit.range(2)
239
283
  c = cirq.Circuit(cirq.measure(qs, key='key'), cirq.measure(qs[0], key='key'))
284
+ sim: cirq.ClassicalStateSimulator
240
285
  sim = cirq.ClassicalStateSimulator()
241
286
  with pytest.raises(ValueError):
242
287
  _ = sim.run(c)
243
288
 
244
289
 
245
- def test_compatible_measurement():
290
+ def test_compatible_measurement() -> None:
246
291
  qs = cirq.LineQubit.range(2)
247
292
  c = cirq.Circuit(cirq.measure(qs, key='key'), cirq.X.on_each(qs), cirq.measure(qs, key='key'))
293
+ sim: cirq.ClassicalStateSimulator
248
294
  sim = cirq.ClassicalStateSimulator()
249
295
  res = sim.run(c, repetitions=3).records
250
296
  np.testing.assert_equal(res['key'], np.array([[[0, 0], [1, 1]]] * 3, dtype=np.uint8))
251
297
 
252
298
 
253
- def test_simulate_sweeps_param_resolver():
299
+ def test_simulate_sweeps_param_resolver() -> None:
254
300
  q0, q1 = cirq.LineQubit.range(2)
301
+ simulator: cirq.ClassicalStateSimulator
255
302
  simulator = cirq.ClassicalStateSimulator()
256
303
  for b0 in [0, 1]:
257
304
  for b1 in [0, 1]:
@@ -268,18 +315,22 @@ def test_simulate_sweeps_param_resolver():
268
315
  assert results[1].params == params[1]
269
316
 
270
317
 
271
- def test_create_partial_simulation_state_from_int_with_no_qubits():
318
+ def test_create_partial_simulation_state_from_int_with_no_qubits() -> None:
319
+ sim: cirq.ClassicalStateSimulator
272
320
  sim = cirq.ClassicalStateSimulator()
273
321
  initial_state = 5
274
322
  qs = None
275
323
  classical_data = cirq.value.ClassicalDataDictionaryStore()
276
324
  with pytest.raises(ValueError):
277
325
  sim._create_partial_simulation_state(
278
- initial_state=initial_state, qubits=qs, classical_data=classical_data
326
+ initial_state=initial_state,
327
+ qubits=qs, # type: ignore[arg-type]
328
+ classical_data=classical_data,
279
329
  )
280
330
 
281
331
 
282
- def test_create_partial_simulation_state_from_invalid_state():
332
+ def test_create_partial_simulation_state_from_invalid_state() -> None:
333
+ sim: cirq.ClassicalStateSimulator
283
334
  sim = cirq.ClassicalStateSimulator()
284
335
  initial_state = None
285
336
  qs = cirq.LineQubit.range(2)
@@ -290,7 +341,8 @@ def test_create_partial_simulation_state_from_invalid_state():
290
341
  )
291
342
 
292
343
 
293
- def test_create_partial_simulation_state_from_int():
344
+ def test_create_partial_simulation_state_from_int() -> None:
345
+ sim: cirq.ClassicalStateSimulator
294
346
  sim = cirq.ClassicalStateSimulator()
295
347
  initial_state = 15
296
348
  qs = cirq.LineQubit.range(4)
@@ -302,7 +354,8 @@ def test_create_partial_simulation_state_from_int():
302
354
  assert result == expected_result
303
355
 
304
356
 
305
- def test_create_valid_partial_simulation_state_from_list():
357
+ def test_create_valid_partial_simulation_state_from_list() -> None:
358
+ sim: cirq.ClassicalStateSimulator
306
359
  sim = cirq.ClassicalStateSimulator()
307
360
  initial_state = [1, 1, 1, 1]
308
361
  qs = cirq.LineQubit.range(4)
@@ -314,7 +367,8 @@ def test_create_valid_partial_simulation_state_from_list():
314
367
  assert result == expected_result
315
368
 
316
369
 
317
- def test_create_valid_partial_simulation_state_from_np():
370
+ def test_create_valid_partial_simulation_state_from_np() -> None:
371
+ sim: cirq.ClassicalStateSimulator
318
372
  sim = cirq.ClassicalStateSimulator()
319
373
  initial_state = np.array([1, 1])
320
374
  qs = cirq.LineQubit.range(2)
@@ -328,19 +382,20 @@ def test_create_valid_partial_simulation_state_from_np():
328
382
  np.testing.assert_equal(result, expected_result)
329
383
 
330
384
 
331
- def test_create_invalid_partial_simulation_state_from_np():
385
+ def test_create_invalid_partial_simulation_state_from_np() -> None:
332
386
  initial_state = np.array([[1, 1], [1, 1]])
333
387
  qs = cirq.LineQubit.range(2)
334
388
  classical_data = cirq.value.ClassicalDataDictionaryStore()
389
+ sim: cirq.ClassicalStateSimulator
335
390
  sim = cirq.ClassicalStateSimulator()
336
- sim_state = sim._create_partial_simulation_state(
337
- initial_state=initial_state, qubits=qs, classical_data=classical_data
338
- )
391
+
339
392
  with pytest.raises(ValueError):
340
- sim_state._act_on_fallback_(action=cirq.CX, qubits=qs)
393
+ sim._create_partial_simulation_state(
394
+ initial_state=initial_state, qubits=qs, classical_data=classical_data
395
+ )
341
396
 
342
397
 
343
- def test_noise_model():
398
+ def test_noise_model() -> None:
344
399
  noise_model = cirq.NoiseModel.from_noise_model_like(cirq.depolarize(p=0.01))
345
400
  with pytest.raises(ValueError):
346
401
  cirq.ClassicalStateSimulator(noise=noise_model)
@@ -32,7 +32,8 @@ The quantum state is specified in two forms:
32
32
 
33
33
  from __future__ import annotations
34
34
 
35
- from typing import Any, Sequence
35
+ from collections.abc import Sequence
36
+ from typing import Any
36
37
 
37
38
  import numpy as np
38
39
 
@@ -161,7 +162,7 @@ class CliffordSimulatorStepResult(
161
162
  sim_state: The qubit:SimulationState lookup for this step.
162
163
  """
163
164
  super().__init__(sim_state)
164
- self._clifford_state = None
165
+ self._clifford_state: CliffordState | None = None
165
166
 
166
167
  def __str__(self) -> str:
167
168
  def bitstring(vals):
@@ -183,7 +184,7 @@ class CliffordSimulatorStepResult(
183
184
  p.text("cirq.CliffordSimulatorStateResult(...)" if cycle else self.__str__())
184
185
 
185
186
  @property
186
- def state(self):
187
+ def state(self) -> CliffordState:
187
188
  if self._clifford_state is None:
188
189
  clifford_state = CliffordState(self._qubit_mapping)
189
190
  clifford_state.ch_form = self._merged_sim_state.state.copy()
@@ -240,10 +241,10 @@ class CliffordState:
240
241
  def to_numpy(self) -> np.ndarray:
241
242
  return self.ch_form.to_state_vector()
242
243
 
243
- def state_vector(self):
244
+ def state_vector(self) -> np.ndarray:
244
245
  return self.ch_form.state_vector()
245
246
 
246
- def apply_unitary(self, op: cirq.Operation):
247
+ def apply_unitary(self, op: cirq.Operation) -> None:
247
248
  ch_form_args = clifford.StabilizerChFormSimulationState(
248
249
  prng=np.random.RandomState(), qubits=self.qubit_map.keys(), initial_state=self.ch_form
249
250
  )
@@ -259,7 +260,7 @@ class CliffordState:
259
260
  measurements: dict[str, list[int]],
260
261
  prng: np.random.RandomState,
261
262
  collapse_state_vector=True,
262
- ):
263
+ ) -> None:
263
264
  if not isinstance(op.gate, cirq.MeasurementGate):
264
265
  raise TypeError(
265
266
  f'apply_measurement only supports cirq.MeasurementGate operations. '