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 23758b0d41e14d07a696f51988586407 0 df849ea325a74320b62d22590e1e3a12 X 23758b0d41e14d07a696f51988586407--df849ea325a74320b62d22590e1e3a12 8a4aa190200240f6977716d5173cb05c 1 a33d8e98996e43c1babf9a2f6fb30da2 df849ea325a74320b62d22590e1e3a12--a33d8e98996e43c1babf9a2f6fb30da2 592dd44367f341d88ea3cc36bf0288b7 089663de8c494667af1b44363960b89d Y 8a4aa190200240f6977716d5173cb05c--089663de8c494667af1b44363960b89d 089663de8c494667af1b44363960b89d--592dd44367f341d88ea3cc36bf0288b7
from qadence import X, Y, chain
from qadence.draw import display

b = chain(X(0), Y(0))
%3 5b0aa436de134fbea307274425b2f981 0 b7959fbc8a4f418399d88dc65dce29a1 X 5b0aa436de134fbea307274425b2f981--b7959fbc8a4f418399d88dc65dce29a1 6941c74c5fcc4572bcbad0c17623ab3c Y b7959fbc8a4f418399d88dc65dce29a1--6941c74c5fcc4572bcbad0c17623ab3c be3760917bdb4c18afeea8e2756d69f5 6941c74c5fcc4572bcbad0c17623ab3c--be3760917bdb4c18afeea8e2756d69f5
from qadence import X, Y, chain
from qadence.draw import display

b = chain(X(0), Y(1))
%3 cab0fadce0a8497b9cf571d25733733f 0 b1c9a0ef99d44d598904d55ae1e2795d X cab0fadce0a8497b9cf571d25733733f--b1c9a0ef99d44d598904d55ae1e2795d 7a743bcb93aa4b9689e30990680022e6 1 85fa1d0ac0514c5c9e655ae7bf6e8df3 b1c9a0ef99d44d598904d55ae1e2795d--85fa1d0ac0514c5c9e655ae7bf6e8df3 46ec3a8b1b6f437c818b6a452257e059 85fa1d0ac0514c5c9e655ae7bf6e8df3--46ec3a8b1b6f437c818b6a452257e059 415629b2f42d425fa7b1f033c0d2bc14 cca2040c762f4f86bc815d74ccd7029a 7a743bcb93aa4b9689e30990680022e6--cca2040c762f4f86bc815d74ccd7029a aa1900fa78c745b69b12807a5c51f679 Y cca2040c762f4f86bc815d74ccd7029a--aa1900fa78c745b69b12807a5c51f679 aa1900fa78c745b69b12807a5c51f679--415629b2f42d425fa7b1f033c0d2bc14
from qadence import X, Y, add
from qadence.draw import display

b = add(X(0), Y(1), X(2))
%3 cluster_0808eba07ecd4cc384cde0c655ad5e19 57fe280553c943b6877994aaeb6f8db9 0 2cc96eb00ac64eaf9e1914c6bb55c1cb 57fe280553c943b6877994aaeb6f8db9--2cc96eb00ac64eaf9e1914c6bb55c1cb 678be14cbc2446b6b299769f5860c894 1 4205e5bba6fb48fa8375baa89c36c046 2cc96eb00ac64eaf9e1914c6bb55c1cb--4205e5bba6fb48fa8375baa89c36c046 01bd82216180400fac05c69f7f2aa4f7 1cf9079108f04be79671ef4d0daec791 AddBlock 678be14cbc2446b6b299769f5860c894--1cf9079108f04be79671ef4d0daec791 2866ba9bd82d41b38d3cfc846aa1aed1 2 1cf9079108f04be79671ef4d0daec791--01bd82216180400fac05c69f7f2aa4f7 26829e981c474c13901b4236465c0a9b 474ed98a121b4a69a7a95c9be01f6027 2866ba9bd82d41b38d3cfc846aa1aed1--474ed98a121b4a69a7a95c9be01f6027 474ed98a121b4a69a7a95c9be01f6027--26829e981c474c13901b4236465c0a9b
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_9195b61ecc0849a391873eb8818c2992 cluster_ab4e68478734436da62037ff86db7d99 rx 01594581799a4adda47bd67423524073 0 515dd935716441a5a3db816ae1664c31 X 01594581799a4adda47bd67423524073--515dd935716441a5a3db816ae1664c31 3a9ffff3c0214190962730320a6f65fd 1 e9c811d2485d46ccb620ce6b54ec8dbf 515dd935716441a5a3db816ae1664c31--e9c811d2485d46ccb620ce6b54ec8dbf 47bec086c8aa499c81e6c834dc9a23df e9c811d2485d46ccb620ce6b54ec8dbf--47bec086c8aa499c81e6c834dc9a23df 93f02c049975428aa83f23535ebb9881 47bec086c8aa499c81e6c834dc9a23df--93f02c049975428aa83f23535ebb9881 27e2988a2980411aaf1c1397ee5e0911 458705532db1435fb118a167e94bde93 Y 3a9ffff3c0214190962730320a6f65fd--458705532db1435fb118a167e94bde93 37f19e4534c24a528ae7d2cb7d691dca 2 a09858e74f6c4d36967c6ad05d659458 458705532db1435fb118a167e94bde93--a09858e74f6c4d36967c6ad05d659458 72192520590440f99a45f420c6135a23 HamEvo a09858e74f6c4d36967c6ad05d659458--72192520590440f99a45f420c6135a23 72192520590440f99a45f420c6135a23--27e2988a2980411aaf1c1397ee5e0911 2e9a7b9bf1904a4eb2e0c2822fb5d814 cd9af01cbc4146c9beb1806cec67ebca RX(x) 37f19e4534c24a528ae7d2cb7d691dca--cd9af01cbc4146c9beb1806cec67ebca 5e509d25c36949d2be951213a0217e48 3 17c9e0cfa4c543eea21ef2a455d6ef1b cd9af01cbc4146c9beb1806cec67ebca--17c9e0cfa4c543eea21ef2a455d6ef1b f9fa569f6cfd45e2b03cfdaae5b183d1 t = 10 17c9e0cfa4c543eea21ef2a455d6ef1b--f9fa569f6cfd45e2b03cfdaae5b183d1 f9fa569f6cfd45e2b03cfdaae5b183d1--2e9a7b9bf1904a4eb2e0c2822fb5d814 936b3a3ee4474928a8e202398e8c5431 f939e55583d54071b51f1b640f491063 RX(0.5) 5e509d25c36949d2be951213a0217e48--f939e55583d54071b51f1b640f491063 4abd6a8ceea343dd94d9b1fe4afc5647 X f939e55583d54071b51f1b640f491063--4abd6a8ceea343dd94d9b1fe4afc5647 4abd6a8ceea343dd94d9b1fe4afc5647--17c9e0cfa4c543eea21ef2a455d6ef1b 70183724061346238a98a19c8cb5ba0b 4abd6a8ceea343dd94d9b1fe4afc5647--70183724061346238a98a19c8cb5ba0b 70183724061346238a98a19c8cb5ba0b--936b3a3ee4474928a8e202398e8c5431
from qadence import feature_map, hea, chain

block = chain(feature_map(4, reupload_scaling="Tower"), hea(4,2))
%3 cluster_98dd1607b12249a59a72ef7f7722ee12 HEA cluster_8e3c4845106347ce90f9d75dd9d6c98e Tower Fourier FM a7ee32c712eb4190b0c2da3c4348e473 0 abf358d16a8d44288517099d18a401b7 RX(1.0*phi) a7ee32c712eb4190b0c2da3c4348e473--abf358d16a8d44288517099d18a401b7 0658ad2529c945809c403bfcc0a45287 1 8542224897584b208446353b516610af RX(theta₀) abf358d16a8d44288517099d18a401b7--8542224897584b208446353b516610af 78058d110d234cd6b9c5db0c1c6dea42 RY(theta₄) 8542224897584b208446353b516610af--78058d110d234cd6b9c5db0c1c6dea42 8eaa2581baeb491cba0fe2243e7e1b1f RX(theta₈) 78058d110d234cd6b9c5db0c1c6dea42--8eaa2581baeb491cba0fe2243e7e1b1f b030a23531ea4ec6aedfeff06f5f892a 8eaa2581baeb491cba0fe2243e7e1b1f--b030a23531ea4ec6aedfeff06f5f892a af4f90cdeb76414bb5f26a9db8847d43 b030a23531ea4ec6aedfeff06f5f892a--af4f90cdeb76414bb5f26a9db8847d43 572176b2f89c48e1b3bc8477f81fd36d RX(theta₁₂) af4f90cdeb76414bb5f26a9db8847d43--572176b2f89c48e1b3bc8477f81fd36d f9e425240823470bbbe0492a733894eb RY(theta₁₆) 572176b2f89c48e1b3bc8477f81fd36d--f9e425240823470bbbe0492a733894eb 092dfee1683a4bbe86d4d5ef4b87f30f RX(theta₂₀) f9e425240823470bbbe0492a733894eb--092dfee1683a4bbe86d4d5ef4b87f30f 778ee661e18c474fae32339e417aef82 092dfee1683a4bbe86d4d5ef4b87f30f--778ee661e18c474fae32339e417aef82 7d08100ebdde4bb8a4b720310b40f416 778ee661e18c474fae32339e417aef82--7d08100ebdde4bb8a4b720310b40f416 3668a08fa830422ab97030eae5d2fd32 7d08100ebdde4bb8a4b720310b40f416--3668a08fa830422ab97030eae5d2fd32 432e367cbe2f46f4a38544e210dbe535 d586dea63925425087a2eb166a3558cf RX(2.0*phi) 0658ad2529c945809c403bfcc0a45287--d586dea63925425087a2eb166a3558cf 837eb8fa20174ef8aa3ba1528b6275a8 2 74ef4b80c12e488a8db98b850f2b7b21 RX(theta₁) d586dea63925425087a2eb166a3558cf--74ef4b80c12e488a8db98b850f2b7b21 0342726e1d7d4d1ba3db9eb74abc203f RY(theta₅) 74ef4b80c12e488a8db98b850f2b7b21--0342726e1d7d4d1ba3db9eb74abc203f 072dcffc04414d3a9d9757e58c016cce RX(theta₉) 0342726e1d7d4d1ba3db9eb74abc203f--072dcffc04414d3a9d9757e58c016cce f5731719d27b40c590babc5b77faa78e X 072dcffc04414d3a9d9757e58c016cce--f5731719d27b40c590babc5b77faa78e f5731719d27b40c590babc5b77faa78e--b030a23531ea4ec6aedfeff06f5f892a 34c5a930d4a044d79eac2ca81a0e737c f5731719d27b40c590babc5b77faa78e--34c5a930d4a044d79eac2ca81a0e737c c3fb14cf05264656ad541221ea830430 RX(theta₁₃) 34c5a930d4a044d79eac2ca81a0e737c--c3fb14cf05264656ad541221ea830430 4e050d4d34e7474fb364c22e0b6a5682 RY(theta₁₇) c3fb14cf05264656ad541221ea830430--4e050d4d34e7474fb364c22e0b6a5682 e0ed82b63a684987828f4ebcd61b7bc4 RX(theta₂₁) 4e050d4d34e7474fb364c22e0b6a5682--e0ed82b63a684987828f4ebcd61b7bc4 a93be273d343496aaf4f230980f0cd69 X e0ed82b63a684987828f4ebcd61b7bc4--a93be273d343496aaf4f230980f0cd69 a93be273d343496aaf4f230980f0cd69--778ee661e18c474fae32339e417aef82 9c0e4e74b7ee45c0a2781791b6329991 a93be273d343496aaf4f230980f0cd69--9c0e4e74b7ee45c0a2781791b6329991 9c0e4e74b7ee45c0a2781791b6329991--432e367cbe2f46f4a38544e210dbe535 3f9ea0cdba4642589a221a14f1c065c3 b68dc5452978471a8584e15cce8e8b97 RX(3.0*phi) 837eb8fa20174ef8aa3ba1528b6275a8--b68dc5452978471a8584e15cce8e8b97 b0d8f0ba4eb14a1581590d061858d563 3 6d37b017ba6942fd8a937881fce589d8 RX(theta₂) b68dc5452978471a8584e15cce8e8b97--6d37b017ba6942fd8a937881fce589d8 ef7c670869bf47ce8cea5ac75c820ea6 RY(theta₆) 6d37b017ba6942fd8a937881fce589d8--ef7c670869bf47ce8cea5ac75c820ea6 0eab4d51d1c04e8cb0a5fb54c34119a0 RX(theta₁₀) ef7c670869bf47ce8cea5ac75c820ea6--0eab4d51d1c04e8cb0a5fb54c34119a0 fe1bfd59e51b440485bff30518884370 0eab4d51d1c04e8cb0a5fb54c34119a0--fe1bfd59e51b440485bff30518884370 213d4e5f68dd4557b2efe943696579ac X fe1bfd59e51b440485bff30518884370--213d4e5f68dd4557b2efe943696579ac 213d4e5f68dd4557b2efe943696579ac--34c5a930d4a044d79eac2ca81a0e737c 5a66ea2aae4e49e9a1e46231c7c650c7 RX(theta₁₄) 213d4e5f68dd4557b2efe943696579ac--5a66ea2aae4e49e9a1e46231c7c650c7 c75fa4c32a0043618477ba0e3921c31f RY(theta₁₈) 5a66ea2aae4e49e9a1e46231c7c650c7--c75fa4c32a0043618477ba0e3921c31f 8cad72bdaf76461490d9effb278eaf7e RX(theta₂₂) c75fa4c32a0043618477ba0e3921c31f--8cad72bdaf76461490d9effb278eaf7e 7946e8e252b848a4abc212b8d7efe08a 8cad72bdaf76461490d9effb278eaf7e--7946e8e252b848a4abc212b8d7efe08a c7b16a06ee9442ae9d9a3b005bd28c7c X 7946e8e252b848a4abc212b8d7efe08a--c7b16a06ee9442ae9d9a3b005bd28c7c c7b16a06ee9442ae9d9a3b005bd28c7c--9c0e4e74b7ee45c0a2781791b6329991 c7b16a06ee9442ae9d9a3b005bd28c7c--3f9ea0cdba4642589a221a14f1c065c3 31ba5d3fee054371be1a44ebbc710837 ea7e3a6fd8c44e8da232236b483cd7d7 RX(4.0*phi) b0d8f0ba4eb14a1581590d061858d563--ea7e3a6fd8c44e8da232236b483cd7d7 6f4e861081264428abd0c0bb317aaed9 RX(theta₃) ea7e3a6fd8c44e8da232236b483cd7d7--6f4e861081264428abd0c0bb317aaed9 a60871c6a4a84d328fee3d4cafb07837 RY(theta₇) 6f4e861081264428abd0c0bb317aaed9--a60871c6a4a84d328fee3d4cafb07837 f8b6c8b54031451a8a2d7be5cf75aaa8 RX(theta₁₁) a60871c6a4a84d328fee3d4cafb07837--f8b6c8b54031451a8a2d7be5cf75aaa8 4b671dab7a6f454e93a7eac7fd1136ff X f8b6c8b54031451a8a2d7be5cf75aaa8--4b671dab7a6f454e93a7eac7fd1136ff 4b671dab7a6f454e93a7eac7fd1136ff--fe1bfd59e51b440485bff30518884370 e9c77f8dc48540ee9eb73987a6ef7099 4b671dab7a6f454e93a7eac7fd1136ff--e9c77f8dc48540ee9eb73987a6ef7099 0b2fb72866af4c56908543496079d22b RX(theta₁₅) e9c77f8dc48540ee9eb73987a6ef7099--0b2fb72866af4c56908543496079d22b 34884de375fe484fbf5865e5ba5203df RY(theta₁₉) 0b2fb72866af4c56908543496079d22b--34884de375fe484fbf5865e5ba5203df 7ece06ae1955496ca20eabbfd3ad37f0 RX(theta₂₃) 34884de375fe484fbf5865e5ba5203df--7ece06ae1955496ca20eabbfd3ad37f0 19cc31cfc74f4469ad423ee74768131f X 7ece06ae1955496ca20eabbfd3ad37f0--19cc31cfc74f4469ad423ee74768131f 19cc31cfc74f4469ad423ee74768131f--7946e8e252b848a4abc212b8d7efe08a 57eaeca3cb214ff89f4db65af7b4673b 19cc31cfc74f4469ad423ee74768131f--57eaeca3cb214ff89f4db65af7b4673b 57eaeca3cb214ff89f4db65af7b4673b--31ba5d3fee054371be1a44ebbc710837
from qadence import QuantumModel, QuantumCircuit, total_magnetization, hea

model = QuantumModel(QuantumCircuit(3, hea(3,2)), total_magnetization(3))
%3 cluster_2f9a7603280f422b9156f07477e69fbe Obs. cluster_3a77486387744395864b7d7df6b350db cluster_2ca4834d2e7b44a598e51bdcb41f0346 HEA abd7ec0b62154ef3b254d6ef9bb82914 0 c78818442a4c42ce949b7c914f89f1ec RX(theta₀) abd7ec0b62154ef3b254d6ef9bb82914--c78818442a4c42ce949b7c914f89f1ec df835bb68a534879bfeb0dba62c95b4c 1 5dc414e0443a4fa49a97d20d6e9931db RY(theta₃) c78818442a4c42ce949b7c914f89f1ec--5dc414e0443a4fa49a97d20d6e9931db e905681b7ce14707860d6caff0209af0 RX(theta₆) 5dc414e0443a4fa49a97d20d6e9931db--e905681b7ce14707860d6caff0209af0 e502985ed0694d30bbb111c149bc747e e905681b7ce14707860d6caff0209af0--e502985ed0694d30bbb111c149bc747e d8d725f5a85f4c288868742180756271 e502985ed0694d30bbb111c149bc747e--d8d725f5a85f4c288868742180756271 bc9cacf97b7f4cecb2a3f795c43a160a RX(theta₉) d8d725f5a85f4c288868742180756271--bc9cacf97b7f4cecb2a3f795c43a160a 34820730871d457abcde0efcb78d5601 RY(theta₁₂) bc9cacf97b7f4cecb2a3f795c43a160a--34820730871d457abcde0efcb78d5601 ef1700a968cd47548dfd01255e241035 RX(theta₁₅) 34820730871d457abcde0efcb78d5601--ef1700a968cd47548dfd01255e241035 de301daeac0e49eda1445323d3d0b1b2 ef1700a968cd47548dfd01255e241035--de301daeac0e49eda1445323d3d0b1b2 56b0c3058fc34371bc66a9f7fe572443 de301daeac0e49eda1445323d3d0b1b2--56b0c3058fc34371bc66a9f7fe572443 126e9f95f35a4b49b02db2dedab683df 56b0c3058fc34371bc66a9f7fe572443--126e9f95f35a4b49b02db2dedab683df d18bb80cf35546b4bd111eb0f4fc7ec6 126e9f95f35a4b49b02db2dedab683df--d18bb80cf35546b4bd111eb0f4fc7ec6 b3ae705e5e984c44b7529af09a0cafc7 039c29a6fe9042f4bc5372aa9bb0d0a9 RX(theta₁) df835bb68a534879bfeb0dba62c95b4c--039c29a6fe9042f4bc5372aa9bb0d0a9 38d2f721ef4e43d786072d27b23cc0de 2 ed2036cf2765483f84f018b316e9da73 RY(theta₄) 039c29a6fe9042f4bc5372aa9bb0d0a9--ed2036cf2765483f84f018b316e9da73 738c50f9f8554ebcbaad49ffeaff4de5 RX(theta₇) ed2036cf2765483f84f018b316e9da73--738c50f9f8554ebcbaad49ffeaff4de5 d73ee6ee4232497c95bf2fd37f101f6a X 738c50f9f8554ebcbaad49ffeaff4de5--d73ee6ee4232497c95bf2fd37f101f6a d73ee6ee4232497c95bf2fd37f101f6a--e502985ed0694d30bbb111c149bc747e b7545d914ed84fd28ae9f2eabcab4336 d73ee6ee4232497c95bf2fd37f101f6a--b7545d914ed84fd28ae9f2eabcab4336 333898c48de04f49acf72ef0b0c41249 RX(theta₁₀) b7545d914ed84fd28ae9f2eabcab4336--333898c48de04f49acf72ef0b0c41249 1650681ac0894d618509bc3fabda6a5a RY(theta₁₃) 333898c48de04f49acf72ef0b0c41249--1650681ac0894d618509bc3fabda6a5a 1eb0b5b098434c18a708c5eced8579e7 RX(theta₁₆) 1650681ac0894d618509bc3fabda6a5a--1eb0b5b098434c18a708c5eced8579e7 e8c40c42fa684259bd023a1aa9242b37 X 1eb0b5b098434c18a708c5eced8579e7--e8c40c42fa684259bd023a1aa9242b37 e8c40c42fa684259bd023a1aa9242b37--de301daeac0e49eda1445323d3d0b1b2 bea8c89d0a2d46e3812919bb2aa92909 e8c40c42fa684259bd023a1aa9242b37--bea8c89d0a2d46e3812919bb2aa92909 e6cdb86bd62f4cc9ab44126876ec3a72 AddBlock bea8c89d0a2d46e3812919bb2aa92909--e6cdb86bd62f4cc9ab44126876ec3a72 e6cdb86bd62f4cc9ab44126876ec3a72--b3ae705e5e984c44b7529af09a0cafc7 12f6e5e32171474aa263ca1c94273e9f ae10e38a449d47e580e88affddd02819 RX(theta₂) 38d2f721ef4e43d786072d27b23cc0de--ae10e38a449d47e580e88affddd02819 2e5478f7d65941528494ab67241042b0 RY(theta₅) ae10e38a449d47e580e88affddd02819--2e5478f7d65941528494ab67241042b0 aa52d25c567744fbbe0d4a6d20703087 RX(theta₈) 2e5478f7d65941528494ab67241042b0--aa52d25c567744fbbe0d4a6d20703087 00a7f67136054dee86016b9807839bb6 aa52d25c567744fbbe0d4a6d20703087--00a7f67136054dee86016b9807839bb6 d450da7ceb5d4234b0bd9f02ce1a3bb8 X 00a7f67136054dee86016b9807839bb6--d450da7ceb5d4234b0bd9f02ce1a3bb8 d450da7ceb5d4234b0bd9f02ce1a3bb8--b7545d914ed84fd28ae9f2eabcab4336 d9ee579bbb664acb9db24dcf52294f17 RX(theta₁₁) d450da7ceb5d4234b0bd9f02ce1a3bb8--d9ee579bbb664acb9db24dcf52294f17 7e949aca64d3416fae83a02d673bd7fd RY(theta₁₄) d9ee579bbb664acb9db24dcf52294f17--7e949aca64d3416fae83a02d673bd7fd d4066d260647414e9d25460807a10fb0 RX(theta₁₇) 7e949aca64d3416fae83a02d673bd7fd--d4066d260647414e9d25460807a10fb0 d0e59e01f63a498d875403bf01180089 d4066d260647414e9d25460807a10fb0--d0e59e01f63a498d875403bf01180089 8759a0b56cad4d309b3141c053124c13 X d0e59e01f63a498d875403bf01180089--8759a0b56cad4d309b3141c053124c13 8759a0b56cad4d309b3141c053124c13--bea8c89d0a2d46e3812919bb2aa92909 175f6392f1d245998b0d53f40281a4f1 8759a0b56cad4d309b3141c053124c13--175f6392f1d245998b0d53f40281a4f1 175f6392f1d245998b0d53f40281a4f1--12f6e5e32171474aa263ca1c94273e9f
from qadence import *

b = chain(SWAP(0,1), SWAP(0,3))
%3 4ecee5c467c04df0a9cf38ef01e980b2 0 deb3c34224d947b1abc46369e1dd402c 4ecee5c467c04df0a9cf38ef01e980b2--deb3c34224d947b1abc46369e1dd402c da5ab97718bf441481111cc9fb7ecb16 1 65120c688b014dae9787954d8e93fd66 f7410163eb634c4697513e9ea73e1b01 deb3c34224d947b1abc46369e1dd402c--f7410163eb634c4697513e9ea73e1b01 ab976259d4a54e7bb50880fb96038a6c 65120c688b014dae9787954d8e93fd66--ab976259d4a54e7bb50880fb96038a6c 65ecf7d77d7143db9a6c7b5b289b0d51 4cc405b7c9d04024bba21a4027fbbec1 ab976259d4a54e7bb50880fb96038a6c--4cc405b7c9d04024bba21a4027fbbec1 037ce86a9aba47689438712436644816 65ecf7d77d7143db9a6c7b5b289b0d51--037ce86a9aba47689438712436644816 92d433e036bf4bee97b29b87bf2f13df 23dd856e9c7c4d139e50d880a8aed48c da5ab97718bf441481111cc9fb7ecb16--23dd856e9c7c4d139e50d880a8aed48c ddb4c275421d4ec68fefc232e5fc74d1 2 23dd856e9c7c4d139e50d880a8aed48c--65120c688b014dae9787954d8e93fd66 c5d10eb4bfe446a981237eb9d303ce52 f7410163eb634c4697513e9ea73e1b01--c5d10eb4bfe446a981237eb9d303ce52 09ce98f426284dc78c96da85e4625d6a c5d10eb4bfe446a981237eb9d303ce52--09ce98f426284dc78c96da85e4625d6a 09ce98f426284dc78c96da85e4625d6a--92d433e036bf4bee97b29b87bf2f13df 5178315881444fff9a1a123c1e7a7db6 d63b97ca4b6e4f558bb639d81cee86c9 ddb4c275421d4ec68fefc232e5fc74d1--d63b97ca4b6e4f558bb639d81cee86c9 ba28d9c11c7d4d4a8fe3ebe884d5032b 3 96b3fb3a8a9147e19702887291aaee51 d63b97ca4b6e4f558bb639d81cee86c9--96b3fb3a8a9147e19702887291aaee51 0ead29ea0de44816b72662ddc41f3cbd 96b3fb3a8a9147e19702887291aaee51--0ead29ea0de44816b72662ddc41f3cbd 1f7a32a90cca4865b515821452bf7c6e 0ead29ea0de44816b72662ddc41f3cbd--1f7a32a90cca4865b515821452bf7c6e 1f7a32a90cca4865b515821452bf7c6e--5178315881444fff9a1a123c1e7a7db6 c1732ea4058e47c398ee639b7de7ea67 d066088e26dc423dabd2d32bf8847659 ba28d9c11c7d4d4a8fe3ebe884d5032b--d066088e26dc423dabd2d32bf8847659 30507bb822044bd88da990a3c3a6db33 d066088e26dc423dabd2d32bf8847659--30507bb822044bd88da990a3c3a6db33 d1fe317fcd4744e0ba0c83b68053e654 30507bb822044bd88da990a3c3a6db33--d1fe317fcd4744e0ba0c83b68053e654 d1fe317fcd4744e0ba0c83b68053e654--65ecf7d77d7143db9a6c7b5b289b0d51 4cc405b7c9d04024bba21a4027fbbec1--c1732ea4058e47c398ee639b7de7ea67
from qadence import *

b = chain(CPHASE(0, 1, 0.5), CPHASE(0, 2, 0.5), CPHASE(0, 3, 0.5))
%3 32e92b75a20a4e10b4b5b0f0e485e9d4 0 4e3f60a12b2f456ebf26b3c7946ceaac 32e92b75a20a4e10b4b5b0f0e485e9d4--4e3f60a12b2f456ebf26b3c7946ceaac a42746f9656e40a98ad8900390b6cec9 1 ee4cff3e0ceb4fa487bd62232805eada 4e3f60a12b2f456ebf26b3c7946ceaac--ee4cff3e0ceb4fa487bd62232805eada 4f7ed9399d43434b8329a817fe568a10 ee4cff3e0ceb4fa487bd62232805eada--4f7ed9399d43434b8329a817fe568a10 3c0510417e064299a2024cbcb3b53e45 4f7ed9399d43434b8329a817fe568a10--3c0510417e064299a2024cbcb3b53e45 9bc24b00529644dd84d403e8b3daccb6 9f8adf8735974874b29531a06d490b9d PHASE(0.5) a42746f9656e40a98ad8900390b6cec9--9f8adf8735974874b29531a06d490b9d 36d28184e0c441ce92147e0b5e796b8b 2 9f8adf8735974874b29531a06d490b9d--4e3f60a12b2f456ebf26b3c7946ceaac fa5b89e56db64dac9cbde58aa58fcdcf 9f8adf8735974874b29531a06d490b9d--fa5b89e56db64dac9cbde58aa58fcdcf 4649647f2abb471da319ecf2e95fe732 fa5b89e56db64dac9cbde58aa58fcdcf--4649647f2abb471da319ecf2e95fe732 4649647f2abb471da319ecf2e95fe732--9bc24b00529644dd84d403e8b3daccb6 a94f60d1f0ed457bae7bfbee1b90feff 9e1e77af878c4260b7719fbb651ca96a 36d28184e0c441ce92147e0b5e796b8b--9e1e77af878c4260b7719fbb651ca96a c318eb6c4d074c45870ac3c9e0ddaf71 3 e027c27d2c324299ae2abb42f6ffcafe PHASE(0.5) 9e1e77af878c4260b7719fbb651ca96a--e027c27d2c324299ae2abb42f6ffcafe e027c27d2c324299ae2abb42f6ffcafe--ee4cff3e0ceb4fa487bd62232805eada 7ac75600f35442418d895150ee8d601e e027c27d2c324299ae2abb42f6ffcafe--7ac75600f35442418d895150ee8d601e 7ac75600f35442418d895150ee8d601e--a94f60d1f0ed457bae7bfbee1b90feff c4aed194f25340f0ad7c7243dc5f7a12 bd7e1c56a2604140af715b05450c8a5b c318eb6c4d074c45870ac3c9e0ddaf71--bd7e1c56a2604140af715b05450c8a5b 9ffe19033dd4410595379a5e602ca69e bd7e1c56a2604140af715b05450c8a5b--9ffe19033dd4410595379a5e602ca69e fffe8525481e4c48b28e2250af936398 PHASE(0.5) 9ffe19033dd4410595379a5e602ca69e--fffe8525481e4c48b28e2250af936398 fffe8525481e4c48b28e2250af936398--4f7ed9399d43434b8329a817fe568a10 fffe8525481e4c48b28e2250af936398--c4aed194f25340f0ad7c7243dc5f7a12

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