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 1daa117c21bb43e5b7e8dece3354dc53 0 3a85c69e67da4e12a757a2fcda22f635 X 1daa117c21bb43e5b7e8dece3354dc53--3a85c69e67da4e12a757a2fcda22f635 fd54127a3e084cb8a0a0da963b07d270 1 dc8d14ba2ee4485e97b5084f4dd3ef7a 3a85c69e67da4e12a757a2fcda22f635--dc8d14ba2ee4485e97b5084f4dd3ef7a 6b7ed2e1c9be46c0aafed23df7aa6f79 961d22eef5c94689b8c1fa1e515184ce Y fd54127a3e084cb8a0a0da963b07d270--961d22eef5c94689b8c1fa1e515184ce 961d22eef5c94689b8c1fa1e515184ce--6b7ed2e1c9be46c0aafed23df7aa6f79
from qadence import X, Y, chain
from qadence.draw import display

b = chain(X(0), Y(0))
%3 2dddc6d8157c41e3ad047617a58e1c13 0 d50c205a7f634f33ba002e9b699708d2 X 2dddc6d8157c41e3ad047617a58e1c13--d50c205a7f634f33ba002e9b699708d2 ab58099b57ec483da8987ca32daee2cb Y d50c205a7f634f33ba002e9b699708d2--ab58099b57ec483da8987ca32daee2cb a9291538dffd46ab8daa65f322a17203 ab58099b57ec483da8987ca32daee2cb--a9291538dffd46ab8daa65f322a17203
from qadence import X, Y, chain
from qadence.draw import display

b = chain(X(0), Y(1))
%3 a904cc09d8d241b7b0c07654253b789b 0 dbaf08d4537441b78a40d32feae2cc9d X a904cc09d8d241b7b0c07654253b789b--dbaf08d4537441b78a40d32feae2cc9d ec0a0159732f4d1e82803c29fd783a18 1 cddd9e33694e4943ab8e7768642edc45 dbaf08d4537441b78a40d32feae2cc9d--cddd9e33694e4943ab8e7768642edc45 8ee3bf44ddfb445a8a67f61c557224bc cddd9e33694e4943ab8e7768642edc45--8ee3bf44ddfb445a8a67f61c557224bc 96ecd7a7bf84460eae84b12fef1b7e54 24cd5aa748554241bb0ba759db887979 ec0a0159732f4d1e82803c29fd783a18--24cd5aa748554241bb0ba759db887979 5b5c1c825a074eadb7eafcfcb4ffcf10 Y 24cd5aa748554241bb0ba759db887979--5b5c1c825a074eadb7eafcfcb4ffcf10 5b5c1c825a074eadb7eafcfcb4ffcf10--96ecd7a7bf84460eae84b12fef1b7e54
from qadence import X, Y, add
from qadence.draw import display

b = add(X(0), Y(1), X(2))
%3 cluster_3ddd5bf09da94c4695ac9dec721403e2 9b5e3a341b2f4d4fa04cc0377ec6c9ca 0 89afc7e30d484c41804ad0263e7d428d 9b5e3a341b2f4d4fa04cc0377ec6c9ca--89afc7e30d484c41804ad0263e7d428d c48b76c9ff6042de92367bfb7daa0a1c 1 28fd3f84df8e4347b757af7969714cf1 89afc7e30d484c41804ad0263e7d428d--28fd3f84df8e4347b757af7969714cf1 57c07b25c3a84e9cbb6e794dfe12ded4 e6c96c3c822841438b506e2e434730ca AddBlock c48b76c9ff6042de92367bfb7daa0a1c--e6c96c3c822841438b506e2e434730ca 3e1819fd937444788d7a76adc06e45e5 2 e6c96c3c822841438b506e2e434730ca--57c07b25c3a84e9cbb6e794dfe12ded4 8a4f7661175c43c1a9901c07dfe9733d 34c9dc4b98f14127b7f3f2592ed35a70 3e1819fd937444788d7a76adc06e45e5--34c9dc4b98f14127b7f3f2592ed35a70 34c9dc4b98f14127b7f3f2592ed35a70--8a4f7661175c43c1a9901c07dfe9733d
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_f309f73916c547b590252bc85fc6047b cluster_211ceb986dc14e658d8bc52a711019ef rx c5026c52bbcd459ebde4ee9453314e0d 0 a6239b9bf6b6475ab88b765e4c00e097 X c5026c52bbcd459ebde4ee9453314e0d--a6239b9bf6b6475ab88b765e4c00e097 7a0cc5ff2c0045809a9d22a5683059d4 1 f74ef5ffb3e146e28256e264b48bddd9 a6239b9bf6b6475ab88b765e4c00e097--f74ef5ffb3e146e28256e264b48bddd9 76ddfafeec5c4f4b92e16dc49bbdad0b f74ef5ffb3e146e28256e264b48bddd9--76ddfafeec5c4f4b92e16dc49bbdad0b 3b5fb597985a4e7683fc95183a4ec6f8 76ddfafeec5c4f4b92e16dc49bbdad0b--3b5fb597985a4e7683fc95183a4ec6f8 fbe101d686c34253a165b7aae7ec7950 3cb12ed091f94ab6a255c35cbaf8dd02 Y 7a0cc5ff2c0045809a9d22a5683059d4--3cb12ed091f94ab6a255c35cbaf8dd02 e1b0129cc6c94b26862688bfca581a40 2 18b065d736e24ec8b00fc8e5626ddefc 3cb12ed091f94ab6a255c35cbaf8dd02--18b065d736e24ec8b00fc8e5626ddefc 2dd0a94139be4b318312608f11e6ddc6 HamEvo 18b065d736e24ec8b00fc8e5626ddefc--2dd0a94139be4b318312608f11e6ddc6 2dd0a94139be4b318312608f11e6ddc6--fbe101d686c34253a165b7aae7ec7950 b882e79f850c497c8c89fbcfd925722c 3e328bc354894f9dbd127131eaa24885 RX(x) e1b0129cc6c94b26862688bfca581a40--3e328bc354894f9dbd127131eaa24885 65c80d2359e14da09572db060e94fc25 3 868e20a75b2a410e9b5999b05f063387 3e328bc354894f9dbd127131eaa24885--868e20a75b2a410e9b5999b05f063387 287d8b46e5d24649809bcea5e47f5c7b t = 10 868e20a75b2a410e9b5999b05f063387--287d8b46e5d24649809bcea5e47f5c7b 287d8b46e5d24649809bcea5e47f5c7b--b882e79f850c497c8c89fbcfd925722c 6ce3e454c6b14ad6bc80db03fae0b687 1f97c61a05134ff3b2d3efad94d37db3 RX(0.5) 65c80d2359e14da09572db060e94fc25--1f97c61a05134ff3b2d3efad94d37db3 b059e2d0f1eb4700965cb333458b40e8 X 1f97c61a05134ff3b2d3efad94d37db3--b059e2d0f1eb4700965cb333458b40e8 b059e2d0f1eb4700965cb333458b40e8--868e20a75b2a410e9b5999b05f063387 287970447c8b41bfb75e1268510aa867 b059e2d0f1eb4700965cb333458b40e8--287970447c8b41bfb75e1268510aa867 287970447c8b41bfb75e1268510aa867--6ce3e454c6b14ad6bc80db03fae0b687
from qadence import feature_map, hea, chain

block = chain(feature_map(4, reupload_scaling="Tower"), hea(4,2))
%3 cluster_5a30865feea649058fceece1715d86cb HEA cluster_f9c9cfe0288244548bf9a341b702a200 Tower Fourier FM a3b03fafd66c43759ed4e8b5563a1c6f 0 fb609ae447014a6d89967f89c062f451 RX(1.0*phi) a3b03fafd66c43759ed4e8b5563a1c6f--fb609ae447014a6d89967f89c062f451 3dd53dd129334e3389bcc86fda892a0d 1 3b05ff3f5e69461ea9a8b4c9d94878ce RX(theta₀) fb609ae447014a6d89967f89c062f451--3b05ff3f5e69461ea9a8b4c9d94878ce a092aa4c378749e4a38fb642ce9343a4 RY(theta₄) 3b05ff3f5e69461ea9a8b4c9d94878ce--a092aa4c378749e4a38fb642ce9343a4 587c6cc8e0bf4b36ab722ba5420999c7 RX(theta₈) a092aa4c378749e4a38fb642ce9343a4--587c6cc8e0bf4b36ab722ba5420999c7 38baf10af8674bf5b6438d6199957743 587c6cc8e0bf4b36ab722ba5420999c7--38baf10af8674bf5b6438d6199957743 19a93cd80785490fa2ce47be074485a4 38baf10af8674bf5b6438d6199957743--19a93cd80785490fa2ce47be074485a4 2e5b3d4ebe2246d79d9592e1e7d457d4 RX(theta₁₂) 19a93cd80785490fa2ce47be074485a4--2e5b3d4ebe2246d79d9592e1e7d457d4 b1b8f39ea7414ef3b57688f46a1797d7 RY(theta₁₆) 2e5b3d4ebe2246d79d9592e1e7d457d4--b1b8f39ea7414ef3b57688f46a1797d7 0fe58212e74d47a9ab9f492be45da475 RX(theta₂₀) b1b8f39ea7414ef3b57688f46a1797d7--0fe58212e74d47a9ab9f492be45da475 4af8129727b345ac8c808e2a5517118f 0fe58212e74d47a9ab9f492be45da475--4af8129727b345ac8c808e2a5517118f 318c74940a5e4c729b06b82cb5814b61 4af8129727b345ac8c808e2a5517118f--318c74940a5e4c729b06b82cb5814b61 54706e2dfb2245c2b6f27fcd648b2445 318c74940a5e4c729b06b82cb5814b61--54706e2dfb2245c2b6f27fcd648b2445 a00c8900da7a428cb46d35ce63212fe8 3572f9193cba4bf7af87b1bc8b62229e RX(2.0*phi) 3dd53dd129334e3389bcc86fda892a0d--3572f9193cba4bf7af87b1bc8b62229e f658111ec85f49329e3d6914d24b8481 2 ba56c55af34f4766b6219be9cc12d84e RX(theta₁) 3572f9193cba4bf7af87b1bc8b62229e--ba56c55af34f4766b6219be9cc12d84e e3ccaf7a819a40d0a2b56aa2ce671387 RY(theta₅) ba56c55af34f4766b6219be9cc12d84e--e3ccaf7a819a40d0a2b56aa2ce671387 d5da058a79214537ab446272cedd8a2d RX(theta₉) e3ccaf7a819a40d0a2b56aa2ce671387--d5da058a79214537ab446272cedd8a2d 2d51759e928941b1bb1d60fc31dbdca4 X d5da058a79214537ab446272cedd8a2d--2d51759e928941b1bb1d60fc31dbdca4 2d51759e928941b1bb1d60fc31dbdca4--38baf10af8674bf5b6438d6199957743 d8d1aec99567452a92a62040393e9e8f 2d51759e928941b1bb1d60fc31dbdca4--d8d1aec99567452a92a62040393e9e8f d7e4abcbd7fb4b4ea84d23f781667884 RX(theta₁₃) d8d1aec99567452a92a62040393e9e8f--d7e4abcbd7fb4b4ea84d23f781667884 8f6912124f9d4a84a596da1f177ebeb4 RY(theta₁₇) d7e4abcbd7fb4b4ea84d23f781667884--8f6912124f9d4a84a596da1f177ebeb4 13e941f197ed4babb9814902b5ee04d4 RX(theta₂₁) 8f6912124f9d4a84a596da1f177ebeb4--13e941f197ed4babb9814902b5ee04d4 f59e2ca264d4413e820e005e52f251c5 X 13e941f197ed4babb9814902b5ee04d4--f59e2ca264d4413e820e005e52f251c5 f59e2ca264d4413e820e005e52f251c5--4af8129727b345ac8c808e2a5517118f 1608498244074258ae913f798b2a4a4d f59e2ca264d4413e820e005e52f251c5--1608498244074258ae913f798b2a4a4d 1608498244074258ae913f798b2a4a4d--a00c8900da7a428cb46d35ce63212fe8 c3d2b5ccd7ed469c9abbc7129e4ae547 88a8e1ce18c6403aa5ca4392f3cddaed RX(3.0*phi) f658111ec85f49329e3d6914d24b8481--88a8e1ce18c6403aa5ca4392f3cddaed baeb67ff0fc44f3e9cf6ef7f4c535205 3 3393edd4aa23467fb975af7af06d1b1d RX(theta₂) 88a8e1ce18c6403aa5ca4392f3cddaed--3393edd4aa23467fb975af7af06d1b1d 8ba4ece96aee4d5e95e6d5a6517616cd RY(theta₆) 3393edd4aa23467fb975af7af06d1b1d--8ba4ece96aee4d5e95e6d5a6517616cd 3818a4a1cd6a4e88b82dffc8309e79fe RX(theta₁₀) 8ba4ece96aee4d5e95e6d5a6517616cd--3818a4a1cd6a4e88b82dffc8309e79fe 42bd302e87a846ae940f91f2c9edc511 3818a4a1cd6a4e88b82dffc8309e79fe--42bd302e87a846ae940f91f2c9edc511 c822a1643465439782e99463adb60703 X 42bd302e87a846ae940f91f2c9edc511--c822a1643465439782e99463adb60703 c822a1643465439782e99463adb60703--d8d1aec99567452a92a62040393e9e8f 637403fa5a3a4ce5afb3480f32641519 RX(theta₁₄) c822a1643465439782e99463adb60703--637403fa5a3a4ce5afb3480f32641519 e4c19e22b2234ccaaaf1e9dde902c5f4 RY(theta₁₈) 637403fa5a3a4ce5afb3480f32641519--e4c19e22b2234ccaaaf1e9dde902c5f4 584741a6e5e24ba3b1bab5f1b010f4e5 RX(theta₂₂) e4c19e22b2234ccaaaf1e9dde902c5f4--584741a6e5e24ba3b1bab5f1b010f4e5 5f605fb9baef47eb912af489befca9aa 584741a6e5e24ba3b1bab5f1b010f4e5--5f605fb9baef47eb912af489befca9aa fd1b44808afc452487810951d5668080 X 5f605fb9baef47eb912af489befca9aa--fd1b44808afc452487810951d5668080 fd1b44808afc452487810951d5668080--1608498244074258ae913f798b2a4a4d fd1b44808afc452487810951d5668080--c3d2b5ccd7ed469c9abbc7129e4ae547 174b1d7c14554b15bc35871253e2c372 35a5507d64d743c4843d0d80931750f8 RX(4.0*phi) baeb67ff0fc44f3e9cf6ef7f4c535205--35a5507d64d743c4843d0d80931750f8 c842ee7e06bc4bc0a804914bbe47c840 RX(theta₃) 35a5507d64d743c4843d0d80931750f8--c842ee7e06bc4bc0a804914bbe47c840 0f1c49eb14204c2a9d421c999de51983 RY(theta₇) c842ee7e06bc4bc0a804914bbe47c840--0f1c49eb14204c2a9d421c999de51983 d09c27da3c6847ed83e455f01ff95b02 RX(theta₁₁) 0f1c49eb14204c2a9d421c999de51983--d09c27da3c6847ed83e455f01ff95b02 b6ec1b43bccf437981ac0d881e0373f8 X d09c27da3c6847ed83e455f01ff95b02--b6ec1b43bccf437981ac0d881e0373f8 b6ec1b43bccf437981ac0d881e0373f8--42bd302e87a846ae940f91f2c9edc511 e7647b6ab45b4d83ad272ad3b0ec072e b6ec1b43bccf437981ac0d881e0373f8--e7647b6ab45b4d83ad272ad3b0ec072e 182452c69f634c99aa2e737aedebb82c RX(theta₁₅) e7647b6ab45b4d83ad272ad3b0ec072e--182452c69f634c99aa2e737aedebb82c 2977223c6e4c4cf194aa77d9d3cd770b RY(theta₁₉) 182452c69f634c99aa2e737aedebb82c--2977223c6e4c4cf194aa77d9d3cd770b bc89f95f9b204c80842544ea952415f6 RX(theta₂₃) 2977223c6e4c4cf194aa77d9d3cd770b--bc89f95f9b204c80842544ea952415f6 e68c7327a8b6401391586233d56e2822 X bc89f95f9b204c80842544ea952415f6--e68c7327a8b6401391586233d56e2822 e68c7327a8b6401391586233d56e2822--5f605fb9baef47eb912af489befca9aa 005f58f5232047b2bc8ad3c003e8b376 e68c7327a8b6401391586233d56e2822--005f58f5232047b2bc8ad3c003e8b376 005f58f5232047b2bc8ad3c003e8b376--174b1d7c14554b15bc35871253e2c372
from qadence import QuantumModel, QuantumCircuit, total_magnetization, hea

model = QuantumModel(QuantumCircuit(3, hea(3,2)), total_magnetization(3))
%3 cluster_defef0696faf499da9a0825459f76b3f Obs. cluster_c96bb275c72f4af9a6454805ff79dba2 cluster_a9c1a8db7de5470e8ebefa039860df88 HEA 3e85aa99042445c0b1390ad3a426d073 0 5e5a1fd1f6fc438f91c5129278c08e61 RX(theta₀) 3e85aa99042445c0b1390ad3a426d073--5e5a1fd1f6fc438f91c5129278c08e61 4ae3d8e442844aec8f5f39cf0726d90a 1 4342554cee654af09a50a85cd8833789 RY(theta₃) 5e5a1fd1f6fc438f91c5129278c08e61--4342554cee654af09a50a85cd8833789 4c417ecb661e447a8dc9d8b4e1ee180f RX(theta₆) 4342554cee654af09a50a85cd8833789--4c417ecb661e447a8dc9d8b4e1ee180f ec43b9244cf34bbfb1f46a695c143a19 4c417ecb661e447a8dc9d8b4e1ee180f--ec43b9244cf34bbfb1f46a695c143a19 0e2dafe59b3f4fe28cec79ff4fbd23e3 ec43b9244cf34bbfb1f46a695c143a19--0e2dafe59b3f4fe28cec79ff4fbd23e3 ce18a0f321de4702b1208b3d30b3c74d RX(theta₉) 0e2dafe59b3f4fe28cec79ff4fbd23e3--ce18a0f321de4702b1208b3d30b3c74d fe35e0936f884d6abf5538a939bec1cd RY(theta₁₂) ce18a0f321de4702b1208b3d30b3c74d--fe35e0936f884d6abf5538a939bec1cd d6c2979f80d94c869b3ff7a088404bea RX(theta₁₅) fe35e0936f884d6abf5538a939bec1cd--d6c2979f80d94c869b3ff7a088404bea 7c67c515039947f6a5b0843acbc87e79 d6c2979f80d94c869b3ff7a088404bea--7c67c515039947f6a5b0843acbc87e79 6863fb89ec5b4e17a8a0591d7d9e0e00 7c67c515039947f6a5b0843acbc87e79--6863fb89ec5b4e17a8a0591d7d9e0e00 17a73e65e2564f7cb4832f3067edde58 6863fb89ec5b4e17a8a0591d7d9e0e00--17a73e65e2564f7cb4832f3067edde58 f4afbbabaf4e4cbdbbda98be908dbd1c 17a73e65e2564f7cb4832f3067edde58--f4afbbabaf4e4cbdbbda98be908dbd1c d857c876383c456fbaaa8ca83fd8df22 bb5b62ab4e6d4b8d9500696b65fe2875 RX(theta₁) 4ae3d8e442844aec8f5f39cf0726d90a--bb5b62ab4e6d4b8d9500696b65fe2875 0346801779d34e10ab2a1eeb43a903ad 2 e32bf6d8f1b34fe388a913e27d61c566 RY(theta₄) bb5b62ab4e6d4b8d9500696b65fe2875--e32bf6d8f1b34fe388a913e27d61c566 f74073b9301c42348f8f8219b519a38a RX(theta₇) e32bf6d8f1b34fe388a913e27d61c566--f74073b9301c42348f8f8219b519a38a 2008b43715c54277be362fe32fccc4b5 X f74073b9301c42348f8f8219b519a38a--2008b43715c54277be362fe32fccc4b5 2008b43715c54277be362fe32fccc4b5--ec43b9244cf34bbfb1f46a695c143a19 8d898797dcce4237afbc653686dfeb04 2008b43715c54277be362fe32fccc4b5--8d898797dcce4237afbc653686dfeb04 a29bc92003584136882ed65246b33558 RX(theta₁₀) 8d898797dcce4237afbc653686dfeb04--a29bc92003584136882ed65246b33558 ab2132bc10ab45f38f782a150b1c3f81 RY(theta₁₃) a29bc92003584136882ed65246b33558--ab2132bc10ab45f38f782a150b1c3f81 132e598bf87445e884c7d425ef818b1c RX(theta₁₆) ab2132bc10ab45f38f782a150b1c3f81--132e598bf87445e884c7d425ef818b1c 13d754a525de425e93ebcb65106ddbd9 X 132e598bf87445e884c7d425ef818b1c--13d754a525de425e93ebcb65106ddbd9 13d754a525de425e93ebcb65106ddbd9--7c67c515039947f6a5b0843acbc87e79 c17dc57001fc4e728d982577f239831c 13d754a525de425e93ebcb65106ddbd9--c17dc57001fc4e728d982577f239831c 27e64b12c0e04046b53e32388ca0aa39 AddBlock c17dc57001fc4e728d982577f239831c--27e64b12c0e04046b53e32388ca0aa39 27e64b12c0e04046b53e32388ca0aa39--d857c876383c456fbaaa8ca83fd8df22 f6c95b93c1734ed69456343b97d01486 b3ecbb3280f34923ab4bf4a9364ee038 RX(theta₂) 0346801779d34e10ab2a1eeb43a903ad--b3ecbb3280f34923ab4bf4a9364ee038 f565c65212ff454288b8a7724dbc77f3 RY(theta₅) b3ecbb3280f34923ab4bf4a9364ee038--f565c65212ff454288b8a7724dbc77f3 581f40d7b2cb4e9b9115e19b1aee92b1 RX(theta₈) f565c65212ff454288b8a7724dbc77f3--581f40d7b2cb4e9b9115e19b1aee92b1 c37de2f56301412a9087656716fcdb25 581f40d7b2cb4e9b9115e19b1aee92b1--c37de2f56301412a9087656716fcdb25 ca40076c4a99419aa196b891392366e2 X c37de2f56301412a9087656716fcdb25--ca40076c4a99419aa196b891392366e2 ca40076c4a99419aa196b891392366e2--8d898797dcce4237afbc653686dfeb04 35c6aeffd28746b48574770935dc25a3 RX(theta₁₁) ca40076c4a99419aa196b891392366e2--35c6aeffd28746b48574770935dc25a3 a53723c32daa47cea399331e50374edb RY(theta₁₄) 35c6aeffd28746b48574770935dc25a3--a53723c32daa47cea399331e50374edb 72a2c295e3f04b99baa7ad81178520b5 RX(theta₁₇) a53723c32daa47cea399331e50374edb--72a2c295e3f04b99baa7ad81178520b5 73a2e9485ecc40ecb9efa79e4d3e89d1 72a2c295e3f04b99baa7ad81178520b5--73a2e9485ecc40ecb9efa79e4d3e89d1 9260526207814accb20457ec7497e8a5 X 73a2e9485ecc40ecb9efa79e4d3e89d1--9260526207814accb20457ec7497e8a5 9260526207814accb20457ec7497e8a5--c17dc57001fc4e728d982577f239831c 69b44d230df9440b8c301a96a0b65788 9260526207814accb20457ec7497e8a5--69b44d230df9440b8c301a96a0b65788 69b44d230df9440b8c301a96a0b65788--f6c95b93c1734ed69456343b97d01486
from qadence import *

b = chain(SWAP(0,1), SWAP(0,3))
%3 8723f533454241f5945a8f405df65481 0 73bfbbcb6b274b48a27f42ce920da117 8723f533454241f5945a8f405df65481--73bfbbcb6b274b48a27f42ce920da117 bd32ac0661104866a3ea245c93c59b50 1 b8c7075f79174fc3baf9315601ed9773 9fc11298d5504eee88897dbb2fd498b8 73bfbbcb6b274b48a27f42ce920da117--9fc11298d5504eee88897dbb2fd498b8 c1a6a08b6d09448d8f6ae0c59676b324 b8c7075f79174fc3baf9315601ed9773--c1a6a08b6d09448d8f6ae0c59676b324 18652ffdc33745679ce5abe07b9344db ddd1200c63e24b71a16b5c515c4b8d0a c1a6a08b6d09448d8f6ae0c59676b324--ddd1200c63e24b71a16b5c515c4b8d0a 863c057beee948039686314d6d86698c 18652ffdc33745679ce5abe07b9344db--863c057beee948039686314d6d86698c eb254374ad944bcfab757fdc6cd3988f b12401848f114f979ca6baa0ff506b12 bd32ac0661104866a3ea245c93c59b50--b12401848f114f979ca6baa0ff506b12 d4150eb2de6641478a9b35aa5a391305 2 b12401848f114f979ca6baa0ff506b12--b8c7075f79174fc3baf9315601ed9773 80a5e0d5e40e4882a11f5671ab01d260 9fc11298d5504eee88897dbb2fd498b8--80a5e0d5e40e4882a11f5671ab01d260 0d83751bad0a4311b2126a470912891e 80a5e0d5e40e4882a11f5671ab01d260--0d83751bad0a4311b2126a470912891e 0d83751bad0a4311b2126a470912891e--eb254374ad944bcfab757fdc6cd3988f 9a5610ec76594617b70ba95a9a537175 3e591ebd40b14ffdba7a81fe082e1b16 d4150eb2de6641478a9b35aa5a391305--3e591ebd40b14ffdba7a81fe082e1b16 291151e2b73f44d6a8d0827ae19b5d70 3 42fa41f59daf4a3089d2eddee98f990b 3e591ebd40b14ffdba7a81fe082e1b16--42fa41f59daf4a3089d2eddee98f990b 4be45a0b610c4610a5a5b865f91ac210 42fa41f59daf4a3089d2eddee98f990b--4be45a0b610c4610a5a5b865f91ac210 706de203aca04b9db409247c6d14e85c 4be45a0b610c4610a5a5b865f91ac210--706de203aca04b9db409247c6d14e85c 706de203aca04b9db409247c6d14e85c--9a5610ec76594617b70ba95a9a537175 587c0b7eace24fd096003a1a2277c522 0dceaebd0afb46b18147e95249b86814 291151e2b73f44d6a8d0827ae19b5d70--0dceaebd0afb46b18147e95249b86814 775dff0a58c94b998612e094e9cd6d21 0dceaebd0afb46b18147e95249b86814--775dff0a58c94b998612e094e9cd6d21 ac2a771db5d94fe0b8ce9fe60c88bbca 775dff0a58c94b998612e094e9cd6d21--ac2a771db5d94fe0b8ce9fe60c88bbca ac2a771db5d94fe0b8ce9fe60c88bbca--18652ffdc33745679ce5abe07b9344db ddd1200c63e24b71a16b5c515c4b8d0a--587c0b7eace24fd096003a1a2277c522
from qadence import *

b = chain(CPHASE(0, 1, 0.5), CPHASE(0, 2, 0.5), CPHASE(0, 3, 0.5))
%3 eea1771e398e408b8b9c2351299cfee9 0 52283658a5d14e1887c571ec752863ed eea1771e398e408b8b9c2351299cfee9--52283658a5d14e1887c571ec752863ed b392162242054b7dbf32faa8e8e82808 1 f32c54d4b6e844ad9bcdf2aabaa17776 52283658a5d14e1887c571ec752863ed--f32c54d4b6e844ad9bcdf2aabaa17776 d36c7923d4fc4acb95715988d5694fb7 f32c54d4b6e844ad9bcdf2aabaa17776--d36c7923d4fc4acb95715988d5694fb7 dad103426bcc4586b33286198180cd4b d36c7923d4fc4acb95715988d5694fb7--dad103426bcc4586b33286198180cd4b f32a205279ce4b1c97ecb7aaea12eef0 1836f970264e4eb9ab6b9dd3f87c866b PHASE(0.5) b392162242054b7dbf32faa8e8e82808--1836f970264e4eb9ab6b9dd3f87c866b bf22556641b5496cbb8bbfad7788604b 2 1836f970264e4eb9ab6b9dd3f87c866b--52283658a5d14e1887c571ec752863ed 21ce957bd4974f81a6b59fe5c7e7c8f8 1836f970264e4eb9ab6b9dd3f87c866b--21ce957bd4974f81a6b59fe5c7e7c8f8 0d97ca2b54c342928d06c5e84c7c0cef 21ce957bd4974f81a6b59fe5c7e7c8f8--0d97ca2b54c342928d06c5e84c7c0cef 0d97ca2b54c342928d06c5e84c7c0cef--f32a205279ce4b1c97ecb7aaea12eef0 12dbba37f5a24e95be4cac8bc0663a48 7041079bc9214e008d00714f311fa5c8 bf22556641b5496cbb8bbfad7788604b--7041079bc9214e008d00714f311fa5c8 bc713b8cd67f48c7aea46fbd4792b58a 3 944c0bfbecd84812bda53d6830224387 PHASE(0.5) 7041079bc9214e008d00714f311fa5c8--944c0bfbecd84812bda53d6830224387 944c0bfbecd84812bda53d6830224387--f32c54d4b6e844ad9bcdf2aabaa17776 af342944d1804ddc91d2e166285c56cd 944c0bfbecd84812bda53d6830224387--af342944d1804ddc91d2e166285c56cd af342944d1804ddc91d2e166285c56cd--12dbba37f5a24e95be4cac8bc0663a48 bab3e9ef21a44dbeae212b5135e8b02d afbc2d57014c48708df654f3deeccf47 bc713b8cd67f48c7aea46fbd4792b58a--afbc2d57014c48708df654f3deeccf47 4bbc55d807264f3f9581ad521455f66e afbc2d57014c48708df654f3deeccf47--4bbc55d807264f3f9581ad521455f66e e0c5c464201240478849837889523770 PHASE(0.5) 4bbc55d807264f3f9581ad521455f66e--e0c5c464201240478849837889523770 e0c5c464201240478849837889523770--d36c7923d4fc4acb95715988d5694fb7 e0c5c464201240478849837889523770--bab3e9ef21a44dbeae212b5135e8b02d

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