qiskit 1.0.2__cp38-abi3-win32.whl → 1.1.0__cp38-abi3-win32.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 (263) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +27 -16
  3. qiskit/_accelerate.pyd +0 -0
  4. qiskit/_numpy_compat.py +73 -0
  5. qiskit/assembler/__init__.py +5 -10
  6. qiskit/assembler/disassemble.py +5 -6
  7. qiskit/circuit/__init__.py +1061 -232
  8. qiskit/circuit/_classical_resource_map.py +10 -6
  9. qiskit/circuit/_utils.py +18 -8
  10. qiskit/circuit/annotated_operation.py +21 -0
  11. qiskit/circuit/barrier.py +10 -13
  12. qiskit/circuit/bit.py +0 -1
  13. qiskit/circuit/classical/__init__.py +2 -2
  14. qiskit/circuit/classical/expr/__init__.py +39 -5
  15. qiskit/circuit/classical/expr/constructors.py +84 -1
  16. qiskit/circuit/classical/expr/expr.py +83 -13
  17. qiskit/circuit/classical/expr/visitors.py +83 -0
  18. qiskit/circuit/classical/types/__init__.py +5 -4
  19. qiskit/circuit/classicalfunction/__init__.py +1 -0
  20. qiskit/circuit/commutation_checker.py +86 -51
  21. qiskit/circuit/controlflow/_builder_utils.py +9 -1
  22. qiskit/circuit/controlflow/break_loop.py +8 -22
  23. qiskit/circuit/controlflow/builder.py +116 -1
  24. qiskit/circuit/controlflow/continue_loop.py +8 -22
  25. qiskit/circuit/controlflow/control_flow.py +47 -8
  26. qiskit/circuit/controlflow/for_loop.py +8 -23
  27. qiskit/circuit/controlflow/if_else.py +13 -27
  28. qiskit/circuit/controlflow/switch_case.py +14 -21
  29. qiskit/circuit/controlflow/while_loop.py +9 -23
  30. qiskit/circuit/controlledgate.py +2 -2
  31. qiskit/circuit/delay.py +7 -5
  32. qiskit/circuit/gate.py +20 -7
  33. qiskit/circuit/instruction.py +31 -30
  34. qiskit/circuit/instructionset.py +9 -22
  35. qiskit/circuit/library/__init__.py +3 -13
  36. qiskit/circuit/library/arithmetic/integer_comparator.py +2 -2
  37. qiskit/circuit/library/arithmetic/quadratic_form.py +3 -2
  38. qiskit/circuit/library/blueprintcircuit.py +29 -7
  39. qiskit/circuit/library/data_preparation/state_preparation.py +6 -5
  40. qiskit/circuit/library/generalized_gates/diagonal.py +5 -4
  41. qiskit/circuit/library/generalized_gates/isometry.py +51 -254
  42. qiskit/circuit/library/generalized_gates/pauli.py +2 -2
  43. qiskit/circuit/library/generalized_gates/permutation.py +4 -1
  44. qiskit/circuit/library/generalized_gates/rv.py +15 -11
  45. qiskit/circuit/library/generalized_gates/uc.py +2 -98
  46. qiskit/circuit/library/generalized_gates/unitary.py +9 -4
  47. qiskit/circuit/library/hamiltonian_gate.py +11 -5
  48. qiskit/circuit/library/n_local/efficient_su2.py +5 -5
  49. qiskit/circuit/library/n_local/n_local.py +100 -49
  50. qiskit/circuit/library/n_local/two_local.py +3 -59
  51. qiskit/circuit/library/overlap.py +3 -3
  52. qiskit/circuit/library/phase_oracle.py +1 -1
  53. qiskit/circuit/library/quantum_volume.py +39 -38
  54. qiskit/circuit/library/standard_gates/equivalence_library.py +50 -0
  55. qiskit/circuit/library/standard_gates/global_phase.py +4 -2
  56. qiskit/circuit/library/standard_gates/i.py +1 -2
  57. qiskit/circuit/library/standard_gates/iswap.py +1 -2
  58. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +11 -5
  59. qiskit/circuit/library/standard_gates/p.py +31 -15
  60. qiskit/circuit/library/standard_gates/r.py +4 -3
  61. qiskit/circuit/library/standard_gates/rx.py +7 -4
  62. qiskit/circuit/library/standard_gates/rxx.py +4 -3
  63. qiskit/circuit/library/standard_gates/ry.py +7 -4
  64. qiskit/circuit/library/standard_gates/ryy.py +4 -3
  65. qiskit/circuit/library/standard_gates/rz.py +7 -4
  66. qiskit/circuit/library/standard_gates/rzx.py +4 -3
  67. qiskit/circuit/library/standard_gates/rzz.py +4 -3
  68. qiskit/circuit/library/standard_gates/s.py +4 -8
  69. qiskit/circuit/library/standard_gates/t.py +2 -4
  70. qiskit/circuit/library/standard_gates/u.py +16 -11
  71. qiskit/circuit/library/standard_gates/u1.py +6 -2
  72. qiskit/circuit/library/standard_gates/u2.py +4 -2
  73. qiskit/circuit/library/standard_gates/u3.py +9 -5
  74. qiskit/circuit/library/standard_gates/x.py +22 -11
  75. qiskit/circuit/library/standard_gates/xx_minus_yy.py +4 -3
  76. qiskit/circuit/library/standard_gates/xx_plus_yy.py +7 -5
  77. qiskit/circuit/library/standard_gates/z.py +1 -2
  78. qiskit/circuit/measure.py +4 -1
  79. qiskit/circuit/operation.py +13 -8
  80. qiskit/circuit/parameter.py +11 -6
  81. qiskit/circuit/quantumcircuit.py +1910 -260
  82. qiskit/circuit/quantumcircuitdata.py +2 -2
  83. qiskit/circuit/reset.py +5 -2
  84. qiskit/circuit/store.py +95 -0
  85. qiskit/compiler/assembler.py +22 -22
  86. qiskit/compiler/transpiler.py +63 -112
  87. qiskit/converters/__init__.py +17 -2
  88. qiskit/converters/circuit_to_dag.py +7 -0
  89. qiskit/converters/circuit_to_dagdependency_v2.py +47 -0
  90. qiskit/converters/circuit_to_gate.py +2 -0
  91. qiskit/converters/circuit_to_instruction.py +22 -0
  92. qiskit/converters/dag_to_circuit.py +4 -0
  93. qiskit/converters/dag_to_dagdependency_v2.py +44 -0
  94. qiskit/dagcircuit/collect_blocks.py +15 -10
  95. qiskit/dagcircuit/dagcircuit.py +434 -124
  96. qiskit/dagcircuit/dagdependency.py +19 -12
  97. qiskit/dagcircuit/dagdependency_v2.py +641 -0
  98. qiskit/dagcircuit/dagdepnode.py +19 -16
  99. qiskit/dagcircuit/dagnode.py +14 -4
  100. qiskit/passmanager/passmanager.py +11 -11
  101. qiskit/primitives/__init__.py +22 -12
  102. qiskit/primitives/backend_estimator.py +3 -5
  103. qiskit/primitives/backend_estimator_v2.py +410 -0
  104. qiskit/primitives/backend_sampler_v2.py +287 -0
  105. qiskit/primitives/base/base_estimator.py +4 -9
  106. qiskit/primitives/base/base_sampler.py +2 -2
  107. qiskit/primitives/containers/__init__.py +6 -4
  108. qiskit/primitives/containers/bit_array.py +293 -2
  109. qiskit/primitives/containers/data_bin.py +123 -50
  110. qiskit/primitives/containers/estimator_pub.py +10 -3
  111. qiskit/primitives/containers/observables_array.py +2 -2
  112. qiskit/primitives/containers/pub_result.py +1 -1
  113. qiskit/primitives/containers/sampler_pub.py +19 -3
  114. qiskit/primitives/containers/sampler_pub_result.py +74 -0
  115. qiskit/primitives/containers/shape.py +4 -4
  116. qiskit/primitives/statevector_estimator.py +4 -4
  117. qiskit/primitives/statevector_sampler.py +7 -12
  118. qiskit/providers/__init__.py +65 -34
  119. qiskit/providers/backend.py +2 -2
  120. qiskit/providers/backend_compat.py +8 -10
  121. qiskit/providers/basic_provider/__init__.py +2 -23
  122. qiskit/providers/basic_provider/basic_provider_tools.py +67 -31
  123. qiskit/providers/basic_provider/basic_simulator.py +81 -21
  124. qiskit/providers/fake_provider/__init__.py +1 -1
  125. qiskit/providers/fake_provider/fake_1q.py +1 -1
  126. qiskit/providers/fake_provider/fake_backend.py +3 -408
  127. qiskit/providers/fake_provider/generic_backend_v2.py +26 -14
  128. qiskit/providers/models/__init__.py +2 -2
  129. qiskit/providers/provider.py +16 -0
  130. qiskit/pulse/builder.py +4 -1
  131. qiskit/pulse/parameter_manager.py +60 -4
  132. qiskit/pulse/schedule.py +29 -13
  133. qiskit/pulse/utils.py +61 -20
  134. qiskit/qasm2/__init__.py +1 -5
  135. qiskit/qasm2/parse.py +1 -4
  136. qiskit/qasm3/__init__.py +42 -5
  137. qiskit/qasm3/ast.py +19 -0
  138. qiskit/qasm3/exporter.py +178 -106
  139. qiskit/qasm3/printer.py +27 -5
  140. qiskit/qobj/converters/pulse_instruction.py +6 -6
  141. qiskit/qpy/__init__.py +299 -67
  142. qiskit/qpy/binary_io/circuits.py +216 -47
  143. qiskit/qpy/binary_io/schedules.py +42 -36
  144. qiskit/qpy/binary_io/value.py +201 -22
  145. qiskit/qpy/common.py +1 -1
  146. qiskit/qpy/exceptions.py +20 -0
  147. qiskit/qpy/formats.py +29 -0
  148. qiskit/qpy/type_keys.py +21 -0
  149. qiskit/quantum_info/analysis/distance.py +3 -3
  150. qiskit/quantum_info/analysis/make_observable.py +2 -1
  151. qiskit/quantum_info/analysis/z2_symmetries.py +2 -1
  152. qiskit/quantum_info/operators/channel/chi.py +9 -8
  153. qiskit/quantum_info/operators/channel/choi.py +10 -9
  154. qiskit/quantum_info/operators/channel/kraus.py +2 -1
  155. qiskit/quantum_info/operators/channel/ptm.py +10 -9
  156. qiskit/quantum_info/operators/channel/quantum_channel.py +2 -1
  157. qiskit/quantum_info/operators/channel/stinespring.py +2 -1
  158. qiskit/quantum_info/operators/channel/superop.py +12 -11
  159. qiskit/quantum_info/operators/channel/transformations.py +12 -11
  160. qiskit/quantum_info/operators/dihedral/dihedral.py +5 -4
  161. qiskit/quantum_info/operators/operator.py +43 -30
  162. qiskit/quantum_info/operators/scalar_op.py +10 -9
  163. qiskit/quantum_info/operators/symplectic/base_pauli.py +70 -59
  164. qiskit/quantum_info/operators/symplectic/clifford.py +36 -9
  165. qiskit/quantum_info/operators/symplectic/pauli.py +53 -6
  166. qiskit/quantum_info/operators/symplectic/pauli_list.py +36 -14
  167. qiskit/quantum_info/operators/symplectic/random.py +3 -2
  168. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +61 -36
  169. qiskit/quantum_info/states/densitymatrix.py +13 -13
  170. qiskit/quantum_info/states/stabilizerstate.py +3 -3
  171. qiskit/quantum_info/states/statevector.py +14 -13
  172. qiskit/quantum_info/states/utils.py +5 -3
  173. qiskit/result/__init__.py +6 -0
  174. qiskit/result/mitigation/correlated_readout_mitigator.py +3 -2
  175. qiskit/result/mitigation/local_readout_mitigator.py +2 -1
  176. qiskit/result/mitigation/utils.py +3 -2
  177. qiskit/scheduler/__init__.py +10 -1
  178. qiskit/scheduler/methods/__init__.py +1 -8
  179. qiskit/synthesis/__init__.py +3 -6
  180. qiskit/synthesis/discrete_basis/commutator_decompose.py +2 -2
  181. qiskit/synthesis/evolution/lie_trotter.py +7 -14
  182. qiskit/synthesis/evolution/qdrift.py +3 -4
  183. qiskit/synthesis/linear/cnot_synth.py +1 -3
  184. qiskit/synthesis/linear/linear_circuits_utils.py +1 -1
  185. qiskit/synthesis/linear_phase/cz_depth_lnn.py +4 -18
  186. qiskit/synthesis/permutation/__init__.py +1 -0
  187. qiskit/synthesis/permutation/permutation_reverse_lnn.py +90 -0
  188. qiskit/synthesis/qft/qft_decompose_lnn.py +2 -6
  189. qiskit/synthesis/two_qubit/two_qubit_decompose.py +165 -954
  190. qiskit/synthesis/two_qubit/xx_decompose/circuits.py +13 -12
  191. qiskit/synthesis/two_qubit/xx_decompose/decomposer.py +7 -1
  192. qiskit/synthesis/unitary/aqc/__init__.py +1 -1
  193. qiskit/synthesis/unitary/aqc/cnot_structures.py +2 -1
  194. qiskit/synthesis/unitary/aqc/fast_gradient/fast_gradient.py +2 -1
  195. qiskit/synthesis/unitary/qsd.py +3 -2
  196. qiskit/transpiler/__init__.py +7 -3
  197. qiskit/transpiler/layout.py +140 -61
  198. qiskit/transpiler/passes/__init__.py +10 -2
  199. qiskit/transpiler/passes/basis/basis_translator.py +9 -4
  200. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
  201. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +1 -1
  202. qiskit/transpiler/passes/calibration/rzx_builder.py +2 -1
  203. qiskit/transpiler/passes/layout/apply_layout.py +8 -3
  204. qiskit/transpiler/passes/layout/sabre_layout.py +15 -3
  205. qiskit/transpiler/passes/layout/set_layout.py +1 -1
  206. qiskit/transpiler/passes/optimization/__init__.py +2 -0
  207. qiskit/transpiler/passes/optimization/commutation_analysis.py +2 -2
  208. qiskit/transpiler/passes/optimization/commutative_cancellation.py +1 -1
  209. qiskit/transpiler/passes/optimization/consolidate_blocks.py +1 -1
  210. qiskit/transpiler/passes/optimization/cx_cancellation.py +10 -0
  211. qiskit/transpiler/passes/optimization/elide_permutations.py +114 -0
  212. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +9 -3
  213. qiskit/transpiler/passes/optimization/optimize_annotated.py +248 -12
  214. qiskit/transpiler/passes/optimization/remove_final_reset.py +37 -0
  215. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +1 -3
  216. qiskit/transpiler/passes/routing/__init__.py +1 -0
  217. qiskit/transpiler/passes/routing/basic_swap.py +13 -2
  218. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +8 -1
  219. qiskit/transpiler/passes/routing/lookahead_swap.py +7 -1
  220. qiskit/transpiler/passes/routing/sabre_swap.py +10 -6
  221. qiskit/transpiler/passes/routing/star_prerouting.py +417 -0
  222. qiskit/transpiler/passes/routing/stochastic_swap.py +24 -8
  223. qiskit/transpiler/passes/scheduling/__init__.py +1 -1
  224. qiskit/transpiler/passes/scheduling/alap.py +1 -2
  225. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +1 -2
  226. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +9 -6
  227. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +8 -0
  228. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +13 -4
  229. qiskit/transpiler/passes/scheduling/asap.py +1 -2
  230. qiskit/transpiler/passes/scheduling/base_scheduler.py +21 -2
  231. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +26 -4
  232. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +24 -2
  233. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +28 -4
  234. qiskit/transpiler/passes/synthesis/aqc_plugin.py +2 -2
  235. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +120 -13
  236. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +162 -55
  237. qiskit/transpiler/passes/utils/gates_basis.py +3 -3
  238. qiskit/transpiler/passmanager.py +44 -1
  239. qiskit/transpiler/preset_passmanagers/__init__.py +3 -3
  240. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +34 -16
  241. qiskit/transpiler/preset_passmanagers/common.py +4 -6
  242. qiskit/transpiler/preset_passmanagers/plugin.py +9 -1
  243. qiskit/utils/__init__.py +3 -2
  244. qiskit/utils/optionals.py +6 -2
  245. qiskit/utils/parallel.py +24 -15
  246. qiskit/visualization/array.py +1 -1
  247. qiskit/visualization/bloch.py +2 -3
  248. qiskit/visualization/circuit/matplotlib.py +44 -14
  249. qiskit/visualization/circuit/text.py +38 -18
  250. qiskit/visualization/counts_visualization.py +3 -6
  251. qiskit/visualization/dag_visualization.py +6 -7
  252. qiskit/visualization/gate_map.py +9 -1
  253. qiskit/visualization/pulse_v2/interface.py +8 -3
  254. qiskit/visualization/state_visualization.py +3 -2
  255. qiskit/visualization/timeline/interface.py +18 -8
  256. {qiskit-1.0.2.dist-info → qiskit-1.1.0.dist-info}/METADATA +12 -8
  257. {qiskit-1.0.2.dist-info → qiskit-1.1.0.dist-info}/RECORD +261 -251
  258. {qiskit-1.0.2.dist-info → qiskit-1.1.0.dist-info}/WHEEL +1 -1
  259. qiskit/_qasm2.pyd +0 -0
  260. qiskit/_qasm3.pyd +0 -0
  261. {qiskit-1.0.2.dist-info → qiskit-1.1.0.dist-info}/LICENSE.txt +0 -0
  262. {qiskit-1.0.2.dist-info → qiskit-1.1.0.dist-info}/entry_points.txt +0 -0
  263. {qiskit-1.0.2.dist-info → qiskit-1.1.0.dist-info}/top_level.txt +0 -0
qiskit/pulse/schedule.py CHANGED
@@ -39,11 +39,12 @@ import multiprocessing as mp
39
39
  import sys
40
40
  import warnings
41
41
  from collections.abc import Callable, Iterable
42
- from typing import List, Tuple, Union, Dict, Any
42
+ from typing import List, Tuple, Union, Dict, Any, Sequence
43
43
 
44
44
  import numpy as np
45
45
  import rustworkx as rx
46
46
 
47
+ from qiskit.circuit import ParameterVector
47
48
  from qiskit.circuit.parameter import Parameter
48
49
  from qiskit.circuit.parameterexpression import ParameterExpression, ParameterValueType
49
50
  from qiskit.pulse.channels import Channel
@@ -52,6 +53,7 @@ from qiskit.pulse.instructions import Instruction, Reference
52
53
  from qiskit.pulse.utils import instruction_duration_validation
53
54
  from qiskit.pulse.reference_manager import ReferenceManager
54
55
  from qiskit.utils.multiprocessing import is_main_process
56
+ from qiskit.utils import deprecate_arg
55
57
 
56
58
 
57
59
  Interval = Tuple[int, int]
@@ -711,13 +713,19 @@ class Schedule:
711
713
  return self._parameter_manager.is_parameterized()
712
714
 
713
715
  def assign_parameters(
714
- self, value_dict: dict[ParameterExpression, ParameterValueType], inplace: bool = True
716
+ self,
717
+ value_dict: dict[
718
+ ParameterExpression | ParameterVector | str,
719
+ ParameterValueType | Sequence[ParameterValueType],
720
+ ],
721
+ inplace: bool = True,
715
722
  ) -> "Schedule":
716
723
  """Assign the parameters in this schedule according to the input.
717
724
 
718
725
  Args:
719
- value_dict: A mapping from Parameters to either numeric values or another
720
- Parameter expression.
726
+ value_dict: A mapping from parameters or parameter names (parameter vector
727
+ or parameter vector name) to either numeric values (list of numeric values)
728
+ or another parameter expression (list of parameter expressions).
721
729
  inplace: Set ``True`` to override this instance with new parameter.
722
730
 
723
731
  Returns:
@@ -1408,14 +1416,18 @@ class ScheduleBlock:
1408
1416
 
1409
1417
  def assign_parameters(
1410
1418
  self,
1411
- value_dict: dict[ParameterExpression, ParameterValueType],
1419
+ value_dict: dict[
1420
+ ParameterExpression | ParameterVector | str,
1421
+ ParameterValueType | Sequence[ParameterValueType],
1422
+ ],
1412
1423
  inplace: bool = True,
1413
1424
  ) -> "ScheduleBlock":
1414
1425
  """Assign the parameters in this schedule according to the input.
1415
1426
 
1416
1427
  Args:
1417
- value_dict: A mapping from Parameters to either numeric values or another
1418
- Parameter expression.
1428
+ value_dict: A mapping from parameters or parameter names (parameter vector
1429
+ or parameter vector name) to either numeric values (list of numeric values)
1430
+ or another parameter expression (list of parameter expressions).
1419
1431
  inplace: Set ``True`` to override this instance with new parameter.
1420
1432
 
1421
1433
  Returns:
@@ -1634,6 +1646,7 @@ def _common_method(*classes):
1634
1646
  return decorator
1635
1647
 
1636
1648
 
1649
+ @deprecate_arg("show_barriers", new_alias="plot_barriers", since="1.1.0", pending=True)
1637
1650
  @_common_method(Schedule, ScheduleBlock)
1638
1651
  def draw(
1639
1652
  self,
@@ -1645,9 +1658,10 @@ def draw(
1645
1658
  show_snapshot: bool = True,
1646
1659
  show_framechange: bool = True,
1647
1660
  show_waveform_info: bool = True,
1648
- show_barrier: bool = True,
1661
+ plot_barrier: bool = True,
1649
1662
  plotter: str = "mpl2d",
1650
1663
  axis: Any | None = None,
1664
+ show_barrier: bool = True,
1651
1665
  ):
1652
1666
  """Plot the schedule.
1653
1667
 
@@ -1659,16 +1673,16 @@ def draw(
1659
1673
  preset stylesheets.
1660
1674
  backend (Optional[BaseBackend]): Backend object to play the input pulse program.
1661
1675
  If provided, the plotter may use to make the visualization hardware aware.
1662
- time_range: Set horizontal axis limit. Tuple `(tmin, tmax)`.
1663
- time_unit: The unit of specified time range either `dt` or `ns`.
1664
- The unit of `ns` is available only when `backend` object is provided.
1676
+ time_range: Set horizontal axis limit. Tuple ``(tmin, tmax)``.
1677
+ time_unit: The unit of specified time range either ``dt`` or ``ns``.
1678
+ The unit of `ns` is available only when ``backend`` object is provided.
1665
1679
  disable_channels: A control property to show specific pulse channel.
1666
1680
  Pulse channel instances provided as a list are not shown in the output image.
1667
1681
  show_snapshot: Show snapshot instructions.
1668
1682
  show_framechange: Show frame change instructions. The frame change represents
1669
1683
  instructions that modulate phase or frequency of pulse channels.
1670
1684
  show_waveform_info: Show additional information about waveforms such as their name.
1671
- show_barrier: Show barrier lines.
1685
+ plot_barrier: Show barrier lines.
1672
1686
  plotter: Name of plotter API to generate an output image.
1673
1687
  One of following APIs should be specified::
1674
1688
 
@@ -1681,6 +1695,7 @@ def draw(
1681
1695
  the plotters use a given ``axis`` instead of internally initializing
1682
1696
  a figure object. This object format depends on the plotter.
1683
1697
  See plotter argument for details.
1698
+ show_barrier: DEPRECATED. Show barrier lines.
1684
1699
 
1685
1700
  Returns:
1686
1701
  Visualization output data.
@@ -1690,6 +1705,7 @@ def draw(
1690
1705
  # pylint: disable=cyclic-import
1691
1706
  from qiskit.visualization import pulse_drawer
1692
1707
 
1708
+ del show_barrier
1693
1709
  return pulse_drawer(
1694
1710
  program=self,
1695
1711
  style=style,
@@ -1700,7 +1716,7 @@ def draw(
1700
1716
  show_snapshot=show_snapshot,
1701
1717
  show_framechange=show_framechange,
1702
1718
  show_waveform_info=show_waveform_info,
1703
- show_barrier=show_barrier,
1719
+ plot_barrier=plot_barrier,
1704
1720
  plotter=plotter,
1705
1721
  axis=axis,
1706
1722
  )
qiskit/pulse/utils.py CHANGED
@@ -11,13 +11,14 @@
11
11
  # that they have been altered from the originals.
12
12
 
13
13
  """Module for common pulse programming utilities."""
14
- from typing import List, Dict, Union
14
+ from typing import List, Dict, Union, Sequence
15
15
  import warnings
16
16
 
17
17
  import numpy as np
18
18
 
19
+ from qiskit.circuit import ParameterVector, Parameter
19
20
  from qiskit.circuit.parameterexpression import ParameterExpression
20
- from qiskit.pulse.exceptions import UnassignedDurationError, QiskitError
21
+ from qiskit.pulse.exceptions import UnassignedDurationError, QiskitError, PulseError
21
22
 
22
23
 
23
24
  def format_meas_map(meas_map: List[List[int]]) -> Dict[int, List[int]]:
@@ -52,17 +53,29 @@ def format_parameter_value(
52
53
  Returns:
53
54
  Value casted to non-parameter data type, when possible.
54
55
  """
55
- try:
56
- # value is assigned.
57
- # note that ParameterExpression directly supports __complex__ via sympy or symengine
58
- evaluated = complex(operand)
59
- # remove truncation error
60
- evaluated = np.round(evaluated, decimals=decimal)
61
- # typecast into most likely data type
62
- if np.isreal(evaluated):
63
- evaluated = float(evaluated.real)
64
- if evaluated.is_integer():
65
- evaluated = int(evaluated)
56
+ if isinstance(operand, ParameterExpression):
57
+ try:
58
+ operand = operand.numeric()
59
+ except TypeError:
60
+ # Unassigned expression
61
+ return operand
62
+
63
+ # Return integer before calling the numpy round function.
64
+ # The input value is multiplied by 10**decimals, rounds to an integer
65
+ # and divided by 10**decimals. For a large enough integer,
66
+ # this operation may introduce a rounding error in the float operations
67
+ # and accidentally returns a float number.
68
+ if isinstance(operand, int):
69
+ return operand
70
+
71
+ # Remove truncation error and convert the result into Python builtin type.
72
+ # Value could originally contain a rounding error, e.g. 1.00000000001
73
+ # which may occur during the parameter expression evaluation.
74
+ evaluated = np.round(operand, decimals=decimal).item()
75
+
76
+ if isinstance(evaluated, complex):
77
+ if np.isclose(evaluated.imag, 0.0):
78
+ evaluated = evaluated.real
66
79
  else:
67
80
  warnings.warn(
68
81
  "Assignment of complex values to ParameterExpression in Qiskit Pulse objects is "
@@ -76,13 +89,11 @@ def format_parameter_value(
76
89
  "converted in a similar fashion to avoid the use of complex parameters.",
77
90
  PendingDeprecationWarning,
78
91
  )
79
-
80
- return evaluated
81
- except TypeError:
82
- # value is not assigned
83
- pass
84
-
85
- return operand
92
+ return evaluated
93
+ # Type cast integer-like float into Python builtin integer, after rounding.
94
+ if evaluated.is_integer():
95
+ return int(evaluated)
96
+ return evaluated
86
97
 
87
98
 
88
99
  def instruction_duration_validation(duration: int):
@@ -107,3 +118,33 @@ def instruction_duration_validation(duration: int):
107
118
  raise QiskitError(
108
119
  f"Instruction duration must be a non-negative integer, got {duration} instead."
109
120
  )
121
+
122
+
123
+ def _validate_parameter_vector(parameter: ParameterVector, value):
124
+ """Validate parameter vector and its value."""
125
+ if not isinstance(value, Sequence):
126
+ raise PulseError(
127
+ f"Parameter vector '{parameter.name}' has length {len(parameter)},"
128
+ f" but was assigned to {value}."
129
+ )
130
+ if len(parameter) != len(value):
131
+ raise PulseError(
132
+ f"Parameter vector '{parameter.name}' has length {len(parameter)},"
133
+ f" but was assigned to {len(value)} values."
134
+ )
135
+
136
+
137
+ def _validate_single_parameter(parameter: Parameter, value):
138
+ """Validate single parameter and its value."""
139
+ if not isinstance(value, (int, float, complex, ParameterExpression)):
140
+ raise PulseError(f"Parameter '{parameter.name}' is not assignable to {value}.")
141
+
142
+
143
+ def _validate_parameter_value(parameter, value):
144
+ """Validate parameter and its value."""
145
+ if isinstance(parameter, ParameterVector):
146
+ _validate_parameter_vector(parameter, value)
147
+ return True
148
+ else:
149
+ _validate_single_parameter(parameter, value)
150
+ return False
qiskit/qasm2/__init__.py CHANGED
@@ -526,12 +526,8 @@ import os
526
526
  from pathlib import Path
527
527
  from typing import Iterable, Union, Optional, Literal
528
528
 
529
- # Pylint can't handle the C-extension introspection of `_qasm2` because there's a re-import through
530
- # to `qiskit.qasm2.exceptions`, and pylint ends up trying to import `_qasm2` twice, which PyO3
531
- # hates. If that gets fixed, this disable can be removed and `qiskit._qasm2` added to the allowed C
532
- # extensions for loadings in the `pyproject.toml`.
533
529
  # pylint: disable=c-extension-no-member
534
- from qiskit import _qasm2
530
+ from qiskit._accelerate import qasm2 as _qasm2
535
531
  from qiskit.circuit import QuantumCircuit
536
532
  from . import parse as _parse
537
533
  from .exceptions import QASM2Error, QASM2ParseError, QASM2ExportError
qiskit/qasm2/parse.py CHANGED
@@ -30,10 +30,7 @@ from qiskit.circuit import (
30
30
  Reset,
31
31
  library as lib,
32
32
  )
33
-
34
- # This is the same C-extension problems as described in the `__init__.py` disable near the
35
- # `_qasm2` import.
36
- from qiskit._qasm2 import ( # pylint: disable=no-name-in-module
33
+ from qiskit._accelerate.qasm2 import (
37
34
  OpCode,
38
35
  UnaryOpCode,
39
36
  BinaryOpCode,
qiskit/qasm3/__init__.py CHANGED
@@ -105,14 +105,14 @@ respectively loading a program indirectly from a named file and directly from a
105
105
  .. note::
106
106
 
107
107
  While we are still in the exploratory release period, to use either function, the package
108
- ``qiskit_qasm3_import`` must be installed. This can be done by installing Qiskit Terra with the
108
+ ``qiskit_qasm3_import`` must be installed. This can be done by installing Qiskit with the
109
109
  ``qasm3-import`` extra, such as by:
110
110
 
111
111
  .. code-block:: text
112
112
 
113
- pip install qiskit-terra[qasm3-import]
113
+ pip install qiskit[qasm3-import]
114
114
 
115
- We expect that this functionality will eventually be merged into core Terra, and no longer
115
+ We expect that this functionality will eventually be merged into Qiskit, and no longer
116
116
  require an optional import, but we do not yet have a timeline for this.
117
117
 
118
118
  .. autofunction:: load
@@ -223,14 +223,51 @@ available on this module, if you wish to build on top of it:
223
223
  import functools
224
224
  import warnings
225
225
 
226
- from qiskit import _qasm3
226
+ from qiskit._accelerate import qasm3 as _qasm3
227
+ from qiskit.circuit import library
227
228
  from qiskit.exceptions import ExperimentalWarning
228
229
  from qiskit.utils import optionals as _optionals
229
230
 
230
231
  from .experimental import ExperimentalFeatures
231
232
  from .exporter import Exporter
232
233
  from .exceptions import QASM3Error, QASM3ImporterError, QASM3ExporterError
233
- from .._qasm3 import CustomGate, STDGATES_INC_GATES
234
+ from .._accelerate.qasm3 import CustomGate
235
+
236
+
237
+ STDGATES_INC_GATES = (
238
+ CustomGate(library.PhaseGate, "p", 1, 1),
239
+ CustomGate(library.XGate, "x", 0, 1),
240
+ CustomGate(library.YGate, "y", 0, 1),
241
+ CustomGate(library.ZGate, "z", 0, 1),
242
+ CustomGate(library.HGate, "h", 0, 1),
243
+ CustomGate(library.SGate, "s", 0, 1),
244
+ CustomGate(library.SdgGate, "sdg", 0, 1),
245
+ CustomGate(library.TGate, "t", 0, 1),
246
+ CustomGate(library.TdgGate, "tdg", 0, 1),
247
+ CustomGate(library.SXGate, "sx", 0, 1),
248
+ CustomGate(library.RXGate, "rx", 1, 1),
249
+ CustomGate(library.RYGate, "ry", 1, 1),
250
+ CustomGate(library.RZGate, "rz", 1, 1),
251
+ CustomGate(library.CXGate, "cx", 0, 2),
252
+ CustomGate(library.CYGate, "cy", 0, 2),
253
+ CustomGate(library.CZGate, "cz", 0, 2),
254
+ CustomGate(library.CPhaseGate, "cp", 1, 2),
255
+ CustomGate(library.CRXGate, "crx", 1, 2),
256
+ CustomGate(library.CRYGate, "cry", 1, 2),
257
+ CustomGate(library.CRZGate, "crz", 1, 2),
258
+ CustomGate(library.CHGate, "ch", 0, 2),
259
+ CustomGate(library.SwapGate, "swap", 0, 2),
260
+ CustomGate(library.CCXGate, "ccx", 0, 3),
261
+ CustomGate(library.CSwapGate, "cswap", 0, 3),
262
+ CustomGate(library.CUGate, "cu", 4, 2),
263
+ CustomGate(library.CXGate, "CX", 0, 2),
264
+ CustomGate(library.PhaseGate, "phase", 1, 1),
265
+ CustomGate(library.CPhaseGate, "cphase", 1, 2),
266
+ CustomGate(library.IGate, "id", 0, 1),
267
+ CustomGate(library.U1Gate, "u1", 1, 1),
268
+ CustomGate(library.U2Gate, "u2", 2, 1),
269
+ CustomGate(library.U3Gate, "u3", 3, 1),
270
+ )
234
271
 
235
272
 
236
273
  def dumps(circuit, **kwargs) -> str:
qiskit/qasm3/ast.py CHANGED
@@ -123,6 +123,10 @@ class FloatType(ClassicalType, enum.Enum):
123
123
  OCT = 256
124
124
 
125
125
 
126
+ class BoolType(ClassicalType):
127
+ """Type information for a Boolean."""
128
+
129
+
126
130
  class IntType(ClassicalType):
127
131
  """Type information for a signed integer."""
128
132
 
@@ -130,6 +134,13 @@ class IntType(ClassicalType):
130
134
  self.size = size
131
135
 
132
136
 
137
+ class UintType(ClassicalType):
138
+ """Type information for an unsigned integer."""
139
+
140
+ def __init__(self, size: Optional[int] = None):
141
+ self.size = size
142
+
143
+
133
144
  class BitType(ClassicalType):
134
145
  """Type information for a single bit."""
135
146
 
@@ -241,6 +252,8 @@ class Binary(Expression):
241
252
  GREATER_EQUAL = ">="
242
253
  EQUAL = "=="
243
254
  NOT_EQUAL = "!="
255
+ SHIFT_LEFT = "<<"
256
+ SHIFT_RIGHT = ">>"
244
257
 
245
258
  def __init__(self, op: Op, left: Expression, right: Expression):
246
259
  self.op = op
@@ -254,6 +267,12 @@ class Cast(Expression):
254
267
  self.operand = operand
255
268
 
256
269
 
270
+ class Index(Expression):
271
+ def __init__(self, target: Expression, index: Expression):
272
+ self.target = target
273
+ self.index = index
274
+
275
+
257
276
  class IndexSet(ASTNode):
258
277
  """
259
278
  A literal index set of values::