qiskit 1.2.0__cp38-abi3-macosx_10_9_universal2.whl → 1.2.0rc1__cp38-abi3-macosx_10_9_universal2.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.
- qiskit/VERSION.txt +1 -1
- qiskit/_accelerate.abi3.so +0 -0
- qiskit/circuit/__init__.py +2 -5
- qiskit/circuit/quantumcircuit.py +4 -4
- qiskit/compiler/transpiler.py +1 -1
- qiskit/providers/basic_provider/basic_simulator.py +1 -1
- qiskit/providers/fake_provider/fake_openpulse_2q.py +3 -3
- qiskit/providers/fake_provider/fake_openpulse_3q.py +3 -2
- qiskit/providers/fake_provider/fake_pulse_backend.py +1 -2
- qiskit/providers/fake_provider/fake_qasm_backend.py +1 -2
- qiskit/providers/fake_provider/generic_backend_v2.py +18 -434
- qiskit/providers/models/__init__.py +21 -47
- qiskit/qasm3/exporter.py +1 -7
- qiskit/qpy/__init__.py +1 -1
- qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +1 -1
- qiskit/transpiler/passes/basis/basis_translator.py +1 -2
- qiskit/transpiler/passes/optimization/consolidate_blocks.py +1 -7
- qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +1 -1
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +3 -9
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +1 -1
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +54 -10
- qiskit/visualization/bloch.py +1 -44
- qiskit/visualization/dag_visualization.py +3 -10
- {qiskit-1.2.0.dist-info → qiskit-1.2.0rc1.dist-info}/METADATA +20 -20
- {qiskit-1.2.0.dist-info → qiskit-1.2.0rc1.dist-info}/RECORD +29 -29
- {qiskit-1.2.0.dist-info → qiskit-1.2.0rc1.dist-info}/WHEEL +1 -1
- {qiskit-1.2.0.dist-info → qiskit-1.2.0rc1.dist-info}/LICENSE.txt +0 -0
- {qiskit-1.2.0.dist-info → qiskit-1.2.0rc1.dist-info}/entry_points.txt +0 -0
- {qiskit-1.2.0.dist-info → qiskit-1.2.0rc1.dist-info}/top_level.txt +0 -0
@@ -38,52 +38,26 @@ Classes
|
|
38
38
|
GateProperties
|
39
39
|
Nduv
|
40
40
|
"""
|
41
|
-
# pylint: disable=undefined-all-variable
|
42
|
-
__all__ = [
|
43
|
-
"BackendConfiguration",
|
44
|
-
"PulseBackendConfiguration",
|
45
|
-
"QasmBackendConfiguration",
|
46
|
-
"UchannelLO",
|
47
|
-
"GateConfig",
|
48
|
-
"BackendProperties",
|
49
|
-
"GateProperties",
|
50
|
-
"Nduv",
|
51
|
-
"BackendStatus",
|
52
|
-
"JobStatus",
|
53
|
-
"PulseDefaults",
|
54
|
-
"Command",
|
55
|
-
]
|
56
|
-
|
57
|
-
import importlib
|
58
41
|
import warnings
|
59
42
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
"
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
"qiskit.providers.models is deprecated since Qiskit 1.2 and will be "
|
82
|
-
"removed in Qiskit 2.0. With the removal of Qobj, there is no need for these "
|
83
|
-
"schema-conformant objects. If you still need to use them, it could be because "
|
84
|
-
"you are using a BackendV1, which is also deprecated in favor of BackendV2.",
|
85
|
-
DeprecationWarning,
|
86
|
-
stacklevel=2,
|
87
|
-
)
|
88
|
-
return getattr(importlib.import_module(module_name), name)
|
89
|
-
raise AttributeError(f"module 'qiskit.providers.models' has no attribute '{name}'")
|
43
|
+
from .backendconfiguration import (
|
44
|
+
BackendConfiguration,
|
45
|
+
PulseBackendConfiguration,
|
46
|
+
QasmBackendConfiguration,
|
47
|
+
UchannelLO,
|
48
|
+
GateConfig,
|
49
|
+
)
|
50
|
+
from .backendproperties import BackendProperties, GateProperties, Nduv
|
51
|
+
from .backendstatus import BackendStatus
|
52
|
+
from .jobstatus import JobStatus
|
53
|
+
from .pulsedefaults import PulseDefaults, Command
|
54
|
+
|
55
|
+
|
56
|
+
warnings.warn(
|
57
|
+
"qiskit.providers.models is deprecated since Qiskit 1.2 and will be removed in Qiskit 2.0."
|
58
|
+
"With the removal of Qobj, there is no need for these schema-conformant objects. If you still need"
|
59
|
+
"to use them, it could be because you are using a BackendV1, which is also deprecated in favor"
|
60
|
+
"of BackendV2",
|
61
|
+
DeprecationWarning,
|
62
|
+
2,
|
63
|
+
)
|
qiskit/qasm3/exporter.py
CHANGED
@@ -626,13 +626,7 @@ class QASM3Builder:
|
|
626
626
|
if builtin in _BUILTIN_GATES:
|
627
627
|
# It's built into the langauge; we don't need to re-add it.
|
628
628
|
continue
|
629
|
-
|
630
|
-
self.symbols.register_gate_without_definition(builtin, None)
|
631
|
-
except QASM3ExporterError as exc:
|
632
|
-
raise QASM3ExporterError(
|
633
|
-
f"Cannot use '{builtin}' as a basis gate for the reason in the prior exception."
|
634
|
-
" Consider renaming the gate if needed, or omitting this basis gate if not."
|
635
|
-
) from exc
|
629
|
+
self.symbols.register_gate_without_definition(builtin, None)
|
636
630
|
|
637
631
|
header = ast.Header(ast.Version("3.0"), list(self.build_includes()))
|
638
632
|
|
qiskit/qpy/__init__.py
CHANGED
@@ -774,7 +774,7 @@ In addition, new payload MAP_ITEM is defined to implement the :ref:`qpy_mapping`
|
|
774
774
|
|
775
775
|
With the support of :class:`.~ScheduleBlock`, now :class:`~.QuantumCircuit` can be
|
776
776
|
serialized together with :attr:`~.QuantumCircuit.calibrations`, or
|
777
|
-
`Pulse Gates <https://docs.quantum.ibm.com/
|
777
|
+
`Pulse Gates <https://docs.quantum.ibm.com/build/pulse>`_.
|
778
778
|
In QPY version 5 and above, :ref:`qpy_circuit_calibrations` payload is
|
779
779
|
packed after the :ref:`qpy_instructions` block.
|
780
780
|
|
@@ -937,7 +937,7 @@ class SparsePauliOp(LinearOp):
|
|
937
937
|
array (the default).
|
938
938
|
force_serial: if ``True``, use an unthreaded implementation, regardless of the state of
|
939
939
|
the `Qiskit threading-control environment variables
|
940
|
-
<https://docs.quantum.ibm.com/
|
940
|
+
<https://docs.quantum.ibm.com/start/configure-qiskit-local#environment-variables>`__.
|
941
941
|
By default, this will use threaded parallelism over the available CPUs.
|
942
942
|
|
943
943
|
Returns:
|
@@ -162,8 +162,7 @@ class BasisTranslator(TransformationPass):
|
|
162
162
|
# If the source basis is a subset of the target basis and we have no circuit
|
163
163
|
# instructions on qargs that have non-global operations there is nothing to
|
164
164
|
# translate and we can exit early.
|
165
|
-
|
166
|
-
if source_basis_names.issubset(target_basis) and not qargs_local_source_basis:
|
165
|
+
if source_basis.issubset(target_basis) and not qargs_local_source_basis:
|
167
166
|
return dag
|
168
167
|
|
169
168
|
logger.info(
|
@@ -28,7 +28,6 @@ from qiskit.transpiler.passmanager import PassManager
|
|
28
28
|
from qiskit.transpiler.passes.synthesis import unitary_synthesis
|
29
29
|
from qiskit.circuit.controlflow import CONTROL_FLOW_OP_NAMES
|
30
30
|
from qiskit._accelerate.convert_2q_block_matrix import blocks_to_matrix
|
31
|
-
from qiskit.exceptions import QiskitError
|
32
31
|
|
33
32
|
from .collect_1q_runs import Collect1qRuns
|
34
33
|
from .collect_2q_blocks import Collect2qBlocks
|
@@ -126,12 +125,7 @@ class ConsolidateBlocks(TransformationPass):
|
|
126
125
|
qc.append(nd.op, [q[block_index_map[i]] for i in nd.qargs])
|
127
126
|
unitary = UnitaryGate(Operator(qc), check_input=False)
|
128
127
|
else:
|
129
|
-
|
130
|
-
matrix = blocks_to_matrix(block, block_index_map)
|
131
|
-
except QiskitError:
|
132
|
-
# If building a matrix for the block fails we should not consolidate it
|
133
|
-
# because there is nothing we can do with it.
|
134
|
-
continue
|
128
|
+
matrix = blocks_to_matrix(block, block_index_map)
|
135
129
|
unitary = UnitaryGate(matrix, check_input=False)
|
136
130
|
|
137
131
|
max_2q_depth = 20 # If depth > 20, there will be 1q gates to consolidate.
|
@@ -31,7 +31,7 @@ class ValidatePulseGates(AnalysisPass):
|
|
31
31
|
|
32
32
|
In Qiskit SDK, we can define the pulse-level implementation of custom quantum gate
|
33
33
|
instructions, as a `pulse gate
|
34
|
-
<https://docs.quantum.ibm.com/
|
34
|
+
<https://docs.quantum.ibm.com/build/pulse>`__,
|
35
35
|
thus user gates should satisfy all waveform memory constraints imposed by the backend.
|
36
36
|
|
37
37
|
This pass validates all attached calibration entries and raises ``TranspilerError`` to
|
@@ -20,7 +20,7 @@ from qiskit.circuit import Gate, ParameterExpression, Qubit
|
|
20
20
|
from qiskit.circuit.delay import Delay
|
21
21
|
from qiskit.circuit.library.standard_gates import IGate, UGate, U3Gate
|
22
22
|
from qiskit.circuit.reset import Reset
|
23
|
-
from qiskit.dagcircuit import DAGCircuit, DAGNode, DAGInNode, DAGOpNode
|
23
|
+
from qiskit.dagcircuit import DAGCircuit, DAGNode, DAGInNode, DAGOpNode
|
24
24
|
from qiskit.quantum_info.operators.predicates import matrix_equal
|
25
25
|
from qiskit.synthesis.one_qubit import OneQubitEulerDecomposer
|
26
26
|
from qiskit.transpiler.exceptions import TranspilerError
|
@@ -331,7 +331,8 @@ class PadDynamicalDecoupling(BasePadding):
|
|
331
331
|
if time_interval % self._alignment != 0:
|
332
332
|
raise TranspilerError(
|
333
333
|
f"Time interval {time_interval} is not divisible by alignment {self._alignment} "
|
334
|
-
f"between {
|
334
|
+
f"between DAGNode {prev_node.name} on qargs {prev_node.qargs} and {next_node.name} "
|
335
|
+
f"on qargs {next_node.qargs}."
|
335
336
|
)
|
336
337
|
|
337
338
|
if not self.__is_dd_qubit(dag.qubits.index(qubit)):
|
@@ -429,10 +430,3 @@ class PadDynamicalDecoupling(BasePadding):
|
|
429
430
|
else:
|
430
431
|
params.append(p)
|
431
432
|
return tuple(params)
|
432
|
-
|
433
|
-
|
434
|
-
def _format_node(node: DAGNode) -> str:
|
435
|
-
"""Util to format the DAGNode, DAGInNode, and DAGOutNode."""
|
436
|
-
if isinstance(node, (DAGInNode, DAGOutNode)):
|
437
|
-
return f"{node.__class__.__name__} on qarg {node.wire}"
|
438
|
-
return f"DAGNode {node.name} on qargs {node.qargs}"
|
@@ -54,7 +54,7 @@ from qiskit.circuit.library.standard_gates import (
|
|
54
54
|
from qiskit.converters import circuit_to_dag, dag_to_circuit
|
55
55
|
from qiskit.dagcircuit.dagcircuit import DAGCircuit, DAGOpNode
|
56
56
|
from qiskit.exceptions import QiskitError
|
57
|
-
from qiskit.providers.models
|
57
|
+
from qiskit.providers.models import BackendProperties
|
58
58
|
from qiskit.quantum_info import Operator
|
59
59
|
from qiskit.synthesis.one_qubit import one_qubit_decompose
|
60
60
|
from qiskit.synthesis.two_qubit.xx_decompose import XXDecomposer, XXEmbodiments
|
@@ -14,6 +14,7 @@
|
|
14
14
|
|
15
15
|
import os
|
16
16
|
|
17
|
+
from qiskit.circuit import Instruction
|
17
18
|
from qiskit.transpiler.passes.optimization.split_2q_unitaries import Split2QUnitaries
|
18
19
|
from qiskit.transpiler.passmanager import PassManager
|
19
20
|
from qiskit.transpiler.exceptions import TranspilerError
|
@@ -65,6 +66,7 @@ from qiskit.circuit.library.standard_gates import (
|
|
65
66
|
CYGate,
|
66
67
|
SXGate,
|
67
68
|
SXdgGate,
|
69
|
+
get_standard_gate_name_mapping,
|
68
70
|
)
|
69
71
|
from qiskit.utils.parallel import CPU_COUNT
|
70
72
|
from qiskit import user_config
|
@@ -171,16 +173,58 @@ class DefaultInitPassManager(PassManagerStagePlugin):
|
|
171
173
|
)
|
172
174
|
)
|
173
175
|
init.append(CommutativeCancellation())
|
174
|
-
|
175
|
-
|
176
|
-
#
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
176
|
+
# skip peephole optimization before routing if target basis gate set is discrete,
|
177
|
+
# i.e. only consists of Cliffords that an user might want to keep
|
178
|
+
# use rz, sx, x, cx as basis, rely on physical optimziation to fix everything later one
|
179
|
+
stdgates = get_standard_gate_name_mapping()
|
180
|
+
|
181
|
+
def _is_one_op_non_discrete(ops):
|
182
|
+
"""Checks if one operation in `ops` is not discrete, i.e. is parameterizable
|
183
|
+
Args:
|
184
|
+
ops (List(Operation)): list of operations to check
|
185
|
+
Returns
|
186
|
+
True if at least one operation in `ops` is not discrete, False otherwise
|
187
|
+
"""
|
188
|
+
found_one_continuous_gate = False
|
189
|
+
for op in ops:
|
190
|
+
if isinstance(op, str):
|
191
|
+
if op in _discrete_skipped_ops:
|
192
|
+
continue
|
193
|
+
op = stdgates.get(op, None)
|
194
|
+
|
195
|
+
if op is not None and op.name in _discrete_skipped_ops:
|
196
|
+
continue
|
197
|
+
|
198
|
+
if op is None or not isinstance(op, Instruction):
|
199
|
+
return False
|
200
|
+
|
201
|
+
if len(op.params) > 0:
|
202
|
+
found_one_continuous_gate = True
|
203
|
+
return found_one_continuous_gate
|
204
|
+
|
205
|
+
target = pass_manager_config.target
|
206
|
+
basis = pass_manager_config.basis_gates
|
207
|
+
# consolidate gates before routing if the user did not specify a discrete basis gate, i.e.
|
208
|
+
# * no target or basis gate set has been specified
|
209
|
+
# * target has been specified, and we have one non-discrete gate in the target's spec
|
210
|
+
# * basis gates have been specified, and we have one non-discrete gate in that set
|
211
|
+
do_consolidate_blocks_init = target is None and basis is None
|
212
|
+
do_consolidate_blocks_init |= target is not None and _is_one_op_non_discrete(
|
213
|
+
target.operations
|
214
|
+
)
|
215
|
+
do_consolidate_blocks_init |= basis is not None and _is_one_op_non_discrete(basis)
|
216
|
+
|
217
|
+
if do_consolidate_blocks_init:
|
218
|
+
init.append(Collect2qBlocks())
|
219
|
+
init.append(ConsolidateBlocks())
|
220
|
+
# If approximation degree is None that indicates a request to approximate up to the
|
221
|
+
# error rates in the target. However, in the init stage we don't yet know the target
|
222
|
+
# qubits being used to figure out the fidelity so just use the default fidelity parameter
|
223
|
+
# in this case.
|
224
|
+
if pass_manager_config.approximation_degree is not None:
|
225
|
+
init.append(Split2QUnitaries(pass_manager_config.approximation_degree))
|
226
|
+
else:
|
227
|
+
init.append(Split2QUnitaries())
|
184
228
|
else:
|
185
229
|
raise TranspilerError(f"Invalid optimization level {optimization_level}")
|
186
230
|
return init
|
qiskit/visualization/bloch.py
CHANGED
@@ -50,7 +50,6 @@ __all__ = ["Bloch"]
|
|
50
50
|
|
51
51
|
import math
|
52
52
|
import os
|
53
|
-
import re
|
54
53
|
import numpy as np
|
55
54
|
import matplotlib
|
56
55
|
import matplotlib.pyplot as plt
|
@@ -61,47 +60,6 @@ from mpl_toolkits.mplot3d.art3d import Patch3D
|
|
61
60
|
from .utils import matplotlib_close_if_inline
|
62
61
|
|
63
62
|
|
64
|
-
# This version pattern is taken from the pypa packaging project:
|
65
|
-
# https://github.com/pypa/packaging/blob/21.3/packaging/version.py#L223-L254
|
66
|
-
# which is dual licensed Apache 2.0 and BSD see the source for the original
|
67
|
-
# authors and other details
|
68
|
-
VERSION_PATTERN = (
|
69
|
-
"^"
|
70
|
-
+ r"""
|
71
|
-
v?
|
72
|
-
(?:
|
73
|
-
(?:(?P<epoch>[0-9]+)!)? # epoch
|
74
|
-
(?P<release>[0-9]+(?:\.[0-9]+)*) # release segment
|
75
|
-
(?P<pre> # pre-release
|
76
|
-
[-_\.]?
|
77
|
-
(?P<pre_l>(a|b|c|rc|alpha|beta|pre|preview))
|
78
|
-
[-_\.]?
|
79
|
-
(?P<pre_n>[0-9]+)?
|
80
|
-
)?
|
81
|
-
(?P<post> # post release
|
82
|
-
(?:-(?P<post_n1>[0-9]+))
|
83
|
-
|
|
84
|
-
(?:
|
85
|
-
[-_\.]?
|
86
|
-
(?P<post_l>post|rev|r)
|
87
|
-
[-_\.]?
|
88
|
-
(?P<post_n2>[0-9]+)?
|
89
|
-
)
|
90
|
-
)?
|
91
|
-
(?P<dev> # dev release
|
92
|
-
[-_\.]?
|
93
|
-
(?P<dev_l>dev)
|
94
|
-
[-_\.]?
|
95
|
-
(?P<dev_n>[0-9]+)?
|
96
|
-
)?
|
97
|
-
)
|
98
|
-
(?:\+(?P<local>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))? # local version
|
99
|
-
"""
|
100
|
-
+ "$"
|
101
|
-
)
|
102
|
-
VERSION_PATTERN_REGEX = re.compile(VERSION_PATTERN, re.VERBOSE | re.IGNORECASE)
|
103
|
-
|
104
|
-
|
105
63
|
class Arrow3D(Patch3D, FancyArrowPatch):
|
106
64
|
"""Makes a fancy arrow"""
|
107
65
|
|
@@ -461,8 +419,7 @@ class Bloch:
|
|
461
419
|
self.fig = plt.figure(figsize=self.figsize)
|
462
420
|
|
463
421
|
if not self._ext_axes:
|
464
|
-
|
465
|
-
if tuple(int(x) for x in version_match.group("release").split(".")) >= (3, 4, 0):
|
422
|
+
if tuple(int(x) for x in matplotlib.__version__.split(".")) >= (3, 4, 0):
|
466
423
|
self.axes = Axes3D(
|
467
424
|
self.fig, azim=self.view[0], elev=self.view[1], auto_add_to_figure=False
|
468
425
|
)
|
@@ -174,13 +174,10 @@ def dag_drawer(dag, scale=0.7, filename=None, style="color"):
|
|
174
174
|
label = register_bit_labels.get(
|
175
175
|
node.wire, f"q_{dag.find_bit(node.wire).index}"
|
176
176
|
)
|
177
|
-
|
177
|
+
else:
|
178
178
|
label = register_bit_labels.get(
|
179
179
|
node.wire, f"c_{dag.find_bit(node.wire).index}"
|
180
180
|
)
|
181
|
-
else:
|
182
|
-
label = str(node.wire.name)
|
183
|
-
|
184
181
|
n["label"] = label
|
185
182
|
n["color"] = "black"
|
186
183
|
n["style"] = "filled"
|
@@ -190,12 +187,10 @@ def dag_drawer(dag, scale=0.7, filename=None, style="color"):
|
|
190
187
|
label = register_bit_labels.get(
|
191
188
|
node.wire, f"q[{dag.find_bit(node.wire).index}]"
|
192
189
|
)
|
193
|
-
|
190
|
+
else:
|
194
191
|
label = register_bit_labels.get(
|
195
192
|
node.wire, f"c[{dag.find_bit(node.wire).index}]"
|
196
193
|
)
|
197
|
-
else:
|
198
|
-
label = str(node.wire.name)
|
199
194
|
n["label"] = label
|
200
195
|
n["color"] = "black"
|
201
196
|
n["style"] = "filled"
|
@@ -208,10 +203,8 @@ def dag_drawer(dag, scale=0.7, filename=None, style="color"):
|
|
208
203
|
e = {}
|
209
204
|
if isinstance(edge, Qubit):
|
210
205
|
label = register_bit_labels.get(edge, f"q_{dag.find_bit(edge).index}")
|
211
|
-
elif isinstance(edge, Clbit):
|
212
|
-
label = register_bit_labels.get(edge, f"c_{dag.find_bit(edge).index}")
|
213
206
|
else:
|
214
|
-
label =
|
207
|
+
label = register_bit_labels.get(edge, f"c_{dag.find_bit(edge).index}")
|
215
208
|
e["label"] = label
|
216
209
|
return e
|
217
210
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: qiskit
|
3
|
-
Version: 1.2.
|
3
|
+
Version: 1.2.0rc1
|
4
4
|
Summary: An open-source SDK for working with quantum computers at the level of extended quantum circuits, operators, and primitives.
|
5
5
|
Author-email: Qiskit Development Team <qiskit@us.ibm.com>
|
6
6
|
License: Apache 2.0
|
@@ -28,29 +28,29 @@ Classifier: Topic :: Scientific/Engineering
|
|
28
28
|
Requires-Python: >=3.8
|
29
29
|
Description-Content-Type: text/markdown
|
30
30
|
License-File: LICENSE.txt
|
31
|
-
Requires-Dist: rustworkx>=0.15.0
|
32
|
-
Requires-Dist: numpy<3,>=1.17
|
33
|
-
Requires-Dist: scipy>=1.5
|
34
|
-
Requires-Dist: sympy>=1.3
|
35
|
-
Requires-Dist: dill>=0.3
|
36
|
-
Requires-Dist: python-dateutil>=2.8.0
|
37
|
-
Requires-Dist: stevedore>=3.0.0
|
31
|
+
Requires-Dist: rustworkx >=0.15.0
|
32
|
+
Requires-Dist: numpy <3,>=1.17
|
33
|
+
Requires-Dist: scipy >=1.5
|
34
|
+
Requires-Dist: sympy >=1.3
|
35
|
+
Requires-Dist: dill >=0.3
|
36
|
+
Requires-Dist: python-dateutil >=2.8.0
|
37
|
+
Requires-Dist: stevedore >=3.0.0
|
38
38
|
Requires-Dist: typing-extensions
|
39
|
-
Requires-Dist: symengine>=0.11
|
39
|
+
Requires-Dist: symengine >=0.11
|
40
40
|
Provides-Extra: all
|
41
|
-
Requires-Dist: qiskit[crosstalk-pass,csp-layout-pass,qasm3-import,visualization]; extra ==
|
41
|
+
Requires-Dist: qiskit[crosstalk-pass,csp-layout-pass,qasm3-import,visualization] ; extra == 'all'
|
42
42
|
Provides-Extra: crosstalk-pass
|
43
|
-
Requires-Dist: z3-solver>=4.7; extra ==
|
43
|
+
Requires-Dist: z3-solver >=4.7 ; extra == 'crosstalk-pass'
|
44
44
|
Provides-Extra: csp-layout-pass
|
45
|
-
Requires-Dist: python-constraint>=1.4; extra ==
|
45
|
+
Requires-Dist: python-constraint >=1.4 ; extra == 'csp-layout-pass'
|
46
46
|
Provides-Extra: qasm3-import
|
47
|
-
Requires-Dist: qiskit-qasm3-import>=0.1.0; extra ==
|
47
|
+
Requires-Dist: qiskit-qasm3-import >=0.1.0 ; extra == 'qasm3-import'
|
48
48
|
Provides-Extra: visualization
|
49
|
-
Requires-Dist: matplotlib>=3.3; extra ==
|
50
|
-
Requires-Dist: pydot; extra ==
|
51
|
-
Requires-Dist: Pillow>=4.2.1; extra ==
|
52
|
-
Requires-Dist: pylatexenc>=1.4; extra ==
|
53
|
-
Requires-Dist: seaborn>=0.9.0; extra ==
|
49
|
+
Requires-Dist: matplotlib >=3.3 ; extra == 'visualization'
|
50
|
+
Requires-Dist: pydot ; extra == 'visualization'
|
51
|
+
Requires-Dist: Pillow >=4.2.1 ; extra == 'visualization'
|
52
|
+
Requires-Dist: pylatexenc >=1.4 ; extra == 'visualization'
|
53
|
+
Requires-Dist: seaborn >=0.9.0 ; extra == 'visualization'
|
54
54
|
|
55
55
|
# Qiskit
|
56
56
|
|
@@ -77,7 +77,7 @@ For more details on how to use Qiskit, refer to the documentation located here:
|
|
77
77
|
## Installation
|
78
78
|
|
79
79
|
> [!WARNING]
|
80
|
-
> Do not try to upgrade an existing Qiskit 0.* environment to Qiskit 1.0 in-place. [Read more](https://docs.quantum.ibm.com/migration-guides/qiskit-1.0-installation).
|
80
|
+
> Do not try to upgrade an existing Qiskit 0.* environment to Qiskit 1.0 in-place. [Read more](https://docs.quantum.ibm.com/api/migration-guides/qiskit-1.0-installation).
|
81
81
|
|
82
82
|
We encourage installing Qiskit via ``pip``:
|
83
83
|
|
@@ -87,7 +87,7 @@ pip install qiskit
|
|
87
87
|
|
88
88
|
Pip will handle all dependencies automatically and you will always install the latest (and well-tested) version.
|
89
89
|
|
90
|
-
To install from source, follow the instructions in the [documentation](https://docs.quantum.ibm.com/
|
90
|
+
To install from source, follow the instructions in the [documentation](https://docs.quantum.ibm.com/start/install-qiskit-source).
|
91
91
|
|
92
92
|
## Create your first quantum program in Qiskit
|
93
93
|
|