From 080d709f0b792b92e7b0d1e15e35f6fae737a137 Mon Sep 17 00:00:00 2001 From: bit2qbit Date: Thu, 20 Nov 2025 10:32:09 +0530 Subject: [PATCH 1/4] feat(block-encoding): added paper implementation as per Issue1267 --- applications/block_encoding/2D_Lap.png | Bin 0 -> 19593 bytes .../block_encoding/2D_Laplacian_circuit.png | Bin 0 -> 60772 bytes applications/block_encoding/General_BE.png | Bin 0 -> 35386 bytes applications/block_encoding/checkerboard.png | Bin 0 -> 82234 bytes .../block_encoding/checkerboard_BE_N8.qmod | 45 + .../checkerboard_BE_N8.synthesis_options.json | 45 + .../block_encoding/checkerboard_circuit.png | Bin 0 -> 54328 bytes .../block_encoding/laplacian_BE_Nx4_Ny4.qmod | 101 ++ ...aplacian_BE_Nx4_Ny4.synthesis_options.json | 45 + .../block_encoding/select_structures_BE.ipynb | 1356 +++++++++++++++++ .../block_encoding/symmetric_tridiagonal.png | Bin 0 -> 19439 bytes .../block_encoding/toeplitz_BE_N16.qmod | 42 + .../toeplitz_BE_N16.synthesis_options.json | 45 + .../block_encoding/toeplitz_circuit.png | Bin 0 -> 29793 bytes .../block_encoding/tridiagonal_BE_size16.qmod | 71 + ...idiagonal_BE_size16.synthesis_options.json | 45 + .../tridiagonal_symmetric_circuit.png | Bin 0 -> 41856 bytes tests/notebooks/test_select_structures_BE.py | 21 + tests/resources/timeouts.yaml | 5 + 19 files changed, 1821 insertions(+) create mode 100644 applications/block_encoding/2D_Lap.png create mode 100644 applications/block_encoding/2D_Laplacian_circuit.png create mode 100644 applications/block_encoding/General_BE.png create mode 100644 applications/block_encoding/checkerboard.png create mode 100644 applications/block_encoding/checkerboard_BE_N8.qmod create mode 100644 applications/block_encoding/checkerboard_BE_N8.synthesis_options.json create mode 100644 applications/block_encoding/checkerboard_circuit.png create mode 100644 applications/block_encoding/laplacian_BE_Nx4_Ny4.qmod create mode 100644 applications/block_encoding/laplacian_BE_Nx4_Ny4.synthesis_options.json create mode 100644 applications/block_encoding/select_structures_BE.ipynb create mode 100644 applications/block_encoding/symmetric_tridiagonal.png create mode 100644 applications/block_encoding/toeplitz_BE_N16.qmod create mode 100644 applications/block_encoding/toeplitz_BE_N16.synthesis_options.json create mode 100644 applications/block_encoding/toeplitz_circuit.png create mode 100644 applications/block_encoding/tridiagonal_BE_size16.qmod create mode 100644 applications/block_encoding/tridiagonal_BE_size16.synthesis_options.json create mode 100644 applications/block_encoding/tridiagonal_symmetric_circuit.png create mode 100644 tests/notebooks/test_select_structures_BE.py diff --git a/applications/block_encoding/2D_Lap.png b/applications/block_encoding/2D_Lap.png new file mode 100644 index 0000000000000000000000000000000000000000..7dbdf61393e2ac82b44018d93e9637043fa3fc3a GIT binary patch literal 19593 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 X^sB!`DozOp{->#`t5T|Djro57gjX(X literal 0 HcmV?d00001 diff --git a/applications/block_encoding/General_BE.png b/applications/block_encoding/General_BE.png new file mode 100644 index 0000000000000000000000000000000000000000..6399413cf80cc5b55c08f69360f298a150030f04 GIT binary patch literal 35386 zcmeFYWmuHo7dDE35+aS1NJtD_0@68jcL+!~DBYoibc1vwAf3{JN{4iZAYIbZXAk)M z*LlzP^Wo*XhIwY5*n6+N*1guc*P38Od5K4;M5u6ZaF3)U#gyUT5JSN6Z{!Eyzuj7- zFdQ73jD@JEqLip8nWDX&sfD!(9Gqluyatk{O84V*9c6MvWHBM>bvevvY$0i6M&Bcf z_tKK^{@6w$iWNDbsHM7M<=LOeLP#(x3^X2p-_?HnkdA)Ku&uNS<(}h|Mhn*hm&^6V zV3N-Ox6A50FWirrGi3|(A{3!gN`=Qb+k-@jaeWj{@N`1=NG1`e^~nzA1ysKw=)k31ySXircqlO!`$l1 ze21w)`z8>Ti}p=2s{Te*aOh8wOGLOzo($$*IH4TkgJMtN2cubE&HZA0@`At&9jjp`|E`o#R z*P?XVhrvo6Xon}19`+xwKZ#xn$2`VDso;czFg-q*qGx4S!NM-9l(0dxXX+z-CBi43 zj?=rfX5@eA%kusaxqRX;G5^yU-2BjYahxnZ=1DIi@sTQ?ep91xdu83)k23Y^gP)sS ze(&d0?`v-T@wIo#Hz^dn={dul)$GtFZ?C=zGIk~`L%MJG&X)X<-*b>fM45F49?#_B z8rwg6U~L>iV8ZYivsWzUl~25YdNR|)kd3;9Bzn^KB)rkItI(t6Pi{$X$ctVYC?H-6 z+!!!u)=9Pplm5W!?hL^AMuB@DvBFQUi1cpk z@0Wj_RUjB09xg7aZY)EGn+jgUXSljO7JM$fg3*HSkHCZs$B^mE@ksW8meB09+QR)k zReoV#3}Z5c_r9Wn>?{-&WfJgZ6`63CDACAWNS$Y=$00%jzgp1^;!|CtRCGy%+lmjBiQP60Z|AfwpsGdY^-cRKZ-`$` zUHr7Xd|4A={4I&vQXAfBuHE-XeUC@h6gWo-8%$dSwM?j2Qij(+_Ej)diuN4 z7}A(<%#2qnUi=OvH{7R$@5Ev-qcPKfi(4Qa+uD(HTyVK>Q0uw2dV}tJx<5ZZ|7@ZD z$1>cuLr|Ij*9C53&dch8d#|s{g~)p~-h4g~@wG$ene{sVLhu2Bm>`nSjgeac`3&%vMQX)i?p&C=Ok=77 z&Lx@(dLk}Qfgi>B3;h6dLrm{kh9a7pgp=a4QB;!PN+oonz>X}OA83xK+P+LeiP00Ve-NAVp2P37!Q}_Cva0mmGctO~fGyK8%u2{fOy410Azl2~%75^TXgtEn zfb4d|a&Br*h@i3z+!%ao_5XXcO^`cqSGa$_b(Zd?ZUml<)^> z2t^!rEe<-?z?bGxVOI%C>?AR(Y~I;Wsc#HRXiL~j50;)Tp%@bHvsMI&QEbF+OU>s> zVrRrj&{32;+o2$#(WP>V5{Me>qBb_O$K+08Ajgl9>E`Y3?9%8S?8=}`#+3=7p^Bl% zmHo(&W1aI{nMs8Ql2NFwYE{I=5s?f{lVHplR~}T{Q(7n}EKDkND}a6q9$PJnFWgb% zEjv-%$!VxY+L=F3#_NwvknPQ3%u^eYAA0&jz?|jz6Ao7* zk#KGzJR&C|4Gz6wT1Oe4Ac1H-A?7^NO#OTp3+3k}&+C&t`=^rel7l$xEKbZ>tHmv# zmMfNwL(_#$!dvy6QZv%LiaG_&LLQ$^Xm>i%!VCr$*$~6d!fe9W!_Y~xBWlnUXkfpj`!80954|5QlDLvG0tp{2qv1T#;VX8Y95dKE z4%|B12tEoqK3SjpagjSXj4?VmuAik}=Cc6DRnGpN^Mhsi&|;YI#Ot)5dSCB<4Gr2O zy-p#wG&dtKdhzx3CxcLf$mj~C^5{|Xv?1CYCZqg{j5i7Umdi#RY1C*qq&OAbma)s! zKIM*DPt?&rg*hdU*;twr85Xh38BSZCPxVbR%oqQ#j-2vxDB_;soAa!3t8%Lg2>z}a zn)I0CajTXx!&E|2f)(SSR!d!Ft#q}vxtiVatoC5CneHoHBd@_g(`766@A<>44U9tx zHYqlZZ6_flmTQ)Y78(XFQ%`GLs_dvNyLFR1+mI9N6E}>vL9Lxn zBB>)I({0n;(l7XL4(xyToJ?;Vdxjko41KUMdg_tlcGz6!T6aB<$?o$ebr|g_;TMx-zDF1p`9;(z8ri(5;hek z6y^|~Yb$MIf2-h+Dbg;Y?mxRkxR2OmspnGQv0nUR#9-5)!eGT9vVEuB#CK_p^yQoauZv_9>%!+LSgKOWY>?akg3?tQ((1D@1Yq+W10x^*A7WiRSxP&y35E zOAHm9{HGuCIpo+%Od95nzK>+!A>v)KA!Lw$7~&goTy09iFneQalN8=3pEAeS={fM0 zo5bPWntFfEKyUh~RhG)np7y#!oHZ^c7Ht-nw&jesK1H;{kQlrcFI}kn3fYyk>>OQ_T}jz^E;tI`cuzv$+wa-oeW!j-PMIl1-nBgodunb zpKS5#y>43bKN6eh4vURUq2XBI=hz)R9vS+mGw7ej?ZdggUFeYN&^hRlVb`$e_VYLN z&LuxTrbYjQhCd~dvA6Q=ju<9Peb;s=9#@-{mDFVnOQikZmc2oBKTdtqO_gU z74B5pnb9RF33D#9fD7JL;qlseA}2G(^~$M+ z%<1Rd2#rdO=CZ`5A)l({lHQrs^n!GxJ^KYOZ~aT*8__X|lTL>WY(f4DzT<}*GE*8e zW#J3$EpuD_J3H|QCYLSx_s}4boEvaW^Y`EwQQ#i%aVd9x8VK^buastSf%!*4(5q%UL*M2ZxbnB>N4Rj==5XKK;2e+E+jw3lZ1K9#J;X|X#7W~N*DHr` zlV329EBJ@M`o6RpK1=l#zQ%)hglO}jRv^0wG0~JVm6L;`1INg4i1&!#?t`Oy;3aU6 z_+Q83_aJZxx8K9V!39~sA^yEa9=yZ;qQDDw&)qvhOduQ*_=F8!u9@)vT#Xo#iSW-c z+;4CWPFO`$N(#KI7}=Yc*gBZoIXbrZ?Sd~*UQ22@z`;GHg1zoZDN};W?@d^!YC3Al z$?_Q4*)SOx+ZmcLx!SyjJqM1@l?NQ!m^d1cx!PFUI`FviQ`}y`1CC)|GgFY=UgBuQ zPoXKNNG57$Z$ie&#KOcvA%IFoM#g7vY|5i7CjR$!@QI(o+|lth4>PliiwlzrJCmKg z88a(4H#aj28#5alBe;Um!Ohmuz?IR~;o03o{&|j=iGz{7#cM|kJ6kf?a}5mboE-Tn zC}0Eq>+f!!CaxC$9?90>@3O!GnPF#`S(#Xv|MhHeD;GS8{ypM<+^PBRJ6Tyd+5Yp^|2Xx(x2idq*o)fPfH55f{=Hv+Z~o7de{bYt zhAsU+L~$qQ+i!uO1yK2z|FvlXsFOh|X<#3pScoa8f_I>0w|}nSKLosB@8HEMcP!MA z3*HH(#DrB{?`@}{Osb7scWQJi7Fwxy#i12Ss^(`yP~Xssb@5T?Qp`q#{bofe{d_+rEEcat4_efYVWks zXRFTAt(E{4kqqu0vJf0RrZ3#T4~4$t6a*-$?oYtM{hvDv=JLcfRnEA@-Zf|uE2rkCdG#hTHFEgP738nB2X1UZoUjdEwP1#s}#A?SR+h1iX| zqEJ6Ds`v}JVSNzrYT!Qm6^j+pvsKMT3>yY20hd*dV>)DjM`T* z&aV9kOsM6yPTL3QAJ^$=%KE@aK@21d&0X|>8 z&eK4~eG4a|L=ItpaBIQ<10Maw0J`_!#Qikud~Ih$%#fblI5zUzNlAf8K@=X!|1&93 zFe$;88+h;mWWI{3$UR~AZifJffpCWyeyCuAs=_oWg$X2J)JonwS!5sZYCmF6MsP^^DQ``_M_Xh$OI;uZFyRpx8Rgw9GGCp zLG>c;9So5Pg3kwE^BqG#~c&81DOo-A_kn_z? zWwMD(x_v$I^!-+4&8D@}mY-5n1It>kr(e3vIpu?KO*6bsx}`Fdc&9w}n)^SMwOF?N zS$a5QO6M+cFKH@6HJ4Ro9?k&pDK=Xygu~x^0f6vjW5zz-y(X2CEnpNA)z(wPM_UtvvL9How42fWE2Jh_zO~7^1?*FW$stcj zxBsdd6kxZRu4Z-G8s|7%?Pm`s;^>*S^Up3G8oDzhHu6QKf81ID0X*2DOqb&^4Kt2~ zdWSXlM?}wmk86V*T);~8Ld&lCxXJx^(+vpLxu(JEbZ)}qa=%kF{9;1i$4!FNt9r}m z+k336X@8CwjFvrqj}x>RhB9Z-K(sdk;ZON_e!fuWvp-gcNNbk8Gq8@~lvj#=RL0T* zX8lvWTP-*TPoeo_XU4;7ytsSXhyJxYvF&Gr@f{1~JL^Ig{o>Es{@^eA`yG&BLLmnz zl3n$CEf?@@(Dq*XvZf`CMujWZ%heP+_vMc8L(a)p@4nQ!?9Hc7f2510QE)!dZFH8i zN-4_t!*f>s6`dEcWxH;{d!PFLjV?p&j4f}O^Um~q43!La1gW?x*zEE{T%@WMypBW` zPTH6B-9^Ih9@Jae{rUY<>mpJyj)R9t1O_5P4}d1dd>Nh@kCo@?-kNW2oG8`h9SrRE zs50%BHtaX}3vU*fT>*-@Nz+dR{T3@{Y#Z}ZFS!;xmu)J$sr{Pec2h>LKW2CzY{zim zdl@7eQ`Pk5FC|-*qIgDq&hzk)OXPM~eUZWAvYR>@&yp=okdli)S=g1JL7?A0N%`iJ zF~-cd?fLVqvc2qGft$<2;#EJzI6O|GTSO5Ggv}7nYOcX4K1hmRahlR!s+b$?POy+i z@b%as4NhB+XK9$5ez#Z03LcNDAb6zYP!(P+w!KSB(;NL&xsKt$7l>myIqucjS_YFwG;@P&3Mb?K zD^`hkpU%1ovuyJ$eV;21&HRKdk6qTzC(GH~yA4~Vbl#W0zhbcJJwExA;B29lj>rI2 z{{Na>a7igAIxo zH&=T;`)ZfKBf&20Lh*Zv40Zl=zBpfi*u3C#ZJjAM&=%uNZ>Gs}fo0e18_-4J6{ozaU?Ux|Jd=QgC5d4?PS5 z4PVlIDhqn*UckGjJ)LMF4C#p@IJuQh)FXiS&qt3EMtu;H_wvlV59FH*^Zt6617R|J z5hd!g;O9utKDxaqAHjHx;E))N-qjcxCMnglu?jHRxf!>$H2z?P^A^XA;V&5B91g2} z#pnIdXM&d8bD;&d>ct|k_V!k}{P*i{ZN$TgR!ZAU`;$$!1w@oOy3Fq|UkkVwX@rs} zk?0t+tt`AONWWAT(XEMAQb#?^f^Z5(+n46jOY7}~iiHTB5BglIlyn0eTpa_!z?57X zPmQ)$Et02_j1n8&w23U1T#FzE@Zq((5|(w=Q*3KNh}Dj#S9kM4|Ihj8xo_kxo?jgF zGP5VciztbIW(kD(Gd~6tGTgj-8jvhWjIQgGwvDF*BcEkC{<<()zXFlyU8P6FoM_iS zy#D+QijBxaW!%vQxCVcLf1aqoW5f1SNiAwe!_PqC zqEWof#9$m69?}PB1X0diw-a+jSP8imRPJG&>eg}J+Ku2oSSWjr1sSf1|3jlYeTe~% zpXhY}b_f&jHjDowDoiy<$e=>C=h=aO%etO(UH@U-eg|>m#f)i+&FY-PAU}$Y)9cGW z`vbOz{agx`u@>L=J4rKM(;qaSOw)f}Lx1vuWyIFOZ~?&1+Skjo!;usGTl})ke7TRh zEJKjuc%5K>C2+C5JaBU#|7FzBbIcI7_5jvfxfp}s1M(oX_N~`aFiq3xr-=E3@!0jyH;@dFR$h3UQ>nKkG%p*umMp;_rYU2Bt4?p3=?y&d-Mb|6J8#B5aP zT%!xdZm5oRMZg5W%tf;qn>wdPm-Ex=fizy4**ONR^%k#-25*m}_2>eg93!90{h*0# z=tDa&@88w;y*#-O``F)ccXe9#0@t(EpUywSPe1E@u`{n@*Nj(0FK8AkR>MLSR)F0> zJ*8Q{dh2|;FByZDuQ>{~p2xmbj6-3xCWo0HnGQT2BQF0z*RynypT|NopEQ^iejZIH z>sfW~HEc1_JpE4HBuk0Qs9oJPV;n0tYfFc1dzmdseiNP-<3M*R;_0?qzxMKZG)2f! z`HrBbjL+yWLbSH>@L()WJSzIhVGvQA4ynw4qe#+53iTT<236f$1Ll8 zwvy;tW!ZWGAIItZUi;F-8iZ<+lVkB3dW5qMDO`5xKdAeJZLC@WG$MKhV0p*M>b#xS zwklbnrBVEVeXFC^#V-$Ub=3Ge;p=`cQ)8blS4dNDE-)UEhj;N*SAq~DM>Rb3J6_|m ze?_!lhd_DKh&*rqEQpBmfy-8V(FD-8V-=IdSx4Vx78RN=lgOlI9f(0{8;DL~N%Y+O zm36zk(fy3fc~tohaRR~%GIP#p^Jhj2d_?qo_m3;|t&uA$hGcf5yfC>=?y=Q2OrO3C z*C|>4i~zv0xq`R-8_9~st-3?h;2S11E4t7K*(jH3`%<_DCocs`({_^@BqqZNuuqH} z%08snHgu0|2)K=@X;4)kVoa}V9Rj~hT+;|_`syp8&$OgL)p7(c5xpv5W21KaiQ(c! zEdZBfJbHD?>W2njMPo47*ddaQ(-~=vhb~O@?R8kxwZI9cLzA+q)RT!uOFH zs|h-qZt+J+oliabNUE}aiNniV@82gOiG5)bi{GJ+w7`xRV$Wf_C=|oYY2SUcJ;g4? z7<8+rnWM;(1l{ToB3|d>itdcLxSbgGLlC1;r?u=R!93ijiDreCygr!I(@+9nOUngXw_P4ty`Rl3~|m_<1{=91o4|2 z&JP)+D>)fIA$b&I;tuT)FsTl zRRVHhApypA`?h<+r#GLt`~HSgR`5y*>1VxPx8J>Y8G_>H{mLa7F#br&cqp&2{qTty z2=CYO+2yqDzC#k9Nd;HLGef2#Ia7aojjVz2FS&Zq5zjqBkrae#GG?1v!aWx=3)ib9 zt=H%2;p*~Md&K@)`FI^2dxJN9__qt(zhdZAxZy69ilru$i_9}4{Mk-$=Yc5|qq##O zcs2_b@3AV)XK5yYXw%_UiX8j%tw^+gn7n@gE0@ceF4Qx)Es%9w`PxEhmrsmB-H_+M*>$u)- zadWqa_)NtVMHVJq3fF}AztT#WkoT@6>hG2YaN0~8 zKWF$apRby$SPk++B#ieP^AsJZ&_Xe)X2MiXn`E;?5;q;&dXpbM+wTe}l49bm{V9&| zoc?!t{jE5&GuGY|rxKoYBG^Hf9+|qy@jatsBo2M71A4^5#wwQ=PT7bv`&Sl;%>8Yr z3PY_1p}URP%#;iesXAvmHNk1jXS(}b^{%T)X2VJ9g$gu9T`$7qtUsRp0syYc>7Jlm zX?JtU2Lki?nhCwF8q2XBo9EebBGoAGV`8@WCRa4|IwMHtRw;<>nkqu+Mrse~HA=(M zDleF_x|xCGrQoPEcui|_2&HN-I2!Yw&m;3gNxGRRUaj_q<@6;gzsDsjWr41vFjGDE*-f7Th zpPQ;~7nP(&o|KEOIp)(zqsZ#o{RijE3#)plHJ811TYK(wq%`uW>!kAMXWwuXUa*QZ zrqWhgf~e}?az&IgsV32O>d$bV4F67UQKD3mcv&vCnrG10$v?GcF!!elFd^3kxNoFE z1x}xMoM3CcXI%Fix!>cMJMQA9W%Z~(6>t<*WcWjK6TlT)m(X~h>eQZmS5pK=cIuTWx`^WtvDmqZDhHz`*sqf zh%57M?=HAthR379Mai{CSkEsd-B? zUTH_kFm3ByA~A*2r4CW{5A@jsIn_fIdu3a)1@#PUKf}%>zdc-$R#){NFO&@Ao6ZrvjmHhhP`>yepCjB{0 z%M-U>(WL{s^BQ?Q)QQfWI}vVb5f`nnEM(VB;cfKIlHyXv-0@%)aaykK?)vGn&u;lw zbX&g0i%cKLD2<2`M3&$#pA>_~qs65S^1FfiqQAHRT_l~^Iwvvem^p$Xa_>GrvODU1F< zy)4|K?5n>$UP;*BD|F_nnJmg(@VVIGs{5t0lMEt?Q6{B;-I8lp=d~d*>fH}FPckJl zCoh_^HMS$vN+W@6C}qw0P$-iUZh=PR_wa1{AMB2NuZxq2DMGVUrAJ9~7UN^ImGmu; zwKz@sx8U7>pOl(M>z4?4ha6#`mScth-75O4MWGj&Dc1;6a8=Lw4*}Zv$E!R@b)wP8?T!c zGcNX8TSF@e1-(6ozqM&I{i;(MAZ(r7nQR6=Uo{j{srjI}AUr!%8E+2f;&@AgktTD_ zcAoJ{e*ENT5a|gBhjvNqyU6|Qh!lD|@HTQ*11Ss^HB>BK3Uzy6o7fiQYXyF|FEtJFf=EjiqzNxiCU@?DYJ@K|#Ut z{Q!!U=kM`DjxbBSk8m0=>I3 z{gt>Edp?FuwSpq69@nJlliI7UL~i+s^msW`z&&X>@%rk5*XO7YGebj?*R)%sMlLZ! zQf9{31JKwPx@Jd&P*++?W*=px%j1h5ADMA2v@|{U1G2@s2USp@A*-5{Zd*!othUXofWrB%JkGt|Vu$EP0G+M6##A07}l#fBOM71-m zUs`feg>5+DXfab;;(`7?{QZF!5szcRCmFD6k#Og)F+zEaQ&qI}*m{+OyeXXZ2V4_? z98i>D7_CYe(6L6W8-`#1?5&Ifbr+9Sr1ev(oo;4`&E9GoRCsRE6DOO@qXX6_{?Gc} z3Vla~8Xm9bMDk#XbGffb|0X3k!u-S~>s}B#H?LtQUbD0DERt_YQ3mz>qnda>`+eRZt}^cbxRP z+y(bO@Bz3Xm05+x?G5;WQ^5==*I#Ru1W0d8A`^1IC&CENvyE13(0Sy-O|hc8pY=Z?T9V|NASB_Wv!)bjEtnCP9I58pgnSU84_F97ke(z){%nO zpFMsSNODhEq3BFz*IMSh=Va9Hs|M+gG@8f1cJ(0?{$yB&nVVID%O;@Mu6js(w+b5i zI6X%ELW)6c??#gEAk>*#B?cN$@k!4x#`YRJqIz2v8174qyFhcZ}O=Ut+ZBqR8^<|A^{3)RGdERtIGAPf1@MJTh8DvoNAU#=%ai+$0 zJNi)oAzQ(Y`I7s4^$$fGjoMo=K;|xeXYzq@AXlPNf)3oa!@>o3<$_9b#cja;RCrTL zdD?yv$w1sOr}{}Y9|_}hmqT7CYny-+8jt4hjta;c0voaRZ*(+@@D>@KoZNlK~VzM|%mO z7Un1}))6ftIpd_)*!SdL{6strYWDXFWoqbxlJ*KRQYDt>6_D?&KGwem$xGu&@aB?@ z%GFafSE(@s&o?W>=-1}nZCCyK{&P#VH%~lY|=<3md;?952JHB(oHlleShA+dvy&-L|> zL`3Qp`U9__j|WzaI<*Yt`>m1$mU9g?#1jezixVaX!T&{VAVa5Oa_$_fP$nWu+*?J; z;_E7)K+Q?`+O) zF&FzJ6*9SDcuxRhZ4;)e{EO5%gR|({q|In}xHzlxMr?&lV$rDCL2u(;ib zhwOy{>Q3Ky1OGNQCsXu?)xaw2^}@oxv2eE4B=NeG;uwcuT8JcC{|ed|$_c8Fi4U9G zf1V{b`OdlOp^?iwc7z9LETBp!H^~qt*B{s5{*+5vFTzivD5|jvXX# zMqGlyzYs)}C_SIwQLRz1`rF%fw7+Ac!^S>vn`wHUZ!=S?mhE=gV0cyCo7nfOJ64x6 zxIY%BTdwhFKsJf(`}!xauN3GCMBLV@1U%^-GeQ`ux_`)l`^@_p?iuBu zJ3sCTiUvJ2y63m!g1RfApE7Pp2pajWP-X`xUXBsCKY*Q5R01=i+jL~tx`ojKM^LAX z_rA|^qYNs$sy${H3ov_$LkH~nFt>&)>RrD6UKYp@R#X%U2gThY)+01nT_iIbRuvuH zFs;0cRX1RdzCwLJq4YQIoe(gS0LyFa?+E8d1iC_0jn)Za zskjgn_TYk%e&ahjWEgPNYUg-gE@fbs(`N8{2Ek^}1BQ@Zd-;?0FI&w9=Gle30SC_^ z4uqr9nt%qCBiOO7V!83D^O%Qg4xFp)VHhLO2Svj z7|b&oYxo|bWf&MTJj?7A>;xWApMq?8uGl-Zm!=`hDtNQp0V|TmN4z}~&HRPjbbY?H znxJFLO0QlF;a+%iM=eMPfv0Sw((~Qkcn?{O`t`49iDZ0zPgZ+DN5xb`zCniwSQhev zmplqm~aes{1j(cM>mMBsAOcfSem zN)xbh=Pwu^&tx%-e>a~@HrSr5x|xmt^N=`lFhe%JLRpl*`uz$_;{Jny*Z*7~M5Yfm z>;RhJ{dW@aplDxUKfuBMS13Z6ec++-XDFubf2RQtswH%A#(}pE=~nyxqr8v%_RD02 zQGW;?Ju0i}P=r#QtuCyUA^RAkvnLTu_AFh;^ue9V`U(ZWG^!kDz>!?B1F?3&+he5M zK(q?5TnYOOu?jXD!+EAd*-+D!p7`$Y0zaX2AdeLkhPhjvxrI0ppf_~S-*mi#Lp*>A zi43V}=$f1#ZN!$5hcqm}D87D@tbzgsl_{PeMb+Am3Bi9m6UY=TV3x2G#;%VX$9&J9 z!aw_1PKu>W|am0c8qkv_LKtF3j#AapY-z2E*-aefY@ z8t>eZ#Eb}ABo@vNU|8oPXeXwWDLQ} zAJ!lSHZ5yDVFNh+T*sy+-tGEqtsi7?{eb)=o?tsKQlQ>KXh)6ed-6*)&6h6IC6mc=~t2ohFI8s}z(Ipv!^Xr~_>zPbM+9R#k{B0c;<`BN)uXARp*b zT-k#1DX@ys!B_YHw3-i5i~usO3P#+U^d=Bq{fsMi+?gKhOJeUV)~@L(t{UL!?yD4t zQ1n-fJN_>EHH4=8Y&9hXJf4XE50hTg3n~n#(r!iP)79qFd55zv)sErtek@>(?TWB2 z2grSR&`fg$3I|Mdn)NDxQXwSVH;N?3g$7C@X#wl)AtHJ75V}~}xNG0r1Ir9Kg^xi! z#4LeXKYg4@X8{WctFqbITw@Ax9`F@aTcwRW$e>xJXsFd{qX!h@EWxcjX8Hb;JVVD%s?s!Sc1(LQ@*`X3_vkulOVn&|oHa2lrhi4M69Uj~`G(G7XXAk`g^pa2j7Z4NZoPeL?2#PI@F zEp_uKH1F_-D8~J)t!EMu&jIW0X3eoc9u)=lS%l#Uh%}_5gbGoh($N)DrYZGJZ>QrZ zEP>icN1Z6amYgLq^A=O_K;tTUB@s}#GgL+6r8?&TO~PkLy2=LEXkh3iP{w@DqyRr1 zUjfRWOoB?(Ki6@nWm!Nsk&B{u7=ZyLoFZ8i=wd|0fc~Jmp*>vWTo8%GMPMESATGp&K(h(}6P6EpVpiWi zWO^S)cpLk?7XmR5JYVwT2w!J7A_33O^xaaN32nr( z=91&hUiUKA^%3yi_7g;jg3aajm(n<+`Q3VRHP{4FJ*Ecp@nWr2kVmmhhbWuOIZbfL zBrtUAcvFP?0kg{8@`d-4MK+GjSO*PRoG|buhGE_7n_3Wi(8n57lqiCS;<+y+aU%9a z2>}}XI-j?_>`5Wu)}MnEy#7YGSE%x_!RI9g?{;~d7k#kF!+kYH6kGzG2l`x<_(`&-K(LXvPUn z{w!If>pb;6ppN=^*S@fS_7jA>M$qaZ=bg=AHU8N=o4Msr`*VQ544UO%u5>iVGe5i> zfCV3DR3spR;E>J4_0QH6b3dB_@k*V{VVcW4p-%jm3us6yAA(4Lwb~=b*xD;(f<`S+ zycAfyJRDS*s?W9rk>^yBsT-(5do_g%mBr27rNHZ$=XD7e^b($DnXEQV2m&VI=U?B<# z35!Cf05MSrTx9;)vrJ?n8|K0}Kg!2>blze^`6;%W*HN-2#5GL#BGI0oFAsX(IxBLpiXz19d&Oz|vb*9TVED5oljw&Byo(zso5SH<(`Z(+C zWQKd0Bacy&imT@yq`R#qc{=W#S4;IYCot-`tH0m3W)m9RrTDqp3~%~!`J z&{ne63z{c!I+~1ataFpi5??0Jo=Zy@||0*oX(> znbbfu9F}o)pf_>VM*jP7g%|g#Ru;r=7x(ZmLD1rYZLARll~?*z=cBEWTyu^pztOVH z?1;PfrVl(K%M?|gny|*(#8S&CpODlJuOc3AKkO-AofIbfh6y_-wiX(*R?DmR_2ba~a9*wCX~8E<@A7j#Wm2l~=38Z!>v$M)vAds7e7>)F>l z2TnaB2_9felKIh>er|vN9=J%GK9H-hjlTv|h$+xUb`S!yebOi!_`p>BUWU1O^vRoV zSZ;WyAhJuc94neS$qF~>2-{cH1G1arn|SFE{*h0Ka{AS~M`)iVuwcC!Md~G%+O^ge zrhOj_#!Ga}6b?agEX632e;n{jy$o8Flp!h}bccdBXOYbhGQ7_VKOTKgUI%S$tgvFa z>M;gjDte!uE`YofTdhtuJ_(@3Mas_DCyjjLlPM0@->+2ir14U&<5c8XeXh^UI*!7~ z?gf1TkZn@hut^6)(A#hh0fX;HD$pqyq*Uw`G1gAD&#RcFIVFH@_KMhWA1N|b_&0(X zb}eV7RbUr`rUNM-2evE$vwK#kJ$#`fp98CPeE{&vtB-Kgyj|Hld&=7Lt%_a46=cb? zeCr;UfD5j#`~cv8hVO+0fdOdkGR+C+M9qOD2*bCayx)7$7o`agl#2rhiyhQ3Guvd2 zvVxwnf%f0ZV=quBkYjyhJ9N+Y{oBM}OpV)yt9?l-fxL+RfS~$7#9{dXl$YiK+| zs_M66hUj@6tDSy-$H@d}H#4W9HVN&u1yE>?W>-)}$;J-((E)&U`raVWVU7Ir&n=)g zwZ!HI2wt65$s9<7PyYfmklIG+zh=M(t7^?as~gFW2m`I;_g3 zAQ{E7zz1ZrKq|vB5h1wu0ki3;*bHlNpiiv^X#48q98~Ps!0vPPCv#L`lz=di!=Q#q zCk=$)(+G;&N_#2_{9`ajwGE>1+G~&trff`AedIp+A=(dM*fKKB>tqU+Lz_Gd`K?1B zG6bRp+pP#;JFp9UV~>~KKf}hG&ZeNtTJNDRtG4+T=6VMA5dY&9!4o_>MF<_*S>3#Q zZ}W9Pb$;*od0ESOk9Z^r?|8{4he6YGosaS)R{TM0)BY$peL(t^X>Z?9E@J!scz>~W zG@>vF!K@Fyx%p}kL}I$v4{NRV#BGfgdIcZgDxd;E^{ltU3#RfAfZ z9YI(S+yLQd6GSSZEC{3?apm28tOpb{X^zVGt0XnC49*@e#WLa6*v?JEI?h%>oK==) zqM+-(58{|)pQ|nX@zkg6zhSM@#=$rzCa9v2Y0!MQbNqz^sA}X#I>RYn_Q@ljPd^J6 z;evtUqza?;WC;3rCnXyMK44$N*K;*UT7Kh`rHIS5f0G89&`KTlZbY<4Oe~w(70*F; zE<4rFH`vJGaMTj8RQI>uZz8gCyV@z!-96-93PMRTw7UiN?DgP@`t({D5Qr$HCR~1a zF5*LCl>9&2o$0wVT~p=l&hlOkAC|3L{E)6xbZoniuh~mea4m&?h6*)bfHg!rk7u}V z(kk=^pnQ6Ud$(iA;|B7?6~BIiDRIGmr_$!zv9I&kNqv@D3cjCZFRqBp()A}Z8C(U?#eMG=B3%|w1i#`oon`3aAi zy=t&uA4suNHA5->$odMweHYvy*Uu`rEEadu=i8XZAQg}BecKvPTku{Q;ts-=-fH%m ze$dLuqVKs6<>9M%nxlxzXv@Iswby*w2R6=Z@ynBY0zR(?e|r07#ODTpuOcB6*H&J8v3FuP>NS)AlBO1LlJmHDEWonkCGoOz^&PGV+6Jng>H8{L6Df$ ziaj1kh8vQ~>*w=O*cbfFr69;v-gRdIbQo@nqHGzk2Q&WmQ<9|ll9Y_rDh7T)z;biB zCdf`DHM;K^kUgsPs7bOsR=Cs$G?dj&;BT*uK-n} zRf>rP%*OH^$C#d|stDFVq)FVsRoF@Xwbf*Kmaq;gA=oTY(iXRJ2OLD3mkzTCllQhk zsgM)=+M~gP6mTVwWK={3ynzCx1yC16V(^=i{6gvn8Y(_8*3Ay9;RnxR6^7T9m0r%wYy=T9YAoKfLnLEtB%M1ZR$t_Z(Hp5yFD81lh4IXZNJ zsew@usk?GQ&m)+}F9FmCH5_Ya!eyqBNRUI$DX~e+sY)y@wsNkc#atF+fOU}Dc$U8V z%(Q9OO}#Z)kyBt{S;}A!QsVam6f=&S8Iq2lMpNBV5$Vu-p!m9!bRFH~K~E?)b3{f% zq@H^JF&Nreg_30UhI7qBs>}vYJTuni3A34*hDg#(s( z)p^c!D>$C{U-0i@eAZB##5umAqU-DMI-eZ)__m-ggG(XZZF6reBr#S)t2Md6DJL=4 zHd){M466DC7mpcAGX8LPD$RLX$}x(b=L6m>#%5VxerI#!f^TA`$3jm->$sZ~5u|_V zd#G_Fr_J`>)`4H*eY$r^l3$qp94^vnT1#Hi(kYwvp95zXdQKkwEaHX8?^y;?+xnHq zZnm=yY`PgWXnDe!(qnX$dSgW`M8s2vZgV_ZbtlaFPEvAwzfNXWz9)9{f&e1T{qwMw zy2gDri($&aJ^og>nArvU>EUV%mHLxutCe4|3eM@sLmXyk**%eHZSkpE3+gGgQpZSbajR_S0^Xm zcBa{L@_2S$`IJ=0L&|c*6Tn+7!pFxpC)$OAbizozC_Kxwo8=SUV}v{xGb*8+G(1}i zZp+kNl`evP$<*eQyCtj(eeq*f6J4}3wbiGlKPo>&B3@#;Zf_0dwMER#thwiV){9a6 z8ksvYUWDTJb}cLPs-i_|u))hU?9zmv?yc9WDG6lwT>fD{TiUNk-%=L%Ih;K9Yo4|& z4kYruDNq+?rpPZ>^PnDf>QIVtc2f5PL)1sLga``wrI9R!LK&Pq(BZhtT1Lu3n9NvE z*3;yl4MI^7<%{qS+r4<>rMmQ%!N##!gMQwE=VW>a=T(>?jxO9~T5S0;cp;S)JRrso zF=dFas0fpMat{?6+(_9*=O0AyK#f54>vWcY9IyA7U~oBMs=8ar`!HlRbcS znli==ry(Q|f5>X<-R`EzkWHlAVMT_PQxBWGvsiwkSXY&Zqrk^%)P!?yAI%W`x~Pn? zEiBmfY+J0+#{dt>0IQ0W3TehNf3NdG<%$u zzMkdwt^GP&h|3VNgb8c*gwPuLK;(_&A= zOH?S>Kj0A>|DW34I;yI*-5XX!N~AlKl9Ep87LZyhZ&_PVG$y}@-HW@el z)agj3Ld2RF74f6IuYjB@xMx)ndzMxzo?*=puDmR2m|q=-f_x{W+xz1I^VNvV8qPya zPd&+1_2JAUqgY#&DDHe&O(9)k7Il~3Dl+}8;!FUL1!uZwhp&yc1YhdOJDBp`eU@Gk zdQF{2BZSW1&q`fcf9A{0SN5jMc*X+lBs=<#pC(-7*p+SS(V-1ruop$AQGB?~Ur+|M zxuJ{&u)%H%ER$h8*U{~AKtVNCHLmok_?XuPqs8EH{J12Rd5yakXWBzY7e_D)UiZfq zN2e;ie$_O^6)@<~qqP`7^2V-_AK(_S%{A{-+4DQi_w@Yy5F4L*Qo2R`ez`@3FGI zSiKful}23K^V;ia*Y`TB&FRN%FKm^X@cm_4H{w^Qzq|xMTeovThe`IPD#zsytB#(B zr-Y>4Km5Cu(>F#8mDf9-7}{IgSq%>?O8Fiu>w1ew8IqQFNJzPsi}OB`Rn{X3uKLL_ zbxOw308)I%B1;~^JHRSkr`TH_`e=|KM{_tGh+nS0Wc4ABl3^D{@zer}Ep=j^x?H|ygg$NPpAm|^^cnZJw3c05WRc(NY+X8`yBY3_&G8K$dN$)JoED5kM1}a2cTEe7C(V)H>RM!P_6es^&Q&k_%MtRAbt{{FEBizI@4k1S|Z0$km-u+ z%kA%;^wNHnVO=kI|Dx@X%v{GvZ!jK#hbv{a=Hhs8G0uQVCb~6XI8TW4&8tkJv6i;# zyr65n70Zy6@=TidPgz?Ruspl7{J`w%9GGB71HL>9_Q5c7|2(|E1LTnH7WZ1z3sm-L z*tdqK23cNj6CE>W7G$1$-BfQ)Ri9xb3}(1m`dYvRjU-%Fk?Mi}b5u6-^PBG6ogPki z11zq3?=B7uyk=g(>Q!o5kvr*>_j%jdjn7UJm-fZ4Df;>xe}Vt+<^+Z2p1ZWul!C#6 zrJeRIhN1uAW#5Kxc>krB5@&+r1Lx@NxN0oW`%M?j27!o za736KQeIf5KO$emQlL=HKTEF6{Yb=!TVnu_o{(g5;0ncHlWh8HIaCHKESXi;P8;1> zuroPh&OA2_YAkIST%W%zUzbjApV65gB6>?;W%`@x!mW4pdzAu&WODajZTy-hAzn7Y zQTQ>flP14$A_5NU%3$DQzNl&4dqhcVx#w&OTu*JK>%0t6=*x5Q_h;URSbgi~pIkkp z=b+!*`qBEq+N_p{5rzAw{+*1KIWp|0bk(ByjoW2iwvl~#_5oa*y2|O!de8(u$KDWa zh#DZoeeL8X_B>{he%OY4@9(+1`?@ps**6yzOLhsrLmoN<)$}aU%Oew+LyN~lcZ+ea zpwv+|r8nQ%R-T5n7z?i@x2{ehhH!*2v)hq>bBUcKr~iK5kd=nRrI|F=DpOZK8xTk0 zXBm3d?T0w0HK8feisv%#AB(VObUI%=m79if)SlGe5QKNU2kb)=nWWOF;pf^_k4l2pqMQBI$UsP zK+-EEY<8@|Moho_GzSc~_>7Fm-8OI1B;VxFpaKAslGi-QUxOO!g5Kk~1IIDw!6HUj zP{YT^@mJ+p177EfdA<)c*29^{={In)Nf*EODcwk)ufrmNI=)ZZqb0qCjo9}|Ku|VJ zoq7v4#_LfeFX`G)DQtD701Y0HUN;3azaXPc9a_IhuAGHrha?M&XRhHvZkVY+NIW9Kv_ zWym$D@qjXl{*Y%ky6fbmrG_6}Dg*k`%eGccE~As5ojKAE4r#3P4t=I8!@%uwJKqXb zKMy|G~C#8p7eqg!9%|90s7P|9-@n%T8c+AQFG!usA2E5j zfcr$;qZz>Hx2jjxh(fHmfo!Sk`Zy5lxasI#AuF+!iBA;6K$5ZXu;W>^=?L@PCcaDc zQ9vY}x(qhF&}7|t#^LZZRl=)w-(55VYe2wegeV}IxKw2bc&82Tc@rX5Pc*&ne%K7X zx~&GJ#DpHNrpJUGzugFQC&Ms!%~S)V=&e-p^K;C9r~dmA3lcV(Gx~xP_IK^o{^O#j-_Su5m7pdgvBAXU(ES!6oZt5y`N3gD{-nr`)Cz@blHJ{AL!_9Wuu2M z4$K3Bbz^BMa1`*?kI&4<=4CKxEjJagynx)Qq~+8@Fz#+|@ZgS6if!l|umvd4iU!~^ zNu$BfAd%7$f?ZaAmC{-+)l)RN-aoCw${u@7N{_>^y7!mWCzGyfY8qyzAAHRk>8QC7 zvZ1GHrV=E1!a^6Yqx>+@K#50C)fo*iL9^V7$IE0O-80E3GwXhYI(8-enu{RkCi6)M zZ}3p?(F^VO%~pH0o{qPqU}6N$nOF8*>{iJJ6`@B*Q2?cA5ASQ|*fUb)1mrChd+Y$N zqxk(MsnErN=> zD%sv$lA4uT{RjuKBN<#K0%4dmkBAo!!xN=rf*B^&WQG%Oy4X-tf@(Y&fZt5tD5LLM zZ&af}OWYcca+yF4-lh9?L+UCk39N7DMjlS&s^BL`8P1f~0x$3CmSHKhhTy-F^f}V@ z%NIjMZ18c^(mxZpKb$A)U3`Hg+=s@;)d%#B;rUtZf79z zUjn?=@>9A@^}t=<=I4&qi~zNzt{42y(8%b-=X`TH33kQOu=4s_YIOOs(W0Hi^{S={ zLFv!;3g7R5zIYCX^yQ@c)ZOtaJC@gDox&*ATh*v+^$Z8a9JM5&OtIyQwcj3bNnFyF zv1T|=gsftHD3oq3ekOm3nlmE(+2yKuCjpFYOX}^Jr<@KX91+L0#W0&t^HZ_}=@1pO zB5ngS@h$92C>(_@vT(!#%Gos?vI2ZJo{JqojzP~7U~R#VIUSr-7@gQ63cO&MTLLpL zxyXF1R-truU2V8%xW=>oLzvI%@~Q;%Fa(4xR)cXb&IL0N{&`=-ENUl%VKectmX-xSaz;7pLV7^Zs6U?X%9A6k-xSM^%ukb0(AJ&usVHZd#7VMcqU z88PglLYnb+@&ORdM8*ERI{>~j#X9Fvf6Oba2mqKq#Tc9^J^DHfxoRak3>Xn}zvL(_ zWF3F`1;HKHYu7*6gJOU(%m-l6a!6H~m|O)#N+R#wS}Yue<-9FDBbX2E3W#bT;&{Zl?4&Xd1pZ5eFZvlgl(INi#oY&Zv4r}0h^AG6N6(ApwIGO#B+ z1{6r1M%?JmOAZnVh@2P^UIOKSHRn@4nKtz{P*;$Cdq<&ofK3v9{KjMQL}*e{R5=(py-IqK8T;TJemQ%fk~%8 zHx4@AF3^51FYha7bP_W&|1%@c`IiPUaL}#*_g)Y5bouwkt6e};FasVzc5qMt8?!eE zZup$$lqmVFBORh;oIRe8}H`KF!Z7Ndl$YLwu@ok)NZ=AQQ-mnBhg%A+i)%{Son7 z9`TPRS5ySObL(Ycik~)HzDPjBGxc#x4h_uJo5DM#wh%OQCreD#%0^X7!}o1m(~5;mdydW#$Ug zM=!2QeP2Sinm+DTLOUc#SI{I`q3$WHM8BsgACc+J8UEAXp)c0#JQPsugLrREQ@q|J zyn!GKC8*Bl0sbLaPwxiW>zeDzFxxJ*Ay_=}2$*;rI{K**g+j8+XJsc)+>KLe_C}gN z9kxqXh`w`MRS`MOVB7Zh<_Irsqt=xxtyl0<7=%{Ji3_`B2SMFh7X0U<@ut@oS{HyQ_LkV=@96nJtTb_ZG4{P@{hp)vcc^$iBFQ(+a%V@Hjt zM4Ss^c+DVY-I?>{=&Xv2TcW-OTwb@G`aV{_ImA+Uj zHDmq%ey-+ei=G=7Y?W{tiX-Rev6O#0&}p>8pjlI1>`%E^_Xzek)=yQy8eviMNB=ow z+oYRHP(jKsY2CkRmL5}|@98UD>wVy7!Z7)%tq;RQV5M#J$05w^;H=(iH32{KqW@K!)%!B|Tj>1zM1=t&^ZT{3yR_)m4~2EF4~tj8CD6lBmxi1Wz)&^xY$yKnJ&d1ls*+!X@zX?ECBO}ci}~k6AVS0v z#7t2L*X>%nyl)QIp%S?a*8!)*48yb{E5bM;$ExEON8suyp&9!NS>22h|7w$)lJK2_^SpN7ktzBt>LLtTEYA5xs4hkGM&n9yM8`WCp|}$GlmqPl8dO$cdJAy+kDe&O?x08*eiW>(r+$epTCe0E_C3p)_GA`&j_Eob62Z66bc1~KcDJ`5(fW) z$mzlC#grL3Ao2+A_sad<<1o*c$PU8%;X(wO1wnmR+@^fo_v_N|VecpfIp$y=V!H-e zW!P_taD0;R%=B(Pm|yj!5({uO}K=Qe( zX9pps$|5aRp6m$$L4XR#*4rs8UYdCP2zG+N#_YaYnCt!& z7grfs3XMM)Ad!vkCP+QtJURsMR4NZIA$F9sJghGT^!WCebJ*IF$Q`N?%ge8nI-Db} z+Z|(0vX6N@`X9b4w3l&YoCY;jtr+;DOU-tEofRNc>4GI}9}lrUJs@YH7laM~)%N9% ziNh-|3%M|ak2QuK@ICDB>y2>8s+Kacxfy{i?LlyT0v?LBTmI=sxSju0tm2q(aXECb zZ-iF_QVALTt(N|7`DTQ$Fn)MLi~O!0Hrrpr5AA&*_{X!jq8ON@}9vi*!hwbo) zgj<7b*E0-#NI6I%0TYXmidqp<5GU_nGY{@r3vz|GCjCiN8o?}+rn|;w!ks(|2KI`O zcav_0cJ!4{L&RxVH>N?-NV(g(f#~VilK%GoKnJVOhpP7<^24il0da>vO#O%x_*d8$m*rCA7T*u}rg%a1?~F z;^|H3$5;wmoGvZcES;dHv9g=2u+g9d<(qbqfuO^6SabOArvom{HDg|_+}3ma1-1s9 z_!m|{t;2jYO8x1KS2-9^xn@gznye`$7Yg zrd=js5i9PTam_=n1E^Ww&+C>LPZncqymO=pn{Ijt&d=Kw)@scW9>G~* zpWwk|L1_T-J{49yl!_UwEDX$0bcV+G;aO5BL00NgVI%@qLTH+6>BZpRo1jkZAAJsh z9wn{(d)pLm$Z+9ZDde$`ycs3Uex8(VT_T&dX}DEis({XRxGcwO(-!kfUZ@r`{)SA- z4}sdrVzpda?JQa|ll=um)T~Xxhm^o8r9*iX_bZ+4-M)L;7%to~@zGgG9&5-m!N|gs zs<>umB#q`lhAgz+T_w)ONF1qDl{VK&DF45C;SBH_c}?1WJb2%qs?iyQtehx1w584E z&yFU7En?e{Y{|>sJ7JTn&XWisF0Y~Cr>^?R3lfpikE>rx9t{7e)La~D=vFkJY-{1P z08wAV?yCV5%%rRt-NRPUhrwHxAysfJJ5A5?Sigp#_1?=Ikp$EC9ySMDq_puZCBEoZ z_ZkGdlddyBoxkHhjMj|_zQc~@%Nd^BVd1t7uzE$s%Ni52^X~xq8z1X{DpgnVXo=B3 zIMfZ5qxj;=2she>O$nmN8_|5@=CU5S{9J6~Ud5Y@dJLN+#E6s2V5>QYtz{f`#dD5u z@O-#oN2TqMxFIQg4JE`;A-oC1uGuTy8q5QKWRbA*o^K>m$Y(9}k@z0su?em1#{l;& zT|6_#auQ4^@`xL8s>%saYqX>Onp8ODviqPNw)Yubmn8w1T+H63P?4F>-iU^FeK1?JLIj1y>y#AKJC|klp%69@eQu2Rn~N zv!}fDaI;(ER@FJok^65`6>ZOYZh?e0NaT{=W;kp%Ixg73$AE32Ed*lX_b1}V+agU( zm1v+2VUXet>vsOA|GGY+V1}Rg)8qsr8)v8cjqB*@4POIgH5`D2h- z5gsZ{6r2gIS|=j$`<+wzv%NU$5CcJ)EPaXS{Jo*7?hd)KOBU((c&q%>Xrtk`qga-t z+nOE{7~$aaT=M8%^Zw3x!e-pN~(0De}Tmjem`|jRtx_x>#Bc|7?U$R|&@e(`)o zmu2&yI$%kZdeR_W-vGXC6${iYo+3V zI-wfw07ie9#JXRs6JKV;xwYum-^FCi=qB2%%|#IP=- zgzHgCkHuorWDO6H3eIHBD_4bfb^zVwW+FWX8WiM7%Mc!$AYglY$wuosmGf3JCiR{( z;o~u7PSlAf#pGnZ>YfY114J_Wb3quIdftN#bnjw=s<)nSIH$-RtAKcTsa(P9iO1S^)nfZ; zPQ}K3NVqAS%LDCe(a&|u3zrn>dbe%ao-1B*pPvz_Xmh4YRq)Xm?LUD4N&-<_*YEZ{ zBUUUKuTt93Totji_*ZV)e7>%|nHj<5gsHi5@a5T8D-pM*U7o; z#7q%YF_jx?3?vHnYcrlv)_Y}%RcS+AbiQV_Hs<*@}~hU2pG%;$>Xrxv-SHzWW; zD=OM79=;)!_WoxtKIaqLZM*{rH&rMK`4+h)m`!F%nw;LUyayI(dXI&CtJi8zI_X37 zrf$}BAnF)Hj6dK#7`&!GSKNO8+1_Rty@e(%e%wP~#qMS3&dYS&I9b|KZ3XU{K^fWf zg%!8%H&4z^-9)hBV`K4aFFfbGTG1CL@eTToH-HXMCgsHp`b^z8m9J1zyOV6JkF~ z0taoY1jcnHj)L|&dH1i6UhD$h0gV&Uc>|KT&tI$!vzVscy=!6FW}Wg}KDvI@drKzx zZQN&%O4-@#KhASWL@Z|>ozTaZ=ob5LgVVwc6CV;SS<|XM`-D8ngcwLpi@NEGix=3A zTdCY|H`Ow}0HUR3CTb>M9r+U^;ZM5&-fX#6IB$?fBAFQC$ z9{2sOiY|`*0;nMO<~IMIOT&dS_?mP6*r!nJ1KKpuI1I0cWbaz(-8oUqR|+*`Ej7vy+RYs_(%tYyPm%+b>@@)ds2;wL?~4=%MvRpYRo=lo=n7*=WrfHYtAxmhjvo*Xz~W)c6d>)MkZaqW-OTSW z`%IW@@|v2u#GW<;p(%E^?OytGzj4lsRy;qwwZA@bN1LOZ<#rDtrNBMZPnLN~a~6X3 zgG!Q)tTK~4*_2YEaFa0m7?XCPdyFpU%xsdOUZkxIZChv+`V1+9ImqsvE7~%acv`$B zWk1#_jdn-`)oKH}ig2UF{EbI5Z8!v_B)}ow|D~@3Zj)VT7`2rUn_2BZ1q7JrhA#dE znn}?rS;J3nd6m(GHIRwR4WnmLrRgqg-y8nQq&z>A$;uqeh0`u{_e-u?5_5`}d-WN@ zb#N&U(zcTABPEU%M3nD90o()aGy^+Y*pWjF65VY70&gV;0vociIasp9&>hm{;A4Mr}9uT9@ngWWskG5!N+ zQUh!z5r;_8^G^hOg!ItaSFP)q*zNq9crfwn$01N;zxCsxZ?erC@9jof;j8}UUXnwZ zc?TQ3BR3NM3`WQHJ-!mtwyIk(_jM9hiR8;ppqlMP68~wF;@$5jhLI*qtj1igt5D|^ z6KhxP2qk2+=Xd>dZv=9FvwFB9@xmkVir3t^#p?Gqr>1D!M$Hl)ZhJ%%)PP|uk}IcD zz01rK=#R_%j^AoV?KC1XO*?hw1a;nOmwi<;u^nMYsl9YC(~#JU^|AhO<1|0r?(B-! zTG>b$KhY0;w_#1iu|=xl#_)Eb%ib@R&#~y`F!Tn~c5NN|o}KJFq&(W384G^gnjok* zovMBrRLOa!oMEn~qt_e)FAJ3pG(wnH(lep)&iL~mzb+;_tKTO)Rz=F325geq-2^g) z25x@-C}{&U#ZKcT5{JP0W8aV_nVPa+wlE4F&bgI-aS$Dx5DgE_`F; z7yW`|XNtQ=ejyJyD-i|q_9>voMjuOUHC_1U+L4^-NoH?oAgalj`V)pjB7SEE=n>ce z(wHU`-(u`GW+lYP;a}>4Gr)XY2YdAp*(fMMg!^FLnQ?Y?vv>pZIVn&pr+2s%;H~(f z4#<=!=iO|i&Y6BCU51Ev4?lcw~$Mv2|ues%~+prX1`4{7(+N3WaQj~+bt ziZWVfAKAWF>=t)RJUH`pu}k&UOs!xZ%#MD0vDj&IoKhjbTyG2_zcliLEKS7)E7N3f zNo_>nG#1D}Cd6MB#JAHlm+H89lbyOAN2{K;YsvXh>qfUOZM5FUmoh z;`wfB50evOr(9$O6zkQP2*B#g#4?FP&{TNG$SmZ{Q7MQ zw9y}Ub<&`h%~icP%<>Ew<4hHA`FDimq{Q8AiibI|ZW6zJe+cu{oHa$>C~!o{2~BYR zu2=$~fH=jKsEU>7?i3f$fv@sR7!2PSoDXwTy&hX48M?N6YpT`FMs6)Rnk&!Q4v8Ic zh!t&oHvqSdkM{R=md1RE)E%4fU#`cX63&@@q}Vg-K6yQ5qH;IxRTx5X(BYt6HdtrS zd0UcJw!|crcERUAc*JafhD8HmcH*}zV@@j0-W^mwkS?36Wg;sWne#M)~ zXF9^;o%*}xG%ptHwXv^3RW;P!|5Hv?!e{h?g?%&9+h6CC@xvi<=}>+QX%$QbCE`gA z)d}_BWrx(skkAdXx$E4-ENOm;?68F z!6sX?#XgE5qDZu31WEtq4JR_Sg7*{4LY+&EV$k{4OlJj+Pf3*hOk0=} zbW0PnE31mbAvc2sM%}K+(g)Six{bXzD;p_Tuh0-hnQB{qFk1nzxmO7Yf=;Cv5+xWnTrnrK)QEEeC52-hdx4a5a)(-Snw zi*?-gm3y*-QdO!g zlJZoFAJ|BYgEdrw(aaIZWAuZzPLqAJ|ctrZL?+;53wyyQbv|`TZ?qj zr5gsSlo)^5DaJKceg4oB)()1jq;H_82l?IVIpHL=5=l49CcpC};jvFmGO*S@g&hLq zX$2TQ$=%h|UsOhq+DS7P`h>W&Fd^g9B(C^w-MB!hyf)^6ZBMrw4@btmk@2{l-byyU zgD4Bx3RJi5gARm01e+(|`Pqnd>|_(CHFK$#e}F`_`VbrVmHlLKj-F^$78*WFr8lfs z@T2`|t*|PoT2~J$O&WbO>+mP2T1(B~eB3ws&C`*Us?iaYfv~jf{k_4SQ2%q&!#DtQ zV)n|Z`8Fnl>g@|0a$wk}U$J4z*RlLSBzrFYQSF7qA~pKL$G2>k$BsRB=axTK^it^P zYrOU35p#2-kEr(<>(>Iklt*6u4$ z^Tn;@PM%g3=!O-xI{ltDOHQ=BI<+gG@UvTf`CGo$Rsh1L_@T=(ql(^eUD~b@5VIXv zY}73wtN2wCDZf$k+tKq!&h|AkO_IIO6+E1Ze8xOCnd1FkZL`I{006a9{pa%YakNK+ zFD63FDPJ)EVjwLyzc%+GKV7YFfrG=a-G#Z?mF6j5J;t7jCGGiwGzNFW`z4;Us=4v! z-av$@+eG_~fgWd47Jn%1#-;)d-o%b!a~6+$N^pJn`M%(iWDjDit-NUVl~f%6XUe_d zVF?GS8z&`qN>bI3XAkX5eww#g0KsLO!8c4*_V$0Mv}2YD2t*aOP?Aw z6Adb&+Vl0t1U+}IrTLeMdQ?fRAZ7#avarMNZ`7!rK^npQMzT<;99#ToDQhF*)>mcn z>~g@q%l?Pi1JRr+KJWEanD&CB%GP)oKWz`* zmFoTW-no?{-U?YH(rf79+kdWng2|Pkqhwx5K+rs2lekk*vb`;J!@%zM-P+!%qJEgF zHp3zD{&DWrDBRgW`#tWx8&C~Ro`3Hfy8M>V#q=0%p6-E6?)Ao~kHZ6z+V2B?!}By- zkt_hsMehY5FgPs*JvJB^(tT}>{H4EYlV>j=SAPZ`$!~VKzHj)*KEo43lGIO#t=7De z8d&IZ>Q(hmllrQ_G2j+!44Xko^Xqtpk!?k*%o{0!LX)L=kxD|r*>KK6gh=g~-u+>u z2ug!T1iU+QgVj5+B5m{?v>3h7idPb<9=G$r`F!ps6>{O||8?P!{uI{V=sTE1kVm~K z7hhS8=RpISzG}b9@rOZaq9!ZOQ(utBI4WL9dG2zac@sbu7!2XNL|$uPDXy@}x3IS( zLt0qFC-y4`QWmMDjF6gDP#R(BiOgIS0b2Wk_Zt++X;BP}?t!3r*dqdDbRYDU%{<)` zYJubb!3+36PCL>FEAhlC!fRKQGg#kH(|yI~y(<`i8;OWX5tI#d$yUfSE?nAoD6k=@ z0-&Dv+;2A~>&OdFVI(u$X>uHEm)}?)?#$a>Iz&1U3~GDR5@#Vh+U!83py!uTU7=;* z1%If+IG<+}vRx?AiTRs*Lmk=es}|U{0E0N^-TM+3?R`h?!wb_`3ZoCv$wEP9^d4#s zjS-B8;)$dhgYvhbj=Vj81SrVOPyS^UM(dDaz-Gb(i0>c~1<-B3Ga-ccUh}w21}nwm zLNi4cm($}z{YxI;^XmgK#!JD=3=m7^5akBUy+}{5J_RxKRZ-H|#H<}qZDnpf7=>D^ zrR1_oWQ26_He0ez8fb&6@i*3Pc)??GCVcg(MV-VGpQ&%R6@|Qgd%Kf>_xxTy1H5wu zJbp~W<xLFAf3+X=99DQ2+_6_p#upJ`ca~7k0AZ_gSLxjT%PA6n%r3tWa!|hiQgYO zZ3Rdp;TAQU7SZ5k*0yQp16$}atgyK+A4ktyV4+vh5Kb1#)Vi&+BQ4L;PFv@|05Qo^ zWb4fi(2zWohZGmil_VuZQBhG21&zEm2{!PHE(x$3XcZ7yn$`pDuZdZbsWP%g2PDgg z3TI53GTk=fjA6UKzz#_V^-Cj#)eW^5bMq1k)@vX_MFzp}0;*a8t?7EX#6@tiKyjF5 zgwh(JGJ){EoH&m_>*uf!n9pS_0kTar+1BL#-MqWhyd6jEkU9jFjTfE+H)#g~^ur9E zV;zaz7h!;&nG{PGH}0k1)OJ2O4$X_l8QL_q$fc(6oe;FrP~ZdWG(1>f1YvK#E>dX? zc~B8yLH=MmxIf0qc_Q`zFCQI1!Zz~oseT_ql2R1da2aBEFS1#Jrh^Y42|E1HW8`z5&JV^dp#j91S`O4ut2Lrf5Md)I5TVPPZZg&;E*=kU5V`dt>y^ z&op+~qGkuZm#%ShBVCSi?N#&F7c4&JMsIK+KH<=O9r4T9L5k-p2=>1@zqmUN3@*oN z78c$v;`_J#UhnC_Vy^smsQ&qln)&m#GA-NpB!9-ddIbiUuS}EpyoLU}H2uwKN-*A5 zW93%2p=^6?&_49f#r(abKfg(+{at2<(jBHf1X$nCEr2X*sH$0aX!Ld|V6{#lHwb>L zYo8K!%?2ViQjxwrBfhWYpLOwfb^Q6wPVUe1F_-3rZn4*eB9JN#2?p;GR40D}s?!pA zlGR=zu;Ve{f=5(>IS_yRfAu!nhsA7$pb_{pIsWapKaf@bpRD-buLy)kAWZ&$^v@Mk zrr{ZR(cqN41r6WY8x)8_90sd%D6Xq#qMBg0$bsG5u?Gke#@45o zof~)Mej>t@f!8+weKP**?=5MNDM&^E#8u0NiAzEE?weD@@06>VEP#AI?hyZjY5)5z z1yO$o#WJKIBWfmSf*B!rE|ys>(WA4A$qb=$$&};&Dv|!zs4A!fzZ7jEtqT<8f4jH; z`nv@Yc5%dTg#721!;=9eW@z*)l>9T}|Jx+{dyPQ~@b-F4`gs5OWfBoUz!iMY>-+qV zmHDs1z>0vkFI6h1`Oh!2IzbB)evDRr^lt75|CX5YEgx$<|z{r9^ftp{%(tPnH*?=SovCFy9;qifHR zM}0w{?f?DbUy9832&NwT|NR>LAAbgz5qX{5bOjp!d9nQe-uUUWa{)hQqgr?`7{Rl! O&nYXY%NNU<2K*oKx$}tt literal 0 HcmV?d00001 diff --git a/applications/block_encoding/checkerboard.png b/applications/block_encoding/checkerboard.png new file mode 100644 index 0000000000000000000000000000000000000000..5c089470485383b89da42ddbc3d4ad8ce3bfa1db GIT binary patch literal 82234 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 Mzm&N4c)Viw?+C~hW&i*H literal 0 HcmV?d00001 diff --git a/applications/block_encoding/checkerboard_BE_N8.qmod b/applications/block_encoding/checkerboard_BE_N8.qmod new file mode 100644 index 000000000..0152906ff --- /dev/null +++ b/applications/block_encoding/checkerboard_BE_N8.qmod @@ -0,0 +1,45 @@ +qfunc array_swap(j: qnum, k: qnum) { + z1: qbit[]; + z2: qbit[]; + j -> z1; + k -> z2; + repeat (i: z1.len) { + SWAP(z1[i], z2[i]); + } + z1 -> j; + z2 -> k; +} + +qfunc oracle_d(s: qnum, data: qnum, TM: real[]) { + repeat (i: TM::len) { + control (s == i) { + RX(2 * acos(TM[i]), data); + } + } +} + +qfunc checkerboard_BE(data: qnum, s: qnum, j: qnum) { + s0: qnum<1, False, 0>; + s1: qnum<2, False, 0>; + j0: qnum<2, False, 0>; + j1: qnum<1, False, 0>; + s -> {s0, s1}; + j -> {j0, j1}; + array_swap(s1, j0); + CX(s0, j1); + oracle_d(s0, data, [(-0.69), (-0.34)]); + {s0, s1} -> s; + {j0, j1} -> j; +} + +qfunc main(output data: qnum, output s: qnum, output j: qnum) { + allocate(3, s); + allocate(3, j); + allocate(1, data); + apply_to_all(H, j); + within { + apply_to_all(H, s); + } apply { + checkerboard_BE(data, s, j); + } +} diff --git a/applications/block_encoding/checkerboard_BE_N8.synthesis_options.json b/applications/block_encoding/checkerboard_BE_N8.synthesis_options.json new file mode 100644 index 000000000..0538cc4e6 --- /dev/null +++ b/applications/block_encoding/checkerboard_BE_N8.synthesis_options.json @@ -0,0 +1,45 @@ +{ + "constraints": { + "max_gate_count": {}, + "max_width": 10, + "optimization_parameter": "depth" + }, + "preferences": { + "custom_hardware_settings": { + "basis_gates": [ + "z", + "rz", + "u", + "u2", + "sx", + "cx", + "cz", + "cy", + "y", + "tdg", + "r", + "rx", + "sdg", + "t", + "x", + "s", + "u1", + "ry", + "p", + "id", + "sxdg", + "h" + ], + "is_symmetric_connectivity": true + }, + "debug_mode": true, + "machine_precision": 8, + "optimization_level": 3, + "output_format": ["qasm"], + "pretty_qasm": true, + "random_seed": 4262529357, + "synthesize_all_separately": false, + "timeout_seconds": 1500, + "transpilation_option": "auto optimize" + } +} diff --git a/applications/block_encoding/checkerboard_circuit.png b/applications/block_encoding/checkerboard_circuit.png new file mode 100644 index 0000000000000000000000000000000000000000..be9e149615f1593e4e01147e81539082d27e6244 GIT binary patch literal 54328 zcmeFZby!th_cppgkd%~?MmnXtyHf!Xkdp51kQM=Hqy(gqk}l~~k&==Y0coW3%*CU= z&+j|$xxVw?`QvW@%#vgULlCY9r}r_Ty*jX;2~{ONlA0DPz6D z5mP{B2{@n%SCE4b#xapltIU0YTBa{mkyAnuNs3izq>bOb{TLsOk!i!Yy{s7p&Sgrw zm3N-k{px%u)&DcU`;R$6*q5184NHt-6tOaDReapdp?k>*AE{j78O7j8CvVXjQY1U& z-`biVY)XTv*G`ZmJigw%E|*rMk3)lrdfv;P@KVaQ%J6i$#eG1Xz_o7TX|9ESGq{)JOdGSazpHV7wH4 zlGr9vrK;VwDP@;4Wo;mjgG!@DR>skDm7aO7(c9do7g6G+k$L5@x4N7xG5pW2Q=_l- zot*F9a@OfA&SXG~Q13zibwus$l!8+tc_AK$kBw5v1EXifKbm4<=hVc;DX)^XMQ~#M zNc2=fNG20^aAVaZ_#)sz_#H}>(l+N_zl0VKG(QTqY})_9qFy+ly3I({a8uC$%<{v*adgG6pS3sO%WYy z-Wz&2^Y*T()BW2vrjdkZ%=lP?QgKiH6Ga}qW<`r!ubWS0A`d4Oe8uoX`e3=lGu4r@ z_=%A!!iC7S5wlL6Tt@`?7wrDt5X>&ByNC$I#=ZSi@;;@Jy@zi-uh@$#>od6Mis#9W z304r8JUPRczn@m#GWqpuVM%L!S$d?okS{UI!xLYWOJN1Gl_2;QD>97vO#t^DrQ5n< z-=-hVBkpJkiw9tuQrrp;kQC*7Kvh{T3twLO26ln+3b_xd_w@KMQcUFg2MnXcbdOj~ zeNr(m|11p}VxbT|g5W?BkMcFmICQUASf-fF1!l}i1?p3D{tCwPYhlqgKXblVlpXWC zw>YcTZY6bz8N=9v38kvL?>LZuL&FTy7S+jcUH<-(3Buv#9q9eo#9{}SFgs? zHCXwE^e58cD&1D^#lj=CQM}{cmTUp7p456chc^8MA(C$dpEpr;?LN#8lvadVT(bm` zXR3W5?T!f22vxtJ=aH1PnzXFPD5iJ5H1X4F&A;;_O>mOa#cvyPilBqXrjVuW^!TfaATn zxw-rE4PTaFo6ce7!JYH`#5@<(g>Vj66=IZw+K%=65&`xY0^fYk+6Yr_5fjF6I@~g7 z!$b&D!$MgS!%0DI84BKbayvgL^(h%WJk3*nom&I#v=w+-fwNCV3z3u;sQJ)X1DO_X z*Q05xB6+|ywhQhOiDThNND_vN7zgQ49ffmt$oRyHQIkZ7$Hi(<-+D!XYD&vN&LIAX zYNZeV?Y*fm5*ZaLf>@sK82ec3QU>?4)X*Qwx~knDLnV!FVpaR94W za*mk=O(WVnN!6U>FT@stXYgC?u>4SVcFm7)CMHjqaTI$-*okq$GMhY)L9!NU7J8V`Phkcq{DJ?j(6X5wp^H`wSXM+mC$F%P0+ z#ZwgMsSlb#h7@Hy)sOSYCV2a ze(tRtPF8{}Bh|b6TU4ZU`ZTVwBC+Frw5H}xSp2EXlmu~#{eu0yecJs)eOU~z?m66aYoAY3ukl`oaobxS zS+G~jSV~*1Sg{OG7rBaWH1NpJC@qF)D z7ZTB}^CA_W8~=l@2J=)>YLYd}kZx;TRjoqxV~dCOhus&C>u6#8u0nzK89 z_y0 zlCt?G^(NUSEz5(i@bAaVmJxc|edndqE+8qeRdJWKj6o%R$XDz*W^FEL9_SqM>u|Vw zSUh(%%8u}IpnFdGd)4qtEmNm!>4wC_vx#!MZ99&-$8{?1XvbQ|hud|N0-N+lI7gnC zL17>RRcx#6q;0BRdmqd7+oIjp0-*?m4{5
  • C-|lO@qWo?7rMID`8cq`XN8dB|0+%PE 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 WP?oqitp^kCIm(I}3dwtpdi@{b*bgKC literal 0 HcmV?d00001 diff --git a/applications/block_encoding/laplacian_BE_Nx4_Ny4.qmod b/applications/block_encoding/laplacian_BE_Nx4_Ny4.qmod new file mode 100644 index 000000000..ef4fe785f --- /dev/null +++ b/applications/block_encoding/laplacian_BE_Nx4_Ny4.qmod @@ -0,0 +1,101 @@ +qfunc eq_sup_lap(s: qnum) { + inplace_prepare_state([0.2, 0, 0.2, 0.2, 0.2, 0.2, 0, 0], 0, s); +} + +qfunc oracle_org(s: qbit[], j: qnum, dlt: qbit) { + j1: qnum<2.0, False, 0>; + j2: qnum<2.0, False, 0>; + s0: qnum<1, False, 0>; + s1: qnum<1, False, 0>; + s2: qnum<1, False, 0>; + s -> {s0, s1, s2}; + j -> {j1, j2}; + control (s0 == 1) { + control (s1 == 0) { + control (s2 == 0) { + X(dlt); + } + } + } + control (s1 == 1) { + control (j1 == 0) { + X(dlt); + } + } + control (s2 == 1) { + control (j2 == 0) { + X(dlt); + } + } + {j1, j2} -> j; + {s0, s1, s2} -> s; +} + +qfunc oracle_d(s: qnum, data: qnum, TM: real[]) { + repeat (i: TM::len) { + control (s == i) { + RX(2 * acos(TM[i]), data); + } + } +} + +qfunc laplacian_BE(s: qnum, j: qnum, data: qnum, dlt: qnum) { + j1: qnum<2, False, 0>; + j2: qnum<2, False, 0>; + s0: qnum<1, False, 0>; + s1: qnum<1, False, 0>; + s2: qnum<1, False, 0>; + s -> {s0, s1, s2}; + j -> {j1, j2}; + control (s0 == 0) { + control (s2 == 1) { + j2 += 1; + } + } + {j1, j2} -> j; + control (s1 == 1) { + control (s0 == 0) { + j += 1; + } + } + {s0, s1, s2} -> s; + oracle_org(s, j, dlt); + s -> {s0, s1, s2}; + d: qnum<2, False, 0>; + {s1, s2} -> d; + Z(data); + oracle_d(d, data, [(-1.0), 0.25, 0.25]); + d -> {s1, s2}; + control (s1 == 1) { + X(s0); + } + control (s2 == 1) { + X(s0); + } + control (s1 == 1) { + control (s0 == 0) { + j += -1; + } + } + j -> {j1, j2}; + control (s2 == 1) { + control (s0 == 0) { + j2 += -1; + } + } + {j1, j2} -> j; + {s0, s1, s2} -> s; +} + +qfunc main(output s: qnum, output j: qnum, output data: qnum, output dlt: qbit) { + allocate(3, s); + allocate(1, dlt); + allocate(1, data); + allocate(4, j); + apply_to_all(H, j); + within { + eq_sup_lap(s); + } apply { + laplacian_BE(s, j, data, dlt); + } +} diff --git a/applications/block_encoding/laplacian_BE_Nx4_Ny4.synthesis_options.json b/applications/block_encoding/laplacian_BE_Nx4_Ny4.synthesis_options.json new file mode 100644 index 000000000..627cafd7f --- /dev/null +++ b/applications/block_encoding/laplacian_BE_Nx4_Ny4.synthesis_options.json @@ -0,0 +1,45 @@ +{ + "constraints": { + "max_gate_count": {}, + "max_width": 10, + "optimization_parameter": "depth" + }, + "preferences": { + "custom_hardware_settings": { + "basis_gates": [ + "z", + "rz", + "u", + "u2", + "sx", + "cx", + "cz", + "cy", + "y", + "tdg", + "r", + "rx", + "sdg", + "t", + "x", + "s", + "u1", + "ry", + "p", + "id", + "sxdg", + "h" + ], + "is_symmetric_connectivity": true + }, + "debug_mode": true, + "machine_precision": 8, + "optimization_level": 1, + "output_format": ["qasm"], + "pretty_qasm": true, + "random_seed": 1506744138, + "synthesize_all_separately": false, + "timeout_seconds": 300, + "transpilation_option": "auto optimize" + } +} diff --git a/applications/block_encoding/select_structures_BE.ipynb b/applications/block_encoding/select_structures_BE.ipynb new file mode 100644 index 000000000..b3a459b9b --- /dev/null +++ b/applications/block_encoding/select_structures_BE.ipynb @@ -0,0 +1,1356 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "0", + "metadata": {}, + "source": [ + "# Block encoding of select structured matrices\n", + "___\n", + "\n", + "This work is an implementation of the paper on [Block-encoding structured matrices for data input in quantum computing](https://quantum-journal.org/papers/q-2024-01-11-1226/)." + ] + }, + { + "cell_type": "markdown", + "id": "1", + "metadata": {}, + "source": [ + "### **Introduction**\n", + "\n", + "Block encoding is a well known technique in quantum computing used to embed non-unitary matrices on a quantum computer that only allows for unitary evolution. \n", + "\n", + "***Definition:*** \n", + " Let $ a, n, m \\in \\mathbb{N} $ such that $ m = a + n $. A $ m $ -qubit unitary $ U $ is said to be an $(\\alpha, a)$ -block-encoding of an $ n $ -qubit operator $ A $ if \n", + "\n", + "$$\n", + "\\tilde{A} = \\left( \\langle 0 |^{\\otimes a} \\otimes I_n \\right) U \\left( |0 \\rangle^{\\otimes a} \\otimes I_n \\right)\n", + "\\tag{1}\n", + "$$ \n", + "\n", + "where, $A = \\alpha \\tilde{A}$ . The parameters $(\\alpha, a)$ represent the *subnormalization factor* (which adjusts for encoding matrices of any norm), and the *number of ancilla qubits* used in the block-encoding scheme respectively. \n", + "\n", + "Efficiently block encoding arbitrary matrices is a very difficult problem and this task is not trivial even for well structured and sparse matrices. The [paper by Sunderhauf et al. 2024](https://quantum-journal.org/papers/q-2024-01-11-1226/), provides for efficient quantum circuits for block encoding arithmetically structured matrices. This is useful in many applications, especially ones involving problems of linear algebra. Moreover, given an efficient block encoding of a matrix $\\tilde{A}$, its possible to efficiently construct a block encoding of certain polynomials of $\\tilde{A}$ through quantum singular value transformations (QSVT). \n", + "\n", + "### **Notebook contents**\n", + "- ##### Block encoding circuits for Checkerboard matrix, Toeplitz matrix, Tridiagonal symmetric matrix and 2D Laplacian matrix.\n", + "___" + ] + }, + { + "cell_type": "markdown", + "id": "2", + "metadata": {}, + "source": [ + "### **Notation for Sparse Matrix Structures**\n", + "\n", + "We consider an $N \\times N$ sparse matrix $A$ whose nonzero entries are drawn from a fixed set of $D$ distinct data values:\n", + "$$\n", + "A_d \\quad (0 \\le d < D)\n", + "$$\n", + "Multiple positions in the matrix may contain the same data value.\n", + "\n", + "We denote:\n", + "- $M$: maximum number of times any of the $D$ values appears in the matrix (multiplicity of a data value)\n", + "- $S_c$: maximum number of nonzero entries in any column \n", + "- $S_r$: maximum number of nonzero entries in any row \n", + "- $S = \\max(S_c, S_r)$: overall sparsity level (smaller $S$ means a sparser matrix)\n", + "\n", + "We assume the following to hold for this work:\n", + "- all $D$ data items have the same multiplicity $M$,\n", + "- all rows and columns have equal sparsity: $S_c = S_r = S$,\n", + "- all quantities are powers of two.\n", + "\n", + "Then, the total number of nonzero entries satisfies\n", + "$$\n", + "MD = NS_c = NS_r = \\#\\text{nonzero}. \n", + "$$\n", + "\n", + "**Note:** If the above equality does not hold, we pad $S$ and/or $D$ till the equality is satisfied. \n", + "\n", + "Each nonzero entry can then be equivalently uniquely labeled from three perspectives:\n", + "1. **By data value and repetition index:** $(d, m)$ \n", + "2. **By column index and sparsity index:** $(j, s_c)$ \n", + "3. **By row index and sparsity index:** $(i, s_r)$ \n", + "\n", + "These perspectives describe the same sparsity pattern using different coordinate systems.\n", + "\n", + "\n", + "### **Block encoding ingredients**\n", + "\n", + "We first label each matrix entry by a data label, say $(d,m). Then, we would require the following ingredients to block encode the matrix given above.\n", + "\n", + "- Oracle $ O_c$: $$ O_c |d, m\\rangle \\rightarrow\\left|j, s_c\\right\\rangle $$ where $s_c$ is the column sparsity index, $0 \\le s_c \\le S_c$.\n", + "- Oracle $ O_r$: $$ O_r |d, m\\rangle \\rightarrow\\left|i, s_r\\right\\rangle $$ where $s_r$ is the row sparsity index, $0 \\le s_r \\le S_r$.\n", + "\n", + "The above two oracles are solely dependent on the structure of the matrix in question and can be constructed through appropriate quantum arithmetic. \n", + "\n", + "- Apart from these, a dataloading oracle encoding the values of the $D$ data items is required:\n", + "$$\n", + "O_{\\text {data }}=\\sum_{d=0}^{D-1} R_X\\left(2 \\arccos A_d /\\|A\\|_{\\max }\\right) \\otimes|d\\rangle\\langle d|\n", + "$$\n", + "\n", + "The factor $\\|A\\|_{\\max }=\\max _d\\left|A_d\\right|$ is needed to ensure all values are in-range of the arccosine. Provided the first qubit is initialised and postselected as $|0\\rangle$, the effect of $O_{\\text {data }}$ is loading the correct values:\n", + "\n", + "$$\n", + "O_{\\text {data }}|0\\rangle \\otimes|d\\rangle=\\left(A_d /\\|A\\|_{\\max }|0\\rangle-i \\sqrt{1-\\left(\\left|A_d\\right| /\\|A\\|_{\\max }\\right)^2}|1\\rangle\\right) \\otimes|d\\rangle .\n", + "$$\n", + "\n", + "### **General Block encoding circuit**\n", + "\n", + "

    \n", + " \n", + "

    \n", + "\n", + "\n", + "#### **Important Note**\n", + "- In the below illustrations we scale the matrix entires of $A$ by dividing the unscaled $A$ by $||A||_{max}$ so that entries of scaled $A_s$ are between $-1$ and $+1$. We block encode the scaled matrix $A_s$ (where $||A_{s}||_{max}= 1$). \n", + "\n", + "___" + ] + }, + { + "cell_type": "markdown", + "id": "3", + "metadata": {}, + "source": [ + "#### Necessary modules and global functions" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "4", + "metadata": {}, + "outputs": [], + "source": [ + "# import all necessary modules\n", + "import builtins\n", + "import math\n", + "import random\n", + "import time\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "np.set_printoptions(\n", + " precision=2, suppress=True, linewidth=120, threshold=10000\n", + ") # print options for neatness\n", + "\n", + "import classiq\n", + "from classiq import *\n", + "from classiq.qmod.symbolic import *\n", + "\n", + "\n", + "# function to extract unique values from structured matrices\n", + "def _unique_values_core(matrix, mode, Nx=None):\n", + " \"\"\"\n", + " helper to extract unique values (as needed for O_data oracle) from structured matrices.\n", + "\n", + " Parameters\n", + " ----------\n", + " matrix : array-like or sparse-like\n", + " Input matrix (Laplacian, tridiagonal, Toeplitz).\n", + " mode : {'laplacian', 'tridiagonal', 'toeplitz'}\n", + " Extraction mode.\n", + " Nx : int, optional\n", + " Grid size in x-direction (only needed for 'laplacian').\n", + "\n", + " Returns\n", + " -------\n", + " list\n", + " List of unique values\n", + " \"\"\"\n", + "\n", + " mat = matrix\n", + "\n", + " if mode == \"laplacian\":\n", + " if Nx is None:\n", + " raise ValueError(\"Nx must be provided for mode='laplacian'.\")\n", + " # 2D Laplacian: pick the main diag, 1-step, and Nx-step diagonals\n", + " vals = [\n", + " mat.diagonal(0)[0], # A0\n", + " mat.diagonal(1)[0], # A1\n", + " mat.diagonal(Nx)[0], # A2\n", + " ]\n", + " return vals\n", + "\n", + " elif mode == \"tridiagonal\":\n", + " size = mat.shape[0]\n", + " vals = []\n", + "\n", + " for i in range(size):\n", + " for j in range(size):\n", + " v = mat[i, j]\n", + " if v not in vals:\n", + " vals.append(v)\n", + "\n", + " return vals\n", + "\n", + " elif mode == \"toeplitz\":\n", + " N = mat.shape[0]\n", + " vals = []\n", + " for offset in range(-N + 1, N):\n", + " diagonal = np.diag(mat, k=offset)\n", + " if diagonal.size > 0:\n", + " v = diagonal[0]\n", + " if v != 0 and v not in vals:\n", + " vals.append(v)\n", + " return vals[::-1]\n", + "\n", + " else:\n", + " raise ValueError(f\"Unknown mode '{mode}'.\")\n", + "\n", + "\n", + "# post-processing function to get reduced state vector after projection on ancilla=0\n", + "def get_projected_state_vector(\n", + " execution_result,\n", + " measured_var: str,\n", + " projections: dict,\n", + ") -> np.ndarray:\n", + " \"\"\"\n", + " This function returns a reduced statevector from execution results.\n", + " measured var: the name of the reduced variable\n", + " projections: on which values of the other variables to project, e.g., {\"anc_M\": 1}\n", + " \"\"\"\n", + " projected_size = len(execution_result.output_qubits_map[measured_var])\n", + " proj_statevector = np.zeros(2**projected_size).astype(complex)\n", + " for sample in execution_result.parsed_state_vector:\n", + " if all(\n", + " int(sample.state[key]) == projections[key] for key in projections.keys()\n", + " ):\n", + " value = int(sample.state[measured_var])\n", + " proj_statevector[value] += sample.amplitude\n", + " global_phase = np.angle(proj_statevector[0])\n", + " return np.real(proj_statevector / np.exp(1j * global_phase))\n", + "\n", + "\n", + "# general oracle to load data values from a classical array TM into data register using angle encoding\n", + "@qfunc\n", + "def oracle_d(s: QNum, data: QNum, TM: CArray[CReal]):\n", + " repeat(\n", + " TM.len,\n", + " lambda i: control(\n", + " s == i, lambda: (a_d := TM[i], theta := 2 * acos(a_d), RX(theta, data))\n", + " ),\n", + " )" + ] + }, + { + "cell_type": "markdown", + "id": "5", + "metadata": {}, + "source": [ + "### 1. Checkerboard Matrix" + ] + }, + { + "cell_type": "markdown", + "id": "6", + "metadata": {}, + "source": [ + "\n", + "\n", + "A checkerboard matrix $A\\in\\mathbb{R}^{N\\times N}$ is any matrix whose entries alternate between two scalar values depending on the parity of the index sum.\n", + "\n", + "Given two values $a_0,a_1\\in[-1,1]$, we define\n", + "$$\n", + "\n", + "A_{ij} = \n", + "\\begin{cases}\n", + "a_0, & (i+j)\\ \\text{even},\\\\[4pt]\n", + "a_1, & (i+j)\\ \\text{odd},\n", + "\\end{cases} \\qquad i,j=0,\\dots,N-1.\n", + "\n", + "$$\n", + "Thus the matrix contains only two distinct values and a simple periodic pattern\n", + "that is useful for testing structure-aware block-encoding. An example heatmap showing the structure is given below:\n", + "\n", + "

    \n", + " \n", + "

    \n", + "\n", + "For convenience, the index $m\\in\\{0,\\dots,N^2/2-1\\}$ is decomposed into three parts,\n", + "$$\n", + "m \\;=\\; N\\,m^{\\mathrm{hi}} \\;+\\; \\frac{N}{2}\\,m^{\\mathrm{mid}} \\;+\\; m^{\\mathrm{lo}},\n", + "$$\n", + "corresponding respectively to the high, mid, and low $\\log(N/2)$-bit segments.\n", + "Given a data index $d\\in\\{0,1\\}$ and multiplicity index $m$, the row and column\n", + "indices $(i,j)$ of the checkerboard matrix are obtained as\n", + "\\begin{align}\n", + "i(d,m) &= \\left\\lfloor \\frac{m}{N/2} \\right\\rfloor\n", + " \\;=\\; 2\\,m^{\\mathrm{hi}} + m^{\\mathrm{mid}}, \\\\[6pt]\n", + "j(d,m) &= 2\\,\\big(m \\bmod (N/2)\\big) \\;+\\; \\big(d + i(d,m)\\bmod 2\\big)\n", + " \\;=\\; 2\\,m^{\\mathrm{lo}} + \\big(d + m^{\\mathrm{mid}} \\bmod 2\\big).\n", + "\\end{align}\n", + "These relations give a compact arithmetic mapping from $(d,m)$ labels to the corresponding matrix entry $(i,j)$ in the $N\\times N$ checkerboard matrix. One can deduce that $O_r$ would simply be the identity operator and the block encoding circuit is provided as below. \n", + "\n", + "\n", + "

    \n", + " \n", + "

    \n" + ] + }, + { + "cell_type": "markdown", + "id": "7", + "metadata": {}, + "source": [ + "Here the subnormalization factor is $N$ and $n+1$ ancilla qubits are used, where $n= log_2N$. Greater the subnormalization and ancilla qubits greater is the block encoding cost, so for efficient block encodings one tries to minimize these resources. " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Checkerboard matrix:\n", + "\n", + "[[-0.08 -0.84 -0.08 -0.84 -0.08 -0.84 -0.08 -0.84]\n", + " [-0.84 -0.08 -0.84 -0.08 -0.84 -0.08 -0.84 -0.08]\n", + " [-0.08 -0.84 -0.08 -0.84 -0.08 -0.84 -0.08 -0.84]\n", + " [-0.84 -0.08 -0.84 -0.08 -0.84 -0.08 -0.84 -0.08]\n", + " [-0.08 -0.84 -0.08 -0.84 -0.08 -0.84 -0.08 -0.84]\n", + " [-0.84 -0.08 -0.84 -0.08 -0.84 -0.08 -0.84 -0.08]\n", + " [-0.08 -0.84 -0.08 -0.84 -0.08 -0.84 -0.08 -0.84]\n", + " [-0.84 -0.08 -0.84 -0.08 -0.84 -0.08 -0.84 -0.08]]\n", + "Values (val_even, val_odd): [-0.08, -0.84]\n" + ] + } + ], + "source": [ + "def checkerboard_matrix(N, val_even=None, val_odd=None, rng=None, decimals=2):\n", + " \"\"\"\n", + " Generate an N×N checkerboard matrix with alternating values.\n", + "\n", + " Parameters\n", + " ----------\n", + " N : int\n", + " Matrix dimension.\n", + "\n", + " val_even : float, optional\n", + " Value at positions where (i + j) is even. Random in [-1,1] if None.\n", + "\n", + " val_odd : float, optional\n", + " Value at positions where (i + j) is odd. Random in [-1,1] if None.\n", + "\n", + " rng : np.random.Generator, optional\n", + " Random generator for reproducibility.\n", + "\n", + " decimals : int, optional\n", + " Decimal precision for the values.\n", + "\n", + " Returns\n", + " -------\n", + " np.ndarray, list\n", + " The checkerboard matrix and the list [val_even, val_odd].\n", + " \"\"\"\n", + "\n", + " if rng is None:\n", + " rng = np.random.default_rng()\n", + "\n", + " # Randomly choose the two values if not provided and round them\n", + " if val_even is None:\n", + " val_even = float(rng.uniform(-1, 1))\n", + " else:\n", + " val_even = float(val_even)\n", + " if val_odd is None:\n", + " val_odd = float(rng.uniform(-1, 1))\n", + " else:\n", + " val_odd = float(val_odd)\n", + "\n", + " val_even = round(val_even, decimals)\n", + " val_odd = round(val_odd, decimals)\n", + "\n", + " # checkerboard pattern\n", + " i = np.arange(N).reshape(-1, 1)\n", + " j = np.arange(N).reshape(1, -1)\n", + " parity = (i + j) % 2 # 0 for even, 1 for odd positions\n", + "\n", + " M = np.where(parity == 0, val_even, val_odd).astype(float)\n", + "\n", + " # Round matrix entries to the requested number of decimals\n", + " M = np.round(M, decimals)\n", + "\n", + " return M, [val_even, val_odd]\n", + "\n", + "\n", + "# Test case\n", + "if __name__ == \"__main__\":\n", + " N = 8\n", + " M, values = checkerboard_matrix(N)\n", + " print(\"Checkerboard matrix:\\n\")\n", + " print(M)\n", + " print(\"Values (val_even, val_odd):\", values)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The circuit width is: 7\n", + "The circuit depth is: 11\n", + "The reduced state vector for j when s=0, data=0 is:\n", + "[1.3 1.3 1.3 1.3 1.3 1.3 1.3 1.3]\n", + "Theoretical reduced state vector for j when l=0 and data=0 is:\n", + "[-1.3 -1.3 -1.3 -1.3 -1.3 -1.3 -1.3 -1.3]\n", + "The reduced state vector for j when s=0, data=0 is:\n", + "[1.3 1.3 1.3 1.3 1.3 1.3 1.3 1.3]\n", + "Theoretical reduced state vector for j when l=0 and data=0 is:\n", + "[-1.3 -1.3 -1.3 -1.3 -1.3 -1.3 -1.3 -1.3]\n" + ] + } + ], + "source": [ + "@qfunc\n", + "def array_swap(j: QNum, k: QNum):\n", + " z_arr1 = QArray(\"z1\")\n", + " z_arr2 = QArray(\"z2\")\n", + " bind(j, z_arr1)\n", + " bind(k, z_arr2)\n", + " repeat(z_arr1.len, lambda i: SWAP(z_arr1[i], z_arr2[i]))\n", + " bind(z_arr1, j)\n", + " bind(z_arr2, k)\n", + "\n", + "\n", + "@qfunc\n", + "def checkerboard_BE(data: QNum, s: QNum, j: QNum):\n", + " n = int(math.log2(N / 2))\n", + "\n", + " s0 = QNum(\"s0\", 1, False, 0)\n", + " s1 = QNum(\"s1\", n, False, 0)\n", + "\n", + " j0 = QNum(\"j0\", n, False, 0)\n", + " j1 = QNum(\"j1\", 1, False, 0)\n", + "\n", + " bind(s, [s0, s1])\n", + " bind(j, [j0, j1])\n", + "\n", + " array_swap(s1, j0)\n", + " CX(s0, j1)\n", + "\n", + " oracle_d(\n", + " s0, data, values\n", + " ) # refers to O_data which is common across all block encodings in this notebook\n", + "\n", + " bind([s0, s1], s)\n", + " bind([j0, j1], j)\n", + "\n", + "\n", + "@qfunc\n", + "def main(data: Output[QNum], s: Output[QNum], j: Output[QNum]):\n", + " n = int(math.log2(N))\n", + "\n", + " allocate(n, s)\n", + " allocate(n, j)\n", + " allocate(1, data)\n", + "\n", + " apply_to_all(H, j)\n", + "\n", + " within_apply(lambda: apply_to_all(H, s), lambda: checkerboard_BE(data, s, j))\n", + "\n", + "\n", + "preferences = Preferences(timeout_seconds=1500, optimization_level=3)\n", + "constraints = Constraints(\n", + " optimization_parameter=OptimizationParameter.DEPTH,\n", + " max_width=10, # change max_width as needed, minimum width is 2n+1\n", + ")\n", + "qmod = create_model(main, preferences=preferences)\n", + "qmod = set_constraints(qmod, constraints)\n", + "\n", + "# write_qmod(\n", + "# qmod,\n", + "# 'checkerboard_BE_N{}'.format(N)\n", + "# )\n", + "\n", + "# Synthesize the quantum program\n", + "backend_preferences = ClassiqBackendPreferences(backend_name=\"simulator_statevector\")\n", + "qmod = set_execution_preferences(\n", + " qmod,\n", + " execution_preferences=ExecutionPreferences(\n", + " num_shots=1, backend_preferences=backend_preferences\n", + " ),\n", + ")\n", + "qprog = synthesize(qmod)\n", + "# show(qprog)\n", + "circuit_width = qprog.data.width\n", + "circuit_depth = qprog.transpiled_circuit.depth\n", + "print(\"The circuit width is:\", circuit_width)\n", + "print(\"The circuit depth is:\", circuit_depth)\n", + "\n", + "job = execute(qprog)\n", + "results = job.result()[0].value\n", + "\n", + "\n", + "reduced_state = get_projected_state_vector(results, \"j\", {\"s\": 0, \"data\": 0})\n", + "reduced_state = reduced_state * N # rescale by subnormalization factor N\n", + "print(\"The reduced state vector for j when s=0, data=0 is:\")\n", + "print(reduced_state)\n", + "\n", + "\n", + "# theoretical reduced state vector\n", + "theoretical_reduced_state = np.matmul(M, [1 / np.sqrt(N) for i in range(N)])\n", + "print(\"Theoretical reduced state vector for j when l=0 and data=0 is:\")\n", + "print(theoretical_reduced_state)" + ] + }, + { + "cell_type": "markdown", + "id": "10", + "metadata": {}, + "source": [ + "#### **Note:** The state vector results should match upto a overall global phase. Hence the above theoretical and simulated results match exactly. " + ] + }, + { + "cell_type": "markdown", + "id": "11", + "metadata": {}, + "source": [ + "____" + ] + }, + { + "cell_type": "markdown", + "id": "12", + "metadata": {}, + "source": [ + "### 2. Toeplitz Matrix" + ] + }, + { + "cell_type": "markdown", + "id": "13", + "metadata": {}, + "source": [ + "Consider a $N$ x $N$ Toeplitz matrix with $D$ diagonals (or $D$ values), offset from the main diagonal by $k$ :\n", + "\n", + "$$\n", + "\\left(\\begin{array}{cccccccc}\n", + "A_k & A_{k-1} & \\cdots & A_0 & & & & \\\\\n", + "A_{k+1} & A_k & A_{k-1} & \\cdots & A_0 & & & \\\\\n", + "\\vdots & A_{k+1} & A_k & A_{k-1} & \\cdots & A_0 & & \\\\\n", + "A_{D-1} & \\vdots & A_{k+1} & A_k & A_{k-1} & \\cdots & A_0 & \\\\\n", + "& A_{D-1} & \\vdots & A_{k+1} & A_k & A_{k-1} & \\cdots & A_0 \\\\\n", + "& & A_{D-1} & \\vdots & A_{k+1} & A_k & A_{k-1} & \\cdots \\\\\n", + "& & & A_{D-1} & \\vdots & A_{k+1} & A_k & A_{k-1} \\\\\n", + "& & & & A_{D-1} & \\vdots & A_{k+1} & A_k\n", + "\\end{array}\\right)\n", + "$$\n", + "\n", + "For the distinct values, we choose $d$ as equal to the subscript of the matrix elements above. For $m$, we simply choose the column index. Arithmetically, the mapping to row ($i$) and column indices ($j$) is then:\n", + "\n", + "$$\n", + "i(d, m)=d-k+m, \\quad j(d, m)=m\n", + "$$\n", + "\n", + "and out-of-range $(d, m)$ pairs are those where an overflow or underflow in the calculation of $i$ occurs, that is when\n", + "\n", + "$$\n", + "d-k+m<0 \\text { or } d-k+m \\geq N \\text {. }\n", + "$$\n", + "\n", + "Note that the range of the data labels are as follows:\n", + "\n", + "$i,j,m: \\{0,1,.., N-1\\} , d: \\{0,1,..., D-1\\}$\n", + "\n", + "\n", + "In the case of Topelitz matrix, elements in any row and any column has a unique data label $d$ hence we do not require a separate arithmetic for $s_c$ and $s_r$, they can be set equal to $d$ as their range also match. \n", + "\n", + "#### Block encoding circuit:\n", + "\n", + "

    \n", + " \n", + "

    \n", + "\n", + "Here the subnormalization factor is $D$ and $2+log_2D$ ancilla qubits are used." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "14", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Toeplitz Matrix:\n", + " [[0.45 0.54 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", + " [0.86 0.45 0.54 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", + " [0.93 0.86 0.45 0.54 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", + " [0. 0.93 0.86 0.45 0.54 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", + " [0. 0. 0.93 0.86 0.45 0.54 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0.93 0.86 0.45 0.54 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0.93 0.86 0.45 0.54 0. 0. 0. 0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. 0.93 0.86 0.45 0.54 0. 0. 0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. 0. 0.93 0.86 0.45 0.54 0. 0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. 0. 0. 0.93 0.86 0.45 0.54 0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. 0. 0. 0. 0.93 0.86 0.45 0.54 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.93 0.86 0.45 0.54 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.93 0.86 0.45 0.54 0. 0. ]\n", + " [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.93 0.86 0.45 0.54 0. ]\n", + " [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.93 0.86 0.45 0.54]\n", + " [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.93 0.86 0.45]]\n", + "Unique values: [np.float64(0.5430706158006551), np.float64(0.4451945190809161), np.float64(0.8588474400968182), np.float64(0.9258545815408299)]\n" + ] + } + ], + "source": [ + "# Toeplitz matrix\n", + "def generate_toeplitz_matrix(D, N, k):\n", + " \"\"\"\n", + " Generate a Toeplitz matrix with D diagonals and size NxN.\n", + "\n", + " Parameters:\n", + " D (int): Number of diagonals, must be a power of 2.\n", + " N (int): Size of the matrix, must be a power of 2 and N >= D.\n", + " k (int): Offset from the main diagonal.\n", + "\n", + " Returns:\n", + " numpy.ndarray: NxN Toeplitz matrix.\n", + " \"\"\"\n", + " # Check if D and N are powers of 2\n", + " if not (D & (D - 1) == 0 and D > 0):\n", + " raise ValueError(\"D must be a power of 2.\")\n", + " if not (N & (N - 1) == 0 and N > 0):\n", + " raise ValueError(\"N must be a power of 2.\")\n", + " if N < D:\n", + " raise ValueError(\"N must be greater than or equal to D.\")\n", + " if k < 0 or k >= D:\n", + " raise ValueError(\"k must be between 0 and D-1.\")\n", + "\n", + " # Generate random diagonal values between -1 and 1\n", + " diagonals = np.random.uniform(-1, 1, D)\n", + "\n", + " # Generate the Toeplitz matrix\n", + " toeplitz_matrix = np.zeros((N, N))\n", + " for offset in range(D):\n", + " diag_index = k - offset\n", + " if diag_index >= 0:\n", + " np.fill_diagonal(toeplitz_matrix[:, diag_index:], diagonals[offset])\n", + " if diag_index < 0:\n", + " np.fill_diagonal(toeplitz_matrix[-diag_index:, :], diagonals[offset])\n", + "\n", + " return toeplitz_matrix\n", + "\n", + "\n", + "def get_unique_toeplitz(toeplitz_matrix):\n", + " \"\"\"\n", + " Get the list of unique values used in the Toeplitz matrix,\n", + " ordered from 0th to (D-1)th diagonal\n", + " \"\"\"\n", + " return _unique_values_core(toeplitz_matrix, mode=\"toeplitz\")\n", + "\n", + "\n", + "# Test case\n", + "D = 4 # Number of diagonals (must be a power of 2, for now)\n", + "N = 16 # Size of the matrix (must be a power of 2 and >= D)\n", + "k = 1 # Offset from the main diagonal, k must be between 0 and D-1\n", + "\n", + "toeplitz_matrix = generate_toeplitz_matrix(D, N, k)\n", + "print(\"Toeplitz Matrix:\\n\", toeplitz_matrix)\n", + "\n", + "unique_values_toeplitz = get_unique_toeplitz(\n", + " toeplitz_matrix\n", + ") # unique values in the matrix (each has a unique label- d)\n", + "print(\"Unique values:\", unique_values_toeplitz)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "15", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/anaconda3/envs/qiskit-fresh/lib/python3.10/site-packages/classiq/synthesis.py:60: ClassiqDeprecationWarning: The computation sequence of the local variable 'tmp' includes a non-permutation operation\n", + "\t\tat ipynb cell line 13 in function 'Toep_BE'\n", + " quantum_program.raise_warnings()\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The circuit width is: 18\n", + "The circuit depth is: 225\n", + "The reduced state vector for j when s=0, dlt=1 and data=0 is:\n", + "[0.25 0.46 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.56]\n", + "Theoretical reduced state vector for j when l=0 and data=0 is:\n", + "[0.25 0.46 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.56]\n", + "The reduced state vector for j when s=0, dlt=1 and data=0 is:\n", + "[0.25 0.46 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.56]\n", + "Theoretical reduced state vector for j when l=0 and data=0 is:\n", + "[0.25 0.46 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.69 0.56]\n" + ] + } + ], + "source": [ + "@qfunc\n", + "def oracle_r(j: QNum, s: QNum, k: CInt):\n", + " inplace_add(s - k, j)\n", + "\n", + "\n", + "@qfunc\n", + "def Toep_BE(data: QNum, s: QNum, j: QNum, dlt: QBit):\n", + " T_M = unique_values_toeplitz\n", + " oracle_d(s, data, T_M)\n", + "\n", + " tmp = QNum(\"tmp\")\n", + " tmp |= s - k + j\n", + "\n", + " oracle_r(j, s, k)\n", + " control(tmp < 0, lambda: X(dlt))\n", + " control(tmp >= N, lambda: X(dlt))\n", + "\n", + "\n", + "@qfunc\n", + "def main(data: Output[QNum], s: Output[QNum], j: Output[QNum], dlt: Output[QBit]):\n", + " d = int(math.log2(D))\n", + " n = int(math.log2(N))\n", + "\n", + " allocate(d, s)\n", + " allocate(n, j)\n", + " allocate(1, data)\n", + " allocate(1, dlt)\n", + "\n", + " apply_to_all(H, j)\n", + "\n", + " within_apply(lambda: apply_to_all(H, s), lambda: Toep_BE(data, s, j, dlt))\n", + "\n", + "\n", + "preferences = Preferences(timeout_seconds=1500, optimization_level=3)\n", + "constraints = Constraints(\n", + " optimization_parameter=OptimizationParameter.DEPTH,\n", + " max_width=18, # change max_width as needed, minimum width as per algo is n+2+ log2(D)- but more might be used by synthesizer to do the arithmetics\n", + ")\n", + "qmod = create_model(main, preferences=preferences)\n", + "qmod = set_constraints(qmod, constraints)\n", + "\n", + "# write_qmod(\n", + "# qmod,\n", + "# 'toeplitz_BE_N{}'.format(N)\n", + "# )\n", + "\n", + "# Synthesize the quantum program\n", + "backend_preferences = ClassiqBackendPreferences(backend_name=\"simulator_statevector\")\n", + "qmod = set_execution_preferences(\n", + " qmod,\n", + " execution_preferences=ExecutionPreferences(\n", + " num_shots=1, backend_preferences=backend_preferences\n", + " ),\n", + ")\n", + "qprog = synthesize(qmod)\n", + "# show(qprog)\n", + "circuit_width = qprog.data.width\n", + "circuit_depth = qprog.transpiled_circuit.depth\n", + "print(\"The circuit width is:\", circuit_width)\n", + "print(\"The circuit depth is:\", circuit_depth)\n", + "\n", + "\n", + "job = execute(qprog)\n", + "results = job.result()[0].value\n", + "\n", + "\n", + "reduced_state = get_projected_state_vector(results, \"j\", {\"s\": 0, \"data\": 0, \"dlt\": 0})\n", + "reduced_state = reduced_state * D # D is the subnormalization factor\n", + "print(\"The reduced state vector for j when s=0, dlt=1 and data=0 is:\")\n", + "print(reduced_state)\n", + "\n", + "\n", + "# theoretical reduced state vector\n", + "theoretical_reduced_state = np.matmul(\n", + " toeplitz_matrix, [1 / np.sqrt(N) for i in range(N)]\n", + ")\n", + "print(\"Theoretical reduced state vector for j when l=0 and data=0 is:\")\n", + "print(theoretical_reduced_state)" + ] + }, + { + "cell_type": "markdown", + "id": "16", + "metadata": {}, + "source": [ + "____" + ] + }, + { + "cell_type": "markdown", + "id": "17", + "metadata": {}, + "source": [ + "### 3. Tridiagonal symmetric Matrix" + ] + }, + { + "cell_type": "markdown", + "id": "18", + "metadata": {}, + "source": [ + "We now consider a tridiagonal matrix which is also symmetric. This matrix has the below structure and sparsity pattern.\n", + "\n", + "\n", + "

    \n", + " \n", + "

    " + ] + }, + { + "cell_type": "markdown", + "id": "19", + "metadata": {}, + "source": [ + "The block encoding technique is similar to the one for Toeplitz matrix. Oracles $O_c$ and $O_r$ need to be appropriately constructed using quantum arithmetics. The oracle $O_{data}$ for loading the unique data values would be identical as above. The below is the full block encoding circuit:\n", + "\n", + "\n", + "

    \n", + " \n", + "

    \n", + "\n", + "Here the subnormalization factor is $3$ and $3$ ancilla qubits are used irrespective of matrix size." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "20", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tridiagonal symmetric system [[-0.67 0.91 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", + " [ 0.91 -0.01 0.48 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", + " [ 0. 0.48 -0.85 0.02 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", + " [ 0. 0. 0.02 -0.18 -0.08 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", + " [ 0. 0. 0. -0.08 0.99 -0.2 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", + " [ 0. 0. 0. 0. -0.2 -0.31 -0.61 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", + " [ 0. 0. 0. 0. 0. -0.61 0.68 -0.1 0. 0. 0. 0. 0. 0. 0. 0. ]\n", + " [ 0. 0. 0. 0. 0. 0. -0.1 -0.05 -0.63 0. 0. 0. 0. 0. 0. 0. ]\n", + " [ 0. 0. 0. 0. 0. 0. 0. -0.63 -0.5 0.93 0. 0. 0. 0. 0. 0. ]\n", + " [ 0. 0. 0. 0. 0. 0. 0. 0. 0.93 -0.65 0.58 0. 0. 0. 0. 0. ]\n", + " [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.58 0.2 -0.31 0. 0. 0. 0. ]\n", + " [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. -0.31 -0.48 -0.68 0. 0. 0. ]\n", + " [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. -0.68 -0.38 0.99 0. 0. ]\n", + " [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.99 -0.47 -0.15 0. ]\n", + " [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. -0.15 -0.44 -0.33]\n", + " [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. -0.33 -0.97]]\n", + "Unique values in the matrix: [np.float64(-0.6669), np.float64(0.907), np.float64(-0.01), np.float64(0.4769), np.float64(-0.8479), np.float64(0.0245), np.float64(-0.1823), np.float64(-0.0761), np.float64(0.9882), np.float64(-0.1966), np.float64(-0.3112), np.float64(-0.611), np.float64(0.6835), np.float64(-0.0973), np.float64(-0.0452), np.float64(-0.6281), np.float64(-0.4978), np.float64(0.931), np.float64(-0.6478), np.float64(0.5827), np.float64(0.2046), np.float64(-0.3149), np.float64(-0.4843), np.float64(-0.6751), np.float64(-0.384), np.float64(0.9934), np.float64(-0.4661), np.float64(-0.1534), np.float64(-0.4401), np.float64(-0.3313), np.float64(-0.9661), 0]\n" + ] + } + ], + "source": [ + "# Tridiagonal symmetric matrix\n", + "def generate_tridiagonal_symmetric_matrix(size):\n", + " \"\"\"\n", + " Generate a symmetric tridiagonal matrix of given size.\n", + " The size must be a power of 2, and diagonal values are distinct random values between -1 and 1.\n", + "\n", + " Parameters:\n", + " size (int): Size of the matrix (must be a power of 2).\n", + "\n", + " Returns:\n", + " np.ndarray: A symmetric tridiagonal matrix.\n", + "\n", + " Raises:\n", + " ValueError: If the size is not a power of 2.\n", + " \"\"\"\n", + " if size <= 0 or (size & (size - 1)) != 0:\n", + " raise ValueError(\"Size must be a power of 2.\")\n", + "\n", + " # Generate distinct random diagonal values\n", + " diagonal_values = np.random.uniform(-1, 1, size)\n", + " while len(set(diagonal_values)) < size:\n", + " diagonal_values = np.random.uniform(-1, 1, size) # Ensure uniqueness\n", + "\n", + " # Generate random off-diagonal values between -1 and 1 for tridiagonal matrix\n", + " off_diagonal_values = np.random.uniform(-1, 1, size - 1)\n", + "\n", + " # Construct the tridiagonal symmetric matrix\n", + " matrix = np.zeros((size, size))\n", + " np.fill_diagonal(matrix, diagonal_values)\n", + " np.fill_diagonal(matrix[1:], off_diagonal_values)\n", + " np.fill_diagonal(matrix[:, 1:], off_diagonal_values)\n", + "\n", + " return matrix\n", + "\n", + "\n", + "def unique_val_tridiagonal(matrix):\n", + " \"\"\"\n", + " Extract unique values from a (tri)diagonal matrix in a specific order.\n", + " The value 0 is always placed at the end of the list.\n", + " \"\"\"\n", + " vals = _unique_values_core(matrix, mode=\"tridiagonal\")\n", + " non_zero = [v for v in vals if v != 0]\n", + " return non_zero + [0]\n", + "\n", + "\n", + "# Test case for tridiagonal symmetric matrix, let's take a 16x16 matrix\n", + "size = 16 # Must be a power of 2\n", + "matrix = generate_tridiagonal_symmetric_matrix(size)\n", + "matrix = np.round(matrix, 4)\n", + "print(\"Tridiagonal symmetric system\", matrix)\n", + "unique_values = unique_val_tridiagonal(\n", + " matrix\n", + ") # unique values in the matrix (each has a unique label- d)\n", + "\n", + "print(\"Unique values in the matrix:\", unique_values)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "21", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The circuit width is: 10\n", + "The circuit depth is: 1382\n", + "The reduced state vector for j when s=0, data=0 is:\n", + "[ 0.02 0.11 -0.03 -0.02 0.06 -0.09 -0. -0.06 -0.02 0.07 0.04 -0.12 -0.01 0.03 -0.08 -0.11]\n", + "Expected theoretical state vector:\n", + "[ 0.02 0.11 -0.03 -0.02 0.06 -0.09 -0. -0.06 -0.02 0.07 0.04 -0.12 -0.01 0.03 -0.08 -0.11]\n", + "********\n", + "The reduced state vector for j when s=0, data=0 is:\n", + "[ 0.02 0.11 -0.03 -0.02 0.06 -0.09 -0. -0.06 -0.02 0.07 0.04 -0.12 -0.01 0.03 -0.08 -0.11]\n", + "Expected theoretical state vector:\n", + "[ 0.02 0.11 -0.03 -0.02 0.06 -0.09 -0. -0.06 -0.02 0.07 0.04 -0.12 -0.01 0.03 -0.08 -0.11]\n", + "********\n" + ] + } + ], + "source": [ + "@qfunc\n", + "def eq_sup(s: QNum):\n", + " inplace_prepare_amplitudes(\n", + " [np.sqrt(1 / 3), np.sqrt(1 / 3), 0, np.sqrt(1 / 3)], 0, s\n", + " )\n", + "\n", + "\n", + "@qfunc\n", + "def main(s: Output[QNum], j: Output[QNum], data: Output[QNum]):\n", + " n = int(math.log2(size))\n", + " allocate(2, s)\n", + " allocate(n, j)\n", + " allocate(1, data)\n", + "\n", + " apply_to_all(H, j)\n", + " eq_sup(s)\n", + " T_M = unique_values\n", + "\n", + " d = QNum(\"d\", n + 1, False, 0)\n", + " s0 = QNum(\"s0\", 1, False, 0)\n", + " s1 = QNum(\"s1\", 1, False, 0)\n", + " bind(s, [s0, s1])\n", + " control(s0 == 1, lambda: control(s1 == 0, lambda: inplace_add(-1, j)))\n", + "\n", + " bind([s0, j], d)\n", + " oracle_d(d, data, T_M)\n", + " bind(d, [s0, j])\n", + "\n", + " control(s1 == 1, lambda: inplace_add(1, j))\n", + " bind([s0, s1], s)\n", + "\n", + " invert(lambda: eq_sup(s))\n", + "\n", + "\n", + "backend_preferences = ClassiqBackendPreferences(backend_name=\"simulator_statevector\")\n", + "constraints = Constraints(\n", + " optimization_parameter=OptimizationParameter.DEPTH,\n", + " max_width=10, # change max_width as needed, minimum width is n+3\n", + ")\n", + "preferences = Preferences(timeout_seconds=900)\n", + "\n", + "qmod = create_model(main)\n", + "qmod = set_execution_preferences(\n", + " qmod,\n", + " execution_preferences=ExecutionPreferences(\n", + " num_shots=100000, backend_preferences=backend_preferences\n", + " ),\n", + ")\n", + "qmod = set_preferences(qmod, preferences)\n", + "qmod = set_constraints(qmod, constraints)\n", + "# write_qmod(\n", + "# qmod,\n", + "# 'tridiagonal_BE_size{}'.format(size)\n", + "# )\n", + "\n", + "qprog = synthesize(qmod)\n", + "# show(qprog)\n", + "circuit_width = qprog.data.width\n", + "circuit_depth = qprog.transpiled_circuit.depth\n", + "print(\"The circuit width is:\", circuit_width)\n", + "print(\"The circuit depth is:\", circuit_depth)\n", + "\n", + "job = execute(qprog)\n", + "results = job.result()[0].value\n", + "\n", + "reduced_state = get_projected_state_vector(results, \"j\", {\"s\": 0, \"data\": 0})\n", + "print(\"The reduced state vector for j when s=0, data=0 is:\")\n", + "print(reduced_state)\n", + "\n", + "theoretical_reduced_state = (\n", + " np.matmul(matrix, [1 / np.sqrt(size) for i in range(size)]) / 3\n", + ") # here 3 is the subnormalization factor\n", + "print(f\"Expected theoretical state vector:\")\n", + "print(theoretical_reduced_state)\n", + "print(\"********\")" + ] + }, + { + "cell_type": "markdown", + "id": "22", + "metadata": {}, + "source": [ + "___" + ] + }, + { + "cell_type": "markdown", + "id": "23", + "metadata": {}, + "source": [ + "### 4. Two-dimensional Laplacian\n", + "\n", + "The discrete Laplacian in one dimension is obtained from the second–order finite difference stencil \n", + "$$\n", + "\\Delta f(x_i) = \\frac{f(x_{i-1}) - 2 f(x_i) + f(x_{i+1})}{(\\Delta x)^2},\n", + "$$\n", + "which corresponds to a tridiagonal Toeplitz matrix with $-2/(\\Delta x)^2$ on the diagonal and $1/(\\Delta x)^2$ on the off-diagonals.\n", + "\n", + "To generalize this to two dimensions, consider a rectangular grid of size \n", + "$$\n", + "N_x \\times N_y,\n", + "$$\n", + "with grid spacings $\\Delta x$ and $\\Delta y$. \n", + "A grid point is indexed as $(a,b)$ with \n", + "$$\n", + "a = 0,\\ldots,N_x-1, \\qquad b = 0,\\ldots,N_y-1.\n", + "$$\n", + "\n", + "The 2D finite-difference Laplacian uses the standard 5-point stencil:\n", + "$$\n", + "\\Delta f(x_a, y_b)\n", + "=\n", + "\\frac{f(x_{a-1},y_b) - 2 f(x_a,y_b) + f(x_{a+1},y_b)}{(\\Delta x)^2}\n", + "+\n", + "\\frac{f(x_a,y_{b-1}) - 2 f(x_a,y_b) + f(x_a,y_{b+1})}{(\\Delta y)^2}.\n", + "$$\n", + "\n", + "To write this as a matrix, we flatten the 2D grid into a vector of length \n", + "$$\n", + "N = N_x N_y\n", + "$$\n", + "using **row-major ordering**:\n", + "$$\n", + "f_{a + b N_x} = f(x_a, y_b).\n", + "$$\n", + "\n", + "With this ordering, the Laplacian becomes an $N \\times N$ sparse matrix $A$. \n", + "Each row corresponds to a grid point and couples only to its nearest neighbors. \n", + "The matrix entries take only a few values:\n", + "$$\n", + "A_{a_1 + b_1 N_x,\\; a_2 + b_2 N_x} =\n", + "\\begin{cases}\n", + "A_0 = -2\\!\\left(\\frac{1}{(\\Delta x)^2} + \\frac{1}{(\\Delta y)^2}\\right), & a_1=a_2,\\; b_1=b_2, \\\\[6pt]\n", + "A_1 = \\frac{1}{(\\Delta x)^2}, & |a_1-a_2| = 1,\\; b_1=b_2, \\\\[6pt]\n", + "A_2 = \\frac{1}{(\\Delta y)^2}, & |b_1-b_2| = 1,\\; a_1=a_2, \\\\[6pt]\n", + "0, & \\text{otherwise}.\n", + "\\end{cases}\n", + "$$\n", + "\n", + "This produces the familiar **five-diagonal block structure**: \n", + "- the main diagonal contains $A_0$, \n", + "- horizontal neighbors contribute $A_1$, \n", + "- vertical neighbors contribute $A_2$, \n", + "- all other entries are zero.\n", + "\n", + "For example, when $N_x = N_y = 4$, we get the below structure:\n", + "\n", + "\n", + "

    \n", + " \n", + "

    \n", + "\n", + "\n", + "Below is the full block encoding circuit (which is also Hermitian in this case):\n", + "\n", + "

    \n", + " \n", + "

    \n", + "\n", + "Here the subnormalization factor is $5$ and $5$ ancilla qubits are used, irrespective of matrix size. \n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "24", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2D Laplacian Matrix:\n", + " [[-4. 1. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", + " [ 1. -4. 1. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", + " [ 0. 1. -4. 1. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", + " [ 0. 0. 1. -4. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]\n", + " [ 1. 0. 0. 0. -4. 1. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]\n", + " [ 0. 1. 0. 0. 1. -4. 1. 0. 0. 1. 0. 0. 0. 0. 0. 0.]\n", + " [ 0. 0. 1. 0. 0. 1. -4. 1. 0. 0. 1. 0. 0. 0. 0. 0.]\n", + " [ 0. 0. 0. 1. 0. 0. 1. -4. 0. 0. 0. 1. 0. 0. 0. 0.]\n", + " [ 0. 0. 0. 0. 1. 0. 0. 0. -4. 1. 0. 0. 1. 0. 0. 0.]\n", + " [ 0. 0. 0. 0. 0. 1. 0. 0. 1. -4. 1. 0. 0. 1. 0. 0.]\n", + " [ 0. 0. 0. 0. 0. 0. 1. 0. 0. 1. -4. 1. 0. 0. 1. 0.]\n", + " [ 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 1. -4. 0. 0. 0. 1.]\n", + " [ 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. -4. 1. 0. 0.]\n", + " [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 1. -4. 1. 0.]\n", + " [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 1. -4. 1.]\n", + " [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 1. -4.]]\n" + ] + } + ], + "source": [ + "# Laplacian Matrix\n", + "def generate_laplacian_matrix(Nx, Ny, delta_x, delta_y):\n", + " N = Nx * Ny\n", + " A = np.zeros((N, N))\n", + "\n", + " A0 = -2 / (delta_x**2) - 2 / (delta_y**2)\n", + " A1 = 1 / (delta_x**2)\n", + " A2 = 1 / (delta_y**2)\n", + "\n", + " for a1 in range(Nx):\n", + " for b1 in range(Ny):\n", + " index = a1 + b1 * Nx\n", + "\n", + " A[index, index] = A0\n", + "\n", + " # off-diagonal in x-direction\n", + " if a1 > 0:\n", + " A[index, index - 1] = A1\n", + " if a1 < Nx - 1:\n", + " A[index, index + 1] = A1\n", + "\n", + " # off-diagonal in y-direction\n", + " if b1 > 0:\n", + " A[index, index - Nx] = A2\n", + " if b1 < Ny - 1:\n", + " A[index, index + Nx] = A2\n", + "\n", + " return A\n", + "\n", + "\n", + "def unique_val_lap(laplacian, Nx):\n", + " \"\"\"Extract unique diagonal values from a 2D Laplacian matrix.\"\"\"\n", + " return _unique_values_core(laplacian, mode=\"laplacian\", Nx=Nx)\n", + "\n", + "\n", + "# Test case for 2D Laplacian matrix\n", + "Nx = 4 # Number of grid points in x-direction (must be a power of 2)\n", + "Ny = 4 # Number of grid points in y-direction (must be a power of 2)\n", + "delta_x = 1.0 # Grid spacing in x-direction\n", + "delta_y = 1.0 # Grid spacing in y-direction\n", + "laplacian = generate_laplacian_matrix(Nx, Ny, delta_x, delta_y)\n", + "print(\"2D Laplacian Matrix:\\n\", laplacian)\n", + "lap_scaled = laplacian / np.max(np.abs(laplacian))\n", + "\n", + "unique_values_laplacian = unique_val_lap(lap_scaled, Nx)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "25", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The circuit width is: 10\n", + "The circuit depth is: 324\n", + "The reduced state vector for j when s=0, data=0 is:\n", + "[0.03 0.01 0.01 0.03 0.01 0. 0. 0.01 0.01 0. 0. 0.01 0.03 0.01 0.01 0.03]\n", + "Expected theoretical state vector:\n", + "[-0.03 -0.01 -0.01 -0.03 -0.01 0. 0. -0.01 -0.01 0. 0. -0.01 -0.03 -0.01 -0.01 -0.03]\n", + "********\n" + ] + } + ], + "source": [ + "j1 = int(math.log2(Nx))\n", + "j2 = int(math.log2(Ny))\n", + "\n", + "\n", + "@qfunc\n", + "def eq_sup_lap(s: QNum):\n", + " inplace_prepare_state([1 / 5, 0, 1 / 5, 1 / 5, 1 / 5, 1 / 5, 0, 0], 0, s)\n", + "\n", + "\n", + "@qfunc\n", + "def oracle_org(s: QArray, j: QNum, dlt: QBit):\n", + " j1 = math.log2(Nx)\n", + " j2 = math.log2(Ny)\n", + " j1reg = QNum(\"j1\", j1, False, 0)\n", + " j2reg = QNum(\"j2\", j2, False, 0)\n", + " s0 = QNum(\"s0\", 1, False, 0)\n", + " s1 = QNum(\"s1\", 1, False, 0)\n", + " s2 = QNum(\"s2\", 1, False, 0)\n", + " bind(s, [s0, s1, s2])\n", + " bind(j, [j1reg, j2reg])\n", + " control(s0 == 1, lambda: control(s1 == 0, lambda: control(s2 == 0, lambda: X(dlt))))\n", + " control(s1 == 1, lambda: control(j1reg == 0, lambda: X(dlt)))\n", + " control(s2 == 1, lambda: control(j2reg == 0, lambda: X(dlt)))\n", + " bind([j1reg, j2reg], j)\n", + " bind([s0, s1, s2], s)\n", + "\n", + "\n", + "@qfunc\n", + "def laplacian_BE(s: QNum, j: QNum, data: QNum, dlt: QNum):\n", + " j1reg = QNum(\"j1\", j1, False, 0)\n", + " j2reg = QNum(\"j2\", j2, False, 0)\n", + " s0 = QNum(\"s0\", 1, False, 0)\n", + " s1 = QNum(\"s1\", 1, False, 0)\n", + " s2 = QNum(\"s2\", 1, False, 0)\n", + " bind(s, [s0, s1, s2])\n", + " bind(j, [j1reg, j2reg])\n", + " control(s0 == 0, lambda: control(s2 == 1, lambda: inplace_add(1, j2reg)))\n", + " bind([j1reg, j2reg], j)\n", + " control(s1 == 1, lambda: control(s0 == 0, lambda: inplace_add(1, j)))\n", + " bind([s0, s1, s2], s)\n", + "\n", + " oracle_org(s, j, dlt)\n", + "\n", + " bind(s, [s0, s1, s2])\n", + " d = QNum(\"d\", 2, False, 0)\n", + " bind([s1, s2], d)\n", + " Z(data)\n", + " oracle_d(d, data, unique_values_laplacian)\n", + " bind(d, [s1, s2])\n", + "\n", + " control(s1 == 1, lambda: X(s0))\n", + " control(s2 == 1, lambda: X(s0))\n", + "\n", + " control(\n", + " s1 == 1, lambda: control(s0 == 0, lambda: inplace_add(-1, j))\n", + " ) # is j=0 here causing an issue? problem here when superposition used\n", + " bind(j, [j1reg, j2reg])\n", + " control(\n", + " s2 == 1, lambda: control(s0 == 0, lambda: inplace_add(-1, j2reg))\n", + " ) # is j=0 here causing an issue?\n", + " bind([j1reg, j2reg], j)\n", + " bind([s0, s1, s2], s)\n", + "\n", + "\n", + "@qfunc\n", + "def main(s: Output[QNum], j: Output[QNum], data: Output[QNum], dlt: Output[QBit]):\n", + " allocate(3, s)\n", + " allocate(1, dlt)\n", + " allocate(1, data)\n", + " allocate(j1 + j2, j)\n", + " apply_to_all(H, j)\n", + "\n", + " within_apply(lambda: eq_sup_lap(s), lambda: laplacian_BE(s, j, data, dlt))\n", + "\n", + "\n", + "# print(states)\n", + "qmod = create_model(main)\n", + "backend_preferences = ClassiqBackendPreferences(backend_name=\"simulator_statevector\")\n", + "qmod = set_execution_preferences(\n", + " qmod,\n", + " execution_preferences=ExecutionPreferences(\n", + " num_shots=1000000, backend_preferences=backend_preferences\n", + " ),\n", + ")\n", + "constraints = Constraints(\n", + " optimization_parameter=OptimizationParameter.DEPTH,\n", + " max_width=10, # change max_width as needed, minimum width is j1+j2+5\n", + ")\n", + "qmod = set_constraints(qmod, constraints)\n", + "\n", + "# write_qmod(\n", + "# qmod,\n", + "# 'laplacian_BE_Nx{}_Ny{}'.format(Nx, Ny)\n", + "# )\n", + "\n", + "qprog = synthesize(qmod)\n", + "# show(qprog)\n", + "circuit_width = qprog.data.width\n", + "circuit_depth = qprog.transpiled_circuit.depth\n", + "print(\"The circuit width is:\", circuit_width)\n", + "print(\"The circuit depth is:\", circuit_depth)\n", + "\n", + "job = execute(qprog)\n", + "results = job.result()[0].value\n", + "\n", + "# Post processing\n", + "reduced_state = get_projected_state_vector(results, \"j\", {\"s\": 0, \"data\": 0, \"dlt\": 0})\n", + "print(\"The reduced state vector for j when s=0, data=0 is:\")\n", + "print(reduced_state)\n", + "\n", + "# theoretical reduced state vector\n", + "theoretical_reduced_state = (\n", + " np.matmul(lap_scaled, [1 / np.sqrt(Nx * Ny) for i in range(Nx * Ny)]) / 5\n", + ")\n", + "print(f\"Expected theoretical state vector:\")\n", + "print(theoretical_reduced_state)\n", + "print(\"********\")" + ] + }, + { + "cell_type": "markdown", + "id": "26", + "metadata": {}, + "source": [ + "____" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qiskit-fresh", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.18" + } + }, + "nbformat": 4, + "nbformat_minor": 9 +} diff --git a/applications/block_encoding/symmetric_tridiagonal.png b/applications/block_encoding/symmetric_tridiagonal.png new file mode 100644 index 0000000000000000000000000000000000000000..4fc96529bafea288475022a9c8eff7bdb242887b GIT binary patch literal 19439 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 literal 0 HcmV?d00001 diff --git a/applications/block_encoding/toeplitz_BE_N16.qmod b/applications/block_encoding/toeplitz_BE_N16.qmod new file mode 100644 index 000000000..431b60594 --- /dev/null +++ b/applications/block_encoding/toeplitz_BE_N16.qmod @@ -0,0 +1,42 @@ +qfunc oracle_d(s: qnum, data: qnum, TM: real[]) { + repeat (i: TM::len) { + control (s == i) { + RX(2 * acos(TM[i]), data); + } + } +} + +qfunc oracle_r(j: qnum, s: qnum, k: int) { + j += s - k; +} + +qfunc Toep_BE(data: qnum, s: qnum, j: qnum, dlt: qbit) { + oracle_d(s, data, [ + 0.6406, + 0.6246, + (-0.3873), + 0.952 + ]); + tmp: qnum; + tmp = (s - 1) + j; + oracle_r(j, s, 1); + control (tmp < 0) { + X(dlt); + } + control (tmp >= 16) { + X(dlt); + } +} + +qfunc main(output data: qnum, output s: qnum, output j: qnum, output dlt: qbit) { + allocate(2, s); + allocate(4, j); + allocate(1, data); + allocate(1, dlt); + apply_to_all(H, j); + within { + apply_to_all(H, s); + } apply { + Toep_BE(data, s, j, dlt); + } +} diff --git a/applications/block_encoding/toeplitz_BE_N16.synthesis_options.json b/applications/block_encoding/toeplitz_BE_N16.synthesis_options.json new file mode 100644 index 000000000..1815d2e1c --- /dev/null +++ b/applications/block_encoding/toeplitz_BE_N16.synthesis_options.json @@ -0,0 +1,45 @@ +{ + "constraints": { + "max_gate_count": {}, + "max_width": 18, + "optimization_parameter": "depth" + }, + "preferences": { + "custom_hardware_settings": { + "basis_gates": [ + "z", + "rz", + "u", + "u2", + "sx", + "cx", + "cz", + "cy", + "y", + "tdg", + "r", + "rx", + "sdg", + "t", + "x", + "s", + "u1", + "ry", + "p", + "id", + "sxdg", + "h" + ], + "is_symmetric_connectivity": true + }, + "debug_mode": true, + "machine_precision": 8, + "optimization_level": 3, + "output_format": ["qasm"], + "pretty_qasm": true, + "random_seed": 2157362051, + "synthesize_all_separately": false, + "timeout_seconds": 1500, + "transpilation_option": "auto optimize" + } +} diff --git a/applications/block_encoding/toeplitz_circuit.png b/applications/block_encoding/toeplitz_circuit.png new file mode 100644 index 0000000000000000000000000000000000000000..95c005c1ff23bcabc9c3b21cea08d46461fe5fa4 GIT binary patch literal 29793 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 literal 0 HcmV?d00001 diff --git a/applications/block_encoding/tridiagonal_BE_size16.qmod b/applications/block_encoding/tridiagonal_BE_size16.qmod new file mode 100644 index 000000000..b9020adb4 --- /dev/null +++ b/applications/block_encoding/tridiagonal_BE_size16.qmod @@ -0,0 +1,71 @@ +qfunc eq_sup(s: qnum) { + inplace_prepare_amplitudes([0.5774, 0.5774, 0, 0.5774], 0, s); +} + +qfunc oracle_d(s: qnum, data: qnum, TM: real[]) { + repeat (i: TM::len) { + control (s == i) { + RX(2 * acos(TM[i]), data); + } + } +} + +qfunc main(output s: qnum, output j: qnum, output data: qnum) { + allocate(2, s); + allocate(4, j); + allocate(1, data); + apply_to_all(H, j); + eq_sup(s); + d: qnum<5, False, 0>; + s0: qnum<1, False, 0>; + s1: qnum<1, False, 0>; + s -> {s0, s1}; + control (s0 == 1) { + control (s1 == 0) { + j += -1; + } + } + {s0, j} -> d; + oracle_d(d, data, [ + 0.8015, + (-0.8087), + 0.6652, + (-0.1181), + (-0.2983), + 0.6675, + 0.8014, + 0.6437, + 0.7776, + 0.3898, + (-0.7502), + (-0.2429), + 0.683, + 0.2305, + 0.1147, + 0.6802, + 0.7784, + 0.3091, + (-0.2962), + (-0.2641), + 0.7889, + 0.3176, + 0.1564, + (-0.4584), + (-0.3464), + 0.5023, + (-0.1425), + (-0.8012), + 0.811, + 0.0217, + 0.465, + 0 + ]); + d -> {s0, j}; + control (s1 == 1) { + j += 1; + } + {s0, s1} -> s; + invert { + eq_sup(s); + } +} diff --git a/applications/block_encoding/tridiagonal_BE_size16.synthesis_options.json b/applications/block_encoding/tridiagonal_BE_size16.synthesis_options.json new file mode 100644 index 000000000..8fc9f1360 --- /dev/null +++ b/applications/block_encoding/tridiagonal_BE_size16.synthesis_options.json @@ -0,0 +1,45 @@ +{ + "constraints": { + "max_gate_count": {}, + "max_width": 10, + "optimization_parameter": "depth" + }, + "preferences": { + "custom_hardware_settings": { + "basis_gates": [ + "z", + "rz", + "u", + "u2", + "sx", + "cx", + "cz", + "cy", + "y", + "tdg", + "r", + "rx", + "sdg", + "t", + "x", + "s", + "u1", + "ry", + "p", + "id", + "sxdg", + "h" + ], + "is_symmetric_connectivity": true + }, + "debug_mode": true, + "machine_precision": 8, + "optimization_level": 1, + "output_format": ["qasm"], + "pretty_qasm": true, + "random_seed": 2292430670, + "synthesize_all_separately": false, + "timeout_seconds": 900, + "transpilation_option": "auto optimize" + } +} diff --git a/applications/block_encoding/tridiagonal_symmetric_circuit.png b/applications/block_encoding/tridiagonal_symmetric_circuit.png new file mode 100644 index 0000000000000000000000000000000000000000..e71c0a072116d41ad1dd2c143d783f6192f08af5 GIT binary patch literal 41856 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 literal 0 HcmV?d00001 diff --git a/tests/notebooks/test_select_structures_BE.py b/tests/notebooks/test_select_structures_BE.py new file mode 100644 index 000000000..9e0f31441 --- /dev/null +++ b/tests/notebooks/test_select_structures_BE.py @@ -0,0 +1,21 @@ +from tests.utils_for_testbook import ( + validate_quantum_program_size, + validate_quantum_model, + wrap_testbook, +) +from testbook.client import TestbookNotebookClient + + +@wrap_testbook("select_structures_BE", timeout_seconds=600) +def test_notebook(tb: TestbookNotebookClient) -> None: + # test models + validate_quantum_model(tb.ref("qmod")) + # test quantum programs + validate_quantum_program_size( + tb.ref_pydantic("qprog"), + expected_width=None, + expected_depth=None, + ) + + # test notebook content + pass # Todo diff --git a/tests/resources/timeouts.yaml b/tests/resources/timeouts.yaml index 85a239109..a230e13dc 100644 --- a/tests/resources/timeouts.yaml +++ b/tests/resources/timeouts.yaml @@ -53,6 +53,7 @@ bpde.qmod: 10 cheb_lcu_solver_banded_be.qmod: 400 cheb_lcu_solver_pauli_be.qmod: 400 chebyshev_approximation.ipynb: 20 +checkerboard_BE_N8.qmod: 200 classiq_chemistry_application.ipynb: 80 classiq_discrete_quantum_walk.ipynb: 300 classiq_iQuHack_2025_final.ipynb: 200 @@ -154,6 +155,7 @@ ising_model.ipynb: 300 ising_model.qmod: 300 kidney_exchange_problem.ipynb: 300 kidney_exchange_problem.qmod: 300 +laplacian_BE_Nx4_Ny4.qmod: 200 learning_optimization.ipynb: 80 linear_combination_of_unitaries.ipynb: 20 linear_combination_of_unitaries.qmod: 10 @@ -304,6 +306,7 @@ rectangles_packing.qmod: 1800 rectangles_packing_grid.ipynb: 1800 second_quantized_hamiltonian.ipynb: 44 second_quantized_hamiltonian.qmod: 40 +select_structures_BE.ipynb: 20 set_cover.ipynb: 1440 set_cover.qmod: 1216 set_partition.ipynb: 350 @@ -337,8 +340,10 @@ time_marching.ipynb: 500 time_marching.qmod: 400 tket_discrete_quantum_walk.ipynb: 300 tket_qsvt_example.ipynb: 300 +toeplitz_BE_N16.qmod: 200 traveling_salesman_problem.ipynb: 1068 traveling_salesman_problem.qmod: 1068 +tridiagonal_BE_size16.qmod: 200 unitary.ipynb: 20 unitary.qmod: 10 variational_data_encoding.ipynb: 20 From 7e08f694248c27e10a5e55be97f7fc130707e445 Mon Sep 17 00:00:00 2001 From: bit2qbit Date: Thu, 20 Nov 2025 11:22:03 +0530 Subject: [PATCH 2/4] docs(block-encoding): fix nbstripout normalization --- .../block_encoding/select_structures_BE.ipynb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/applications/block_encoding/select_structures_BE.ipynb b/applications/block_encoding/select_structures_BE.ipynb index b3a459b9b..407477e22 100644 --- a/applications/block_encoding/select_structures_BE.ipynb +++ b/applications/block_encoding/select_structures_BE.ipynb @@ -1330,6 +1330,24 @@ "source": [ "____" ] + }, + { + "cell_type": "markdown", + "id": "27", + "metadata": {}, + "source": [ + "### Reference\n", + "\n", + "- Sunderhauf, C., Campbell, E., Camps, J.: Block-encoding structured matrices fordata input in quantum computing. Quantum 8, 1226 (2024) https://doi.org/10.22331/q-2024-01-11-1226." + ] + }, + { + "cell_type": "markdown", + "id": "28", + "metadata": {}, + "source": [ + "___" + ] } ], "metadata": { From 5ef3e51efc2b88d727a1cb70555c9295b836ea7f Mon Sep 17 00:00:00 2001 From: bit2qbit Date: Thu, 20 Nov 2025 11:59:33 +0530 Subject: [PATCH 3/4] docs(block-encoding): fix broken_link --- applications/block_encoding/select_structures_BE.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/block_encoding/select_structures_BE.ipynb b/applications/block_encoding/select_structures_BE.ipynb index 407477e22..d86c9bcb8 100644 --- a/applications/block_encoding/select_structures_BE.ipynb +++ b/applications/block_encoding/select_structures_BE.ipynb @@ -8,7 +8,7 @@ "# Block encoding of select structured matrices\n", "___\n", "\n", - "This work is an implementation of the paper on [Block-encoding structured matrices for data input in quantum computing](https://quantum-journal.org/papers/q-2024-01-11-1226/)." + "This work is an implementation of the paper on **Block-encoding structured matrices for data input in quantum computing** (https://quantum-journal.org/papers/q-2024-01-11-1226/)." ] }, { @@ -30,7 +30,7 @@ "\n", "where, $A = \\alpha \\tilde{A}$ . The parameters $(\\alpha, a)$ represent the *subnormalization factor* (which adjusts for encoding matrices of any norm), and the *number of ancilla qubits* used in the block-encoding scheme respectively. \n", "\n", - "Efficiently block encoding arbitrary matrices is a very difficult problem and this task is not trivial even for well structured and sparse matrices. The [paper by Sunderhauf et al. 2024](https://quantum-journal.org/papers/q-2024-01-11-1226/), provides for efficient quantum circuits for block encoding arithmetically structured matrices. This is useful in many applications, especially ones involving problems of linear algebra. Moreover, given an efficient block encoding of a matrix $\\tilde{A}$, its possible to efficiently construct a block encoding of certain polynomials of $\\tilde{A}$ through quantum singular value transformations (QSVT). \n", + "Efficiently block encoding arbitrary matrices is a very difficult problem and this task is not trivial even for well structured and sparse matrices. The paper by Sunderhauf et al. 2024 (https://quantum-journal.org/papers/q-2024-01-11-1226/), provides for efficient quantum circuits for block encoding arithmetically structured matrices. This is useful in many applications, especially ones involving problems of linear algebra. Moreover, given an efficient block encoding of a matrix $\\tilde{A}$, its possible to efficiently construct a block encoding of certain polynomials of $\\tilde{A}$ through quantum singular value transformations (QSVT). \n", "\n", "### **Notebook contents**\n", "- ##### Block encoding circuits for Checkerboard matrix, Toeplitz matrix, Tridiagonal symmetric matrix and 2D Laplacian matrix.\n", From faadc5086e75d472b44b3cb3c73fe58bd7f28b59 Mon Sep 17 00:00:00 2001 From: bit2qbit Date: Wed, 26 Nov 2025 17:55:45 +0530 Subject: [PATCH 4/4] feat(block-encoding): added paper implementation as per Issue 1268 --- .../Block_encoding-ND_Laplacian/1D_Lap_BE.png | Bin 0 -> 33366 bytes .../1D_Periodic_Laplacian_BE.qmod | 25 + ...riodic_Laplacian_BE.synthesis_options.json | 45 + .../1D_structure.png | Bin 0 -> 18592 bytes .../1d_discretization.png | Bin 0 -> 20547 bytes .../2D_Lap_structure.png | Bin 0 -> 22057 bytes .../3D_Lap_structure.png | Bin 0 -> 23910 bytes .../Ddim_Lap_BE.png | Bin 0 -> 77258 bytes .../ND_Laplacian_BE.ipynb | 791 ++++++++++++++++++ .../ND_Periodic_Laplacian_BE.qmod | 41 + ...riodic_Laplacian_BE.synthesis_options.json | 45 + tests/notebooks/test_ND_Laplacian_BE.py | 21 + tests/resources/timeouts.yaml | 3 + 13 files changed, 971 insertions(+) create mode 100644 applications/Block_encoding-ND_Laplacian/1D_Lap_BE.png create mode 100644 applications/Block_encoding-ND_Laplacian/1D_Periodic_Laplacian_BE.qmod create mode 100644 applications/Block_encoding-ND_Laplacian/1D_Periodic_Laplacian_BE.synthesis_options.json create mode 100644 applications/Block_encoding-ND_Laplacian/1D_structure.png create mode 100644 applications/Block_encoding-ND_Laplacian/1d_discretization.png create mode 100644 applications/Block_encoding-ND_Laplacian/2D_Lap_structure.png create mode 100644 applications/Block_encoding-ND_Laplacian/3D_Lap_structure.png create mode 100644 applications/Block_encoding-ND_Laplacian/Ddim_Lap_BE.png create mode 100644 applications/Block_encoding-ND_Laplacian/ND_Laplacian_BE.ipynb create mode 100644 applications/Block_encoding-ND_Laplacian/ND_Periodic_Laplacian_BE.qmod create mode 100644 applications/Block_encoding-ND_Laplacian/ND_Periodic_Laplacian_BE.synthesis_options.json create mode 100644 tests/notebooks/test_ND_Laplacian_BE.py diff --git a/applications/Block_encoding-ND_Laplacian/1D_Lap_BE.png b/applications/Block_encoding-ND_Laplacian/1D_Lap_BE.png new file mode 100644 index 0000000000000000000000000000000000000000..d9caef1966371fac729906bdee47c4b3637803c6 GIT binary patch literal 33366 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 C^*~Gj literal 0 HcmV?d00001 diff --git a/applications/Block_encoding-ND_Laplacian/1D_Periodic_Laplacian_BE.qmod b/applications/Block_encoding-ND_Laplacian/1D_Periodic_Laplacian_BE.qmod new file mode 100644 index 000000000..828f03574 --- /dev/null +++ b/applications/Block_encoding-ND_Laplacian/1D_Periodic_Laplacian_BE.qmod @@ -0,0 +1,25 @@ +qfunc subtractor_mod(a: qnum) { + a += -1; +} + +qfunc adder_mod(a: qnum) { + a += 1; +} + +qfunc main(output j: qnum, output l: qnum) { + allocate(5, j); + allocate(2, l); + apply_to_all(H, l); + apply_to_all(Z, l); + l_arr: qbit[]; + l -> l_arr; + control (l_arr[0] == 0) { + subtractor_mod(j); + } + control (l_arr[1] == 1) { + adder_mod(j); + } + l_arr -> l; + apply_to_all(H, l); + apply_to_all(Z, l); +} diff --git a/applications/Block_encoding-ND_Laplacian/1D_Periodic_Laplacian_BE.synthesis_options.json b/applications/Block_encoding-ND_Laplacian/1D_Periodic_Laplacian_BE.synthesis_options.json new file mode 100644 index 000000000..9ed1d3f02 --- /dev/null +++ b/applications/Block_encoding-ND_Laplacian/1D_Periodic_Laplacian_BE.synthesis_options.json @@ -0,0 +1,45 @@ +{ + "constraints": { + "max_gate_count": {}, + "max_width": 18, + "optimization_parameter": "depth" + }, + "preferences": { + "custom_hardware_settings": { + "basis_gates": [ + "tdg", + "z", + "sx", + "u1", + "cx", + "h", + "p", + "x", + "ry", + "s", + "cy", + "t", + "r", + "cz", + "u", + "rx", + "y", + "id", + "sdg", + "u2", + "rz", + "sxdg" + ], + "is_symmetric_connectivity": true + }, + "debug_mode": true, + "machine_precision": 8, + "optimization_level": 1, + "output_format": ["qasm"], + "pretty_qasm": true, + "random_seed": 185454979, + "synthesize_all_separately": false, + "timeout_seconds": 300, + "transpilation_option": "auto optimize" + } +} diff --git a/applications/Block_encoding-ND_Laplacian/1D_structure.png b/applications/Block_encoding-ND_Laplacian/1D_structure.png new file mode 100644 index 0000000000000000000000000000000000000000..95e429916557c3612cc9a802302ce234ffc4156f GIT binary patch literal 18592 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 literal 0 HcmV?d00001 diff --git a/applications/Block_encoding-ND_Laplacian/1d_discretization.png b/applications/Block_encoding-ND_Laplacian/1d_discretization.png new file mode 100644 index 0000000000000000000000000000000000000000..8535d49584981e7d4a6d22359839d9997de5d978 GIT binary patch literal 20547 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 literal 0 HcmV?d00001 diff --git a/applications/Block_encoding-ND_Laplacian/2D_Lap_structure.png b/applications/Block_encoding-ND_Laplacian/2D_Lap_structure.png new file mode 100644 index 0000000000000000000000000000000000000000..e77b626d0cc9f49569046528183b82f7cb008d04 GIT binary patch literal 22057 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 z zDt}Vc|FlrCHF2R75}5rS*KEZeet1&)e9P*gYRNAL;_du#GxIdxWD9Z-1xi^l|h!^sFas#>J*PR4Vr>CQ`xReEz{n9 zd>pgpu#vX z^E`z5kU9k~xb7@H5CjEEd!q;P3{Bds)5vRZ5PPp33oq8tN5+9!(iMpAm-LkwO@d-= zJbiESy$IQAEKBH!&fC1Sg${@#3>Zce>g*z!&H*xx59I+1nL&o2STE$>cze3&^y!*p zSF&7q&%rlPqCLa=Ao2Vb-kfqhGAM|G>=kgLnMs!&&=5YnsfN!ZhfS{H&q0J;y4if| z3Zhxmb|8u85qMC(ZzQ8cTt<*ALk6CsXxM!d1lG}Msma#4o?Pp-<0+6g+JV=d{V28s zk37S^Rd;_I=OD14$b}5eD^P~2OEw>eT#?v_op3g=>3JtpVaQs>=eS64>SN9r-IM>Y z=;zQTs_iLWXq#Pmy%ifB4=M}g(fSy8jny@rX>c>Q-49@oMpW81A5CSj;#Z?w*3};x zB8ig=HVa@{*cbBLuZO^iwKnyo0SdcI?OCmpZ!kH_I-{%u$UCo=oGeP`dBGh<8C#xg zKOQ14nFX(zQFZ$`7vl=Y3XKIyozu##~_Z?ShYPb1q@81L48U$X6y zq<~|%a}nDf+v^Ret6OAKBR#g5HA3e^nPB2uUdFp|H}t`JCWQb5%aBk49~S&C5wzTTERRC znORxu>8vs{|IRA_qS}miBdYG@&sxN6X|8^$&91LyM}+J)$0R8u4W(H7rrtaw`nD-%%+HAI$LjSt+t-Cwjx($$&Q(Mb`|#y zIcE>t4&+bo0&B7N)qj2APa<#EmT&mVYTv7Buc%D6&o){wi)i2Cst+1FrF05r)fg|8G#g{Jx2|oEZOX!Czim>XLr7+%TDNn} z^(39Mz`ccNQ|zX@Xbjh-D=zkG4P??~jLV#vyz7tZvTYXrG#OO3F?$(o;KD1 zD`B}6$=kHuIi>S+m_DwLjW@J&$JzN7v|7wgEB4C*V(I+@f|OP~+*r$#9MY^79l)L+ zm+i&UFA4R4;#y|9HbDFKTc%J^-I%N~SrjReAO z1fMWB%#p+bddt~pD@0pA?&;(>-MfBOYCzJ9Q)GmT^ zAVrP75k#Q!Anz2Orj&L@u7kaVd$AJrMXkhsmBL-MJt*Zo*5v{d69B5?qKvp!}0gbZ;_28p!D z2}Z)TrXi@pIK<#G=sq~_JPizXQr_^vscOSoHdQJ|_ zqGt+rK%@6FBz#wj#W6vS;HWbwk(6 z^(4&&Z=i~GByP%s?{{OS+@ag(Xf2o^XenXHCIk=9x)88m^OD7F4H&4yqH+w@Gnt#E zpsfeI-RFgZoT5d!;{C6IpIA^kliI!%g22zgC9kj)@BcPhaQv;sI2CrpEd6%#H=I2~ zZLn=77$J=AF~kwYSqYdZV1TlT#B4MXp>cGI-xd7%@)CM)^5BspNAjk)rsTg{+gJHV z=0{ooy+LpHSq_3@p2tgHSWpp%L}t^@A-0JFfu06D>?TIpJUci`n&ql)1-tOP*Q6mq z|NHbqu*((-hv!4ye+ju6`UP) zPnuC4nem=vj*cZelXWR2yeBaLBD_551w5pk)%NC;7#s7`7R*d7OYD8<)}n|@uWo?F zzK!%hFilj`tJ=qnn31;Nng5(OoGx)ArJcWIw=<$U@!HSIUEWmj($qKVZjTiPCCcjX y=Twh~I%<;Mf?6b?%nMVZfrJ)c{zc;cu}{?Ij?j)4dJ$$IirN?u>R;}cnEO9UK$&p> literal 0 HcmV?d00001 diff --git a/applications/Block_encoding-ND_Laplacian/3D_Lap_structure.png b/applications/Block_encoding-ND_Laplacian/3D_Lap_structure.png new file mode 100644 index 0000000000000000000000000000000000000000..044e47f62886ffeb9bce31141dbef4f054bb2e33 GIT binary patch literal 23910 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%0AB(uU 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 P!N2oo)ReMMo8JCEb3J*Q literal 0 HcmV?d00001 diff --git a/applications/Block_encoding-ND_Laplacian/ND_Laplacian_BE.ipynb b/applications/Block_encoding-ND_Laplacian/ND_Laplacian_BE.ipynb new file mode 100644 index 000000000..f2735d11a --- /dev/null +++ b/applications/Block_encoding-ND_Laplacian/ND_Laplacian_BE.ipynb @@ -0,0 +1,791 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "0", + "metadata": {}, + "source": [ + "# A block encoding circuit for a D-dimensional Laplacian with periodic boundary conditions\n", + "\n", + "___\n", + "\n", + "\n", + "This work is an implementation of the paper on **Efficient and Explicit Block Encoding of Finite Difference Discretizations of the Laplacian** (https://arxiv.org/abs/2509.02429)." + ] + }, + { + "cell_type": "markdown", + "id": "1", + "metadata": {}, + "source": [ + "### **Introduction**\n", + "\n", + "Block encoding is a well known technique in quantum computing used to embed non-unitary matrices on a quantum computer that only allows for unitary evolution. \n", + "\n", + "***Definition:*** \n", + " Let $ a, n, m \\in \\mathbb{N} $ such that $ m = a + n $. A $ m $ -qubit unitary $ U $ is said to be an $(\\alpha, a)$ -block-encoding of an $ n $ -qubit operator $ A $ if \n", + "\n", + "$$\n", + "\\tilde{A} = \\left( \\langle 0 |^{\\otimes a} \\otimes I_n \\right) U \\left( |0 \\rangle^{\\otimes a} \\otimes I_n \\right)\n", + "\\tag{1}\n", + "$$ \n", + "\n", + "where, $A = \\alpha \\tilde{A}$ . The parameters $(\\alpha, a)$ represent the *subnormalization factor* (which adjusts for encoding matrices of any norm), and the *number of ancilla qubits* used in the block-encoding scheme respectively. \n", + "\n", + "Efficiently block encoding arbitrary matrices is a very difficult problem and this task is not trivial even for well structured and sparse matrices. The paper by Sturm et al. 2025 (https://arxiv.org/abs/2509.02429), provides for efficient quantum circuits for block encoding $N-$ dimensional Laplacians, with periodic boundary conditions along all dimensions. This is useful in many applications, especially ones involving problems of linear algebra. Moreover, given an efficient block encoding of a matrix $\\tilde{A}$, its possible to efficiently construct a block encoding of certain polynomials of $\\tilde{A}$ through quantum singular value transformations (QSVT). \n", + "\n", + "### **Notebook contents**\n", + "- ##### Block encoding circuits for D- dimensional Laplacian matrix with periodic boundary conditions along all dimnesions.\n", + "___" + ] + }, + { + "cell_type": "markdown", + "id": "2", + "metadata": {}, + "source": [ + "## Discretizing the $D$-Dimensional Laplacian with Periodic Boundary Conditions\n", + "\n", + "We consider the Laplacian operator on the $D$-dimensional unit hypercube \n", + "$$\n", + "\\Omega_D = [0,1]^D ,\n", + "$$\n", + "where a point is written as \n", + "$$\n", + "\\mathbf{x} = (x^{(0)}, x^{(1)}, \\ldots, x^{(D-1)}).\n", + "$$\n", + "\n", + "\n", + "The $D$-dimensional Laplacian is the sum of second derivatives along each coordinate axis:\n", + "\\begin{equation}\n", + "L_D = \\sum_{d=0}^{D-1} \\frac{\\partial^2}{\\partial (x^{(d)})^2}.\n", + "\\tag{1}\n", + "\\end{equation}\n", + "\n", + "We impose **periodic boundary conditions**, meaning the function repeats itself across opposite sides of the domain:\n", + "$$\n", + "v(x^{(0)},\\ldots,0,\\ldots,x^{(D-1)}) \n", + "= \n", + "v(x^{(0)},\\ldots,1,\\ldots,x^{(D-1)}).\n", + "$$\n", + "\n", + "This ensures the domain “wraps around” in **every dimension**.\n", + "\n", + "\n", + "To approximate the operator on a computer, we replace each interval with a **uniform grid** (*we assume equidistant grid points as per the paper*). \n", + "\n", + "For one dimension, choose\n", + "$$\n", + "\\Omega_{1,h} = \\{ jh \\mid j=0,1,\\dots,N-1 \\},\n", + "\\qquad h = \\frac{1}{N}.\n", + "$$\n", + "Because of periodicity, the point at $ x=1 $ is identical to $ x=0 $, so we only keep $ N $ samples.\n", + "\n", + "

    \n", + " \n", + "

    \n", + "\n", + "To build a $D$-dimensional grid, take the Cartesian product:\n", + "$$\n", + "\\Omega_{D,h} = \\Omega_{1,h} \\times \\cdots \\times \\Omega_{1,h}.\n", + "$$\n", + "\n", + "Each grid point is indexed by a $D$-tuple:\n", + "$$\n", + "(j^{(0)}, j^{(1)},\\ldots, j^{(D-1)}),\n", + "\\qquad j^{(d)} \\in \\{0,\\dots,N-1\\}.\n", + "$$\n", + "\n", + "The total number of points is \n", + "$$\n", + "N_D = N^D.\n", + "$$\n", + "\n", + "\n", + "To represent the function values as a vector, we map each integer index $j^{(i)}$ to a $2^n$ dimensional vector $\\ket{j^{(i)}}$ in the Hilbert sapce, where $N=2^n$. Thus, \n", + "$$\n", + "(j^{(0)},j^{(1)},\\ldots,j^{(D-1)})\n", + "\\quad \\longmapsto \\quad\n", + "j = \\ket{j^{(D-1)}}\\otimes \\cdots \\otimes\\ket{j^{(1)}}\\otimes\\ket{j^{(0)}},\n", + "$$\n", + "\n", + "This ordering turns the entire grid $\\Omega_{D,h}$ into a vector of $\\mathbf{\\Omega_{D,h}}$ size $N^D= 2^{nD}$ where,\n", + "\n", + "$$\n", + "\\mathbf{\\Omega_{D,h}}\n", + "= \\left( j^{(0)} h,\\; j^{(1)} h,\\; \\ldots,\\; j^{(D-1)} h \\right)\n", + "\\,\\lvert j^{(D-1)} \\rangle \\cdots \\lvert j^{(1)} \\rangle \\lvert j^{(0)} \\rangle .\n", + "$$\n", + "\n", + "___\n", + "\n", + "#### Building the 1D Finite-Difference Laplacian Matrix (Periodic Boundary Conditions)\n", + "\n", + "To construct the discrete Laplacian on a 1D periodic grid, we approximate the second\n", + "derivative using the standard centered finite-difference stencil.\n", + "\n", + "\n", + "We discretize the interval $[0,1]$ using \n", + "$$\n", + "x_j = jh, \\quad j = 0,1,\\dots, N-1, \\qquad h = \\frac{1}{N}.\n", + "$$\n", + "\n", + "Because the boundary is periodic, the point at $x=1$ is *identified* with $x=0$.\n", + "So the grid has exactly $N$ degrees of freedom.\n", + "\n", + "\n", + "\n", + "For a smooth function $u(x)$, the second derivative at grid point $x_j$ is approximated by\n", + "\n", + "$$\n", + "\\frac{d^2u}{dx^2}(x_j)\n", + "\\approx \n", + "\\frac{u_{j-1} - 2u_j + u_{j+1}}{h^2}.\n", + "$$\n", + "\n", + "This is the classic *three-point centered stencil*.\n", + "\n", + "Without periodicity, $u_{j-1}$ and $u_{j+1}$ would fail at the boundaries. \n", + "With periodicity, the grid “wraps around,” so:\n", + "\n", + "$$\n", + "u_{-1} \\equiv u_{N-1}, \\qquad \n", + "u_{N} \\equiv u_0.\n", + "$$\n", + "\n", + "This single idea gives the Laplacian its circulant structure.\n", + "\n", + "\n", + "For each point $j$, the finite-difference rule says:\n", + "\n", + "- coefficient of $u_{j-1}$ is $+1/h^2$\n", + "- coefficient of $u_{j}$ is $-2/h^2$\n", + "- coefficient of $u_{j+1}$ is $+1/h^2$\n", + "\n", + "Putting these coefficients into matrix form gives an $N \\times N$ matrix where:\n", + "\n", + "- the main diagonal contains $-2/h^2$\n", + "- the first upper and first lower diagonal contain $1/h^2$\n", + "- periodicity adds *two extra wrap-around entries*\n", + "\n", + "Specifically:\n", + "\n", + "- entry $(0, N-1)$ gets $+1/h^2$ (from $u_{-1}=u_{N-1}$)\n", + "- entry $(N-1, 0)$ gets $+1/h^2$ (from $u_N=u_0$)\n", + "\n", + "\n", + "Putting this together, the discrete $1D$ Laplacian is\n", + "\n", + "\\begin{equation}\n", + "L_{1,h} = \\frac{1}{h^2}\n", + "\\begin{pmatrix}\n", + "-2 & 1 & 0 & \\cdots & 0 & 1\\\\\n", + "1 & -2 & 1 & \\cdots & 0 & 0\\\\\n", + "0 & 1 & -2 & \\cdots & 0 & 0\\\\\n", + "\\vdots & \\vdots & \\vdots & \\ddots & \\vdots & \\vdots \\\\\n", + "1 & 0 & 0 & \\cdots & 1 & -2\n", + "\\end{pmatrix}.\n", + "\\tag{2}\n", + "\\end{equation}\n", + "\n", + "This matrix is the building block for higher-dimensional Laplacians via Kronecker sums.\n", + "\n", + "___\n", + "\n", + "\n", + "#### Building the D- dimensional Finite-Difference Laplacian Matrix (Periodic Boundary Conditions)\n", + "\n", + "\n", + "The discrete Laplacian on the full $D$-dimensional grid is a **Kronecker sum** of 1D Laplacians:\n", + "\n", + "\\begin{equation}\n", + "L_{D,h} \n", + "= \n", + "\\sum_{d=0}^{D-1}\n", + "I_N^{\\otimes (D-1-d)} \\otimes L_{1,h} \\otimes I_N^{\\otimes d}.\n", + "\\tag{3}\n", + "\\end{equation}\n", + "\n", + "Each term contributes the second derivative along one dimension, while identities preserve all other coordinates. \n", + "This operator is sparse: every grid point couples only to its $2D$ nearest periodic neighbors.\n", + "\n", + "\n", + "The maximum eigenvalue magnitude of the discrete Laplacian is known analytically:\n", + "$$\n", + "\\lambda_{D, \\max} = \\frac{4D}{h^2}.\n", + "$$\n", + "\n", + "To make the matrix have operator norm 1 (required for several quantum algorithms), define the **scaled Laplacian**:\n", + "$$\n", + "\\widetilde{L}_{D,h}\n", + "= \n", + "\\frac{1}{\\lambda_{D,\\max}} L_{D,h}\n", + "= \n", + "\\frac{1}{4D/h^2} L_{D,h}.\n", + "$$\n", + "\n", + "Plugging this into the Kronecker-sum representation yields\n", + "\n", + "\\begin{equation}\n", + "\\widetilde{L}_{D,h}\n", + "=\n", + "\\frac{1}{D}\n", + "\\sum_{d=0}^{D-1}\n", + "I_N^{\\otimes (D-1-d)} \\otimes \\widetilde{L}_{1,h} \\otimes I_N^{\\otimes d},\n", + "\\tag{4}\n", + "\\end{equation}\n", + "where\n", + "$$\n", + "\\widetilde{L}_{1,h} = \\frac{h^2}{4} L_{1,h}\n", + "$$\n", + "is the 1D Laplacian scaled to have norm 1.\n", + "\n", + "We now provide the block encoding of the scaled Laplacian matrix. \n", + "___" + ] + }, + { + "cell_type": "markdown", + "id": "3", + "metadata": {}, + "source": [ + "#### Block encoding the 1D scaled Laplacian matrix\n", + "\n", + "With periodic boundary conditions, the 1D Laplacian matrix has a circulant structure as shown (for $N= 16$ grid points): \n", + "\n", + "\n", + "

    \n", + " \n", + "

    \n", + "\n", + "This structure can be block encoded via a simple quantum circuit shown below: \n", + "\n", + "

    \n", + " \n", + "

    \n", + "\n", + "Here $S_{-}$ and $S_{+}$ are unitary operations that take $\\ket{j}$ to $\\ket{(j+1) \\mod{N}}$ and $\\ket{(j-1) \\mod{N}}$ respectively. \n", + "\n", + "One can easily see that the scaled 1D Laplacian can be written in terms of linear combination of unitaries as:\n", + "\n", + "\\begin{equation}\n", + "\\widetilde L_{1} \\;:=\\; \\frac{1}{4}\\,(S_- - 2I + S_+).\n", + "\\tag{5}\n", + "\\end{equation}\n", + "___\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "4", + "metadata": {}, + "source": [ + "#### Necessary modules and global functions" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "5", + "metadata": {}, + "outputs": [], + "source": [ + "# import all necessary modules\n", + "import builtins\n", + "import math\n", + "import random\n", + "import time\n", + "from typing import List\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "import classiq\n", + "from classiq import *\n", + "from classiq.qmod.symbolic import *\n", + "\n", + "# np.set_printoptions(precision=2, suppress=True, linewidth=120, threshold=10000) # print options for neatness\n", + "\n", + "\n", + "# post-processing function to get reduced state vector after projection on ancilla=0\n", + "def get_projected_state_vector(\n", + " execution_result,\n", + " measured_var: str,\n", + " projections: dict,\n", + ") -> np.ndarray:\n", + " \"\"\"\n", + " This function returns a reduced statevector from execution results.\n", + " measured var: the name of the reduced variable\n", + " projections: on which values of the other variables to project, e.g., {\"anc_M\": 1}\n", + " Note: For this function to work properly all variables, except auxiliary qubits, must be declared as\n", + " output of the model.\n", + " \"\"\"\n", + " projected_size = len(execution_result.output_qubits_map[measured_var])\n", + " proj_statevector = np.zeros(2**projected_size).astype(complex)\n", + " for sample in execution_result.parsed_state_vector:\n", + " if all(\n", + " int(sample.state[key]) == projections[key] for key in projections.keys()\n", + " ):\n", + " value = int(sample.state[measured_var])\n", + " proj_statevector[value] += sample.amplitude\n", + " global_phase = np.angle(proj_statevector[0])\n", + " return np.real(proj_statevector / np.exp(1j * global_phase))\n", + "\n", + "\n", + "def fidelity_with_phase_alignment(psi, phi, align=True):\n", + " \"\"\"\n", + " Compute fidelity between two pure-state vectors (||^2).\n", + " If `align` is True, first remove the global phase of `phi` so the\n", + " inner product with `psi` is real-positive (this also fixes an overall sign).\n", + " Inputs may be unnormalized; they are normalized inside.\n", + " Returns fidelity (float). If return_alignment True returns tuple\n", + " (fidelity, phi_aligned, applied_phase).\n", + " \"\"\"\n", + "\n", + " psi = np.asarray(psi, dtype=complex).ravel()\n", + " phi = np.asarray(phi, dtype=complex).ravel()\n", + " if psi.size != phi.size:\n", + " raise ValueError(\"State vectors must have same dimension\")\n", + "\n", + " npsi = np.linalg.norm(psi)\n", + " nphi = np.linalg.norm(phi)\n", + " if npsi == 0 or nphi == 0:\n", + " raise ValueError(\"Zero vector provided\")\n", + "\n", + " psi = psi / npsi\n", + " phi = phi / nphi\n", + "\n", + " overlap = np.vdot(psi, phi) # \n", + " if align:\n", + " phase = np.angle(overlap)\n", + " phi_aligned = phi * np.exp(-1j * phase)\n", + " overlap_aligned = np.vdot(psi, phi_aligned)\n", + " fidelity = float(np.abs(overlap_aligned) ** 2)\n", + " else:\n", + " phase = 0.0\n", + " phi_aligned = phi\n", + " fidelity = float(np.abs(overlap) ** 2)\n", + "\n", + " return fidelity" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "6", + "metadata": {}, + "outputs": [], + "source": [ + "# classical function to generate scaled 1D Laplacian matrix with periodic boundary conditions\n", + "\n", + "\n", + "def shift_plus(N):\n", + " S = np.zeros((N, N), dtype=complex)\n", + " for j in range(N):\n", + " S[(j + 1) % N, j] = 1.0\n", + " return S\n", + "\n", + "\n", + "def shift_minus(N):\n", + " S = np.zeros((N, N), dtype=complex)\n", + " for j in range(N):\n", + " S[(j - 1) % N, j] = 1.0\n", + " return S\n", + "\n", + "\n", + "def laplacian_1d(N):\n", + " \"\"\"Scaled 1D Laplacian \\tilde L on N grid points (periodic).\"\"\"\n", + " return 0.25 * (shift_minus(N) - 2 * np.eye(N) + shift_plus(N))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Circuit Width: 7\n", + "Circuit Depth: 113\n", + "Gate counts: {'u': 111, 'cx': 100}\n", + "The reduced state vector for j when l=0, k=0 is:\n", + "[ 5.00000000e-01 -2.50000000e-01 2.03934950e-16 2.60524259e-16\n", + " -3.00593240e-16 -3.80160209e-17 8.15406091e-17 -4.52150298e-17\n", + " -6.30058944e-17 1.21989910e-16 -4.46287283e-18 5.15617198e-17\n", + " -8.55801898e-17 -1.61909579e-17 2.01956495e-17 -1.05456418e-17\n", + " -1.37383090e-16 9.49128933e-17 -1.17137621e-18 -3.88260210e-17\n", + " 2.36256948e-17 3.94809326e-17 -3.59332343e-17 -9.83622130e-18\n", + " 7.68836822e-17 -2.74072948e-18 -4.98416893e-17 -3.17034970e-16\n", + " 2.84043112e-16 9.53120283e-17 -1.58750885e-16 -2.50000000e-01]\n", + "Expected theoretical state vector:\n", + "[-0.5 +0.j 0.25+0.j 0. +0.j 0. +0.j 0. +0.j 0. +0.j 0. +0.j\n", + " 0. +0.j 0. +0.j 0. +0.j 0. +0.j 0. +0.j 0. +0.j 0. +0.j\n", + " 0. +0.j 0. +0.j 0. +0.j 0. +0.j 0. +0.j 0. +0.j 0. +0.j\n", + " 0. +0.j 0. +0.j 0. +0.j 0. +0.j 0. +0.j 0. +0.j 0. +0.j\n", + " 0. +0.j 0. +0.j 0. +0.j 0.25+0.j]\n", + "********\n" + ] + } + ], + "source": [ + "N = 32\n", + "n = int(math.log2(N))\n", + "lap_scaled = laplacian_1d(N)\n", + "\n", + "\n", + "@qfunc\n", + "def adder_mod(a: QNum):\n", + " a += 1\n", + "\n", + "\n", + "@qfunc\n", + "def subtractor_mod(a: QNum):\n", + " a += -1\n", + "\n", + "\n", + "@qfunc\n", + "def main(j: Output[QNum], l: Output[QNum]):\n", + " allocate(n, j)\n", + " allocate(2, l)\n", + "\n", + " # we chose the input state |0> for testing\n", + "\n", + " apply_to_all(H, l)\n", + " apply_to_all(Z, l)\n", + "\n", + " l_arr = QArray()\n", + " bind(l, l_arr)\n", + "\n", + " control(l_arr[0] == 0, lambda: subtractor_mod(j)), control(\n", + " l_arr[1] == 1, lambda: adder_mod(j)\n", + " )\n", + "\n", + " bind(l_arr, l)\n", + "\n", + " apply_to_all(H, l)\n", + " apply_to_all(Z, l)\n", + "\n", + "\n", + "qmod = create_model(main)\n", + "backend_preferences = ClassiqBackendPreferences(backend_name=\"simulator_statevector\")\n", + "qmod = set_execution_preferences(\n", + " qmod,\n", + " execution_preferences=ExecutionPreferences(\n", + " num_shots=1, backend_preferences=backend_preferences\n", + " ),\n", + ")\n", + "constraints = Constraints(\n", + " max_width=18, optimization_parameter=OptimizationParameter.DEPTH\n", + ")\n", + "qmod = set_constraints(qmod, constraints)\n", + "qprog = synthesize(qmod)\n", + "# show(qprog)\n", + "\n", + "# write_qmod(qmod, \"1D_Periodic_Laplacian_BE\")\n", + "\n", + "print(\"Circuit Width:\", qprog.data.width)\n", + "print(\"Circuit Depth:\", qprog.transpiled_circuit.depth)\n", + "print(\"Gate counts:\", qprog.transpiled_circuit.count_ops)\n", + "\n", + "job = execute(qprog)\n", + "results = job.result()[0].value\n", + "\n", + "# Post processing\n", + "reduced_state = get_projected_state_vector(results, \"j\", {\"l\": 0})\n", + "print(\"The reduced state vector for j when l=0, k=0 is:\")\n", + "print(reduced_state)\n", + "\n", + "# #theoretical reduced state vector\n", + "\n", + "b = [0 for _ in range(N)]\n", + "b[0] = 1\n", + "theoretical_reduced_state = np.matmul(lap_scaled, b)\n", + "print(f\"Expected theoretical state vector:\")\n", + "print(theoretical_reduced_state)\n", + "print(\"********\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fidelity between theoretical and obtained reduced state vector: 1.0\n" + ] + } + ], + "source": [ + "fidelity = fidelity_with_phase_alignment(reduced_state, theoretical_reduced_state)\n", + "print(\n", + " f\"Fidelity between theoretical and obtained reduced state vector: {np.round(fidelity, 4)}\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "9", + "metadata": {}, + "source": [ + "#### **Note:** The state vector results should match upto a overall global phase. Hence the above theoretical and simulated results match exactly. \n", + "\n", + "___" + ] + }, + { + "cell_type": "markdown", + "id": "10", + "metadata": {}, + "source": [ + "#### Block encoding D-dimensional scaled Laplacian matrix\n", + "\n", + "\n", + "The scaled D-dimensional laplacian from equation $4$ is as follows:\n", + "\n", + "$$\n", + "\\widetilde{L}_{D,h}\n", + "=\n", + "\\frac{1}{D}\n", + "\\sum_{d=0}^{D-1}\n", + "I_N^{\\otimes (D-1-d)} \\otimes \\widetilde{L}_{1,h} \\otimes I_N^{\\otimes d},\n", + "$$\n", + "\n", + "where we can use the expression from equation $5$ for $\\widetilde{L}_{1,h}$.\n", + "\n", + "The structure of the matrices for $D=2$ and $D=3$ is shown below:\n", + "\n", + "
    \n", + " \"D-dim\n", + " \"D-dim\n", + "
    \n", + "\n", + "\n", + "\n", + "Due to the above decomposition, we can easily extend the idea of 1D Laplacian block encoding to a D-dimensional laplacian by introducing an additional control qubit register that controls on the dimension number, as follows: \n", + "\n", + "

    \n", + " \n", + "

    \n", + "\n", + "here $\\hat{d}= \\lceil{\\log D}\\rceil$\n", + "\n", + "___" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "11", + "metadata": {}, + "outputs": [], + "source": [ + "# classical function to generate scaled 1D Laplacian matrix with periodic boundary conditions\n", + "\n", + "\n", + "def laplacian_multiD(Ns):\n", + " \"\"\"\n", + " Build D-dimensional Laplacian with periodic BCs.\n", + " Ns = [N0, N1, ..., N_{D-1}], where Ni = 2**n_i.\n", + " \"\"\"\n", + " D = len(Ns)\n", + " N_total = np.prod(Ns)\n", + " L_total = np.zeros((N_total, N_total), dtype=complex)\n", + "\n", + " for i, Ni in enumerate(Ns):\n", + " Li = laplacian_1d(Ni)\n", + " # Build tensor with reversed order (so last entry in Ns = qubit 0)\n", + " kron_terms = []\n", + " for j, Nj in enumerate(Ns):\n", + " if j == i:\n", + " kron_terms.append(Li)\n", + " else:\n", + " kron_terms.append(np.eye(Nj, dtype=complex))\n", + " # reverse list for little-endian convention\n", + " kron_terms = kron_terms[::-1]\n", + " Li_full = kron_terms[0]\n", + " for term in kron_terms[1:]:\n", + " Li_full = np.kron(Li_full, term)\n", + " L_total += Li_full\n", + "\n", + " d = math.ceil(math.log2(builtins.max(1, D)))\n", + "\n", + " return L_total * (1 / (2**d)) # scale by 1/D" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "12", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Circuit Width: 6\n", + "Circuit Depth: 78\n", + "Gate counts: {'u': 56, 'cx': 48}\n", + "The reduced state vector for j when l=0, k=0 is:\n", + "[ 5.00000000e-01 -2.50000000e-01 -1.25000000e-01 -3.61302947e-17\n", + " -1.71584428e-16 3.26277430e-17 -1.25000000e-01 5.27811857e-17]\n", + "Expected theoretical state vector:\n", + "[-0.5 +0.j 0.25 +0.j 0.125+0.j 0. +0.j 0. +0.j 0. +0.j\n", + " 0.125+0.j 0. +0.j]\n", + "********\n" + ] + } + ], + "source": [ + "# Classical Inputs: N_i, D\n", + "D = 2 # number of dimensions\n", + "d = math.ceil(math.log2(builtins.max(1, D))) # d hat of the paper\n", + "N = [2, 4] # grid size in each dimension is 4, 16\n", + "n = [int(math.log2(i)) for i in N] # number of qubits in each dimension\n", + "total_system_size = np.sum(n)\n", + "lap_scaled = laplacian_multiD(N)\n", + "\n", + "\n", + "@qfunc\n", + "def adder_mod(a: QNum):\n", + " a += 1\n", + "\n", + "\n", + "@qfunc\n", + "def subtractor_mod(a: QNum):\n", + " a += -1\n", + "\n", + "\n", + "def control_adder_mod(j: List[QNum], l: QArray, control_bit: QNum):\n", + " for i in range(D):\n", + " control(\n", + " control_bit == i,\n", + " lambda: [\n", + " control(l[0] == 0, lambda: subtractor_mod(j[i])),\n", + " control(l[1] == 1, lambda: adder_mod(j[i])),\n", + " ],\n", + " )\n", + "\n", + "\n", + "@qfunc\n", + "def main(j: Output[QNum], l: Output[QNum], k: Output[QNum]):\n", + " allocate(total_system_size, j)\n", + " allocate(2, l)\n", + " allocate(d, k)\n", + "\n", + " # we chose the input state |0> for testing\n", + " apply_to_all(H, l)\n", + " apply_to_all(Z, l)\n", + " apply_to_all(H, k)\n", + "\n", + " j_regs = [QNum(f\"j{i}\", n[i], False, 0) for i in range(len(n))]\n", + " l_arr = QArray()\n", + "\n", + " bind(j, j_regs)\n", + " bind(l, l_arr)\n", + "\n", + " control_adder_mod(j_regs, l_arr, k)\n", + "\n", + " bind(l_arr, l)\n", + " bind(j_regs, j)\n", + "\n", + " apply_to_all(H, l)\n", + " apply_to_all(H, k)\n", + "\n", + "\n", + "qmod = create_model(main)\n", + "qmod = set_execution_preferences(\n", + " qmod,\n", + " execution_preferences=ExecutionPreferences(\n", + " num_shots=1, backend_preferences=backend_preferences\n", + " ),\n", + ")\n", + "qmod = set_constraints(qmod, constraints)\n", + "qprog = synthesize(qmod)\n", + "# show(qprog)\n", + "\n", + "write_qmod(qmod, \"ND_Periodic_Laplacian_BE\")\n", + "\n", + "print(\"Circuit Width:\", qprog.data.width)\n", + "print(\"Circuit Depth:\", qprog.transpiled_circuit.depth)\n", + "print(\"Gate counts:\", qprog.transpiled_circuit.count_ops)\n", + "\n", + "job = execute(qprog)\n", + "results = job.result()[0].value\n", + "\n", + "# Post processing\n", + "reduced_state = get_projected_state_vector(results, \"j\", {\"l\": 0, \"k\": 0})\n", + "print(\"The reduced state vector for j when l=0, k=0 is:\")\n", + "print(reduced_state)\n", + "\n", + "# #theoretical reduced state vector\n", + "b = [0 for i in range(N[0] * N[1])]\n", + "b[0] = 1\n", + "theoretical_reduced_state = np.matmul(lap_scaled, b)\n", + "print(f\"Expected theoretical state vector:\")\n", + "print(theoretical_reduced_state)\n", + "print(\"********\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "13", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fidelity between theoretical and obtained reduced state vector: 1.0\n" + ] + } + ], + "source": [ + "fidelity = fidelity_with_phase_alignment(reduced_state, theoretical_reduced_state)\n", + "print(\n", + " f\"Fidelity between theoretical and obtained reduced state vector: {np.round(fidelity, 4)}\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "14", + "metadata": {}, + "source": [ + "### Reference\n", + "\n", + "- Sturm, A., & Schillo, N. (2025). Efficient and Explicit Block Encoding of Finite Difference Discretizations of the Laplacian. arXiv preprint https://arxiv.org/abs/2509.02429" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qiskit-fresh", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.18" + } + }, + "nbformat": 4, + "nbformat_minor": 9 +} diff --git a/applications/Block_encoding-ND_Laplacian/ND_Periodic_Laplacian_BE.qmod b/applications/Block_encoding-ND_Laplacian/ND_Periodic_Laplacian_BE.qmod new file mode 100644 index 000000000..c6354d224 --- /dev/null +++ b/applications/Block_encoding-ND_Laplacian/ND_Periodic_Laplacian_BE.qmod @@ -0,0 +1,41 @@ +qfunc subtractor_mod(a: qnum) { + a += -1; +} + +qfunc adder_mod(a: qnum) { + a += 1; +} + +qfunc main(output j: qnum, output l: qnum, output k: qnum) { + allocate(3, j); + allocate(2, l); + allocate(1, k); + apply_to_all(H, l); + apply_to_all(Z, l); + apply_to_all(H, k); + j0: qnum<1, False, 0>; + j1: qnum<2, False, 0>; + l_arr: qbit[]; + j -> {j0, j1}; + l -> l_arr; + control (k == 0) { + control (l_arr[0] == 0) { + subtractor_mod(j0); + } + control (l_arr[1] == 1) { + adder_mod(j0); + } + } + control (k == 1) { + control (l_arr[0] == 0) { + subtractor_mod(j1); + } + control (l_arr[1] == 1) { + adder_mod(j1); + } + } + l_arr -> l; + {j0, j1} -> j; + apply_to_all(H, l); + apply_to_all(H, k); +} diff --git a/applications/Block_encoding-ND_Laplacian/ND_Periodic_Laplacian_BE.synthesis_options.json b/applications/Block_encoding-ND_Laplacian/ND_Periodic_Laplacian_BE.synthesis_options.json new file mode 100644 index 000000000..b5abe982c --- /dev/null +++ b/applications/Block_encoding-ND_Laplacian/ND_Periodic_Laplacian_BE.synthesis_options.json @@ -0,0 +1,45 @@ +{ + "constraints": { + "max_gate_count": {}, + "max_width": 18, + "optimization_parameter": "depth" + }, + "preferences": { + "custom_hardware_settings": { + "basis_gates": [ + "id", + "u1", + "u", + "sx", + "sxdg", + "sdg", + "y", + "u2", + "r", + "z", + "h", + "s", + "cy", + "tdg", + "cz", + "cx", + "rx", + "x", + "t", + "ry", + "rz", + "p" + ], + "is_symmetric_connectivity": true + }, + "debug_mode": true, + "machine_precision": 8, + "optimization_level": 1, + "output_format": ["qasm"], + "pretty_qasm": true, + "random_seed": 3612357240, + "synthesize_all_separately": false, + "timeout_seconds": 300, + "transpilation_option": "auto optimize" + } +} diff --git a/tests/notebooks/test_ND_Laplacian_BE.py b/tests/notebooks/test_ND_Laplacian_BE.py new file mode 100644 index 000000000..bf96ff3fd --- /dev/null +++ b/tests/notebooks/test_ND_Laplacian_BE.py @@ -0,0 +1,21 @@ +from tests.utils_for_testbook import ( + validate_quantum_program_size, + validate_quantum_model, + wrap_testbook, +) +from testbook.client import TestbookNotebookClient + + +@wrap_testbook("ND_Laplacian_BE", timeout_seconds=300) +def test_notebook(tb: TestbookNotebookClient) -> None: + # test models + validate_quantum_model(tb.ref("qmod")) + # test quantum programs + validate_quantum_program_size( + tb.ref_pydantic("qprog"), + expected_width=None, + expected_depth=None, + ) + + # test notebook content + pass # Todo diff --git a/tests/resources/timeouts.yaml b/tests/resources/timeouts.yaml index a230e13dc..4252d75e7 100644 --- a/tests/resources/timeouts.yaml +++ b/tests/resources/timeouts.yaml @@ -1,8 +1,11 @@ +1D_Periodic_Laplacian_BE.qmod: 30 3_sat_grover_large.qmod: 60 3_sat_grover_small.qmod: 90 3sat_oracles.ipynb: 1800 CRX.qmod: 10 CX.qmod: 10 +ND_Laplacian_BE.ipynb: 300 +ND_Periodic_Laplacian_BE.qmod: 10 Option_Pricing_Workshop.ipynb: 400 PHASE.qmod: 10 Qmod_tutorial_part1.ipynb: 500