cirq-core 1.7.0.dev20250924231107__py3-none-any.whl → 1.7.0.dev20251203004401__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (392) hide show
  1. cirq/__init__.py +1 -0
  2. cirq/_compat.py +3 -2
  3. cirq/_compat_test.py +16 -15
  4. cirq/_doc.py +4 -3
  5. cirq/_import.py +2 -1
  6. cirq/_version.py +1 -1
  7. cirq/_version_test.py +1 -1
  8. cirq/circuits/_bucket_priority_queue.py +2 -1
  9. cirq/circuits/circuit.py +7 -13
  10. cirq/circuits/circuit_operation.py +2 -1
  11. cirq/circuits/circuit_test.py +13 -12
  12. cirq/circuits/frozen_circuit.py +3 -2
  13. cirq/circuits/moment.py +3 -15
  14. cirq/circuits/optimization_pass.py +2 -1
  15. cirq/circuits/qasm_output.py +39 -10
  16. cirq/circuits/qasm_output_test.py +51 -2
  17. cirq/circuits/text_diagram_drawer.py +2 -1
  18. cirq/contrib/acquaintance/bipartite.py +2 -1
  19. cirq/contrib/acquaintance/devices.py +1 -1
  20. cirq/contrib/acquaintance/executor.py +4 -5
  21. cirq/contrib/acquaintance/executor_test.py +2 -1
  22. cirq/contrib/acquaintance/gates.py +2 -1
  23. cirq/contrib/acquaintance/gates_test.py +1 -1
  24. cirq/contrib/acquaintance/inspection_utils.py +2 -1
  25. cirq/contrib/acquaintance/mutation_utils.py +2 -1
  26. cirq/contrib/acquaintance/optimizers.py +2 -1
  27. cirq/contrib/acquaintance/permutation.py +2 -1
  28. cirq/contrib/acquaintance/permutation_test.py +1 -1
  29. cirq/contrib/acquaintance/shift.py +2 -1
  30. cirq/contrib/acquaintance/shift_swap_network.py +2 -1
  31. cirq/contrib/acquaintance/strategies/complete.py +3 -2
  32. cirq/contrib/acquaintance/strategies/cubic.py +2 -1
  33. cirq/contrib/acquaintance/strategies/quartic_paired.py +2 -1
  34. cirq/contrib/acquaintance/strategies/quartic_paired_test.py +1 -1
  35. cirq/contrib/acquaintance/testing.py +2 -1
  36. cirq/contrib/acquaintance/topological_sort.py +2 -1
  37. cirq/contrib/bayesian_network/bayesian_network_gate.py +3 -2
  38. cirq/contrib/circuitdag/circuit_dag.py +4 -2
  39. cirq/contrib/custom_simulators/custom_state_simulator.py +2 -1
  40. cirq/contrib/custom_simulators/custom_state_simulator_test.py +1 -1
  41. cirq/contrib/graph_device/graph_device.py +2 -1
  42. cirq/contrib/graph_device/graph_device_test.py +2 -1
  43. cirq/contrib/graph_device/hypergraph.py +2 -1
  44. cirq/contrib/graph_device/uniform_graph_device.py +2 -1
  45. cirq/contrib/json.py +14 -2
  46. cirq/contrib/json_test_data/BayesianNetworkGate.json +10 -0
  47. cirq/contrib/json_test_data/BayesianNetworkGate.repr +3 -0
  48. cirq/contrib/json_test_data/QuantumVolumeResult.json +169 -0
  49. cirq/contrib/json_test_data/QuantumVolumeResult.repr +22 -0
  50. cirq/contrib/json_test_data/SwapPermutationGate.json +3 -0
  51. cirq/contrib/json_test_data/SwapPermutationGate.repr +1 -0
  52. cirq/contrib/json_test_data/spec.py +0 -2
  53. cirq/contrib/noise_models/noise_models.py +2 -1
  54. cirq/contrib/paulistring/clifford_optimize.py +20 -2
  55. cirq/contrib/paulistring/optimize.py +1 -1
  56. cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py +146 -35
  57. cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation_test.py +74 -171
  58. cirq/contrib/paulistring/recombine.py +5 -2
  59. cirq/contrib/paulistring/separate.py +1 -1
  60. cirq/contrib/qasm_import/_parser.py +2 -1
  61. cirq/contrib/qasm_import/_parser_test.py +3 -3
  62. cirq/contrib/quantikz/__init__.py +21 -0
  63. cirq/contrib/quantikz/circuit_to_latex_quantikz.py +680 -0
  64. cirq/contrib/quantikz/circuit_to_latex_quantikz_test.py +253 -0
  65. cirq/contrib/quantikz/circuit_to_latex_render.py +424 -0
  66. cirq/contrib/quantikz/circuit_to_latex_render_test.py +44 -0
  67. cirq/contrib/quantum_volume/quantum_volume.py +2 -1
  68. cirq/contrib/quimb/density_matrix.py +1 -1
  69. cirq/contrib/quimb/grid_circuits.py +2 -1
  70. cirq/contrib/quimb/grid_circuits_test.py +1 -1
  71. cirq/contrib/quimb/mps_simulator.py +4 -3
  72. cirq/contrib/quimb/state_vector.py +2 -1
  73. cirq/contrib/quirk/export_to_quirk.py +2 -1
  74. cirq/contrib/quirk/linearize_circuit.py +1 -1
  75. cirq/contrib/quirk/quirk_gate.py +2 -1
  76. cirq/contrib/routing/device.py +1 -1
  77. cirq/contrib/routing/greedy.py +2 -1
  78. cirq/contrib/routing/initialization.py +2 -1
  79. cirq/contrib/routing/router.py +2 -1
  80. cirq/contrib/routing/swap_network.py +2 -1
  81. cirq/contrib/routing/utils.py +2 -1
  82. cirq/contrib/shuffle_circuits/shuffle_circuits_with_readout_benchmarking.py +7 -5
  83. cirq/contrib/shuffle_circuits/shuffle_circuits_with_readout_benchmarking_test.py +6 -6
  84. cirq/devices/device.py +2 -1
  85. cirq/devices/grid_device_metadata.py +2 -1
  86. cirq/devices/grid_qubit.py +7 -6
  87. cirq/devices/insertion_noise_model.py +2 -1
  88. cirq/devices/line_qubit.py +2 -1
  89. cirq/devices/named_topologies.py +2 -1
  90. cirq/devices/noise_model.py +2 -1
  91. cirq/devices/noise_model_test.py +1 -1
  92. cirq/devices/noise_properties.py +2 -1
  93. cirq/devices/superconducting_qubits_noise_properties_test.py +2 -1
  94. cirq/devices/thermal_noise_model.py +2 -1
  95. cirq/experiments/__init__.py +2 -0
  96. cirq/experiments/benchmarking/parallel_xeb.py +2 -1
  97. cirq/experiments/benchmarking/parallel_xeb_test.py +1 -1
  98. cirq/experiments/fidelity_estimation.py +2 -1
  99. cirq/experiments/fidelity_estimation_test.py +1 -1
  100. cirq/experiments/ghz_2d.py +150 -0
  101. cirq/experiments/ghz_2d_test.py +155 -0
  102. cirq/experiments/n_qubit_tomography.py +2 -1
  103. cirq/experiments/n_qubit_tomography_test.py +1 -1
  104. cirq/experiments/purity_estimation.py +1 -1
  105. cirq/experiments/qubit_characterizations.py +2 -1
  106. cirq/experiments/random_quantum_circuit_generation.py +2 -1
  107. cirq/experiments/random_quantum_circuit_generation_test.py +2 -1
  108. cirq/experiments/readout_confusion_matrix.py +2 -1
  109. cirq/experiments/readout_confusion_matrix_test.py +1 -1
  110. cirq/experiments/single_qubit_readout_calibration.py +2 -1
  111. cirq/experiments/single_qubit_readout_calibration_test.py +1 -1
  112. cirq/experiments/t1_decay_experiment.py +2 -1
  113. cirq/experiments/two_qubit_xeb.py +2 -1
  114. cirq/experiments/two_qubit_xeb_test.py +1 -1
  115. cirq/experiments/xeb_fitting.py +2 -1
  116. cirq/experiments/xeb_fitting_test.py +1 -1
  117. cirq/experiments/xeb_sampling.py +5 -3
  118. cirq/experiments/xeb_sampling_test.py +1 -1
  119. cirq/experiments/xeb_simulation.py +2 -1
  120. cirq/experiments/xeb_simulation_test.py +2 -1
  121. cirq/experiments/z_phase_calibration.py +2 -1
  122. cirq/experiments/z_phase_calibration_test.py +18 -3
  123. cirq/interop/quirk/cells/__init__.py +1 -2
  124. cirq/interop/quirk/cells/all_cells.py +2 -1
  125. cirq/interop/quirk/cells/arithmetic_cells.py +2 -1
  126. cirq/interop/quirk/cells/cell.py +2 -1
  127. cirq/interop/quirk/cells/composite_cell.py +2 -1
  128. cirq/interop/quirk/cells/composite_cell_test.py +1 -1
  129. cirq/interop/quirk/cells/control_cells.py +2 -1
  130. cirq/interop/quirk/cells/frequency_space_cells.py +1 -1
  131. cirq/interop/quirk/cells/ignored_cells.py +1 -1
  132. cirq/interop/quirk/cells/input_cells.py +2 -1
  133. cirq/interop/quirk/cells/input_rotation_cells.py +2 -1
  134. cirq/interop/quirk/cells/measurement_cells.py +2 -1
  135. cirq/interop/quirk/cells/parse.py +2 -11
  136. cirq/interop/quirk/cells/qubit_permutation_cells.py +2 -1
  137. cirq/interop/quirk/cells/scalar_cells.py +2 -1
  138. cirq/interop/quirk/cells/single_qubit_rotation_cells.py +2 -1
  139. cirq/interop/quirk/cells/swap_cell.py +2 -1
  140. cirq/interop/quirk/cells/unsupported_cells.py +1 -1
  141. cirq/interop/quirk/url_to_circuit.py +2 -1
  142. cirq/json_resolver_cache.py +0 -2
  143. cirq/linalg/decompositions.py +6 -2
  144. cirq/linalg/decompositions_test.py +1 -0
  145. cirq/linalg/diagonalize.py +1 -1
  146. cirq/linalg/predicates.py +2 -1
  147. cirq/linalg/tolerance.py +2 -1
  148. cirq/linalg/transformations.py +2 -1
  149. cirq/ops/arithmetic_operation.py +2 -1
  150. cirq/ops/arithmetic_operation_test.py +1 -1
  151. cirq/ops/boolean_hamiltonian.py +4 -3
  152. cirq/ops/classically_controlled_operation.py +3 -2
  153. cirq/ops/clifford_gate.py +2 -1
  154. cirq/ops/clifford_gate_test.py +1 -2
  155. cirq/ops/common_channels.py +2 -1
  156. cirq/ops/common_gates.py +2 -1
  157. cirq/ops/control_values.py +2 -1
  158. cirq/ops/controlled_gate.py +3 -2
  159. cirq/ops/controlled_gate_test.py +2 -1
  160. cirq/ops/controlled_operation.py +3 -2
  161. cirq/ops/controlled_operation_test.py +2 -1
  162. cirq/ops/dense_pauli_string.py +3 -13
  163. cirq/ops/diagonal_gate.py +3 -2
  164. cirq/ops/eigen_gate.py +9 -7
  165. cirq/ops/fourier_transform.py +3 -2
  166. cirq/ops/fourier_transform_test.py +2 -4
  167. cirq/ops/fsim_gate.py +3 -2
  168. cirq/ops/gate_operation.py +8 -12
  169. cirq/ops/gateset.py +22 -2
  170. cirq/ops/global_phase_op.py +3 -2
  171. cirq/ops/greedy_qubit_manager.py +2 -1
  172. cirq/ops/identity.py +2 -1
  173. cirq/ops/kraus_channel.py +2 -1
  174. cirq/ops/linear_combinations.py +8 -3
  175. cirq/ops/linear_combinations_test.py +23 -1
  176. cirq/ops/matrix_gates.py +2 -1
  177. cirq/ops/measure_util.py +2 -1
  178. cirq/ops/measurement_gate.py +2 -1
  179. cirq/ops/mixed_unitary_channel.py +2 -1
  180. cirq/ops/named_qubit.py +2 -2
  181. cirq/ops/op_tree.py +2 -1
  182. cirq/ops/parallel_gate.py +3 -2
  183. cirq/ops/parity_gates.py +2 -1
  184. cirq/ops/pauli_interaction_gate.py +2 -1
  185. cirq/ops/pauli_measurement_gate.py +2 -1
  186. cirq/ops/pauli_string.py +6 -12
  187. cirq/ops/pauli_string_phasor.py +3 -2
  188. cirq/ops/pauli_string_raw_types.py +2 -1
  189. cirq/ops/pauli_string_test.py +2 -2
  190. cirq/ops/pauli_sum_exponential.py +2 -1
  191. cirq/ops/permutation_gate.py +2 -1
  192. cirq/ops/phased_iswap_gate.py +3 -2
  193. cirq/ops/phased_x_gate.py +5 -4
  194. cirq/ops/phased_x_z_gate.py +12 -5
  195. cirq/ops/projector.py +2 -1
  196. cirq/ops/qubit_manager.py +2 -1
  197. cirq/ops/qubit_order.py +2 -1
  198. cirq/ops/qubit_order_or_list.py +1 -1
  199. cirq/ops/random_gate_channel.py +3 -2
  200. cirq/ops/raw_types.py +7 -15
  201. cirq/ops/raw_types_test.py +4 -3
  202. cirq/ops/state_preparation_channel.py +2 -1
  203. cirq/ops/three_qubit_gates.py +3 -2
  204. cirq/ops/two_qubit_diagonal_gate.py +3 -2
  205. cirq/ops/uniform_superposition_gate.py +2 -1
  206. cirq/ops/wait_gate.py +10 -4
  207. cirq/protocols/act_on_protocol.py +2 -1
  208. cirq/protocols/act_on_protocol_test.py +2 -1
  209. cirq/protocols/apply_channel_protocol.py +2 -1
  210. cirq/protocols/apply_mixture_protocol.py +2 -1
  211. cirq/protocols/apply_mixture_protocol_test.py +2 -1
  212. cirq/protocols/apply_unitary_protocol.py +2 -1
  213. cirq/protocols/apply_unitary_protocol_test.py +2 -0
  214. cirq/protocols/approximate_equality_protocol.py +2 -1
  215. cirq/protocols/circuit_diagram_info_protocol.py +2 -1
  216. cirq/protocols/decompose_protocol.py +2 -12
  217. cirq/protocols/has_stabilizer_effect_protocol.py +1 -1
  218. cirq/protocols/hash_from_pickle_test.py +2 -2
  219. cirq/protocols/inverse_protocol.py +2 -1
  220. cirq/protocols/json_serialization.py +2 -1
  221. cirq/protocols/kraus_protocol.py +4 -3
  222. cirq/protocols/kraus_protocol_test.py +2 -2
  223. cirq/protocols/measurement_key_protocol.py +2 -1
  224. cirq/protocols/mixture_protocol.py +2 -1
  225. cirq/protocols/pow_protocol.py +2 -1
  226. cirq/protocols/qasm.py +2 -1
  227. cirq/protocols/qid_shape_protocol.py +2 -1
  228. cirq/protocols/resolve_parameters.py +16 -14
  229. cirq/protocols/trace_distance_bound.py +2 -1
  230. cirq/protocols/unitary_protocol.py +21 -21
  231. cirq/qis/channels.py +1 -1
  232. cirq/qis/channels_test.py +1 -1
  233. cirq/qis/clifford_tableau.py +2 -1
  234. cirq/qis/entropy.py +2 -2
  235. cirq/qis/quantum_state_representation.py +2 -1
  236. cirq/qis/states.py +7 -2
  237. cirq/sim/classical_simulator.py +2 -1
  238. cirq/sim/clifford/clifford_simulator.py +2 -1
  239. cirq/sim/clifford/clifford_simulator_test.py +1 -1
  240. cirq/sim/clifford/clifford_tableau_simulation_state.py +2 -1
  241. cirq/sim/clifford/stabilizer_ch_form_simulation_state.py +2 -1
  242. cirq/sim/clifford/stabilizer_sampler.py +1 -1
  243. cirq/sim/clifford/stabilizer_simulation_state.py +2 -1
  244. cirq/sim/clifford/stabilizer_state_ch_form.py +3 -2
  245. cirq/sim/clifford/stabilizer_state_ch_form_test.py +0 -1
  246. cirq/sim/density_matrix_simulation_state.py +2 -1
  247. cirq/sim/density_matrix_simulator.py +2 -1
  248. cirq/sim/density_matrix_utils.py +2 -1
  249. cirq/sim/mux.py +2 -1
  250. cirq/sim/mux_test.py +0 -1
  251. cirq/sim/simulation_product_state.py +2 -1
  252. cirq/sim/simulation_product_state_test.py +2 -1
  253. cirq/sim/simulation_state.py +2 -1
  254. cirq/sim/simulation_state_base.py +2 -1
  255. cirq/sim/simulation_state_test.py +2 -1
  256. cirq/sim/simulation_utils.py +2 -1
  257. cirq/sim/simulator.py +2 -1
  258. cirq/sim/simulator_base.py +2 -1
  259. cirq/sim/simulator_base_test.py +2 -1
  260. cirq/sim/simulator_test.py +2 -1
  261. cirq/sim/sparse_simulator.py +2 -1
  262. cirq/sim/state_vector.py +2 -1
  263. cirq/sim/state_vector_simulation_state.py +2 -1
  264. cirq/sim/state_vector_simulator.py +2 -1
  265. cirq/sim/state_vector_test.py +1 -2
  266. cirq/study/__init__.py +1 -0
  267. cirq/study/flatten_expressions.py +2 -1
  268. cirq/study/resolver.py +31 -18
  269. cirq/study/resolver_test.py +1 -1
  270. cirq/study/result.py +2 -1
  271. cirq/study/sweepable.py +2 -1
  272. cirq/study/sweeps.py +26 -1
  273. cirq/study/sweeps_test.py +24 -0
  274. cirq/testing/_compat_test_data/__init__.py +3 -3
  275. cirq/testing/circuit_compare.py +2 -1
  276. cirq/testing/consistent_act_on_test.py +1 -1
  277. cirq/testing/consistent_controlled_gate_op.py +1 -1
  278. cirq/testing/consistent_controlled_gate_op_test.py +2 -1
  279. cirq/testing/consistent_protocols.py +2 -1
  280. cirq/testing/consistent_protocols_test.py +3 -3
  281. cirq/testing/consistent_qasm.py +2 -1
  282. cirq/testing/consistent_resolve_parameters.py +1 -1
  283. cirq/testing/consistent_unitary.py +1 -1
  284. cirq/testing/consistent_unitary_test.py +1 -1
  285. cirq/testing/deprecation.py +1 -1
  286. cirq/testing/devices.py +3 -2
  287. cirq/testing/equals_tester.py +4 -3
  288. cirq/testing/equivalent_basis_map.py +4 -2
  289. cirq/testing/json.py +3 -2
  290. cirq/testing/logs.py +1 -1
  291. cirq/testing/op_tree.py +1 -1
  292. cirq/testing/order_tester.py +2 -2
  293. cirq/testing/pytest_utils.py +2 -1
  294. cirq/testing/random_circuit.py +2 -1
  295. cirq/testing/random_circuit_test.py +2 -1
  296. cirq/testing/repr_pretty_tester.py +3 -3
  297. cirq/transformers/__init__.py +1 -0
  298. cirq/transformers/_connected_component.py +231 -0
  299. cirq/transformers/_connected_component_test.py +200 -0
  300. cirq/transformers/align_test.py +13 -13
  301. cirq/transformers/analytical_decompositions/clifford_decomposition.py +8 -7
  302. cirq/transformers/analytical_decompositions/clifford_decomposition_test.py +5 -5
  303. cirq/transformers/analytical_decompositions/controlled_gate_decomposition.py +11 -10
  304. cirq/transformers/analytical_decompositions/controlled_gate_decomposition_test.py +6 -6
  305. cirq/transformers/analytical_decompositions/cphase_to_fsim.py +3 -2
  306. cirq/transformers/analytical_decompositions/cphase_to_fsim_test.py +11 -10
  307. cirq/transformers/analytical_decompositions/quantum_shannon_decomposition.py +8 -7
  308. cirq/transformers/analytical_decompositions/quantum_shannon_decomposition_test.py +17 -20
  309. cirq/transformers/analytical_decompositions/single_qubit_decompositions_test.py +33 -27
  310. cirq/transformers/analytical_decompositions/single_to_two_qubit_isometry_test.py +1 -1
  311. cirq/transformers/analytical_decompositions/three_qubit_decomposition.py +1 -1
  312. cirq/transformers/analytical_decompositions/two_qubit_state_preparation_test.py +12 -11
  313. cirq/transformers/analytical_decompositions/two_qubit_to_cz.py +5 -2
  314. cirq/transformers/analytical_decompositions/two_qubit_to_cz_test.py +3 -3
  315. cirq/transformers/analytical_decompositions/two_qubit_to_fsim.py +2 -1
  316. cirq/transformers/analytical_decompositions/two_qubit_to_ms.py +2 -1
  317. cirq/transformers/analytical_decompositions/two_qubit_to_ms_test.py +2 -2
  318. cirq/transformers/analytical_decompositions/two_qubit_to_sqrt_iswap.py +2 -1
  319. cirq/transformers/analytical_decompositions/two_qubit_to_sqrt_iswap_test.py +32 -30
  320. cirq/transformers/drop_negligible_operations_test.py +7 -7
  321. cirq/transformers/dynamical_decoupling.py +185 -112
  322. cirq/transformers/dynamical_decoupling_test.py +195 -201
  323. cirq/transformers/eject_phased_paulis.py +2 -1
  324. cirq/transformers/eject_phased_paulis_test.py +3 -2
  325. cirq/transformers/eject_z.py +4 -3
  326. cirq/transformers/eject_z_test.py +23 -25
  327. cirq/transformers/expand_composite.py +3 -2
  328. cirq/transformers/expand_composite_test.py +14 -14
  329. cirq/transformers/gauge_compiling/__init__.py +8 -0
  330. cirq/transformers/gauge_compiling/gauge_compiling.py +3 -2
  331. cirq/transformers/gauge_compiling/gauge_compiling_test.py +14 -12
  332. cirq/transformers/gauge_compiling/gauge_compiling_test_utils.py +3 -3
  333. cirq/transformers/gauge_compiling/idle_moments_gauge.py +5 -2
  334. cirq/transformers/gauge_compiling/multi_moment_cphase_gauge.py +242 -0
  335. cirq/transformers/gauge_compiling/multi_moment_cphase_gauge_test.py +243 -0
  336. cirq/transformers/gauge_compiling/multi_moment_gauge_compiling.py +151 -0
  337. cirq/transformers/gauge_compiling/sqrt_cz_gauge.py +2 -1
  338. cirq/transformers/heuristic_decompositions/gate_tabulation_math_utils.py +1 -1
  339. cirq/transformers/heuristic_decompositions/gate_tabulation_math_utils_test.py +6 -6
  340. cirq/transformers/heuristic_decompositions/two_qubit_gate_tabulation.py +2 -1
  341. cirq/transformers/measurement_transformers.py +2 -1
  342. cirq/transformers/measurement_transformers_test.py +45 -39
  343. cirq/transformers/merge_k_qubit_gates.py +2 -1
  344. cirq/transformers/merge_k_qubit_gates_test.py +1 -1
  345. cirq/transformers/merge_single_qubit_gates.py +2 -1
  346. cirq/transformers/merge_single_qubit_gates_test.py +22 -22
  347. cirq/transformers/noise_adding_test.py +2 -2
  348. cirq/transformers/optimize_for_target_gateset.py +2 -1
  349. cirq/transformers/optimize_for_target_gateset_test.py +11 -9
  350. cirq/transformers/qubit_management_transformers_test.py +6 -2
  351. cirq/transformers/routing/mapping_manager.py +2 -1
  352. cirq/transformers/routing/route_circuit_cqc.py +2 -1
  353. cirq/transformers/stratify.py +2 -1
  354. cirq/transformers/symbolize.py +2 -1
  355. cirq/transformers/tag_transformers.py +2 -1
  356. cirq/transformers/target_gatesets/compilation_target_gateset.py +2 -1
  357. cirq/transformers/target_gatesets/cz_gateset.py +2 -1
  358. cirq/transformers/target_gatesets/cz_gateset_test.py +1 -1
  359. cirq/transformers/target_gatesets/sqrt_iswap_gateset.py +2 -1
  360. cirq/transformers/transformer_api.py +2 -1
  361. cirq/transformers/transformer_primitives.py +271 -145
  362. cirq/transformers/transformer_primitives_test.py +185 -1
  363. cirq/value/abc_alt.py +2 -1
  364. cirq/value/classical_data.py +2 -1
  365. cirq/value/condition.py +2 -1
  366. cirq/value/digits.py +9 -2
  367. cirq/value/duration.py +6 -5
  368. cirq/value/linear_dict.py +4 -9
  369. cirq/value/measurement_key.py +2 -1
  370. cirq/value/periodic_value.py +3 -2
  371. cirq/value/product_state.py +2 -1
  372. cirq/value/value_equality_attr.py +2 -1
  373. cirq/vis/density_matrix.py +1 -1
  374. cirq/vis/heatmap.py +2 -1
  375. cirq/vis/histogram.py +2 -1
  376. cirq/vis/state_histogram.py +2 -1
  377. cirq/work/collector.py +2 -1
  378. cirq/work/observable_grouping.py +2 -1
  379. cirq/work/observable_measurement.py +2 -1
  380. cirq/work/observable_measurement_data.py +2 -1
  381. cirq/work/observable_measurement_test.py +1 -1
  382. cirq/work/observable_readout_calibration.py +2 -1
  383. cirq/work/observable_readout_calibration_test.py +1 -1
  384. cirq/work/observable_settings.py +2 -1
  385. cirq/work/sampler.py +2 -1
  386. cirq/work/sampler_test.py +1 -1
  387. {cirq_core-1.7.0.dev20250924231107.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/METADATA +4 -4
  388. {cirq_core-1.7.0.dev20250924231107.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/RECORD +391 -374
  389. cirq/contrib/json_test.py +0 -33
  390. {cirq_core-1.7.0.dev20250924231107.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/WHEEL +0 -0
  391. {cirq_core-1.7.0.dev20250924231107.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/licenses/LICENSE +0 -0
  392. {cirq_core-1.7.0.dev20250924231107.dist-info → cirq_core-1.7.0.dev20251203004401.dist-info}/top_level.txt +0 -0
@@ -14,7 +14,7 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import Iterator
17
+ from collections.abc import Iterator
18
18
 
19
19
  import pytest
20
20
 
@@ -877,3 +877,187 @@ def test_merge_operations_does_not_merge_measurements_behind_ccos():
877
877
  cirq.testing.assert_same_circuits(
878
878
  cirq.align_left(cirq.merge_operations(circuit, merge_func)), expected_circuit
879
879
  )
880
+
881
+
882
+ def test_merge_3q_unitaries_to_circuit_op_3q_gate_absorbs_overlapping_2q_gates():
883
+ q = cirq.LineQubit.range(3)
884
+ c_orig = cirq.Circuit(
885
+ cirq.Moment(
886
+ cirq.H(q[0]).with_tags("ignore"),
887
+ cirq.H(q[1]).with_tags("ignore"),
888
+ cirq.H(q[2]).with_tags("ignore"),
889
+ ),
890
+ cirq.Moment(cirq.CNOT(q[0], q[2]), cirq.X(q[1]).with_tags("ignore")),
891
+ cirq.CNOT(q[0], q[1]),
892
+ cirq.CNOT(q[1], q[2]),
893
+ cirq.CCZ(*q),
894
+ strategy=cirq.InsertStrategy.NEW,
895
+ )
896
+ cirq.testing.assert_has_diagram(
897
+ c_orig,
898
+ '''
899
+ ┌──────────┐
900
+ 0: ───H[ignore]────@─────────────@───────@───
901
+ │ │ │
902
+ 1: ───H[ignore]────┼X[ignore]────X───@───@───
903
+ │ │ │
904
+ 2: ───H[ignore]────X─────────────────X───@───
905
+ └──────────┘
906
+ ''',
907
+ )
908
+
909
+ c_new = cirq.merge_k_qubit_unitaries_to_circuit_op(
910
+ c_orig, k=3, merged_circuit_op_tag="merged", tags_to_ignore=["ignore"]
911
+ )
912
+ cirq.testing.assert_has_diagram(
913
+ cirq.drop_empty_moments(c_new),
914
+ '''
915
+ [ 0: ───@───@───────@─── ]
916
+ [ │ │ │ ]
917
+ 0: ───H[ignore]───────────────[ 1: ───┼───X───@───@─── ]───────────
918
+ [ │ │ │ ]
919
+ [ 2: ───X───────X───@─── ][merged]
920
+
921
+ 1: ───H[ignore]───X[ignore]───#2───────────────────────────────────
922
+
923
+ 2: ───H[ignore]───────────────#3───────────────────────────────────
924
+ ''',
925
+ )
926
+
927
+
928
+ def test_merge_3q_unitaries_to_circuit_op_3q_gate_absorbs_disjoint_gates():
929
+ q = cirq.LineQubit.range(3)
930
+ c_orig = cirq.Circuit(
931
+ cirq.Moment(cirq.CNOT(q[0], q[1]), cirq.X(q[2])),
932
+ cirq.CCZ(*q),
933
+ strategy=cirq.InsertStrategy.NEW,
934
+ )
935
+ cirq.testing.assert_has_diagram(
936
+ c_orig,
937
+ '''
938
+ 0: ───@───@───
939
+ │ │
940
+ 1: ───X───@───
941
+
942
+ 2: ───X───@───
943
+ ''',
944
+ )
945
+
946
+ c_new = cirq.merge_k_qubit_unitaries_to_circuit_op(
947
+ c_orig, k=3, merged_circuit_op_tag="merged", tags_to_ignore=["ignore"]
948
+ )
949
+ cirq.testing.assert_has_diagram(
950
+ cirq.drop_empty_moments(c_new),
951
+ '''
952
+ [ 0: ───@───@─── ]
953
+ [ │ │ ]
954
+ 0: ───[ 1: ───X───@─── ]───────────
955
+ [ │ ]
956
+ [ 2: ───X───@─── ][merged]
957
+
958
+ 1: ───#2───────────────────────────
959
+
960
+ 2: ───#3───────────────────────────
961
+ ''',
962
+ )
963
+
964
+
965
+ def test_merge_3q_unitaries_to_circuit_op_3q_gate_doesnt_absorb_unmergeable_gate():
966
+ q = cirq.LineQubit.range(3)
967
+ c_orig = cirq.Circuit(
968
+ cirq.CCZ(*q),
969
+ cirq.Moment(cirq.CNOT(q[0], q[1]), cirq.X(q[2]).with_tags("ignore")),
970
+ cirq.CCZ(*q),
971
+ strategy=cirq.InsertStrategy.NEW,
972
+ )
973
+ cirq.testing.assert_has_diagram(
974
+ c_orig,
975
+ '''
976
+ 0: ───@───@───────────@───
977
+ │ │ │
978
+ 1: ───@───X───────────@───
979
+ │ │
980
+ 2: ───@───X[ignore]───@───
981
+ ''',
982
+ )
983
+
984
+ c_new = cirq.merge_k_qubit_unitaries_to_circuit_op(
985
+ c_orig, k=3, merged_circuit_op_tag="merged", tags_to_ignore=["ignore"]
986
+ )
987
+ cirq.testing.assert_has_diagram(
988
+ cirq.drop_empty_moments(c_new),
989
+ '''
990
+ [ 0: ───@───@─── ]
991
+ [ │ │ ]
992
+ 0: ───[ 1: ───@───X─── ]───────────────────────@───
993
+ [ │ ] │
994
+ [ 2: ───@─────── ][merged] │
995
+ │ │
996
+ 1: ───#2───────────────────────────────────────@───
997
+ │ │
998
+ 2: ───#3───────────────────────────X[ignore]───@───
999
+ ''',
1000
+ )
1001
+
1002
+
1003
+ def test_merge_3q_unitaries_to_circuit_op_prefer_to_merge_into_earlier_op():
1004
+ q = cirq.LineQubit.range(6)
1005
+ c_orig = cirq.Circuit(
1006
+ cirq.Moment(
1007
+ cirq.CCZ(*q[0:3]), cirq.X(q[3]), cirq.H(q[4]), cirq.H(q[5]).with_tags("ignore")
1008
+ ),
1009
+ cirq.Moment(cirq.CNOT(q[0], q[1]), cirq.X(q[2]).with_tags("ignore"), cirq.CCZ(*q[3:6])),
1010
+ cirq.Moment(
1011
+ cirq.X(q[0]),
1012
+ cirq.X(q[1]),
1013
+ cirq.X(q[2]),
1014
+ cirq.X(q[3]).with_tags("ignore"),
1015
+ cirq.CNOT(*q[4:6]),
1016
+ ),
1017
+ cirq.Moment(cirq.CCZ(*q[0:3]), cirq.CCZ(*q[3:6])),
1018
+ strategy=cirq.InsertStrategy.NEW,
1019
+ )
1020
+ cirq.testing.assert_has_diagram(
1021
+ c_orig,
1022
+ '''
1023
+ 0: ───@───────────@───────────X───────────@───
1024
+ │ │ │
1025
+ 1: ───@───────────X───────────X───────────@───
1026
+ │ │
1027
+ 2: ───@───────────X[ignore]───X───────────@───
1028
+
1029
+ 3: ───X───────────@───────────X[ignore]───@───
1030
+ │ │
1031
+ 4: ───H───────────@───────────@───────────@───
1032
+ │ │ │
1033
+ 5: ───H[ignore]───@───────────X───────────@───
1034
+ ''',
1035
+ )
1036
+
1037
+ c_new = cirq.merge_k_qubit_unitaries_to_circuit_op(
1038
+ c_orig, k=3, merged_circuit_op_tag="merged", tags_to_ignore=["ignore"]
1039
+ )
1040
+ cirq.testing.assert_has_diagram(
1041
+ cirq.drop_empty_moments(c_new),
1042
+ '''
1043
+ [ 0: ───@───@───X─── ] [ 0: ───────@─── ]
1044
+ [ │ │ ] [ │ ]
1045
+ 0: ───[ 1: ───@───X───X─── ]────────────────────────────────────────────────────────[ 1: ───────@─── ]───────────
1046
+ [ │ ] [ │ ]
1047
+ [ 2: ───@─────────── ][merged] [ 2: ───X───@─── ][merged]
1048
+ │ │
1049
+ 1: ───#2────────────────────────────────────────────────────────────────────────────#2───────────────────────────
1050
+ │ │
1051
+ 2: ───#3───────────────────────────────X[ignore]────────────────────────────────────#3───────────────────────────
1052
+
1053
+ [ 3: ───X───@─────── ]
1054
+ [ │ ]
1055
+ 3: ────────────────────────────────────[ 4: ───H───@───@─── ]───────────X[ignore]───@────────────────────────────
1056
+ [ │ │ ] │
1057
+ [ 5: ───────@───X─── ][merged] │
1058
+ │ │
1059
+ 4: ────────────────────────────────────#2───────────────────────────────────────────@────────────────────────────
1060
+ │ │
1061
+ 5: ───H[ignore]────────────────────────#3───────────────────────────────────────────@────────────────────────────
1062
+ ''', # noqa: E501
1063
+ )
cirq/value/abc_alt.py CHANGED
@@ -18,7 +18,8 @@ from __future__ import annotations
18
18
 
19
19
  import abc
20
20
  import functools
21
- from typing import Callable, cast, TypeVar
21
+ from collections.abc import Callable
22
+ from typing import cast, TypeVar
22
23
 
23
24
  T = TypeVar('T')
24
25
 
@@ -16,7 +16,8 @@ from __future__ import annotations
16
16
 
17
17
  import abc
18
18
  import enum
19
- from typing import Mapping, Self, Sequence, TYPE_CHECKING
19
+ from collections.abc import Mapping, Sequence
20
+ from typing import Self, TYPE_CHECKING
20
21
 
21
22
  from cirq.value import digits, value_equality_attr
22
23
 
cirq/value/condition.py CHANGED
@@ -16,7 +16,8 @@ from __future__ import annotations
16
16
 
17
17
  import abc
18
18
  import dataclasses
19
- from typing import Any, Mapping, TYPE_CHECKING
19
+ from collections.abc import Mapping
20
+ from typing import Any, TYPE_CHECKING
20
21
 
21
22
  import attrs
22
23
  import sympy
cirq/value/digits.py CHANGED
@@ -14,7 +14,8 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import Any, Iterable, overload
17
+ from collections.abc import Iterable
18
+ from typing import Any, overload
18
19
 
19
20
 
20
21
  def big_endian_bits_to_int(bits: Iterable[Any]) -> int:
@@ -168,6 +169,11 @@ def big_endian_int_to_digits(
168
169
  >>> cirq.big_endian_int_to_digits(11, base=[2, 3, 4])
169
170
  [0, 2, 3]
170
171
  """
172
+ if digit_count and base == 2:
173
+ binary_chars = bin(val).removeprefix('0b')
174
+ zeros_count = digit_count - len(binary_chars)
175
+ if zeros_count >= 0:
176
+ return [0] * zeros_count + [1 if c == "1" else 0 for c in binary_chars]
171
177
  if isinstance(base, int):
172
178
  if digit_count is None:
173
179
  raise ValueError('No digit count. Provide `digit_count` when base is an int.')
@@ -192,4 +198,5 @@ def big_endian_int_to_digits(
192
198
  f'left behind {val!r} instead of 0.'
193
199
  )
194
200
 
195
- return result[::-1]
201
+ result.reverse()
202
+ return result
cirq/value/duration.py CHANGED
@@ -17,7 +17,8 @@
17
17
  from __future__ import annotations
18
18
 
19
19
  import datetime
20
- from typing import AbstractSet, Any, TYPE_CHECKING, TypeAlias, Union
20
+ from collections.abc import Set
21
+ from typing import Any, TYPE_CHECKING, TypeAlias, Union
21
22
 
22
23
  import numpy as np
23
24
  import sympy
@@ -84,21 +85,21 @@ class Duration:
84
85
  """
85
86
  self._time_vals: list[_NUMERIC_INPUT_TYPE] = [0, 0, 0, 0]
86
87
  self._multipliers = [1, 1000, 1000_000, 1000_000_000]
87
- if value is not None and value != 0:
88
+ if value is not None:
88
89
  if isinstance(value, datetime.timedelta):
89
90
  # timedelta has microsecond resolution.
90
91
  self._time_vals[2] = int(value / datetime.timedelta(microseconds=1))
91
92
  elif isinstance(value, Duration):
92
93
  self._time_vals = value._time_vals
93
- else:
94
+ elif value != 0:
94
95
  raise TypeError(f'Not a `cirq.DURATION_LIKE`: {repr(value)}.')
95
96
  input_vals = [picos, nanos, micros, millis]
96
97
  self._time_vals = _add_time_vals(self._time_vals, input_vals)
97
98
 
98
99
  def _is_parameterized_(self) -> bool:
99
- return protocols.is_parameterized(self._time_vals)
100
+ return any(isinstance(val, sympy.Basic) for val in self._time_vals)
100
101
 
101
- def _parameter_names_(self) -> AbstractSet[str]:
102
+ def _parameter_names_(self) -> Set[str]:
102
103
  return protocols.parameter_names(self._time_vals)
103
104
 
104
105
  def _resolve_parameters_(self, resolver: cirq.ParamResolver, recursive: bool) -> Duration:
cirq/value/linear_dict.py CHANGED
@@ -16,23 +16,18 @@
16
16
 
17
17
  from __future__ import annotations
18
18
 
19
- from typing import (
20
- AbstractSet,
21
- Any,
19
+ from collections.abc import (
22
20
  Callable,
23
- Generic,
24
21
  ItemsView,
25
22
  Iterable,
26
23
  Iterator,
27
24
  KeysView,
28
25
  Mapping,
29
26
  MutableMapping,
30
- overload,
31
- Self,
32
- TYPE_CHECKING,
33
- TypeVar,
27
+ Set,
34
28
  ValuesView,
35
29
  )
30
+ from typing import Any, Generic, overload, Self, TYPE_CHECKING, TypeVar
36
31
 
37
32
  import numpy as np
38
33
  import sympy
@@ -344,7 +339,7 @@ class LinearDict(Generic[TVector], MutableMapping[TVector, 'cirq.TParamValComple
344
339
  def _is_parameterized_(self) -> bool:
345
340
  return any(protocols.is_parameterized(v) for v in self._terms.values())
346
341
 
347
- def _parameter_names_(self) -> AbstractSet[str]:
342
+ def _parameter_names_(self) -> Set[str]:
348
343
  return set(name for v in self._terms.values() for name in protocols.parameter_names(v))
349
344
 
350
345
  def _resolve_parameters_(self, resolver: cirq.ParamResolver, recursive: bool) -> LinearDict:
@@ -15,7 +15,8 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import dataclasses
18
- from typing import Any, Mapping
18
+ from collections.abc import Mapping
19
+ from typing import Any
19
20
 
20
21
  MEASUREMENT_KEY_SEPARATOR = ':'
21
22
 
@@ -14,7 +14,8 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import AbstractSet, Any, TYPE_CHECKING
17
+ from collections.abc import Set
18
+ from typing import Any, TYPE_CHECKING
18
19
 
19
20
  import sympy
20
21
 
@@ -95,7 +96,7 @@ class PeriodicValue:
95
96
 
96
97
  return is_parameterized(self.value) or is_parameterized(self.period)
97
98
 
98
- def _parameter_names_(self) -> AbstractSet[str]:
99
+ def _parameter_names_(self) -> Set[str]:
99
100
  # HACK: Avoids circular dependencies.
100
101
  from cirq.protocols import parameter_names
101
102
 
@@ -15,8 +15,9 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import abc
18
+ from collections.abc import Iterator, Sequence
18
19
  from dataclasses import dataclass
19
- from typing import Iterator, Sequence, TYPE_CHECKING
20
+ from typing import TYPE_CHECKING
20
21
 
21
22
  import numpy as np
22
23
 
@@ -16,7 +16,8 @@
16
16
 
17
17
  from __future__ import annotations
18
18
 
19
- from typing import Any, Callable, overload, Protocol
19
+ from collections.abc import Callable
20
+ from typing import Any, overload, Protocol
20
21
 
21
22
  from cirq import _compat, protocols
22
23
 
@@ -84,7 +84,7 @@ def plot_density_matrix(
84
84
  show_text: bool = False,
85
85
  title: str | None = None,
86
86
  ) -> plt.Axes:
87
- """Generates a plot for a given density matrix.
87
+ r"""Generates a plot for a given density matrix.
88
88
 
89
89
  1. Each entry of the density matrix, a complex number, is plotted as an
90
90
  Argand Diagram where the partially filled red circle represents the magnitude
cirq/vis/heatmap.py CHANGED
@@ -15,8 +15,9 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import copy
18
+ from collections.abc import Mapping, Sequence
18
19
  from dataclasses import astuple, dataclass
19
- from typing import Any, cast, Mapping, overload, Sequence, SupportsFloat
20
+ from typing import Any, cast, overload, SupportsFloat
20
21
 
21
22
  import matplotlib as mpl
22
23
  import matplotlib.collections as mpl_collections
cirq/vis/histogram.py CHANGED
@@ -14,7 +14,8 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import Any, Mapping, Sequence, SupportsFloat
17
+ from collections.abc import Mapping, Sequence
18
+ from typing import Any, SupportsFloat
18
19
 
19
20
  import numpy as np
20
21
  from matplotlib import pyplot as plt
@@ -17,7 +17,8 @@
17
17
  from __future__ import annotations
18
18
 
19
19
  import collections
20
- from typing import Sequence, SupportsFloat
20
+ from collections.abc import Sequence
21
+ from typing import SupportsFloat
21
22
 
22
23
  import matplotlib.pyplot as plt
23
24
  import numpy as np
cirq/work/collector.py CHANGED
@@ -15,7 +15,8 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import abc
18
- from typing import Any, Iterator, Protocol, TYPE_CHECKING
18
+ from collections.abc import Iterator
19
+ from typing import Any, Protocol, TYPE_CHECKING
19
20
 
20
21
  import duet
21
22
  import numpy as np
@@ -14,7 +14,8 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import Callable, cast, Iterable
17
+ from collections.abc import Callable, Iterable
18
+ from typing import cast
18
19
 
19
20
  from cirq import ops, value
20
21
  from cirq.work.observable_settings import _max_weight_observable, _max_weight_state, InitObsSetting
@@ -20,7 +20,8 @@ import itertools
20
20
  import os
21
21
  import tempfile
22
22
  import warnings
23
- from typing import Any, Iterable, Mapping, Sequence, TYPE_CHECKING
23
+ from collections.abc import Iterable, Mapping, Sequence
24
+ from typing import Any, TYPE_CHECKING
24
25
 
25
26
  import numpy as np
26
27
  import pandas as pd
@@ -16,7 +16,8 @@ from __future__ import annotations
16
16
 
17
17
  import dataclasses
18
18
  import datetime
19
- from typing import Any, Iterable, Mapping, TYPE_CHECKING
19
+ from collections.abc import Iterable, Mapping
20
+ from typing import Any, TYPE_CHECKING
20
21
 
21
22
  import numpy as np
22
23
  import sympy
@@ -15,7 +15,7 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import tempfile
18
- from typing import Iterable
18
+ from collections.abc import Iterable
19
19
 
20
20
  import numpy as np
21
21
  import pytest
@@ -3,7 +3,8 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import dataclasses
6
- from typing import Iterable, TYPE_CHECKING
6
+ from collections.abc import Iterable
7
+ from typing import TYPE_CHECKING
7
8
 
8
9
  from cirq import circuits, ops, study
9
10
  from cirq.work.observable_measurement import measure_grouped_settings, StoppingCriteria
@@ -2,7 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Sequence
5
+ from collections.abc import Sequence
6
6
 
7
7
  import numpy as np
8
8
 
@@ -16,7 +16,8 @@ from __future__ import annotations
16
16
 
17
17
  import dataclasses
18
18
  import numbers
19
- from typing import Iterable, Mapping, TYPE_CHECKING
19
+ from collections.abc import Iterable, Mapping
20
+ from typing import TYPE_CHECKING
20
21
 
21
22
  import sympy
22
23
 
cirq/work/sampler.py CHANGED
@@ -17,7 +17,8 @@
17
17
  from __future__ import annotations
18
18
 
19
19
  import collections
20
- from typing import Sequence, TYPE_CHECKING, TypeVar
20
+ from collections.abc import Sequence
21
+ from typing import TYPE_CHECKING, TypeVar
21
22
 
22
23
  import duet
23
24
  import pandas as pd
cirq/work/sampler_test.py CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  from __future__ import annotations
18
18
 
19
- from typing import Sequence
19
+ from collections.abc import Sequence
20
20
 
21
21
  import duet
22
22
  import numpy as np
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cirq-core
3
- Version: 1.7.0.dev20250924231107
3
+ Version: 1.7.0.dev20251203004401
4
4
  Summary: A framework for creating, editing, and invoking Noisy Intermediate Scale Quantum (NISQ) circuits.
5
5
  Home-page: http://github.com/quantumlib/cirq
6
6
  Author: The Cirq Developers
@@ -28,10 +28,10 @@ Description-Content-Type: text/markdown
28
28
  License-File: LICENSE
29
29
  Requires-Dist: attrs>=21.3.0
30
30
  Requires-Dist: duet>=0.2.8
31
- Requires-Dist: matplotlib~=3.8
31
+ Requires-Dist: matplotlib~=3.9
32
32
  Requires-Dist: networkx~=3.4
33
- Requires-Dist: numpy>=1.26
34
- Requires-Dist: pandas~=2.1
33
+ Requires-Dist: numpy~=2.0
34
+ Requires-Dist: pandas~=2.2
35
35
  Requires-Dist: sortedcontainers~=2.0
36
36
  Requires-Dist: scipy~=1.12
37
37
  Requires-Dist: sympy