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.
Files changed (29) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/_accelerate.abi3.so +0 -0
  3. qiskit/circuit/__init__.py +2 -5
  4. qiskit/circuit/quantumcircuit.py +4 -4
  5. qiskit/compiler/transpiler.py +1 -1
  6. qiskit/providers/basic_provider/basic_simulator.py +1 -1
  7. qiskit/providers/fake_provider/fake_openpulse_2q.py +3 -3
  8. qiskit/providers/fake_provider/fake_openpulse_3q.py +3 -2
  9. qiskit/providers/fake_provider/fake_pulse_backend.py +1 -2
  10. qiskit/providers/fake_provider/fake_qasm_backend.py +1 -2
  11. qiskit/providers/fake_provider/generic_backend_v2.py +18 -434
  12. qiskit/providers/models/__init__.py +21 -47
  13. qiskit/qasm3/exporter.py +1 -7
  14. qiskit/qpy/__init__.py +1 -1
  15. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +1 -1
  16. qiskit/transpiler/passes/basis/basis_translator.py +1 -2
  17. qiskit/transpiler/passes/optimization/consolidate_blocks.py +1 -7
  18. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +1 -1
  19. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +3 -9
  20. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +1 -1
  21. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +54 -10
  22. qiskit/visualization/bloch.py +1 -44
  23. qiskit/visualization/dag_visualization.py +3 -10
  24. {qiskit-1.2.0.dist-info → qiskit-1.2.0rc1.dist-info}/METADATA +20 -20
  25. {qiskit-1.2.0.dist-info → qiskit-1.2.0rc1.dist-info}/RECORD +29 -29
  26. {qiskit-1.2.0.dist-info → qiskit-1.2.0rc1.dist-info}/WHEEL +1 -1
  27. {qiskit-1.2.0.dist-info → qiskit-1.2.0rc1.dist-info}/LICENSE.txt +0 -0
  28. {qiskit-1.2.0.dist-info → qiskit-1.2.0rc1.dist-info}/entry_points.txt +0 -0
  29. {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
- _NAME_MAP = {
62
- # public object name mapped to containing module
63
- "BackendConfiguration": "qiskit.providers.models.backendconfiguration",
64
- "PulseBackendConfiguration": "qiskit.providers.models.backendconfiguration",
65
- "QasmBackendConfiguration": "qiskit.providers.models.backendconfiguration",
66
- "UchannelLO": "qiskit.providers.models.backendconfiguration",
67
- "GateConfig": "qiskit.providers.models.backendconfiguration",
68
- "BackendProperties": "qiskit.providers.models.backendproperties",
69
- "GateProperties": "qiskit.providers.models.backendproperties",
70
- "Nduv": "qiskit.providers.models.backendproperties",
71
- "BackendStatus": "qiskit.providers.models.backendstatus",
72
- "JobStatus": "qiskit.providers.models.jobstatus",
73
- "PulseDefaults": "qiskit.providers.models.pulsedefaults",
74
- "Command": "qiskit.providers.models.pulsedefaults",
75
- }
76
-
77
-
78
- def __getattr__(name):
79
- if (module_name := _NAME_MAP.get(name)) is not None:
80
- warnings.warn(
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
- try:
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/guides/pulse>`_.
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/guides/configure-qiskit-local#environment-variables>`__.
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
- source_basis_names = {x[0] for x in source_basis}
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
- try:
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/guides/pulse>`__,
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, DAGOutNode
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 {_format_node(prev_node)} and {_format_node(next_node)}."
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.backendproperties import BackendProperties
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
- init.append(Collect2qBlocks())
175
- init.append(ConsolidateBlocks())
176
- # If approximation degree is None that indicates a request to approximate up to the
177
- # error rates in the target. However, in the init stage we don't yet know the target
178
- # qubits being used to figure out the fidelity so just use the default fidelity parameter
179
- # in this case.
180
- if pass_manager_config.approximation_degree is not None:
181
- init.append(Split2QUnitaries(pass_manager_config.approximation_degree))
182
- else:
183
- init.append(Split2QUnitaries())
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
@@ -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
- version_match = VERSION_PATTERN_REGEX.search(matplotlib.__version__)
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
- elif isinstance(node.wire, Clbit):
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
- elif isinstance(node.wire, Clbit):
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 = str(edge.name)
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.0
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 == "all"
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 == "crosstalk-pass"
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 == "csp-layout-pass"
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 == "qasm3-import"
47
+ Requires-Dist: qiskit-qasm3-import >=0.1.0 ; extra == 'qasm3-import'
48
48
  Provides-Extra: visualization
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"
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/guides/install-qiskit-source).
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