Skip to content

qadence.draw example plots

Mostly for quick, manual checking of correct plotting output.

from qadence import X, Y, kron
from qadence.draw import display

b = kron(X(0), Y(1))
%3 d66389610169455e90a2bccb0306e422 0 e8386bdd26ff41caa9291f25d1d608b1 X d66389610169455e90a2bccb0306e422--e8386bdd26ff41caa9291f25d1d608b1 287f87305c8344229d76afc6aea3610d 1 c927a3dedb2b40c2ae2a08a15ef767e7 e8386bdd26ff41caa9291f25d1d608b1--c927a3dedb2b40c2ae2a08a15ef767e7 40fd501fa2a342389a46404c3ba92e81 59d6d000f15644e8b084a7a6f5d9acf7 Y 287f87305c8344229d76afc6aea3610d--59d6d000f15644e8b084a7a6f5d9acf7 59d6d000f15644e8b084a7a6f5d9acf7--40fd501fa2a342389a46404c3ba92e81
from qadence import X, Y, chain
from qadence.draw import display

b = chain(X(0), Y(0))
%3 d717d83f3d624c229ac3049806333eb8 0 775e38b582c44a8d92ec831be3ab7af5 X d717d83f3d624c229ac3049806333eb8--775e38b582c44a8d92ec831be3ab7af5 10c07a57b39641e1a4548949bb5428da Y 775e38b582c44a8d92ec831be3ab7af5--10c07a57b39641e1a4548949bb5428da 5fa429581bec4b7ba07e7f7e0f20d933 10c07a57b39641e1a4548949bb5428da--5fa429581bec4b7ba07e7f7e0f20d933
from qadence import X, Y, chain
from qadence.draw import display

b = chain(X(0), Y(1))
%3 ed88e7a3b565464485b336dde897cd4e 0 ddc4e78b7c4e43e2bb1b02e1f1da5f6f X ed88e7a3b565464485b336dde897cd4e--ddc4e78b7c4e43e2bb1b02e1f1da5f6f 4391fdcf48b5405789a3922acace3f8f 1 9493a614b4b94ff692a1c77c50b4c88f ddc4e78b7c4e43e2bb1b02e1f1da5f6f--9493a614b4b94ff692a1c77c50b4c88f fef25cc4602c4139ad423532a61ea2e3 9493a614b4b94ff692a1c77c50b4c88f--fef25cc4602c4139ad423532a61ea2e3 0e1d584286294c718582835a7fd7e311 0c7a76de5abe4b6e997b8233ba5f715d 4391fdcf48b5405789a3922acace3f8f--0c7a76de5abe4b6e997b8233ba5f715d 3ad48618c1214fdd9082c0d893574222 Y 0c7a76de5abe4b6e997b8233ba5f715d--3ad48618c1214fdd9082c0d893574222 3ad48618c1214fdd9082c0d893574222--0e1d584286294c718582835a7fd7e311
from qadence import X, Y, add
from qadence.draw import display

b = add(X(0), Y(1), X(2))
%3 cluster_d84ad78bb0ba45c6904a5ac7bb21e90d 8f18ea3dee92470eb5dcf9bbe1fe987e 0 6fc689545dba4c49b3c4fd5c051471d2 8f18ea3dee92470eb5dcf9bbe1fe987e--6fc689545dba4c49b3c4fd5c051471d2 7d954b523a3b46e0b23514088f6007ba 1 f3a6d9d4323e412487952e1f8eaa12c9 6fc689545dba4c49b3c4fd5c051471d2--f3a6d9d4323e412487952e1f8eaa12c9 842f4ab03eed4342a93f3480b41f77af 9aeafc8818424e73bd38b4c2e445d77b AddBlock 7d954b523a3b46e0b23514088f6007ba--9aeafc8818424e73bd38b4c2e445d77b 75676125fc984a1ba585bbe809a114f3 2 9aeafc8818424e73bd38b4c2e445d77b--842f4ab03eed4342a93f3480b41f77af 4b3b32b8ebe8446f8733376703ff053b e33e6d75c6694f71ba347883616dba60 75676125fc984a1ba585bbe809a114f3--e33e6d75c6694f71ba347883616dba60 e33e6d75c6694f71ba347883616dba60--4b3b32b8ebe8446f8733376703ff053b
from qadence import CNOT, RX, HamEvo, X, Y, Z, chain, kron

rx = kron(RX(3,0.5), RX(2, "x"))
rx.tag = "rx"
gen = chain(Z(i) for i in range(4))

# `chain` puts things in sequence
block = chain(
    kron(X(0), Y(1), rx),
    CNOT(2,3),
    HamEvo(gen, 10)
)
%3 cluster_9567ffd434444d9dbb3b9ff3b8a91b40 cluster_e47f83a192ae443e8bedef0210eb955c rx d9124056732c4718b4ccb9863b16db43 0 41e0214593f54408a5554185ac16acfa X d9124056732c4718b4ccb9863b16db43--41e0214593f54408a5554185ac16acfa 2885f4833fb9498e8b7fa7f70436d1cd 1 c82c4025deb649648f68e2dbb546e722 41e0214593f54408a5554185ac16acfa--c82c4025deb649648f68e2dbb546e722 1e2730828dd3412bb832a4f7cfe32b2a c82c4025deb649648f68e2dbb546e722--1e2730828dd3412bb832a4f7cfe32b2a daf3c5933fdf47a0b05928522bd8b376 1e2730828dd3412bb832a4f7cfe32b2a--daf3c5933fdf47a0b05928522bd8b376 629c4e250b2d4f328330d7693c97e7a1 bb9d379d54554a2fac0e80f7ec9611ce Y 2885f4833fb9498e8b7fa7f70436d1cd--bb9d379d54554a2fac0e80f7ec9611ce 4d77aa3f4a6640878f8739845efdda6a 2 c0e869f756634b4aa4475dfb063ca0c5 bb9d379d54554a2fac0e80f7ec9611ce--c0e869f756634b4aa4475dfb063ca0c5 15d014206c9e484d8b6cd56d071340d5 HamEvo c0e869f756634b4aa4475dfb063ca0c5--15d014206c9e484d8b6cd56d071340d5 15d014206c9e484d8b6cd56d071340d5--629c4e250b2d4f328330d7693c97e7a1 5561e8fa78ed462c877c6b95c783b9bb eda7de2b01ab4a5c9172e34f82d82922 RX(x) 4d77aa3f4a6640878f8739845efdda6a--eda7de2b01ab4a5c9172e34f82d82922 d09c0849a02a4540803e506656a6fd55 3 c700b0a9cf3e4e0794f569378bcd8cb5 eda7de2b01ab4a5c9172e34f82d82922--c700b0a9cf3e4e0794f569378bcd8cb5 33c7c50431724c6e9e25adcb6f4db5dd t = 10 c700b0a9cf3e4e0794f569378bcd8cb5--33c7c50431724c6e9e25adcb6f4db5dd 33c7c50431724c6e9e25adcb6f4db5dd--5561e8fa78ed462c877c6b95c783b9bb e6eb498f01f24ee9887aee49b42fe61a d7b22840fb65442d9f97322ca0b4ae3b RX(0.5) d09c0849a02a4540803e506656a6fd55--d7b22840fb65442d9f97322ca0b4ae3b 247ace5d1b3d456b9bcd3bcf4e2da07a X d7b22840fb65442d9f97322ca0b4ae3b--247ace5d1b3d456b9bcd3bcf4e2da07a 247ace5d1b3d456b9bcd3bcf4e2da07a--c700b0a9cf3e4e0794f569378bcd8cb5 1e532f10473240ef94943560c58b5fdc 247ace5d1b3d456b9bcd3bcf4e2da07a--1e532f10473240ef94943560c58b5fdc 1e532f10473240ef94943560c58b5fdc--e6eb498f01f24ee9887aee49b42fe61a
from qadence import feature_map, hea, chain

block = chain(feature_map(4, reupload_scaling="Tower"), hea(4,2))
%3 cluster_6a29ff9f4e7a4facbfa12273fab1e0d9 HEA cluster_5ccc2de578a54bff860066399f58788e Tower Fourier FM 84d500b827fb48e79ebc108617815708 0 e4581187cfa94c14b46725cdc003b67e RX(1.0*phi) 84d500b827fb48e79ebc108617815708--e4581187cfa94c14b46725cdc003b67e dc391a5fe5d34523baf3abd20b1151cc 1 5a9604cce24c4e85b6998362bb284922 RX(theta₀) e4581187cfa94c14b46725cdc003b67e--5a9604cce24c4e85b6998362bb284922 d4e2218217fe4941a844cf0913429286 RY(theta₄) 5a9604cce24c4e85b6998362bb284922--d4e2218217fe4941a844cf0913429286 44e4404328654239bf7d627213ebe9c1 RX(theta₈) d4e2218217fe4941a844cf0913429286--44e4404328654239bf7d627213ebe9c1 55afd4773a08409aa6d51d93658d6c17 44e4404328654239bf7d627213ebe9c1--55afd4773a08409aa6d51d93658d6c17 abf1b33550bc4c5594fa55db9300311e 55afd4773a08409aa6d51d93658d6c17--abf1b33550bc4c5594fa55db9300311e f7a65bcceb7d45be841aa05f208fe10b RX(theta₁₂) abf1b33550bc4c5594fa55db9300311e--f7a65bcceb7d45be841aa05f208fe10b c6fbb6de30744f1a92cccf8ba6c51c63 RY(theta₁₆) f7a65bcceb7d45be841aa05f208fe10b--c6fbb6de30744f1a92cccf8ba6c51c63 8e98056ed4a14d8982dc9680ee79fbbc RX(theta₂₀) c6fbb6de30744f1a92cccf8ba6c51c63--8e98056ed4a14d8982dc9680ee79fbbc 3fddf2dd054c41c294155c93bda9a17e 8e98056ed4a14d8982dc9680ee79fbbc--3fddf2dd054c41c294155c93bda9a17e 8407d22db15a4afd8da8e5ec2cc732ef 3fddf2dd054c41c294155c93bda9a17e--8407d22db15a4afd8da8e5ec2cc732ef 8115fc211ab54c76bcc216fe3b34b9c2 8407d22db15a4afd8da8e5ec2cc732ef--8115fc211ab54c76bcc216fe3b34b9c2 28320fd1ac66464091644e77a0bc054a c466ac4bc1ec4a77aee15b7df6618de2 RX(2.0*phi) dc391a5fe5d34523baf3abd20b1151cc--c466ac4bc1ec4a77aee15b7df6618de2 b356827202e54078af290d7807263fa8 2 d422441eae9a4dbba56e74dd55f88ac0 RX(theta₁) c466ac4bc1ec4a77aee15b7df6618de2--d422441eae9a4dbba56e74dd55f88ac0 5cc5cc39337a4f40a053cb36f1852e82 RY(theta₅) d422441eae9a4dbba56e74dd55f88ac0--5cc5cc39337a4f40a053cb36f1852e82 b49b975d77bb421fa63a82da73e9e185 RX(theta₉) 5cc5cc39337a4f40a053cb36f1852e82--b49b975d77bb421fa63a82da73e9e185 82052471f3804bbaa26a87767bc37a91 X b49b975d77bb421fa63a82da73e9e185--82052471f3804bbaa26a87767bc37a91 82052471f3804bbaa26a87767bc37a91--55afd4773a08409aa6d51d93658d6c17 2d371f9e703041ca8b89fafd1f9ea603 82052471f3804bbaa26a87767bc37a91--2d371f9e703041ca8b89fafd1f9ea603 bfbd5cf7a33b450994e2dbee41f661fb RX(theta₁₃) 2d371f9e703041ca8b89fafd1f9ea603--bfbd5cf7a33b450994e2dbee41f661fb 8e93366490224b61b84d5dcc0c208028 RY(theta₁₇) bfbd5cf7a33b450994e2dbee41f661fb--8e93366490224b61b84d5dcc0c208028 f1c1fb8e4e25471e8c0e37685501b7df RX(theta₂₁) 8e93366490224b61b84d5dcc0c208028--f1c1fb8e4e25471e8c0e37685501b7df 69b474117163457391eeaa4fd386606c X f1c1fb8e4e25471e8c0e37685501b7df--69b474117163457391eeaa4fd386606c 69b474117163457391eeaa4fd386606c--3fddf2dd054c41c294155c93bda9a17e 1de72c5a573f46618004c21e0edb6c52 69b474117163457391eeaa4fd386606c--1de72c5a573f46618004c21e0edb6c52 1de72c5a573f46618004c21e0edb6c52--28320fd1ac66464091644e77a0bc054a 22077de29a8a4deeadefcb40d05cd295 bbf3691d667c46c4a90e43e126865992 RX(3.0*phi) b356827202e54078af290d7807263fa8--bbf3691d667c46c4a90e43e126865992 34f29064f8d9425385745cd68ab98a69 3 7885a0c466674b96a3369d92d903cf70 RX(theta₂) bbf3691d667c46c4a90e43e126865992--7885a0c466674b96a3369d92d903cf70 1f5d3313c733450690be27d9cd193ade RY(theta₆) 7885a0c466674b96a3369d92d903cf70--1f5d3313c733450690be27d9cd193ade 2311b3d1bc0244308b6a7c6485ce9a49 RX(theta₁₀) 1f5d3313c733450690be27d9cd193ade--2311b3d1bc0244308b6a7c6485ce9a49 55eac790dbf144d7bffac43f7b9ad27f 2311b3d1bc0244308b6a7c6485ce9a49--55eac790dbf144d7bffac43f7b9ad27f 5d6e59f2f271411198620aab99e7f4e9 X 55eac790dbf144d7bffac43f7b9ad27f--5d6e59f2f271411198620aab99e7f4e9 5d6e59f2f271411198620aab99e7f4e9--2d371f9e703041ca8b89fafd1f9ea603 6fe5e1dab49d43d7a077dbc608681019 RX(theta₁₄) 5d6e59f2f271411198620aab99e7f4e9--6fe5e1dab49d43d7a077dbc608681019 23436408275e4385a9d78c5f85835740 RY(theta₁₈) 6fe5e1dab49d43d7a077dbc608681019--23436408275e4385a9d78c5f85835740 4829188d88d543ea842f3a40eec0830a RX(theta₂₂) 23436408275e4385a9d78c5f85835740--4829188d88d543ea842f3a40eec0830a f87dc24cc8da47d1afe9ebd64ad02b2f 4829188d88d543ea842f3a40eec0830a--f87dc24cc8da47d1afe9ebd64ad02b2f 1a947255eb7c42a3b589c387bd8cb6c1 X f87dc24cc8da47d1afe9ebd64ad02b2f--1a947255eb7c42a3b589c387bd8cb6c1 1a947255eb7c42a3b589c387bd8cb6c1--1de72c5a573f46618004c21e0edb6c52 1a947255eb7c42a3b589c387bd8cb6c1--22077de29a8a4deeadefcb40d05cd295 14ae3cc07fff4ccb80def03a9856b4a9 d618f233a7364651aaf309eae0e0d63c RX(4.0*phi) 34f29064f8d9425385745cd68ab98a69--d618f233a7364651aaf309eae0e0d63c 0b9f446078f1430fb1704c249222c056 RX(theta₃) d618f233a7364651aaf309eae0e0d63c--0b9f446078f1430fb1704c249222c056 b06d79559bc2436082ad1e85ef424f1c RY(theta₇) 0b9f446078f1430fb1704c249222c056--b06d79559bc2436082ad1e85ef424f1c 1a744b6e23804a95a6a8977b95b2b1cf RX(theta₁₁) b06d79559bc2436082ad1e85ef424f1c--1a744b6e23804a95a6a8977b95b2b1cf b20dcaba858c4b6487ceb5dc0c976f9b X 1a744b6e23804a95a6a8977b95b2b1cf--b20dcaba858c4b6487ceb5dc0c976f9b b20dcaba858c4b6487ceb5dc0c976f9b--55eac790dbf144d7bffac43f7b9ad27f a33f125068e045c4b3cf6d9bd22db98d b20dcaba858c4b6487ceb5dc0c976f9b--a33f125068e045c4b3cf6d9bd22db98d f1616c06bb454610b80d10f958e0fa8a RX(theta₁₅) a33f125068e045c4b3cf6d9bd22db98d--f1616c06bb454610b80d10f958e0fa8a 436b01b2f2844b6f89748acd1b7d8732 RY(theta₁₉) f1616c06bb454610b80d10f958e0fa8a--436b01b2f2844b6f89748acd1b7d8732 526e8577bc5e49adbe37be972b47ed62 RX(theta₂₃) 436b01b2f2844b6f89748acd1b7d8732--526e8577bc5e49adbe37be972b47ed62 03db57457a7048709589f3704c7a1125 X 526e8577bc5e49adbe37be972b47ed62--03db57457a7048709589f3704c7a1125 03db57457a7048709589f3704c7a1125--f87dc24cc8da47d1afe9ebd64ad02b2f 228e989b302e4cf4a5a078801335eeba 03db57457a7048709589f3704c7a1125--228e989b302e4cf4a5a078801335eeba 228e989b302e4cf4a5a078801335eeba--14ae3cc07fff4ccb80def03a9856b4a9
from qadence import QuantumModel, QuantumCircuit, total_magnetization, hea

model = QuantumModel(QuantumCircuit(3, hea(3,2)), total_magnetization(3))
%3 cluster_439542b5e145489cbe8a47f7759e3338 Obs. cluster_628e919401404a128a128d624c79acad cluster_61c650be8ab44beb9676805e8fb5c8f1 HEA e3ea3d7f54094e00880c02839864abc4 0 54c1fb6a785b4c44863fc6c6c48196c4 RX(theta₀) e3ea3d7f54094e00880c02839864abc4--54c1fb6a785b4c44863fc6c6c48196c4 fe050bc59516478aaa82005fe338a80d 1 550acbab1e004aa59ccf083f2c003af0 RY(theta₃) 54c1fb6a785b4c44863fc6c6c48196c4--550acbab1e004aa59ccf083f2c003af0 ee992cdfe85e467ab5dbaeebacd6e66e RX(theta₆) 550acbab1e004aa59ccf083f2c003af0--ee992cdfe85e467ab5dbaeebacd6e66e 0cf00ad113ee41a5aca9c2ca7a99feb7 ee992cdfe85e467ab5dbaeebacd6e66e--0cf00ad113ee41a5aca9c2ca7a99feb7 c0bf70085832401c92a34c0ea3dc40ba 0cf00ad113ee41a5aca9c2ca7a99feb7--c0bf70085832401c92a34c0ea3dc40ba ac859b42a3714410ae4538947fb6e94a RX(theta₉) c0bf70085832401c92a34c0ea3dc40ba--ac859b42a3714410ae4538947fb6e94a c059865d9a234a5d84784986b197a4f0 RY(theta₁₂) ac859b42a3714410ae4538947fb6e94a--c059865d9a234a5d84784986b197a4f0 4d774394667b4edcaa3f462e0e9e36a5 RX(theta₁₅) c059865d9a234a5d84784986b197a4f0--4d774394667b4edcaa3f462e0e9e36a5 2fa7d683c2164fb7af564c56685b0422 4d774394667b4edcaa3f462e0e9e36a5--2fa7d683c2164fb7af564c56685b0422 377247eb46be4c4c986cfaaf4649331c 2fa7d683c2164fb7af564c56685b0422--377247eb46be4c4c986cfaaf4649331c 5027ceb33629494cb4a1a4b3d2f951ad 377247eb46be4c4c986cfaaf4649331c--5027ceb33629494cb4a1a4b3d2f951ad 9d3b12ce71fc4f54b852d81612994b42 5027ceb33629494cb4a1a4b3d2f951ad--9d3b12ce71fc4f54b852d81612994b42 f8e67b67e35147e184b2cd49b8439ea3 3eac8800427f429bbfd14b63e7da5f13 RX(theta₁) fe050bc59516478aaa82005fe338a80d--3eac8800427f429bbfd14b63e7da5f13 b42f54b6cf504a93ac7ed6c0d4b37572 2 223cc6a9716b4f6293aea46c3ac2e492 RY(theta₄) 3eac8800427f429bbfd14b63e7da5f13--223cc6a9716b4f6293aea46c3ac2e492 e663cc94ac65455396dd56d92d8ad332 RX(theta₇) 223cc6a9716b4f6293aea46c3ac2e492--e663cc94ac65455396dd56d92d8ad332 b9974a227fc940fd8fc735df43b75cb7 X e663cc94ac65455396dd56d92d8ad332--b9974a227fc940fd8fc735df43b75cb7 b9974a227fc940fd8fc735df43b75cb7--0cf00ad113ee41a5aca9c2ca7a99feb7 4d2d126565394058a6fd711a57ef9f62 b9974a227fc940fd8fc735df43b75cb7--4d2d126565394058a6fd711a57ef9f62 74e366d99be047d3a54b9cf010433100 RX(theta₁₀) 4d2d126565394058a6fd711a57ef9f62--74e366d99be047d3a54b9cf010433100 06cad5bac7aa4f4687a70b6f2d61a6ca RY(theta₁₃) 74e366d99be047d3a54b9cf010433100--06cad5bac7aa4f4687a70b6f2d61a6ca e831d72d5f814b1e88caf5d7f6d1bc09 RX(theta₁₆) 06cad5bac7aa4f4687a70b6f2d61a6ca--e831d72d5f814b1e88caf5d7f6d1bc09 a67762baf337497f8b1d7533a70be3b4 X e831d72d5f814b1e88caf5d7f6d1bc09--a67762baf337497f8b1d7533a70be3b4 a67762baf337497f8b1d7533a70be3b4--2fa7d683c2164fb7af564c56685b0422 1df1295f47b6434ea9b223646060e9cc a67762baf337497f8b1d7533a70be3b4--1df1295f47b6434ea9b223646060e9cc 1a88fdbd39df43c3a5e84a78f888395f AddBlock 1df1295f47b6434ea9b223646060e9cc--1a88fdbd39df43c3a5e84a78f888395f 1a88fdbd39df43c3a5e84a78f888395f--f8e67b67e35147e184b2cd49b8439ea3 c933f6bfb28348e9b3271b2ea460d823 a253b4f577454a6ebbf7cc7af028ff81 RX(theta₂) b42f54b6cf504a93ac7ed6c0d4b37572--a253b4f577454a6ebbf7cc7af028ff81 9781ffd6da984f67acba80264ad04bc4 RY(theta₅) a253b4f577454a6ebbf7cc7af028ff81--9781ffd6da984f67acba80264ad04bc4 7594a098858c4fb2a140739a3aa8cb53 RX(theta₈) 9781ffd6da984f67acba80264ad04bc4--7594a098858c4fb2a140739a3aa8cb53 f46f3652a60e47ac81215a35e3db6d7b 7594a098858c4fb2a140739a3aa8cb53--f46f3652a60e47ac81215a35e3db6d7b 5d85ad7544db44ddb11a4dc81c3d71c3 X f46f3652a60e47ac81215a35e3db6d7b--5d85ad7544db44ddb11a4dc81c3d71c3 5d85ad7544db44ddb11a4dc81c3d71c3--4d2d126565394058a6fd711a57ef9f62 55b8fa6856b341d89aea06b88287cef8 RX(theta₁₁) 5d85ad7544db44ddb11a4dc81c3d71c3--55b8fa6856b341d89aea06b88287cef8 11cc4c1bda0b47518648b2a6538d78cd RY(theta₁₄) 55b8fa6856b341d89aea06b88287cef8--11cc4c1bda0b47518648b2a6538d78cd 965dea99dcdb487fb0fe3e574aebb613 RX(theta₁₇) 11cc4c1bda0b47518648b2a6538d78cd--965dea99dcdb487fb0fe3e574aebb613 259054af9da0495993441e8a2e47875f 965dea99dcdb487fb0fe3e574aebb613--259054af9da0495993441e8a2e47875f cb498311a7294687a272b029703fd644 X 259054af9da0495993441e8a2e47875f--cb498311a7294687a272b029703fd644 cb498311a7294687a272b029703fd644--1df1295f47b6434ea9b223646060e9cc d2aaad1f6327444693f091ae505c54fa cb498311a7294687a272b029703fd644--d2aaad1f6327444693f091ae505c54fa d2aaad1f6327444693f091ae505c54fa--c933f6bfb28348e9b3271b2ea460d823
from qadence import *

b = chain(SWAP(0,1), SWAP(0,3))
%3 f97ee7d5e7aa478eb36ba9b5e3c5a1b5 0 8dd3e3437cd14017b9f4e7bb1e4a0db7 f97ee7d5e7aa478eb36ba9b5e3c5a1b5--8dd3e3437cd14017b9f4e7bb1e4a0db7 95de8e3c4f174e1abef73c24c255d7c5 1 6f5ccbf3f4864ad38bf6fc0e9b6441b4 0433fdb6c5bd4daf88565eb6749d1981 8dd3e3437cd14017b9f4e7bb1e4a0db7--0433fdb6c5bd4daf88565eb6749d1981 a2ccda30b0204795a90bc73207b13882 6f5ccbf3f4864ad38bf6fc0e9b6441b4--a2ccda30b0204795a90bc73207b13882 c7e645185ec142629cfd05358382a245 743a2444eece4ab981fd4013ced10b05 a2ccda30b0204795a90bc73207b13882--743a2444eece4ab981fd4013ced10b05 9b7614feddee46c8bc20b7cd7c796640 c7e645185ec142629cfd05358382a245--9b7614feddee46c8bc20b7cd7c796640 035a43288d5b4d97abb341ae51d93c78 c2276a13d72e416285d8a395f0aed00b 95de8e3c4f174e1abef73c24c255d7c5--c2276a13d72e416285d8a395f0aed00b db1d0092cab54e5a9851ce96c942ecd6 2 c2276a13d72e416285d8a395f0aed00b--6f5ccbf3f4864ad38bf6fc0e9b6441b4 d0418198613541c585147085f5d07cdd 0433fdb6c5bd4daf88565eb6749d1981--d0418198613541c585147085f5d07cdd b54066957e9e496499575478ada07b0d d0418198613541c585147085f5d07cdd--b54066957e9e496499575478ada07b0d b54066957e9e496499575478ada07b0d--035a43288d5b4d97abb341ae51d93c78 25f1879b0ebb4fbd98777c014fa7701b f30f49f939504c01a873839c711c4887 db1d0092cab54e5a9851ce96c942ecd6--f30f49f939504c01a873839c711c4887 07dcad433fcc4569a38bb4a40d451bb2 3 2da6406ad1ad40bca3f83f0408c5d3c2 f30f49f939504c01a873839c711c4887--2da6406ad1ad40bca3f83f0408c5d3c2 21d60dc06fe64ae4afa2d07dd6010517 2da6406ad1ad40bca3f83f0408c5d3c2--21d60dc06fe64ae4afa2d07dd6010517 64a069ddc40040e08081f0a76113f9ec 21d60dc06fe64ae4afa2d07dd6010517--64a069ddc40040e08081f0a76113f9ec 64a069ddc40040e08081f0a76113f9ec--25f1879b0ebb4fbd98777c014fa7701b 355c041f786d40cf86a207f20d1dc12e 1096f3f842474797a44dcb4d2e0ef58f 07dcad433fcc4569a38bb4a40d451bb2--1096f3f842474797a44dcb4d2e0ef58f 321a94818747454096a817a694b62c00 1096f3f842474797a44dcb4d2e0ef58f--321a94818747454096a817a694b62c00 741bc24939174d009eb9415c8eea70a0 321a94818747454096a817a694b62c00--741bc24939174d009eb9415c8eea70a0 741bc24939174d009eb9415c8eea70a0--c7e645185ec142629cfd05358382a245 743a2444eece4ab981fd4013ced10b05--355c041f786d40cf86a207f20d1dc12e
from qadence import *

b = chain(CPHASE(0, 1, 0.5), CPHASE(0, 2, 0.5), CPHASE(0, 3, 0.5))
%3 a95da574835d46868764f102977978b2 0 28e822a62bae4c41a6269d82f028edd2 a95da574835d46868764f102977978b2--28e822a62bae4c41a6269d82f028edd2 80330103b1b74abab63bb87ae322cc39 1 d8cef006c85c4d54bd11d2dde59dc362 28e822a62bae4c41a6269d82f028edd2--d8cef006c85c4d54bd11d2dde59dc362 a850ecc91337492aa40c402d32632d7d d8cef006c85c4d54bd11d2dde59dc362--a850ecc91337492aa40c402d32632d7d 8a2199a2675040edb3c3213154c41d1e a850ecc91337492aa40c402d32632d7d--8a2199a2675040edb3c3213154c41d1e 7885917924dd4cd58ac3f5adee993069 4de6b006076241128dd513b233718943 PHASE(0.5) 80330103b1b74abab63bb87ae322cc39--4de6b006076241128dd513b233718943 cf4d2a1509ce443e93f834d6af4d2c50 2 4de6b006076241128dd513b233718943--28e822a62bae4c41a6269d82f028edd2 e701f84e017e4707bff787ad1e885ff3 4de6b006076241128dd513b233718943--e701f84e017e4707bff787ad1e885ff3 9c98a02411504e18bb4359022bd4be22 e701f84e017e4707bff787ad1e885ff3--9c98a02411504e18bb4359022bd4be22 9c98a02411504e18bb4359022bd4be22--7885917924dd4cd58ac3f5adee993069 9b91e474be3b47ecb7390537f4bb45a9 bae2dd09bbd04c729b9d158fc573c6b3 cf4d2a1509ce443e93f834d6af4d2c50--bae2dd09bbd04c729b9d158fc573c6b3 457f6b106ac047b6b95ba567fcc6f48c 3 e24586fbf99541b897717b28dd925295 PHASE(0.5) bae2dd09bbd04c729b9d158fc573c6b3--e24586fbf99541b897717b28dd925295 e24586fbf99541b897717b28dd925295--d8cef006c85c4d54bd11d2dde59dc362 1b606f82bfb64bbb96c0b7c28844fa17 e24586fbf99541b897717b28dd925295--1b606f82bfb64bbb96c0b7c28844fa17 1b606f82bfb64bbb96c0b7c28844fa17--9b91e474be3b47ecb7390537f4bb45a9 b29ac5ffc012467cae83758dfe32fbf6 e00c1ab0950940159fa8ab8cc3e05ce6 457f6b106ac047b6b95ba567fcc6f48c--e00c1ab0950940159fa8ab8cc3e05ce6 ec4ee73f1d0a4a4f98f05162e2fe2c92 e00c1ab0950940159fa8ab8cc3e05ce6--ec4ee73f1d0a4a4f98f05162e2fe2c92 fb0ffdfab2c04189b51c8a7e0d9b9ed1 PHASE(0.5) ec4ee73f1d0a4a4f98f05162e2fe2c92--fb0ffdfab2c04189b51c8a7e0d9b9ed1 fb0ffdfab2c04189b51c8a7e0d9b9ed1--a850ecc91337492aa40c402d32632d7d fb0ffdfab2c04189b51c8a7e0d9b9ed1--b29ac5ffc012467cae83758dfe32fbf6

Developer documentation

This section contains examples in pure graphviz that can be used to understand roughly what is done in the actual drawing backend.

import graphviz

font_name = "Sans-Serif"
font_size = "8"

graph_attr = {
    "rankdir": "LR",  # LR = left to right, TB = top to bottom
    "nodesep": "0.1",  # In inches, tells distance between nodes without edges
    "compound": "true",  # Needed to draw properly edges in hamevo when content is hidden
    "splines": "false",  # Needed to draw control gates vertical lines one over the other
}  # These are the default values for graphs

node_attr = {
    "shape": "box",  # 'box' for normal nodes, 'point' for control gates or 'plaintext' for starting nodes (the qubit label).
    "style": "rounded",  # Unfortunately we can't specify the radius of the rounded, at least for this version
    "fontname": font_name,
    "fontsize": font_size,
    "width": "0.1",  # In inches, it doesn't get tinier than the label font.
    "height": "0.1"  # In inches, it doesn't get tinier than the label font.
}  # These are the defaults values that can be overridden at node declaration.

default_cluster_attr = {
    "fontname": font_name,
    "fontsize": font_size,
    "labelloc": "b",  # location of cluster label. b as bottom, t as top
    "style": "rounded"
} # These are the defaults values that can be overridden at sub graph declaration

hamevo_cluster_attr = {
    "label": "HamEvo(t=10)"
}
hamevo_cluster_attr.update(default_cluster_attr)

h = graphviz.Graph(graph_attr=graph_attr, node_attr=node_attr)
h.node("Hello World!")
h

# Define graph
h = graphviz.Graph(node_attr=node_attr, graph_attr=graph_attr)

# Add start and end nodes
for i in range(4):
    h.node(f's{i}', shape="plaintext", label=f'{i}', group=f"{i}")
    h.node(f'e{i}', style='invis', group=f"{i}")

# Add nodes
h.node('X', group="0")
h.node('Y', group="1")

# Add hamevo and its nodes
hamevo = graphviz.Graph(name='cluster_hamevo', graph_attr=hamevo_cluster_attr)
for i in range(4):
    hamevo.node(f'z{i}', shape="box", style="invis", label=f'{i}', group=f"{i}")
h.subgraph(hamevo)

# Add rx gates cluster and its nodes
cluster_attr = {"label": "RX gates"}
cluster_attr.update(default_cluster_attr)
cluster = graphviz.Graph(name="cluster_0", graph_attr=cluster_attr)
cluster.node('RX(x)', group="2")
cluster.node('RX(0.5)', group="3")
h.subgraph(cluster)

h.node('cnot0', label='', shape='point', width='0.1', group='0')
h.node('cnot1', label='X', group='1')
h.node('cnot2', label='', shape='point', width='0.1', group='2')
h.node('cnot3', label='', shape='point', width='0.1', group='3')

# Add edges
h.edge('s0', 'X')
h.edge('X', 'cnot0')
h.edge('cnot0', 'z0', lhead='cluster_hamevo')
h.edge('z0', 'e0', ltail='cluster_hamevo')
h.edge('s1', 'Y')
h.edge('Y', 'cnot1')
h.edge('cnot1', 'z1', lhead='cluster_hamevo')
h.edge('z1', 'e1', ltail='cluster_hamevo')
h.edge('s2', 'RX(x)')
h.edge('RX(x)', 'cnot2')
h.edge('cnot2', 'z2', lhead='cluster_hamevo')
h.edge('z2', 'e2', ltail='cluster_hamevo')
h.edge('s3', 'RX(0.5)')
h.edge('RX(0.5)', 'cnot3')
h.edge('cnot3', 'z3', lhead='cluster_hamevo')
h.edge('z3', 'e3', ltail='cluster_hamevo')
h.edge('cnot1', 'cnot0', constraint='false')  # constraint: false is needed to draw vertical edges
h.edge('cnot1', 'cnot2', constraint='false')  # constraint: false is needed to draw vertical edges
h.edge('cnot1', 'cnot3', constraint='false')  # constraint: false is needed to draw vertical edges
h

Example of cluster of clusters

# Define graph
h = graphviz.Graph(node_attr=node_attr, graph_attr=graph_attr)

# Define start and end nodes
for i in range(4):
    h.node(f's{i}', shape="plaintext", label=f'{i}', group=f"{i}")
    h.node(f'e{i}', style='invis', group=f"{i}")

# Define outer cluster
cluster_attr = {"label": "Outer cluster"}
cluster_attr.update(default_cluster_attr)
outer_cluster = graphviz.Graph(name="cluster_outer", graph_attr=cluster_attr)

# Define inner cluster 1 and its nodes
cluster_attr = {"label": "Inner cluster 1"}
cluster_attr.update(default_cluster_attr)
inner1_cluster = graphviz.Graph(name="cluster_inner1", graph_attr=cluster_attr)
inner1_cluster.node("a0", group="0")
inner1_cluster.node("a1", group="1")
outer_cluster.subgraph(inner1_cluster)

# Define inner cluster 2 and its nodes
cluster_attr = {"label": "Inner cluster 2"}
cluster_attr.update(default_cluster_attr)
inner2_cluster = graphviz.Graph(name="cluster_inner2", graph_attr=cluster_attr)
inner2_cluster.node("a2", group="2")
inner2_cluster.node("a3", group="3")
outer_cluster.subgraph(inner2_cluster)

# This has to be done here, after inner clusters definitions
h.subgraph(outer_cluster)

# Define more nodes
for i in range(4):
    h.node(f"b{i}", group=f"{i}")

for i in range(4):
    h.edge(f's{i}', f'a{i}')
    h.edge(f'a{i}', f'b{i}')
    h.edge(f'b{i}', f'e{i}')

h