ile kuantum devresi diyagramlarını görselleştirme Q#
Kuantum devresi diyagramları, kuantum işlemlerinin görsel bir gösterimidir. Kubitlerin kuantum programı aracılığıyla akışını gösterir ve bunlara uygulanan geçitler ve ölçümler de dahil olmak üzere.
Bu makalede, Visual Studio Code veya Jupyter Notebooks kullanarak kuantum devresi diyagramlarıyla kuantum algoritmalarını görsel olarak temsil etmeyi öğreneceksiniz.
Kuantum devresi diyagramı kuralları hakkında daha fazla bilgi için bkz . Kuantum devreleri kuralları.
Önkoşullar
VS Code
Visual Studio Code'un en son sürümü veya Vs Code'un Web'de açılması.
En son Azure Quantum
qsharp
veazure-quantum
Python paketleri.python -m pip install --upgrade qsharp azure-quantum
Jupyter Notebook
Visual Studio Code'un en son sürümü veya Vs Code'un Web'de açılması.
Azure Quantum Geliştirme Seti, Python ve Jupyter uzantılarının yüklü olduğu VS Code.
En son Azure Quantum
qsharp
veqsharp-widgets
paketleri veipykernel
paketi.python -m pip install --upgrade qsharp qsharp-widgets ipykernel
Visual Studio Code ile kuantum devreleri
Visual Studio Code'da programların kuantum devrelerini Q# görselleştirmek için bu adımları izleyin. Kuantum devresi diyagramı kuralları hakkında daha fazla bilgi için bkz . Kuantum devreleri kuralları.
Program Q# için devre diyagramlarını görüntüleme
Visual Studio Code'da bir Q# dosya açın veya kuantum örneklerinden birini yükleyin.
Programın kuantum devresini Q# görselleştirmek için Görünüm -> Komut Paleti'ni seçin ve "devre" yazın. Bu seçenek : Bağlantı hattını göster seçeneğini göstermelidirQ#. Ayrıca, önceki
Main()
komut listesinden Devre'ye de tıklayabilirsiniz.Devre, devre penceresinde görüntülenir Q# . Örneğin, aşağıdaki bağlantı hattı bir kubiti süper pozisyona yerleştiren ve ardından ölçen bir işleme karşılık gelir. Devre diyagramı, |0⟩ durumuna başlatıldığı bir kubit yazmaç gösterir. Ardından kubite bir Hadamard kapısı, H uygulanır ve ardından ölçüm simgesiyle temsil edilen bir ölçüm işlemi uygulanır.
İşlemler için devre diyagramlarını görüntüleme
Kuantum devresini tek Q# bir işlem için görselleştirebilirsiniz. Bunu yapmak için işlem bildiriminin üzerinde görünen kod merceğindeki Devre düğmesine tıklayın.
Hata ayıklama sırasında devre diyagramlarını görüntüleme
Bir Q# programda hata ayıklarken, kuantum devresini programın geçerli durumuna göre görselleştirebilirsiniz.
yukarıdaki kod merceği komutları listesinden Hata Ayıkla
Main()
düğmesini seçin.Sol taraftaki Çalıştır ve hata ayıklama görünümünde, programda ilerlediğinizde devreyi göstermek için Değişkenler bölmesinin altındaki Kuantum Devresi bölümünü genişletin.
Program çalıştırılırken bağlantı hattı güncelleştirmesini görmek için kodda adım adım ilerleyebilir ve kesme noktaları ayarlayabilirsiniz.
Geçerli kuantum devresi Devre panelinde gösterilirQ#. Bu devre diyagramı simülatörün geçerli durumunu, yani geçerli yürütme noktasına kadar uygulanan geçitleri temsil eder.
Jupyter Notebooks ile kuantum devreleri
Jupyter Notebooks'ta, paketini kullanarak qsharp-widgets
kuantum devrelerini görselleştirebilirsiniz. Bu paket, kuantum devresi diyagramını SVG görüntüsü olarak işleyen bir pencere öğesi sağlar.
Visual Studio Code'da Komut paleti Görüntüle'yi > ve ardından Oluştur: Yeni Jupyter Not Defteri'ni seçin.
Not defterinin ilk hücresinde aşağıdaki kodu çalıştırarak modülü içeri aktarınQ#.
import qsharp
Yeni bir hücre ekleyin ve kodu girin Q# . Örneğin, aşağıdaki kod bir Çan Durumu hazırlar.
%%qsharp // Prepare a Bell State. use register = Qubit[2]; H(register[0]); CNOT(register[0], register[1]);
programın geçerli durumuna göre kuantum devresini görüntülemek için işlevini kullanabilirsiniz
dump_circuit()
. Örneğin, devre diyagramı |0⟩ durumuna başlatılan iki kubit kaydını gösterir. Ardından, ilk kubite bir Hadamard kapısı, H uygulanır. Bundan sonra, denetim olarak ilk kubit kullanılarak bir CNOT kapısı uygulanır; bu bir nokta olarak temsil edilir ve ikinci kubit X olarak targettemsil edilir.qsharp.dump_circuit()
q_0 ── H ──── ● ── q_1 ───────── X ──
Paketini kullanarak
qsharp-widgets
kuantum devrelerini SVG görüntüsü olarak görselleştirebilirsiniz. Bu durumda, CNOT kapısı iki kubiti bağlayan bir çizgi olarak temsil edilir ve denetim kubitinde bir nokta ve kubit üzerinde target bir çapraz çapraz çizilir. Daha fazla bilgi için bkz . Kuantum devreleri kuralları.from qsharp_widgets import Circuit Circuit(qsharp.dump_circuit())
Giriş ifadesi için devre diyagramlarını görüntüleme
Giriş ifadesini çağırıp qsharp.circuit()
bağımsız değişken olarak geçirerek herhangi bir program için giriş ifadesi içeren bir devre diyagramı oluşturabilirsiniz.
Örneğin, yeni bir hücre ekleyin ve GHZ durumunu hazırlayan aşağıdaki kodu kopyalayın.
%%qsharp import Std.Diagnostics.*; import Std.Measurement.*; operation GHZSample(n: Int) : Result[] { use qs = Qubit[n]; H(qs[0]); ApplyToEach(CNOT(qs[0], _), qs[1...]); let results = MeasureEachZ(qs); ResetAll(qs); return results; }
Yeni bir hücre ekleyin ve bağlantı hattını görselleştirmek için aşağıdaki kodu çalıştırın. Örneğin, 3 kubitli bir GHZ durumu hazırlayın.
Circuit(qsharp.circuit("GHZSample(3)"))
Kubitli işlemler için devre diyagramlarını görüntüleme
Kubitleri veya kubit dizilerini alan herhangi bir işlem için devre diyagramları oluşturabilirsiniz. Diyagramda giriş kubiti ve işlem içinde ayrılan ek kubitler kadar kablo gösterilir. İşlem bir kubit (Qubit[])
dizisi aldığında, bağlantı hattı dizisini 2 kubitlik bir kayıt olarak gösterir.
Yeni bir hücre ekleyin ve aşağıdaki örneği kopyalayın. Bu kod bir kedi durumu hazırlar.
%%qsharp operation PrepareCatState(register : Qubit[]) : Unit { H(register[0]); ApplyToEach(CNOT(register[0], _), register[1...]); }
Yeni bir hücre ekleyin ve işlemin devresini
PrepareCatState
görselleştirmek için aşağıdaki kodu çalıştırın.Circuit(qsharp.circuit(operation="PrepareCatState"))
Devre diyagramlarını etkileyen koşullar
Kuantum devrelerini görselleştirirken, aşağıdaki koşullar devre diyagramının görselleştirmesini etkileyebilir.
Dinamik devreler
Devre diyagramları, bir Q# program içindeki tüm klasik mantık yürütülerek ve ayrılmış kubitleri veya uygulanan geçitleri izleyerek oluşturulur. Döngüler ve koşullular yalnızca klasik değerlerle ilgilendikleri sürece desteklenir.
Ancak, kubit ölçüm sonuçlarını kullanan döngüler ve koşullu ifadeler içeren programlar, devre diyagramıyla temsil etmek için daha karmaşıktır. Örneğin, aşağıdaki gibi bir ifade
if (M(q) == One) {
X(q)
}
geçitler bir ölçüm sonucuna bağlı olduğundan basit bir devre diyagramıyla temsil edilemez. Böyle bir bağlantı hattı dinamik devre olarak adlandırılır.
Devre diyagramları, programı kuantum simülatöründe çalıştırarak ve uygulandıkça geçitleri izleyerek dinamik devreler için oluşturulabilir. Simülasyon yapılırken kubitler ve geçitler izlendiğinden buna izleme modu denir.
İzlenen devrelerin dezavantajı, tek bir simülasyon için yalnızca ölçüm sonucunu ve sonuçta elde edilen geçit uygulamalarını yakalamalarıdır. Yukarıdaki örnekte ölçüm sonucu ise Zero
, diyagramda geçidi görmezsiniz X
. Simülasyonun başka bir çalıştırması biraz farklı bir devre gösterebilir.
Target profil
Şu anda seçili target olan profil, devre diyagramlarının nasıl oluşturulduğunu etkiler. Target profilleri, donanımın özelliklerini target ve kuantum programına uygulanan kısıtlamaları belirtmek için kullanılır.
target Profil Kısıtlanmamış veya QIR Uyarlamalı RI olarak ayarlandığında, devre diyagramları programda Q# çağrılan kuantum işlemlerini gösterir. target Profil QIR tabanına ayarlandığında, devre diyagramları program bu target profille Azure Quantum'a gönderilirse donanımda çalıştırılacak kuantum işlemlerini gösterir.
Not
VS Code'da profili seçmek target için Görünüm -> Komut Paleti'ni ve ardından : Azure Quantum QIR target profilini ayarlama'yı seçinQ#. Açılan listeden ,
QIR Adaptive RI
veyaunrestricted
öğesini seçebilirsinizQIR base
.Python'da profili seçmek target için veya
qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RI)
qsharp.init(target_profile=qsharp.TargetProfile.Unrestricted)
çağrısıqsharp.init(target_profile=qsharp.TargetProfile.Base)
yapın.
Özellikle, elde edilen bağlantı hattının donanımın özellikleriyle uyumlu olmasını sağlayacak kapı ayrıştırmaları target uygulanır. Bunlar, kod oluşturma ve Azure Quantum'a gönderme sırasında uygulanan ayrıştırmalarla aynıdır.
Örneğin, kubit ve kubit dizisini ölçen aşağıdaki Q# programı göz önünde bulundurun.
import Std.Measurement.*; operation Main() : (Result, Result[]) { // The `M` operation performs a measurement of a single qubit in the // computational basis, also known as the Pauli Z basis. use q = Qubit(); let result = M(q); Reset(q); // The `MeasureEachZ` operation measures each qubit in an array in the // computational basis and returns an array of `Result` values. use qs = Qubit[2]; let results = MeasureEachZ(qs); return (result, results); }
target Profil Kısıtlanmamış veya QIR Uyarlamalı RI olarak ayarlandığında, devrede görüntülenen geçitler tam olarak programda çağrılan kuantum işlemlerine Q# karşılık gelir.
target Profil QIR tabanı olduğunda bağlantı hattı farklı görünür. Temel profil targets ölçümden sonra kubitin yeniden kullanılmasına izin vermediğinden, ölçüm artık dolanık kubit üzerinde gerçekleştirilir.
Reset
İşlem Temel Profilde desteklenen bir geçit olmadığından bırakılır. Sonuçta elde edilen bağlantı hattı, bu program bu target profille Azure Quantum'a gönderilirse donanımda çalıştırılacak bağlantı hattıyla eşleşir.