qiskit 1.0.2__cp38-abi3-win32.whl → 1.1.0rc1__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 (247) 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/disassemble.py +5 -6
  6. qiskit/circuit/__init__.py +1131 -169
  7. qiskit/circuit/_classical_resource_map.py +7 -6
  8. qiskit/circuit/_utils.py +18 -8
  9. qiskit/circuit/annotated_operation.py +21 -0
  10. qiskit/circuit/barrier.py +10 -13
  11. qiskit/circuit/bit.py +0 -1
  12. qiskit/circuit/classical/__init__.py +2 -2
  13. qiskit/circuit/classical/expr/__init__.py +39 -5
  14. qiskit/circuit/classical/expr/constructors.py +84 -1
  15. qiskit/circuit/classical/expr/expr.py +83 -13
  16. qiskit/circuit/classical/expr/visitors.py +83 -0
  17. qiskit/circuit/commutation_checker.py +86 -51
  18. qiskit/circuit/controlflow/_builder_utils.py +9 -1
  19. qiskit/circuit/controlflow/break_loop.py +8 -22
  20. qiskit/circuit/controlflow/builder.py +116 -1
  21. qiskit/circuit/controlflow/continue_loop.py +8 -22
  22. qiskit/circuit/controlflow/control_flow.py +47 -8
  23. qiskit/circuit/controlflow/for_loop.py +8 -23
  24. qiskit/circuit/controlflow/if_else.py +13 -27
  25. qiskit/circuit/controlflow/switch_case.py +14 -21
  26. qiskit/circuit/controlflow/while_loop.py +9 -23
  27. qiskit/circuit/controlledgate.py +2 -2
  28. qiskit/circuit/delay.py +7 -5
  29. qiskit/circuit/gate.py +20 -7
  30. qiskit/circuit/instruction.py +31 -30
  31. qiskit/circuit/instructionset.py +9 -22
  32. qiskit/circuit/library/__init__.py +8 -2
  33. qiskit/circuit/library/arithmetic/integer_comparator.py +2 -2
  34. qiskit/circuit/library/arithmetic/quadratic_form.py +3 -2
  35. qiskit/circuit/library/blueprintcircuit.py +29 -7
  36. qiskit/circuit/library/data_preparation/state_preparation.py +6 -5
  37. qiskit/circuit/library/generalized_gates/diagonal.py +5 -4
  38. qiskit/circuit/library/generalized_gates/isometry.py +51 -254
  39. qiskit/circuit/library/generalized_gates/pauli.py +2 -2
  40. qiskit/circuit/library/generalized_gates/permutation.py +4 -1
  41. qiskit/circuit/library/generalized_gates/rv.py +15 -11
  42. qiskit/circuit/library/generalized_gates/uc.py +2 -98
  43. qiskit/circuit/library/generalized_gates/unitary.py +9 -4
  44. qiskit/circuit/library/hamiltonian_gate.py +11 -5
  45. qiskit/circuit/library/n_local/efficient_su2.py +5 -5
  46. qiskit/circuit/library/n_local/n_local.py +100 -49
  47. qiskit/circuit/library/n_local/two_local.py +3 -59
  48. qiskit/circuit/library/overlap.py +3 -3
  49. qiskit/circuit/library/phase_oracle.py +1 -1
  50. qiskit/circuit/library/quantum_volume.py +39 -38
  51. qiskit/circuit/library/standard_gates/equivalence_library.py +50 -0
  52. qiskit/circuit/library/standard_gates/global_phase.py +4 -2
  53. qiskit/circuit/library/standard_gates/i.py +1 -2
  54. qiskit/circuit/library/standard_gates/iswap.py +1 -2
  55. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +11 -5
  56. qiskit/circuit/library/standard_gates/p.py +31 -15
  57. qiskit/circuit/library/standard_gates/r.py +4 -3
  58. qiskit/circuit/library/standard_gates/rx.py +7 -4
  59. qiskit/circuit/library/standard_gates/rxx.py +4 -3
  60. qiskit/circuit/library/standard_gates/ry.py +7 -4
  61. qiskit/circuit/library/standard_gates/ryy.py +4 -3
  62. qiskit/circuit/library/standard_gates/rz.py +7 -4
  63. qiskit/circuit/library/standard_gates/rzx.py +4 -3
  64. qiskit/circuit/library/standard_gates/rzz.py +4 -3
  65. qiskit/circuit/library/standard_gates/s.py +4 -8
  66. qiskit/circuit/library/standard_gates/t.py +2 -4
  67. qiskit/circuit/library/standard_gates/u.py +16 -11
  68. qiskit/circuit/library/standard_gates/u1.py +6 -2
  69. qiskit/circuit/library/standard_gates/u2.py +4 -2
  70. qiskit/circuit/library/standard_gates/u3.py +9 -5
  71. qiskit/circuit/library/standard_gates/x.py +22 -11
  72. qiskit/circuit/library/standard_gates/xx_minus_yy.py +4 -3
  73. qiskit/circuit/library/standard_gates/xx_plus_yy.py +7 -5
  74. qiskit/circuit/library/standard_gates/z.py +1 -2
  75. qiskit/circuit/measure.py +4 -1
  76. qiskit/circuit/operation.py +13 -8
  77. qiskit/circuit/parameter.py +11 -6
  78. qiskit/circuit/quantumcircuit.py +864 -128
  79. qiskit/circuit/quantumcircuitdata.py +2 -2
  80. qiskit/circuit/reset.py +5 -2
  81. qiskit/circuit/store.py +95 -0
  82. qiskit/compiler/assembler.py +22 -22
  83. qiskit/compiler/transpiler.py +63 -112
  84. qiskit/converters/circuit_to_dag.py +7 -0
  85. qiskit/converters/circuit_to_dagdependency_v2.py +47 -0
  86. qiskit/converters/circuit_to_gate.py +2 -0
  87. qiskit/converters/circuit_to_instruction.py +22 -0
  88. qiskit/converters/dag_to_circuit.py +4 -0
  89. qiskit/converters/dag_to_dagdependency_v2.py +44 -0
  90. qiskit/dagcircuit/collect_blocks.py +15 -10
  91. qiskit/dagcircuit/dagcircuit.py +434 -124
  92. qiskit/dagcircuit/dagdependency.py +19 -12
  93. qiskit/dagcircuit/dagdependency_v2.py +641 -0
  94. qiskit/dagcircuit/dagdepnode.py +19 -16
  95. qiskit/dagcircuit/dagnode.py +14 -4
  96. qiskit/primitives/__init__.py +12 -8
  97. qiskit/primitives/backend_estimator.py +3 -5
  98. qiskit/primitives/backend_estimator_v2.py +410 -0
  99. qiskit/primitives/backend_sampler_v2.py +287 -0
  100. qiskit/primitives/base/base_estimator.py +4 -9
  101. qiskit/primitives/base/base_sampler.py +2 -2
  102. qiskit/primitives/containers/__init__.py +5 -4
  103. qiskit/primitives/containers/bit_array.py +292 -2
  104. qiskit/primitives/containers/data_bin.py +123 -50
  105. qiskit/primitives/containers/estimator_pub.py +10 -3
  106. qiskit/primitives/containers/observables_array.py +2 -2
  107. qiskit/primitives/containers/pub_result.py +1 -1
  108. qiskit/primitives/containers/sampler_pub.py +19 -3
  109. qiskit/primitives/containers/sampler_pub_result.py +74 -0
  110. qiskit/primitives/containers/shape.py +1 -1
  111. qiskit/primitives/statevector_estimator.py +4 -4
  112. qiskit/primitives/statevector_sampler.py +7 -12
  113. qiskit/providers/__init__.py +17 -18
  114. qiskit/providers/backend.py +2 -2
  115. qiskit/providers/backend_compat.py +8 -10
  116. qiskit/providers/basic_provider/basic_provider_tools.py +67 -31
  117. qiskit/providers/basic_provider/basic_simulator.py +81 -21
  118. qiskit/providers/fake_provider/fake_1q.py +1 -1
  119. qiskit/providers/fake_provider/fake_backend.py +3 -408
  120. qiskit/providers/fake_provider/generic_backend_v2.py +26 -14
  121. qiskit/providers/provider.py +16 -0
  122. qiskit/pulse/builder.py +4 -1
  123. qiskit/pulse/parameter_manager.py +60 -4
  124. qiskit/pulse/schedule.py +29 -13
  125. qiskit/pulse/utils.py +61 -20
  126. qiskit/qasm2/__init__.py +1 -5
  127. qiskit/qasm2/parse.py +1 -4
  128. qiskit/qasm3/__init__.py +42 -5
  129. qiskit/qasm3/ast.py +19 -0
  130. qiskit/qasm3/exporter.py +178 -106
  131. qiskit/qasm3/printer.py +27 -5
  132. qiskit/qpy/__init__.py +247 -13
  133. qiskit/qpy/binary_io/circuits.py +216 -47
  134. qiskit/qpy/binary_io/schedules.py +42 -36
  135. qiskit/qpy/binary_io/value.py +201 -22
  136. qiskit/qpy/common.py +1 -1
  137. qiskit/qpy/exceptions.py +20 -0
  138. qiskit/qpy/formats.py +29 -0
  139. qiskit/qpy/type_keys.py +21 -0
  140. qiskit/quantum_info/analysis/distance.py +3 -3
  141. qiskit/quantum_info/analysis/make_observable.py +2 -1
  142. qiskit/quantum_info/analysis/z2_symmetries.py +2 -1
  143. qiskit/quantum_info/operators/channel/chi.py +9 -8
  144. qiskit/quantum_info/operators/channel/choi.py +10 -9
  145. qiskit/quantum_info/operators/channel/kraus.py +2 -1
  146. qiskit/quantum_info/operators/channel/ptm.py +10 -9
  147. qiskit/quantum_info/operators/channel/quantum_channel.py +2 -1
  148. qiskit/quantum_info/operators/channel/stinespring.py +2 -1
  149. qiskit/quantum_info/operators/channel/superop.py +12 -11
  150. qiskit/quantum_info/operators/channel/transformations.py +12 -11
  151. qiskit/quantum_info/operators/dihedral/dihedral.py +5 -4
  152. qiskit/quantum_info/operators/operator.py +43 -30
  153. qiskit/quantum_info/operators/scalar_op.py +10 -9
  154. qiskit/quantum_info/operators/symplectic/base_pauli.py +70 -59
  155. qiskit/quantum_info/operators/symplectic/clifford.py +36 -9
  156. qiskit/quantum_info/operators/symplectic/pauli.py +48 -4
  157. qiskit/quantum_info/operators/symplectic/pauli_list.py +36 -14
  158. qiskit/quantum_info/operators/symplectic/random.py +3 -2
  159. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +54 -33
  160. qiskit/quantum_info/states/densitymatrix.py +13 -13
  161. qiskit/quantum_info/states/stabilizerstate.py +3 -3
  162. qiskit/quantum_info/states/statevector.py +14 -13
  163. qiskit/quantum_info/states/utils.py +5 -3
  164. qiskit/result/mitigation/correlated_readout_mitigator.py +3 -2
  165. qiskit/result/mitigation/local_readout_mitigator.py +2 -1
  166. qiskit/result/mitigation/utils.py +3 -2
  167. qiskit/synthesis/__init__.py +2 -0
  168. qiskit/synthesis/discrete_basis/commutator_decompose.py +2 -2
  169. qiskit/synthesis/evolution/lie_trotter.py +7 -14
  170. qiskit/synthesis/evolution/qdrift.py +3 -4
  171. qiskit/synthesis/linear/cnot_synth.py +1 -3
  172. qiskit/synthesis/linear/linear_circuits_utils.py +1 -1
  173. qiskit/synthesis/linear_phase/cz_depth_lnn.py +4 -18
  174. qiskit/synthesis/permutation/__init__.py +1 -0
  175. qiskit/synthesis/permutation/permutation_reverse_lnn.py +90 -0
  176. qiskit/synthesis/qft/qft_decompose_lnn.py +2 -6
  177. qiskit/synthesis/two_qubit/two_qubit_decompose.py +165 -954
  178. qiskit/synthesis/two_qubit/xx_decompose/circuits.py +13 -12
  179. qiskit/synthesis/two_qubit/xx_decompose/decomposer.py +7 -1
  180. qiskit/synthesis/unitary/aqc/__init__.py +1 -1
  181. qiskit/synthesis/unitary/aqc/cnot_structures.py +2 -1
  182. qiskit/synthesis/unitary/aqc/fast_gradient/fast_gradient.py +2 -1
  183. qiskit/synthesis/unitary/qsd.py +3 -2
  184. qiskit/transpiler/__init__.py +7 -3
  185. qiskit/transpiler/layout.py +140 -61
  186. qiskit/transpiler/passes/__init__.py +6 -0
  187. qiskit/transpiler/passes/basis/basis_translator.py +7 -2
  188. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
  189. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +1 -1
  190. qiskit/transpiler/passes/calibration/rzx_builder.py +2 -1
  191. qiskit/transpiler/passes/layout/apply_layout.py +8 -3
  192. qiskit/transpiler/passes/layout/sabre_layout.py +15 -3
  193. qiskit/transpiler/passes/layout/set_layout.py +1 -1
  194. qiskit/transpiler/passes/optimization/__init__.py +2 -0
  195. qiskit/transpiler/passes/optimization/commutation_analysis.py +2 -2
  196. qiskit/transpiler/passes/optimization/commutative_cancellation.py +1 -1
  197. qiskit/transpiler/passes/optimization/consolidate_blocks.py +1 -1
  198. qiskit/transpiler/passes/optimization/cx_cancellation.py +10 -0
  199. qiskit/transpiler/passes/optimization/elide_permutations.py +114 -0
  200. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +9 -3
  201. qiskit/transpiler/passes/optimization/optimize_annotated.py +248 -12
  202. qiskit/transpiler/passes/optimization/remove_final_reset.py +37 -0
  203. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +1 -3
  204. qiskit/transpiler/passes/routing/__init__.py +1 -0
  205. qiskit/transpiler/passes/routing/basic_swap.py +13 -2
  206. qiskit/transpiler/passes/routing/lookahead_swap.py +7 -1
  207. qiskit/transpiler/passes/routing/sabre_swap.py +10 -6
  208. qiskit/transpiler/passes/routing/star_prerouting.py +417 -0
  209. qiskit/transpiler/passes/routing/stochastic_swap.py +24 -8
  210. qiskit/transpiler/passes/scheduling/__init__.py +1 -1
  211. qiskit/transpiler/passes/scheduling/alap.py +1 -2
  212. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +1 -2
  213. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +9 -6
  214. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +8 -0
  215. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +13 -4
  216. qiskit/transpiler/passes/scheduling/asap.py +1 -2
  217. qiskit/transpiler/passes/scheduling/base_scheduler.py +21 -2
  218. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +26 -4
  219. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +24 -2
  220. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +28 -4
  221. qiskit/transpiler/passes/synthesis/aqc_plugin.py +2 -2
  222. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +120 -13
  223. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +162 -55
  224. qiskit/transpiler/passes/utils/gates_basis.py +3 -3
  225. qiskit/transpiler/passmanager.py +44 -1
  226. qiskit/transpiler/preset_passmanagers/__init__.py +3 -3
  227. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +34 -16
  228. qiskit/transpiler/preset_passmanagers/common.py +4 -6
  229. qiskit/transpiler/preset_passmanagers/plugin.py +9 -1
  230. qiskit/utils/optionals.py +6 -2
  231. qiskit/visualization/array.py +1 -1
  232. qiskit/visualization/bloch.py +2 -3
  233. qiskit/visualization/circuit/matplotlib.py +44 -14
  234. qiskit/visualization/circuit/text.py +38 -18
  235. qiskit/visualization/counts_visualization.py +3 -6
  236. qiskit/visualization/dag_visualization.py +6 -7
  237. qiskit/visualization/pulse_v2/interface.py +8 -3
  238. qiskit/visualization/state_visualization.py +3 -2
  239. qiskit/visualization/timeline/interface.py +18 -8
  240. {qiskit-1.0.2.dist-info → qiskit-1.1.0rc1.dist-info}/METADATA +12 -8
  241. {qiskit-1.0.2.dist-info → qiskit-1.1.0rc1.dist-info}/RECORD +245 -235
  242. {qiskit-1.0.2.dist-info → qiskit-1.1.0rc1.dist-info}/WHEEL +1 -1
  243. qiskit/_qasm2.pyd +0 -0
  244. qiskit/_qasm3.pyd +0 -0
  245. {qiskit-1.0.2.dist-info → qiskit-1.1.0rc1.dist-info}/LICENSE.txt +0 -0
  246. {qiskit-1.0.2.dist-info → qiskit-1.1.0rc1.dist-info}/entry_points.txt +0 -0
  247. {qiskit-1.0.2.dist-info → qiskit-1.1.0rc1.dist-info}/top_level.txt +0 -0
@@ -23,7 +23,30 @@ import qiskit.circuit.library.standard_gates as gates
23
23
  from qiskit.exceptions import QiskitError
24
24
 
25
25
  # Single qubit gates supported by ``single_gate_params``.
26
- SINGLE_QUBIT_GATES = ("U", "u", "h", "p", "u1", "u2", "u3", "rz", "sx", "x")
26
+ SINGLE_QUBIT_GATES = {
27
+ "U": gates.UGate,
28
+ "u": gates.UGate,
29
+ "u1": gates.U1Gate,
30
+ "u2": gates.U2Gate,
31
+ "u3": gates.U3Gate,
32
+ "h": gates.HGate,
33
+ "p": gates.PhaseGate,
34
+ "s": gates.SGate,
35
+ "sdg": gates.SdgGate,
36
+ "sx": gates.SXGate,
37
+ "sxdg": gates.SXdgGate,
38
+ "t": gates.TGate,
39
+ "tdg": gates.TdgGate,
40
+ "x": gates.XGate,
41
+ "y": gates.YGate,
42
+ "z": gates.ZGate,
43
+ "id": gates.IGate,
44
+ "i": gates.IGate,
45
+ "r": gates.RGate,
46
+ "rx": gates.RXGate,
47
+ "ry": gates.RYGate,
48
+ "rz": gates.RZGate,
49
+ }
27
50
 
28
51
 
29
52
  def single_gate_matrix(gate: str, params: list[float] | None = None) -> np.ndarray:
@@ -40,42 +63,55 @@ def single_gate_matrix(gate: str, params: list[float] | None = None) -> np.ndarr
40
63
  """
41
64
  if params is None:
42
65
  params = []
43
-
44
- if gate == "U":
45
- gc = gates.UGate
46
- elif gate == "u3":
47
- gc = gates.U3Gate
48
- elif gate == "h":
49
- gc = gates.HGate
50
- elif gate == "u":
51
- gc = gates.UGate
52
- elif gate == "p":
53
- gc = gates.PhaseGate
54
- elif gate == "u2":
55
- gc = gates.U2Gate
56
- elif gate == "u1":
57
- gc = gates.U1Gate
58
- elif gate == "rz":
59
- gc = gates.RZGate
60
- elif gate == "id":
61
- gc = gates.IGate
62
- elif gate == "sx":
63
- gc = gates.SXGate
64
- elif gate == "x":
65
- gc = gates.XGate
66
+ if gate in SINGLE_QUBIT_GATES:
67
+ gc = SINGLE_QUBIT_GATES[gate]
66
68
  else:
67
69
  raise QiskitError("Gate is not a valid basis gate for this simulator: %s" % gate)
68
70
 
69
71
  return gc(*params).to_matrix()
70
72
 
71
73
 
72
- # Cache CX matrix as no parameters.
73
- _CX_MATRIX = gates.CXGate().to_matrix()
74
-
75
-
76
- def cx_gate_matrix() -> np.ndarray:
77
- """Get the matrix for a controlled-NOT gate."""
78
- return _CX_MATRIX
74
+ # Two qubit gates WITHOUT parameters: name -> matrix
75
+ TWO_QUBIT_GATES = {
76
+ "CX": gates.CXGate().to_matrix(),
77
+ "cx": gates.CXGate().to_matrix(),
78
+ "ecr": gates.ECRGate().to_matrix(),
79
+ "cy": gates.CYGate().to_matrix(),
80
+ "cz": gates.CZGate().to_matrix(),
81
+ "swap": gates.SwapGate().to_matrix(),
82
+ "iswap": gates.iSwapGate().to_matrix(),
83
+ "ch": gates.CHGate().to_matrix(),
84
+ "cs": gates.CSGate().to_matrix(),
85
+ "csdg": gates.CSdgGate().to_matrix(),
86
+ "csx": gates.CSXGate().to_matrix(),
87
+ "dcx": gates.DCXGate().to_matrix(),
88
+ }
89
+
90
+ # Two qubit gates WITH parameters: name -> class
91
+ TWO_QUBIT_GATES_WITH_PARAMETERS = {
92
+ "cp": gates.CPhaseGate,
93
+ "crx": gates.CRXGate,
94
+ "cry": gates.CRYGate,
95
+ "crz": gates.CRZGate,
96
+ "cu": gates.CUGate,
97
+ "cu1": gates.CU1Gate,
98
+ "cu3": gates.CU3Gate,
99
+ "rxx": gates.RXXGate,
100
+ "ryy": gates.RYYGate,
101
+ "rzz": gates.RZZGate,
102
+ "rzx": gates.RZXGate,
103
+ "xx_minus_yy": gates.XXMinusYYGate,
104
+ "xx_plus_yy": gates.XXPlusYYGate,
105
+ }
106
+
107
+
108
+ # Three qubit gates: name -> matrix
109
+ THREE_QUBIT_GATES = {
110
+ "ccx": gates.CCXGate().to_matrix(),
111
+ "ccz": gates.CCZGate().to_matrix(),
112
+ "rccx": gates.RCCXGate().to_matrix(),
113
+ "cswap": gates.CSwapGate().to_matrix(),
114
+ }
79
115
 
80
116
 
81
117
  def einsum_matmul_index(gate_indices: list[int], number_of_qubits: int) -> str:
@@ -29,6 +29,7 @@ field, which is a result of measurements for each shot.
29
29
 
30
30
  from __future__ import annotations
31
31
 
32
+ import math
32
33
  import uuid
33
34
  import time
34
35
  import logging
@@ -39,7 +40,7 @@ import numpy as np
39
40
 
40
41
  from qiskit.circuit import QuantumCircuit
41
42
  from qiskit.circuit.library import UnitaryGate
42
- from qiskit.circuit.library.standard_gates import get_standard_gate_name_mapping
43
+ from qiskit.circuit.library.standard_gates import get_standard_gate_name_mapping, GlobalPhaseGate
43
44
  from qiskit.providers import Provider
44
45
  from qiskit.providers.backend import BackendV2
45
46
  from qiskit.providers.models import BackendConfiguration
@@ -50,8 +51,12 @@ from qiskit.transpiler import Target
50
51
 
51
52
  from .basic_provider_job import BasicProviderJob
52
53
  from .basic_provider_tools import single_gate_matrix
53
- from .basic_provider_tools import SINGLE_QUBIT_GATES
54
- from .basic_provider_tools import cx_gate_matrix
54
+ from .basic_provider_tools import (
55
+ SINGLE_QUBIT_GATES,
56
+ TWO_QUBIT_GATES,
57
+ TWO_QUBIT_GATES_WITH_PARAMETERS,
58
+ THREE_QUBIT_GATES,
59
+ )
55
60
  from .basic_provider_tools import einsum_vecmul_index
56
61
  from .exceptions import BasicProviderError
57
62
 
@@ -137,21 +142,59 @@ class BasicSimulator(BackendV2):
137
142
  num_qubits=None,
138
143
  )
139
144
  basis_gates = [
145
+ "ccx",
146
+ "ccz",
147
+ "ch",
148
+ "cp",
149
+ "crx",
150
+ "cry",
151
+ "crz",
152
+ "cs",
153
+ "csdg",
154
+ "cswap",
155
+ "csx",
156
+ "cu",
157
+ "cu1",
158
+ "cu3",
159
+ "cx",
160
+ "cy",
161
+ "cz",
162
+ "dcx",
163
+ "delay",
164
+ "ecr",
165
+ "global_phase",
140
166
  "h",
141
- "u",
167
+ "id",
168
+ "iswap",
169
+ "measure",
142
170
  "p",
171
+ "r",
172
+ "rccx",
173
+ "reset",
174
+ "rx",
175
+ "rxx",
176
+ "ry",
177
+ "ryy",
178
+ "rz",
179
+ "rzx",
180
+ "rzz",
181
+ "s",
182
+ "sdg",
183
+ "swap",
184
+ "sx",
185
+ "sxdg",
186
+ "t",
187
+ "tdg",
188
+ "u",
143
189
  "u1",
144
190
  "u2",
145
191
  "u3",
146
- "rz",
147
- "sx",
148
- "x",
149
- "cx",
150
- "id",
151
192
  "unitary",
152
- "measure",
153
- "delay",
154
- "reset",
193
+ "x",
194
+ "xx_minus_yy",
195
+ "xx_plus_yy",
196
+ "y",
197
+ "z",
155
198
  ]
156
199
  inst_mapping = get_standard_gate_name_mapping()
157
200
  for name in basis_gates:
@@ -331,9 +374,9 @@ class BasicSimulator(BackendV2):
331
374
 
332
375
  # update quantum state
333
376
  if outcome == "0":
334
- update_diag = [[1 / np.sqrt(probability), 0], [0, 0]]
377
+ update_diag = [[1 / math.sqrt(probability), 0], [0, 0]]
335
378
  else:
336
- update_diag = [[0, 0], [0, 1 / np.sqrt(probability)]]
379
+ update_diag = [[0, 0], [0, 1 / math.sqrt(probability)]]
337
380
  # update classical state
338
381
  self._add_unitary(update_diag, [qubit])
339
382
 
@@ -351,10 +394,10 @@ class BasicSimulator(BackendV2):
351
394
  outcome, probability = self._get_measure_outcome(qubit)
352
395
  # update quantum state
353
396
  if outcome == "0":
354
- update = [[1 / np.sqrt(probability), 0], [0, 0]]
397
+ update = [[1 / math.sqrt(probability), 0], [0, 0]]
355
398
  self._add_unitary(update, [qubit])
356
399
  else:
357
- update = [[0, 1 / np.sqrt(probability)], [0, 0]]
400
+ update = [[0, 1 / math.sqrt(probability)], [0, 0]]
358
401
  self._add_unitary(update, [qubit])
359
402
 
360
403
  def _validate_initial_statevector(self) -> None:
@@ -478,7 +521,7 @@ class BasicSimulator(BackendV2):
478
521
  Example::
479
522
 
480
523
  backend_options = {
481
- "initial_statevector": np.array([1, 0, 0, 1j]) / np.sqrt(2),
524
+ "initial_statevector": np.array([1, 0, 0, 1j]) / math.sqrt(2),
482
525
  }
483
526
  """
484
527
  # TODO: replace assemble with new run flow
@@ -616,24 +659,41 @@ class BasicSimulator(BackendV2):
616
659
  value >>= 1
617
660
  if value != int(operation.conditional.val, 16):
618
661
  continue
619
- # Check if single gate
620
662
  if operation.name == "unitary":
621
663
  qubits = operation.qubits
622
664
  gate = operation.params[0]
623
665
  self._add_unitary(gate, qubits)
666
+ elif operation.name in ("id", "u0", "delay"):
667
+ pass
668
+ elif operation.name == "global_phase":
669
+ params = getattr(operation, "params", None)
670
+ gate = GlobalPhaseGate(*params).to_matrix()
671
+ self._add_unitary(gate, [])
672
+ # Check if single qubit gate
624
673
  elif operation.name in SINGLE_QUBIT_GATES:
625
674
  params = getattr(operation, "params", None)
626
675
  qubit = operation.qubits[0]
627
676
  gate = single_gate_matrix(operation.name, params)
628
677
  self._add_unitary(gate, [qubit])
629
- # Check if CX gate
678
+ elif operation.name in TWO_QUBIT_GATES_WITH_PARAMETERS:
679
+ params = getattr(operation, "params", None)
680
+ qubit0 = operation.qubits[0]
681
+ qubit1 = operation.qubits[1]
682
+ gate = TWO_QUBIT_GATES_WITH_PARAMETERS[operation.name](*params).to_matrix()
683
+ self._add_unitary(gate, [qubit0, qubit1])
630
684
  elif operation.name in ("id", "u0"):
631
685
  pass
632
- elif operation.name in ("CX", "cx"):
686
+ elif operation.name in TWO_QUBIT_GATES:
633
687
  qubit0 = operation.qubits[0]
634
688
  qubit1 = operation.qubits[1]
635
- gate = cx_gate_matrix()
689
+ gate = TWO_QUBIT_GATES[operation.name]
636
690
  self._add_unitary(gate, [qubit0, qubit1])
691
+ elif operation.name in THREE_QUBIT_GATES:
692
+ qubit0 = operation.qubits[0]
693
+ qubit1 = operation.qubits[1]
694
+ qubit2 = operation.qubits[2]
695
+ gate = THREE_QUBIT_GATES[operation.name]
696
+ self._add_unitary(gate, [qubit0, qubit1, qubit2])
637
697
  # Check if reset
638
698
  elif operation.name == "reset":
639
699
  qubit = operation.qubits[0]
@@ -32,7 +32,7 @@ class Fake1Q(FakeBackend):
32
32
  configuration = BackendProperties(
33
33
  backend_name="fake_1q",
34
34
  backend_version="0.0.0",
35
- n_qubits=1,
35
+ num_qubits=1,
36
36
  basis_gates=["u1", "u2", "u3", "cx"],
37
37
  simulator=False,
38
38
  local=True,