qiskit 2.0.3__cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.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 (690) hide show
  1. qiskit/VERSION.txt +1 -0
  2. qiskit/__init__.py +141 -0
  3. qiskit/_accelerate.abi3.so +0 -0
  4. qiskit/_numpy_compat.py +73 -0
  5. qiskit/circuit/__init__.py +1343 -0
  6. qiskit/circuit/_add_control.py +312 -0
  7. qiskit/circuit/_classical_resource_map.py +150 -0
  8. qiskit/circuit/_standard_gates_commutations.py +3849 -0
  9. qiskit/circuit/_utils.py +167 -0
  10. qiskit/circuit/annotated_operation.py +279 -0
  11. qiskit/circuit/barrier.py +46 -0
  12. qiskit/circuit/classical/__init__.py +41 -0
  13. qiskit/circuit/classical/expr/__init__.py +266 -0
  14. qiskit/circuit/classical/expr/constructors.py +764 -0
  15. qiskit/circuit/classical/expr/expr.py +498 -0
  16. qiskit/circuit/classical/expr/visitors.py +375 -0
  17. qiskit/circuit/classical/types/__init__.py +113 -0
  18. qiskit/circuit/classical/types/ordering.py +229 -0
  19. qiskit/circuit/classical/types/types.py +153 -0
  20. qiskit/circuit/commutation_checker.py +133 -0
  21. qiskit/circuit/commutation_library.py +20 -0
  22. qiskit/circuit/controlflow/__init__.py +59 -0
  23. qiskit/circuit/controlflow/_builder_utils.py +211 -0
  24. qiskit/circuit/controlflow/box.py +163 -0
  25. qiskit/circuit/controlflow/break_loop.py +56 -0
  26. qiskit/circuit/controlflow/builder.py +791 -0
  27. qiskit/circuit/controlflow/continue_loop.py +56 -0
  28. qiskit/circuit/controlflow/control_flow.py +94 -0
  29. qiskit/circuit/controlflow/for_loop.py +218 -0
  30. qiskit/circuit/controlflow/if_else.py +498 -0
  31. qiskit/circuit/controlflow/switch_case.py +411 -0
  32. qiskit/circuit/controlflow/while_loop.py +166 -0
  33. qiskit/circuit/controlledgate.py +274 -0
  34. qiskit/circuit/delay.py +157 -0
  35. qiskit/circuit/duration.py +80 -0
  36. qiskit/circuit/equivalence.py +94 -0
  37. qiskit/circuit/equivalence_library.py +18 -0
  38. qiskit/circuit/exceptions.py +19 -0
  39. qiskit/circuit/gate.py +261 -0
  40. qiskit/circuit/instruction.py +564 -0
  41. qiskit/circuit/instructionset.py +132 -0
  42. qiskit/circuit/library/__init__.py +984 -0
  43. qiskit/circuit/library/arithmetic/__init__.py +40 -0
  44. qiskit/circuit/library/arithmetic/adders/__init__.py +18 -0
  45. qiskit/circuit/library/arithmetic/adders/adder.py +235 -0
  46. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +123 -0
  47. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +129 -0
  48. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +95 -0
  49. qiskit/circuit/library/arithmetic/exact_reciprocal.py +131 -0
  50. qiskit/circuit/library/arithmetic/functional_pauli_rotations.py +114 -0
  51. qiskit/circuit/library/arithmetic/integer_comparator.py +200 -0
  52. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +363 -0
  53. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +243 -0
  54. qiskit/circuit/library/arithmetic/multipliers/__init__.py +17 -0
  55. qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +145 -0
  56. qiskit/circuit/library/arithmetic/multipliers/multiplier.py +201 -0
  57. qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +108 -0
  58. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +502 -0
  59. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +387 -0
  60. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +493 -0
  61. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +389 -0
  62. qiskit/circuit/library/arithmetic/quadratic_form.py +364 -0
  63. qiskit/circuit/library/arithmetic/weighted_adder.py +409 -0
  64. qiskit/circuit/library/basis_change/__init__.py +15 -0
  65. qiskit/circuit/library/basis_change/qft.py +316 -0
  66. qiskit/circuit/library/bit_flip_oracle.py +130 -0
  67. qiskit/circuit/library/blueprintcircuit.py +316 -0
  68. qiskit/circuit/library/boolean_logic/__init__.py +18 -0
  69. qiskit/circuit/library/boolean_logic/inner_product.py +157 -0
  70. qiskit/circuit/library/boolean_logic/quantum_and.py +204 -0
  71. qiskit/circuit/library/boolean_logic/quantum_or.py +206 -0
  72. qiskit/circuit/library/boolean_logic/quantum_xor.py +167 -0
  73. qiskit/circuit/library/data_preparation/__init__.py +57 -0
  74. qiskit/circuit/library/data_preparation/_z_feature_map.py +115 -0
  75. qiskit/circuit/library/data_preparation/_zz_feature_map.py +150 -0
  76. qiskit/circuit/library/data_preparation/initializer.py +107 -0
  77. qiskit/circuit/library/data_preparation/pauli_feature_map.py +656 -0
  78. qiskit/circuit/library/data_preparation/state_preparation.py +336 -0
  79. qiskit/circuit/library/fourier_checking.py +160 -0
  80. qiskit/circuit/library/generalized_gates/__init__.py +30 -0
  81. qiskit/circuit/library/generalized_gates/diagonal.py +159 -0
  82. qiskit/circuit/library/generalized_gates/gms.py +175 -0
  83. qiskit/circuit/library/generalized_gates/gr.py +219 -0
  84. qiskit/circuit/library/generalized_gates/isometry.py +370 -0
  85. qiskit/circuit/library/generalized_gates/linear_function.py +318 -0
  86. qiskit/circuit/library/generalized_gates/mcg_up_to_diagonal.py +143 -0
  87. qiskit/circuit/library/generalized_gates/mcmt.py +316 -0
  88. qiskit/circuit/library/generalized_gates/pauli.py +84 -0
  89. qiskit/circuit/library/generalized_gates/permutation.py +198 -0
  90. qiskit/circuit/library/generalized_gates/rv.py +96 -0
  91. qiskit/circuit/library/generalized_gates/uc.py +303 -0
  92. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +164 -0
  93. qiskit/circuit/library/generalized_gates/ucrx.py +32 -0
  94. qiskit/circuit/library/generalized_gates/ucry.py +32 -0
  95. qiskit/circuit/library/generalized_gates/ucrz.py +32 -0
  96. qiskit/circuit/library/generalized_gates/unitary.py +217 -0
  97. qiskit/circuit/library/graph_state.py +172 -0
  98. qiskit/circuit/library/grover_operator.py +583 -0
  99. qiskit/circuit/library/hamiltonian_gate.py +142 -0
  100. qiskit/circuit/library/hidden_linear_function.py +163 -0
  101. qiskit/circuit/library/iqp.py +180 -0
  102. qiskit/circuit/library/n_local/__init__.py +45 -0
  103. qiskit/circuit/library/n_local/efficient_su2.py +282 -0
  104. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +520 -0
  105. qiskit/circuit/library/n_local/excitation_preserving.py +303 -0
  106. qiskit/circuit/library/n_local/n_local.py +1477 -0
  107. qiskit/circuit/library/n_local/pauli_two_design.py +246 -0
  108. qiskit/circuit/library/n_local/qaoa_ansatz.py +367 -0
  109. qiskit/circuit/library/n_local/real_amplitudes.py +312 -0
  110. qiskit/circuit/library/n_local/two_local.py +289 -0
  111. qiskit/circuit/library/overlap.py +183 -0
  112. qiskit/circuit/library/pauli_evolution.py +201 -0
  113. qiskit/circuit/library/phase_estimation.py +177 -0
  114. qiskit/circuit/library/phase_oracle.py +239 -0
  115. qiskit/circuit/library/quantum_volume.py +180 -0
  116. qiskit/circuit/library/standard_gates/__init__.py +141 -0
  117. qiskit/circuit/library/standard_gates/dcx.py +77 -0
  118. qiskit/circuit/library/standard_gates/ecr.py +129 -0
  119. qiskit/circuit/library/standard_gates/equivalence_library.py +1800 -0
  120. qiskit/circuit/library/standard_gates/global_phase.py +84 -0
  121. qiskit/circuit/library/standard_gates/h.py +253 -0
  122. qiskit/circuit/library/standard_gates/i.py +76 -0
  123. qiskit/circuit/library/standard_gates/iswap.py +133 -0
  124. qiskit/circuit/library/standard_gates/p.py +422 -0
  125. qiskit/circuit/library/standard_gates/r.py +114 -0
  126. qiskit/circuit/library/standard_gates/rx.py +293 -0
  127. qiskit/circuit/library/standard_gates/rxx.py +180 -0
  128. qiskit/circuit/library/standard_gates/ry.py +286 -0
  129. qiskit/circuit/library/standard_gates/ryy.py +180 -0
  130. qiskit/circuit/library/standard_gates/rz.py +307 -0
  131. qiskit/circuit/library/standard_gates/rzx.py +226 -0
  132. qiskit/circuit/library/standard_gates/rzz.py +193 -0
  133. qiskit/circuit/library/standard_gates/s.py +419 -0
  134. qiskit/circuit/library/standard_gates/swap.py +281 -0
  135. qiskit/circuit/library/standard_gates/sx.py +310 -0
  136. qiskit/circuit/library/standard_gates/t.py +178 -0
  137. qiskit/circuit/library/standard_gates/u.py +395 -0
  138. qiskit/circuit/library/standard_gates/u1.py +490 -0
  139. qiskit/circuit/library/standard_gates/u2.py +145 -0
  140. qiskit/circuit/library/standard_gates/u3.py +428 -0
  141. qiskit/circuit/library/standard_gates/x.py +1481 -0
  142. qiskit/circuit/library/standard_gates/xx_minus_yy.py +202 -0
  143. qiskit/circuit/library/standard_gates/xx_plus_yy.py +236 -0
  144. qiskit/circuit/library/standard_gates/y.py +257 -0
  145. qiskit/circuit/library/standard_gates/z.py +338 -0
  146. qiskit/circuit/library/templates/__init__.py +92 -0
  147. qiskit/circuit/library/templates/clifford/__init__.py +33 -0
  148. qiskit/circuit/library/templates/clifford/clifford_2_1.py +34 -0
  149. qiskit/circuit/library/templates/clifford/clifford_2_2.py +35 -0
  150. qiskit/circuit/library/templates/clifford/clifford_2_3.py +34 -0
  151. qiskit/circuit/library/templates/clifford/clifford_2_4.py +34 -0
  152. qiskit/circuit/library/templates/clifford/clifford_3_1.py +35 -0
  153. qiskit/circuit/library/templates/clifford/clifford_4_1.py +38 -0
  154. qiskit/circuit/library/templates/clifford/clifford_4_2.py +37 -0
  155. qiskit/circuit/library/templates/clifford/clifford_4_3.py +38 -0
  156. qiskit/circuit/library/templates/clifford/clifford_4_4.py +37 -0
  157. qiskit/circuit/library/templates/clifford/clifford_5_1.py +40 -0
  158. qiskit/circuit/library/templates/clifford/clifford_6_1.py +40 -0
  159. qiskit/circuit/library/templates/clifford/clifford_6_2.py +40 -0
  160. qiskit/circuit/library/templates/clifford/clifford_6_3.py +40 -0
  161. qiskit/circuit/library/templates/clifford/clifford_6_4.py +38 -0
  162. qiskit/circuit/library/templates/clifford/clifford_6_5.py +40 -0
  163. qiskit/circuit/library/templates/clifford/clifford_8_1.py +42 -0
  164. qiskit/circuit/library/templates/clifford/clifford_8_2.py +42 -0
  165. qiskit/circuit/library/templates/clifford/clifford_8_3.py +41 -0
  166. qiskit/circuit/library/templates/nct/__init__.py +67 -0
  167. qiskit/circuit/library/templates/nct/template_nct_2a_1.py +34 -0
  168. qiskit/circuit/library/templates/nct/template_nct_2a_2.py +35 -0
  169. qiskit/circuit/library/templates/nct/template_nct_2a_3.py +37 -0
  170. qiskit/circuit/library/templates/nct/template_nct_4a_1.py +43 -0
  171. qiskit/circuit/library/templates/nct/template_nct_4a_2.py +41 -0
  172. qiskit/circuit/library/templates/nct/template_nct_4a_3.py +39 -0
  173. qiskit/circuit/library/templates/nct/template_nct_4b_1.py +41 -0
  174. qiskit/circuit/library/templates/nct/template_nct_4b_2.py +39 -0
  175. qiskit/circuit/library/templates/nct/template_nct_5a_1.py +40 -0
  176. qiskit/circuit/library/templates/nct/template_nct_5a_2.py +40 -0
  177. qiskit/circuit/library/templates/nct/template_nct_5a_3.py +40 -0
  178. qiskit/circuit/library/templates/nct/template_nct_5a_4.py +39 -0
  179. qiskit/circuit/library/templates/nct/template_nct_6a_1.py +40 -0
  180. qiskit/circuit/library/templates/nct/template_nct_6a_2.py +41 -0
  181. qiskit/circuit/library/templates/nct/template_nct_6a_3.py +41 -0
  182. qiskit/circuit/library/templates/nct/template_nct_6a_4.py +41 -0
  183. qiskit/circuit/library/templates/nct/template_nct_6b_1.py +41 -0
  184. qiskit/circuit/library/templates/nct/template_nct_6b_2.py +41 -0
  185. qiskit/circuit/library/templates/nct/template_nct_6c_1.py +41 -0
  186. qiskit/circuit/library/templates/nct/template_nct_7a_1.py +43 -0
  187. qiskit/circuit/library/templates/nct/template_nct_7b_1.py +43 -0
  188. qiskit/circuit/library/templates/nct/template_nct_7c_1.py +43 -0
  189. qiskit/circuit/library/templates/nct/template_nct_7d_1.py +43 -0
  190. qiskit/circuit/library/templates/nct/template_nct_7e_1.py +43 -0
  191. qiskit/circuit/library/templates/nct/template_nct_9a_1.py +45 -0
  192. qiskit/circuit/library/templates/nct/template_nct_9c_1.py +43 -0
  193. qiskit/circuit/library/templates/nct/template_nct_9c_10.py +44 -0
  194. qiskit/circuit/library/templates/nct/template_nct_9c_11.py +44 -0
  195. qiskit/circuit/library/templates/nct/template_nct_9c_12.py +44 -0
  196. qiskit/circuit/library/templates/nct/template_nct_9c_2.py +44 -0
  197. qiskit/circuit/library/templates/nct/template_nct_9c_3.py +44 -0
  198. qiskit/circuit/library/templates/nct/template_nct_9c_4.py +44 -0
  199. qiskit/circuit/library/templates/nct/template_nct_9c_5.py +44 -0
  200. qiskit/circuit/library/templates/nct/template_nct_9c_6.py +44 -0
  201. qiskit/circuit/library/templates/nct/template_nct_9c_7.py +44 -0
  202. qiskit/circuit/library/templates/nct/template_nct_9c_8.py +44 -0
  203. qiskit/circuit/library/templates/nct/template_nct_9c_9.py +44 -0
  204. qiskit/circuit/library/templates/nct/template_nct_9d_1.py +43 -0
  205. qiskit/circuit/library/templates/nct/template_nct_9d_10.py +44 -0
  206. qiskit/circuit/library/templates/nct/template_nct_9d_2.py +44 -0
  207. qiskit/circuit/library/templates/nct/template_nct_9d_3.py +44 -0
  208. qiskit/circuit/library/templates/nct/template_nct_9d_4.py +44 -0
  209. qiskit/circuit/library/templates/nct/template_nct_9d_5.py +44 -0
  210. qiskit/circuit/library/templates/nct/template_nct_9d_6.py +44 -0
  211. qiskit/circuit/library/templates/nct/template_nct_9d_7.py +44 -0
  212. qiskit/circuit/library/templates/nct/template_nct_9d_8.py +44 -0
  213. qiskit/circuit/library/templates/nct/template_nct_9d_9.py +44 -0
  214. qiskit/circuit/library/templates/rzx/__init__.py +25 -0
  215. qiskit/circuit/library/templates/rzx/rzx_cy.py +47 -0
  216. qiskit/circuit/library/templates/rzx/rzx_xz.py +54 -0
  217. qiskit/circuit/library/templates/rzx/rzx_yz.py +45 -0
  218. qiskit/circuit/library/templates/rzx/rzx_zz1.py +69 -0
  219. qiskit/circuit/library/templates/rzx/rzx_zz2.py +59 -0
  220. qiskit/circuit/library/templates/rzx/rzx_zz3.py +59 -0
  221. qiskit/circuit/measure.py +53 -0
  222. qiskit/circuit/operation.py +68 -0
  223. qiskit/circuit/parameter.py +179 -0
  224. qiskit/circuit/parameterexpression.py +703 -0
  225. qiskit/circuit/parametertable.py +119 -0
  226. qiskit/circuit/parametervector.py +140 -0
  227. qiskit/circuit/quantumcircuit.py +7540 -0
  228. qiskit/circuit/quantumcircuitdata.py +136 -0
  229. qiskit/circuit/random/__init__.py +15 -0
  230. qiskit/circuit/random/utils.py +366 -0
  231. qiskit/circuit/reset.py +37 -0
  232. qiskit/circuit/singleton.py +600 -0
  233. qiskit/circuit/store.py +89 -0
  234. qiskit/circuit/tools/__init__.py +16 -0
  235. qiskit/circuit/tools/pi_check.py +193 -0
  236. qiskit/circuit/twirling.py +145 -0
  237. qiskit/compiler/__init__.py +27 -0
  238. qiskit/compiler/transpiler.py +375 -0
  239. qiskit/converters/__init__.py +74 -0
  240. qiskit/converters/circuit_to_dag.py +80 -0
  241. qiskit/converters/circuit_to_dagdependency.py +49 -0
  242. qiskit/converters/circuit_to_dagdependency_v2.py +46 -0
  243. qiskit/converters/circuit_to_gate.py +107 -0
  244. qiskit/converters/circuit_to_instruction.py +142 -0
  245. qiskit/converters/dag_to_circuit.py +79 -0
  246. qiskit/converters/dag_to_dagdependency.py +54 -0
  247. qiskit/converters/dag_to_dagdependency_v2.py +43 -0
  248. qiskit/converters/dagdependency_to_circuit.py +40 -0
  249. qiskit/converters/dagdependency_to_dag.py +48 -0
  250. qiskit/dagcircuit/__init__.py +55 -0
  251. qiskit/dagcircuit/collect_blocks.py +407 -0
  252. qiskit/dagcircuit/dagcircuit.py +24 -0
  253. qiskit/dagcircuit/dagdependency.py +612 -0
  254. qiskit/dagcircuit/dagdependency_v2.py +566 -0
  255. qiskit/dagcircuit/dagdepnode.py +160 -0
  256. qiskit/dagcircuit/dagnode.py +188 -0
  257. qiskit/dagcircuit/exceptions.py +42 -0
  258. qiskit/exceptions.py +153 -0
  259. qiskit/passmanager/__init__.py +258 -0
  260. qiskit/passmanager/base_tasks.py +230 -0
  261. qiskit/passmanager/compilation_status.py +74 -0
  262. qiskit/passmanager/exceptions.py +19 -0
  263. qiskit/passmanager/flow_controllers.py +116 -0
  264. qiskit/passmanager/passmanager.py +353 -0
  265. qiskit/primitives/__init__.py +490 -0
  266. qiskit/primitives/backend_estimator_v2.py +530 -0
  267. qiskit/primitives/backend_sampler_v2.py +339 -0
  268. qiskit/primitives/base/__init__.py +20 -0
  269. qiskit/primitives/base/base_estimator.py +247 -0
  270. qiskit/primitives/base/base_primitive_job.py +78 -0
  271. qiskit/primitives/base/base_primitive_v1.py +45 -0
  272. qiskit/primitives/base/base_result_v1.py +65 -0
  273. qiskit/primitives/base/base_sampler.py +196 -0
  274. qiskit/primitives/base/estimator_result_v1.py +46 -0
  275. qiskit/primitives/base/sampler_result_v1.py +45 -0
  276. qiskit/primitives/base/validation_v1.py +250 -0
  277. qiskit/primitives/containers/__init__.py +26 -0
  278. qiskit/primitives/containers/bindings_array.py +391 -0
  279. qiskit/primitives/containers/bit_array.py +764 -0
  280. qiskit/primitives/containers/data_bin.py +175 -0
  281. qiskit/primitives/containers/estimator_pub.py +222 -0
  282. qiskit/primitives/containers/object_array.py +94 -0
  283. qiskit/primitives/containers/observables_array.py +296 -0
  284. qiskit/primitives/containers/primitive_result.py +53 -0
  285. qiskit/primitives/containers/pub_result.py +51 -0
  286. qiskit/primitives/containers/sampler_pub.py +193 -0
  287. qiskit/primitives/containers/sampler_pub_result.py +74 -0
  288. qiskit/primitives/containers/shape.py +129 -0
  289. qiskit/primitives/primitive_job.py +81 -0
  290. qiskit/primitives/statevector_estimator.py +175 -0
  291. qiskit/primitives/statevector_sampler.py +290 -0
  292. qiskit/primitives/utils.py +72 -0
  293. qiskit/providers/__init__.py +677 -0
  294. qiskit/providers/backend.py +364 -0
  295. qiskit/providers/basic_provider/__init__.py +47 -0
  296. qiskit/providers/basic_provider/basic_provider.py +121 -0
  297. qiskit/providers/basic_provider/basic_provider_job.py +65 -0
  298. qiskit/providers/basic_provider/basic_provider_tools.py +218 -0
  299. qiskit/providers/basic_provider/basic_simulator.py +693 -0
  300. qiskit/providers/basic_provider/exceptions.py +30 -0
  301. qiskit/providers/exceptions.py +33 -0
  302. qiskit/providers/fake_provider/__init__.py +69 -0
  303. qiskit/providers/fake_provider/generic_backend_v2.py +374 -0
  304. qiskit/providers/fake_provider/utils/__init__.py +15 -0
  305. qiskit/providers/job.py +147 -0
  306. qiskit/providers/jobstatus.py +30 -0
  307. qiskit/providers/options.py +273 -0
  308. qiskit/providers/providerutils.py +110 -0
  309. qiskit/qasm/libs/dummy/stdgates.inc +75 -0
  310. qiskit/qasm/libs/qelib1.inc +266 -0
  311. qiskit/qasm/libs/stdgates.inc +82 -0
  312. qiskit/qasm2/__init__.py +669 -0
  313. qiskit/qasm2/exceptions.py +27 -0
  314. qiskit/qasm2/export.py +364 -0
  315. qiskit/qasm2/parse.py +438 -0
  316. qiskit/qasm3/__init__.py +372 -0
  317. qiskit/qasm3/ast.py +782 -0
  318. qiskit/qasm3/exceptions.py +27 -0
  319. qiskit/qasm3/experimental.py +70 -0
  320. qiskit/qasm3/exporter.py +1340 -0
  321. qiskit/qasm3/printer.py +608 -0
  322. qiskit/qpy/__init__.py +1965 -0
  323. qiskit/qpy/binary_io/__init__.py +35 -0
  324. qiskit/qpy/binary_io/circuits.py +1455 -0
  325. qiskit/qpy/binary_io/parse_sympy_repr.py +121 -0
  326. qiskit/qpy/binary_io/schedules.py +308 -0
  327. qiskit/qpy/binary_io/value.py +1165 -0
  328. qiskit/qpy/common.py +353 -0
  329. qiskit/qpy/exceptions.py +53 -0
  330. qiskit/qpy/formats.py +442 -0
  331. qiskit/qpy/interface.py +344 -0
  332. qiskit/qpy/type_keys.py +409 -0
  333. qiskit/quantum_info/__init__.py +162 -0
  334. qiskit/quantum_info/analysis/__init__.py +17 -0
  335. qiskit/quantum_info/analysis/average.py +47 -0
  336. qiskit/quantum_info/analysis/distance.py +104 -0
  337. qiskit/quantum_info/analysis/make_observable.py +44 -0
  338. qiskit/quantum_info/analysis/z2_symmetries.py +484 -0
  339. qiskit/quantum_info/operators/__init__.py +28 -0
  340. qiskit/quantum_info/operators/base_operator.py +145 -0
  341. qiskit/quantum_info/operators/channel/__init__.py +29 -0
  342. qiskit/quantum_info/operators/channel/chi.py +191 -0
  343. qiskit/quantum_info/operators/channel/choi.py +218 -0
  344. qiskit/quantum_info/operators/channel/kraus.py +337 -0
  345. qiskit/quantum_info/operators/channel/ptm.py +204 -0
  346. qiskit/quantum_info/operators/channel/quantum_channel.py +348 -0
  347. qiskit/quantum_info/operators/channel/stinespring.py +296 -0
  348. qiskit/quantum_info/operators/channel/superop.py +373 -0
  349. qiskit/quantum_info/operators/channel/transformations.py +490 -0
  350. qiskit/quantum_info/operators/custom_iterator.py +48 -0
  351. qiskit/quantum_info/operators/dihedral/__init__.py +18 -0
  352. qiskit/quantum_info/operators/dihedral/dihedral.py +511 -0
  353. qiskit/quantum_info/operators/dihedral/dihedral_circuits.py +216 -0
  354. qiskit/quantum_info/operators/dihedral/polynomial.py +313 -0
  355. qiskit/quantum_info/operators/dihedral/random.py +64 -0
  356. qiskit/quantum_info/operators/linear_op.py +25 -0
  357. qiskit/quantum_info/operators/measures.py +418 -0
  358. qiskit/quantum_info/operators/mixins/__init__.py +52 -0
  359. qiskit/quantum_info/operators/mixins/adjoint.py +52 -0
  360. qiskit/quantum_info/operators/mixins/group.py +171 -0
  361. qiskit/quantum_info/operators/mixins/linear.py +84 -0
  362. qiskit/quantum_info/operators/mixins/multiply.py +62 -0
  363. qiskit/quantum_info/operators/mixins/tolerances.py +72 -0
  364. qiskit/quantum_info/operators/op_shape.py +525 -0
  365. qiskit/quantum_info/operators/operator.py +869 -0
  366. qiskit/quantum_info/operators/operator_utils.py +76 -0
  367. qiskit/quantum_info/operators/predicates.py +183 -0
  368. qiskit/quantum_info/operators/random.py +154 -0
  369. qiskit/quantum_info/operators/scalar_op.py +254 -0
  370. qiskit/quantum_info/operators/symplectic/__init__.py +23 -0
  371. qiskit/quantum_info/operators/symplectic/base_pauli.py +719 -0
  372. qiskit/quantum_info/operators/symplectic/clifford.py +1032 -0
  373. qiskit/quantum_info/operators/symplectic/clifford_circuits.py +558 -0
  374. qiskit/quantum_info/operators/symplectic/pauli.py +755 -0
  375. qiskit/quantum_info/operators/symplectic/pauli_list.py +1242 -0
  376. qiskit/quantum_info/operators/symplectic/pauli_utils.py +40 -0
  377. qiskit/quantum_info/operators/symplectic/random.py +117 -0
  378. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +1239 -0
  379. qiskit/quantum_info/operators/utils/__init__.py +20 -0
  380. qiskit/quantum_info/operators/utils/anti_commutator.py +36 -0
  381. qiskit/quantum_info/operators/utils/commutator.py +36 -0
  382. qiskit/quantum_info/operators/utils/double_commutator.py +76 -0
  383. qiskit/quantum_info/quaternion.py +156 -0
  384. qiskit/quantum_info/random.py +26 -0
  385. qiskit/quantum_info/states/__init__.py +28 -0
  386. qiskit/quantum_info/states/densitymatrix.py +857 -0
  387. qiskit/quantum_info/states/measures.py +288 -0
  388. qiskit/quantum_info/states/quantum_state.py +503 -0
  389. qiskit/quantum_info/states/random.py +157 -0
  390. qiskit/quantum_info/states/stabilizerstate.py +805 -0
  391. qiskit/quantum_info/states/statevector.py +977 -0
  392. qiskit/quantum_info/states/utils.py +247 -0
  393. qiskit/result/__init__.py +61 -0
  394. qiskit/result/counts.py +189 -0
  395. qiskit/result/distributions/__init__.py +17 -0
  396. qiskit/result/distributions/probability.py +100 -0
  397. qiskit/result/distributions/quasi.py +154 -0
  398. qiskit/result/exceptions.py +40 -0
  399. qiskit/result/models.py +241 -0
  400. qiskit/result/postprocess.py +239 -0
  401. qiskit/result/result.py +385 -0
  402. qiskit/result/sampled_expval.py +74 -0
  403. qiskit/result/utils.py +294 -0
  404. qiskit/synthesis/__init__.py +240 -0
  405. qiskit/synthesis/arithmetic/__init__.py +18 -0
  406. qiskit/synthesis/arithmetic/adders/__init__.py +17 -0
  407. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +154 -0
  408. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +103 -0
  409. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +161 -0
  410. qiskit/synthesis/arithmetic/comparators/__init__.py +16 -0
  411. qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
  412. qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
  413. qiskit/synthesis/arithmetic/multipliers/__init__.py +16 -0
  414. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +103 -0
  415. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +100 -0
  416. qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
  417. qiskit/synthesis/boolean/__init__.py +13 -0
  418. qiskit/synthesis/boolean/boolean_expression.py +231 -0
  419. qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
  420. qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -0
  421. qiskit/synthesis/clifford/__init__.py +19 -0
  422. qiskit/synthesis/clifford/clifford_decompose_ag.py +178 -0
  423. qiskit/synthesis/clifford/clifford_decompose_bm.py +46 -0
  424. qiskit/synthesis/clifford/clifford_decompose_full.py +64 -0
  425. qiskit/synthesis/clifford/clifford_decompose_greedy.py +58 -0
  426. qiskit/synthesis/clifford/clifford_decompose_layers.py +447 -0
  427. qiskit/synthesis/cnotdihedral/__init__.py +17 -0
  428. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py +52 -0
  429. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.py +141 -0
  430. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_two_qubits.py +266 -0
  431. qiskit/synthesis/discrete_basis/__init__.py +16 -0
  432. qiskit/synthesis/discrete_basis/commutator_decompose.py +265 -0
  433. qiskit/synthesis/discrete_basis/gate_sequence.py +421 -0
  434. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +165 -0
  435. qiskit/synthesis/discrete_basis/solovay_kitaev.py +240 -0
  436. qiskit/synthesis/evolution/__init__.py +21 -0
  437. qiskit/synthesis/evolution/evolution_synthesis.py +48 -0
  438. qiskit/synthesis/evolution/lie_trotter.py +120 -0
  439. qiskit/synthesis/evolution/matrix_synthesis.py +47 -0
  440. qiskit/synthesis/evolution/pauli_network.py +80 -0
  441. qiskit/synthesis/evolution/product_formula.py +313 -0
  442. qiskit/synthesis/evolution/qdrift.py +130 -0
  443. qiskit/synthesis/evolution/suzuki_trotter.py +224 -0
  444. qiskit/synthesis/linear/__init__.py +26 -0
  445. qiskit/synthesis/linear/cnot_synth.py +69 -0
  446. qiskit/synthesis/linear/linear_circuits_utils.py +128 -0
  447. qiskit/synthesis/linear/linear_depth_lnn.py +61 -0
  448. qiskit/synthesis/linear/linear_matrix_utils.py +27 -0
  449. qiskit/synthesis/linear_phase/__init__.py +17 -0
  450. qiskit/synthesis/linear_phase/cnot_phase_synth.py +206 -0
  451. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +61 -0
  452. qiskit/synthesis/linear_phase/cz_depth_lnn.py +58 -0
  453. qiskit/synthesis/multi_controlled/__init__.py +25 -0
  454. qiskit/synthesis/multi_controlled/mcmt_vchain.py +52 -0
  455. qiskit/synthesis/multi_controlled/mcx_synthesis.py +359 -0
  456. qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
  457. qiskit/synthesis/one_qubit/__init__.py +15 -0
  458. qiskit/synthesis/one_qubit/one_qubit_decompose.py +288 -0
  459. qiskit/synthesis/permutation/__init__.py +18 -0
  460. qiskit/synthesis/permutation/permutation_full.py +78 -0
  461. qiskit/synthesis/permutation/permutation_lnn.py +54 -0
  462. qiskit/synthesis/permutation/permutation_reverse_lnn.py +93 -0
  463. qiskit/synthesis/permutation/permutation_utils.py +16 -0
  464. qiskit/synthesis/qft/__init__.py +16 -0
  465. qiskit/synthesis/qft/qft_decompose_full.py +97 -0
  466. qiskit/synthesis/qft/qft_decompose_lnn.py +79 -0
  467. qiskit/synthesis/stabilizer/__init__.py +16 -0
  468. qiskit/synthesis/stabilizer/stabilizer_circuit.py +149 -0
  469. qiskit/synthesis/stabilizer/stabilizer_decompose.py +194 -0
  470. qiskit/synthesis/two_qubit/__init__.py +20 -0
  471. qiskit/synthesis/two_qubit/local_invariance.py +63 -0
  472. qiskit/synthesis/two_qubit/two_qubit_decompose.py +583 -0
  473. qiskit/synthesis/two_qubit/xx_decompose/__init__.py +19 -0
  474. qiskit/synthesis/two_qubit/xx_decompose/circuits.py +300 -0
  475. qiskit/synthesis/two_qubit/xx_decompose/decomposer.py +324 -0
  476. qiskit/synthesis/two_qubit/xx_decompose/embodiments.py +163 -0
  477. qiskit/synthesis/two_qubit/xx_decompose/paths.py +412 -0
  478. qiskit/synthesis/two_qubit/xx_decompose/polytopes.py +262 -0
  479. qiskit/synthesis/two_qubit/xx_decompose/utilities.py +40 -0
  480. qiskit/synthesis/two_qubit/xx_decompose/weyl.py +133 -0
  481. qiskit/synthesis/unitary/__init__.py +13 -0
  482. qiskit/synthesis/unitary/aqc/__init__.py +177 -0
  483. qiskit/synthesis/unitary/aqc/approximate.py +116 -0
  484. qiskit/synthesis/unitary/aqc/aqc.py +175 -0
  485. qiskit/synthesis/unitary/aqc/cnot_structures.py +300 -0
  486. qiskit/synthesis/unitary/aqc/cnot_unit_circuit.py +103 -0
  487. qiskit/synthesis/unitary/aqc/cnot_unit_objective.py +299 -0
  488. qiskit/synthesis/unitary/aqc/elementary_operations.py +108 -0
  489. qiskit/synthesis/unitary/aqc/fast_gradient/__init__.py +164 -0
  490. qiskit/synthesis/unitary/aqc/fast_gradient/fast_grad_utils.py +237 -0
  491. qiskit/synthesis/unitary/aqc/fast_gradient/fast_gradient.py +226 -0
  492. qiskit/synthesis/unitary/aqc/fast_gradient/layer.py +370 -0
  493. qiskit/synthesis/unitary/aqc/fast_gradient/pmatrix.py +312 -0
  494. qiskit/synthesis/unitary/qsd.py +288 -0
  495. qiskit/transpiler/__init__.py +1345 -0
  496. qiskit/transpiler/basepasses.py +190 -0
  497. qiskit/transpiler/coupling.py +500 -0
  498. qiskit/transpiler/exceptions.py +59 -0
  499. qiskit/transpiler/instruction_durations.py +281 -0
  500. qiskit/transpiler/layout.py +740 -0
  501. qiskit/transpiler/passes/__init__.py +276 -0
  502. qiskit/transpiler/passes/analysis/__init__.py +23 -0
  503. qiskit/transpiler/passes/analysis/count_ops.py +30 -0
  504. qiskit/transpiler/passes/analysis/count_ops_longest_path.py +26 -0
  505. qiskit/transpiler/passes/analysis/dag_longest_path.py +24 -0
  506. qiskit/transpiler/passes/analysis/depth.py +33 -0
  507. qiskit/transpiler/passes/analysis/num_qubits.py +26 -0
  508. qiskit/transpiler/passes/analysis/num_tensor_factors.py +26 -0
  509. qiskit/transpiler/passes/analysis/resource_estimation.py +41 -0
  510. qiskit/transpiler/passes/analysis/size.py +36 -0
  511. qiskit/transpiler/passes/analysis/width.py +27 -0
  512. qiskit/transpiler/passes/basis/__init__.py +19 -0
  513. qiskit/transpiler/passes/basis/basis_translator.py +138 -0
  514. qiskit/transpiler/passes/basis/decompose.py +137 -0
  515. qiskit/transpiler/passes/basis/translate_parameterized.py +175 -0
  516. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +84 -0
  517. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +110 -0
  518. qiskit/transpiler/passes/layout/__init__.py +26 -0
  519. qiskit/transpiler/passes/layout/_csp_custom_solver.py +65 -0
  520. qiskit/transpiler/passes/layout/apply_layout.py +128 -0
  521. qiskit/transpiler/passes/layout/csp_layout.py +132 -0
  522. qiskit/transpiler/passes/layout/dense_layout.py +177 -0
  523. qiskit/transpiler/passes/layout/disjoint_utils.py +219 -0
  524. qiskit/transpiler/passes/layout/enlarge_with_ancilla.py +49 -0
  525. qiskit/transpiler/passes/layout/full_ancilla_allocation.py +116 -0
  526. qiskit/transpiler/passes/layout/layout_2q_distance.py +77 -0
  527. qiskit/transpiler/passes/layout/sabre_layout.py +506 -0
  528. qiskit/transpiler/passes/layout/sabre_pre_layout.py +225 -0
  529. qiskit/transpiler/passes/layout/set_layout.py +69 -0
  530. qiskit/transpiler/passes/layout/trivial_layout.py +66 -0
  531. qiskit/transpiler/passes/layout/vf2_layout.py +256 -0
  532. qiskit/transpiler/passes/layout/vf2_post_layout.py +376 -0
  533. qiskit/transpiler/passes/layout/vf2_utils.py +235 -0
  534. qiskit/transpiler/passes/optimization/__init__.py +42 -0
  535. qiskit/transpiler/passes/optimization/_gate_extension.py +80 -0
  536. qiskit/transpiler/passes/optimization/collect_1q_runs.py +31 -0
  537. qiskit/transpiler/passes/optimization/collect_2q_blocks.py +35 -0
  538. qiskit/transpiler/passes/optimization/collect_and_collapse.py +117 -0
  539. qiskit/transpiler/passes/optimization/collect_cliffords.py +109 -0
  540. qiskit/transpiler/passes/optimization/collect_linear_functions.py +85 -0
  541. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +242 -0
  542. qiskit/transpiler/passes/optimization/commutation_analysis.py +44 -0
  543. qiskit/transpiler/passes/optimization/commutative_cancellation.py +82 -0
  544. qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +140 -0
  545. qiskit/transpiler/passes/optimization/consolidate_blocks.py +176 -0
  546. qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -0
  547. qiskit/transpiler/passes/optimization/elide_permutations.py +91 -0
  548. qiskit/transpiler/passes/optimization/hoare_opt.py +420 -0
  549. qiskit/transpiler/passes/optimization/inverse_cancellation.py +95 -0
  550. qiskit/transpiler/passes/optimization/light_cone.py +135 -0
  551. qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +267 -0
  552. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +250 -0
  553. qiskit/transpiler/passes/optimization/optimize_1q_gates.py +384 -0
  554. qiskit/transpiler/passes/optimization/optimize_annotated.py +449 -0
  555. qiskit/transpiler/passes/optimization/optimize_cliffords.py +89 -0
  556. qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +71 -0
  557. qiskit/transpiler/passes/optimization/remove_diagonal_gates_before_measure.py +41 -0
  558. qiskit/transpiler/passes/optimization/remove_final_reset.py +37 -0
  559. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +70 -0
  560. qiskit/transpiler/passes/optimization/remove_reset_in_zero_state.py +37 -0
  561. qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +50 -0
  562. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +63 -0
  563. qiskit/transpiler/passes/optimization/template_matching/__init__.py +19 -0
  564. qiskit/transpiler/passes/optimization/template_matching/backward_match.py +749 -0
  565. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +452 -0
  566. qiskit/transpiler/passes/optimization/template_matching/maximal_matches.py +77 -0
  567. qiskit/transpiler/passes/optimization/template_matching/template_matching.py +370 -0
  568. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +639 -0
  569. qiskit/transpiler/passes/optimization/template_optimization.py +158 -0
  570. qiskit/transpiler/passes/routing/__init__.py +21 -0
  571. qiskit/transpiler/passes/routing/algorithms/__init__.py +33 -0
  572. qiskit/transpiler/passes/routing/algorithms/token_swapper.py +105 -0
  573. qiskit/transpiler/passes/routing/algorithms/types.py +46 -0
  574. qiskit/transpiler/passes/routing/algorithms/util.py +103 -0
  575. qiskit/transpiler/passes/routing/basic_swap.py +166 -0
  576. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/__init__.py +25 -0
  577. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_block.py +60 -0
  578. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +397 -0
  579. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/pauli_2q_evolution_commutation.py +145 -0
  580. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +306 -0
  581. qiskit/transpiler/passes/routing/layout_transformation.py +119 -0
  582. qiskit/transpiler/passes/routing/lookahead_swap.py +390 -0
  583. qiskit/transpiler/passes/routing/sabre_swap.py +463 -0
  584. qiskit/transpiler/passes/routing/star_prerouting.py +408 -0
  585. qiskit/transpiler/passes/routing/utils.py +35 -0
  586. qiskit/transpiler/passes/scheduling/__init__.py +21 -0
  587. qiskit/transpiler/passes/scheduling/alignments/__init__.py +79 -0
  588. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +70 -0
  589. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +251 -0
  590. qiskit/transpiler/passes/scheduling/padding/__init__.py +16 -0
  591. qiskit/transpiler/passes/scheduling/padding/base_padding.py +284 -0
  592. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +415 -0
  593. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +90 -0
  594. qiskit/transpiler/passes/scheduling/scheduling/__init__.py +17 -0
  595. qiskit/transpiler/passes/scheduling/scheduling/alap.py +93 -0
  596. qiskit/transpiler/passes/scheduling/scheduling/asap.py +100 -0
  597. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +88 -0
  598. qiskit/transpiler/passes/scheduling/scheduling/set_io_latency.py +64 -0
  599. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +237 -0
  600. qiskit/transpiler/passes/synthesis/__init__.py +20 -0
  601. qiskit/transpiler/passes/synthesis/aqc_plugin.py +153 -0
  602. qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
  603. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +429 -0
  604. qiskit/transpiler/passes/synthesis/hls_plugins.py +1963 -0
  605. qiskit/transpiler/passes/synthesis/linear_functions_synthesis.py +41 -0
  606. qiskit/transpiler/passes/synthesis/plugin.py +738 -0
  607. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +313 -0
  608. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +425 -0
  609. qiskit/transpiler/passes/utils/__init__.py +32 -0
  610. qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +41 -0
  611. qiskit/transpiler/passes/utils/check_gate_direction.py +60 -0
  612. qiskit/transpiler/passes/utils/check_map.py +78 -0
  613. qiskit/transpiler/passes/utils/contains_instruction.py +45 -0
  614. qiskit/transpiler/passes/utils/control_flow.py +61 -0
  615. qiskit/transpiler/passes/utils/dag_fixed_point.py +36 -0
  616. qiskit/transpiler/passes/utils/error.py +69 -0
  617. qiskit/transpiler/passes/utils/filter_op_nodes.py +66 -0
  618. qiskit/transpiler/passes/utils/fixed_point.py +48 -0
  619. qiskit/transpiler/passes/utils/gate_direction.py +93 -0
  620. qiskit/transpiler/passes/utils/gates_basis.py +51 -0
  621. qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +163 -0
  622. qiskit/transpiler/passes/utils/minimum_point.py +118 -0
  623. qiskit/transpiler/passes/utils/remove_barriers.py +50 -0
  624. qiskit/transpiler/passes/utils/remove_final_measurements.py +121 -0
  625. qiskit/transpiler/passes/utils/unroll_forloops.py +81 -0
  626. qiskit/transpiler/passmanager.py +503 -0
  627. qiskit/transpiler/passmanager_config.py +151 -0
  628. qiskit/transpiler/preset_passmanagers/__init__.py +93 -0
  629. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +993 -0
  630. qiskit/transpiler/preset_passmanagers/common.py +672 -0
  631. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +437 -0
  632. qiskit/transpiler/preset_passmanagers/level0.py +104 -0
  633. qiskit/transpiler/preset_passmanagers/level1.py +108 -0
  634. qiskit/transpiler/preset_passmanagers/level2.py +109 -0
  635. qiskit/transpiler/preset_passmanagers/level3.py +110 -0
  636. qiskit/transpiler/preset_passmanagers/plugin.py +346 -0
  637. qiskit/transpiler/target.py +905 -0
  638. qiskit/transpiler/timing_constraints.py +59 -0
  639. qiskit/user_config.py +266 -0
  640. qiskit/utils/__init__.py +90 -0
  641. qiskit/utils/classtools.py +146 -0
  642. qiskit/utils/deprecation.py +382 -0
  643. qiskit/utils/lazy_tester.py +363 -0
  644. qiskit/utils/optionals.py +354 -0
  645. qiskit/utils/parallel.py +318 -0
  646. qiskit/utils/units.py +146 -0
  647. qiskit/version.py +84 -0
  648. qiskit/visualization/__init__.py +290 -0
  649. qiskit/visualization/array.py +207 -0
  650. qiskit/visualization/bloch.py +778 -0
  651. qiskit/visualization/circuit/__init__.py +15 -0
  652. qiskit/visualization/circuit/_utils.py +675 -0
  653. qiskit/visualization/circuit/circuit_visualization.py +735 -0
  654. qiskit/visualization/circuit/latex.py +661 -0
  655. qiskit/visualization/circuit/matplotlib.py +2019 -0
  656. qiskit/visualization/circuit/qcstyle.py +278 -0
  657. qiskit/visualization/circuit/styles/__init__.py +13 -0
  658. qiskit/visualization/circuit/styles/bw.json +202 -0
  659. qiskit/visualization/circuit/styles/clifford.json +202 -0
  660. qiskit/visualization/circuit/styles/iqp-dark.json +214 -0
  661. qiskit/visualization/circuit/styles/iqp.json +214 -0
  662. qiskit/visualization/circuit/styles/textbook.json +202 -0
  663. qiskit/visualization/circuit/text.py +1849 -0
  664. qiskit/visualization/circuit_visualization.py +19 -0
  665. qiskit/visualization/counts_visualization.py +487 -0
  666. qiskit/visualization/dag_visualization.py +318 -0
  667. qiskit/visualization/exceptions.py +21 -0
  668. qiskit/visualization/gate_map.py +1424 -0
  669. qiskit/visualization/library.py +40 -0
  670. qiskit/visualization/pass_manager_visualization.py +312 -0
  671. qiskit/visualization/state_visualization.py +1546 -0
  672. qiskit/visualization/timeline/__init__.py +21 -0
  673. qiskit/visualization/timeline/core.py +495 -0
  674. qiskit/visualization/timeline/drawings.py +260 -0
  675. qiskit/visualization/timeline/generators.py +506 -0
  676. qiskit/visualization/timeline/interface.py +444 -0
  677. qiskit/visualization/timeline/layouts.py +115 -0
  678. qiskit/visualization/timeline/plotters/__init__.py +16 -0
  679. qiskit/visualization/timeline/plotters/base_plotter.py +58 -0
  680. qiskit/visualization/timeline/plotters/matplotlib.py +195 -0
  681. qiskit/visualization/timeline/stylesheet.py +301 -0
  682. qiskit/visualization/timeline/types.py +148 -0
  683. qiskit/visualization/transition_visualization.py +369 -0
  684. qiskit/visualization/utils.py +49 -0
  685. qiskit-2.0.3.dist-info/METADATA +220 -0
  686. qiskit-2.0.3.dist-info/RECORD +690 -0
  687. qiskit-2.0.3.dist-info/WHEEL +6 -0
  688. qiskit-2.0.3.dist-info/entry_points.txt +82 -0
  689. qiskit-2.0.3.dist-info/licenses/LICENSE.txt +203 -0
  690. qiskit-2.0.3.dist-info/top_level.txt +1 -0
@@ -0,0 +1,444 @@
1
+ # This code is part of Qiskit.
2
+ #
3
+ # (C) Copyright IBM 2020.
4
+ #
5
+ # This code is licensed under the Apache License, Version 2.0. You may
6
+ # obtain a copy of this license in the LICENSE.txt file in the root directory
7
+ # of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
8
+ #
9
+ # Any modifications or derivative works of this code must retain this
10
+ # copyright notice, and modified files need to carry a notice indicating
11
+ # that they have been altered from the originals.
12
+
13
+ """Qiskit timeline drawer.
14
+
15
+ This module provides a common user interface to the timeline drawer.
16
+ The `draw` function takes a scheduled circuit to visualize, as well as a style sheet
17
+ along with several control arguments.
18
+ The drawer canvas object is internally initialized from the input data and
19
+ the configured canvas is passed to one of the plotter APIs to generate a visualization data.
20
+ """
21
+
22
+ from typing import Optional, Dict, Any, List, Tuple
23
+
24
+ from qiskit import circuit
25
+ from qiskit.transpiler.target import Target
26
+ from qiskit.exceptions import MissingOptionalLibraryError
27
+ from qiskit.visualization.exceptions import VisualizationError
28
+ from qiskit.visualization.timeline import types, core, stylesheet
29
+ from qiskit.utils import deprecate_arg
30
+
31
+
32
+ @deprecate_arg("show_idle", new_alias="idle_wires", since="1.1.0", pending=True)
33
+ @deprecate_arg("show_barriers", new_alias="plot_barriers", since="1.1.0", pending=True)
34
+ def draw(
35
+ program: circuit.QuantumCircuit,
36
+ style: Optional[Dict[str, Any]] = None,
37
+ time_range: Tuple[int, int] = None,
38
+ disable_bits: List[types.Bits] = None,
39
+ show_clbits: Optional[bool] = None,
40
+ idle_wires: Optional[bool] = None,
41
+ plot_barriers: Optional[bool] = None,
42
+ show_delays: Optional[bool] = None,
43
+ show_labels: bool = True,
44
+ plotter: Optional[str] = types.Plotter.MPL.value,
45
+ axis: Optional[Any] = None,
46
+ filename: Optional[str] = None,
47
+ target: Optional[Target] = None,
48
+ *,
49
+ show_idle: Optional[bool] = None,
50
+ show_barriers: Optional[bool] = None,
51
+ ):
52
+ r"""Generate visualization data for scheduled circuit programs.
53
+
54
+ .. deprecated:: 1.3
55
+ The ``target`` parameter needs to be specified in Qiskit 2.0 in order to get the
56
+ instruction durations.
57
+
58
+ Args:
59
+ program: Program to visualize. This program should be a `QuantumCircuit` which is
60
+ transpiled with a scheduling_method, thus containing gate time information.
61
+ style: Stylesheet options. This can be dictionary or preset stylesheet classes. See
62
+ :py:class:`~qiskit.visualization.timeline.stylesheets.IQXStandard`,
63
+ :py:class:`~qiskit.visualization.timeline.stylesheets.IQXSimple`, and
64
+ :py:class:`~qiskit.visualization.timeline.stylesheets.IQXDebugging` for details of
65
+ preset stylesheets. See also the stylesheet section for details of configuration keys.
66
+ time_range: Set horizontal axis limit.
67
+ disable_bits: List of qubits of classical bits not shown in the output image.
68
+ show_clbits: A control property to show classical bits.
69
+ Set `True` to show classical bits.
70
+ idle_wires: A control property to show idle timeline.
71
+ Set `True` to show timeline without gates.
72
+ plot_barriers: A control property to show barrier instructions.
73
+ Set `True` to show barrier instructions.
74
+ show_delays: A control property to show delay instructions.
75
+ Set `True` to show delay instructions.
76
+ show_labels: A control property to show annotations, i.e. name, of gates.
77
+ Set `True` to show annotations.
78
+ plotter: Name of plotter API to generate an output image.
79
+ One of following APIs should be specified::
80
+
81
+ mpl: Matplotlib API
82
+ Matplotlib API to generate 2D image. Timelines are placed along y axis with
83
+ vertical offset. This API takes matplotlib.axes.Axes as `axis` input.
84
+
85
+ `axis` and `style` kwargs may depend on the plotter.
86
+ axis: Arbitrary object passed to the plotter. If this object is provided,
87
+ the plotters uses given `axis` instead of internally initializing a figure object.
88
+ This object format depends on the plotter. See plotters section for details.
89
+ filename: If provided the output image is dumped into a file under the filename.
90
+ target: The target for the backend the timeline is being generated for.
91
+ show_idle: DEPRECATED.
92
+ show_barriers: DEPRECATED.
93
+
94
+ Returns:
95
+ Visualization output data.
96
+
97
+ The returned data type depends on the `plotter`.
98
+ If matplotlib family is specified, this will be a `matplotlib.pyplot.Figure` data.
99
+ The returned data is generated by the `.get_image` method of the specified plotter API.
100
+
101
+ Raises:
102
+ MissingOptionalLibraryError: When required visualization package is not installed.
103
+ VisualizationError: When invalid plotter API is specified.
104
+
105
+ .. _style-dict-doc:
106
+
107
+ **Style Dict Details**
108
+
109
+ The stylesheet kwarg contains numerous options that define the style of the
110
+ output timeline visualization.
111
+ The stylesheet options can be classified into `formatter`, `generator` and `layout`.
112
+ Those options available in the stylesheet are defined below:
113
+
114
+ Args:
115
+ formatter.general.fig_width: Width of output image (default `14`).
116
+ formatter.general.fig_unit_height: Height of output image per timeline.
117
+ The sum of all timeline becomes the height of the output image (default `0.8`).
118
+ formatter.general.dpi: Dot per inch of image if `filename` is set (default `150`).
119
+ formatter.margin.top: Margin from the top boundary of the figure canvas to
120
+ the zero line of the first time slot (default `0.5`).
121
+ formatter.margin.bottom: Margin from the bottom boundary of the figure canvas to
122
+ the zero lien of the last time slot (default `0.5`).
123
+ formatter.margin.left_percent: Margin from the left boundary of the figure canvas to
124
+ the left limit of the horizontal axis. The value is in units of percentage of
125
+ the whole program duration. If the duration is 100 and the value of 0.5 is set,
126
+ this keeps left margin of 5 (default `0.02`).
127
+ formatter.margin.right_percent: Margin from the right boundary of the figure canvas to
128
+ the right limit of the horizontal axis. The value is in units of percentage of
129
+ the whole program duration. If the duration is 100 and the value of 0.5 is set,
130
+ this keeps right margin of 5 (default `0.02`).
131
+ formatter.margin.link_interval_percent: Allowed overlap of gate links.
132
+ If multiple gate links are drawing within this range, links are horizontally
133
+ shifted not to overlap with each other. The value is in units of percentage of
134
+ the whole program duration (default `0.01`).
135
+ formatter.time_bucket.edge_dt: The length of round edge of gate boxes. Gate boxes are
136
+ smoothly faded in and out from the zero line. This value is in units of
137
+ the system cycle time dt (default `10`).
138
+ formatter.margin.minimum_duration: Minimum scheduled circuit duration.
139
+ If the duration of input circuit is below this value, horizontal limit is
140
+ set based on this value. This value is in units of
141
+ the system cycle time dt (default `50`).
142
+ formatter.color.background: Color code of the face color of canvas (default `#FFFFFF`).
143
+ formatter.color.timeslot: Face color of the time slot box (default `#DDDDDD`).
144
+ formatter.color.gate_name: Text color of the gate name annotations (default `#000000`).
145
+ formatter.color.bit_name: Text color of the bit label annotations (default `#000000`).
146
+ formatter.color.barrier: Line color of barriers (default `#222222`).
147
+ formatter.color.gates: A dictionary of the gate box or gate symbol colors
148
+ to use for each element type in the output visualization. The default
149
+ values are::
150
+
151
+ {
152
+ 'u0': '#FA74A6',
153
+ 'u1': '#000000',
154
+ 'u2': '#FA74A6',
155
+ 'u3': '#FA74A6',
156
+ 'id': '#05BAB6',
157
+ 'sx': '#FA74A6',
158
+ 'sxdg': '#FA74A6',
159
+ 'x': '#05BAB6',
160
+ 'y': '#05BAB6',
161
+ 'z': '#05BAB6',
162
+ 'h': '#6FA4FF',
163
+ 'cx': '#6FA4FF',
164
+ 'cy': '#6FA4FF',
165
+ 'cz': '#6FA4FF',
166
+ 'swap': '#6FA4FF',
167
+ 's': '#6FA4FF',
168
+ 'sdg': '#6FA4FF',
169
+ 'dcx': '#6FA4FF',
170
+ 'iswap': '#6FA4FF',
171
+ 't': '#BB8BFF',
172
+ 'tdg': '#BB8BFF',
173
+ 'r': '#BB8BFF',
174
+ 'rx': '#BB8BFF',
175
+ 'ry': '#BB8BFF',
176
+ 'rz': '#000000',
177
+ 'reset': '#808080',
178
+ 'measure': '#808080'
179
+ }
180
+
181
+ You must specify all the necessary values if using this. If a gate name is not
182
+ specified, the color in `formatter.color.default_gate` is applied.
183
+ formatter.color.default_gate: Default gate color. This color is applied when
184
+ a gate name to visualize is not contained in the dictionary of
185
+ `formatter.color.gates` (default `#BB8BFF`).
186
+ formatter.latex_symbol.gates: A dictionary of latex representation of gate names
187
+ to use for each element type in the output visualization. The default
188
+ values are::
189
+
190
+ {
191
+ 'u0': r'{\rm U}_0',
192
+ 'u1': r'{\rm U}_1',
193
+ 'u2': r'{\rm U}_2',
194
+ 'u3': r'{\rm U}_3',
195
+ 'id': r'{\rm Id}',
196
+ 'x': r'{\rm X}',
197
+ 'y': r'{\rm Y}',
198
+ 'z': r'{\rm Z}',
199
+ 'h': r'{\rm H}',
200
+ 'cx': r'{\rm CX}',
201
+ 'cy': r'{\rm CY}',
202
+ 'cz': r'{\rm CZ}',
203
+ 'swap': r'{\rm SWAP}',
204
+ 's': r'{\rm S}',
205
+ 'sdg': r'{\rm S}^\dagger',
206
+ 'sx': r'{\rm √X}',
207
+ 'sxdg': r'{\rm √X}^\dagger',
208
+ 'dcx': r'{\rm DCX}',
209
+ 'iswap': r'{\rm iSWAP}',
210
+ 't': r'{\rm T}',
211
+ 'tdg': r'{\rm T}^\dagger',
212
+ 'r': r'{\rm R}',
213
+ 'rx': r'{\rm R}_x',
214
+ 'ry': r'{\rm R}_y',
215
+ 'rz': r'{\rm R}_z',
216
+ 'reset': r'|0\rangle',
217
+ 'measure': r'{\rm Measure}'
218
+ }
219
+
220
+ You must specify all the necessary values if using this. There is
221
+ no provision for passing an incomplete dict in.
222
+ formatter.latex_symbol.frame_change: Latex representation of
223
+ the frame change symbol (default r`\circlearrowleft`).
224
+ formatter.unicode_symbol.frame_change: Unicode representation of
225
+ the frame change symbol (default u'\u21BA').
226
+ formatter.box_height.gate: Height of gate box (default `0.5`).
227
+ formatter.box_height.timeslot: Height of time slot (default `0.6`).
228
+ formatter.layer.gate: Layer index of gate boxes. Larger number comes
229
+ in the front of the output image (default `3`).
230
+ formatter.layer.timeslot: Layer index of time slots. Larger number comes
231
+ in the front of the output image (default `0`).
232
+ formatter.layer.gate_name: Layer index of gate name annotations. Larger number comes
233
+ in the front of the output image (default `5`).
234
+ formatter.layer.bit_name: Layer index of bit labels. Larger number comes
235
+ in the front of the output image (default `5`).
236
+ formatter.layer.frame_change: Layer index of frame change symbols. Larger number comes
237
+ in the front of the output image (default `4`).
238
+ formatter.layer.barrier: Layer index of barrier lines. Larger number comes
239
+ in the front of the output image (default `1`).
240
+ formatter.layer.gate_link: Layer index of gate link lines. Larger number comes
241
+ in the front of the output image (default `2`).
242
+ formatter.alpha.gate: Transparency of gate boxes. A value in the range from
243
+ `0` to `1`. The value `0` gives completely transparent boxes (default `1.0`).
244
+ formatter.alpha.timeslot: Transparency of time slots. A value in the range from
245
+ `0` to `1`. The value `0` gives completely transparent boxes (default `0.7`).
246
+ formatter.alpha.barrier: Transparency of barrier lines. A value in the range from
247
+ `0` to `1`. The value `0` gives completely transparent lines (default `0.5`).
248
+ formatter.alpha.gate_link: Transparency of gate link lines. A value in the range from
249
+ `0` to `1`. The value `0` gives completely transparent lines (default `0.8`).
250
+ formatter.line_width.gate: Line width of the fringe of gate boxes (default `0`).
251
+ formatter.line_width.timeslot: Line width of the fringe of time slots (default `0`).
252
+ formatter.line_width.barrier: Line width of barrier lines (default `3`).
253
+ formatter.line_width.gate_link: Line width of gate links (default `3`).
254
+ formatter.line_style.barrier: Line style of barrier lines. This
255
+ conforms to the line style spec of matplotlib (default `'-'`).
256
+ formatter.line_style.gate_link: Line style of gate link lines. This
257
+ conforms to the line style spec of matplotlib (default `'-'`).
258
+ formatter.text_size.gate_name: Text size of gate name annotations (default `12`).
259
+ formatter.text_size.bit_name: Text size of bit labels (default `15`).
260
+ formatter.text_size.frame_change: Text size of frame change symbols (default `18`).
261
+ formatter.text_size.axis_label: Text size of axis labels (default `13`).
262
+ formatter.label_offset.frame_change: Offset of zero duration gate name annotations
263
+ from the zero line of time slot (default `0.25`).
264
+ formatter.control.show_idle: Set `True` to show time slots without gate (default `True`).
265
+ formatter.control.show_clbits: Set `True` to show time slots of
266
+ classical bits (default `True`).
267
+ formatter.control.show_barriers: Set `True` to show barriers (default `True`).
268
+ formatter.control.show_delays: Set `True` to show delay boxes (default `True`).
269
+ generator.gates: List of callback functions that generates drawings
270
+ for gates. Arbitrary callback functions satisfying the generator format
271
+ can be set here. There are some default generators in the timeline drawer. See
272
+ :py:mod:`~qiskit.visualization.timeline.generators` for more details.
273
+ No default generator is set (default `[]`).
274
+ generator.bits: List of callback functions that generates drawings for bit labels
275
+ and time slots. Arbitrary callback functions satisfying the generator format
276
+ can be set here. There are some default generators in the timeline drawer. See
277
+ :py:mod:`~qiskit.visualization.timeline.generators` for more details.
278
+ No default generator is set (default `[]`).
279
+ generator.barriers: List of callback functions that generates drawings
280
+ for barriers. Arbitrary callback functions satisfying the generator format
281
+ can be set here. There are some default generators in the timeline drawer. See
282
+ :py:mod:`~qiskit.visualization.timeline.generators` for more details.
283
+ No default generator is set (default `[]`).
284
+ generator.gate_links: List of callback functions that generates drawings
285
+ for gate links. Arbitrary callback functions satisfying the generator format
286
+ can be set here. There are some default generators in the timeline drawer. See
287
+ :py:mod:`~qiskit.visualization.timeline.generators` for more details.
288
+ No default generator is set (default `[]`).
289
+ layout.bit_arrange: Callback function that sorts bits. See
290
+ :py:mod:`~qiskit.visualization.timeline.layouts` for more details.
291
+ No default layout is set. (default `None`).
292
+ layout.time_axis_map: Callback function that determines the layout of
293
+ horizontal axis labels. See :py:mod:`~qiskit.visualization.timeline.layouts`
294
+ for more details. No default layout is set. (default `None`).
295
+
296
+ Examples:
297
+ To visualize a scheduled circuit program, you can call this function with a set of
298
+ control arguments. Most of the appearance of the output image can be controlled by the
299
+ stylesheet.
300
+
301
+ Drawing with the default stylesheet.
302
+
303
+ .. plot::
304
+ :alt: Output from the previous code.
305
+ :include-source:
306
+
307
+ from qiskit import QuantumCircuit, transpile
308
+ from qiskit.visualization.timeline import draw
309
+ from qiskit.providers.fake_provider import GenericBackendV2
310
+
311
+ qc = QuantumCircuit(2)
312
+ qc.h(0)
313
+ qc.cx(0,1)
314
+
315
+ backend = GenericBackendV2(5)
316
+
317
+ qc = transpile(qc, backend, scheduling_method='alap', layout_method='trivial')
318
+ draw(qc, target=backend.target)
319
+
320
+ Drawing with the simple stylesheet.
321
+
322
+ .. plot::
323
+ :alt: Output from the previous code.
324
+ :include-source:
325
+
326
+ from qiskit import QuantumCircuit, transpile
327
+ from qiskit.visualization.timeline import draw, IQXSimple
328
+ from qiskit.providers.fake_provider import GenericBackendV2
329
+
330
+ qc = QuantumCircuit(2)
331
+ qc.h(0)
332
+ qc.cx(0,1)
333
+
334
+ backend = GenericBackendV2(5)
335
+
336
+ qc = transpile(qc, backend, scheduling_method='alap', layout_method='trivial')
337
+ draw(qc, style=IQXSimple(), target=backend.target)
338
+
339
+ Drawing with the stylesheet suited for program debugging.
340
+
341
+ .. plot::
342
+ :alt: Output from the previous code.
343
+ :include-source:
344
+
345
+ from qiskit import QuantumCircuit, transpile
346
+ from qiskit.visualization.timeline import draw, IQXDebugging
347
+ from qiskit.providers.fake_provider import GenericBackendV2
348
+
349
+ qc = QuantumCircuit(2)
350
+ qc.h(0)
351
+ qc.cx(0,1)
352
+
353
+ backend = GenericBackendV2(5)
354
+ qc = transpile(qc, backend, scheduling_method='alap', layout_method='trivial')
355
+ draw(qc, style=IQXDebugging(), target=backend.target)
356
+
357
+ You can partially customize a preset stylesheet when call it::
358
+
359
+ my_style = {
360
+ 'formatter.general.fig_width': 16,
361
+ 'formatter.general.fig_unit_height': 1
362
+ }
363
+ style = IQXStandard(**my_style)
364
+
365
+ # draw
366
+ draw(qc, style=style)
367
+
368
+ In the same way as above, you can create custom generator or layout functions
369
+ and update existing stylesheet with custom functions.
370
+ This feature enables you to control the most of the appearance of the output image
371
+ without modifying the codebase of the scheduled circuit drawer.
372
+ """
373
+ del show_idle
374
+ del show_barriers
375
+ # update stylesheet
376
+ temp_style = stylesheet.QiskitTimelineStyle()
377
+ temp_style.update(style or stylesheet.IQXStandard())
378
+
379
+ if target is None:
380
+ raise VisualizationError(
381
+ "No target is specified, this is required to get the duration of instructions."
382
+ )
383
+
384
+ # update control properties
385
+ if idle_wires is not None:
386
+ temp_style["formatter.control.show_idle"] = idle_wires
387
+
388
+ if show_clbits is not None:
389
+ temp_style["formatter.control.show_clbits"] = show_clbits
390
+
391
+ if plot_barriers is not None:
392
+ temp_style["formatter.control.show_barriers"] = plot_barriers
393
+
394
+ if show_delays is not None:
395
+ temp_style["formatter.control.show_delays"] = show_delays
396
+
397
+ # create empty canvas and load program
398
+ canvas = core.DrawerCanvas(stylesheet=temp_style)
399
+ canvas.load_program(program=program, target=target)
400
+
401
+ #
402
+ # update configuration
403
+ #
404
+
405
+ # time range
406
+ if time_range:
407
+ canvas.set_time_range(*time_range)
408
+
409
+ # bits not shown
410
+ if disable_bits:
411
+ for bit in disable_bits:
412
+ canvas.set_disable_bits(bit, remove=True)
413
+
414
+ # show labels
415
+ if not show_labels:
416
+ labels = [types.LabelType.DELAY, types.LabelType.GATE_PARAM, types.LabelType.GATE_NAME]
417
+ for label in labels:
418
+ canvas.set_disable_type(label, remove=True)
419
+
420
+ canvas.update()
421
+
422
+ #
423
+ # Call plotter API and generate image
424
+ #
425
+
426
+ if plotter == types.Plotter.MPL.value:
427
+ try:
428
+ from qiskit.visualization.timeline.plotters import MplPlotter
429
+ except ImportError as ex:
430
+ raise MissingOptionalLibraryError(
431
+ libname="Matplotlib",
432
+ name="timeline drawer",
433
+ pip_install="pip install matplotlib",
434
+ ) from ex
435
+ plotter_api = MplPlotter(canvas=canvas, axis=axis)
436
+ plotter_api.draw()
437
+ else:
438
+ raise VisualizationError(f"Plotter API {plotter} is not supported.")
439
+
440
+ # save figure
441
+ if filename:
442
+ plotter_api.save_file(filename=filename)
443
+
444
+ return plotter_api.get_image()
@@ -0,0 +1,115 @@
1
+ # This code is part of Qiskit.
2
+ #
3
+ # (C) Copyright IBM 2020.
4
+ #
5
+ # This code is licensed under the Apache License, Version 2.0. You may
6
+ # obtain a copy of this license in the LICENSE.txt file in the root directory
7
+ # of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
8
+ #
9
+ # Any modifications or derivative works of this code must retain this
10
+ # copyright notice, and modified files need to carry a notice indicating
11
+ # that they have been altered from the originals.
12
+
13
+ """
14
+ A collection of functions that decide the layout of an output image.
15
+ See :py:mod:`~qiskit.visualization.timeline.types` for more info on the required data.
16
+
17
+ There are 2 types of layout functions in this module.
18
+
19
+ 1. layout.bit_arrange
20
+
21
+ In this stylesheet entry the input data is a list of `types.Bits` and returns a
22
+ sorted list of `types.Bits`.
23
+
24
+
25
+ The function signature of the layout is restricted to:
26
+
27
+ ```python
28
+
29
+ def my_layout(bits: List[types.Bits]) -> List[types.Bits]:
30
+
31
+ # your code here: sort input bits and return list of bits
32
+ ```
33
+
34
+ 2. layout.time_axis_map
35
+
36
+ In this stylesheet entry the input data is `Tuple[int, int]` that represents horizontal
37
+ axis limit of the output image. The layout function returns `types.HorizontalAxis` data
38
+ which is consumed by the plotter API to make horizontal axis.
39
+
40
+ The function signature of the layout is restricted to:
41
+
42
+ ```python
43
+
44
+ def my_layout(time_window: Tuple[int, int]) -> types.HorizontalAxis:
45
+
46
+ # your code here: create and return axis config
47
+ ```
48
+
49
+ Arbitrary layout function satisfying the above format can be accepted.
50
+ """
51
+ from typing import List, Tuple
52
+ import numpy as np
53
+
54
+ from qiskit import circuit
55
+ from qiskit.visualization.timeline import types
56
+
57
+
58
+ def qreg_creg_ascending(bits: List[types.Bits]) -> List[types.Bits]:
59
+ """Sort bits by ascending order.
60
+
61
+ Bit order becomes Q0, Q1, ..., Cl0, Cl1, ...
62
+
63
+ Args:
64
+ bits: List of bits to sort.
65
+
66
+ Returns:
67
+ Sorted bits.
68
+ """
69
+ return [x for x in bits if isinstance(x, circuit.Qubit)] + [
70
+ x for x in bits if isinstance(x, circuit.Clbit)
71
+ ]
72
+
73
+
74
+ def qreg_creg_descending(bits: List[types.Bits]) -> List[types.Bits]:
75
+ """Sort bits by descending order.
76
+
77
+ Bit order becomes Q_N, Q_N-1, ..., Cl_N, Cl_N-1, ...
78
+
79
+ Args:
80
+ bits: List of bits to sort.
81
+
82
+ Returns:
83
+ Sorted bits.
84
+ """
85
+ return [x for x in bits[::-1] if isinstance(x, circuit.Qubit)] + [
86
+ x for x in bits[::-1] if isinstance(x, circuit.Clbit)
87
+ ]
88
+
89
+
90
+ def time_map_in_dt(time_window: Tuple[int, int]) -> types.HorizontalAxis:
91
+ """Layout function for the horizontal axis formatting.
92
+
93
+ Generate equispaced 6 horizontal axis ticks.
94
+
95
+ Args:
96
+ time_window: Left and right edge of this graph.
97
+
98
+ Returns:
99
+ Axis formatter object.
100
+ """
101
+ # shift time axis
102
+ t0, t1 = time_window
103
+
104
+ # axis label
105
+ axis_loc = np.linspace(max(t0, 0), t1, 6)
106
+ axis_label = axis_loc.copy()
107
+
108
+ # consider time resolution
109
+ label = "System cycle time (dt)"
110
+
111
+ formatted_label = [f"{val:.0f}" for val in axis_label]
112
+
113
+ return types.HorizontalAxis(
114
+ window=(t0, t1), axis_map=dict(zip(axis_loc, formatted_label)), label=label
115
+ )
@@ -0,0 +1,16 @@
1
+ # This code is part of Qiskit.
2
+ #
3
+ # (C) Copyright IBM 2020.
4
+ #
5
+ # This code is licensed under the Apache License, Version 2.0. You may
6
+ # obtain a copy of this license in the LICENSE.txt file in the root directory
7
+ # of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
8
+ #
9
+ # Any modifications or derivative works of this code must retain this
10
+ # copyright notice, and modified files need to carry a notice indicating
11
+ # that they have been altered from the originals.
12
+ """
13
+ Plotter API.
14
+ """
15
+
16
+ from qiskit.visualization.timeline.plotters.matplotlib import MplPlotter
@@ -0,0 +1,58 @@
1
+ # This code is part of Qiskit.
2
+ #
3
+ # (C) Copyright IBM 2020.
4
+ #
5
+ # This code is licensed under the Apache License, Version 2.0. You may
6
+ # obtain a copy of this license in the LICENSE.txt file in the root directory
7
+ # of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
8
+ #
9
+ # Any modifications or derivative works of this code must retain this
10
+ # copyright notice, and modified files need to carry a notice indicating
11
+ # that they have been altered from the originals.
12
+
13
+ """Base plotter API."""
14
+
15
+ from abc import ABC, abstractmethod
16
+ from typing import Any
17
+
18
+ from qiskit.visualization.timeline import core
19
+
20
+
21
+ class BasePlotter(ABC):
22
+ """Base class of Qiskit plotter."""
23
+
24
+ def __init__(self, canvas: core.DrawerCanvas):
25
+ """Create new plotter.
26
+ Args:
27
+ canvas: Configured drawer canvas object.
28
+ """
29
+ self.canvas = canvas
30
+
31
+ @abstractmethod
32
+ def initialize_canvas(self):
33
+ """Format appearance of the canvas."""
34
+ raise NotImplementedError
35
+
36
+ @abstractmethod
37
+ def draw(self):
38
+ """Output drawings stored in canvas object."""
39
+ raise NotImplementedError
40
+
41
+ @abstractmethod
42
+ def save_file(self, filename: str):
43
+ """Save image to file.
44
+ Args:
45
+ filename: File path to output image data.
46
+ """
47
+ raise NotImplementedError
48
+
49
+ @abstractmethod
50
+ def get_image(self, interactive: bool = False) -> Any:
51
+ """Get image data to return.
52
+ Args:
53
+ interactive: When set `True` show the circuit in a new window.
54
+ This depends on the matplotlib backend being used supporting this.
55
+ Returns:
56
+ Image data. This depends on the plotter API.
57
+ """
58
+ raise NotImplementedError