Perubahan ciri Qiskit v1.0
Panduan ini menerangkan laluan migrasi untuk perubahan ciri terpenting dalam Qiskit v1.0, disusun mengikut modul. Gunakan jadual kandungan di sebelah kanan untuk menavigasi ke modul yang anda minati.
Alat migrasi Qiskit v1.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.
- Jalankan dengan pipx
- Jalankan dengan venv
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.
Jika anda tidak mahu menggunakan pipx, anda boleh membuat persekitaran baharu
secara manual untuk alat ini. Pendekatan ini juga membolehkan anda menggunakan
nbqa untuk menyemak contoh kod dalam
notebook Jupyter. Padam persekitaran apabila selesai.
# Make new environment and install
python -m venv .flake8-qiskit-migration-venv
source .flake8-qiskit-migration-venv/bin/activate
pip install flake8-qiskit-migration
# Run plugin on Python code
flake8 --select QKT100 <path-to-source-directory> # e.g. `src/`
# (Optional) run plugin on notebooks
pip install nbqa
nbqa flake8 ./**/*.ipynb --select QKT100
# Deactivate and delete environment
deactivate
rm -r .flake8-qiskit-migration-venv
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 v1.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 v1.0. Lihat
bahagian migrasi basicaer untuk
pilihan migrasi.
execute
Fungsi qiskit.execute tidak tersedia dalam Qiskit v1.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:
| Dibuang | Alternatif |
|---|---|
QuantumCircuit.cnot | QuantumCircuit.cx |
QuantumCircuit.toffoli | QuantumCircuit.ccx |
QuantumCircuit.fredkin | QuantumCircuit.cswap |
QuantumCircuit.mct | QuantumCircuit.mcx |
QuantumCircuit.i | QuantumCircuit.id |
QuantumCircuit.squ | QuantumCircuit.unitary |
Kaedah Circuit berikut juga telah dibuang. Sebaliknya, Gate-gate ini boleh
digunakan pada Circuit dengan QuantumCircuit.append.
| Dibuang | Alternatif (append) |
|---|---|
QuantumCircuit.diagonal | DiagonalGate |
QuantumCircuit.hamiltonian | HamiltonianGate |
QuantumCircuit.isometry | Isometry |
QuantumCircuit.iso | Isometry |
QuantumCircuit.uc | UCGate |
QuantumCircuit.ucrx | UCRXGate |
QuantumCircuit.ucry | UCRYGate |
QuantumCircuit.ucrz | UCRZGate |
Sebagai contoh, untuk DiagonalGate:
from qiskit.circuit import QuantumCircuit
# new location in the circuit library:
from qiskit.circuit.library import DiagonalGate
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:
| Dibuang | Alternatif |
|---|---|
QuantumCircuit.bind_parameters | QuantumCircuit.assign_parameters |
QuantumCircuit.snapshot | arahan 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:
DiagonalGateHamiltonianGateInitializeIsometryqiskit.circuit.library.generalized_gates.mcg_up_diag.MCGupDiagUCGateUCPauliRotGateUCRXGateUCRYGateUCRZGateUnitaryGate
Kelas-kelas berikut telah dibuang daripada kod, kerana fungsinya sama ada
bertindih atau terkait dengan modul extensions:
| Dibuang | Alternatif |
|---|---|
SingleQubitUnitary | qiskit.circuit.library.UnitaryGate |
Snapshot | Gunakan arahan simpan daripada qiskit-aer |
ExtensionError | Kelas 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.
Bermula dengan keluaran v1.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 dari | Ganti dengan |
|---|---|
BaseEstimator | BaseEstimatorV2 |
BaseSampler | BaseSamplerV2 |
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 dari | Ganti dengan |
|---|---|
qiskit.primitives.Estimator | qiskit.primitives.StatevectorEstimator |
qiskit.primitives.Sampler | qiskit.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:
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
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 tatasusunannset parameter,npemerhati, 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):
- Estimator, 1 circuit, 4 observables
- Sampler, 1 circuit, 3 parameter sets
- Estimator, 1 circuit, 4 observables, 2 parameter sets
# 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
# executing 1 circuit with 3 parameter sets using Sampler V1
job = sampler_v1.run([circuit] * 3, [vals1, vals2, vals3])
dists = job.result().quasi_dists
# executing 1 circuit with 3 parameter sets using Sampler V2
job = sampler_v2.run([(circuit, [vals1, vals2, vals3])])
counts = job.result()[0].data.meas.get_counts()
# executing 1 circuit with 4 observables and 2 parameter sets using Estimator V1
job = estimator_v1.run([circuit] * 8, [obs1, obs2, obs3, obs4] * 2, [vals1, vals2] * 4)
evs = job.result().values
# executing 1 circuit with 4 observables and 2 parameter sets using Estimator V2
job = estimator_v2.run([(circuit, [[obs1, obs2, obs3, obs4]], [[vals1], [vals2]])])
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:
- Sampler, 2 circuits, 1 parameter set
- Estimator, 2 circuits, 2 different observables
# 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)
# executing 2 circuits with 2 different observables using Estimator V1
job = estimator_v1.run([circuit1, circuit2] , [obs1, obs2])
evs = job.result().values
# executing 2 circuits with 2 different observables using Estimator V2
job = estimator_v2.run([(circuit1, obs1), (circuit2, obs2)])
evs1 = job.result()[0].data.evs # result for pub 1 (circuit 1)
evs2 = job.result()[1].data.evs # result for pub 2 (circuit 2)
-
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 qubitscircuit = 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 1Nama daftar klasik lalaiDalam Circuit di atas, perhatikan bahawa nama daftar klasik lalai kepada
"meas". Nama ini akan digunakan kemudian untuk mengakses bitstring pengukuran.# Run using V1 Samplerresult = 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 Samplerresult = sampler_v2.run([circuit]).result()# Access result data for pub 0data_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: 1024The counts are: {'00': 523, '11': 501} -
Sampler and Estimator: Overhed pensampelan, yang biasanya didedahkan oleh pelaksanaan V1 melalui pilihan jalankanshots, kini merupakan argumen kaedahrun()primitif yang boleh ditentukan pada peringkat PUB. Kelas asas V2 mendedahkan argumen dalam format berbeza daripada API V1:-
BaseSamplerV2.runmendedahkan argumenshots(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.runmemperkenalkan argumenprecisionyang 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
-
Penukaran tersirat daripada
BaseOperatorpadat kepadaSparsePauliOpdalam argumen pemerhatiEstimatortidak lagi dibenarkan. Anda perlu menukar secara eksplisit kepadaSparsePauliOpmenggunakanSparsePauliOp.from_operator(operator)sebagai gantinya. -
Menggunakan
PauliListdalam argumen pemerhati Estimator tidak lagi dibenarkan. Sebaliknya anda perlu menukar argumen secara eksplisit menggunakanSparsePauliOp(pauli_list)terlebih dahulu.
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:
| Dibuang | Alternatif |
|---|---|
qiskit.providers.basicaer | qiskit.providers.basic_provider |
BasicAerProvider | BasicProvider |
BasicAerJob | BasicProviderJob |
QasmSimulatorPy | BasicSimulator |
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:
| Dibuang | Alternatif |
|---|---|
UnitarySimulatorPy | quantum_info.Operator |
StatevectorSimulatorPy | quantum_info.Statevector |
Contoh berikut menunjukkan laluan migrasi simulator basicaer.
- Simulator Statevector
- Simulator Unitary
- Simulator QASM
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)
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("unitary_simulator")
result = backend.run(qc).result()
# Current
qc.remove_final_measurements() # no measurements allowed
from qiskit.quantum_info import Operator
result = Operator(qc).data
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("qasm_simulator")
result = backend.run(qc).result()
# One current option
from qiskit.providers.basic_provider import BasicProvider
backend = BasicProvider().get_backend("basic_simulator")
result = backend.run(qc).result()
# Another current option is to specify it directly
from qiskit.providers.basic_provider import BasicSimulator
backend = BasicSimulator()
result = backend.run(qc).result()
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.
- Backend Palsu
- Provider Palsu
- Mana-mana kelas dalam
qiskit.providers.fake_provider.backends fake_provider.fake_backend.FakeBackendfake_provider.fake_backend.FakeBackendV2
fake_provider.FakeProviderfake_provider.FakeProviderForBackendV2fake_provider.FakeProviderFactory
Untuk berpindah ke laluan baharu:
-
Pasang
qiskit-ibm-runtimeversi0.17.1atau lebih baharu:pip install 'qiskit-ibm-runtime>=0.17.1' -
Gantikan tika
qiskit.providers.fake_providerdalam kod anda denganqiskit_ibm_runtime.fake_provider. Sebagai contoh:# Oldfrom qiskit.providers.fake_provider import FakeProviderbackend1 = FakeProvider().get_backend("fake_ourense")from qiskit.providers.fake_provider import FakeSherbrookebackend2 = FakeSherbrooke()# Alternativefrom qiskit_ibm_runtime.fake_provider import FakeProviderbackend1 = FakeProvider().get_backend("fake_ourense")from qiskit_ibm_runtime.fake_provider import FakeSherbrookebackend2 = FakeSherbrooke()
Kelas asas Backend palsu juga telah dipindahkan, tetapi mempunyai beberapa perbezaan dalam laluan import:
| Dibuang | Alternatif |
|---|---|
qiskit.providers.fake_provider.FakeQasmBackend | qiskit_ibm_runtime.fake_provider.fake_qasm_backend.FakeQasmBackend |
qiskit.providers.fake_provider.FakePulseBackend | qiskit_ibm_runtime.fake_provider.fake_pulse_backend.FakePulseBackend |
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):
qiskit.providers.fake_provider.Fake5QV1qiskit.providers.fake_provider.Fake20QV1qiskit.providers.fake_provider.Fake7QPulseV1qiskit.providers.fake_provider.Fake27QPulseV1qiskit.providers.fake_provider.Fake127QPulseV1
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.
| Dibuang | Alternatif |
|---|---|
fake_provider.FakeBackendV2 | fake_provider.GenericBackendV2 |
fake_provider.FakeBackend5QV2 | fake_provider.GenericBackendV2 |
fake_provider.FakeBackendV2LegacyQubitProps | fake_provider.GenericBackendV2 |
fake_provider.FakeBackendSimple | fake_provider.GenericBackendV2 |
fake_provider.ConfigurableFakeBackend | fake_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.aertidak lagi boleh dilakukan. Sebaliknya, import daripadaqiskit_aer, yang merupakan pengganti langsung. Untuk memasangqiskit_aer, jalankan:pip install qiskit-aer -
Sokongan untuk menjalankan job pulse pada Backend daripada
qiskit.providers.fake_providertelah dibuang dalam Qiskit v1.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)
| Dibuang | Alternatif |
|---|---|
pulse.library.parametric_pulses.ParametricPulse | qiskit.pulse.SymbolicPulse |
pulse.library.parametric_pulses.Constant | pulse.library.symbolic_pulses.Constant |
pulse.library.parametric_pulses.Drag | pulse.library.symbolic_pulses.Drag |
pulse.library.parametric_pulses.Gaussian | pulse.library.symbolic_pulses.Gaussian |
qiskit.pulse.library.parametric_pulses.GaussianSquare | pulse.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_gateqiskit.pulse.builder.cxqiskit.pulse.builder.u1qiskit.pulse.builder.u2qiskit.pulse.builder.u3qiskit.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_settingsdefault_circuit_scheduler_settings
Fungsi-fungsi ini juga telah dibuang:
qiskit.pulse.builder.active_transpiler_settingsqiskit.pulse.builder.active_circuit_scheduler_settingsqiskit.pulse.builder.transpiler_settingsqiskit.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.constantqiskit.pulse.library.zeroqiskit.pulse.library.squareqiskit.pulse.library.sawtoothqiskit.pulse.library.triangleqiskit.pulse.library.cosqiskit.pulse.library.sinqiskit.pulse.library.gaussianqiskit.pulse.library.gaussian_derivqiskit.pulse.library.sechqiskit.pulse.library.sech_derivqiskit.pulse.library.gaussian_squareqiskit.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.
| Dibuang | Alternatif |
|---|---|
OneQubitEulerDecomposer | qiskit.synthesis.one_qubit.OneQubitEulerDecomposer |
TwoQubitBasisDecomposer | qiskit.synthesis.two_qubits.TwoQubitBasisDecomposer |
XXDecomposer | qiskit.synthesis.two_qubits.XXDecomposer |
two_qubit_cnot_decompose | qiskit.synthesis.two_qubits.two_qubit_cnot_decompose |
Quaternion | qiskit.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 v1.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:
| Dibuang | Alternatif |
|---|---|
qiskit.transpiler.synthesis.aqc (kecuali AQCSynthesisPlugin) | qiskit.synthesis.unitary.aqc |
qiskit.transpiler.synthesis.graysynth | qiskit.synthesis.synth_cnot_phase_aam |
qiskit.transpiler.synthesis.cnot_synth | qiskit.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.arithmeticqiskit.utils.circuit_utilsqiskit.utils.entangler_mapqiskit.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.