Lewati ke konten utama

Instal dan gunakan plugin transpiler

Versi paket

Kode di halaman ini dikembangkan menggunakan persyaratan berikut. Kami menyarankan untuk menggunakan versi ini atau yang lebih baru.

qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1

Untuk memudahkan pengembangan dan penggunaan kembali kode transpilasi kustom oleh komunitas pengguna Qiskit yang lebih luas, Qiskit SDK mendukung antarmuka plugin yang memungkinkan paket Python pihak ketiga untuk mendeklarasikan bahwa mereka menyediakan fungsionalitas transpilasi yang diperluas dan dapat diakses melalui Qiskit.

Saat ini, plugin pihak ketiga dapat menyediakan fungsionalitas transpilasi yang diperluas dengan tiga cara:

  • Plugin tahap transpiler menyediakan pass manager yang dapat digunakan sebagai pengganti salah satu dari 6 tahap staged pass manager preset: init, layout, routing, translation, optimization, dan scheduling.
  • Plugin sintesis uniter menyediakan fungsionalitas yang diperluas untuk sintesis gate uniter.
  • Plugin sintesis tingkat tinggi menyediakan fungsionalitas yang diperluas untuk mensintesis "objek tingkat tinggi" seperti fungsi linear atau operator Clifford. Objek tingkat tinggi direpresentasikan oleh subkelas dari kelas Operation.

Sisa halaman ini menjelaskan cara membuat daftar plugin yang tersedia, menginstal yang baru, dan menggunakannya.

Daftar plugin yang tersedia dan instal yang baru​

Qiskit sudah menyertakan beberapa plugin bawaan untuk transpilasi. Untuk menginstal lebih banyak, kamu bisa menggunakan package manager Python-mu. Misalnya, kamu bisa menjalankan pip install qiskit-toqm untuk menginstal plugin tahap routing Qiskit TOQM. Sejumlah plugin pihak ketiga merupakan bagian dari ekosistem Qiskit.

Daftar plugin tahap transpiler yang tersedia​

Gunakan fungsi list_stage_plugins, dengan memberikan nama tahap yang plugin-nya ingin kamu daftarkan.

# Added by doQumentation β€” required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
from qiskit.transpiler.preset_passmanagers.plugin import list_stage_plugins

list_stage_plugins("layout")
['default', 'dense', 'sabre', 'trivial']
list_stage_plugins("routing")
['basic', 'default', 'lookahead', 'none', 'sabre']

Jika qiskit-toqm sudah terinstal, maka toqm akan muncul dalam daftar plugin routing.

Daftar plugin sintesis uniter yang tersedia​

Gunakan fungsi unitary_synthesis_plugin_names.

from qiskit.transpiler.passes.synthesis import unitary_synthesis_plugin_names

unitary_synthesis_plugin_names()
['aqc', 'clifford', 'default', 'gridsynth', 'sk']

Daftar plugin sintesis tingkat tinggi yang tersedia​

Gunakan fungsi high_level_synthesis_plugin_names, dengan memberikan nama jenis "objek tingkat tinggi" yang akan disintesis. Nama tersebut sesuai dengan atribut name dari kelas Operation yang merepresentasikan jenis objek yang sedang disintesis.

from qiskit.transpiler.passes.synthesis import (
high_level_synthesis_plugin_names,
)

high_level_synthesis_plugin_names("clifford")
['ag', 'bm', 'default', 'greedy', 'layers', 'lnn', 'rb_default']

Kamu bisa menggunakan kelas HighLevelSynthesisPluginManager untuk membuat daftar nama semua plugin sintesis tingkat tinggi:

from qiskit.transpiler.passes.synthesis.plugin import (
HighLevelSynthesisPluginManager,
)

HighLevelSynthesisPluginManager().plugins.names()
['FullAdder.default',
'FullAdder.ripple_c04',
'FullAdder.ripple_v95',
'HalfAdder.default',
'HalfAdder.qft_d00',
'HalfAdder.ripple_c04',
'HalfAdder.ripple_r25',
'HalfAdder.ripple_v95',
'IntComp.default',
'IntComp.noaux',
'IntComp.twos',
'ModularAdder.default',
'ModularAdder.modular_v17',
'ModularAdder.qft_d00',
'ModularAdder.ripple_c04',
'ModularAdder.ripple_v95',
'Multiplier.cumulative_h18',
'Multiplier.default',
'Multiplier.qft_r17',
'PauliEvolution.default',
'PauliEvolution.rustiq',
'WeightedSum.default',
'annotated.default',
'clifford.ag',
'clifford.bm',
'clifford.default',
'clifford.greedy',
'clifford.layers',
'clifford.lnn',
'linear_function.default',
'linear_function.kms',
'linear_function.pmh',
'mcmt.default',
'mcmt.noaux',
'mcmt.vchain',
'mcmt.xgate',
'mcx.1_clean_b95',
'mcx.1_clean_kg24',
'mcx.1_dirty_kg24',
'mcx.2_clean_kg24',
'mcx.2_dirty_kg24',
'mcx.default',
'mcx.gray_code',
'mcx.n_clean_m15',
'mcx.n_dirty_i15',
'mcx.noaux_hp24',
'mcx.noaux_v24',
'permutation.acg',
'permutation.basic',
'permutation.default',
'permutation.kms',
'permutation.token_swapper',
'qft.default',
'qft.full',
'qft.line',
'clifford.rb_default']

Gunakan plugin​

Di bagian ini, kita akan menunjukkan cara menggunakan plugin transpiler. Dalam contoh kode, kita menggunakan plugin yang sudah disertakan bersama Qiskit, tapi plugin yang diinstal dari paket pihak ketiga digunakan dengan cara yang sama.

Gunakan plugin tahap transpiler​

Untuk menggunakan plugin tahap transpiler, tentukan namanya dengan argumen yang sesuai pada generate_preset_pass_manager atau transpile. Argumen tersebut dibentuk dengan menambahkan _method pada nama tahap transpilasi. Misalnya, untuk menggunakan plugin routing lookahead, kita akan menetapkan lookahead untuk argumen routing_method:

from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.backend("ibm_fez")

pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend, routing_method="lookahead"
)

Gunakan plugin sintesis uniter​

Untuk menggunakan plugin sintesis uniter, tentukan namanya sebagai argumen unitary_synthesis_method pada generate_preset_pass_manager atau transpile:

pass_manager = generate_preset_pass_manager(
optimization_level=3,
backend=backend,
unitary_synthesis_method="sk",
unitary_synthesis_plugin_config=dict(
basis_gates=["cz", "id", "rz", "sx", "x"]
),
)

Sintesis uniter digunakan dalam tahap init, translation, dan optimization dari staged pass manager yang dikembalikan oleh generate_preset_pass_manager atau yang digunakan dalam transpile. Lihat Tahap Transpiler untuk deskripsi tahap-tahap ini.

Gunakan argumen unitary_synthesis_plugin_config, sebuah dictionary bebas, untuk meneruskan opsi pada metode sintesis uniter. Dokumentasi metode sintesis seharusnya menjelaskan opsi yang didukungnya. Lihat daftar ini untuk tautan ke dokumentasi plugin sintesis uniter bawaan.

Gunakan plugin sintesis tingkat tinggi​

Pertama, buat HLSConfig untuk menyimpan nama plugin yang akan digunakan untuk berbagai objek tingkat tinggi. Misalnya:

from qiskit.transpiler.passes import HLSConfig

hls_config = HLSConfig(clifford=["layers"], linear_function=["pmh"])

Baris kode ini membuat konfigurasi sintesis tingkat tinggi yang menggunakan plugin layers untuk mensintesis objek Clifford dan plugin pmh untuk mensintesis objek LinearFunction. Nama argumen kata kunci sesuai dengan atribut name dari kelas Operation yang merepresentasikan jenis objek yang sedang disintesis. Untuk setiap objek tingkat tinggi, daftar plugin yang diberikan dicoba secara berurutan hingga salah satunya berhasil (dalam contoh di atas, setiap daftar hanya berisi satu plugin).

Selain menentukan plugin berdasarkan namanya, kamu juga bisa meneruskan tuple (nama, opsi), di mana elemen kedua tuple adalah dictionary yang berisi opsi untuk plugin tersebut. Dokumentasi metode sintesis seharusnya menjelaskan opsi yang didukungnya. Lihat daftar ini untuk tautan ke dokumentasi plugin sintesis tingkat tinggi bawaan.

Setelah kamu membuat objek HLSConfig, berikan sebagai argumen hls_config pada generate_preset_pass_manager atau transpile:

pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend, hls_config=hls_config
)

Sintesis tingkat tinggi digunakan dalam tahap init, translation, dan optimization dari staged pass manager yang dikembalikan oleh generate_preset_pass_manager atau yang digunakan dalam transpile. Lihat Tahap Transpiler untuk deskripsi tahap-tahap ini.

Langkah selanjutnya​

Rekomendasi
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 Mar 2026