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
cirq/study/sweeps_test.py CHANGED
@@ -13,6 +13,7 @@
13
13
  # limitations under the License.
14
14
  import pytest
15
15
  import sympy
16
+
16
17
  import cirq
17
18
 
18
19
 
@@ -110,7 +111,9 @@ def test_zip_longest_compatibility():
110
111
 
111
112
 
112
113
  def test_empty_zip():
114
+ assert len(cirq.Zip()) == 0
113
115
  assert len(cirq.ZipLongest()) == 0
116
+ assert str(cirq.Zip()) == 'Zip()'
114
117
  with pytest.raises(ValueError, match='non-empty'):
115
118
  _ = cirq.ZipLongest(cirq.Points('e', []), cirq.Points('a', [1, 2, 3]))
116
119
 
@@ -141,10 +144,26 @@ def test_product():
141
144
  assert _values(sweep, 'a') == [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3]
142
145
  assert _values(sweep, 'b') == [4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7]
143
146
 
147
+ sweep = cirq.Points('a', [1, 2]) * (cirq.Points('b', [3, 4]) * cirq.Points('c', [5, 6]))
148
+ assert len(sweep) == 8
149
+ assert _values(sweep, 'a') == [1, 1, 1, 1, 2, 2, 2, 2]
150
+ assert _values(sweep, 'b') == [3, 3, 4, 4, 3, 3, 4, 4]
151
+ assert _values(sweep, 'c') == [5, 6, 5, 6, 5, 6, 5, 6]
152
+
153
+
154
+ def test_zip_addition():
155
+ zip_sweep = cirq.Zip(cirq.Points('a', [1, 2]), cirq.Points('b', [3, 4]))
156
+ zip_sweep2 = cirq.Points('c', [5, 6]) + zip_sweep
157
+ assert len(zip_sweep2) == 2
158
+ assert _values(zip_sweep2, 'a') == [1, 2]
159
+ assert _values(zip_sweep2, 'b') == [3, 4]
160
+ assert _values(zip_sweep2, 'c') == [5, 6]
161
+
144
162
 
145
163
  def test_empty_product():
146
164
  sweep = cirq.Product()
147
165
  assert len(sweep) == len(list(sweep)) == 1
166
+ assert str(sweep) == 'Product()'
148
167
 
149
168
 
150
169
  def test_slice_access_error():
@@ -246,6 +265,8 @@ def test_equality():
246
265
  et.make_equality_group(lambda: cirq.Linspace('b', 0, 10, 11))
247
266
  et.make_equality_group(lambda: cirq.Points('a', list(range(11))))
248
267
  et.make_equality_group(lambda: cirq.Points('b', list(range(11))))
268
+ et.make_equality_group(lambda: cirq.Concat(cirq.Linspace('a', 0, 10, 11)))
269
+ et.make_equality_group(lambda: cirq.Concat(cirq.Linspace('b', 0, 10, 11)))
249
270
 
250
271
  # Product and Zip sweeps can also be equated.
251
272
  et.make_equality_group(lambda: cirq.Linspace('a', 0, 5, 6) * cirq.Linspace('b', 10, 15, 6))
@@ -373,3 +394,105 @@ def test_dict_to_zip_sweep():
373
394
  assert cirq.dict_to_zip_sweep({'t': [0, 1], 's': [2, 3], 'r': 4}) == (
374
395
  cirq.Zip(cirq.Points('t', [0, 1]), cirq.Points('s', [2, 3]), cirq.Points('r', [4]))
375
396
  )
397
+
398
+
399
+ def test_concat_linspace():
400
+ sweep1 = cirq.Linspace('a', 0.34, 9.16, 4)
401
+ sweep2 = cirq.Linspace('a', 10, 20, 4)
402
+ concat_sweep = cirq.Concat(sweep1, sweep2)
403
+
404
+ assert len(concat_sweep) == 8
405
+ assert concat_sweep.keys == ['a']
406
+ params = list(concat_sweep.param_tuples())
407
+ assert len(params) == 8
408
+ assert params[0] == (('a', 0.34),)
409
+ assert params[3] == (('a', 9.16),)
410
+ assert params[4] == (('a', 10.0),)
411
+ assert params[7] == (('a', 20.0),)
412
+
413
+
414
+ def test_concat_points():
415
+ sweep1 = cirq.Points('a', [1, 2])
416
+ sweep2 = cirq.Points('a', [3, 4, 5])
417
+ concat_sweep = cirq.Concat(sweep1, sweep2)
418
+
419
+ assert concat_sweep.keys == ['a']
420
+ assert len(concat_sweep) == 5
421
+ params = list(concat_sweep)
422
+ assert len(params) == 5
423
+ assert _values(concat_sweep, 'a') == [1, 2, 3, 4, 5]
424
+
425
+
426
+ def test_concat_many_points():
427
+ sweep1 = cirq.Points('a', [1, 2])
428
+ sweep2 = cirq.Points('a', [3, 4, 5])
429
+ sweep3 = cirq.Points('a', [6, 7, 8])
430
+ concat_sweep = cirq.Concat(sweep1, sweep2, sweep3)
431
+
432
+ assert len(concat_sweep) == 8
433
+ params = list(concat_sweep)
434
+ assert len(params) == 8
435
+ assert _values(concat_sweep, 'a') == [1, 2, 3, 4, 5, 6, 7, 8]
436
+
437
+
438
+ def test_concat_mixed():
439
+ sweep1 = cirq.Linspace('a', 0, 1, 3)
440
+ sweep2 = cirq.Points('a', [2, 3])
441
+ concat_sweep = cirq.Concat(sweep1, sweep2)
442
+
443
+ assert len(concat_sweep) == 5
444
+ assert _values(concat_sweep, 'a') == [0.0, 0.5, 1.0, 2, 3]
445
+
446
+
447
+ def test_concat_inconsistent_keys():
448
+ sweep1 = cirq.Linspace('a', 0, 1, 3)
449
+ sweep2 = cirq.Points('b', [2, 3])
450
+
451
+ with pytest.raises(ValueError, match="All sweeps must have the same descriptors"):
452
+ cirq.Concat(sweep1, sweep2)
453
+
454
+
455
+ def test_concat_sympy_symbol():
456
+ a = sympy.Symbol('a')
457
+ sweep1 = cirq.Linspace(a, 0, 1, 3)
458
+ sweep2 = cirq.Points(a, [2, 3])
459
+ concat_sweep = cirq.Concat(sweep1, sweep2)
460
+
461
+ assert len(concat_sweep) == 5
462
+ assert _values(concat_sweep, 'a') == [0.0, 0.5, 1.0, 2, 3]
463
+
464
+
465
+ def test_concat_repr_and_str():
466
+ sweep1 = cirq.Linspace('a', 0, 1, 3)
467
+ sweep2 = cirq.Points('a', [2, 3])
468
+ concat_sweep = cirq.Concat(sweep1, sweep2)
469
+
470
+ expected_repr = (
471
+ "cirq.Concat(cirq.Linspace('a', start=0, stop=1, length=3), cirq.Points('a', [2, 3]))"
472
+ )
473
+ expected_str = "Concat(cirq.Linspace('a', start=0, stop=1, length=3), cirq.Points('a', [2, 3]))"
474
+
475
+ assert repr(concat_sweep) == expected_repr
476
+ assert str(concat_sweep) == expected_str
477
+
478
+
479
+ def test_concat_large_sweep():
480
+ sweep1 = cirq.Points('a', list(range(101)))
481
+ sweep2 = cirq.Points('a', list(range(101, 202)))
482
+ concat_sweep = cirq.Concat(sweep1, sweep2)
483
+
484
+ assert len(concat_sweep) == 202
485
+ assert _values(concat_sweep, 'a') == list(range(101)) + list(range(101, 202))
486
+
487
+
488
+ def test_concat_different_keys_raises():
489
+ sweep1 = cirq.Linspace('a', 0, 1, 3)
490
+ sweep2 = cirq.Points('b', [2, 3])
491
+
492
+ with pytest.raises(ValueError, match="All sweeps must have the same descriptors."):
493
+ _ = cirq.Concat(sweep1, sweep2)
494
+
495
+
496
+ def test_concat_empty_sweep_raises():
497
+ with pytest.raises(ValueError, match="Concat requires at least one sweep."):
498
+ _ = cirq.Concat()
cirq/testing/__init__.py CHANGED
@@ -15,107 +15,136 @@
15
15
  """Utilities for testing code."""
16
16
 
17
17
  from cirq.testing.circuit_compare import (
18
- assert_circuits_with_terminal_measurements_are_equivalent,
19
- assert_circuits_have_same_unitary_given_final_permutation,
20
- assert_has_consistent_apply_channel,
21
- assert_has_consistent_apply_unitary,
22
- assert_has_consistent_apply_unitary_for_various_exponents,
23
- assert_has_diagram,
24
- assert_same_circuits,
25
- highlight_text_differences,
26
- assert_has_consistent_qid_shape,
18
+ # pylint: disable=line-too-long
19
+ assert_circuits_with_terminal_measurements_are_equivalent as assert_circuits_with_terminal_measurements_are_equivalent,
20
+ assert_circuits_have_same_unitary_given_final_permutation as assert_circuits_have_same_unitary_given_final_permutation,
21
+ assert_has_consistent_apply_channel as assert_has_consistent_apply_channel,
22
+ assert_has_consistent_apply_unitary as assert_has_consistent_apply_unitary,
23
+ assert_has_consistent_apply_unitary_for_various_exponents as assert_has_consistent_apply_unitary_for_various_exponents,
24
+ assert_has_diagram as assert_has_diagram,
25
+ assert_same_circuits as assert_same_circuits,
26
+ highlight_text_differences as highlight_text_differences,
27
+ assert_has_consistent_qid_shape as assert_has_consistent_qid_shape,
27
28
  )
28
29
 
29
- from cirq.testing.consistent_act_on import assert_all_implemented_act_on_effects_match_unitary
30
+ from cirq.testing.consistent_act_on import (
31
+ # pylint: disable=line-too-long
32
+ assert_all_implemented_act_on_effects_match_unitary as assert_all_implemented_act_on_effects_match_unitary,
33
+ )
30
34
 
31
- from cirq.testing.consistent_channels import assert_consistent_channel, assert_consistent_mixture
35
+ from cirq.testing.consistent_channels import (
36
+ assert_consistent_channel as assert_consistent_channel,
37
+ assert_consistent_mixture as assert_consistent_mixture,
38
+ )
32
39
 
33
40
  from cirq.testing.consistent_controlled_gate_op import (
34
- assert_controlled_and_controlled_by_identical,
35
- assert_controlled_unitary_consistent,
41
+ assert_controlled_and_controlled_by_identical as assert_controlled_and_controlled_by_identical,
42
+ assert_controlled_unitary_consistent as assert_controlled_unitary_consistent,
36
43
  )
37
44
 
38
45
  from cirq.testing.consistent_decomposition import (
39
- assert_decompose_ends_at_default_gateset,
40
- assert_decompose_is_consistent_with_unitary,
46
+ assert_decompose_ends_at_default_gateset as assert_decompose_ends_at_default_gateset,
47
+ assert_decompose_is_consistent_with_unitary as assert_decompose_is_consistent_with_unitary,
41
48
  )
42
49
 
43
50
  from cirq.testing.consistent_pauli_expansion import (
44
- assert_pauli_expansion_is_consistent_with_unitary,
51
+ # pylint: disable=line-too-long
52
+ assert_pauli_expansion_is_consistent_with_unitary as assert_pauli_expansion_is_consistent_with_unitary,
45
53
  )
46
54
 
47
- from cirq.testing.consistent_phase_by import assert_phase_by_is_consistent_with_unitary
55
+ from cirq.testing.consistent_phase_by import (
56
+ assert_phase_by_is_consistent_with_unitary as assert_phase_by_is_consistent_with_unitary,
57
+ )
48
58
 
49
59
  from cirq.testing.consistent_protocols import (
50
- assert_eigengate_implements_consistent_protocols,
51
- assert_has_consistent_trace_distance_bound,
52
- assert_implements_consistent_protocols,
53
- assert_commutes_magic_method_consistent_with_unitaries,
60
+ # pylint: disable=line-too-long
61
+ assert_eigengate_implements_consistent_protocols as assert_eigengate_implements_consistent_protocols,
62
+ assert_has_consistent_trace_distance_bound as assert_has_consistent_trace_distance_bound,
63
+ assert_implements_consistent_protocols as assert_implements_consistent_protocols,
64
+ assert_commutes_magic_method_consistent_with_unitaries as assert_commutes_magic_method_consistent_with_unitaries,
54
65
  )
55
66
 
56
- from cirq.testing.consistent_qasm import assert_qasm_is_consistent_with_unitary
67
+ from cirq.testing.consistent_qasm import (
68
+ assert_qasm_is_consistent_with_unitary as assert_qasm_is_consistent_with_unitary,
69
+ )
57
70
 
58
- from cirq.testing.consistent_resolve_parameters import assert_consistent_resolve_parameters
71
+ from cirq.testing.consistent_resolve_parameters import (
72
+ assert_consistent_resolve_parameters as assert_consistent_resolve_parameters,
73
+ )
59
74
 
60
- from cirq.testing.consistent_specified_has_unitary import assert_specifies_has_unitary_if_unitary
75
+ from cirq.testing.consistent_specified_has_unitary import (
76
+ assert_specifies_has_unitary_if_unitary as assert_specifies_has_unitary_if_unitary,
77
+ )
61
78
 
62
- from cirq.testing.deprecation import assert_deprecated
79
+ from cirq.testing.deprecation import assert_deprecated as assert_deprecated
63
80
 
64
- from cirq.testing.devices import ValidatingTestDevice
81
+ from cirq.testing.devices import ValidatingTestDevice as ValidatingTestDevice
65
82
 
66
- from cirq.testing.equals_tester import EqualsTester
83
+ from cirq.testing.equals_tester import EqualsTester as EqualsTester
67
84
 
68
- from cirq.testing.equivalent_basis_map import assert_equivalent_computational_basis_map
85
+ from cirq.testing.equivalent_basis_map import (
86
+ assert_equivalent_computational_basis_map as assert_equivalent_computational_basis_map,
87
+ )
69
88
 
70
- from cirq.testing.equivalent_repr_eval import assert_equivalent_repr
89
+ from cirq.testing.equivalent_repr_eval import assert_equivalent_repr as assert_equivalent_repr
71
90
 
72
91
  from cirq.testing.gate_features import (
73
- SingleQubitGate,
74
- TwoQubitGate,
75
- ThreeQubitGate,
76
- DoesNotSupportSerializationGate,
92
+ SingleQubitGate as SingleQubitGate,
93
+ TwoQubitGate as TwoQubitGate,
94
+ ThreeQubitGate as ThreeQubitGate,
95
+ DoesNotSupportSerializationGate as DoesNotSupportSerializationGate,
77
96
  )
78
97
 
79
- from cirq.testing.json import assert_json_roundtrip_works
98
+ from cirq.testing.json import assert_json_roundtrip_works as assert_json_roundtrip_works
80
99
 
81
100
  from cirq.testing.lin_alg_utils import (
82
- assert_allclose_up_to_global_phase,
83
- random_density_matrix,
84
- random_orthogonal,
85
- random_special_orthogonal,
86
- random_special_unitary,
87
- random_superposition,
88
- random_unitary,
101
+ assert_allclose_up_to_global_phase as assert_allclose_up_to_global_phase,
102
+ random_density_matrix as random_density_matrix,
103
+ random_orthogonal as random_orthogonal,
104
+ random_special_orthogonal as random_special_orthogonal,
105
+ random_special_unitary as random_special_unitary,
106
+ random_superposition as random_superposition,
107
+ random_unitary as random_unitary,
89
108
  )
90
109
 
91
- from cirq.testing.logs import assert_logs
110
+ from cirq.testing.logs import assert_logs as assert_logs
111
+
112
+ from cirq.testing.no_identifier_qubit import NoIdentifierQubit as NoIdentifierQubit
92
113
 
93
- from cirq.testing.no_identifier_qubit import NoIdentifierQubit
114
+ from cirq.testing.op_tree import assert_equivalent_op_tree as assert_equivalent_op_tree
94
115
 
95
- from cirq.testing.op_tree import assert_equivalent_op_tree
116
+ from cirq.testing.order_tester import OrderTester as OrderTester
96
117
 
97
- from cirq.testing.order_tester import OrderTester
118
+ from cirq.testing.pytest_utils import (
119
+ retry_once_after_timeout as retry_once_after_timeout,
120
+ retry_once_with_later_random_values as retry_once_with_later_random_values,
121
+ )
98
122
 
99
123
  from cirq.testing.random_circuit import (
100
- DEFAULT_GATE_DOMAIN,
101
- random_circuit,
102
- random_two_qubit_circuit_with_czs,
124
+ DEFAULT_GATE_DOMAIN as DEFAULT_GATE_DOMAIN,
125
+ random_circuit as random_circuit,
126
+ random_two_qubit_circuit_with_czs as random_two_qubit_circuit_with_czs,
103
127
  )
104
128
 
105
129
  from cirq.testing.repr_pretty_tester import (
106
- assert_repr_pretty,
107
- assert_repr_pretty_contains,
108
- FakePrinter,
130
+ assert_repr_pretty as assert_repr_pretty,
131
+ assert_repr_pretty_contains as assert_repr_pretty_contains,
132
+ FakePrinter as FakePrinter,
109
133
  )
110
134
 
111
135
  from cirq.testing.routing_devices import (
112
- construct_grid_device,
113
- construct_ring_device,
114
- RoutingTestingDevice,
136
+ construct_grid_device as construct_grid_device,
137
+ construct_ring_device as construct_ring_device,
138
+ RoutingTestingDevice as RoutingTestingDevice,
115
139
  )
116
140
 
117
- from cirq.testing.sample_circuits import nonoptimal_toffoli_circuit
141
+ from cirq.testing.sample_circuits import nonoptimal_toffoli_circuit as nonoptimal_toffoli_circuit
118
142
 
119
- from cirq.testing.sample_gates import PhaseUsingCleanAncilla, PhaseUsingDirtyAncilla
143
+ from cirq.testing.sample_gates import (
144
+ PhaseUsingCleanAncilla as PhaseUsingCleanAncilla,
145
+ PhaseUsingDirtyAncilla as PhaseUsingDirtyAncilla,
146
+ )
120
147
 
121
- from cirq.testing.consistent_unitary import assert_unitary_is_consistent
148
+ from cirq.testing.consistent_unitary import (
149
+ assert_unitary_is_consistent as assert_unitary_is_consistent,
150
+ )
@@ -5,9 +5,9 @@ import logging
5
5
 
6
6
  from cirq.testing._compat_test_data.module_a import module_b
7
7
 
8
- from cirq.testing._compat_test_data.module_a.dupe import DUPE_CONSTANT
8
+ from cirq.testing._compat_test_data.module_a.dupe import DUPE_CONSTANT as DUPE_CONSTANT
9
9
 
10
- from cirq.testing._compat_test_data.module_a.types import SampleType
10
+ from cirq.testing._compat_test_data.module_a.types import SampleType as SampleType
11
11
 
12
12
  MODULE_A_ATTRIBUTE = "module_a"
13
13
 
@@ -1,2 +1,2 @@
1
1
  # pylint: disable=wrong-or-nonexistent-copyright-notice
2
- from cirq.testing._compat_test_data.module_a.sub.subsub.dupe import DUPE_CONSTANT
2
+ from cirq.testing._compat_test_data.module_a.sub.subsub.dupe import DUPE_CONSTANT as DUPE_CONSTANT
@@ -12,16 +12,15 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- from typing import Any, Dict, Iterable, List, Optional, Sequence, Union
16
-
17
- from collections import defaultdict
18
15
  import itertools
19
16
  import random
17
+ from collections import defaultdict
18
+ from typing import Any, Dict, Iterable, List, Optional, Sequence, Union
20
19
 
21
20
  import numpy as np
22
21
  import sympy
23
22
 
24
- from cirq import circuits, ops, linalg, protocols, qis
23
+ from cirq import circuits, linalg, ops, protocols, qis
25
24
  from cirq.testing import lin_alg_utils
26
25
 
27
26
 
@@ -12,9 +12,8 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- import pytest
16
-
17
15
  import numpy as np
16
+ import pytest
18
17
 
19
18
  import cirq
20
19
  from cirq.testing.circuit_compare import _assert_apply_unitary_works_when_axes_transposed
@@ -334,7 +333,7 @@ def test_assert_has_consistent_apply_unitary():
334
333
  return args.available_buffer
335
334
 
336
335
  def _unitary_(self):
337
- return np.eye(2)
336
+ return np.eye(2) # pragma: no cover
338
337
 
339
338
  def _num_qubits_(self):
340
339
  return 1
@@ -367,7 +366,7 @@ def test_assert_has_consistent_apply_unitary():
367
366
  return args.available_buffer
368
367
 
369
368
  def _unitary_(self):
370
- return np.array([[0, 1], [1, 0]])
369
+ return np.array([[0, 1], [1, 0]]) # pragma: no cover
371
370
 
372
371
  def _num_qubits_(self):
373
372
  return 1
@@ -484,7 +483,7 @@ def test_assert_has_consistent_qid_shape():
484
483
 
485
484
  class ConsistentOp(cirq.Operation):
486
485
  def with_qubits(self, *qubits):
487
- raise NotImplementedError # pragma: no cover
486
+ raise NotImplementedError
488
487
 
489
488
  @property
490
489
  def qubits(self):
@@ -501,7 +500,7 @@ def test_assert_has_consistent_qid_shape():
501
500
  # the three methods before finding an inconsistency and throwing an error.
502
501
  class InconsistentOp1(cirq.Operation):
503
502
  def with_qubits(self, *qubits):
504
- raise NotImplementedError # pragma: no cover
503
+ raise NotImplementedError
505
504
 
506
505
  @property
507
506
  def qubits(self):
@@ -515,7 +514,7 @@ def test_assert_has_consistent_qid_shape():
515
514
 
516
515
  class InconsistentOp2(cirq.Operation):
517
516
  def with_qubits(self, *qubits):
518
- raise NotImplementedError # pragma: no cover
517
+ raise NotImplementedError
519
518
 
520
519
  @property
521
520
  def qubits(self):
@@ -529,7 +528,7 @@ def test_assert_has_consistent_qid_shape():
529
528
 
530
529
  class InconsistentOp3(cirq.Operation):
531
530
  def with_qubits(self, *qubits):
532
- raise NotImplementedError # pragma: no cover
531
+ raise NotImplementedError
533
532
 
534
533
  @property
535
534
  def qubits(self):
@@ -16,17 +16,17 @@ from typing import Any, cast, Optional, Type
16
16
 
17
17
  import numpy as np
18
18
 
19
+ from cirq import protocols
19
20
  from cirq.circuits.circuit import Circuit
20
21
  from cirq.devices import LineQubit
21
22
  from cirq.ops import common_gates
22
23
  from cirq.ops.dense_pauli_string import DensePauliString
23
- from cirq import protocols
24
24
  from cirq.qis import clifford_tableau
25
- from cirq.sim import state_vector_simulation_state, final_state_vector
25
+ from cirq.sim import final_state_vector, state_vector_simulation_state
26
26
  from cirq.sim.clifford import (
27
27
  clifford_tableau_simulation_state,
28
- stabilizer_state_ch_form,
29
28
  stabilizer_ch_form_simulation_state,
29
+ stabilizer_state_ch_form,
30
30
  )
31
31
 
32
32
 
@@ -12,8 +12,9 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- import pytest
16
15
  import numpy as np
16
+ import pytest
17
+
17
18
  import cirq
18
19
 
19
20
 
@@ -12,11 +12,12 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- from typing import Sequence, Optional, Union, Collection
15
+ from typing import Collection, Optional, Sequence, Union
16
16
 
17
- from cirq import devices, ops, protocols
18
17
  import numpy as np
19
18
 
19
+ from cirq import devices, ops, protocols
20
+
20
21
 
21
22
  def assert_controlled_and_controlled_by_identical(
22
23
  gate: ops.Gate,
@@ -12,11 +12,10 @@
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, Sequence, Union, Collection, Tuple, List
16
-
17
- import pytest
15
+ from typing import Collection, List, Optional, Sequence, Tuple, Union
18
16
 
19
17
  import numpy as np
18
+ import pytest
20
19
 
21
20
  import cirq
22
21
  from cirq.ops import control_values as cv
@@ -16,7 +16,7 @@ from typing import Any
16
16
 
17
17
  import numpy as np
18
18
 
19
- from cirq import devices, protocols, ops, circuits
19
+ from cirq import circuits, devices, ops, protocols
20
20
  from cirq.testing import lin_alg_utils
21
21
 
22
22
 
@@ -12,9 +12,8 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- import pytest
16
-
17
15
  import numpy as np
16
+ import pytest
18
17
  import sympy
19
18
 
20
19
  import cirq
@@ -32,7 +32,7 @@ class GoodGateExplicitPauliExpansion(cirq.testing.SingleQubitGate):
32
32
 
33
33
  class GoodGateNoPauliExpansion(cirq.Gate):
34
34
  def num_qubits(self) -> int:
35
- return 4
35
+ return 4 # pragma: no cover
36
36
 
37
37
 
38
38
  class GoodGateNoUnitary(cirq.testing.SingleQubitGate):
@@ -17,7 +17,7 @@ from typing import Any
17
17
  import numpy as np
18
18
  import sympy
19
19
 
20
- from cirq import protocols, linalg
20
+ from cirq import linalg, protocols
21
21
  from cirq.testing import lin_alg_utils
22
22
 
23
23
 
@@ -12,9 +12,8 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- import pytest
16
-
17
15
  import numpy as np
16
+ import pytest
18
17
 
19
18
  import cirq
20
19
 
@@ -13,34 +13,34 @@
13
13
  # limitations under the License.
14
14
 
15
15
  import itertools
16
- from typing import Any, Dict, Optional, Sequence, Type, Union
16
+ from typing import Any, Dict, Optional, Sequence, Type
17
17
 
18
18
  import numpy as np
19
19
  import sympy
20
20
 
21
21
  from cirq import ops, protocols, value
22
- from cirq.testing.consistent_act_on import assert_all_implemented_act_on_effects_match_unitary
23
22
  from cirq.testing.circuit_compare import (
24
23
  assert_has_consistent_apply_unitary,
25
24
  assert_has_consistent_qid_shape,
26
25
  )
26
+ from cirq.testing.consistent_act_on import assert_all_implemented_act_on_effects_match_unitary
27
+ from cirq.testing.consistent_controlled_gate_op import (
28
+ assert_controlled_and_controlled_by_identical,
29
+ assert_controlled_unitary_consistent,
30
+ )
27
31
  from cirq.testing.consistent_decomposition import (
28
- assert_decompose_is_consistent_with_unitary,
29
32
  assert_decompose_ends_at_default_gateset,
33
+ assert_decompose_is_consistent_with_unitary,
30
34
  )
31
- from cirq.testing.consistent_phase_by import assert_phase_by_is_consistent_with_unitary
32
- from cirq.testing.consistent_qasm import assert_qasm_is_consistent_with_unitary
33
35
  from cirq.testing.consistent_pauli_expansion import (
34
36
  assert_pauli_expansion_is_consistent_with_unitary,
35
37
  )
38
+ from cirq.testing.consistent_phase_by import assert_phase_by_is_consistent_with_unitary
39
+ from cirq.testing.consistent_qasm import assert_qasm_is_consistent_with_unitary
36
40
  from cirq.testing.consistent_resolve_parameters import assert_consistent_resolve_parameters
37
41
  from cirq.testing.consistent_specified_has_unitary import assert_specifies_has_unitary_if_unitary
38
- from cirq.testing.equivalent_repr_eval import assert_equivalent_repr
39
- from cirq.testing.consistent_controlled_gate_op import (
40
- assert_controlled_and_controlled_by_identical,
41
- assert_controlled_unitary_consistent,
42
- )
43
42
  from cirq.testing.consistent_unitary import assert_unitary_is_consistent
43
+ from cirq.testing.equivalent_repr_eval import assert_equivalent_repr
44
44
 
45
45
 
46
46
  def assert_implements_consistent_protocols(
@@ -175,7 +175,7 @@ def _assert_meets_standards_helper(
175
175
 
176
176
 
177
177
  def assert_commutes_magic_method_consistent_with_unitaries(
178
- *vals: Sequence[Any], atol: Union[int, float] = 1e-8
178
+ *vals: Sequence[Any], atol: float = 1e-8
179
179
  ) -> None:
180
180
  if any(isinstance(val, ops.Operation) for val in vals):
181
181
  raise TypeError('`_commutes_` need not be consistent with unitaries for `Operation`.')
@@ -12,17 +12,16 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- from typing import AbstractSet, Sequence, Union, List, Tuple
16
-
17
- import pytest
15
+ from types import NotImplementedType
16
+ from typing import AbstractSet, List, Sequence, Tuple, Union
18
17
 
19
18
  import numpy as np
19
+ import pytest
20
20
  import sympy
21
21
 
22
22
  import cirq
23
- from cirq._compat import proper_repr
24
- from cirq.type_workarounds import NotImplementedType
25
23
  import cirq.testing.consistent_controlled_gate_op_test as controlled_gate_op_test
24
+ from cirq._compat import proper_repr
26
25
 
27
26
 
28
27
  class GoodGate(cirq.testing.SingleQubitGate):