Přeskočit na hlavní obsah

Změny funkcí v Qiskit 1.0

Tento průvodce popisuje migrační cesty pro nejdůležitější změny funkcí v Qiskit 1.0, uspořádané podle modulů. Pro přechod na modul, který tě zajímá, použij obsah na pravé straně.

Nástroj pro migraci na Qiskit 1.0

Pro usnadnění procesu migrace můžeš použít nástroj flake8-qiskit-migration, který detekuje odstraněné importní cesty v tvém kódu a navrhuje alternativy.

Pokud máš nainstalovaný pipx, jednoduše spusť následující příkaz.

pipx run flake8-qiskit-migration <path-to-source-directory>

Tím se balíček nainstaluje do dočasného virtuálního prostředí a spustí se na tvém kódu.

Omezení

Tento nástroj detekuje pouze odstraněné importní cesty. Nezjišťuje použití odstraněných metod (jako například QuantumCircuit.qasm) ani argumentů. Také nedokáže sledovat přiřazení jako qk = qiskit, i když zvládá aliasy jako import qiskit as qk.

Více informací najdeš v repozitáři projektu.

Globální instance a funkce

Aer

Objekt qiskit.Aer není v Qiskit 1.0 dostupný. Místo toho použij stejný objekt z namespace qiskit_aer, který je přímou náhradou. Chceš-li nainstalovat qiskit_aer, spusť:

pip install qiskit-aer

BasicAer

Objekt qiskit.BasicAer není v Qiskit 1.0 dostupný. Možnosti migrace najdeš v sekci migrace basicaer.

execute

Funkce qiskit.execute není v Qiskit 1.0 dostupná. Tato funkce sloužila jako vysokoúrovňový obal kolem funkcí transpile a run v Qiskit. Místo qiskit.execute použij funkci transpile následovanou backend.run().

# Legacy path
from qiskit import execute

job = execute(circuit, backend)

# New path
from qiskit import transpile

new_circuit = transpile(circuit, backend)
job = backend.run(new_circuit)

Alternativně je primitiv Sampler sémanticky ekvivalentní odstraněné funkci qiskit.execute. Třída BackendSampler je obecný obal pro Backend, který nepodporují primitivy:

from qiskit.primitives import BackendSampler

sampler = BackendSampler(backend)
job = sampler.run(circuit)

qiskit.circuit

QuantumCircuit.qasm

Metoda QuantumCircuit.qasm byla odstraněna. Místo ní použij qasm2.dump nebo qasm2.dumps.

Pro výstup formátovaný pomocí Pygments se podívej na samostatný balíček openqasm-pygments, protože qasm2.dump a qasm2.dumps barevný výstup přes Pygments neposkytují.

from qiskit import QuantumCircuit

qc = QuantumCircuit(1)

# Old
qasm_str = qc.qasm()

# Alternative
from qiskit.qasm2 import dumps

qasm_str = dumps(qc)

# Alternative: Write to file
from qiskit.qasm2 import dump

with open("my_file.qasm", "w") as f:
dump(qc, f)

QuantumCircuit gates

Následující metody Gate byly odstraněny ve prospěch zavedených metod, které přidávají stejné Gate:

OdstraněnoAlternativa
QuantumCircuit.cnotQuantumCircuit.cx
QuantumCircuit.toffoliQuantumCircuit.ccx
QuantumCircuit.fredkinQuantumCircuit.cswap
QuantumCircuit.mctQuantumCircuit.mcx
QuantumCircuit.iQuantumCircuit.id
QuantumCircuit.squQuantumCircuit.unitary

Následující metody Circuit byly odstraněny. Tyto Gate lze místo toho přidat do Circuit pomocí QuantumCircuit.append.

OdstraněnoAlternativa (append)
QuantumCircuit.diagonalDiagonalGate
QuantumCircuit.hamiltonianHamiltonianGate
QuantumCircuit.isometryIsometry
QuantumCircuit.isoIsometry
QuantumCircuit.ucUCGate
QuantumCircuit.ucrxUCRXGate
QuantumCircuit.ucryUCRYGate
QuantumCircuit.ucrzUCRZGate

Například pro DiagonalGate:

from qiskit.circuit import QuantumCircuit
from qiskit.circuit.library import DiagonalGate # new location in the circuit library

circuit = QuantumCircuit(2)
circuit.h([0, 1]) # some initial state

gate = DiagonalGate([1, -1, -1, 1])
qubits = [0, 1] # qubit indices on which to apply the gate
circuit.append(gate, qubits) # apply the gate

Následující metody QuantumCircuit byly rovněž odstraněny:

OdstraněnoAlternativa
QuantumCircuit.bind_parametersQuantumCircuit.assign_parameters
QuantumCircuit.snapshotinstrukce pro ukládání v qiskit-aer (save instructions)

qiskit.converters

Funkce qiskit.converters.ast_to_dag byla z Qiskitu odstraněna. Převáděla abstraktní syntaktický strom generovaný starým parserem OpenQASM 2 na DAGCircuit. Protože starý parser OpenQASM 2 byl odstraněn (viz qiskit.qasm), tato funkce již nemá opodstatnění. Místo ní načti soubory OpenQASM 2 do QuantumCircuit pomocí konstruktorových metod QuantumCircuit.from_qasm_file nebo QuantumCircuit.from_qasm_str (nebo modulu qiskit.qasm2) a poté převeď výsledný QuantumCircuit na DAGCircuit pomocí circuit_to_dag.

# Previous
from qiskit.converters import ast_to_dag
from qiskit.qasm import Qasm

dag = ast_to_dag(Qasm(filename="myfile.qasm").parse())

# Current alternative
import qiskit.qasm2
from qiskit.converters import circuit_to_dag

dag = circuit_to_dag(qiskit.qasm2.load("myfile.qasm"))

qiskit.extensions

Modul qiskit.extensions již není dostupný. Většina jeho objektů byla začleněna do knihovny Circuit (qiskit.circuit.library). Při migraci na nové umístění jednoduše nahraď qiskit.extensions za qiskit.circuit.library v cestě importu objektu. Jde o náhradu beze změny rozhraní.

# Previous
from qiskit.extensions import DiagonalGate

# Current alternative
from qiskit.circuit.library import DiagonalGate

Třídy přesunuté do qiskit.circuit.library jsou:

Následující třídy byly z kódu odstraněny, protože jejich funkce byly buď nadbytečné, nebo svázané s modulem extensions:

OdstraněnoAlternativa
SingleQubitUnitaryqiskit.circuit.library.UnitaryGate
SnapshotPoužij instrukce pro ukládání z qiskit-aer
ExtensionErrorPříslušná třída chyby

qiskit.primitives

Nejvýznamnější změnou v modulu qiskit.primitives je zavedení nového rozhraní primitives V2. Tato sekce ukazuje, jak migrovat svůj pracovní postup z primitives V1 na primitives V2, a také popisuje dílčí změny ve vstupech přijímaných rozhraním V1.

poznámka

Od verze 1.0 budeme označovat rozhraní primitives z doby před verzí 1.0 jako „primitives V1".

Migrate from V1 to V2

Formální rozdíl mezi API primitiv V1 a V2 spočívá v základních třídách, ze kterých implementace primitiv dědí. Při přechodu na nové základní třídy můžeš zachovat původní cestu importu z qiskit.primitives:

Migruj zNahraď za
BaseEstimatorBaseEstimatorV2
BaseSamplerBaseSamplerV2

Názvy implementací primitiv V2 v jádru Qiskitu (těch, které lze importovat z qiskit.primitives), byly upraveny, aby lépe vyjadřovaly jejich účel jako implementací spustitelných lokálně se stavovektorovým simulátorovým Backend. Nové názvy neobsahují příponu -V2.

Migruj zNahraď za
qiskit.primitives.Estimatorqiskit.primitives.StatevectorEstimator
qiskit.primitives.Samplerqiskit.primitives.StatevectorSampler

Při migraci z V1 na V2 je třeba vzít v úvahu několik koncepčních rozdílů. Tyto rozdíly jsou dány základní třídou, ale jsou ukázány v následujících příkladech s použitím stavovektorových implementací dostupných v qiskit.primitives:

poznámka

Pro následující příklady předpokládej tyto importy a inicializace primitiv:

from qiskit.primitives import (
Sampler,
StatevectorSampler,
Estimator,
StatevectorEstimator,
)

estimator_v1 = Estimator()
sampler_v1 = Sampler()
estimator_v2 = StatevectorEstimator()
sampler_v2 = StatevectorSampler()

# define circuits, observables and parameter values
  1. Sampler a Estimator: Nová primitiva V2 jsou navržena tak, aby přijímala vektorizované vstupy, kde lze jedny Circuit seskupit se specifikacemi ve formě polí. To znamená, že jeden Circuit lze spustit pro pole n sad parametrů, n observables nebo obojí (v případě Estimatoru). Každá taková skupina se nazývá primitivní unifikovaný blok (PUB) a lze ji vyjádřit jako n-tici: (1 x circuit, [n x observables], [n x parameters]). Rozhraní V1 neumožňovalo stejnou flexibilitu. Místo toho musel počet vstupních Circuit odpovídat počtu observables a sad parametrů, jak ukazují následující příklady (vyber záložku pro zobrazení každého příkladu):
# executing 1 circuit with 4 observables using Estimator V1
job = estimator_v1.run([circuit] * 4, [obs1, obs2, obs3, obs4])
evs = job.result().values

# executing 1 circuit with 4 observables using Estimator V2
job = estimator_v2.run([(circuit, [obs1, obs2, obs3, obs4])])
evs = job.result()[0].data.evs

Primitiva V2 přijímají více PUBů jako vstupy a každý PUB získá vlastní výsledek. To ti umožňuje spouštět různé Circuit s různými kombinacemi parametrů/observables, což v rozhraní V1 nebylo vždy možné:

# executing 2 circuits with 1 parameter set using Sampler V1
job = sampler_v1.run([circuit1, circuit2], [vals1] * 2)
dists = job.result().quasi_dists

# executing 2 circuits with 1 parameter set using Sampler V2
job = sampler_v2.run([(circuit1, vals1), (circuit2, vals1)])
counts1 = job.result()[0].data.meas.get_counts() # result for pub 1 (circuit 1)
counts2 = job.result()[1].data.meas.get_counts() # result for pub 2 (circuit 2)
  1. Sampler: V2 Sampler nyní vrací vzorky výsledků měření ve formě bitových řetězců nebo počtů, místo kvazi-pravděpodobnostních distribucí z rozhraní V1. Bitové řetězce zobrazují výsledky měření a zachovávají pořadí shotů, ve kterém byly změřeny. Výsledkové objekty V2 Sampleru organizují data podle názvů klasických registrů vstupních Circuit, kvůli kompatibilitě s dynamickými Circuit.

    # Define quantum circuit with 2 qubits
    circuit = QuantumCircuit(2)
    circuit.h(0)
    circuit.cx(0, 1)
    circuit.measure_all()
    circuit.draw()
            ┌───┐      ░ ┌─┐
    q_0: ┤ H ├──■───░─┤M├───
    └───┘┌─┴─┐ ░ └╥┘┌─┐
    q_1: ─────┤ X ├─░──╫─┤M├
    └───┘ ░ ║ └╥┘
    meas: 2/══════════════╩══╩═
    0 1
    Výchozí název klasického registru

    V Circuit výše si všimni, že název klasického registru je ve výchozím nastavení "meas". Tento název bude použit později pro přístup k bitovým řetězcům měření.

    # Run using V1 sampler
    result = sampler_v1.run(circuit).result()
    quasi_dist = result.quasi_dists[0]
    print(f"The quasi-probability distribution is: {quasi_dist}")
    The quasi-probability distribution is: {0: 0.5, 3: 0.5}
    # Run using V2 sampler
    result = sampler_v2.run([circuit]).result()
    # Access result data for pub 0
    data_pub = result[0].data
    # Access bitstrings for the classical register "meas"
    bitstrings = data_pub.meas.get_bitstrings()
    print(f"The number of bitstrings is: {len(bitstrings)}")
    # Get counts for the classical register "meas"
    counts = data_pub.meas.get_counts()
    print(f"The counts are: {counts}")
    The number of bitstrings is: 1024
    The counts are: {'00': 523, '11': 501}
  2. Sampler and Estimator: Režijní náklady na vzorkování, které implementace V1 běžně zpřístupňovaly přes možnost spuštění shots, jsou nyní argumentem metody run() primitiv a lze je specifikovat na úrovni PUB. Základní třídy V2 vystavují argumenty ve formátech odlišných od API V1:

    • BaseSamplerV2.run vystavuje argument shots (podobně jako v předchozím pracovním postupu):

      # Sample two circuits at 128 shots each.
      sampler_v2.run([circuit1, circuit2], shots=128)
      # Sample two circuits at different amounts of shots. The "None"s are necessary
      # as placeholders
      # for the lack of parameter values in this example.
      sampler_v2.run([(circuit1, None, 123), (circuit2, None, 456)])
    • EstimatorV2.run zavádí argument precision, který určuje chybové úsečky, na které by se implementace primitiva měla zaměřit při odhadech očekávaných hodnot:

      # Estimate expectation values for two PUBs, both with 0.05 precision.
      estimator_v2.run([(circuit1, obs_array1), (circuit2, obs_array_2)], precision=0.05)

Aktualizace v rozhraní V1

qiskit.providers

basicaer

Většina funkcionality modulu qiskit.providers.basicaer byla nahrazena novým modulem qiskit.providers.basic_provider, s výjimkou tříd UnitarySimulatorPy a StatevectorSimulatorPy, které byly odstraněny; jejich funkcionalita byla již obsažena v modulu quantum_info.

Přechod na nové cesty je přímočarý. Většinu tříd z qiskit.providers.basicaer můžeš nahradit jejich protějškem z qiskit.providers.basic_provider (náhrada kompatibilní bez dalších úprav). Upozorňujeme, že následující třídy mají nové cesty a názvy:

OdstraněnoAlternativa
qiskit.providers.basicaerqiskit.providers.basic_provider
BasicAerProviderBasicProvider
BasicAerJobBasicProviderJob
QasmSimulatorPyBasicSimulator
Globální instance

Při migraci na nový modul dávej pozor na globální instance. Neexistuje žádná náhrada za globální instanci BasicAer, kterou bylo možné přímo importovat jako qiskit.BasicAer. To znamená, že from qiskit import BasicProvider již není platný import. Místo toho musí být třída poskytovatele importována z příslušného submodulu a uživatel ji musí sám instanciovat:

# Previous
from qiskit import BasicAer
backend = BasicAer.get_backend("backend_name")

# Current
from qiskit.providers.basic_provider import BasicProvider
backend = BasicProvider().get_backend("backend_name")

Unitární a stavový vektorový simulátor lze nahradit různými třídami z modulu quantum_info. Nejde o náhradu kompatibilní bez dalších úprav, ale změny jsou minimální. Viz následující příklady migrace:

OdstraněnoAlternativa
UnitarySimulatorPyquantum_info.Operator
StatevectorSimulatorPyquantum_info.Statevector

Následující příklady ukazují způsoby migrace simulátorů z basicaer.

from qiskit import QuantumCircuit

qc = QuantumCircuit(3)
qc.h(0)
qc.h(1)
qc.cx(1, 2)
qc.measure_all()

# Previous
from qiskit import BasicAer
backend = BasicAer.get_backend("statevector_simulator")
statevector = backend.run(qc).result().get_statevector()

# Current
qc.remove_final_measurements() # no measurements allowed
from qiskit.quantum_info import Statevector
statevector = Statevector(qc)

fake_provider

Většina uživatelsky orientovaných komponent qiskit.providers.fake_provider byla přesunuta do Python balíčku qiskit-ibm-runtime. Patří sem třídy fake providerů, všechny falešné Backend specifické pro konkrétní zařízení (jako například FakeVigo, FakeNairobiV2 a FakeSherbrooke) a základní třídy fake Backendů. Kliknutím na záložky níže zobrazíš seznam ovlivněných tříd.

  • Libovolná třída v qiskit.providers.fake_provider.backends
  • fake_provider.fake_backend.FakeBackend
  • fake_provider.fake_backend.FakeBackendV2

Postup migrace na novou cestu:

  1. Nainstaluj qiskit-ibm-runtime verze 0.17.1 nebo novější:

    pip install 'qiskit-ibm-runtime>=0.17.1'
  2. Nahraď výskyty qiskit.providers.fake_provider ve svém kódu za qiskit_ibm_runtime.fake_provider. Například:

    # Old
    from qiskit.providers.fake_provider import FakeProvider
    backend1 = FakeProvider().get_backend("fake_ourense")

    from qiskit.providers.fake_provider import FakeSherbrooke
    backend2 = FakeSherbrooke()

    # Alternative
    from qiskit_ibm_runtime.fake_provider import FakeProvider
    backend1 = FakeProvider().get_backend("fake_ourense")

    from qiskit_ibm_runtime.fake_provider import FakeSherbrooke
    backend2 = FakeSherbrooke()

Základní třídy fake Backendů byly rovněž přesunuty, ale import path se mírně liší:

OdstraněnoAlternativa
qiskit.providers.fake_provider.FakeQasmBackendqiskit_ibm_runtime.fake_provider.fake_qasm_backend.FakeQasmBackend
qiskit.providers.fake_provider.FakePulseBackendqiskit_ibm_runtime.fake_provider.fake_pulse_backend.FakePulseBackend
poznámka

Pokud závisíš na fake Backendech pro unit testování downstream knihovny a máš konflikty se závislostí qiskit-ibm-runtime, najdeš také nové alternativy generických fake Backendů nativních pro Qiskit. Patří sem následující třídy BackendV1 (jako přímé náhrady):

Toto je konfigurovatelná třída, která vrací instance BackendV2:

fake_provider (speciální testovací Backend)

Třídy fake Backendů pro speciální testovací účely v qiskit.providers.fake_provider nebyly přesunuty do qiskit_ibm_runtime.fake_provider. Doporučeným způsobem migrace je použití nové třídy GenericBackendV2 pro nakonfigurování Backendu s podobnými vlastnostmi, nebo vytvoření vlastního targetu.

OdstraněnoAlternativa
fake_provider.FakeBackendV2fake_provider.GenericBackendV2
fake_provider.FakeBackend5QV2fake_provider.GenericBackendV2
fake_provider.FakeBackendV2LegacyQubitPropsfake_provider.GenericBackendV2
fake_provider.FakeBackendSimplefake_provider.GenericBackendV2
fake_provider.ConfigurableFakeBackendfake_provider.GenericBackendV2

Příklad: Migrace na novou třídu GenericBackendV2:

# Legacy path
from qiskit.providers.fake_provider import FakeBackend5QV2
backend = FakeBackend5QV2()

# New path
from qiskit.providers.fake_provider import GenericBackendV2
backend = GenericBackendV2(num_qubits=5)

# Note that this class generates a 5q backend with generic
# properties that serves the same purpose as FakeBackend5QV2
# but will not be identical.

Další tipy pro migraci

  • Import z qiskit.providers.aer již není možný. Místo toho importuj z qiskit_aer, což je přímá náhrada. Chceš-li nainstalovat qiskit_aer, spusť:

    pip install qiskit-aer
  • Podpora spouštění pulse úloh na Backendech z qiskit.providers.fake_provider byla v Qiskit 1.0 odstraněna. Důvodem je, že Qiskit Aer odstranil svou simulační funkcionalitu pro takovéto úlohy. Pro nízkoúrovňové workloady hamiltonovské simulace zvaž použití specializované knihovny, jako je Qiskit Dynamics.

qiskit.pulse

ParametricPulse

Základní třída qiskit.pulse.library.parametric_pulses.ParametricPulse a knihovna pulsů byly nahrazeny třídou qiskit.pulse.SymbolicPulse a odpovídající knihovnou pulsů. SymbolicPulse podporuje serializaci pomocí QPY:

from qiskit import pulse, qpy

with pulse.build() as schedule:
pulse.play(pulse.Gaussian(100, 0.1, 25), pulse.DriveChannel(0))

with open('schedule.qpy', 'wb') as fd:
qpy.dump(schedule, fd)
OdstraněnoAlternativa
pulse.library.parametric_pulses.ParametricPulseqiskit.pulse.SymbolicPulse
pulse.library.parametric_pulses.Constantpulse.library.symbolic_pulses.Constant
pulse.library.parametric_pulses.Dragpulse.library.symbolic_pulses.Drag
pulse.library.parametric_pulses.Gaussianpulse.library.symbolic_pulses.Gaussian
qiskit.pulse.library.parametric_pulses.GaussianSquarepulse.library.symbolic_pulses.GaussianSquare

Complex-valued amplitude

Amplituda pulsu s komplexní hodnotou (amp) je nahrazena dvojicí (amp, angle). Tato reprezentace je intuitivnější, zejména pro některé kalibrační úlohy, jako je kalibrace úhlu:

from qiskit import pulse
from qiskit.circuit import Parameter
from math import pi

with pulse.build() as schedule:
angle = Parameter("θ")
pulse.play(pulse.Gaussian(100, 0.1, 25, angle=angle), pulse.DriveChannel(0))
schedule.assign_parameters({angle: pi})

Injecting circuit gate operations

Vkládání operací Gate z Circuit do kontextu pulse builderu přes qiskit.pulse.builder.call již není možné. Toto odstranění se týká vstupních argumentů typu QuantumCircuit a také následujících funkcí:

  • qiskit.pulse.builder.call_gate
  • qiskit.pulse.builder.cx
  • qiskit.pulse.builder.u1
  • qiskit.pulse.builder.u2
  • qiskit.pulse.builder.u3
  • qiskit.pulse.builder.x

Pokud stále chceš vkládat harmonogramy kalibrované Backendem, použij místo volání příkazů Gate následující vzor.

from qiskit.providers.fake_provider import GenericBackendV2
from qiskit import pulse

backend = GenericBackendV2(num_qubits=5)
sched = backend.target["x"][(qubit,)].calibration

with pulse.build() as only_pulse_scheds:
pulse.call(sched)

Podobně lze QuantumCircuit vložit do kontextu builderu ručním transpilováním a naplánováním objektu.

from math import pi
from qiskit.compiler import schedule, transpile

qc = QuantumCircuit(2)
qc.rz(pi / 2, 0)
qc.sx(0)
qc.rz(pi / 2, 0)
qc.cx(0, 1)
qc_t = transpile(qc, backend)
sched = schedule(qc_t, backend)
with pulse.build() as only_pulse_scheds:
pulse.call(sched)

Doporučujeme napsat minimální pulsový program pomocí builderu a připojit ho k QuantumCircuit prostřednictvím metody QuantumCircuit.add_calibration jako mikrokód instrukce Gate, místo psaní celého programu v pulsovém modelu.

builder.build

Následující argumenty funkce qiskit.pulse.builder.build byly odstraněny bez náhrady.

  • default_transpiler_settings
  • default_circuit_scheduler_settings

Byly odstraněny také tyto funkce:

  • qiskit.pulse.builder.active_transpiler_settings
  • qiskit.pulse.builder.active_circuit_scheduler_settings
  • qiskit.pulse.builder.transpiler_settings
  • qiskit.pulse.builder.circuit_scheduler_settings

Důvodem je to, že do kontextu builderu již není možné vkládat objekty Circuit (viz Vkládání operací Circuit Gate); tato nastavení sloužila k převodu vložených objektů do podoby pulsů.

library

Diskrétní knihovna pulsů byla z kódu odstraněna. To se týká:

  • qiskit.pulse.library.constant
  • qiskit.pulse.library.zero
  • qiskit.pulse.library.square
  • qiskit.pulse.library.sawtooth
  • qiskit.pulse.library.triangle
  • qiskit.pulse.library.cos
  • qiskit.pulse.library.sin
  • qiskit.pulse.library.gaussian
  • qiskit.pulse.library.gaussian_deriv
  • qiskit.pulse.library.sech
  • qiskit.pulse.library.sech_deriv
  • qiskit.pulse.library.gaussian_square
  • qiskit.pulse.library.drag

Místo toho použij odpovídající qiskit.pulse.SymbolicPulse s metodou SymbolicPulse.get_waveform(). Například místo pulse.gaussian(100,0.5,10) použij pulse.Gaussian(100,0.5,10).get_waveform(). Vezmi na vědomí, že fáze Sawtooth i Square je definována tak, že fáze 2\\pi posune průběh o celý cyklus, což je opačně než u jejich diskrétních protějšků. Dále si všimni, že komplexní amplitudy již nejsou v knihovně symbolických pulsů podporovány; použij místo toho float, amp a angle.

ScalableSymbolicPulse

Objekty knihovny qiskit.pulse.ScalableSymbolicPulse s komplexním parametrem amp z qpy souborů verze 5 a starší (Qiskit Terra < 0.23.0) již nelze načíst. Žádná migrační akce není nutná, protože komplexní amp bude automaticky převeden na float (amp, angle).

Tato změna se týká těchto pulsů:

qiskit.qasm

Starší modul parseru OpenQASM 2, který byl dříve součástí qiskit.qasm, byl nahrazen modulem qiskit.qasm2, jenž poskytuje rychlejší a přesnější parser pro OpenQASM 2. Vysokoúrovňové metody třídy QuantumCircuit from_qasm_file() a from_qasm_str() zůstávají stejné, ale interně budou používat nový parser. Veřejné rozhraní modulu qasm2 však není totožné. Zatímco modul qiskit.qasm poskytoval rozhraní k abstraktnímu syntaktickému stromu vráceného knihovnou parseru ply, modul qiskit.qasm2 AST ani žádné nižší implementační detaily parseru nezveřejňuje. Místo toho přijímá vstup ve formátu OpenQASM 2 a na výstupu vrací objekt QuantumCircuit.

Pokud jsi například dříve spouštěl něco jako toto:

import qiskit.qasm
from qiskit.converters import ast_to_dag, dag_to_circuit

ast = qiskit.qasm.Qasm(filename="myfile.qasm").parse()
dag = ast_to_dag(ast)
qasm_circ = dag_to_circuit(dag)

Nahraď to následujícím:

import qiskit.qasm2

qasm_circ = qiskit.qasm2.load("myfile.qasm")

qiskit.quantum_info

Modul qiskit.quantum_info.synthesis byl přesunut na různá místa v kódu, převážně do qiskit.synthesis.

OdstraněnoAlternativa
OneQubitEulerDecomposerqiskit.synthesis.one_qubit.OneQubitEulerDecomposer
TwoQubitBasisDecomposerqiskit.synthesis.two_qubits.TwoQubitBasisDecomposer
XXDecomposerqiskit.synthesis.two_qubits.XXDecomposer
two_qubit_cnot_decomposeqiskit.synthesis.two_qubits.two_qubit_cnot_decompose
Quaternionqiskit.quantum_info.Quaternion

Tento přesun neovlivnil obvyklou importní cestu Quaternion, ale přes qiskit.quantum_info.synthesis k ní již přistoupit nelze.

Nakonec byl odstraněn cnot_rxx_decompose.

qiskit.test

Modul qiskit.test již není veřejným modulem. Nikdy nebylo zamýšleno, aby byl veřejný ani aby byl používán mimo testovací sadu Qiskit. Veškerá funkčnost byla specifická pro Qiskit a žádná alternativa není poskytována; pokud podobnou funkčnost potřebuješ, zahrň ji do vlastních testovacích prostředí.

qiskit.tools

Modul qiskit.tools byl v Qiskit 1.0 odstraněn. Většina jeho funkcionality byla buď nahrazena podobnou funkcionalitou v jiných balíčcích, nebo odstraněna bez náhrady. Hlavní výjimkou je funkce qiskit.tools.parallel_map(), která byla přesunuta do modulu qiskit.utils. Místo toho ji můžeš používat z tohoto nového umístění. Například:

Pokud jsi dříve používal/a:

# Previous
from qiskit.tools import parallel_map

parallel_map(func, input)

# Current
from qiskit.utils import parallel_map

parallel_map(func, input)

jupyter

Submodul qiskit.tools.jupyter byl odstraněn, protože jeho funkcionalita je svázána se starším balíčkem qiskit-ibmq-provider, který již není podporován. Také podporoval pouze BackendV1, nikoli novější rozhraní BackendV2.

monitor

Submodul qiskit.tools.monitor byl odstraněn, protože byl svázán se starším balíčkem qiskit-ibmq-provider, který již není podporován (také podporoval pouze rozhraní BackendV1, nikoli novější rozhraní BackendV2). Pro tuto funkcionalitu není k dispozici žádná náhrada.

visualization

Submodul qiskit.tools.visualization byl odstraněn. Tento modul byl starším přesměrováním z původního umístění vizualizačního modulu Qiskit, který byl přesunut do qiskit.visualization v Qiskit 0.8.0. Pokud tuto cestu stále používáš, aktualizuj své importy z qiskit.tools.visualization na qiskit.visualization.

# Previous
from qiskit.tools.visualization import plot_histogram

plot_histogram(counts)

# Current
from qiskit.visualization import plot_histogram

plot_histogram(counts)

events

Modul qiskit.tools.events a utilita progressbar(), kterou zpřístupňoval, byly odstraněny. Funkcionalita tohoto modulu nebyla příliš využívána a je lépe pokryta specializovanými balíčky, jako je tqdm.

qiskit.transpiler

synthesis

Položky v modulu qiskit.transpiler.synthesis byly přesunuty na nová umístění:

OdstraněnoAlternativa
qiskit.transpiler.synthesis.aqc (kromě AQCSynthesisPlugin)qiskit.synthesis.unitary.aqc
qiskit.transpiler.synthesis.graysynthqiskit.synthesis.synth_cnot_phase_aam
qiskit.transpiler.synthesis.cnot_synthqiskit.synthesis.synth_cnot_count_full_pmh

passes

Transpiler pass NoiseAdaptiveLayout byl nahrazen VF2Layout a VF2PostLayout, které nastavují rozvržení na základě hlášených charakteristik šumu backendu. Jak tento pass, tak odpovídající plugin fáze rozvržení "noise_adaptive" byly z Qiskitu odstraněny.

Transpiler pass CrosstalkAdaptiveSchedule byl odstraněn ze zdrojového kódu. Tento pass již nebylo možné používat, protože jeho vnitřní operace závisela na vlastních vlastnostech nastavených v payloadu BackendProperties instance BackendV1. Protože žádné backendy tato pole nenastavují, byl pass odstraněn.

passmanager

Metody append tříd ConditionalController, FlowControllerLinear a DoWhileController byly odstraněny. Místo toho musí být všechny úlohy poskytnuty při vytváření objektů kontroléru.

qiskit.utils

Následující nástroje v qiskit.utils byly odstraněny bez náhrady:

  • qiskit.utils.arithmetic
  • qiskit.utils.circuit_utils
  • qiskit.utils.entangler_map
  • qiskit.utils.name_unnamed_args

Tyto funkce byly používány výhradně v modulech qiskit.algorithms a qiskit.opflow, které byly také odstraněny.

qiskit.visualization

Modul qiskit.visualization.qcstyle byl odstraněn. Jako přímou náhradu použij qiskit.visualization.circuit.qcstyle.