cirq-core 1.4.0.dev20240529225110__py3-none-any.whl → 1.5.0__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.

Potentially problematic release.


This version of cirq-core might be problematic. Click here for more details.

Files changed (590) hide show
  1. cirq/__init__.py +587 -569
  2. cirq/_compat.py +9 -0
  3. cirq/_compat_test.py +11 -9
  4. cirq/_import.py +7 -8
  5. cirq/_version.py +31 -1
  6. cirq/_version_test.py +1 -1
  7. cirq/circuits/__init__.py +15 -9
  8. cirq/circuits/_block_diagram_drawer.py +1 -2
  9. cirq/circuits/_block_diagram_drawer_test.py +3 -3
  10. cirq/circuits/_box_drawing_character_data.py +0 -1
  11. cirq/circuits/_box_drawing_character_data_test.py +2 -2
  12. cirq/circuits/_bucket_priority_queue.py +0 -1
  13. cirq/circuits/_bucket_priority_queue_test.py +1 -1
  14. cirq/circuits/circuit.py +336 -234
  15. cirq/circuits/circuit_operation.py +102 -52
  16. cirq/circuits/circuit_operation_test.py +85 -4
  17. cirq/circuits/circuit_test.py +101 -32
  18. cirq/circuits/frozen_circuit.py +36 -32
  19. cirq/circuits/insert_strategy.py +10 -0
  20. cirq/circuits/insert_strategy_test.py +20 -0
  21. cirq/circuits/moment.py +79 -80
  22. cirq/circuits/moment_test.py +105 -2
  23. cirq/circuits/optimization_pass.py +15 -15
  24. cirq/circuits/optimization_pass_test.py +8 -9
  25. cirq/circuits/qasm_output.py +64 -33
  26. cirq/circuits/qasm_output_test.py +63 -2
  27. cirq/circuits/text_diagram_drawer.py +26 -56
  28. cirq/circuits/text_diagram_drawer_test.py +5 -4
  29. cirq/contrib/__init__.py +2 -2
  30. cirq/contrib/acquaintance/__init__.py +44 -29
  31. cirq/contrib/acquaintance/bipartite.py +8 -7
  32. cirq/contrib/acquaintance/bipartite_test.py +11 -1
  33. cirq/contrib/acquaintance/devices.py +5 -4
  34. cirq/contrib/acquaintance/devices_test.py +5 -1
  35. cirq/contrib/acquaintance/executor.py +18 -21
  36. cirq/contrib/acquaintance/executor_test.py +3 -2
  37. cirq/contrib/acquaintance/gates.py +36 -27
  38. cirq/contrib/acquaintance/gates_test.py +1 -1
  39. cirq/contrib/acquaintance/inspection_utils.py +10 -9
  40. cirq/contrib/acquaintance/inspection_utils_test.py +6 -1
  41. cirq/contrib/acquaintance/mutation_utils.py +10 -10
  42. cirq/contrib/acquaintance/optimizers.py +7 -6
  43. cirq/contrib/acquaintance/optimizers_test.py +1 -1
  44. cirq/contrib/acquaintance/permutation.py +22 -21
  45. cirq/contrib/acquaintance/permutation_test.py +1 -1
  46. cirq/contrib/acquaintance/shift.py +8 -6
  47. cirq/contrib/acquaintance/shift_swap_network.py +6 -4
  48. cirq/contrib/acquaintance/strategies/__init__.py +9 -3
  49. cirq/contrib/acquaintance/strategies/complete.py +4 -3
  50. cirq/contrib/acquaintance/strategies/cubic.py +5 -3
  51. cirq/contrib/acquaintance/strategies/quartic_paired.py +8 -6
  52. cirq/contrib/acquaintance/topological_sort.py +4 -2
  53. cirq/contrib/bayesian_network/__init__.py +3 -1
  54. cirq/contrib/bayesian_network/bayesian_network_gate.py +5 -3
  55. cirq/contrib/circuitdag/__init__.py +1 -1
  56. cirq/contrib/circuitdag/circuit_dag.py +24 -24
  57. cirq/contrib/circuitdag/circuit_dag_test.py +1 -1
  58. cirq/contrib/custom_simulators/custom_state_simulator.py +10 -8
  59. cirq/contrib/custom_simulators/custom_state_simulator_test.py +15 -11
  60. cirq/contrib/graph_device/__init__.py +8 -8
  61. cirq/contrib/graph_device/graph_device.py +8 -8
  62. cirq/contrib/graph_device/graph_device_test.py +0 -1
  63. cirq/contrib/graph_device/hypergraph_test.py +1 -0
  64. cirq/contrib/json.py +1 -2
  65. cirq/contrib/json_test.py +2 -2
  66. cirq/contrib/noise_models/__init__.py +5 -6
  67. cirq/contrib/noise_models/noise_models.py +8 -6
  68. cirq/contrib/paulistring/__init__.py +22 -10
  69. cirq/contrib/paulistring/clifford_optimize.py +1 -1
  70. cirq/contrib/paulistring/clifford_optimize_test.py +0 -1
  71. cirq/contrib/paulistring/clifford_target_gateset.py +15 -12
  72. cirq/contrib/paulistring/optimize.py +2 -2
  73. cirq/contrib/paulistring/optimize_test.py +0 -1
  74. cirq/contrib/paulistring/pauli_string_dag_test.py +0 -1
  75. cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py +379 -0
  76. cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation_test.py +523 -0
  77. cirq/contrib/paulistring/pauli_string_optimize.py +3 -1
  78. cirq/contrib/paulistring/pauli_string_optimize_test.py +1 -3
  79. cirq/contrib/paulistring/recombine.py +2 -2
  80. cirq/contrib/paulistring/recombine_test.py +2 -2
  81. cirq/contrib/paulistring/separate.py +3 -4
  82. cirq/contrib/qasm_import/__init__.py +2 -2
  83. cirq/contrib/qasm_import/_lexer.py +21 -26
  84. cirq/contrib/qasm_import/_lexer_test.py +90 -6
  85. cirq/contrib/qasm_import/_parser.py +238 -47
  86. cirq/contrib/qasm_import/_parser_test.py +514 -59
  87. cirq/contrib/qasm_import/qasm_test.py +1 -1
  88. cirq/contrib/qcircuit/__init__.py +6 -4
  89. cirq/contrib/qcircuit/qcircuit_diagram.py +5 -2
  90. cirq/contrib/qcircuit/qcircuit_pdf.py +1 -2
  91. cirq/{experiments/grid_parallel_two_qubit_xeb_test.py → contrib/qcircuit/qcircuit_pdf_test.py} +13 -12
  92. cirq/contrib/qcircuit/qcircuit_test.py +1 -1
  93. cirq/contrib/quantum_volume/__init__.py +7 -7
  94. cirq/contrib/quantum_volume/quantum_volume.py +6 -11
  95. cirq/contrib/quantum_volume/quantum_volume_test.py +3 -1
  96. cirq/contrib/quimb/__init__.py +16 -13
  97. cirq/contrib/quimb/density_matrix.py +1 -1
  98. cirq/contrib/quimb/mps_simulator.py +27 -28
  99. cirq/contrib/quimb/mps_simulator_test.py +5 -0
  100. cirq/contrib/quimb/state_vector.py +3 -10
  101. cirq/contrib/quirk/__init__.py +1 -1
  102. cirq/contrib/quirk/export_to_quirk.py +3 -3
  103. cirq/contrib/routing/__init__.py +12 -9
  104. cirq/contrib/routing/device.py +1 -1
  105. cirq/contrib/routing/device_test.py +1 -2
  106. cirq/contrib/routing/greedy.py +7 -5
  107. cirq/contrib/routing/greedy_test.py +5 -3
  108. cirq/contrib/routing/initialization.py +3 -1
  109. cirq/contrib/routing/initialization_test.py +1 -1
  110. cirq/contrib/routing/swap_network.py +6 -6
  111. cirq/contrib/routing/utils.py +6 -4
  112. cirq/contrib/routing/utils_test.py +1 -2
  113. cirq/{type_workarounds.py → contrib/shuffle_circuits/__init__.py} +5 -10
  114. cirq/contrib/shuffle_circuits/shuffle_circuits_with_readout_benchmarking.py +250 -0
  115. cirq/contrib/shuffle_circuits/shuffle_circuits_with_readout_benchmarking_test.py +363 -0
  116. cirq/contrib/svg/__init__.py +1 -1
  117. cirq/contrib/svg/svg.py +12 -10
  118. cirq/contrib/svg/svg_test.py +3 -2
  119. cirq/devices/__init__.py +34 -25
  120. cirq/devices/device.py +16 -12
  121. cirq/devices/device_test.py +1 -0
  122. cirq/devices/grid_device_metadata.py +16 -12
  123. cirq/devices/grid_device_metadata_test.py +2 -1
  124. cirq/devices/grid_qubit.py +31 -26
  125. cirq/devices/grid_qubit_test.py +30 -1
  126. cirq/devices/insertion_noise_model.py +6 -6
  127. cirq/devices/insertion_noise_model_test.py +1 -1
  128. cirq/devices/line_qubit.py +28 -20
  129. cirq/devices/line_qubit_test.py +26 -0
  130. cirq/devices/named_topologies.py +12 -10
  131. cirq/devices/named_topologies_test.py +5 -4
  132. cirq/devices/noise_model.py +29 -33
  133. cirq/devices/noise_properties.py +2 -2
  134. cirq/devices/noise_properties_test.py +2 -2
  135. cirq/devices/noise_utils.py +3 -3
  136. cirq/devices/superconducting_qubits_noise_properties.py +2 -2
  137. cirq/devices/superconducting_qubits_noise_properties_test.py +3 -3
  138. cirq/devices/thermal_noise_model.py +2 -1
  139. cirq/devices/unconstrained_device.py +1 -1
  140. cirq/devices/unconstrained_device_test.py +6 -0
  141. cirq/experiments/__init__.py +51 -34
  142. cirq/experiments/qubit_characterizations.py +17 -15
  143. cirq/experiments/qubit_characterizations_test.py +4 -6
  144. cirq/experiments/random_quantum_circuit_generation.py +10 -9
  145. cirq/experiments/random_quantum_circuit_generation_test.py +21 -4
  146. cirq/experiments/readout_confusion_matrix.py +73 -8
  147. cirq/experiments/readout_confusion_matrix_test.py +104 -1
  148. cirq/experiments/single_qubit_readout_calibration.py +8 -6
  149. cirq/experiments/single_qubit_readout_calibration_test.py +1 -1
  150. cirq/experiments/t1_decay_experiment.py +4 -5
  151. cirq/experiments/t1_decay_experiment_test.py +1 -2
  152. cirq/experiments/t2_decay_experiment.py +0 -1
  153. cirq/experiments/t2_decay_experiment_test.py +1 -2
  154. cirq/experiments/two_qubit_xeb.py +157 -33
  155. cirq/experiments/two_qubit_xeb_test.py +38 -22
  156. cirq/experiments/xeb_fitting.py +99 -19
  157. cirq/experiments/xeb_fitting_test.py +64 -25
  158. cirq/experiments/xeb_sampling.py +14 -18
  159. cirq/experiments/xeb_simulation.py +4 -3
  160. cirq/experiments/xeb_simulation_test.py +20 -14
  161. cirq/experiments/z_phase_calibration.py +368 -0
  162. cirq/experiments/z_phase_calibration_test.py +241 -0
  163. cirq/interop/__init__.py +4 -1
  164. cirq/interop/quirk/__init__.py +7 -4
  165. cirq/interop/quirk/cells/__init__.py +17 -6
  166. cirq/interop/quirk/cells/arithmetic_cells.py +8 -8
  167. cirq/interop/quirk/cells/arithmetic_cells_test.py +1 -1
  168. cirq/interop/quirk/cells/cell.py +6 -6
  169. cirq/interop/quirk/cells/composite_cell.py +5 -5
  170. cirq/interop/quirk/cells/composite_cell_test.py +1 -1
  171. cirq/interop/quirk/cells/control_cells.py +1 -1
  172. cirq/interop/quirk/cells/frequency_space_cells.py +2 -2
  173. cirq/interop/quirk/cells/ignored_cells.py +1 -1
  174. cirq/interop/quirk/cells/input_cells.py +1 -1
  175. cirq/interop/quirk/cells/input_cells_test.py +1 -1
  176. cirq/interop/quirk/cells/input_rotation_cells.py +1 -1
  177. cirq/interop/quirk/cells/input_rotation_cells_test.py +1 -1
  178. cirq/interop/quirk/cells/measurement_cells.py +1 -1
  179. cirq/interop/quirk/cells/parse.py +8 -7
  180. cirq/interop/quirk/cells/parse_test.py +2 -2
  181. cirq/interop/quirk/cells/single_qubit_rotation_cells.py +1 -1
  182. cirq/interop/quirk/cells/swap_cell_test.py +1 -1
  183. cirq/interop/quirk/cells/unsupported_cells.py +1 -1
  184. cirq/interop/quirk/url_to_circuit.py +7 -7
  185. cirq/interop/quirk/url_to_circuit_test.py +1 -1
  186. cirq/ion/__init__.py +4 -2
  187. cirq/json_resolver_cache.py +15 -7
  188. cirq/linalg/__init__.py +62 -51
  189. cirq/linalg/combinators.py +4 -4
  190. cirq/linalg/combinators_test.py +4 -1
  191. cirq/linalg/decompositions.py +15 -40
  192. cirq/linalg/decompositions_test.py +16 -22
  193. cirq/linalg/diagonalize.py +1 -1
  194. cirq/linalg/diagonalize_test.py +1 -1
  195. cirq/linalg/operator_spaces.py +20 -4
  196. cirq/linalg/operator_spaces_test.py +15 -2
  197. cirq/linalg/predicates.py +3 -3
  198. cirq/linalg/predicates_test.py +1 -0
  199. cirq/linalg/tolerance.py +2 -2
  200. cirq/linalg/transformations.py +30 -12
  201. cirq/linalg/transformations_test.py +13 -0
  202. cirq/neutral_atoms/__init__.py +2 -2
  203. cirq/neutral_atoms/convert_to_neutral_atom_gates_test.py +0 -1
  204. cirq/ops/__init__.py +172 -132
  205. cirq/ops/arithmetic_operation.py +2 -2
  206. cirq/ops/arithmetic_operation_test.py +2 -2
  207. cirq/ops/boolean_hamiltonian.py +3 -2
  208. cirq/ops/classically_controlled_operation.py +39 -12
  209. cirq/ops/classically_controlled_operation_test.py +147 -1
  210. cirq/ops/clifford_gate.py +38 -36
  211. cirq/ops/clifford_gate_test.py +75 -1
  212. cirq/ops/common_channels.py +16 -45
  213. cirq/ops/common_channels_test.py +10 -0
  214. cirq/ops/common_gate_families.py +1 -1
  215. cirq/ops/common_gate_families_test.py +1 -0
  216. cirq/ops/common_gates.py +48 -49
  217. cirq/ops/common_gates_test.py +18 -2
  218. cirq/ops/control_values.py +3 -3
  219. cirq/ops/control_values_test.py +2 -1
  220. cirq/ops/controlled_gate.py +36 -23
  221. cirq/ops/controlled_gate_test.py +70 -3
  222. cirq/ops/controlled_operation.py +6 -5
  223. cirq/ops/controlled_operation_test.py +7 -3
  224. cirq/ops/dense_pauli_string.py +11 -11
  225. cirq/ops/diagonal_gate.py +2 -2
  226. cirq/ops/diagonal_gate_test.py +1 -0
  227. cirq/ops/eigen_gate.py +16 -36
  228. cirq/ops/eigen_gate_test.py +60 -10
  229. cirq/ops/fourier_transform.py +1 -3
  230. cirq/ops/fourier_transform_test.py +2 -1
  231. cirq/ops/fsim_gate.py +42 -3
  232. cirq/ops/fsim_gate_test.py +21 -0
  233. cirq/ops/gate_operation.py +8 -8
  234. cirq/ops/gate_operation_test.py +4 -2
  235. cirq/ops/gateset_test.py +11 -2
  236. cirq/ops/global_phase_op.py +8 -7
  237. cirq/ops/global_phase_op_test.py +1 -1
  238. cirq/ops/greedy_qubit_manager_test.py +5 -0
  239. cirq/ops/identity.py +14 -4
  240. cirq/ops/identity_test.py +24 -0
  241. cirq/ops/kraus_channel.py +1 -0
  242. cirq/ops/kraus_channel_test.py +3 -1
  243. cirq/ops/linear_combinations.py +27 -21
  244. cirq/ops/linear_combinations_test.py +23 -4
  245. cirq/ops/matrix_gates.py +24 -8
  246. cirq/ops/measure_util.py +2 -2
  247. cirq/ops/measurement_gate.py +7 -4
  248. cirq/ops/measurement_gate_test.py +2 -1
  249. cirq/ops/mixed_unitary_channel.py +1 -0
  250. cirq/ops/mixed_unitary_channel_test.py +3 -1
  251. cirq/ops/named_qubit.py +8 -1
  252. cirq/ops/op_tree.py +3 -30
  253. cirq/ops/op_tree_test.py +4 -0
  254. cirq/ops/parallel_gate.py +2 -3
  255. cirq/ops/parallel_gate_test.py +2 -1
  256. cirq/ops/parity_gates.py +7 -8
  257. cirq/ops/parity_gates_test.py +1 -0
  258. cirq/ops/pauli_gates.py +5 -11
  259. cirq/ops/pauli_gates_test.py +1 -0
  260. cirq/ops/pauli_interaction_gate.py +11 -5
  261. cirq/ops/pauli_interaction_gate_test.py +2 -3
  262. cirq/ops/pauli_measurement_gate.py +6 -5
  263. cirq/ops/pauli_measurement_gate_test.py +1 -0
  264. cirq/ops/pauli_string.py +115 -130
  265. cirq/ops/pauli_string_phasor.py +21 -20
  266. cirq/ops/pauli_string_phasor_test.py +13 -3
  267. cirq/ops/pauli_string_raw_types.py +1 -0
  268. cirq/ops/pauli_string_test.py +192 -55
  269. cirq/ops/pauli_sum_exponential.py +3 -4
  270. cirq/ops/pauli_sum_exponential_test.py +0 -1
  271. cirq/ops/permutation_gate.py +2 -2
  272. cirq/ops/permutation_gate_test.py +1 -1
  273. cirq/ops/phased_iswap_gate.py +6 -7
  274. cirq/ops/phased_iswap_gate_test.py +21 -5
  275. cirq/ops/phased_x_gate.py +11 -25
  276. cirq/ops/phased_x_gate_test.py +19 -3
  277. cirq/ops/phased_x_z_gate.py +12 -11
  278. cirq/ops/projector.py +4 -5
  279. cirq/ops/qubit_manager.py +2 -1
  280. cirq/ops/qubit_manager_test.py +2 -1
  281. cirq/ops/qubit_order.py +1 -1
  282. cirq/ops/random_gate_channel.py +1 -1
  283. cirq/ops/random_gate_channel_test.py +0 -6
  284. cirq/ops/raw_types.py +146 -50
  285. cirq/ops/raw_types_test.py +37 -3
  286. cirq/ops/state_preparation_channel.py +2 -2
  287. cirq/ops/state_preparation_channel_test.py +2 -1
  288. cirq/ops/swap_gates.py +9 -4
  289. cirq/ops/three_qubit_gates.py +8 -8
  290. cirq/ops/three_qubit_gates_test.py +1 -0
  291. cirq/ops/two_qubit_diagonal_gate.py +4 -3
  292. cirq/ops/uniform_superposition_gate.py +4 -4
  293. cirq/ops/uniform_superposition_gate_test.py +1 -0
  294. cirq/ops/wait_gate.py +6 -8
  295. cirq/protocols/__init__.py +135 -83
  296. cirq/protocols/act_on_protocol.py +1 -1
  297. cirq/protocols/act_on_protocol_test.py +1 -1
  298. cirq/protocols/apply_channel_protocol.py +3 -3
  299. cirq/protocols/apply_mixture_protocol.py +15 -9
  300. cirq/protocols/apply_mixture_protocol_test.py +11 -0
  301. cirq/protocols/apply_unitary_protocol.py +2 -2
  302. cirq/protocols/apply_unitary_protocol_test.py +2 -1
  303. cirq/protocols/approximate_equality_protocol.py +7 -8
  304. cirq/protocols/approximate_equality_protocol_test.py +3 -1
  305. cirq/protocols/circuit_diagram_info_protocol.py +8 -6
  306. cirq/protocols/circuit_diagram_info_protocol_test.py +5 -0
  307. cirq/protocols/commutes_protocol.py +6 -6
  308. cirq/protocols/control_key_protocol.py +1 -1
  309. cirq/protocols/decompose_protocol.py +4 -5
  310. cirq/protocols/decompose_protocol_test.py +2 -1
  311. cirq/protocols/equal_up_to_global_phase_protocol.py +3 -3
  312. cirq/protocols/equal_up_to_global_phase_protocol_test.py +7 -0
  313. cirq/protocols/has_stabilizer_effect_protocol.py +5 -5
  314. cirq/protocols/has_unitary_protocol.py +1 -1
  315. cirq/protocols/has_unitary_protocol_test.py +8 -7
  316. cirq/protocols/hash_from_pickle_test.py +120 -0
  317. cirq/protocols/inverse_protocol.py +1 -1
  318. cirq/protocols/json_serialization.py +14 -1
  319. cirq/protocols/json_serialization_test.py +28 -7
  320. cirq/protocols/json_test_data/BitMaskKeyCondition.json +86 -0
  321. cirq/protocols/json_test_data/BitMaskKeyCondition.repr +7 -0
  322. cirq/protocols/json_test_data/Concat.json +19 -0
  323. cirq/protocols/json_test_data/Concat.repr +1 -0
  324. cirq/protocols/json_test_data/README.md +4 -2
  325. cirq/protocols/json_test_data/SympyCondition.json +60 -15
  326. cirq/protocols/json_test_data/SympyCondition.repr +4 -1
  327. cirq/protocols/json_test_data/_InverseCompositeGate.json +10 -0
  328. cirq/protocols/json_test_data/_InverseCompositeGate.repr +1 -0
  329. cirq/protocols/json_test_data/__init__.py +1 -1
  330. cirq/protocols/json_test_data/sympy.And.json +13 -0
  331. cirq/protocols/json_test_data/sympy.And.repr +1 -0
  332. cirq/protocols/json_test_data/sympy.Indexed.json +18 -0
  333. cirq/protocols/json_test_data/sympy.Indexed.repr +1 -0
  334. cirq/protocols/json_test_data/sympy.IndexedBase.json +9 -0
  335. cirq/protocols/json_test_data/sympy.IndexedBase.repr +1 -0
  336. cirq/protocols/json_test_data/sympy.Not.json +9 -0
  337. cirq/protocols/json_test_data/sympy.Not.repr +1 -0
  338. cirq/protocols/json_test_data/sympy.Or.json +13 -0
  339. cirq/protocols/json_test_data/sympy.Or.repr +1 -0
  340. cirq/protocols/json_test_data/sympy.Xor.json +13 -0
  341. cirq/protocols/json_test_data/sympy.Xor.repr +1 -0
  342. cirq/protocols/kraus_protocol.py +8 -8
  343. cirq/protocols/kraus_protocol_test.py +0 -1
  344. cirq/protocols/measurement_key_protocol.py +1 -1
  345. cirq/protocols/measurement_key_protocol_test.py +7 -7
  346. cirq/protocols/mixture_protocol.py +6 -4
  347. cirq/protocols/mixture_protocol_test.py +21 -13
  348. cirq/protocols/pauli_expansion_protocol.py +1 -0
  349. cirq/protocols/pow_protocol.py +1 -1
  350. cirq/protocols/qasm.py +25 -6
  351. cirq/protocols/qasm_test.py +17 -0
  352. cirq/protocols/qid_shape_protocol.py +2 -2
  353. cirq/protocols/resolve_parameters.py +2 -3
  354. cirq/protocols/resolve_parameters_test.py +2 -1
  355. cirq/protocols/trace_distance_bound.py +1 -1
  356. cirq/protocols/trace_distance_bound_test.py +1 -0
  357. cirq/protocols/unitary_protocol.py +3 -3
  358. cirq/protocols/unitary_protocol_test.py +1 -1
  359. cirq/qis/__init__.py +48 -35
  360. cirq/qis/channels_test.py +0 -9
  361. cirq/qis/clifford_tableau.py +46 -26
  362. cirq/qis/clifford_tableau_test.py +2 -1
  363. cirq/qis/entropy.py +115 -0
  364. cirq/qis/entropy_test.py +43 -0
  365. cirq/qis/measures.py +5 -4
  366. cirq/qis/measures_test.py +7 -0
  367. cirq/qis/noise_utils_test.py +4 -4
  368. cirq/qis/quantum_state_representation.py +1 -1
  369. cirq/qis/states.py +7 -7
  370. cirq/sim/__init__.py +55 -37
  371. cirq/sim/classical_simulator.py +7 -6
  372. cirq/sim/classical_simulator_test.py +3 -1
  373. cirq/sim/clifford/__init__.py +17 -9
  374. cirq/sim/clifford/clifford_simulator.py +5 -4
  375. cirq/sim/clifford/clifford_simulator_test.py +32 -9
  376. cirq/sim/clifford/clifford_tableau_simulation_state.py +1 -1
  377. cirq/sim/clifford/stabilizer_simulation_state.py +1 -1
  378. cirq/sim/clifford/stabilizer_state_ch_form.py +4 -3
  379. cirq/sim/density_matrix_simulator.py +3 -2
  380. cirq/sim/density_matrix_simulator_test.py +12 -4
  381. cirq/sim/density_matrix_utils.py +1 -1
  382. cirq/sim/mux.py +2 -2
  383. cirq/sim/simulation_state.py +4 -5
  384. cirq/sim/simulation_state_base.py +2 -2
  385. cirq/sim/simulation_state_test.py +1 -1
  386. cirq/sim/simulation_utils.py +3 -1
  387. cirq/sim/simulation_utils_test.py +2 -3
  388. cirq/sim/simulator.py +7 -6
  389. cirq/sim/simulator_base.py +5 -5
  390. cirq/sim/simulator_test.py +14 -3
  391. cirq/sim/sparse_simulator.py +4 -3
  392. cirq/sim/sparse_simulator_test.py +17 -9
  393. cirq/sim/state_vector.py +2 -2
  394. cirq/sim/state_vector_simulation_state_test.py +1 -1
  395. cirq/sim/state_vector_simulator.py +4 -4
  396. cirq/sim/state_vector_test.py +27 -32
  397. cirq/study/__init__.py +27 -21
  398. cirq/study/flatten_expressions.py +5 -6
  399. cirq/study/flatten_expressions_test.py +1 -1
  400. cirq/study/resolver.py +14 -11
  401. cirq/study/resolver_test.py +10 -1
  402. cirq/study/result.py +3 -3
  403. cirq/study/sweepable.py +15 -9
  404. cirq/study/sweepable_test.py +27 -0
  405. cirq/study/sweeps.py +65 -10
  406. cirq/study/sweeps_test.py +123 -0
  407. cirq/testing/__init__.py +86 -57
  408. cirq/testing/_compat_test_data/module_a/__init__.py +2 -2
  409. cirq/testing/_compat_test_data/module_a/sub/subsub/__init__.py +1 -1
  410. cirq/testing/circuit_compare.py +3 -4
  411. cirq/testing/circuit_compare_test.py +7 -8
  412. cirq/testing/consistent_act_on.py +3 -3
  413. cirq/testing/consistent_channels_test.py +2 -1
  414. cirq/testing/consistent_controlled_gate_op.py +3 -2
  415. cirq/testing/consistent_controlled_gate_op_test.py +2 -3
  416. cirq/testing/consistent_decomposition.py +1 -1
  417. cirq/testing/consistent_decomposition_test.py +1 -2
  418. cirq/testing/consistent_pauli_expansion_test.py +1 -1
  419. cirq/testing/consistent_phase_by.py +1 -1
  420. cirq/testing/consistent_phase_by_test.py +1 -2
  421. cirq/testing/consistent_protocols.py +11 -11
  422. cirq/testing/consistent_protocols_test.py +4 -5
  423. cirq/testing/consistent_qasm.py +8 -12
  424. cirq/testing/consistent_qasm_test.py +1 -1
  425. cirq/testing/consistent_resolve_parameters.py +2 -1
  426. cirq/testing/consistent_specified_has_unitary_test.py +1 -1
  427. cirq/testing/consistent_unitary.py +3 -1
  428. cirq/testing/consistent_unitary_test.py +3 -3
  429. cirq/testing/devices.py +1 -1
  430. cirq/testing/devices_test.py +1 -0
  431. cirq/testing/equals_tester.py +2 -4
  432. cirq/testing/equals_tester_test.py +6 -5
  433. cirq/testing/equivalent_basis_map.py +1 -0
  434. cirq/testing/equivalent_basis_map_test.py +0 -1
  435. cirq/testing/gate_features_test.py +5 -0
  436. cirq/testing/json.py +4 -4
  437. cirq/testing/lin_alg_utils_test.py +1 -1
  438. cirq/testing/order_tester.py +1 -1
  439. cirq/testing/order_tester_test.py +1 -1
  440. cirq/testing/pytest_utils.py +57 -0
  441. cirq/testing/pytest_utils_test.py +35 -0
  442. cirq/testing/random_circuit.py +2 -2
  443. cirq/testing/random_circuit_test.py +2 -2
  444. cirq/testing/routing_devices_test.py +2 -1
  445. cirq/testing/sample_circuits.py +1 -1
  446. cirq/testing/sample_gates.py +5 -4
  447. cirq/testing/sample_gates_test.py +2 -2
  448. cirq/transformers/__init__.py +101 -82
  449. cirq/transformers/align.py +12 -1
  450. cirq/transformers/align_test.py +13 -0
  451. cirq/transformers/analytical_decompositions/__init__.py +27 -24
  452. cirq/transformers/analytical_decompositions/clifford_decomposition.py +2 -1
  453. cirq/transformers/analytical_decompositions/clifford_decomposition_test.py +1 -1
  454. cirq/transformers/analytical_decompositions/controlled_gate_decomposition.py +1 -1
  455. cirq/transformers/analytical_decompositions/controlled_gate_decomposition_test.py +2 -0
  456. cirq/transformers/analytical_decompositions/cphase_to_fsim.py +1 -1
  457. cirq/transformers/analytical_decompositions/cphase_to_fsim_test.py +1 -1
  458. cirq/transformers/analytical_decompositions/pauli_string_decomposition.py +2 -2
  459. cirq/transformers/analytical_decompositions/pauli_string_decomposition_test.py +4 -4
  460. cirq/transformers/analytical_decompositions/quantum_shannon_decomposition.py +99 -24
  461. cirq/transformers/analytical_decompositions/quantum_shannon_decomposition_test.py +105 -14
  462. cirq/transformers/analytical_decompositions/single_qubit_decompositions.py +1 -1
  463. cirq/transformers/analytical_decompositions/single_to_two_qubit_isometry.py +1 -1
  464. cirq/transformers/analytical_decompositions/single_to_two_qubit_isometry_test.py +1 -0
  465. cirq/transformers/analytical_decompositions/three_qubit_decomposition.py +3 -4
  466. cirq/transformers/analytical_decompositions/three_qubit_decomposition_test.py +1 -1
  467. cirq/transformers/analytical_decompositions/two_qubit_state_preparation.py +2 -1
  468. cirq/transformers/analytical_decompositions/two_qubit_state_preparation_test.py +2 -1
  469. cirq/transformers/analytical_decompositions/two_qubit_to_cz.py +5 -6
  470. cirq/transformers/analytical_decompositions/two_qubit_to_cz_test.py +2 -2
  471. cirq/transformers/analytical_decompositions/two_qubit_to_fsim.py +1 -1
  472. cirq/transformers/analytical_decompositions/two_qubit_to_fsim_test.py +1 -2
  473. cirq/transformers/analytical_decompositions/two_qubit_to_ms.py +2 -2
  474. cirq/transformers/analytical_decompositions/two_qubit_to_sqrt_iswap.py +2 -2
  475. cirq/transformers/analytical_decompositions/two_qubit_to_sqrt_iswap_test.py +2 -1
  476. cirq/transformers/drop_empty_moments.py +1 -0
  477. cirq/transformers/drop_negligible_operations.py +1 -0
  478. cirq/transformers/dynamical_decoupling.py +255 -43
  479. cirq/transformers/dynamical_decoupling_test.py +730 -17
  480. cirq/transformers/eject_phased_paulis.py +29 -15
  481. cirq/transformers/eject_phased_paulis_test.py +3 -8
  482. cirq/transformers/eject_z.py +3 -2
  483. cirq/transformers/eject_z_test.py +3 -3
  484. cirq/transformers/gauge_compiling/__init__.py +25 -9
  485. cirq/transformers/gauge_compiling/cphase_gauge.py +146 -0
  486. cirq/transformers/gauge_compiling/cphase_gauge_test.py +42 -0
  487. cirq/transformers/gauge_compiling/cz_gauge.py +4 -4
  488. cirq/transformers/gauge_compiling/gauge_compiling.py +245 -6
  489. cirq/transformers/gauge_compiling/gauge_compiling_test.py +107 -2
  490. cirq/transformers/gauge_compiling/gauge_compiling_test_utils.py +39 -2
  491. cirq/transformers/gauge_compiling/gauge_compiling_test_utils_test.py +10 -1
  492. cirq/transformers/gauge_compiling/iswap_gauge.py +2 -2
  493. cirq/transformers/gauge_compiling/spin_inversion_gauge.py +2 -2
  494. cirq/transformers/gauge_compiling/sqrt_cz_gauge.py +23 -5
  495. cirq/transformers/gauge_compiling/sqrt_iswap_gauge.py +3 -2
  496. cirq/transformers/heuristic_decompositions/__init__.py +3 -3
  497. cirq/transformers/heuristic_decompositions/gate_tabulation_math_utils.py +2 -1
  498. cirq/transformers/heuristic_decompositions/gate_tabulation_math_utils_test.py +1 -1
  499. cirq/transformers/heuristic_decompositions/two_qubit_gate_tabulation.py +4 -4
  500. cirq/transformers/heuristic_decompositions/two_qubit_gate_tabulation_test.py +4 -4
  501. cirq/transformers/insertion_sort.py +64 -0
  502. cirq/transformers/insertion_sort_test.py +34 -0
  503. cirq/transformers/measurement_transformers.py +14 -1
  504. cirq/transformers/measurement_transformers_test.py +35 -0
  505. cirq/transformers/merge_k_qubit_gates.py +2 -2
  506. cirq/transformers/merge_single_qubit_gates.py +1 -1
  507. cirq/transformers/merge_single_qubit_gates_test.py +1 -1
  508. cirq/transformers/noise_adding.py +115 -0
  509. cirq/transformers/noise_adding_test.py +54 -0
  510. cirq/transformers/optimize_for_target_gateset.py +1 -1
  511. cirq/transformers/optimize_for_target_gateset_test.py +3 -2
  512. cirq/transformers/qubit_management_transformers.py +1 -1
  513. cirq/transformers/randomized_measurements.py +171 -0
  514. cirq/transformers/randomized_measurements_test.py +68 -0
  515. cirq/transformers/routing/__init__.py +14 -5
  516. cirq/transformers/routing/initial_mapper.py +1 -1
  517. cirq/transformers/routing/initial_mapper_test.py +1 -0
  518. cirq/transformers/routing/line_initial_mapper.py +3 -2
  519. cirq/transformers/routing/mapping_manager.py +2 -2
  520. cirq/transformers/routing/mapping_manager_test.py +2 -2
  521. cirq/transformers/routing/route_circuit_cqc.py +3 -2
  522. cirq/transformers/routing/route_circuit_cqc_test.py +2 -1
  523. cirq/transformers/routing/visualize_routed_circuit.py +1 -0
  524. cirq/transformers/routing/visualize_routed_circuit_test.py +1 -0
  525. cirq/transformers/stratify.py +2 -2
  526. cirq/transformers/synchronize_terminal_measurements.py +2 -1
  527. cirq/transformers/target_gatesets/__init__.py +7 -5
  528. cirq/transformers/target_gatesets/compilation_target_gateset.py +16 -3
  529. cirq/transformers/target_gatesets/compilation_target_gateset_test.py +2 -0
  530. cirq/transformers/target_gatesets/cz_gateset.py +5 -1
  531. cirq/transformers/target_gatesets/cz_gateset_test.py +23 -2
  532. cirq/transformers/target_gatesets/sqrt_iswap_gateset.py +1 -1
  533. cirq/transformers/target_gatesets/sqrt_iswap_gateset_test.py +3 -2
  534. cirq/transformers/transformer_api.py +5 -4
  535. cirq/transformers/transformer_api_test.py +11 -3
  536. cirq/transformers/transformer_primitives.py +9 -31
  537. cirq/transformers/transformer_primitives_test.py +6 -5
  538. cirq/value/__init__.py +51 -30
  539. cirq/value/abc_alt.py +1 -2
  540. cirq/value/angle.py +2 -0
  541. cirq/value/classical_data.py +1 -0
  542. cirq/value/condition.py +149 -3
  543. cirq/value/condition_test.py +254 -0
  544. cirq/value/digits.py +1 -1
  545. cirq/value/duration.py +4 -4
  546. cirq/value/duration_test.py +2 -1
  547. cirq/value/linear_dict.py +85 -24
  548. cirq/value/linear_dict_test.py +94 -3
  549. cirq/value/measurement_key.py +9 -2
  550. cirq/value/periodic_value.py +2 -3
  551. cirq/value/periodic_value_test.py +5 -0
  552. cirq/value/probability.py +1 -0
  553. cirq/value/random_state.py +1 -1
  554. cirq/value/timestamp.py +2 -4
  555. cirq/value/timestamp_test.py +2 -1
  556. cirq/value/type_alias.py +2 -2
  557. cirq/value/value_equality_attr.py +14 -2
  558. cirq/value/value_equality_attr_test.py +1 -1
  559. cirq/vis/__init__.py +9 -6
  560. cirq/vis/density_matrix.py +1 -1
  561. cirq/vis/density_matrix_test.py +2 -5
  562. cirq/vis/heatmap.py +49 -12
  563. cirq/vis/heatmap_test.py +168 -4
  564. cirq/vis/histogram.py +1 -1
  565. cirq/vis/histogram_test.py +1 -2
  566. cirq/vis/state_histogram.py +7 -5
  567. cirq/vis/state_histogram_test.py +2 -2
  568. cirq/work/__init__.py +19 -13
  569. cirq/work/collector.py +2 -2
  570. cirq/work/observable_grouping.py +2 -2
  571. cirq/work/observable_measurement.py +3 -3
  572. cirq/work/observable_measurement_data.py +5 -2
  573. cirq/work/observable_measurement_test.py +8 -8
  574. cirq/work/observable_readout_calibration.py +2 -2
  575. cirq/work/observable_readout_calibration_test.py +2 -1
  576. cirq/work/observable_settings.py +8 -7
  577. cirq/work/observable_settings_test.py +3 -2
  578. cirq/work/pauli_sum_collector.py +1 -1
  579. cirq/work/sampler.py +8 -20
  580. cirq/work/sampler_test.py +4 -3
  581. cirq/work/zeros_sampler.py +1 -1
  582. cirq_core-1.5.0.dist-info/METADATA +125 -0
  583. {cirq_core-1.4.0.dev20240529225110.dist-info → cirq_core-1.5.0.dist-info}/RECORD +586 -552
  584. {cirq_core-1.4.0.dev20240529225110.dist-info → cirq_core-1.5.0.dist-info}/WHEEL +1 -1
  585. cirq/experiments/grid_parallel_two_qubit_xeb.py +0 -62
  586. cirq/protocols/json_test_data/GridParallelXEBMetadata.json +0 -119
  587. cirq/protocols/json_test_data/GridParallelXEBMetadata.repr +0 -1
  588. cirq_core-1.4.0.dev20240529225110.dist-info/METADATA +0 -50
  589. {cirq_core-1.4.0.dev20240529225110.dist-info → cirq_core-1.5.0.dist-info}/LICENSE +0 -0
  590. {cirq_core-1.4.0.dev20240529225110.dist-info → cirq_core-1.5.0.dist-info}/top_level.txt +0 -0
@@ -13,22 +13,22 @@
13
13
  # limitations under the License.
14
14
  import inspect
15
15
  from typing import (
16
+ Any,
16
17
  Callable,
17
- Optional,
18
- Union,
18
+ cast,
19
+ Dict,
19
20
  Iterable,
20
- Sequence,
21
21
  Iterator,
22
- Tuple,
23
- Any,
24
- cast,
25
22
  List,
26
- Dict,
23
+ Optional,
24
+ Sequence,
25
+ Tuple,
27
26
  TYPE_CHECKING,
27
+ Union,
28
28
  )
29
29
 
30
30
  from cirq import ops, value
31
- from cirq.interop.quirk.cells.cell import Cell, CellMaker, CELL_SIZES
31
+ from cirq.interop.quirk.cells.cell import Cell, CELL_SIZES, CellMaker
32
32
 
33
33
  if TYPE_CHECKING:
34
34
  import cirq
@@ -17,9 +17,9 @@ import numpy as np
17
17
  import pytest
18
18
 
19
19
  import cirq
20
+ from cirq import quirk_url_to_circuit
20
21
  from cirq.interop.quirk.cells import arithmetic_cells
21
22
  from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
22
- from cirq import quirk_url_to_circuit
23
23
 
24
24
 
25
25
  def test_arithmetic_comparison_gates():
@@ -13,20 +13,20 @@
13
13
  # limitations under the License.
14
14
  import abc
15
15
  from typing import (
16
+ Any,
16
17
  Callable,
17
- Optional,
18
+ Dict,
19
+ Iterable,
18
20
  List,
19
21
  NamedTuple,
20
- Any,
21
- Iterable,
22
+ Optional,
22
23
  Sequence,
24
+ Tuple,
23
25
  TYPE_CHECKING,
24
26
  Union,
25
- Dict,
26
- Tuple,
27
27
  )
28
28
 
29
- from cirq import ops, value, devices
29
+ from cirq import devices, ops, value
30
30
 
31
31
  if TYPE_CHECKING:
32
32
  import cirq
@@ -13,16 +13,16 @@
13
13
  # limitations under the License.
14
14
 
15
15
  from typing import (
16
- List,
17
- TYPE_CHECKING,
18
16
  Callable,
19
- Optional,
20
- Iterator,
21
17
  cast,
22
18
  Iterable,
19
+ Iterator,
20
+ List,
21
+ Optional,
22
+ Sequence,
23
+ TYPE_CHECKING,
23
24
  TypeVar,
24
25
  Union,
25
- Sequence,
26
26
  )
27
27
 
28
28
  from cirq import circuits
@@ -16,8 +16,8 @@ import pytest
16
16
 
17
17
  import cirq
18
18
  from cirq import quirk_json_to_circuit
19
- from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
20
19
  from cirq.interop.quirk.cells.composite_cell import _iterator_to_iterable
20
+ from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
21
21
 
22
22
 
23
23
  def test_iterator_to_iterable():
@@ -109,7 +109,7 @@ class ParityControlCell(Cell):
109
109
  elif gate is not None:
110
110
  column[i] = gate.controlled_by(self.qubits[0])
111
111
 
112
- def basis_change(self) -> 'cirq.OP_TREE':
112
+ def basis_change(self) -> Iterator['cirq.OP_TREE']:
113
113
  yield from self._basis_change
114
114
 
115
115
  # Temporarily move the ZZZ..Z parity observable onto a single qubit.
@@ -11,12 +11,12 @@
11
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
- from typing import Iterator, Callable
14
+ from typing import Callable, Iterator
15
15
 
16
16
  import sympy
17
17
 
18
18
  import cirq
19
- from cirq.interop.quirk.cells.cell import CellMaker, CELL_SIZES, ExplicitOperationsCell
19
+ from cirq.interop.quirk.cells.cell import CELL_SIZES, CellMaker, ExplicitOperationsCell
20
20
 
21
21
 
22
22
  def generate_all_frequency_space_cell_makers() -> Iterator[CellMaker]:
@@ -13,7 +13,7 @@
13
13
  # limitations under the License.
14
14
  from typing import Iterator
15
15
 
16
- from cirq.interop.quirk.cells.cell import CellMaker, CELL_SIZES
16
+ from cirq.interop.quirk.cells.cell import CELL_SIZES, CellMaker
17
17
 
18
18
 
19
19
  def generate_all_ignored_cell_makers() -> Iterator[CellMaker]:
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- from typing import Optional, List, Iterator, Iterable, TYPE_CHECKING
15
+ from typing import Iterable, Iterator, List, Optional, TYPE_CHECKING
16
16
 
17
17
  from cirq.interop.quirk.cells.cell import Cell, CELL_SIZES, CellMaker
18
18
 
@@ -15,8 +15,8 @@
15
15
  import pytest
16
16
 
17
17
  from cirq import quirk_url_to_circuit
18
- from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
19
18
  from cirq.interop.quirk.cells.input_cells import SetDefaultInputCell
19
+ from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
20
20
 
21
21
 
22
22
  def test_missing_input_cell():
@@ -17,7 +17,7 @@ from typing import Any, Iterable, Iterator, List, Optional, Sequence, Tuple, Uni
17
17
  import numpy as np
18
18
 
19
19
  import cirq
20
- from cirq import ops, linalg, value
20
+ from cirq import linalg, ops, value
21
21
  from cirq.interop.quirk.cells.cell import Cell, CellMaker
22
22
 
23
23
 
@@ -16,8 +16,8 @@ import numpy as np
16
16
  import pytest
17
17
 
18
18
  import cirq
19
- from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
20
19
  from cirq import quirk_url_to_circuit
20
+ from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
21
21
 
22
22
 
23
23
  def test_input_rotation_cells():
@@ -11,7 +11,7 @@
11
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
- from typing import Iterator, Optional, cast, Iterable, TYPE_CHECKING
14
+ from typing import cast, Iterable, Iterator, Optional, TYPE_CHECKING
15
15
 
16
16
  from cirq import ops
17
17
  from cirq.interop.quirk.cells.cell import CellMaker, ExplicitOperationsCell
@@ -12,6 +12,8 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ import cmath
16
+ import re
15
17
  from typing import (
16
18
  Any,
17
19
  Callable,
@@ -22,14 +24,11 @@ from typing import (
22
24
  List,
23
25
  Mapping,
24
26
  Optional,
25
- Union,
26
27
  SupportsFloat,
27
28
  TypeVar,
29
+ Union,
28
30
  )
29
31
 
30
- import cmath
31
- import re
32
-
33
32
  import numpy as np
34
33
  import sympy
35
34
 
@@ -86,7 +85,7 @@ def _tokenize(text: str) -> List[str]:
86
85
  return _merge_scientific_float_tokens(g for g in result if g.strip())
87
86
 
88
87
 
89
- _ResolvedToken = Union[sympy.Expr, int, float, complex]
88
+ _ResolvedToken = Union[sympy.Expr, complex]
90
89
 
91
90
 
92
91
  class _CustomQuirkOperationToken:
@@ -154,7 +153,7 @@ def _parse_formula_using_token_map(
154
153
  a = vals.pop()
155
154
  # Note: vals seems to be _HangingToken
156
155
  # func operates on _ResolvedTokens. Ignoring type issues for now.
157
- vals.append(op.func(a, b)) # type: ignore[arg-type]
156
+ vals.append(op.func(a, b))
158
157
 
159
158
  def close_paren() -> None:
160
159
  while True:
@@ -191,7 +190,9 @@ def _parse_formula_using_token_map(
191
190
  elif token.unary_action is not None:
192
191
  burn_ops(token.priority)
193
192
  vals.append(None)
194
- ops.append(_HangingNode(func=lambda _, b: token.unary_action(b), weight=np.inf))
193
+ # this avoids mypy complaint about None not being callable
194
+ token_unary_action = token.unary_action
195
+ ops.append(_HangingNode(func=lambda _, b: token_unary_action(b), weight=np.inf))
195
196
  elif token.binary_action is not None:
196
197
  raise ValueError("Bad expression: binary op in bad spot.\ntext={text!r}")
197
198
 
@@ -16,7 +16,7 @@ import numpy as np
16
16
  import pytest
17
17
  import sympy
18
18
 
19
- from cirq.interop.quirk.cells.parse import parse_matrix, parse_formula, parse_complex
19
+ from cirq.interop.quirk.cells.parse import parse_complex, parse_formula, parse_matrix
20
20
 
21
21
 
22
22
  def test_parse_matrix():
@@ -102,7 +102,7 @@ def test_parse_complex_raw_cases_from_quirk():
102
102
 
103
103
  assert parse_complex("3/2i") == 1.5j
104
104
 
105
- assert parse_complex("\u221A2-\u2153i") == np.sqrt(2) - 1j / 3
105
+ assert parse_complex("\u221a2-\u2153i") == np.sqrt(2) - 1j / 3
106
106
 
107
107
  assert parse_complex("1e-10") == 0.0000000001
108
108
  assert parse_complex("1e+10") == 10000000000
@@ -11,7 +11,7 @@
11
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
- from typing import Iterator, Callable, TYPE_CHECKING
14
+ from typing import Callable, Iterator, TYPE_CHECKING
15
15
 
16
16
  import sympy
17
17
 
@@ -15,8 +15,8 @@
15
15
  import pytest
16
16
 
17
17
  import cirq
18
- from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
19
18
  from cirq import quirk_url_to_circuit
19
+ from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
20
20
 
21
21
 
22
22
  def test_swap():
@@ -13,7 +13,7 @@
13
13
  # limitations under the License.
14
14
  from typing import Iterator
15
15
 
16
- from cirq.interop.quirk.cells.cell import CellMaker, CELL_SIZES
16
+ from cirq.interop.quirk.cells.cell import CELL_SIZES, CellMaker
17
17
 
18
18
 
19
19
  def generate_all_unsupported_cell_makers() -> Iterator[CellMaker]:
@@ -15,28 +15,28 @@ import json
15
15
  import urllib.parse
16
16
  from typing import (
17
17
  Any,
18
- List,
18
+ cast,
19
19
  Dict,
20
+ Iterable,
21
+ List,
22
+ Mapping,
20
23
  Optional,
21
24
  Sequence,
22
- cast,
25
+ Tuple,
23
26
  TYPE_CHECKING,
24
- Iterable,
25
27
  Union,
26
- Mapping,
27
- Tuple,
28
28
  )
29
29
 
30
30
  import numpy as np
31
31
 
32
- from cirq import devices, circuits, ops, protocols
32
+ from cirq import circuits, devices, ops, protocols
33
33
  from cirq.interop.quirk.cells import (
34
34
  Cell,
35
35
  CellMaker,
36
36
  CellMakerArgs,
37
37
  CompositeCell,
38
- generate_all_quirk_cell_makers,
39
38
  ExplicitOperationsCell,
39
+ generate_all_quirk_cell_makers,
40
40
  )
41
41
  from cirq.interop.quirk.cells.parse import parse_matrix
42
42
 
@@ -18,7 +18,7 @@ import numpy as np
18
18
  import pytest
19
19
 
20
20
  import cirq
21
- from cirq import quirk_url_to_circuit, quirk_json_to_circuit
21
+ from cirq import quirk_json_to_circuit, quirk_url_to_circuit
22
22
  from cirq.interop.quirk.cells.testing import assert_url_to_circuit_returns
23
23
 
24
24
 
cirq/ion/__init__.py CHANGED
@@ -14,6 +14,8 @@
14
14
 
15
15
  """Trapped ion devices, gates, and compiling utilties."""
16
16
 
17
- from cirq.ops import ms
17
+ from cirq.ops import ms as ms
18
18
 
19
- from cirq.transformers import two_qubit_matrix_to_ion_operations
19
+ from cirq.transformers import (
20
+ two_qubit_matrix_to_ion_operations as two_qubit_matrix_to_ion_operations,
21
+ )
@@ -20,8 +20,8 @@ from cirq.protocols.json_serialization import ObjectFactory
20
20
 
21
21
  if TYPE_CHECKING:
22
22
  import cirq
23
- import cirq.ops.pauli_gates
24
23
  import cirq.devices.unconstrained_device
24
+ import cirq.ops.pauli_gates
25
25
 
26
26
 
27
27
  # Needed for backwards compatible named tuples of CrossEntropyResult
@@ -42,14 +42,14 @@ CrossEntropyResultDict = NamedTuple(
42
42
 
43
43
  @functools.lru_cache()
44
44
  def _class_resolver_dictionary() -> Dict[str, ObjectFactory]:
45
- import cirq
46
- from cirq.ops import raw_types
47
- import pandas as pd
48
45
  import numpy as np
49
- from cirq.devices.noise_model import _NoNoiseModel
46
+ import pandas as pd
47
+
48
+ import cirq
50
49
  from cirq.devices import InsertionNoiseModel
50
+ from cirq.devices.noise_model import _NoNoiseModel
51
51
  from cirq.experiments import GridInteractionLayer
52
- from cirq.experiments.grid_parallel_two_qubit_xeb import GridParallelXEBMetadata
52
+ from cirq.ops import raw_types
53
53
 
54
54
  def _boolean_hamiltonian_gate_op(qubit_map, boolean_strs, theta):
55
55
  return cirq.BooleanHamiltonianGate(
@@ -107,6 +107,7 @@ def _class_resolver_dictionary() -> Dict[str, ObjectFactory]:
107
107
  'AnyUnitaryGateFamily': cirq.AnyUnitaryGateFamily,
108
108
  'AsymmetricDepolarizingChannel': cirq.AsymmetricDepolarizingChannel,
109
109
  'BitFlipChannel': cirq.BitFlipChannel,
110
+ 'BitMaskKeyCondition': cirq.BitMaskKeyCondition,
110
111
  'BitstringAccumulator': cirq.work.BitstringAccumulator,
111
112
  'BooleanHamiltonianGate': cirq.BooleanHamiltonianGate,
112
113
  'CCNotPowGate': cirq.CCNotPowGate,
@@ -120,6 +121,7 @@ def _class_resolver_dictionary() -> Dict[str, ObjectFactory]:
120
121
  'CliffordState': cirq.CliffordState,
121
122
  'CliffordTableau': cirq.CliffordTableau,
122
123
  'CNotPowGate': cirq.CNotPowGate,
124
+ 'Concat': cirq.Concat,
123
125
  'ConstantQubitNoiseModel': cirq.ConstantQubitNoiseModel,
124
126
  'ControlledGate': cirq.ControlledGate,
125
127
  'ControlledOperation': cirq.ControlledOperation,
@@ -141,7 +143,6 @@ def _class_resolver_dictionary() -> Dict[str, ObjectFactory]:
141
143
  'GlobalPhaseGate': cirq.GlobalPhaseGate,
142
144
  'GridDeviceMetadata': cirq.GridDeviceMetadata,
143
145
  'GridInteractionLayer': GridInteractionLayer,
144
- 'GridParallelXEBMetadata': GridParallelXEBMetadata,
145
146
  'GridQid': cirq.GridQid,
146
147
  'GridQubit': cirq.GridQubit,
147
148
  'HPowGate': cirq.HPowGate,
@@ -149,6 +150,7 @@ def _class_resolver_dictionary() -> Dict[str, ObjectFactory]:
149
150
  'IdentityGate': cirq.IdentityGate,
150
151
  'InitObsSetting': cirq.work.InitObsSetting,
151
152
  'InsertionNoiseModel': InsertionNoiseModel,
153
+ '_InverseCompositeGate': raw_types._InverseCompositeGate,
152
154
  'KeyCondition': cirq.KeyCondition,
153
155
  'KrausChannel': cirq.KrausChannel,
154
156
  'LinearDict': cirq.LinearDict,
@@ -272,6 +274,12 @@ def _class_resolver_dictionary() -> Dict[str, ObjectFactory]:
272
274
  'sympy.StrictLessThan': lambda args: sympy.StrictLessThan(*args),
273
275
  'sympy.Equality': lambda args: sympy.Equality(*args),
274
276
  'sympy.Unequality': lambda args: sympy.Unequality(*args),
277
+ 'sympy.And': lambda args: sympy.And(*args),
278
+ 'sympy.Or': lambda args: sympy.Or(*args),
279
+ 'sympy.Not': lambda args: sympy.Not(*args),
280
+ 'sympy.Xor': lambda args: sympy.Xor(*args),
281
+ 'sympy.Indexed': lambda args: sympy.Indexed(*args),
282
+ 'sympy.IndexedBase': lambda args: sympy.IndexedBase(*args),
275
283
  'sympy.Float': lambda approx: sympy.Float(approx),
276
284
  'sympy.Integer': sympy.Integer,
277
285
  'sympy.Rational': sympy.Rational,
cirq/linalg/__init__.py CHANGED
@@ -17,70 +17,81 @@ Focuses on methods useful for analyzing and optimizing quantum circuits.
17
17
  Avoids duplicating functionality present in numpy.
18
18
  """
19
19
 
20
- from cirq.linalg.combinators import block_diag, CONTROL_TAG, dot, kron, kron_with_controls
20
+ from cirq.linalg.combinators import (
21
+ block_diag as block_diag,
22
+ CONTROL_TAG as CONTROL_TAG,
23
+ dot as dot,
24
+ kron as kron,
25
+ kron_with_controls as kron_with_controls,
26
+ )
21
27
 
22
28
  from cirq.linalg.decompositions import (
23
- axis_angle,
24
- AxisAngleDecomposition,
25
- deconstruct_single_qubit_matrix_into_angles,
26
- extract_right_diag,
27
- kak_canonicalize_vector,
28
- kak_decomposition,
29
- kak_vector,
30
- KakDecomposition,
31
- kron_factor_4x4_to_2x2s,
32
- map_eigenvalues,
33
- num_cnots_required,
34
- unitary_eig,
35
- scatter_plot_normalized_kak_interaction_coefficients,
36
- so4_to_magic_su2s,
29
+ # pylint: disable=line-too-long
30
+ axis_angle as axis_angle,
31
+ AxisAngleDecomposition as AxisAngleDecomposition,
32
+ deconstruct_single_qubit_matrix_into_angles as deconstruct_single_qubit_matrix_into_angles,
33
+ extract_right_diag as extract_right_diag,
34
+ kak_canonicalize_vector as kak_canonicalize_vector,
35
+ kak_decomposition as kak_decomposition,
36
+ kak_vector as kak_vector,
37
+ KakDecomposition as KakDecomposition,
38
+ kron_factor_4x4_to_2x2s as kron_factor_4x4_to_2x2s,
39
+ map_eigenvalues as map_eigenvalues,
40
+ num_cnots_required as num_cnots_required,
41
+ unitary_eig as unitary_eig,
42
+ scatter_plot_normalized_kak_interaction_coefficients as scatter_plot_normalized_kak_interaction_coefficients,
43
+ so4_to_magic_su2s as so4_to_magic_su2s,
37
44
  )
38
45
 
39
-
40
46
  from cirq.linalg.diagonalize import (
41
- bidiagonalize_real_matrix_pair_with_symmetric_products,
42
- bidiagonalize_unitary_with_special_orthogonals,
43
- diagonalize_real_symmetric_and_sorted_diagonal_matrices,
44
- diagonalize_real_symmetric_matrix,
47
+ # pylint: disable=line-too-long
48
+ bidiagonalize_real_matrix_pair_with_symmetric_products as bidiagonalize_real_matrix_pair_with_symmetric_products,
49
+ bidiagonalize_unitary_with_special_orthogonals as bidiagonalize_unitary_with_special_orthogonals,
50
+ diagonalize_real_symmetric_and_sorted_diagonal_matrices as diagonalize_real_symmetric_and_sorted_diagonal_matrices,
51
+ diagonalize_real_symmetric_matrix as diagonalize_real_symmetric_matrix,
45
52
  )
46
53
 
47
54
  from cirq.linalg.operator_spaces import (
48
- expand_matrix_in_orthogonal_basis,
49
- hilbert_schmidt_inner_product,
50
- kron_bases,
51
- matrix_from_basis_coefficients,
52
- PAULI_BASIS,
53
- pow_pauli_combination,
55
+ expand_matrix_in_orthogonal_basis as expand_matrix_in_orthogonal_basis,
56
+ hilbert_schmidt_inner_product as hilbert_schmidt_inner_product,
57
+ kron_bases as kron_bases,
58
+ matrix_from_basis_coefficients as matrix_from_basis_coefficients,
59
+ PAULI_BASIS as PAULI_BASIS,
60
+ pow_pauli_combination as pow_pauli_combination,
54
61
  )
55
62
 
56
63
  from cirq.linalg.predicates import (
57
- allclose_up_to_global_phase,
58
- is_cptp,
59
- is_diagonal,
60
- is_hermitian,
61
- is_normal,
62
- is_orthogonal,
63
- is_special_orthogonal,
64
- is_special_unitary,
65
- is_unitary,
66
- matrix_commutes,
67
- slice_for_qubits_equal_to,
64
+ allclose_up_to_global_phase as allclose_up_to_global_phase,
65
+ is_cptp as is_cptp,
66
+ is_diagonal as is_diagonal,
67
+ is_hermitian as is_hermitian,
68
+ is_normal as is_normal,
69
+ is_orthogonal as is_orthogonal,
70
+ is_special_orthogonal as is_special_orthogonal,
71
+ is_special_unitary as is_special_unitary,
72
+ is_unitary as is_unitary,
73
+ matrix_commutes as matrix_commutes,
74
+ slice_for_qubits_equal_to as slice_for_qubits_equal_to,
68
75
  )
69
76
 
70
- from cirq.linalg.tolerance import all_near_zero, all_near_zero_mod
77
+ from cirq.linalg.tolerance import (
78
+ all_near_zero as all_near_zero,
79
+ all_near_zero_mod as all_near_zero_mod,
80
+ )
71
81
 
72
82
  from cirq.linalg.transformations import (
73
- apply_matrix_to_slices,
74
- density_matrix_kronecker_product,
75
- match_global_phase,
76
- partial_trace,
77
- partial_trace_of_state_vector_as_mixture,
78
- reflection_matrix_pow,
79
- state_vector_kronecker_product,
80
- sub_state_vector,
81
- targeted_conjugate_about,
82
- targeted_left_multiply,
83
- to_special,
84
- transpose_flattened_array,
85
- can_numpy_support_shape,
83
+ apply_matrix_to_slices as apply_matrix_to_slices,
84
+ density_matrix_kronecker_product as density_matrix_kronecker_product,
85
+ can_numpy_support_shape as can_numpy_support_shape,
86
+ match_global_phase as match_global_phase,
87
+ partial_trace as partial_trace,
88
+ partial_trace_of_state_vector_as_mixture as partial_trace_of_state_vector_as_mixture,
89
+ phase_delta as phase_delta,
90
+ reflection_matrix_pow as reflection_matrix_pow,
91
+ state_vector_kronecker_product as state_vector_kronecker_product,
92
+ sub_state_vector as sub_state_vector,
93
+ targeted_conjugate_about as targeted_conjugate_about,
94
+ targeted_left_multiply as targeted_left_multiply,
95
+ to_special as to_special,
96
+ transpose_flattened_array as transpose_flattened_array,
86
97
  )
@@ -15,17 +15,17 @@
15
15
  """Utility methods for combining matrices."""
16
16
 
17
17
  import functools
18
- from typing import Union, TYPE_CHECKING
18
+ from typing import TYPE_CHECKING, Union
19
19
 
20
20
  import numpy as np
21
21
 
22
22
  from cirq._doc import document
23
23
 
24
24
  if TYPE_CHECKING:
25
- from numpy.typing import DTypeLike, ArrayLike
25
+ from numpy.typing import ArrayLike, DTypeLike
26
26
 
27
27
 
28
- def kron(*factors: Union[np.ndarray, complex, float], shape_len: int = 2) -> np.ndarray:
28
+ def kron(*factors: Union[np.ndarray, complex], shape_len: int = 2) -> np.ndarray:
29
29
  """Computes the kronecker product of a sequence of values.
30
30
 
31
31
  A *args version of lambda args: functools.reduce(np.kron, args).
@@ -56,7 +56,7 @@ document(
56
56
  )
57
57
 
58
58
 
59
- def kron_with_controls(*factors: Union[np.ndarray, complex, float]) -> np.ndarray:
59
+ def kron_with_controls(*factors: Union[np.ndarray, complex]) -> np.ndarray:
60
60
  """Computes the kronecker product of a sequence of values and control tags.
61
61
 
62
62
  Use `cirq.CONTROL_TAG` to represent controls. Any entry of the output
@@ -11,8 +11,8 @@
11
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
- import pytest
15
14
  import numpy as np
15
+ import pytest
16
16
 
17
17
  import cirq
18
18
 
@@ -104,6 +104,9 @@ def test_block_diag():
104
104
  ),
105
105
  )
106
106
 
107
+ with pytest.raises(ValueError, match='Blocks must be square'):
108
+ _ = cirq.block_diag(np.array([[1, 2, 3], [3, 4, 5]]))
109
+
107
110
 
108
111
  def test_block_diag_dtype():
109
112
  assert cirq.block_diag().dtype == np.complex128