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
@@ -15,8 +15,8 @@
15
15
  import itertools
16
16
  import random
17
17
 
18
- import pytest
19
18
  import networkx
19
+ import pytest
20
20
 
21
21
  import cirq
22
22
 
@@ -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
+ from __future__ import annotations
16
+
15
17
  from typing import Any, Dict, Generic, Sequence, Type, TYPE_CHECKING
16
18
 
17
19
  import numpy as np
@@ -47,7 +49,7 @@ class CustomStateSimulator(
47
49
  self,
48
50
  state_type: Type[TSimulationState],
49
51
  *,
50
- noise: 'cirq.NOISE_MODEL_LIKE' = None,
52
+ noise: cirq.NOISE_MODEL_LIKE = None,
51
53
  split_untangled_states: bool = False,
52
54
  ):
53
55
  """Initializes a CustomStateSimulator.
@@ -63,24 +65,24 @@ class CustomStateSimulator(
63
65
 
64
66
  def _create_simulator_trial_result(
65
67
  self,
66
- params: 'cirq.ParamResolver',
68
+ params: cirq.ParamResolver,
67
69
  measurements: Dict[str, np.ndarray],
68
- final_simulator_state: 'cirq.SimulationStateBase[TSimulationState]',
69
- ) -> 'CustomStateTrialResult[TSimulationState]':
70
+ final_simulator_state: cirq.SimulationStateBase[TSimulationState],
71
+ ) -> CustomStateTrialResult[TSimulationState]:
70
72
  return CustomStateTrialResult(
71
73
  params, measurements, final_simulator_state=final_simulator_state
72
74
  )
73
75
 
74
76
  def _create_step_result(
75
- self, sim_state: 'cirq.SimulationStateBase[TSimulationState]'
76
- ) -> 'CustomStateStepResult[TSimulationState]':
77
+ self, sim_state: cirq.SimulationStateBase[TSimulationState]
78
+ ) -> CustomStateStepResult[TSimulationState]:
77
79
  return CustomStateStepResult(sim_state)
78
80
 
79
81
  def _create_partial_simulation_state(
80
82
  self,
81
83
  initial_state: Any,
82
- qubits: Sequence['cirq.Qid'],
83
- classical_data: 'cirq.ClassicalDataStore',
84
+ qubits: Sequence[cirq.Qid],
85
+ classical_data: cirq.ClassicalDataStore,
84
86
  ) -> TSimulationState:
85
87
  return self.state_type(
86
88
  initial_state=initial_state, qubits=qubits, classical_data=classical_data
@@ -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
+ from __future__ import annotations
16
+
15
17
  from typing import List, Sequence, Tuple
16
18
 
17
19
  import numpy as np
@@ -25,10 +27,10 @@ class ComputationalBasisState(cirq.qis.QuantumStateRepresentation):
25
27
  def __init__(self, initial_state: List[int]):
26
28
  self.basis = initial_state
27
29
 
28
- def copy(self, deep_copy_buffers: bool = True) -> 'ComputationalBasisState':
29
- return ComputationalBasisState(self.basis)
30
+ def copy(self, deep_copy_buffers: bool = True) -> ComputationalBasisState:
31
+ return ComputationalBasisState(self.basis) # pragma: no cover
30
32
 
31
- def measure(self, axes: Sequence[int], seed: 'cirq.RANDOM_STATE_OR_SEED_LIKE' = None):
33
+ def measure(self, axes: Sequence[int], seed: cirq.RANDOM_STATE_OR_SEED_LIKE = None):
32
34
  return [self.basis[i] for i in axes]
33
35
 
34
36
 
@@ -137,25 +139,27 @@ class ComputationalBasisProductState(cirq.qis.QuantumStateRepresentation):
137
139
  def __init__(self, initial_state: List[int]):
138
140
  self.basis = initial_state
139
141
 
140
- def copy(self, deep_copy_buffers: bool = True) -> 'ComputationalBasisProductState':
142
+ def copy(self, deep_copy_buffers: bool = True) -> ComputationalBasisProductState:
141
143
  return ComputationalBasisProductState(self.basis)
142
144
 
143
- def measure(self, axes: Sequence[int], seed: 'cirq.RANDOM_STATE_OR_SEED_LIKE' = None):
145
+ def measure(self, axes: Sequence[int], seed: cirq.RANDOM_STATE_OR_SEED_LIKE = None):
144
146
  return [self.basis[i] for i in axes]
145
147
 
146
- def kron(self, other: 'ComputationalBasisProductState') -> 'ComputationalBasisProductState':
148
+ def kron(self, other: ComputationalBasisProductState) -> ComputationalBasisProductState:
147
149
  return ComputationalBasisProductState(self.basis + other.basis)
148
150
 
149
151
  def factor(
150
152
  self, axes: Sequence[int], *, validate=True, atol=1e-07
151
- ) -> Tuple['ComputationalBasisProductState', 'ComputationalBasisProductState']:
152
- extracted = ComputationalBasisProductState([self.basis[i] for i in axes])
153
+ ) -> Tuple[ComputationalBasisProductState, ComputationalBasisProductState]:
154
+ extracted = ComputationalBasisProductState(
155
+ [self.basis[i] for i in axes]
156
+ ) # pragma: no cover
153
157
  remainder = ComputationalBasisProductState(
154
158
  [self.basis[i] for i in range(len(self.basis)) if i not in axes]
155
- )
156
- return extracted, remainder
159
+ ) # pragma: no cover
160
+ return extracted, remainder # pragma: no cover
157
161
 
158
- def reindex(self, axes: Sequence[int]) -> 'ComputationalBasisProductState':
162
+ def reindex(self, axes: Sequence[int]) -> ComputationalBasisProductState:
159
163
  return ComputationalBasisProductState([self.basis[i] for i in axes])
160
164
 
161
165
  @property
@@ -14,17 +14,17 @@
14
14
 
15
15
  """Tools for representing a device as an edge-labelled graph."""
16
16
 
17
- from cirq.contrib.graph_device.hypergraph import UndirectedHypergraph
17
+ from cirq.contrib.graph_device.hypergraph import UndirectedHypergraph as UndirectedHypergraph
18
18
 
19
19
  from cirq.contrib.graph_device.graph_device import (
20
- is_undirected_device_graph,
21
- is_crosstalk_graph,
22
- FixedDurationUndirectedGraphDeviceEdge,
23
- UndirectedGraphDevice,
24
- UnconstrainedUndirectedGraphDeviceEdge,
20
+ is_undirected_device_graph as is_undirected_device_graph,
21
+ is_crosstalk_graph as is_crosstalk_graph,
22
+ FixedDurationUndirectedGraphDeviceEdge as FixedDurationUndirectedGraphDeviceEdge,
23
+ UndirectedGraphDevice as UndirectedGraphDevice,
24
+ UnconstrainedUndirectedGraphDeviceEdge as UnconstrainedUndirectedGraphDeviceEdge,
25
25
  )
26
26
 
27
27
  from cirq.contrib.graph_device.uniform_graph_device import (
28
- uniform_undirected_graph_device,
29
- uniform_undirected_linear_device,
28
+ uniform_undirected_graph_device as uniform_undirected_graph_device,
29
+ uniform_undirected_linear_device as uniform_undirected_linear_device,
30
30
  )
@@ -12,13 +12,13 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ from __future__ import annotations
16
+
15
17
  import abc
16
18
  import itertools
17
-
18
- from typing import Iterable, Optional, TYPE_CHECKING, Tuple, cast
19
+ from typing import cast, Iterable, Optional, Tuple, TYPE_CHECKING
19
20
 
20
21
  from cirq import devices, ops, value
21
-
22
22
  from cirq.contrib.graph_device.hypergraph import UndirectedHypergraph
23
23
 
24
24
  if TYPE_CHECKING:
@@ -30,11 +30,11 @@ class UndirectedGraphDeviceEdge(metaclass=abc.ABCMeta):
30
30
 
31
31
  @abc.abstractmethod
32
32
  def duration_of(self, operation: ops.Operation) -> value.Duration:
33
- pass # pragma: no cover
33
+ pass
34
34
 
35
35
  @abc.abstractmethod
36
36
  def validate_operation(self, operation: ops.Operation) -> None:
37
- pass # pragma: no cover
37
+ pass
38
38
 
39
39
 
40
40
  @value.value_equality
@@ -62,7 +62,7 @@ class _UnconstrainedUndirectedGraphDeviceEdge(UndirectedGraphDeviceEdge):
62
62
  return value.Duration(picos=0)
63
63
 
64
64
  def validate_operation(self, operation: ops.Operation) -> None:
65
- pass # pragma: no cover
65
+ pass
66
66
 
67
67
  def __eq__(self, other):
68
68
  return self.__class__ == other.__class__
@@ -152,7 +152,7 @@ class UndirectedGraphDevice(devices.Device):
152
152
  self.crosstalk_graph = crosstalk_graph
153
153
 
154
154
  @property
155
- def qubits(self) -> Tuple['cirq.Qid', ...]:
155
+ def qubits(self) -> Tuple[cirq.Qid, ...]:
156
156
  return cast(Tuple['cirq.Qid', ...], tuple(sorted(self.device_graph.vertices)))
157
157
 
158
158
  @property
@@ -194,7 +194,7 @@ class UndirectedGraphDevice(devices.Device):
194
194
  ):
195
195
  validator(operation, *crosstalk_operations)
196
196
 
197
- def validate_moment(self, moment: 'cirq.Moment'):
197
+ def validate_moment(self, moment: cirq.Moment):
198
198
  super().validate_moment(moment)
199
199
  ops = moment.operations
200
200
  for i, op in enumerate(ops):
@@ -15,7 +15,6 @@
15
15
  import pytest
16
16
 
17
17
  import cirq
18
-
19
18
  import cirq.contrib.graph_device as ccgd
20
19
  import cirq.contrib.graph_device.graph_device as ccgdgd
21
20
 
@@ -13,6 +13,7 @@
13
13
  # limitations under the License.
14
14
 
15
15
  import random
16
+
16
17
  import pytest
17
18
 
18
19
  import cirq.contrib.graph_device as ccgd
cirq/contrib/json.py CHANGED
@@ -1,6 +1,5 @@
1
1
  # pylint: disable=wrong-or-nonexistent-copyright-notice
2
- """Functions for JSON serialization and de-serialization for classes in Contrib.
3
- """
2
+ """Functions for JSON serialization and de-serialization for classes in Contrib."""
4
3
 
5
4
  from cirq.protocols.json_serialization import DEFAULT_RESOLVERS
6
5
 
cirq/contrib/json_test.py CHANGED
@@ -1,10 +1,10 @@
1
1
  # pylint: disable=wrong-or-nonexistent-copyright-notice
2
2
  import cirq
3
- from cirq.testing import assert_json_roundtrip_works
4
- from cirq.contrib.json import DEFAULT_CONTRIB_RESOLVERS
5
3
  from cirq.contrib.acquaintance import SwapPermutationGate
6
4
  from cirq.contrib.bayesian_network import BayesianNetworkGate
5
+ from cirq.contrib.json import DEFAULT_CONTRIB_RESOLVERS
7
6
  from cirq.contrib.quantum_volume import QuantumVolumeResult
7
+ from cirq.testing import assert_json_roundtrip_works
8
8
 
9
9
 
10
10
  def test_bayesian_network_gate():
@@ -11,11 +11,10 @@
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
-
15
14
  from cirq.contrib.noise_models.noise_models import (
16
- DepolarizingNoiseModel,
17
- ReadoutNoiseModel,
18
- DampedReadoutNoiseModel,
19
- DepolarizingWithReadoutNoiseModel,
20
- DepolarizingWithDampedReadoutNoiseModel,
15
+ DepolarizingNoiseModel as DepolarizingNoiseModel,
16
+ ReadoutNoiseModel as ReadoutNoiseModel,
17
+ DampedReadoutNoiseModel as DampedReadoutNoiseModel,
18
+ DepolarizingWithReadoutNoiseModel as DepolarizingWithReadoutNoiseModel,
19
+ DepolarizingWithDampedReadoutNoiseModel as DepolarizingWithDampedReadoutNoiseModel,
21
20
  )
@@ -12,9 +12,11 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ from __future__ import annotations
16
+
15
17
  from typing import Sequence, TYPE_CHECKING
16
18
 
17
- from cirq import circuits, devices, value, ops
19
+ from cirq import circuits, devices, ops, value
18
20
  from cirq.devices.noise_model import validate_all_measurements
19
21
 
20
22
  if TYPE_CHECKING:
@@ -40,7 +42,7 @@ class DepolarizingNoiseModel(devices.NoiseModel):
40
42
  self.qubit_noise_gate = ops.DepolarizingChannel(depol_prob)
41
43
  self._prepend = prepend
42
44
 
43
- def noisy_moment(self, moment: 'cirq.Moment', system_qubits: Sequence['cirq.Qid']):
45
+ def noisy_moment(self, moment: cirq.Moment, system_qubits: Sequence[cirq.Qid]):
44
46
  if validate_all_measurements(moment) or self.is_virtual_moment(moment): # pragma: no cover
45
47
  return moment
46
48
 
@@ -76,7 +78,7 @@ class ReadoutNoiseModel(devices.NoiseModel):
76
78
  self.readout_noise_gate = ops.BitFlipChannel(bitflip_prob)
77
79
  self._prepend = prepend
78
80
 
79
- def noisy_moment(self, moment: 'cirq.Moment', system_qubits: Sequence['cirq.Qid']):
81
+ def noisy_moment(self, moment: cirq.Moment, system_qubits: Sequence[cirq.Qid]):
80
82
  if self.is_virtual_moment(moment):
81
83
  return moment
82
84
  if validate_all_measurements(moment):
@@ -113,7 +115,7 @@ class DampedReadoutNoiseModel(devices.NoiseModel):
113
115
  self.readout_decay_gate = ops.AmplitudeDampingChannel(decay_prob)
114
116
  self._prepend = prepend
115
117
 
116
- def noisy_moment(self, moment: 'cirq.Moment', system_qubits: Sequence['cirq.Qid']):
118
+ def noisy_moment(self, moment: cirq.Moment, system_qubits: Sequence[cirq.Qid]):
117
119
  if self.is_virtual_moment(moment):
118
120
  return moment
119
121
  if validate_all_measurements(moment):
@@ -146,7 +148,7 @@ class DepolarizingWithReadoutNoiseModel(devices.NoiseModel):
146
148
  self.qubit_noise_gate = ops.DepolarizingChannel(depol_prob)
147
149
  self.readout_noise_gate = ops.BitFlipChannel(bitflip_prob)
148
150
 
149
- def noisy_moment(self, moment: 'cirq.Moment', system_qubits: Sequence['cirq.Qid']):
151
+ def noisy_moment(self, moment: cirq.Moment, system_qubits: Sequence[cirq.Qid]):
150
152
  if validate_all_measurements(moment):
151
153
  return [circuits.Moment(self.readout_noise_gate(q) for q in system_qubits), moment]
152
154
  return [moment, circuits.Moment(self.qubit_noise_gate(q) for q in system_qubits)]
@@ -176,7 +178,7 @@ class DepolarizingWithDampedReadoutNoiseModel(devices.NoiseModel):
176
178
  self.readout_noise_gate = ops.BitFlipChannel(bitflip_prob)
177
179
  self.readout_decay_gate = ops.AmplitudeDampingChannel(decay_prob)
178
180
 
179
- def noisy_moment(self, moment: 'cirq.Moment', system_qubits: Sequence['cirq.Qid']):
181
+ def noisy_moment(self, moment: cirq.Moment, system_qubits: Sequence[cirq.Qid]):
180
182
  if validate_all_measurements(moment):
181
183
  return [
182
184
  circuits.Moment(self.readout_decay_gate(q) for q in system_qubits),
@@ -14,23 +14,35 @@
14
14
 
15
15
  """Methods related to optimizing and transforming PauliStrings."""
16
16
 
17
- from cirq.contrib.paulistring.clifford_target_gateset import CliffordTargetGateset
17
+ from cirq.contrib.paulistring.clifford_target_gateset import (
18
+ CliffordTargetGateset as CliffordTargetGateset,
19
+ )
18
20
 
19
21
  from cirq.contrib.paulistring.separate import (
20
- convert_and_separate_circuit,
21
- pauli_string_half,
22
- regular_half,
22
+ convert_and_separate_circuit as convert_and_separate_circuit,
23
+ pauli_string_half as pauli_string_half,
24
+ regular_half as regular_half,
23
25
  )
24
26
 
25
27
  from cirq.contrib.paulistring.pauli_string_dag import (
26
- pauli_string_dag_from_circuit,
27
- pauli_string_reorder_pred,
28
+ pauli_string_dag_from_circuit as pauli_string_dag_from_circuit,
29
+ pauli_string_reorder_pred as pauli_string_reorder_pred,
30
+ )
31
+
32
+ from cirq.contrib.paulistring.recombine import (
33
+ move_pauli_strings_into_circuit as move_pauli_strings_into_circuit,
28
34
  )
29
35
 
30
- from cirq.contrib.paulistring.recombine import move_pauli_strings_into_circuit
36
+ from cirq.contrib.paulistring.pauli_string_optimize import (
37
+ pauli_string_optimized_circuit as pauli_string_optimized_circuit,
38
+ )
31
39
 
32
- from cirq.contrib.paulistring.pauli_string_optimize import pauli_string_optimized_circuit
40
+ from cirq.contrib.paulistring.clifford_optimize import (
41
+ clifford_optimized_circuit as clifford_optimized_circuit,
42
+ )
33
43
 
34
- from cirq.contrib.paulistring.clifford_optimize import clifford_optimized_circuit
44
+ from cirq.contrib.paulistring.optimize import optimized_circuit as optimized_circuit
35
45
 
36
- from cirq.contrib.paulistring.optimize import optimized_circuit
46
+ from cirq.contrib.paulistring.pauli_string_measurement_with_readout_mitigation import (
47
+ measure_pauli_strings as measure_pauli_strings,
48
+ )
@@ -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 Tuple, cast
15
+ from typing import cast, Tuple
16
16
 
17
17
  from cirq import circuits, ops, protocols, transformers
18
18
  from cirq.contrib.paulistring.clifford_target_gateset import CliffordTargetGateset
@@ -14,7 +14,6 @@
14
14
 
15
15
 
16
16
  import cirq
17
-
18
17
  from cirq.contrib.paulistring import clifford_optimized_circuit, CliffordTargetGateset
19
18
 
20
19
 
@@ -12,19 +12,22 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- from typing import List, Union, Type, cast, TYPE_CHECKING
15
+ from __future__ import annotations
16
+
16
17
  from enum import Enum
18
+ from types import NotImplementedType
19
+ from typing import cast, List, Type, TYPE_CHECKING, Union
20
+
17
21
  import numpy as np
18
22
 
19
- from cirq import ops, transformers, protocols, linalg
20
- from cirq.type_workarounds import NotImplementedType
23
+ from cirq import linalg, ops, protocols, transformers
21
24
 
22
25
  if TYPE_CHECKING:
23
26
  import cirq
24
27
 
25
28
 
26
29
  def _matrix_to_clifford_op(
27
- mat: np.ndarray, qubit: 'cirq.Qid', *, atol: float
30
+ mat: np.ndarray, qubit: cirq.Qid, *, atol: float
28
31
  ) -> Union[ops.Operation, NotImplementedType]:
29
32
  rotations = transformers.single_qubit_matrix_to_pauli_rotations(mat, atol)
30
33
  clifford_gate = ops.SingleQubitCliffordGate.I
@@ -42,7 +45,7 @@ def _matrix_to_clifford_op(
42
45
 
43
46
 
44
47
  def _matrix_to_pauli_string_phasors(
45
- mat: np.ndarray, qubit: 'cirq.Qid', *, keep_clifford: bool, atol: float
48
+ mat: np.ndarray, qubit: cirq.Qid, *, keep_clifford: bool, atol: float
46
49
  ) -> ops.OP_TREE:
47
50
  rotations = transformers.single_qubit_matrix_to_pauli_rotations(mat, atol)
48
51
  out_ops: List[ops.GateOperation] = []
@@ -94,7 +97,7 @@ class CliffordTargetGateset(transformers.TwoQubitCompilationTargetGateset):
94
97
  """
95
98
  self.atol = atol
96
99
  self.single_qubit_target = single_qubit_target
97
- gates: List[Union['cirq.Gate', Type['cirq.Gate']]] = [ops.CZ, ops.MeasurementGate]
100
+ gates: List[Union[cirq.Gate, Type[cirq.Gate]]] = [ops.CZ, ops.MeasurementGate]
98
101
  if single_qubit_target in [
99
102
  self.SingleQubitTarget.SINGLE_QUBIT_CLIFFORDS,
100
103
  self.SingleQubitTarget.PAULI_STRING_PHASORS_AND_CLIFFORDS,
@@ -108,8 +111,8 @@ class CliffordTargetGateset(transformers.TwoQubitCompilationTargetGateset):
108
111
  super().__init__(*gates)
109
112
 
110
113
  def _decompose_single_qubit_operation(
111
- self, op: 'cirq.Operation', _
112
- ) -> Union[NotImplementedType, 'cirq.OP_TREE']:
114
+ self, op: cirq.Operation, _
115
+ ) -> Union[NotImplementedType, cirq.OP_TREE]:
113
116
  if not protocols.has_unitary(op):
114
117
  return NotImplemented
115
118
  mat = protocols.unitary(op)
@@ -125,8 +128,8 @@ class CliffordTargetGateset(transformers.TwoQubitCompilationTargetGateset):
125
128
  )
126
129
 
127
130
  def _decompose_two_qubit_operation(
128
- self, op: 'cirq.Operation', _
129
- ) -> Union[NotImplementedType, 'cirq.OP_TREE']:
131
+ self, op: cirq.Operation, _
132
+ ) -> Union[NotImplementedType, cirq.OP_TREE]:
130
133
  if not protocols.has_unitary(op):
131
134
  return NotImplemented
132
135
  return transformers.two_qubit_matrix_to_cz_operations(
@@ -138,10 +141,10 @@ class CliffordTargetGateset(transformers.TwoQubitCompilationTargetGateset):
138
141
  )
139
142
 
140
143
  @property
141
- def postprocess_transformers(self) -> List['cirq.TRANSFORMER']:
144
+ def postprocess_transformers(self) -> List[cirq.TRANSFORMER]:
142
145
  """List of transformers which should be run after decomposing individual operations."""
143
146
 
144
- def rewriter(o: 'cirq.CircuitOperation'):
147
+ def rewriter(o: cirq.CircuitOperation):
145
148
  result = self._decompose_single_qubit_operation(o, -1)
146
149
  return o.circuit.all_operations() if result is NotImplemented else result
147
150
 
@@ -14,9 +14,9 @@
14
14
 
15
15
  from typing import Callable
16
16
 
17
- from cirq import ops, circuits, transformers
18
- from cirq.contrib.paulistring.pauli_string_optimize import pauli_string_optimized_circuit
17
+ from cirq import circuits, ops, transformers
19
18
  from cirq.contrib.paulistring.clifford_optimize import clifford_optimized_circuit
19
+ from cirq.contrib.paulistring.pauli_string_optimize import pauli_string_optimized_circuit
20
20
 
21
21
 
22
22
  class _CZTargetGateSet(transformers.CZTargetGateset):
@@ -14,7 +14,6 @@
14
14
 
15
15
 
16
16
  import cirq
17
-
18
17
  from cirq.contrib.paulistring import optimized_circuit
19
18
 
20
19
 
@@ -13,7 +13,6 @@
13
13
  # limitations under the License.
14
14
 
15
15
  import cirq
16
-
17
16
  from cirq.contrib.paulistring import convert_and_separate_circuit, pauli_string_dag_from_circuit
18
17
 
19
18