Langkau ke kandungan utama

Perubahan ciri Qiskit 1.0

Panduan ini menerangkan laluan migrasi untuk perubahan ciri terpenting dalam Qiskit 1.0, disusun mengikut modul. Gunakan jadual kandungan di sebelah kanan untuk menavigasi ke modul yang anda minati.

Alat migrasi Qiskit 1.0​

Untuk memudahkan proses migrasi, anda boleh menggunakan alat flake8-qiskit-migration untuk mengesan laluan import yang telah dibuang dalam kod anda dan mencadangkan alternatif.

Jika anda telah memasang pipx, jalankan sahaja arahan berikut.

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

Ini akan memasang pakej ke persekitaran maya sementara dan menjalankannya pada kod anda.

Had

Alat ini hanya mengesan laluan import yang dibuang. Ia tidak mengesan penggunaan kaedah yang dibuang (seperti QuantumCircuit.qasm) atau argumen. Ia juga tidak dapat menjejak tugasan seperti qk = qiskit, walaupun ia boleh mengendalikan alias seperti import qiskit as qk.

Untuk maklumat lanjut, lihat repositori projek.

Tika global dan fungsi​

Aer​

Objek qiskit.Aer tidak tersedia dalam Qiskit 1.0. Sebaliknya, gunakan objek yang sama daripada ruang nama qiskit_aer, yang merupakan pengganti langsung. Untuk memasang qiskit_aer, jalankan:

pip install qiskit-aer

BasicAer​

Objek qiskit.BasicAer tidak tersedia dalam Qiskit 1.0. Lihat bahagian migrasi basicaer untuk pilihan migrasi.

execute​

Fungsi qiskit.execute tidak tersedia dalam Qiskit 1.0. Fungsi ini berfungsi sebagai pembalut peringkat tinggi untuk fungsi transpile dan run dalam Qiskit. Sebagai ganti qiskit.execute, gunakan fungsi transpile diikuti dengan 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)

Sebagai alternatif, primitif Sampler adalah setara secara semantik dengan fungsi qiskit.execute yang dibuang. Kelas BackendSampler ialah pembalut generik untuk backend yang tidak menyokong primitif:

from qiskit.primitives import BackendSampler

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

qiskit.circuit​

QuantumCircuit.qasm​

Kaedah QuantumCircuit.qasm telah dibuang. Sebaliknya, gunakan qasm2.dump atau qasm2.dumps.

Untuk output berformat Pygments, lihat pakej kendiri openqasm-pygments, kerana qasm2.dump dan qasm2.dumps tidak menyediakan output berwarna Pygments.

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)

Gate QuantumCircuit​

Kaedah Gate berikut telah dibuang memandangkan wujudnya kaedah yang lebih mantap yang menambah Gate yang sama:

DibuangAlternatif
QuantumCircuit.cnotQuantumCircuit.cx
QuantumCircuit.toffoliQuantumCircuit.ccx
QuantumCircuit.fredkinQuantumCircuit.cswap
QuantumCircuit.mctQuantumCircuit.mcx
QuantumCircuit.iQuantumCircuit.id
QuantumCircuit.squQuantumCircuit.unitary

Kaedah Circuit berikut juga telah dibuang. Sebaliknya, Gate-gate ini boleh digunakan pada Circuit dengan QuantumCircuit.append.

DibuangAlternatif (append)
QuantumCircuit.diagonalDiagonalGate
QuantumCircuit.hamiltonianHamiltonianGate
QuantumCircuit.isometryIsometry
QuantumCircuit.isoIsometry
QuantumCircuit.ucUCGate
QuantumCircuit.ucrxUCRXGate
QuantumCircuit.ucryUCRYGate
QuantumCircuit.ucrzUCRZGate

Sebagai contoh, untuk 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

Kaedah-kaedah QuantumCircuit berikut juga telah dibuang:

DibuangAlternatif
QuantumCircuit.bind_parametersQuantumCircuit.assign_parameters
QuantumCircuit.snapshotarahan simpan daripada qiskit-aer

qiskit.converters​

Fungsi qiskit.converters.ast_to_dag telah dibuang daripada Qiskit. Ia menukar pokok sintaks abstrak yang dijana oleh parser OpenQASM 2 lama kepada DAGCircuit. Memandangkan parser OpenQASM 2 lama telah dibuang (lihat qiskit.qasm), fungsi ini tidak lagi berguna. Sebaliknya, hurai fail OpenQASM 2 anda ke dalam QuantumCircuit menggunakan kaedah pembina QuantumCircuit.from_qasm_file atau QuantumCircuit.from_qasm_str (atau modul qiskit.qasm2), kemudian tukar QuantumCircuit itu kepada DAGCircuit dengan 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 tidak lagi tersedia. Kebanyakan objeknya telah disepadukan ke dalam perpustakaan Circuit (qiskit.circuit.library). Untuk berpindah ke lokasi baharu, gantikan sahaja qiskit.extensions dengan qiskit.circuit.library dalam laluan import objek. Ini adalah pengganti langsung.

# Previous
from qiskit.extensions import DiagonalGate

# Current alternative
from qiskit.circuit.library import DiagonalGate

Kelas yang dipindahkan ke qiskit.circuit.library adalah:

Kelas-kelas berikut telah dibuang daripada kod, kerana fungsinya sama ada bertindih atau terkait dengan modul extensions:

DibuangAlternatif
SingleQubitUnitaryqiskit.circuit.library.UnitaryGate
SnapshotGunakan arahan simpan daripada qiskit-aer
ExtensionErrorKelas ralat yang berkaitan

qiskit.primitives​

Perubahan paling ketara dalam modul qiskit.primitives ialah pengenalan antara muka primitif V2 yang baharu. Bahagian ini menunjukkan cara untuk memindahkan aliran kerja anda daripada primitif V1 ke primitif V2, serta beberapa perubahan kecil yang berlaku pada input yang diterima oleh antara muka V1.

nota

Bermula dengan keluaran 1.0, kami akan merujuk antara muka primitif pra-1.0 sebagai "primitif V1".

Migrasi dari V1 ke V2​

Perbezaan formal antara API primitif V1 dan V2 ialah kelas asas yang diwarisi oleh pelaksanaan primitif. Untuk beralih ke kelas asas baharu, anda boleh mengekalkan laluan import asal daripada qiskit.primitives:

Migrasi dariGanti dengan
BaseEstimatorBaseEstimatorV2
BaseSamplerBaseSamplerV2

Nama pelaksanaan teras qiskit bagi primitif V2 (yang boleh diimport daripada qiskit.primitives), telah diubah suai untuk menjelaskan tujuannya sebagai pelaksanaan yang boleh dijalankan secara tempatan dengan Backend simulator statevector. Nama baharu tidak mengandungi akhiran -V2.

Migrasi dariGanti dengan
qiskit.primitives.Estimatorqiskit.primitives.StatevectorEstimator
qiskit.primitives.Samplerqiskit.primitives.StatevectorSampler

Terdapat beberapa perbezaan konsep yang perlu dipertimbangkan semasa berpindah dari V1 ke V2. Perbezaan ini ditentukan oleh kelas asas, tetapi ditunjukkan dalam contoh berikut menggunakan pelaksanaan statevector yang terdapat dalam qiskit.primitives:

nota

Untuk contoh berikut, anggap import dan permulaan primitif berikut:

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 and Estimator: Primitif V2 baharu direka untuk menerima input bervektorkan, di mana satu Circuit boleh dikumpulkan dengan spesifikasi bernilai tatasusunan. Iaitu, satu Circuit boleh dilaksanakan untuk tatasusunan n set parameter, n pemerhati, atau kedua-duanya (dalam kes Estimator). Setiap kumpulan dipanggil primitive unified bloc (PUB), dan boleh diwakili sebagai tuple: (1 x circuit, [n x observables], [n x parameters]). Antara muka V1 tidak membenarkan fleksibiliti yang sama. Sebaliknya, bilangan Circuit input perlu sepadan dengan bilangan pemerhati dan set parameter, seperti yang ditunjukkan dalam contoh berikut (pilih tab untuk melihat setiap contoh):
# 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

Primitif V2 menerima berbilang PUB sebagai input, dan setiap PUB mendapat hasilnya sendiri. Ini membolehkan anda menjalankan Circuit berbeza dengan pelbagai kombinasi parameter/pemerhati, yang tidak sentiasa mungkin dalam antara muka V1:

# 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: Sampler V2 kini mengembalikan sampel hasil pengukuran dalam bentuk bitstring atau kiraan, berbanding dengan taburan kuasi-kebarangkalian daripada antara muka V1. Bitstring menunjukkan hasil pengukuran, mengekalkan susunan shot semasa diukur. Objek hasil Sampler V2 mengatur data mengikut nama daftar klasik Circuit input, untuk keserasian dengan Circuit dinamik.

    # 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
    Nama daftar klasik lalai

    Dalam Circuit di atas, perhatikan bahawa nama daftar klasik lalai kepada "meas". Nama ini akan digunakan kemudian untuk mengakses bitstring pengukuran.

    # 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: Overhed pensampelan, yang biasanya didedahkan oleh pelaksanaan V1 melalui pilihan jalankan shots, kini merupakan argumen kaedah run() primitif yang boleh ditentukan pada peringkat PUB. Kelas asas V2 mendedahkan argumen dalam format berbeza daripada API V1:

    • BaseSamplerV2.run mendedahkan argumen shots (serupa dengan aliran kerja sebelumnya):

      # 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 memperkenalkan argumen precision yang menentukan bar ralat yang perlu disasarkan oleh pelaksanaan primitif untuk anggaran nilai jangkaan:

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

Kemas kini dalam antara muka V1​

qiskit.providers​

basicaer​

Kebanyakan fungsi dalam modul qiskit.providers.basicaer telah digantikan dengan modul baharu qiskit.providers.basic_provider, kecuali kelas UnitarySimulatorPy dan StatevectorSimulatorPy yang telah dibuang; fungsinya sudah pun terkandung dalam modul quantum_info.

Migrasi ke laluan baharu adalah mudah. Anda boleh menggantikan kebanyakan kelas dalam qiskit.providers.basicaer dengan padanannya dalam qiskit.providers.basic_provider (pengganti langsung). Perhatikan bahawa kelas berikut mempunyai laluan dan nama baharu:

DibuangAlternatif
qiskit.providers.basicaerqiskit.providers.basic_provider
BasicAerProviderBasicProvider
BasicAerJobBasicProviderJob
QasmSimulatorPyBasicSimulator
Tika global

Berhati-hati dengan mana-mana tika global semasa berpindah ke modul baharu. Tiada pengganti untuk tika global BasicAer yang boleh diimport secara langsung sebagai qiskit.BasicAer. Ini bermakna from qiskit import BasicProvider bukan lagi import yang sah. Sebaliknya, kelas provider mesti diimport daripada submodulnya dan dimulakan oleh pengguna:

# 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")

Simulator unitary dan statevector boleh digantikan dengan kelas quantum_info yang berbeza. Ini bukan pengganti langsung, tetapi perubahannya adalah minima. Lihat contoh migrasi berikut:

DibuangAlternatif
UnitarySimulatorPyquantum_info.Operator
StatevectorSimulatorPyquantum_info.Statevector

Contoh berikut menunjukkan laluan migrasi simulator 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​

Kebanyakan komponen qiskit.providers.fake_provider yang berhadapan dengan pengguna telah dipindahkan ke pakej Python qiskit-ibm-runtime. Ini termasuk kelas fake provider, semua Backend palsu khusus peranti (seperti FakeVigo, FakeNairobiV2, dan FakeSherbrooke), serta kelas asas Backend palsu. Klik tab berikut untuk melihat kelas yang terjejas.

  • Mana-mana kelas dalam qiskit.providers.fake_provider.backends
  • fake_provider.fake_backend.FakeBackend
  • fake_provider.fake_backend.FakeBackendV2

Untuk berpindah ke laluan baharu:

  1. Pasang qiskit-ibm-runtime versi 0.17.1 atau lebih baharu:

    pip install 'qiskit-ibm-runtime>=0.17.1'
  2. Gantikan tika qiskit.providers.fake_provider dalam kod anda dengan qiskit_ibm_runtime.fake_provider. Sebagai contoh:

    # 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()

Kelas asas Backend palsu juga telah dipindahkan, tetapi mempunyai beberapa perbezaan dalam laluan import:

DibuangAlternatif
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
nota

Jika anda bergantung pada Backend palsu untuk ujian unit perpustakaan hiliran dan mempunyai konflik dengan kebergantungan qiskit-ibm-runtime, anda juga boleh mencari alternatif Backend palsu generik asli Qiskit baharu. Ini termasuk kelas BackendV1 berikut (pengganti langsung):

Ini ialah kelas boleh konfigurasi yang mengembalikan tika BackendV2:

fake_provider (Backend ujian khas)​

Kelas Backend palsu untuk tujuan ujian khas dalam qiskit.providers.fake_provider tidak dipindahkan ke qiskit_ibm_runtime.fake_provider. Laluan migrasi yang disyorkan ialah menggunakan kelas GenericBackendV2 baharu untuk mengkonfigurasi Backend dengan sifat serupa atau membina target tersuai.

DibuangAlternatif
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

Contoh: Migrasi ke kelas GenericBackendV2 baharu:

# 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.

Tips migrasi lain​

  • Import daripada qiskit.providers.aer tidak lagi boleh dilakukan. Sebaliknya, import daripada qiskit_aer, yang merupakan pengganti langsung. Untuk memasang qiskit_aer, jalankan:

    pip install qiskit-aer
  • Sokongan untuk menjalankan job pulse pada Backend daripada qiskit.providers.fake_provider telah dibuang dalam Qiskit 1.0. Ini kerana Qiskit Aer telah membuang fungsi simulasinya untuk job sedemikian. Untuk beban kerja simulasi Hamiltonian peringkat rendah, pertimbangkan menggunakan perpustakaan khusus seperti Qiskit Dynamics.

qiskit.pulse​

ParametricPulse​

Kelas asas qiskit.pulse.library.parametric_pulses.ParametricPulse dan perpustakaan pulse telah digantikan oleh qiskit.pulse.SymbolicPulse dan perpustakaan pulse yang berkaitan. SymbolicPulse menyokong pengsiri 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)
DibuangAlternatif
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

Amplitud bernilai kompleks​

Amplitud pulse bernilai kompleks (amp) digantikan dengan pasangan (amp, angle). Perwakilan ini lebih intuitif, terutamanya untuk beberapa tugas penentukuran seperti penentukuran sudut:

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})

Menyuntik operasi Gate Circuit​

Menyuntik operasi Gate Circuit ke dalam konteks pembina pulse melalui qiskit.pulse.builder.call tidak lagi boleh dilakukan. Pembuangan ini mempengaruhi argumen input jenis QuantumCircuit, serta fungsi berikut:

  • 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

Jika anda masih mahu menyuntik jadual yang ditentukur Backend, gunakan corak berikut sebagai ganti arahan Gate.

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)

Begitu juga, QuantumCircuit boleh disuntik dalam konteks pembina dengan melakukan transpilasi dan penjadualan manual objek tersebut.

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)

Kami mengesyorkan menulis program pulse minimum dengan pembina dan melampirkannya ke QuantumCircuit melalui kaedah QuantumCircuit.add_calibration sebagai mikrokod bagi arahan Gate, berbanding menulis keseluruhan program dengan model pulse.

builder.build​

Argumen berikut dalam qiskit.pulse.builder.build telah dibuang tanpa sebarang alternatif.

  • default_transpiler_settings
  • default_circuit_scheduler_settings

Fungsi-fungsi ini juga telah dibuang:

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

Ini kerana tidak lagi mungkin untuk menyuntik objek Circuit ke dalam konteks pembina (lihat Menyuntik operasi Gate Circuit ); tetapan ini digunakan untuk menukar objek yang disuntik kepada perwakilan pulse.

perpustakaan​

Perpustakaan pulse diskret telah dibuang daripada kod. Ini termasuk:

  • 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

Sebaliknya, gunakan qiskit.pulse.SymbolicPulse yang sepadan, dengan SymbolicPulse.get_waveform(). Sebagai contoh, sebagai ganti pulse.gaussian(100,0.5,10), gunakan pulse.Gaussian(100,0.5,10).get_waveform(). Perhatikan bahawa fasa kedua-dua Sawtooth dan Square ditakrifkan supaya fasa 2\\pi beranjak sebanyak satu kitaran penuh, berbeza dengan padanan diskret. Juga perhatikan bahawa amplitud kompleks tidak lagi disokong dalam perpustakaan pulse simbolik; gunakan float, amp, dan angle sebagai gantinya.

ScalableSymbolicPulse​

Tidak lagi mungkin untuk memuatkan objek perpustakaan qiskit.pulse.ScalableSymbolicPulse dengan parameter amp kompleks daripada fail qpy versi 5 atau lebih awal (Qiskit Terra < 0.23.0). Tiada tindakan migrasi diperlukan, kerana amp kompleks akan ditukar secara automatik kepada float (amp, angle).

Perubahan ini terpakai pada pulse berikut:

qiskit.qasm​

Modul parser OpenQASM 2 lama yang sebelumnya berada dalam qiskit.qasm telah digantikan oleh modul qiskit.qasm2, yang menyediakan parser yang lebih pantas dan tepat untuk OpenQASM 2. Kaedah QuantumCircuit peringkat tinggi from_qasm_file() dan from_qasm_str() kekal sama, tetapi akan menggunakan parser baharu secara dalaman. Namun begitu, antara muka awam modul qasm2 adalah berbeza. Walaupun modul qiskit.qasm menyediakan antara muka kepada pokok sintaks abstrak yang dikembalikan oleh perpustakaan parser ply, qiskit.qasm2 tidak mendedahkan AST atau sebarang butiran pelaksanaan peringkat rendah tentang parser. Sebaliknya ia menerima input OpenQASM 2 dan mengeluarkan objek QuantumCircuit.

Sebagai contoh, jika anda sebelum ini menjalankan sesuatu seperti ini:

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)

Gantikannya dengan yang berikut:

import qiskit.qasm2

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

qiskit.quantum_info​

Modul qiskit.quantum_info.synthesis telah dipindahkan ke pelbagai lokasi dalam kod, kebanyakannya ke qiskit.synthesis.

DibuangAlternatif
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

Perpindahan ini tidak menjejaskan laluan import biasa Quaternion, tetapi anda tidak lagi boleh mengaksesnya melalui qiskit.quantum_info.synthesis.

Akhirnya, cnot_rxx_decompose telah dibuang.

qiskit.test​

Modul qiskit.test bukan lagi modul awam. Ia tidak pernah dimaksudkan untuk menjadi awam, mahupun untuk digunakan di luar suite ujian Qiskit. Semua fungsinya adalah khusus untuk Qiskit dan tiada alternatif disediakan; jika anda memerlukan fungsi serupa, anda perlu memasukkannya dalam harnes ujian anda sendiri.

qiskit.tools​

Modul qiskit.tools telah dibuang dalam Qiskit 1.0. Kebanyakan fungsi ini sama ada digantikan oleh fungsi serupa dalam pakej lain atau dibuang tanpa alternatif. Pengecualian utama ialah fungsi qiskit.tools.parallel_map(), yang telah dipindahkan ke modul qiskit.utils. Ia boleh digunakan dari lokasi baharu ini sebagai gantinya. Sebagai contoh:

Jika anda sebelum ini menjalankan:

# 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 telah dibuang kerana fungsi dalam modul ini terikat dengan pakej qiskit-ibmq-provider lama, yang tidak lagi disokong. Ia juga hanya menyokong BackendV1 dan bukan antara muka BackendV2 yang lebih baharu.

monitor​

Submodul qiskit.tools.monitor telah dibuang kerana ia terikat dengan pakej qiskit-ibmq-provider lama, yang tidak lagi disokong (ia juga hanya menyokong antara muka BackendV1 dan bukan antara muka BackendV2 yang lebih baharu). Tiada alternatif disediakan untuk fungsi ini.

visualisasi​

Submodul qiskit.tools.visualization telah dibuang. Modul ini merupakan pengalihan lama dari lokasi asal modul visualisasi Qiskit dan dipindahkan ke qiskit.visualization dalam Qiskit 0.8.0. Jika anda masih menggunakan laluan ini, kemas kini import anda daripada qiskit.tools.visualization ke qiskit.visualization.

# Previous
from qiskit.tools.visualization import plot_histogram

plot_histogram(counts)

# Current
from qiskit.visualization import plot_histogram

plot_histogram(counts)

acara​

Modul qiskit.tools.events dan utiliti progressbar() yang didedahkannya telah dibuang. Fungsi modul ini tidak digunakan secara meluas dan lebih baik diliputi oleh pakej khusus seperti tqdm.

qiskit.transpiler​

sintesis​

Item dalam modul qiskit.transpiler.synthesis telah dipindahkan ke lokasi baharu:

DibuangAlternatif
qiskit.transpiler.synthesis.aqc (kecuali 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

laluan​

Laluan transpiler NoiseAdaptiveLayout telah digantikan oleh VF2Layout dan VF2PostLayout, yang menetapkan susun atur berdasarkan ciri hingar yang dilaporkan oleh Backend. Kedua-dua laluan dan plugin peringkat susun atur "noise_adaptive" yang sepadan telah dibuang daripada Qiskit.

Laluan transpiler CrosstalkAdaptiveSchedule telah dibuang daripada kod. Laluan ini tidak lagi boleh digunakan kerana operasi dalamannya bergantung pada sifat tersuai yang ditetapkan dalam muatan BackendProperties bagi tika BackendV1. Memandangkan tiada Backend yang menetapkan medan ini, laluan tersebut telah dibuang.

pengurus laluan​

Kaedah append bagi kelas ConditionalController, FlowControllerLinear, dan DoWhileController telah dibuang. Sebaliknya, semua tugas mesti disediakan semasa objek pengawal dibina.

qiskit.utils​

Alat berikut dalam qiskit.utils telah dibuang tanpa pengganti:

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

Fungsi-fungsi ini digunakan secara eksklusif dalam modul qiskit.algorithms dan qiskit.opflow, yang turut telah dibuang.

qiskit.visualization​

Modul qiskit.visualization.qcstyle telah dibuang. Gunakan qiskit.visualization.circuit.qcstyle sebagai pengganti langsung.

Source: IBM Quantum docs β€” updated 27 Apr 2026
English version on doQumentation β€” updated 7 Mei 2026
This translation based on the English version of 11 Mac 2026