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 3d07c1e7cb404b6a96d74f0c3cb7b0b4 0 e6bb8c694dc848d786aa9103a263880f X 3d07c1e7cb404b6a96d74f0c3cb7b0b4--e6bb8c694dc848d786aa9103a263880f 71f52bc8625249b09873ef4c3cd7919a 1 155c57cf095e4b65832313c51959c4aa e6bb8c694dc848d786aa9103a263880f--155c57cf095e4b65832313c51959c4aa a4a67f21706b454b8541f546aa124d2d 42e05f500db444b8bb6ea8d54c3b2a59 Y 71f52bc8625249b09873ef4c3cd7919a--42e05f500db444b8bb6ea8d54c3b2a59 42e05f500db444b8bb6ea8d54c3b2a59--a4a67f21706b454b8541f546aa124d2d
from qadence import X, Y, chain
from qadence.draw import display

b = chain(X(0), Y(0))
%3 fd510ad0c366428396ae39456b84ffc3 0 876ec52556084cb3bedb228a2fc10efa X fd510ad0c366428396ae39456b84ffc3--876ec52556084cb3bedb228a2fc10efa e4058b20083344f6acf8e549391631b7 Y 876ec52556084cb3bedb228a2fc10efa--e4058b20083344f6acf8e549391631b7 a5ab1e000ab849b09807cf4fdcba737c e4058b20083344f6acf8e549391631b7--a5ab1e000ab849b09807cf4fdcba737c
from qadence import X, Y, chain
from qadence.draw import display

b = chain(X(0), Y(1))
%3 4b6fb5f3e6d144bdbc730c11ceca48c0 0 535e0f9b60874f16aae71e07a17d2213 X 4b6fb5f3e6d144bdbc730c11ceca48c0--535e0f9b60874f16aae71e07a17d2213 29fdacc9ea634cec80f25585793fdc8e 1 859ec9590024420d9bc467183742e03a 535e0f9b60874f16aae71e07a17d2213--859ec9590024420d9bc467183742e03a b1cb24ab52394da989ab970b649e53c2 859ec9590024420d9bc467183742e03a--b1cb24ab52394da989ab970b649e53c2 b957ad07d82348899a1edacd0a37f171 ce5e604622a4446c8890c8e198629e07 29fdacc9ea634cec80f25585793fdc8e--ce5e604622a4446c8890c8e198629e07 2ab6eb1405244b6bb5ba47774b0733b8 Y ce5e604622a4446c8890c8e198629e07--2ab6eb1405244b6bb5ba47774b0733b8 2ab6eb1405244b6bb5ba47774b0733b8--b957ad07d82348899a1edacd0a37f171
from qadence import X, Y, add
from qadence.draw import display

b = add(X(0), Y(1), X(2))
%3 cluster_c57ca32ba53d4b4eaaa9089f0336a014 f5dd5e4f14924310a4451ca23859a930 0 a27b13a1036c419b9e1c07cdcba7cbeb f5dd5e4f14924310a4451ca23859a930--a27b13a1036c419b9e1c07cdcba7cbeb 1309c050141b4ca69720178f62ba4f14 1 d2d6bc11c6e4479bb3c4391d993effa1 a27b13a1036c419b9e1c07cdcba7cbeb--d2d6bc11c6e4479bb3c4391d993effa1 4ad3667e46ca40ecaeab8aa730fb1a10 2005c7248cc64a808c340f764e9b5596 AddBlock 1309c050141b4ca69720178f62ba4f14--2005c7248cc64a808c340f764e9b5596 b2fb75c71a484b23b93d52299c926a51 2 2005c7248cc64a808c340f764e9b5596--4ad3667e46ca40ecaeab8aa730fb1a10 a69e56d6467046649a66af8db18c830b e40cfa599fde4f538415bfb214ba65b3 b2fb75c71a484b23b93d52299c926a51--e40cfa599fde4f538415bfb214ba65b3 e40cfa599fde4f538415bfb214ba65b3--a69e56d6467046649a66af8db18c830b
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_5304d8ab889f47ea9a9b7c5f2c9b4541 cluster_fdc8c96124044971adc25a5e58df4d17 rx 62658d870651478193700ea94bb82649 0 59373b3059764be09188acd925f90658 X 62658d870651478193700ea94bb82649--59373b3059764be09188acd925f90658 5a558d75bd58432e820f94568d8cbd0f 1 889583dbdd6141c0a25e24683b3d6bba 59373b3059764be09188acd925f90658--889583dbdd6141c0a25e24683b3d6bba 1cc4ee58d43b4116b356f9c9d5520426 889583dbdd6141c0a25e24683b3d6bba--1cc4ee58d43b4116b356f9c9d5520426 897f5f1d01b84caa9647dd87069fc697 1cc4ee58d43b4116b356f9c9d5520426--897f5f1d01b84caa9647dd87069fc697 e4c481898a1840738048b2ccab12822c 28fba9184dea4d5fb0641e941ef4514b Y 5a558d75bd58432e820f94568d8cbd0f--28fba9184dea4d5fb0641e941ef4514b ab7eff44a5d74effb625ca78e8c91d8a 2 d12481ef1d9b46da932a6a4e0c8707ea 28fba9184dea4d5fb0641e941ef4514b--d12481ef1d9b46da932a6a4e0c8707ea 35854e6412e44051b27e784fa7cc3896 HamEvo d12481ef1d9b46da932a6a4e0c8707ea--35854e6412e44051b27e784fa7cc3896 35854e6412e44051b27e784fa7cc3896--e4c481898a1840738048b2ccab12822c fdf9f1d639df41d5b6cf2d2ee79f6592 d39e616cc75f4f80b44bb3ad3d515b0a RX(x) ab7eff44a5d74effb625ca78e8c91d8a--d39e616cc75f4f80b44bb3ad3d515b0a 7d73ee7a0d7d4bcb809f86c34a739810 3 b83dc52c4279480ba405637668d73bf5 d39e616cc75f4f80b44bb3ad3d515b0a--b83dc52c4279480ba405637668d73bf5 42027dedd27b41748b68d65222ffc13a t = 10 b83dc52c4279480ba405637668d73bf5--42027dedd27b41748b68d65222ffc13a 42027dedd27b41748b68d65222ffc13a--fdf9f1d639df41d5b6cf2d2ee79f6592 a8a2101f584c4bf5a89124264dd0a0e3 1ae5e5249a4a4ffa953e5c69fd39f227 RX(0.5) 7d73ee7a0d7d4bcb809f86c34a739810--1ae5e5249a4a4ffa953e5c69fd39f227 322e64120e1049ffa2261d1557695f23 X 1ae5e5249a4a4ffa953e5c69fd39f227--322e64120e1049ffa2261d1557695f23 322e64120e1049ffa2261d1557695f23--b83dc52c4279480ba405637668d73bf5 0fc5b747ebaf46c78e601f182b040726 322e64120e1049ffa2261d1557695f23--0fc5b747ebaf46c78e601f182b040726 0fc5b747ebaf46c78e601f182b040726--a8a2101f584c4bf5a89124264dd0a0e3
from qadence import feature_map, hea, chain

block = chain(feature_map(4, reupload_scaling="Tower"), hea(4,2))
%3 cluster_74bd7fcff075461bb3ee168c675833f2 HEA cluster_ca3fc097c2d244ab9586371387df460e Tower Fourier FM 3890ee87f0e54358bd0cbbedadffd9de 0 eda5a51635c34c658343796bbb58e6c9 RX(1.0*phi) 3890ee87f0e54358bd0cbbedadffd9de--eda5a51635c34c658343796bbb58e6c9 1948ea3d0d0f489d9e82104aed254835 1 022a04fbe723427f9c7e2a9ffef4706f RX(theta₀) eda5a51635c34c658343796bbb58e6c9--022a04fbe723427f9c7e2a9ffef4706f f4af52a9fc044009bf7a73103e05b62a RY(theta₄) 022a04fbe723427f9c7e2a9ffef4706f--f4af52a9fc044009bf7a73103e05b62a 8659ca5ffaf64e7bb4b6f10159c730f5 RX(theta₈) f4af52a9fc044009bf7a73103e05b62a--8659ca5ffaf64e7bb4b6f10159c730f5 466fab19d5124c20a17dfb292a5479f0 8659ca5ffaf64e7bb4b6f10159c730f5--466fab19d5124c20a17dfb292a5479f0 952ac03323b149d79ed08055febb3ee8 466fab19d5124c20a17dfb292a5479f0--952ac03323b149d79ed08055febb3ee8 c5e87a28f9a442db880ebc0938b60d18 RX(theta₁₂) 952ac03323b149d79ed08055febb3ee8--c5e87a28f9a442db880ebc0938b60d18 f032fc97876b4d9ba0fce97a7ed59db7 RY(theta₁₆) c5e87a28f9a442db880ebc0938b60d18--f032fc97876b4d9ba0fce97a7ed59db7 71e1128c49db425a86e567acdadadda3 RX(theta₂₀) f032fc97876b4d9ba0fce97a7ed59db7--71e1128c49db425a86e567acdadadda3 0cc0880aae0f47e18ec31338d1303399 71e1128c49db425a86e567acdadadda3--0cc0880aae0f47e18ec31338d1303399 5e745ae6a3f440589f569610b3baf481 0cc0880aae0f47e18ec31338d1303399--5e745ae6a3f440589f569610b3baf481 b4710cd8fff24f42bef76d054ceaf2f6 5e745ae6a3f440589f569610b3baf481--b4710cd8fff24f42bef76d054ceaf2f6 c54ed55f885a4f539a254262c32c6080 0d8b0b1c354042599e053b770c815a24 RX(2.0*phi) 1948ea3d0d0f489d9e82104aed254835--0d8b0b1c354042599e053b770c815a24 099a88a8dca540f8a670551ed017e463 2 9fecde249cd74e72ad5e1c0400fbda0f RX(theta₁) 0d8b0b1c354042599e053b770c815a24--9fecde249cd74e72ad5e1c0400fbda0f 0f44bc7c2b6945a68d3c7f6acb670be4 RY(theta₅) 9fecde249cd74e72ad5e1c0400fbda0f--0f44bc7c2b6945a68d3c7f6acb670be4 47f33de7cf00468c913cfdfb21c8155d RX(theta₉) 0f44bc7c2b6945a68d3c7f6acb670be4--47f33de7cf00468c913cfdfb21c8155d 431762bf108c45be9e855c4f593735a5 X 47f33de7cf00468c913cfdfb21c8155d--431762bf108c45be9e855c4f593735a5 431762bf108c45be9e855c4f593735a5--466fab19d5124c20a17dfb292a5479f0 d6404054778b452db959ad164fbc5589 431762bf108c45be9e855c4f593735a5--d6404054778b452db959ad164fbc5589 070322c02354421fbf69d38c1d521ff5 RX(theta₁₃) d6404054778b452db959ad164fbc5589--070322c02354421fbf69d38c1d521ff5 edde4625b84c4abbb9dbb79f96e34392 RY(theta₁₇) 070322c02354421fbf69d38c1d521ff5--edde4625b84c4abbb9dbb79f96e34392 f24c5f15c820460282e40a7dda093298 RX(theta₂₁) edde4625b84c4abbb9dbb79f96e34392--f24c5f15c820460282e40a7dda093298 28f57a64279940959e976522dba443b8 X f24c5f15c820460282e40a7dda093298--28f57a64279940959e976522dba443b8 28f57a64279940959e976522dba443b8--0cc0880aae0f47e18ec31338d1303399 0ddda6e2f40d4d8aaaee6785dabb3a82 28f57a64279940959e976522dba443b8--0ddda6e2f40d4d8aaaee6785dabb3a82 0ddda6e2f40d4d8aaaee6785dabb3a82--c54ed55f885a4f539a254262c32c6080 0f51ba6ee83d4be5bd729f91928b6e0a 9dbe25f5483a4e4fb2c7a3361da378aa RX(3.0*phi) 099a88a8dca540f8a670551ed017e463--9dbe25f5483a4e4fb2c7a3361da378aa f7d1ba50c31642a89acc9aae31c3e190 3 aaff50e14cda4e1cb6e12a60c5cb9c31 RX(theta₂) 9dbe25f5483a4e4fb2c7a3361da378aa--aaff50e14cda4e1cb6e12a60c5cb9c31 54547ef8f28e4d9689f54e5b66dcdabb RY(theta₆) aaff50e14cda4e1cb6e12a60c5cb9c31--54547ef8f28e4d9689f54e5b66dcdabb 4a2afbc41c9b4854afbc4214f6871725 RX(theta₁₀) 54547ef8f28e4d9689f54e5b66dcdabb--4a2afbc41c9b4854afbc4214f6871725 ac07a6959b8644a692c8d4ae2e874957 4a2afbc41c9b4854afbc4214f6871725--ac07a6959b8644a692c8d4ae2e874957 fe541c6864e046b3a4b180d63eafc608 X ac07a6959b8644a692c8d4ae2e874957--fe541c6864e046b3a4b180d63eafc608 fe541c6864e046b3a4b180d63eafc608--d6404054778b452db959ad164fbc5589 65fe5a9661674560a663914b6270514f RX(theta₁₄) fe541c6864e046b3a4b180d63eafc608--65fe5a9661674560a663914b6270514f a16c9533507b4fba9fb9501eddf73c14 RY(theta₁₈) 65fe5a9661674560a663914b6270514f--a16c9533507b4fba9fb9501eddf73c14 bfcd102dee814d39821477c8ebce12fc RX(theta₂₂) a16c9533507b4fba9fb9501eddf73c14--bfcd102dee814d39821477c8ebce12fc 957eef891ad5412c992495ce4af4357e bfcd102dee814d39821477c8ebce12fc--957eef891ad5412c992495ce4af4357e ad492b8076194d55b88d5d892f751691 X 957eef891ad5412c992495ce4af4357e--ad492b8076194d55b88d5d892f751691 ad492b8076194d55b88d5d892f751691--0ddda6e2f40d4d8aaaee6785dabb3a82 ad492b8076194d55b88d5d892f751691--0f51ba6ee83d4be5bd729f91928b6e0a 648f43eae4c249708417f8dc6281aa70 ca99690cb74a4bf3a9d130d7a1d7481e RX(4.0*phi) f7d1ba50c31642a89acc9aae31c3e190--ca99690cb74a4bf3a9d130d7a1d7481e 3e0c167174e244f89dd47a6dad5e5628 RX(theta₃) ca99690cb74a4bf3a9d130d7a1d7481e--3e0c167174e244f89dd47a6dad5e5628 cbc2cf6448ff41a0b756873f21efce33 RY(theta₇) 3e0c167174e244f89dd47a6dad5e5628--cbc2cf6448ff41a0b756873f21efce33 27043833fac242f0a08387bda091f1c9 RX(theta₁₁) cbc2cf6448ff41a0b756873f21efce33--27043833fac242f0a08387bda091f1c9 10a197a90fa7433b96511eb540a463a2 X 27043833fac242f0a08387bda091f1c9--10a197a90fa7433b96511eb540a463a2 10a197a90fa7433b96511eb540a463a2--ac07a6959b8644a692c8d4ae2e874957 932f10190c2c40a290ddab2bbce0f442 10a197a90fa7433b96511eb540a463a2--932f10190c2c40a290ddab2bbce0f442 245986b4464a4c86939ac1a1cecc092d RX(theta₁₅) 932f10190c2c40a290ddab2bbce0f442--245986b4464a4c86939ac1a1cecc092d 01265f7c02004e4cbe704660bc3ff438 RY(theta₁₉) 245986b4464a4c86939ac1a1cecc092d--01265f7c02004e4cbe704660bc3ff438 d1032cfcd8844a10bc952010e5ae5759 RX(theta₂₃) 01265f7c02004e4cbe704660bc3ff438--d1032cfcd8844a10bc952010e5ae5759 64897b9cb7cd4d13b98d04fe63393f4c X d1032cfcd8844a10bc952010e5ae5759--64897b9cb7cd4d13b98d04fe63393f4c 64897b9cb7cd4d13b98d04fe63393f4c--957eef891ad5412c992495ce4af4357e 7fe7f4f902714d75bd5a9b8e5d79bbea 64897b9cb7cd4d13b98d04fe63393f4c--7fe7f4f902714d75bd5a9b8e5d79bbea 7fe7f4f902714d75bd5a9b8e5d79bbea--648f43eae4c249708417f8dc6281aa70
from qadence import QuantumModel, QuantumCircuit, total_magnetization, hea

model = QuantumModel(QuantumCircuit(3, hea(3,2)), total_magnetization(3))
%3 cluster_ba682810706b41b4aa4b87b6b3ab1dd0 Obs. cluster_77cb06abd1404754b8d5536b73ee274e cluster_10dd6727496e480b980e1964bc2254bd HEA 637825673e74477eb51dc8dd64240d10 0 7daa3a45ba81435b9aee99bf55db3842 RX(theta₀) 637825673e74477eb51dc8dd64240d10--7daa3a45ba81435b9aee99bf55db3842 e9f13f2cdebd459bb1fb59fa967881b9 1 c5296099a36e4333ae9495f1ce5cb6bc RY(theta₃) 7daa3a45ba81435b9aee99bf55db3842--c5296099a36e4333ae9495f1ce5cb6bc 33f191348181445cae53cab74a8c872f RX(theta₆) c5296099a36e4333ae9495f1ce5cb6bc--33f191348181445cae53cab74a8c872f 90fe177df3424b1885415d1f0ace8ddd 33f191348181445cae53cab74a8c872f--90fe177df3424b1885415d1f0ace8ddd c7e16b4c3d0140229d8aa73a4d7da9ee 90fe177df3424b1885415d1f0ace8ddd--c7e16b4c3d0140229d8aa73a4d7da9ee dec6c69f137046b6b6ba1f8f10086a82 RX(theta₉) c7e16b4c3d0140229d8aa73a4d7da9ee--dec6c69f137046b6b6ba1f8f10086a82 12e200f83ae54eb59ba871d67346b3a2 RY(theta₁₂) dec6c69f137046b6b6ba1f8f10086a82--12e200f83ae54eb59ba871d67346b3a2 de24ff96ed984fe2abd7702bf0ec11b9 RX(theta₁₅) 12e200f83ae54eb59ba871d67346b3a2--de24ff96ed984fe2abd7702bf0ec11b9 f160108657fe40f895f85aa69c6d52f1 de24ff96ed984fe2abd7702bf0ec11b9--f160108657fe40f895f85aa69c6d52f1 c2cc737b5ed744589d829f8af0fb2559 f160108657fe40f895f85aa69c6d52f1--c2cc737b5ed744589d829f8af0fb2559 d70f2c6d040b40a092d2d0734e505850 c2cc737b5ed744589d829f8af0fb2559--d70f2c6d040b40a092d2d0734e505850 3b0a256bbe2d4617a2bd317289a0d8ff d70f2c6d040b40a092d2d0734e505850--3b0a256bbe2d4617a2bd317289a0d8ff b85b22e23478435fb37052d030120e7c dea62a5b9897489a877277884c21010a RX(theta₁) e9f13f2cdebd459bb1fb59fa967881b9--dea62a5b9897489a877277884c21010a 4034da0d4cb044ed8415050f14e8b932 2 6fab89b0765441d5a495b265bcc9c359 RY(theta₄) dea62a5b9897489a877277884c21010a--6fab89b0765441d5a495b265bcc9c359 a2c09c191df1484da59df6bcd24eae8a RX(theta₇) 6fab89b0765441d5a495b265bcc9c359--a2c09c191df1484da59df6bcd24eae8a b8a4415eeae840d2855823faaa42edb7 X a2c09c191df1484da59df6bcd24eae8a--b8a4415eeae840d2855823faaa42edb7 b8a4415eeae840d2855823faaa42edb7--90fe177df3424b1885415d1f0ace8ddd 35703398ae7b4ef3b19cb158de4470a8 b8a4415eeae840d2855823faaa42edb7--35703398ae7b4ef3b19cb158de4470a8 c2214dc35cae410ab472f48483f28059 RX(theta₁₀) 35703398ae7b4ef3b19cb158de4470a8--c2214dc35cae410ab472f48483f28059 6f31b0ccdbd4482a8de89eadfb558779 RY(theta₁₃) c2214dc35cae410ab472f48483f28059--6f31b0ccdbd4482a8de89eadfb558779 bee2756973fa4fb4b7e7cc0336038ab5 RX(theta₁₆) 6f31b0ccdbd4482a8de89eadfb558779--bee2756973fa4fb4b7e7cc0336038ab5 cb2d4ef50bff4fe3a55906e3267ee090 X bee2756973fa4fb4b7e7cc0336038ab5--cb2d4ef50bff4fe3a55906e3267ee090 cb2d4ef50bff4fe3a55906e3267ee090--f160108657fe40f895f85aa69c6d52f1 ce873e1cb85c46a49a8b6627f964652c cb2d4ef50bff4fe3a55906e3267ee090--ce873e1cb85c46a49a8b6627f964652c 3b8cd1c244a14636889944c067d12a75 AddBlock ce873e1cb85c46a49a8b6627f964652c--3b8cd1c244a14636889944c067d12a75 3b8cd1c244a14636889944c067d12a75--b85b22e23478435fb37052d030120e7c 9c1fae7f27de4843ac440c1052ade824 a0dbb750735f4c17afd26af9053186ba RX(theta₂) 4034da0d4cb044ed8415050f14e8b932--a0dbb750735f4c17afd26af9053186ba f3bec43afa62475daef0baf5b389b237 RY(theta₅) a0dbb750735f4c17afd26af9053186ba--f3bec43afa62475daef0baf5b389b237 3d151fa8142a47e49ae57d37bb9d8ce9 RX(theta₈) f3bec43afa62475daef0baf5b389b237--3d151fa8142a47e49ae57d37bb9d8ce9 29417644367c43dcb0157eaa13047bdd 3d151fa8142a47e49ae57d37bb9d8ce9--29417644367c43dcb0157eaa13047bdd 6214308842f74fc988f71a71a821d199 X 29417644367c43dcb0157eaa13047bdd--6214308842f74fc988f71a71a821d199 6214308842f74fc988f71a71a821d199--35703398ae7b4ef3b19cb158de4470a8 75e6a4f070ab4c60b9ceef440b311960 RX(theta₁₁) 6214308842f74fc988f71a71a821d199--75e6a4f070ab4c60b9ceef440b311960 41e5f68323d34559849a6c123609c6b7 RY(theta₁₄) 75e6a4f070ab4c60b9ceef440b311960--41e5f68323d34559849a6c123609c6b7 8c28aba4673046a38bfab8a3d5878d08 RX(theta₁₇) 41e5f68323d34559849a6c123609c6b7--8c28aba4673046a38bfab8a3d5878d08 78e8d709a32241e19acc15a1c3db793c 8c28aba4673046a38bfab8a3d5878d08--78e8d709a32241e19acc15a1c3db793c 6a4a25efa8f744218f02af54fcddb47c X 78e8d709a32241e19acc15a1c3db793c--6a4a25efa8f744218f02af54fcddb47c 6a4a25efa8f744218f02af54fcddb47c--ce873e1cb85c46a49a8b6627f964652c c4802cc1d1a34d3982b6352682a41342 6a4a25efa8f744218f02af54fcddb47c--c4802cc1d1a34d3982b6352682a41342 c4802cc1d1a34d3982b6352682a41342--9c1fae7f27de4843ac440c1052ade824
from qadence import *

b = chain(SWAP(0,1), SWAP(0,3))
%3 8ac79d1da7b241789eaa9fc03e1de629 0 15da6b08f7844c01a3f73924ea838967 8ac79d1da7b241789eaa9fc03e1de629--15da6b08f7844c01a3f73924ea838967 810498861e8248b1860c446d7415ef4a 1 5b4838a5e3d74f6e98ef3671ce79d1f7 938948726da1479799ad007e5f177230 15da6b08f7844c01a3f73924ea838967--938948726da1479799ad007e5f177230 cbae9a5c012a400b84b9e59adf0641e6 5b4838a5e3d74f6e98ef3671ce79d1f7--cbae9a5c012a400b84b9e59adf0641e6 5151090f7a734156a1ecfab175a87bf1 f8296935488b4e31b418c0f14448238d cbae9a5c012a400b84b9e59adf0641e6--f8296935488b4e31b418c0f14448238d 3bcfc1fdbd31417ea1090da388af78a2 5151090f7a734156a1ecfab175a87bf1--3bcfc1fdbd31417ea1090da388af78a2 3571f4ed9c7f4fb087b3756a192e55b8 5c35c4359c3f4dea849d8c113c84b013 810498861e8248b1860c446d7415ef4a--5c35c4359c3f4dea849d8c113c84b013 f2dc088a0641451d87a7b78a11b3c859 2 5c35c4359c3f4dea849d8c113c84b013--5b4838a5e3d74f6e98ef3671ce79d1f7 e720e6b39c6a47f6815eb0f802532cc1 938948726da1479799ad007e5f177230--e720e6b39c6a47f6815eb0f802532cc1 247e7c7a841a4d8e90000101c1e7c6b8 e720e6b39c6a47f6815eb0f802532cc1--247e7c7a841a4d8e90000101c1e7c6b8 247e7c7a841a4d8e90000101c1e7c6b8--3571f4ed9c7f4fb087b3756a192e55b8 0b309ae3fff146fa8230f7426ed130d4 ca02ac39a0d94d7ba000ee48012594da f2dc088a0641451d87a7b78a11b3c859--ca02ac39a0d94d7ba000ee48012594da eb92721ffbc944d6826fd8d2b9b8e48a 3 96304f5cb73f4137878d600daf9419f1 ca02ac39a0d94d7ba000ee48012594da--96304f5cb73f4137878d600daf9419f1 1e495d428bf14379b24ea3a822f9cb29 96304f5cb73f4137878d600daf9419f1--1e495d428bf14379b24ea3a822f9cb29 2876476f99f74ed48aa657704dbda98a 1e495d428bf14379b24ea3a822f9cb29--2876476f99f74ed48aa657704dbda98a 2876476f99f74ed48aa657704dbda98a--0b309ae3fff146fa8230f7426ed130d4 958963c2eea84be0a8316dc2fa4ca133 bd30c4596fb44f53b7ccdee155c6a8f7 eb92721ffbc944d6826fd8d2b9b8e48a--bd30c4596fb44f53b7ccdee155c6a8f7 72f9a0a8c4fb41b1bd7761834ce1af53 bd30c4596fb44f53b7ccdee155c6a8f7--72f9a0a8c4fb41b1bd7761834ce1af53 23c8f74ee7ac49f9b23f3b8d88c04722 72f9a0a8c4fb41b1bd7761834ce1af53--23c8f74ee7ac49f9b23f3b8d88c04722 23c8f74ee7ac49f9b23f3b8d88c04722--5151090f7a734156a1ecfab175a87bf1 f8296935488b4e31b418c0f14448238d--958963c2eea84be0a8316dc2fa4ca133
from qadence import *

b = chain(CPHASE(0, 1, 0.5), CPHASE(0, 2, 0.5), CPHASE(0, 3, 0.5))
%3 cc5ecb704492478cbe80558097334fb0 0 9f8b64ccb6f749009ec55fe6c85fd1e2 cc5ecb704492478cbe80558097334fb0--9f8b64ccb6f749009ec55fe6c85fd1e2 0a404df8d0364429b723df24db2051f8 1 0e07b5a9289e4e25ba5c4f9e4a712dc2 9f8b64ccb6f749009ec55fe6c85fd1e2--0e07b5a9289e4e25ba5c4f9e4a712dc2 f2e4bc4f7c814275a938d1ac8ada7fc2 0e07b5a9289e4e25ba5c4f9e4a712dc2--f2e4bc4f7c814275a938d1ac8ada7fc2 6947e9a9be6a452ab396b03616a2d38e f2e4bc4f7c814275a938d1ac8ada7fc2--6947e9a9be6a452ab396b03616a2d38e 492ee8a99057423b93e3a8b33f2ed75f 4883c2b0c0954b129144a1c2b28debe7 PHASE(0.5) 0a404df8d0364429b723df24db2051f8--4883c2b0c0954b129144a1c2b28debe7 29e6fab497e64d50b8e1194a0e644b4b 2 4883c2b0c0954b129144a1c2b28debe7--9f8b64ccb6f749009ec55fe6c85fd1e2 d46ac3021cd74e5292759ef7cf558ee8 4883c2b0c0954b129144a1c2b28debe7--d46ac3021cd74e5292759ef7cf558ee8 b8b37cea322b444f99173328fa73b4d9 d46ac3021cd74e5292759ef7cf558ee8--b8b37cea322b444f99173328fa73b4d9 b8b37cea322b444f99173328fa73b4d9--492ee8a99057423b93e3a8b33f2ed75f 3683bb24ae514ed5bf72ec5e98e36dfe f8f32fae4aea4a8e99176ccdd2255915 29e6fab497e64d50b8e1194a0e644b4b--f8f32fae4aea4a8e99176ccdd2255915 8f0c4a7b99654d48bbd867d9aaf17d17 3 3ac07d95f0c547e0988963597b9a456d PHASE(0.5) f8f32fae4aea4a8e99176ccdd2255915--3ac07d95f0c547e0988963597b9a456d 3ac07d95f0c547e0988963597b9a456d--0e07b5a9289e4e25ba5c4f9e4a712dc2 34e33be4dadb4f0b8794a0557f058000 3ac07d95f0c547e0988963597b9a456d--34e33be4dadb4f0b8794a0557f058000 34e33be4dadb4f0b8794a0557f058000--3683bb24ae514ed5bf72ec5e98e36dfe cfbe24ca391f4a71866c84fb309c2783 b811a95e36114855b64ce00e2485d527 8f0c4a7b99654d48bbd867d9aaf17d17--b811a95e36114855b64ce00e2485d527 864a4cd2e83147759077a8cb7c0bd326 b811a95e36114855b64ce00e2485d527--864a4cd2e83147759077a8cb7c0bd326 c1476f71b6ef49e0b7e2a6465f469016 PHASE(0.5) 864a4cd2e83147759077a8cb7c0bd326--c1476f71b6ef49e0b7e2a6465f469016 c1476f71b6ef49e0b7e2a6465f469016--f2e4bc4f7c814275a938d1ac8ada7fc2 c1476f71b6ef49e0b7e2a6465f469016--cfbe24ca391f4a71866c84fb309c2783

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