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 55ab67f2ba5742c3a5e57fa0c08b4ff6 0 ec8f2cc89e674f96a1b65bc0cc63ca91 X 55ab67f2ba5742c3a5e57fa0c08b4ff6--ec8f2cc89e674f96a1b65bc0cc63ca91 538e66aa9df94a06b8cd583f52553df9 1 855b9231e9b14275b9bb4ab2df419cb9 ec8f2cc89e674f96a1b65bc0cc63ca91--855b9231e9b14275b9bb4ab2df419cb9 b640788fe14648128dcdccdd1945edd2 2a7ca5099d7d45a7baac9c256295e2a9 Y 538e66aa9df94a06b8cd583f52553df9--2a7ca5099d7d45a7baac9c256295e2a9 2a7ca5099d7d45a7baac9c256295e2a9--b640788fe14648128dcdccdd1945edd2
from qadence import X, Y, chain
from qadence.draw import display

b = chain(X(0), Y(0))
%3 cc7f318986c6479b9cbb5a400970b7c1 0 20c1f178ab7941e0842930e620160a7e X cc7f318986c6479b9cbb5a400970b7c1--20c1f178ab7941e0842930e620160a7e 90d46862606246ddbbbf2cc536e36b4b Y 20c1f178ab7941e0842930e620160a7e--90d46862606246ddbbbf2cc536e36b4b 2aaceca52eaf4c4fbc8dc6c5988c2582 90d46862606246ddbbbf2cc536e36b4b--2aaceca52eaf4c4fbc8dc6c5988c2582
from qadence import X, Y, chain
from qadence.draw import display

b = chain(X(0), Y(1))
%3 e3460f33e6cc480aaa2ea619a43ff5e8 0 19326ede2cbd4545919b78c7513c8879 X e3460f33e6cc480aaa2ea619a43ff5e8--19326ede2cbd4545919b78c7513c8879 d8be1baa75db41a79992a3c07960234d 1 722915c69215463ca570e650d9e65747 19326ede2cbd4545919b78c7513c8879--722915c69215463ca570e650d9e65747 f8bb0f2b8e65414caa1af8e662ece507 722915c69215463ca570e650d9e65747--f8bb0f2b8e65414caa1af8e662ece507 001e83111fea4f52826ae78c4e5274ec ca8e4f7229f0496b89aa8124d9123d69 d8be1baa75db41a79992a3c07960234d--ca8e4f7229f0496b89aa8124d9123d69 703ea568622442e9ac249e1a675ba566 Y ca8e4f7229f0496b89aa8124d9123d69--703ea568622442e9ac249e1a675ba566 703ea568622442e9ac249e1a675ba566--001e83111fea4f52826ae78c4e5274ec
from qadence import X, Y, add
from qadence.draw import display

b = add(X(0), Y(1), X(2))
%3 cluster_1080f6cf75574ca3abe1babc5050d5bf 39daabd24e4f496aa443d279d9e0ca78 0 b433d6ac80ff4d9489e2677e966bc0ba 39daabd24e4f496aa443d279d9e0ca78--b433d6ac80ff4d9489e2677e966bc0ba 664cb7a644094e8bbda5b47249e52fe8 1 2b3d8e8b6390449795c3633210c9af60 b433d6ac80ff4d9489e2677e966bc0ba--2b3d8e8b6390449795c3633210c9af60 bbca78046969415d91b562fb54713aaa 1d5b76cb9a3646aeb7d25f494a41450f AddBlock 664cb7a644094e8bbda5b47249e52fe8--1d5b76cb9a3646aeb7d25f494a41450f 37bc240deae94793a40e7c1b7e8df47d 2 1d5b76cb9a3646aeb7d25f494a41450f--bbca78046969415d91b562fb54713aaa b2b62401d83842e2abafd73ce8a48a4c e1542f5758c04c4db58eccc9f2c5b939 37bc240deae94793a40e7c1b7e8df47d--e1542f5758c04c4db58eccc9f2c5b939 e1542f5758c04c4db58eccc9f2c5b939--b2b62401d83842e2abafd73ce8a48a4c
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_488dbf7ef870461eae93cba966b27c54 cluster_7bc726e8e2fb4379997dfc8da5198439 rx 63cc4ef044f64667b58dc72539d2cc53 0 1e8b3b3684a94d78b1f7aceb76cf4b2b X 63cc4ef044f64667b58dc72539d2cc53--1e8b3b3684a94d78b1f7aceb76cf4b2b 31b0a55fdd534fdabb242f6aefc2fbdf 1 1f4347e8bb5a4780aa0023ffddc56f8a 1e8b3b3684a94d78b1f7aceb76cf4b2b--1f4347e8bb5a4780aa0023ffddc56f8a 15c46ceda1f147dfb8c32d6a36b252ae 1f4347e8bb5a4780aa0023ffddc56f8a--15c46ceda1f147dfb8c32d6a36b252ae e895aa4eb2de44049f2987ac950f3fac 15c46ceda1f147dfb8c32d6a36b252ae--e895aa4eb2de44049f2987ac950f3fac 146f0c33717f452fbc4bb5448ca858b0 3b727ac6cdae433997a3aaff73bd6755 Y 31b0a55fdd534fdabb242f6aefc2fbdf--3b727ac6cdae433997a3aaff73bd6755 785fbfe755794c8ea9ad44a7f6ccfa19 2 969d90b0bd314e6c828dc0b951b6e57b 3b727ac6cdae433997a3aaff73bd6755--969d90b0bd314e6c828dc0b951b6e57b 25fa1074dfce40b4b87420b2785a6b21 HamEvo 969d90b0bd314e6c828dc0b951b6e57b--25fa1074dfce40b4b87420b2785a6b21 25fa1074dfce40b4b87420b2785a6b21--146f0c33717f452fbc4bb5448ca858b0 9404ac7f0e824174bea8e426e1334a60 706413c948b241bb904d777f9cb41d89 RX(x) 785fbfe755794c8ea9ad44a7f6ccfa19--706413c948b241bb904d777f9cb41d89 bc82852d5b684d729e37e18a8bf3e4db 3 d9c9d0c359d240d1a88c33c89a548151 706413c948b241bb904d777f9cb41d89--d9c9d0c359d240d1a88c33c89a548151 50ff58947b4e44aaa18db0fba19bc456 t = 10 d9c9d0c359d240d1a88c33c89a548151--50ff58947b4e44aaa18db0fba19bc456 50ff58947b4e44aaa18db0fba19bc456--9404ac7f0e824174bea8e426e1334a60 2fcaed10fa144b3da04452fcfc3261b6 355e1e28c9eb46d78751e1cb507a670a RX(0.5) bc82852d5b684d729e37e18a8bf3e4db--355e1e28c9eb46d78751e1cb507a670a c5373357734747b09f60686e4c6c3093 X 355e1e28c9eb46d78751e1cb507a670a--c5373357734747b09f60686e4c6c3093 c5373357734747b09f60686e4c6c3093--d9c9d0c359d240d1a88c33c89a548151 34c20c2c6aa14aa2ab4814dd1b66e6e7 c5373357734747b09f60686e4c6c3093--34c20c2c6aa14aa2ab4814dd1b66e6e7 34c20c2c6aa14aa2ab4814dd1b66e6e7--2fcaed10fa144b3da04452fcfc3261b6
from qadence import feature_map, hea, chain

block = chain(feature_map(4, reupload_scaling="Tower"), hea(4,2))
%3 cluster_e6ace07af1ba4c78872a354f7e499445 HEA cluster_ef7836e7d5754f6d9e047e37677b6da5 Tower Fourier FM 03b7a02610f0480d832c9a9a8db48df9 0 b377d20e504b40a89625787eb7ced080 RX(1.0*phi) 03b7a02610f0480d832c9a9a8db48df9--b377d20e504b40a89625787eb7ced080 d627602177af43e6a3a179e5f831c5a6 1 f18c68d7a18b4995a46c75f4b09cc044 RX(theta₀) b377d20e504b40a89625787eb7ced080--f18c68d7a18b4995a46c75f4b09cc044 2ec4f9850c1943a78d770ce05fc1d8da RY(theta₄) f18c68d7a18b4995a46c75f4b09cc044--2ec4f9850c1943a78d770ce05fc1d8da b11737dc50a74dedbb242490730703c8 RX(theta₈) 2ec4f9850c1943a78d770ce05fc1d8da--b11737dc50a74dedbb242490730703c8 36c510ab40b74964aaf1a564ee8f5eaa b11737dc50a74dedbb242490730703c8--36c510ab40b74964aaf1a564ee8f5eaa 39de27fe1e0d46d69ed3637babd58ae2 36c510ab40b74964aaf1a564ee8f5eaa--39de27fe1e0d46d69ed3637babd58ae2 966e43092f534bab8379aecc5b514ff7 RX(theta₁₂) 39de27fe1e0d46d69ed3637babd58ae2--966e43092f534bab8379aecc5b514ff7 a684007249a641b896b345adca954537 RY(theta₁₆) 966e43092f534bab8379aecc5b514ff7--a684007249a641b896b345adca954537 d6f3dfbda40f40e4b7cd7b7f78a0c5dc RX(theta₂₀) a684007249a641b896b345adca954537--d6f3dfbda40f40e4b7cd7b7f78a0c5dc d6d04dc7fa434be5b64bf4080813564f d6f3dfbda40f40e4b7cd7b7f78a0c5dc--d6d04dc7fa434be5b64bf4080813564f 45ad0e752a0a4679878a2eddfe8789b6 d6d04dc7fa434be5b64bf4080813564f--45ad0e752a0a4679878a2eddfe8789b6 dd28e573986c4af4a2132c48529ea33b 45ad0e752a0a4679878a2eddfe8789b6--dd28e573986c4af4a2132c48529ea33b e050fc96c8fc45f9a27af464b8396f80 690abb8d24ae4054ada07a03edc44b9c RX(2.0*phi) d627602177af43e6a3a179e5f831c5a6--690abb8d24ae4054ada07a03edc44b9c a4d337972d3e4e82b443ad1b9df808c7 2 559fa5f900204dcf8d3681b0e330e18f RX(theta₁) 690abb8d24ae4054ada07a03edc44b9c--559fa5f900204dcf8d3681b0e330e18f 9ba551442dfe4b2ab3138372872ff798 RY(theta₅) 559fa5f900204dcf8d3681b0e330e18f--9ba551442dfe4b2ab3138372872ff798 3843037c6b0842ac89e13e6a2d00cb6b RX(theta₉) 9ba551442dfe4b2ab3138372872ff798--3843037c6b0842ac89e13e6a2d00cb6b 3a7de11347e548fe8b63f1dd3f88579a X 3843037c6b0842ac89e13e6a2d00cb6b--3a7de11347e548fe8b63f1dd3f88579a 3a7de11347e548fe8b63f1dd3f88579a--36c510ab40b74964aaf1a564ee8f5eaa a21b64156d734222a58a84b7ad251f68 3a7de11347e548fe8b63f1dd3f88579a--a21b64156d734222a58a84b7ad251f68 15b636d1b7d245dd83de3b6138d288ed RX(theta₁₃) a21b64156d734222a58a84b7ad251f68--15b636d1b7d245dd83de3b6138d288ed 8a9bb31e47b64ceea40d5fe9d2be0d83 RY(theta₁₇) 15b636d1b7d245dd83de3b6138d288ed--8a9bb31e47b64ceea40d5fe9d2be0d83 88433ade2c8c4a18a4b453162ba5cb00 RX(theta₂₁) 8a9bb31e47b64ceea40d5fe9d2be0d83--88433ade2c8c4a18a4b453162ba5cb00 69e21226edd64ade8bd5527687478ac6 X 88433ade2c8c4a18a4b453162ba5cb00--69e21226edd64ade8bd5527687478ac6 69e21226edd64ade8bd5527687478ac6--d6d04dc7fa434be5b64bf4080813564f d3098d0461fe42aba2e89519cec66deb 69e21226edd64ade8bd5527687478ac6--d3098d0461fe42aba2e89519cec66deb d3098d0461fe42aba2e89519cec66deb--e050fc96c8fc45f9a27af464b8396f80 8d9254cbf0ba4329acb4d2f9509c0577 b5403762dd6c44a69ef62d223f51579b RX(3.0*phi) a4d337972d3e4e82b443ad1b9df808c7--b5403762dd6c44a69ef62d223f51579b ff0ea313008a4abc8eed19e30cc524e7 3 7767cd6a079942b798a5fe1d7d4b7e88 RX(theta₂) b5403762dd6c44a69ef62d223f51579b--7767cd6a079942b798a5fe1d7d4b7e88 3d8a8c6c95a34b699a43cd9bc1205913 RY(theta₆) 7767cd6a079942b798a5fe1d7d4b7e88--3d8a8c6c95a34b699a43cd9bc1205913 db077b85ccff432fb0ce9b6f2a198c83 RX(theta₁₀) 3d8a8c6c95a34b699a43cd9bc1205913--db077b85ccff432fb0ce9b6f2a198c83 f15bb383ac0f4a2db06f195c2c4cdf06 db077b85ccff432fb0ce9b6f2a198c83--f15bb383ac0f4a2db06f195c2c4cdf06 c694909112004032a467592b2f35d981 X f15bb383ac0f4a2db06f195c2c4cdf06--c694909112004032a467592b2f35d981 c694909112004032a467592b2f35d981--a21b64156d734222a58a84b7ad251f68 7c72366ba8af4c18806587c59ed4bb86 RX(theta₁₄) c694909112004032a467592b2f35d981--7c72366ba8af4c18806587c59ed4bb86 4ec30092b9af47f39d6120332b1c3590 RY(theta₁₈) 7c72366ba8af4c18806587c59ed4bb86--4ec30092b9af47f39d6120332b1c3590 7c00359de62a4d909c92970bc1060b02 RX(theta₂₂) 4ec30092b9af47f39d6120332b1c3590--7c00359de62a4d909c92970bc1060b02 d5fb2b382e3b4a29b507d010e6108fb4 7c00359de62a4d909c92970bc1060b02--d5fb2b382e3b4a29b507d010e6108fb4 bd4ae7f5414147afa50b78d6969541d4 X d5fb2b382e3b4a29b507d010e6108fb4--bd4ae7f5414147afa50b78d6969541d4 bd4ae7f5414147afa50b78d6969541d4--d3098d0461fe42aba2e89519cec66deb bd4ae7f5414147afa50b78d6969541d4--8d9254cbf0ba4329acb4d2f9509c0577 c6fe4b6b233f4445a437d83b15ea49a1 addad6bdeaa74902bb830255d8d46bc8 RX(4.0*phi) ff0ea313008a4abc8eed19e30cc524e7--addad6bdeaa74902bb830255d8d46bc8 0a98a20d97264409a7be4e0f4c231b75 RX(theta₃) addad6bdeaa74902bb830255d8d46bc8--0a98a20d97264409a7be4e0f4c231b75 f1b4a2b274a742bcabfdeac92ae4a89f RY(theta₇) 0a98a20d97264409a7be4e0f4c231b75--f1b4a2b274a742bcabfdeac92ae4a89f 2415450653f34d6793aac297942493f7 RX(theta₁₁) f1b4a2b274a742bcabfdeac92ae4a89f--2415450653f34d6793aac297942493f7 e4b44c25e2f84b6483462a72b171b60d X 2415450653f34d6793aac297942493f7--e4b44c25e2f84b6483462a72b171b60d e4b44c25e2f84b6483462a72b171b60d--f15bb383ac0f4a2db06f195c2c4cdf06 13dd78520e56463f9a3e4e4d4636b941 e4b44c25e2f84b6483462a72b171b60d--13dd78520e56463f9a3e4e4d4636b941 777088eb8b2849ea834d1888493faf59 RX(theta₁₅) 13dd78520e56463f9a3e4e4d4636b941--777088eb8b2849ea834d1888493faf59 9c816ad983bb4557bf19aac57d3e51a0 RY(theta₁₉) 777088eb8b2849ea834d1888493faf59--9c816ad983bb4557bf19aac57d3e51a0 f58d39d24f0e4e96b343f1a692f0f564 RX(theta₂₃) 9c816ad983bb4557bf19aac57d3e51a0--f58d39d24f0e4e96b343f1a692f0f564 f7d087f877c64614a6b18eaadbfa109a X f58d39d24f0e4e96b343f1a692f0f564--f7d087f877c64614a6b18eaadbfa109a f7d087f877c64614a6b18eaadbfa109a--d5fb2b382e3b4a29b507d010e6108fb4 80ed6eaddda543ce9724b81c8cdd4033 f7d087f877c64614a6b18eaadbfa109a--80ed6eaddda543ce9724b81c8cdd4033 80ed6eaddda543ce9724b81c8cdd4033--c6fe4b6b233f4445a437d83b15ea49a1
from qadence import QuantumModel, QuantumCircuit, total_magnetization, hea

model = QuantumModel(QuantumCircuit(3, hea(3,2)), total_magnetization(3))
%3 cluster_84708c533bdc48edbbf3ad2b521bf27f Obs. cluster_ecc0be093a874eada1d7f7a12a64357d cluster_25b07d0065994613a133544b0659418c HEA 3a92b539f7c4425e8803a98f647e7957 0 bebe9dc526574eeab38f12b2675f50a8 RX(theta₀) 3a92b539f7c4425e8803a98f647e7957--bebe9dc526574eeab38f12b2675f50a8 c54f245afe5c4493a85e91b74efce215 1 db1b940baf724d2b9e5a3e396cd720c3 RY(theta₃) bebe9dc526574eeab38f12b2675f50a8--db1b940baf724d2b9e5a3e396cd720c3 247c5c9318af4a0b8feedeea409e47eb RX(theta₆) db1b940baf724d2b9e5a3e396cd720c3--247c5c9318af4a0b8feedeea409e47eb 7f84b7581cec4a82938250898c2cac8b 247c5c9318af4a0b8feedeea409e47eb--7f84b7581cec4a82938250898c2cac8b 9222101ad748493d9fdd883a089e3872 7f84b7581cec4a82938250898c2cac8b--9222101ad748493d9fdd883a089e3872 e805fac4dac745829e8181d7128c6ea5 RX(theta₉) 9222101ad748493d9fdd883a089e3872--e805fac4dac745829e8181d7128c6ea5 015f6db13bb742aca5aa0c8069fb9e19 RY(theta₁₂) e805fac4dac745829e8181d7128c6ea5--015f6db13bb742aca5aa0c8069fb9e19 86454cc5a5c74cf7ab80a85ef1ca4ea3 RX(theta₁₅) 015f6db13bb742aca5aa0c8069fb9e19--86454cc5a5c74cf7ab80a85ef1ca4ea3 b41828e154b34d4b9f9b87a7a0573c9e 86454cc5a5c74cf7ab80a85ef1ca4ea3--b41828e154b34d4b9f9b87a7a0573c9e 9904dc7247964e11af6713d5e76a15b2 b41828e154b34d4b9f9b87a7a0573c9e--9904dc7247964e11af6713d5e76a15b2 5b584f54ceae48c69521974259b3de67 9904dc7247964e11af6713d5e76a15b2--5b584f54ceae48c69521974259b3de67 ed14bf419d33418c9a1a1f1594e57da2 5b584f54ceae48c69521974259b3de67--ed14bf419d33418c9a1a1f1594e57da2 82536e352ac14ba99f89bffab58d379e 66e6e2327745452eaf0da949b3ae9ebf RX(theta₁) c54f245afe5c4493a85e91b74efce215--66e6e2327745452eaf0da949b3ae9ebf 15f4a9a15d204a6680dccdbfd768cf3f 2 073e83029191411dafbdc478d4b6ce10 RY(theta₄) 66e6e2327745452eaf0da949b3ae9ebf--073e83029191411dafbdc478d4b6ce10 8cd27a2404be44bead879ee3d59e2f87 RX(theta₇) 073e83029191411dafbdc478d4b6ce10--8cd27a2404be44bead879ee3d59e2f87 adb29651250a4d49bb71dcd79cd5e21f X 8cd27a2404be44bead879ee3d59e2f87--adb29651250a4d49bb71dcd79cd5e21f adb29651250a4d49bb71dcd79cd5e21f--7f84b7581cec4a82938250898c2cac8b 58670a7e03ab41c48b82a166bbe571ab adb29651250a4d49bb71dcd79cd5e21f--58670a7e03ab41c48b82a166bbe571ab 856af072ab0443ac817816dff80db65b RX(theta₁₀) 58670a7e03ab41c48b82a166bbe571ab--856af072ab0443ac817816dff80db65b 598b4648f54a4992a2507ef78c60a183 RY(theta₁₃) 856af072ab0443ac817816dff80db65b--598b4648f54a4992a2507ef78c60a183 04641162e88540dd8bc002e8738313f2 RX(theta₁₆) 598b4648f54a4992a2507ef78c60a183--04641162e88540dd8bc002e8738313f2 b4b65c6df125459ca048a49a99cf7dd5 X 04641162e88540dd8bc002e8738313f2--b4b65c6df125459ca048a49a99cf7dd5 b4b65c6df125459ca048a49a99cf7dd5--b41828e154b34d4b9f9b87a7a0573c9e 4378223df9404475a8aff45db923d352 b4b65c6df125459ca048a49a99cf7dd5--4378223df9404475a8aff45db923d352 6335289d9b8d404682dd1529e58594e5 AddBlock 4378223df9404475a8aff45db923d352--6335289d9b8d404682dd1529e58594e5 6335289d9b8d404682dd1529e58594e5--82536e352ac14ba99f89bffab58d379e 888e37bfd53343acae63da50aa0a75c7 08225354d5e94e12a0c6250a3a13605d RX(theta₂) 15f4a9a15d204a6680dccdbfd768cf3f--08225354d5e94e12a0c6250a3a13605d b85979ab27f448a0afea298bce3793a7 RY(theta₅) 08225354d5e94e12a0c6250a3a13605d--b85979ab27f448a0afea298bce3793a7 b0fc1c85ca654426a794c4b4dc61b491 RX(theta₈) b85979ab27f448a0afea298bce3793a7--b0fc1c85ca654426a794c4b4dc61b491 8d98eb3e554b484da73722aee93768c2 b0fc1c85ca654426a794c4b4dc61b491--8d98eb3e554b484da73722aee93768c2 7d20d4b590004d44937ddde0d0386385 X 8d98eb3e554b484da73722aee93768c2--7d20d4b590004d44937ddde0d0386385 7d20d4b590004d44937ddde0d0386385--58670a7e03ab41c48b82a166bbe571ab ff56febca827401d80e1fa486010a4ea RX(theta₁₁) 7d20d4b590004d44937ddde0d0386385--ff56febca827401d80e1fa486010a4ea 3d857e53ec834453a073a5aceeb00254 RY(theta₁₄) ff56febca827401d80e1fa486010a4ea--3d857e53ec834453a073a5aceeb00254 e7027717e0344e5ba76ae7f76fd10267 RX(theta₁₇) 3d857e53ec834453a073a5aceeb00254--e7027717e0344e5ba76ae7f76fd10267 02c9c80108244506b946bd6115d9a9ff e7027717e0344e5ba76ae7f76fd10267--02c9c80108244506b946bd6115d9a9ff dbea29b6d6bb46dead7c4f2b94b61b5f X 02c9c80108244506b946bd6115d9a9ff--dbea29b6d6bb46dead7c4f2b94b61b5f dbea29b6d6bb46dead7c4f2b94b61b5f--4378223df9404475a8aff45db923d352 60f130cdc12b4955a5f5bd084c08c414 dbea29b6d6bb46dead7c4f2b94b61b5f--60f130cdc12b4955a5f5bd084c08c414 60f130cdc12b4955a5f5bd084c08c414--888e37bfd53343acae63da50aa0a75c7
from qadence import *

b = chain(SWAP(0,1), SWAP(0,3))
%3 fde8579bc30245a4a58982fd62c344c1 0 85f2133b80aa47e18b977420e08a7a8e fde8579bc30245a4a58982fd62c344c1--85f2133b80aa47e18b977420e08a7a8e b5da44f1a1e14439aabb669f9e71de01 1 84ae80d681324285bc7cc38cbb186272 063de572ecc540f4936e565807df3986 85f2133b80aa47e18b977420e08a7a8e--063de572ecc540f4936e565807df3986 1563db82439a4b0d900e572ae4036560 84ae80d681324285bc7cc38cbb186272--1563db82439a4b0d900e572ae4036560 a1077a7b020b45d699c65d6c5e7543e8 81266a3d7233437190fbb7e066e15043 1563db82439a4b0d900e572ae4036560--81266a3d7233437190fbb7e066e15043 61b8a4f2d72f478b95d41cdbb781cfa9 a1077a7b020b45d699c65d6c5e7543e8--61b8a4f2d72f478b95d41cdbb781cfa9 6a24a9dab9bd403e956ff3a385eb68f6 710d0b59b6b0400f8c2fcb8b88d020fa b5da44f1a1e14439aabb669f9e71de01--710d0b59b6b0400f8c2fcb8b88d020fa db5a5509205e4173bbc8a7acc323a124 2 710d0b59b6b0400f8c2fcb8b88d020fa--84ae80d681324285bc7cc38cbb186272 cc5754ea69814d1a936385ebcabdd6fb 063de572ecc540f4936e565807df3986--cc5754ea69814d1a936385ebcabdd6fb 9e2955d13ac946bfbfb1db1272668bce cc5754ea69814d1a936385ebcabdd6fb--9e2955d13ac946bfbfb1db1272668bce 9e2955d13ac946bfbfb1db1272668bce--6a24a9dab9bd403e956ff3a385eb68f6 584a78280ae34d2f91b55c37fb296b01 11191d4d21574002a0446be9dd64067d db5a5509205e4173bbc8a7acc323a124--11191d4d21574002a0446be9dd64067d e260f702843e41a29e8fe86211d47574 3 bb0c1c982d214d2d9af453fb1535143e 11191d4d21574002a0446be9dd64067d--bb0c1c982d214d2d9af453fb1535143e a228c96cd2ed49f98b5d6436d5d99b7f bb0c1c982d214d2d9af453fb1535143e--a228c96cd2ed49f98b5d6436d5d99b7f 88799891b78b4b219df974db200f3afb a228c96cd2ed49f98b5d6436d5d99b7f--88799891b78b4b219df974db200f3afb 88799891b78b4b219df974db200f3afb--584a78280ae34d2f91b55c37fb296b01 d0dd428db45a400297f88ff5fdddc879 c6e287a5e7e94bf7a9a7afe2350ad06a e260f702843e41a29e8fe86211d47574--c6e287a5e7e94bf7a9a7afe2350ad06a 99d23c44194843cd80a6a3c055da7b78 c6e287a5e7e94bf7a9a7afe2350ad06a--99d23c44194843cd80a6a3c055da7b78 128af50ae65840ca9d216d8ac24b44cc 99d23c44194843cd80a6a3c055da7b78--128af50ae65840ca9d216d8ac24b44cc 128af50ae65840ca9d216d8ac24b44cc--a1077a7b020b45d699c65d6c5e7543e8 81266a3d7233437190fbb7e066e15043--d0dd428db45a400297f88ff5fdddc879
from qadence import *

b = chain(CPHASE(0, 1, 0.5), CPHASE(0, 2, 0.5), CPHASE(0, 3, 0.5))
%3 7e8abf68d2e4496fb2df4e0d9cf536dc 0 7c3104625c85499d8dcd88f05a185880 7e8abf68d2e4496fb2df4e0d9cf536dc--7c3104625c85499d8dcd88f05a185880 c293b5de65c34b1d9844967a815fb90e 1 dcc6f422fb5642e389d6e527a794493e 7c3104625c85499d8dcd88f05a185880--dcc6f422fb5642e389d6e527a794493e 1ee350e06f044988a10e791d74ffc3d1 dcc6f422fb5642e389d6e527a794493e--1ee350e06f044988a10e791d74ffc3d1 840774a502ff47a1ab314b7a449894d5 1ee350e06f044988a10e791d74ffc3d1--840774a502ff47a1ab314b7a449894d5 c8fa5b9654db4e1da14299d2f6456888 dd2fdbde3b1c40d8960beabe23d20d49 PHASE(0.5) c293b5de65c34b1d9844967a815fb90e--dd2fdbde3b1c40d8960beabe23d20d49 850002b06bd54ca28b8b6d5dc1915ee3 2 dd2fdbde3b1c40d8960beabe23d20d49--7c3104625c85499d8dcd88f05a185880 b07204ae39294c20a418b31b0b378cbd dd2fdbde3b1c40d8960beabe23d20d49--b07204ae39294c20a418b31b0b378cbd d694acb208904434afc96c261570ead9 b07204ae39294c20a418b31b0b378cbd--d694acb208904434afc96c261570ead9 d694acb208904434afc96c261570ead9--c8fa5b9654db4e1da14299d2f6456888 a9ede4bf98d2457c8a0dd49b74beeeb5 1f7d62c777fd47d08c92615ffe138561 850002b06bd54ca28b8b6d5dc1915ee3--1f7d62c777fd47d08c92615ffe138561 9427d4f39b5d4baebbe99f9aa16c32ec 3 f1d57645f4544651b84b90e1676e32e7 PHASE(0.5) 1f7d62c777fd47d08c92615ffe138561--f1d57645f4544651b84b90e1676e32e7 f1d57645f4544651b84b90e1676e32e7--dcc6f422fb5642e389d6e527a794493e f7c4abb9709141a0ba66026de2280816 f1d57645f4544651b84b90e1676e32e7--f7c4abb9709141a0ba66026de2280816 f7c4abb9709141a0ba66026de2280816--a9ede4bf98d2457c8a0dd49b74beeeb5 f723803f0ab141a197500be36ac9021a eae2bbea0adb4446b7536b91e5b81771 9427d4f39b5d4baebbe99f9aa16c32ec--eae2bbea0adb4446b7536b91e5b81771 7e1916efa04f410fb3a598b728303daf eae2bbea0adb4446b7536b91e5b81771--7e1916efa04f410fb3a598b728303daf ff7ce3b4fea34a238c71f7105e2e1ef5 PHASE(0.5) 7e1916efa04f410fb3a598b728303daf--ff7ce3b4fea34a238c71f7105e2e1ef5 ff7ce3b4fea34a238c71f7105e2e1ef5--1ee350e06f044988a10e791d74ffc3d1 ff7ce3b4fea34a238c71f7105e2e1ef5--f723803f0ab141a197500be36ac9021a

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