1. Ana sayfa
  2. İçerik planı
  3. Kapılar ve ünite mantığı · Qiskit
Qiskit · devre modeli

Kapılar ve ünite mantığı — Gate nesnesinden matrise

Qiskit’te “kapı” kelimesi günlük konuşmada hem çizimdeki bir kutu hem de Python’da taşınan Gate / Instruction örneklerini kapsar. Bu sayfa, kütüphanenin kapıları nasıl sınıflandırdığını, bir ünite matrisi ile devre satırı arasındaki farkı ve ünite olmayan adımlar geldiğinde matris dilinin nerede koptuğunu tek çerçevede toplar. Matematiksel kapı atlası ve Pauli cebiri için Kuantum kapı işlemleri sayfasına; taşıyıcı nesnenin kendisi için QuantumCircuit yapısı sayfasına başvurabilirsiniz — burada ağırlık API yüzeyindedir.

  • Soyutlama: Operation · Instruction · Gate
  • Ünite üretimi: UnitaryGate, quantum_info.Operator
  • Dönüşümler: .inverse(), .power(), .control()

Operation, Instruction ve Gate: Rol Ayrımı

Qiskit’in devre motoru, kapıları “çizilebilir bir kutu” olmaktan önce çalıştırılabilir bir işlem olarak modeller. Bu yüzden sınıf isimleri birbirinin yerine geçmez: biri soyut rolü, diğeri somut örneği, üçüncüsü ise matrisi kesin olarak bilinen ünite ailesini temsil eder. Aşağıdaki üçlüyü ezber yerine iş akışına bağlamak, hata ayıklamada en çok kazandıran ayrımdır.

Operation: en geniş arayüz

Operation, devreye eklenebilecek her şeyin ortak paydasıdır: standart bir kapı, özel tanımlı bir alt-devre, hatta bazı ölçüm yardımcıları bu arayüz altında toplanabilir. Sizin için kritik mesaj şudur: Operation olmak, ünite olmak değildir. Bir işlemin çizimde kapı gibi görünmesi, onun her zaman 2ⁿ×2ⁿ boyutunda tek bir ünite matrisle yazılabileceği anlamına gelmez.

Instruction: kuyruğa bağlı örnek

Devrenin .data listesinde dolaştığınız öğeler tipik olarak CircuitInstruction benzeri bir kayıttır: hangi Operation uygulanıyor ve hangi kübit hatlarına dokunuyor birlikte paketlenir. Aynı kapı sınıfından iki ayrı çağrı, aynı Python nesnesi olmak zorunda değildir; her biri kendi bağlamıyla kopyalanır. Bu ayrım, “kapıyı bir kez tanımladım, devreye iki kez koydum” senaryosunda beklenmedik paylaşımlı durum (mutable state) sürprizlerini azaltır.

Gate: ünite ve tersinir çekirdek

Gate alt sınıfları çoğu zaman ünite ve tersinir bir lineer dönüşümü temsil eder; kütüphane, matrisi bilinen kapılarda to_matrix() yolunu sunar. Yine de her Gate örneğinin anında küçük bir matris döndürmesi beklenmemelidir: parametre içeren kapılar, değer atanana kadar “şekil ve aile” bilgisini taşır; sayısal matris ancak bağlama sonrası üretilir. Bu yüzden parametrik devrelerde ünite kontrolü ile sembolik cebir aynı günün işi değildir; ayrıntılar parametrik devreler sayfasında toplanır.

Pratik kural “Bu nesne ünite mi?” sorusunu iki aşamada sorun: önce sınıf ünite ailesinde mi (örneğin dönüş kapıları), sonra da tüm parametreler sayısallaştı mı? İkinci aşama atlanırsa transpiler veya simülatör bazen sizden önce hatayı yakalar, bazen de geç aşamada patlatır.

Devre Notasyonu: Kısayol, Append ve Tutarlılık

QuantumCircuit üzerindeki .h(0), .cx(0,1) gibi kısayollar, arka planda ilgili Gate örneğini oluşturup devreye ekler. Bu ergonomik yüz, öğrenme eğrisini düşürür; fakat özelleştirme ve yeniden kullanım için doğrudan append / compose ile nesne taşımak daha şeffaftır. İki stil karıştırıldığında yürütme sırası yine .data ile okunur; tutarlılık sorunu genelde sıradan çok, kübit indeks eşlemesi ve birleştirme yönü kaynaklıdır.

to_instruction ve alt devre paketleme

Bir QuantumCircuit’i başka bir devrenin içine “tek blok” gibi gömmek istediğinizde, genellikle önce onu bir talimata dönüştürürsünüz. Bu dönüşüm, iç devrenin kapı sayısı ve genişliği hakkında bilgi taşır; dış devre ise hat eşlemesini siz verirsiniz. Aynı içeriği iki farklı yerde kullanırken kopya üzerinde çalışmak, yerinde değişikliklerin yan etkisini önler (birleştirme ve ters devre).

İsim, etiket ve hata ayıklama

Kapılara anlamlı label vermek, devre şemasında okunabilirlik sağlar; otomatik üretilen isimler ise uzun devrelerde ayırt etmeyi zorlaştırır. Özellikle dinamik veya koşullu akış eklerken, çizim çıktısı ile .data dökümünü yan yana koymak, beklenen ünite ile gerçekten eklenen işlemin eşleştiğini doğrulamanın en hızlı yoludur.

UnitaryGate ve Ünite Doğrulama

Kendi ünite matrisinizi doğrudan devreye koymanın yolu UnitaryGate ailesidir: karmaşık sayı dizisi verilir, kapı nesnesi üniteyi temsil edecek şekilde paketlenir. Kütüphane, matrisin gerçekten ünite olduğunu doğrulamaya çalışır; küçük sayısal gürültüde toleranslar devreye girer, fakat bilinçli olarak ünite olmayan bir matris vermek yine de erken veya geç hata üretir. Bu yüzden üretim kodunda matrisi önce kendi kontrolünüzden geçirmek (örneğin Hermitik çarpımın kimlikle yakınlığı) savunmacı bir adımdır.

Boyut, tensör sırası ve kübit sırası

Çok kübitli üniteyi yazarken tensör sırası ile devrenin kübit sırası aynı şey değildir. Qiskit’in çok kübitli matris düzeni, literatürdeki bazı yazımlardan farklı olabilir; bu yüzden iki kübitlik denemeyi elle doğrulayıp ölçeklemek, büyük devrelerde “beklenmedik faz” hatalarını azaltır. Özellikle kontrollü kapı ile el yapımı matrisi bir araya getirirken, kontrolün hangi alt uzayda hangi blokları hareket ettirdiğini çizim üzerinde takip etmek gerekir.

Global faz ve gözlemlenebilirlik

Ünite matrisi U ile e^{iφ}U fiziksel olarak aynı kapı ailesine düşer; API ise bazen global fazı açık biçimde tutar. Bu, interferometrik devrelerde göreli fazı kurarken işinize yarar; salt olasılık dağılımı hesaplayan bir prototipte ise göz ardı edilebilir. Farklı araçların (simülatör, cebirsel sadeleştirici) faz seçiminde tutarsız davranması mümkündür; karşılaştırmalı testlerde dikkat edilmesi gereken ince bir noktadır.

Ters, Kuvvet ve Kontrollü Sürümler

Ünite kapıların tersi yine ünitedir; Qiskit bunu çoğu standart kapı için sembolik olarak bilir ve .inverse() ile yeni bir nesne döndürür. Kesirli kuvvetler (.power()) sürekli ailelerde anlamlıdır; tamsayı kuvveti ise devre tekrarını sıkıştırır. Kontrollü sürüm üretimi (.control()) ise hedef ve kontrol hatlarının rolünü netleştirir — burada yapılan en yaygın hata, kontrol kübitinin indeksini çizimdeki üst/alt satırla karıştırmaktır.

Çoklu kontrol ve çalışma kümesi

Birden fazla kontrol hattı tanımlayan kapılar, Boolean koşulunun ürün uzayında seçilen bir alt uzaya ünite uygular. Donanım gerçekliğinde bu soyutlama her zaman yerel iki kübitlik parçalara ayrıştırılabilir olmayabilir; transpiler bu yüzden sıçrama (ancilla) veya uzun menzilli hareketlerle ara adımlar ekleyebilir. Bu sayfa transpilasyonun kendisini anlatmaz; fakat “API’de var” ile “doğrudan makinede atomik” arasındaki mesafeyi gözetmek, kapı seçiminde hayat kurtarır.

Özel kapı alt sınıfları

Kendi kapınızı Gate alt sınıfı olarak yazarken ters ve kontrol davranışını tutarlı tanımlamak gerekir. Eksik tanımlar, devre optimizasyonunun kapıyı yanlış kaydırmasına veya ters çevirmenin beklenmedik matris üretmesine yol açabilir. Minimum test seti: rastgele duran vektörlerde ileri–geri uygulamanın kimliğe yakınsaması ve kontrollü sürümün boyutunun beklenen blok yapısına uyması.

Parametre Yüzeyi: Bağlanmamış Kapılar

Parameter taşıyan bir kapı, sayısal matris üretmeden önce bir şekil taşır: hangi açıların yer tutacağı bellidir, değerleri henüz yoktur. Bu, varyasyonel algoritmalar ve gradyan tabanlı optimizasyon için gereklidir; fakat ünite doğrulaması ve donanım gönderimi aşamasında bağlama zorunludur. Bağlama işlemi kopya üzerinde yapılmalıdır; aksi halde aynı kapı örneğini paylaşan iki devre beklenmedik biçimde birbirine karışabilir.

İfadeler ve kısıtlar

Basit trigonometrik ifadelerle tanımlanan açılar, sembolik cebir katmanında tutulur; bu ifadelerin türevlenebilirliği ML aracı zincirleri için önemlidir. Tam derinlik bu sitede başka bir başlıkta işlenir; burada yalnızca şu uyarıyı koyuyoruz: parametre içeren bir kapıyı transpile ederken, hedef makinenin desteklediği sürekli ailelere düşme başarısı, seçtiğiniz parametrizasyonla doğrudan bağlantılıdır.

Operator Görüşü: Devreden Matris Okumak

quantum_info.Operator, devrenin toplam ünite etkisini yoğun matris olarak temsil etmek için kullanılır. Bu nesne, kapı koleksiyonundan bağımsız düşünülebilir: çarpma, tensör ürünü, izler ve spektral kalıplar gibi lineer cebir işlemleri için uygundur. Devreden üretim yolunda kritik şart, devrenin ölçüm içermemesi ve dinamik klasik geri besleme taşımamasıdır; aksi halde “tek ünite” fikri anlamsızlaşır.

Yoğunluk ve ölçek

Kübit sayısı arttıkça Operator bellekte üstel büyür; bu temsil genelde küçük alt devrelerde veya düşük kübit sayısında doğrulama amaçlı kullanılır. Büyük sistemlerde Pauli tabanı veya tensör ağı yöntemleri gerekir; Qiskit ekosisteminde bu araçlar ayrı modüllerde bulunur ve bu sayfanın kapsamı dışındadır.

Pauli cebiri ile kısa temas

Ünite olmayan gözlemlenebilirlikler Pauli operatörleriyle yazılabilir; kapıların kendisi ise ünite olarak kalır. SparsePauliOp gibi yapılar, hamiltonyen veya gürültü modeli taşımak için kullanılır ve kapı matrisi üretiminden farklı bir ergonomiye sahiptir. İlk aşamada ikisini karıştırmamak (kapı mı, gözlem mi?) kavramsal borcu düşürür.

Ölçüm ve Dinamik Akış: Ünite Temsilin Sınırı

Ölçüm satırı, durumu projeler ve klasik sonucu yazar; bu adım tek bir ünite matrisle ifade edilemez. Koşullu yürütme veya klasik kayıt üzerinden dallanan akış da aynı şekilde ünite dilini kırar. Bu nedenle “tüm devrenin ünite matrisi” sorusunu sormadan önce, ilgili blokların ölçüm ve klasik bağımlılık içerip içermediğini ayıklamak gerekir. Ölçümün olasılık yorumu için teorik temel ölçüm ve çökme sayfasında tutulmuştur; burada yalnızca API ile uyum vurgulanır.

Bariyer ve ünite görünümü

Barrier çoğu analizde kimlik gibi davranır; fakat optimizasyon sınırları için yerleştirildiğinde ünite cebirinde görünmeyen ek kısıtlar doğurabilir. Ünite matrisini çıkarırken bariyerleri dahil etmek veya çıkarmak, transpiler aşamasına göre farklı sonuçlar doğurabilir; tekrarlanabilir deneylerde transpilasyon öncesi veya sonrası hangi görünümü kullandığınızı sabitleyin.

Dinamik devreler ve klasik kontrol için dinamik devreler ve klasik kontrol sayfalarına geçiş yapılır; bu sayfa statik ünite bloklarında kalır.

Sentez, Yerel Küme ve Transpiler Köprüsü

Kaynak kodunuz yüksek seviye kapılar içerse bile, donanım çoğu zaman sınırlı bir yerel küme (örneğin belirli tek kübit eksenleri ve belirli bir iki kübit kapısı) üzerinde konuşur. Transpiler, soyut üniteyi bu yerele indirgerken eşdeğerlik kütüphanelerini ve topoloji kısıtlarını kullanır. Bu süreç kapıların matematiksel anlamını korur; fakat devre uzunluğu, derinliği ve hata bütçesi değişir. Ayrıntılı anlatım devre ayrıştırma ve devre optimizasyon mantığı başlıklarında toplanır.

Ünite korunur, maliyet değişir

İyi haber: doğru transpilasyon varsayılanları altında ünite evrimin korunması hedeflenir. Kötü haber: aynı üniteyi çok farklı yerel dizilerle gerçekleştirmek mümkündür ve gürültü modeli açısından bu diziler eşdeğer değildir. Bu yüzden kapı seçimi yalnızca “doğru matematik” değil, aynı zamanda deney tasarımıdır.

Kod Laboratuvarı

Aşağıdaki iki blok birbirini tamamlar: ilki özel bir UnitaryGate üretip kontrollü sürümünü üretir; ikincisi aynı mantığı içeren küçük bir devrenin yoğun Operator temsilini yazdırır. Sürüm satırınız farklıysa küçük imza uyarıları görebilirsiniz; çekirdek fikir değişmez.

custom_unitary_gate.py Python
import numpy as np
from qiskit import QuantumCircuit
from qiskit.circuit.library import UnitaryGate

# Örnek: sıfır ve bir kübitini yer değiştiren ünite (X ile aynı ailede).
mat = np.array([[0, 1], [1, 0]], dtype=complex)
ug = UnitaryGate(mat, label="bit_flip")

qc = QuantumCircuit(2)
qc.append(ug, [0])
qc.append(ug.control(1), [1, 0])  # kontrol q1, hedef q0

print(qc)
print("İlk kapının matrisi yaklaşık:\n", np.round(ug.to_matrix(), 4))
qiskit UnitaryGate · kontrollü append UTF-8 · LF
operator_from_circuit.py Python
import numpy as np
from qiskit import QuantumCircuit
from qiskit.quantum_info import Operator

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

op = Operator(qc)
print("Boyut:", op.dim)
print(np.round(op.data, 4))
qiskit Ölçümsüz blok · yoğun matris UTF-8 · LF

İkinci örneğe measure eklemeyi denediğinizde Operator(qc) yolunun neden artık anlamlı olmayacağını doğrudan gözlemleyebilirsiniz; bu, yukarıdaki “ölçüm sınırı” bölümünün pratikteki karşılığıdır.

İleri Okuma ve Özet

Bu sayfa, Qiskit’in kapıları nesne olarak nasıl kırdığını ve ünite matris dilinin nerede işe yarayıp nerede devre dışı kaldığını çerçeveledi. Bir sonraki adımda ölçüm semantiği ve klasik yazma için ölçüm mantığı sayfasına, kayıt adları ve hat bağları için kayıt sistemleri sayfasına geçebilirsiniz.

Özet Qiskit’te kapı, çoğu zaman ünite ve matris üretebilen bir Gate örneğidir; devre satırı ise Instruction olarak kuyruğa asılır. Özel matrisler UnitaryGate ile paketlenir; toplu etkiyi yoğun biçimde okumak için Operator kullanılır. Ölçüm ve dinamik klasik akış ünite dilini kırar; transpiler ise aynı üniteyi farklı maliyetlerle yeniden yazar.