From c5653d0891cc1a8da99c564eefe17dee88c9ac23 Mon Sep 17 00:00:00 2001 From: Simon Rohou Date: Mon, 26 Jan 2026 09:59:52 +0100 Subject: [PATCH] [doc/manual] minor updates --- doc/manual/_static/css/custom.css | 15 ++++ doc/manual/_static/logos/logo_ipe.png | Bin 0 -> 4952 bytes doc/manual/_static/logos/logo_vibes.png | Bin 0 -> 8562 bytes doc/manual/_static/logos/logos_vibes_ipe.png | Bin 0 -> 28336 bytes doc/manual/manual/contractors/index.rst | 4 +- .../manual/intervals/BoolInterval_class.rst | 80 ++++++++++++++++++ doc/manual/manual/intervals/index.rst | 2 + doc/manual/manual/intervals/src.cpp | 20 +++++ doc/manual/manual/intervals/src.py | 15 ++++ 9 files changed, 134 insertions(+), 2 deletions(-) create mode 100644 doc/manual/_static/logos/logo_ipe.png create mode 100644 doc/manual/_static/logos/logo_vibes.png create mode 100644 doc/manual/_static/logos/logos_vibes_ipe.png create mode 100644 doc/manual/manual/intervals/BoolInterval_class.rst diff --git a/doc/manual/_static/css/custom.css b/doc/manual/_static/css/custom.css index 98b51f368..7db716235 100644 --- a/doc/manual/_static/css/custom.css +++ b/doc/manual/_static/css/custom.css @@ -176,4 +176,19 @@ a .download:before { linear-gradient(-45deg, transparent 75%, #ddd 75%); background-size: var(--size) var(--size); background-position: 0 0, 0 calc(var(--size)/2), calc(var(--size)/2) calc(var(--size)/-2), calc(var(--size)/-2) 0; +} + +/* Adding VIBes + IPE logos in the lateral menu */ +.sidebar-tree li.toctree-l1 > a.reference.internal:has(+ input#toctree-checkbox-8) { + background:url("../logos/logos_vibes_ipe.png") no-repeat center / contain; +} + +.sidebar-tree li.toctree-l1 > a.reference.internal:has(+ input#toctree-checkbox-8):hover { + background: url("../logos/logos_vibes_ipe.png") no-repeat center / contain, + var(--color-sidebar-item-background--hover); +} + +.sidebar-tree li.toctree-l1 > a.reference.internal.current:has(+ input#toctree-checkbox-8) { + background: url("../logos/logos_vibes_ipe.png") no-repeat center / contain, + var(--color-sidebar-item-background--current); } \ No newline at end of file diff --git a/doc/manual/_static/logos/logo_ipe.png b/doc/manual/_static/logos/logo_ipe.png new file mode 100644 index 0000000000000000000000000000000000000000..51867a2f70fff294948cffe868a9ca9eed665e43 GIT binary patch literal 4952 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 WzeJZSyb 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 literal 0 HcmV?d00001 diff --git a/doc/manual/_static/logos/logos_vibes_ipe.png b/doc/manual/_static/logos/logos_vibes_ipe.png new file mode 100644 index 0000000000000000000000000000000000000000..e4b90c9ad429a5fe5c97371941da0781265bc8bc GIT binary patch literal 28336 zcmeFZWmH_dvMoAgFB4|cL?q-4UIblw-7A2JHg#8xVyU(AV3ICa1t)>yZ1R~ z@A2I~=NtFlU#ENY8f(p2^;FeUHJ8jWS4XHQ%b=qWqW}N^bU9f`H2?sJ@w%Uagz&m$ zyN0|206?wY8ai%jrk<2eE{+hWoh7B)2PaEPOD`w{0PtEX%7muq^SgX}F~>84DekEy zjXv~3?DP#FP%M*|Xk%&7NVZVh_W^)*F@Q7K0l)9uUj}pW)!bHXm^yK%b2nULL+B?1 z{zTt#-9P*L|H-Pc`Zm05$Y$&q-jU>`m}|Vg{PWxT&u!LUH-re&CyoR*KYvmj#Jq7E<`+e7M|Dn zeiO31JXtr@lzq)DNZwo4pL-u=(Dm-mtvkWVo$3dLmlnap+Z*OT_ueeue5HTQAOC#u z@oaaTnlRh%Q%kLp^UK`z8G52?nW@S&w;t5~!^f(+y*;%pt;P1G`S(>~H`6anA!6q^(0qW91DBo38jCE3KP25cw%gXiYR=gpgJcV|nj z*BBi<2&~e`e;$nQN+?>ji!g(i>itmCoCiw>A%u}x{#U#p?6c)BYx+Bm0RevsTIoR6 zdX~wuR;GuC*zCgG-Gm9 zo-PL$th<56d60xs2UTr3pyuglk&fy(@gifV#!ithA1E#nt99YMDmjqGKvzhatkh|O zY)Z?~5-=4lfK*6%7Ej6-)oksXmS@$*C-tCBO-t)Xb@Zb1-andJww?$#T%Er6mLNJ3 znh&Kzat@E@XGba3G_ zZvVct?$EvGv(VM|IKKTZT<<?X>7cM-AaUf&R;b);o z@sRTqgkfHKon_n9s&JsbGQX(!L`HaEvW7bmQsZ4*PyIn!GW)kbB;fhT-^(-x!C(Qw zVZ+iht9c&WqbOKWvbvwd(g5{aQwkKDZLR!deEA$&u=vbaH7o<-u!cU`~6bcntmQA^a zu4VYmMs4)o(w#Bp&(dG<_ zzvY)LzpqXR&8B{YLJ1IHJJ{3sg_tHK9~(CzN(G2?tEktmOI)aJYOxu*$F}(O^xGGl zOqN5v-c!kX-TuF9nN`72c`HHRm8ZBKm+DvnV6n^>jF75c@D0h0O$>J0wvwTND+)Y4NsGR-e{#080o~y~(U#Kc z>pJ-vB6h)RHB0#7+6Wrj>VDK^U~xE)STX49-wlfXaAkDrkT-^Lrv@7w~pg5hfIb88c4bzl(F?!lV+1fgfy;Tyq3+P`Co1wy|*#WQX>G@dMU`mHu zAooCEYriIzD&Y&;&vYq@dySS0^=I?j>jbB-_>Z9oQCVqk?yv4=2Zqw48uVG6BGnj# zaeSf-f(xrNV=_@5hz`V&tb+;1Q2|=1g3W~fR7I~{nQ^y(p8zu~yS)^z*b*imnNb(|pkwd4DaC(h!!R z6~3&e#iwlL)#UZ03WKoVPhS94me~O?=f&JW*^J{1JY6+{R%L9!<*1<3F@~m+yr*{x zU2^dV&X%*Xg44|Rt2#FP5l`D2xTrP^c0ot4+{{q)yAl~=2}l(X-LO7)T_x3AxkkLu zt>uynEia0(Anafy3CY){OllY0?-oaj1Xp~;8VFknrZES_muIUqPeyagK^h_rJf+?5 zvEIji0xX6Ls3m9*t5Lc8ng;d$#+nLsP|=T~fx=}qPS1=mT6|ep>xjbQk+s-_=hb%Z zZ9KNijdSRCmkZ!2bXS7sXNO(OSC8`xJp2k~AlC_lwIZ8Ltv!(!%O>)28fYs~6mCwB zHMYL{t@W&hZ~d)VB`$h656K3!O&raw`MBN>g1}GRGwr-STuN(Y_ru7K%&X z9siz7r9c-ZAh1X-R@~5uC6OLaY)ZR>JQ`_rLGAwMtSmhnm1(Vs8_jsA5Xfc1EOlGs z#)qYck-{zXB{qY5yzp)Hbo-$Am!5ul_e}!+I=W~! zP_vF5rZzz|FS4VAW?1CNXrOid=yq$=3xyXRj*hb>26Zf?EBSlS7rHW-Y6#V^08Yn9 z7$rTKp4d8N0#gq}kUgXaHGPoDFD{7$d!&%$L+2F()-Q8}B&;pqv1DyLJp&sNuCzjs zQtGHp=%N1?Sguh@uOULZM`$d})bfTogLP7Hv1l!@pCcLXI!#Yj4TyZiI2!g~g5U}3 zmzhE7Z{md$*4x%Q4QNURrvQuK)6&FhS5+mj_>qchDMMeDu0pMINlqewDjK`&F&OzK zvT<&+#c7Ru^DQ(21tNH@ID`<=q+y%5<|xN99h}x0?z5&kF0}^+j^`w|BTP7_HbYJ+1fd7G&vEh(Me- zA9C^Wo|oA{Y@x0L6-#GyO=?IK204w{Ga;@>=r_W9vFl12Vk(fJG#+|qI4tXT$~HQO zlmSq$P=o-UL2_R_kyGie*jtM+giv!|pM8>a`JWIyvnEkpDmS1s0a@}Ao?OK}Jp31B z;b58fPo`ABmwcOC^y$%>4dziKANexnq4x2>@kixNm@LH0eiJA!(c?Eo{LsRyoV(3{ zjven~_#d;PM%}8T^zd2)BRw9}iI{pLkZ2@Hr=AvSbd<(lVH%3gaQ=%|FiI+-D9sHb zQT)3`BiP3Yn0t6ZSp3Z4GCx9)jg|<873|EXT1ZPh1dgD5a2@<9 zCP1bwi@@z3(XzHk0FX74tpp=*ZsDdA7kb0yq1qYl5--x1@?WQ8y$!>Kg%U5UlNq17 z@Q6}xAU-fPSW3;TCZY|cu(v5ms&%Ub+AWH2^Vp!T8HIM(ZswMJB%jp~RCsZ^iP~CG zX)`wra>2(&PxI+n#*H!oxkStsWX}(RzW8vVW_ulfLa{;%4xBGM*w?c0WMB)&JBN2K zLR6M8(A7O)3=_vnD7P_VN0DzEZNA-bx<_>1maWNKD$e}f1nNOSy*FWnP!b%+R!TOB z9in3lcC3XBlK}cGZIC zP%dhYn^g&|QjyXSLz4#n)O^NsyTrwts?3>mPs0zDh1?(^^Q0}*0dC^Im3;_ec{>pK zF)WdKp!8SFy@WLl-KXkcA$pg&-ZRYaqUGn89ke0o4b+!nzO8Tej^3#)1JLb&X%9(M zX71)ewbi(7EHYuz-SwAZn3nF7tW>{ivwET|+7r@N3p%N!r9%s4U3*(E^DrXtX5nI` z^Ce|X4g`w6s}@jmVkMegx3WdA_AZMPd&)^_o52%avPFyJ;fdNs4#OX)-hZ|}(KUt8 z^4qHB`Jj*%SMKZ@wEhAvRT5H_j5w8VBV0MFBsQKnTvSV@CNcM0p@E3^g0lRUe%t}vjP=^Rj!&=3^ zeJkNOag2o(+rZq}q}swl#?$Q`r)VKwFn_}I>yNuw6YXa{=wt)WvhU&51rL7fLZ!^? z=#QV*aj{sygxe)m)r>#_sKbV7_oMp+*=>p=V;gs%|B^{#>}8kNrcGdS43kE&H)hNY zhE!WG*A9-Hsi11Xz#W#)N>)_j%YCpNq74lC4T&=aZ#a>R>CDhyFx(k0ILIp^r&a2} zAc(CYK&|MMl}hjQO8dhkui)jJIt6d-rc^6L4J|}t;iE#9Uz zZ!Z17e*VL6;_q1l>$}%N5M@!XCm*+1PkJlG$R8;^vfy%ij3NoH1xjU?7|g{=L2c-HDXghe-e(ee#H51~>gY72wJ_gJ z*;QY4u%(323C7Jeu412lE3PR??*J-DU-0syY{I{#aKn)qaZ?@^buI7~7q8tgqy+&^2S5RLtp%H?`aw}m zVh%=(61%jK*>j*pukxD|tD%oADu?M_vxH!N@U7Z0=(vD^ZRA0v9vG`Ip(;AERiQjP zvz{;0uTEtSdftk9q$QaUG1Zx`X5fc`&s!Nq7f;maT=V6R2RursB^YT~CR(Uoi&~zW z)=6gYmrjRxaP~!Vok;k`=Z6edohCAss7JzM@#s43ckk!8oR8=}Bp`k`j$?$8jL^d7 zg|?v8i<=tK37j(*6%3SNHexrA=Nc>qpk@1ffP<*NB!N6c(Qn{%IIIfIdP8DE(zmag zald4UyA~j{kTNtQ$Kx%Iq3Q&8>Lev#FD=RaYF-YWcX(3@c#pSw6#qdDp&m=8w=`cQ z{8mlEs95@U_RPD9-Ok!bc zgbQEI3hf`G-ZFvnJE?;Pi0Wu86nbgQU|h2ZqLV~^uMaefS6g87{|Z&Y8OTG!-$A=U`Q+$UuF{3%GX$}KN?jq zVqa_v5a#8eMAH?ZD&uFBi%jV;PaL*gN=_U}I!GN8EZrDBDcqyrXG#XTTi6UxpytPp z(u7&Fg1PoFz1;Jy8$YKsyfZ;9oG!59k3+pIL*fW6>B_bf&BuOQ)KZVUy-U(OpSV|{ zLTs|x6LBRRf-U1!Dwp0TfP-`}u#yYDXZ z#`;IL=F4alT|q0TF?`^CB>(qAEJ}0Jr%SA}MlKQXhVtAfo7D zP|>-E#d1&mD9$m8r)K?xP;8oqt5e+;A%#sOulg&*wnvf&c~}BLIRQ`s7P2(Mwo!kY zw!lnKim@7dn`kG;0+CqkbH>~mPe6|vIR$``zcG%Fc|~yM>BrGB?Xcq8DWkBezhLmI zq?O%5IVhUH=Ug&g)tYokD%rF$GWeAjsRjfZ9=68!QIgJ@OBtHd zSrWsX%d;hsX&k(l#ciioc$DNx6(mc6->x6m?`|$&tuLXU{rWS`)2?}$*b7S=Pq+V& ziG|AOoWsw>B_yGHB_R?am-e1`Vvt%O%BPDtj@zCy?UA0bpPFCc;^6Fzp`R^soARb0 zt+X9!rhrZH+HR%HztaACvk+q_U-!jBs}eMy4@(uu{)^49u6P-@B&%{kQq(Wrm*vAR zhN)F|9@+e6*39dSjEVwtReDq6o291oFkbqbp~PkZK;VYY%Qphxk1y5Puv=9HHK{Q* zZYStN0pg6#kA1k5eHamzgxFNr{VC?Vd_xcz3ay=54;q>+mC1Ao?0lbiLU0wMk2^e8+9rA8STHMGa%57xbct{tL`EBZ{V`5p~FYI{aXatmC;7B9OoIbs?I#`s`!FLlf zvr$h>Chx02n8!%M9Y->T4X}x>sZmFjAfumS+p{!VMiv{xY~4XY+91QMcb%eZo|L=< zVQR!w{?v3Mi`%PR1xKFCmZAed19tcV#1&Qwo9xS875$_w;l4|a@uy${b zPdH$3p<;dY)-&NAS(nP_I<$LE!2%T$6KrEbrtFJ{rom#_51_osiAy>@&Fi#2B?yoE zl+t<-j=dyDp1~**9AR)w65}7;yS0+a=#&>w-h$L>|L2lz8S&+=dhyc1(#;$ei8M|Z z7wZthl(%az(j>Q@ari9}@p1XOvg`2ktT(BnQx!|3V8oAv=0a51jufr^PBp?gNTy!-v^0Aow;}H;9eGLs z&+GF}D(>4_qC?UH#LJSDUibn>@!|Ctst@S{+6` zhO&y#6j<1Au7NpCl$oRcE4ZZhn^>K7N{CgYCg}Yp?>_M&b8-RWaV=cl?SU{gnb93< zOpYV(%B?x}ylE?(Z+NMSrzEgt!$JsU(`v;nBuZk$SvrcT$=BW)IFgWzuqs}lkyY&s zX(AF}C4AI#Iz9?5-s}x8>PgWm&~vjv&m@$aiWpNFrzymG^OcoLsxg*Vn@$ZS+Hupx zBjLBMexA`DLSj6T2JxLmx<)bFj$|ImV2d1jlz>+#t5``jEL3VAIhY(Z$XllCr*Cr; zZWC1(g1pi$zziiQ+>t$6Xo4XUE&Qs%s`z~$4^Oz8nc7CTTPU)vlbd3>yj&`EkdV6* z6{QNAM=Y1j+dlZBowlzggw0bMPDjtA)ZU8>v&HkiG<NS`rP4ZphloKg&QRu{cehT?A z^icU~z%R5+D#=sD;CTZ~s%dtXt`Os-dXKHe>Ulo$Vl9T_@C_^~INVI{#~$&mq~{ce z9*aiQ1T#l(xD^#2cvBeohAz=sw47y##~iuBvKa2KC?>-B2*b3ppagvqwdc7eYI^&g z_rTMX5v9E;!Oz$h-)Yw zB?FKK2e?HoC@qiD;fDRxrVrI*^BFrxbUj-08D`=cnMlQ2G#wXMdsQFcmaN@t_~+Y;U0hA$zODnl#50%9Jo~H)f!KuDpcmum3zzb1PX(kxOK1S}=wh#O(i2rnXc0+XIW`tnf1?S+RJ`=8qK8L*F{F z`aBLrO1~mi#Bv>(1&l2;{xY(VtFPooD*J-V00}B&5P9)D6;+!7=F<+AXB13f5p|^Q zdbvKLScJ$B{Au|gHslEPh&A%Y{K8%-Y#x=$s#&+52!q*tT_inWSbTJnrqb9#YBtIY z_3<_=Tylt+D^SFOuLd7ju(#BdvlTXBvj$zLA z$*4A}B}J3WZ79?&T739RShJ5uX-$djSRgW73@W8(0%p}QyG9~~ivHBy1Uy%9$x)%> zM^AT9$eTdBmM}ADy*kMg+7W*&Cbe# z9ifNtG4#l3L|CwDrBnv(Yka1AWf}dy*l!+`eGBCm_XIc>+7=bzaNHQ1#viQrG!P|C z{Ka~)2-Caf*mb_^W*0Jl#NUoU?*8!Jca;uCNmJV%OhZO2&czkr7SZdgyV}uIMm^0{ z^%H=CHal=+f_5zEDGRvQ(muh@w&nZKUAnq!s7k}&(A3oEdbLW*y)#(UXW1Gz;hXX+ zpsS!$J;_D?Cr_rE1)}g3??>mK3BxvIyl@P3@eAn~7Q{9r_I{?Hy;nzmR?l~((}>z@ zl7*&rg7syvA5)UUC!*lQ@MxawWQ^_}*5D@!w5UNoKSf_Q=JjC?uvk~L+2uC$@(g90 zk_sH1Nl*3M$TX;^99>i5Kn4kBdqW(Y*eQ)aA@G8Uf$)Cq^1~h~FrG1iXY(yeZnxu& zu`7`nPv4d?7D*d>4c#8MY%Gm*4n1WF+stp=houSw_klYcxVclKAB?^YaQL_jJR=z! z+7rS5co*FJrV?-5aoVbxR_<{0On-J(7cian_3=l-yo>nc;Qf?26bEG`KaPc343JZa z0niDF4%L%X`zFcNUP80$~qiu8*HmU0KE8dLmD;*Ychhq&f2uO=MIM59*#)c}+>O#xO zluovZN{4>`I;CTG0@+d#*ezLkI{v(G+d%00SUMfHuToPLTUg_hHubEmt5Ds7a4w^0 zb1rV|C{bbIDnH}fl%rpQ0e5CW%ha)`?cJ^2ftk@-dYDgL>%?GAlh21&!W+>A4dxe7 z|MbH&*nP})T~$Efna5qoh(u(~ZrJGu!}lnH=YsRYJij*f(ujtJ-3(u`c=2U9S+g%V zUJRsxg$tf=<>%99G*N%-b!gHtW>~U?MQKgW8`b;mXZs$qfe#{aHKs@H$BvX}u%ZtJ zb+#tzb2krs`%1{mhF6ZAx3rWZb{)+ba1#q{_!cZMD4Smr(MDoAV?BKL=~&C({tz5H zePB#ow3dBW-u<#pz4tnA{sN%reGE5no9BI9)bbH3A)z8CA@Lt;SYB7IWckInEA*@2 z4s{pHOX-oGQ0~U%3+Q4RgKh94Rj3wFssz$De!(jdC*Tsu^fvA6nAaWe>{eEUR8S&` zh(5y($jwU03-P^e48QDA^7p;-rMSyMMf!{~Us=r|I&aUFtr)(#QBLSB1%M5o@sx+8 zaL~)WyjSmY0x@6{3%=8NJ@}B1fpX12r%4tPRN607%P+n3m zW_2OS7!X=@>KvMwvJB-1@g?)*YkaFJHS;RhE0VD5$1%=j zC^}Vy6th?`541dlYWJvD-UUD*c}lM&tKb#mTZN)q02K_v9z zv{3gbqGZWe0c=elrMrl}u*|d{Ojb3;&LdJvG{|oP5I^g;T|WVh zVO??~RJ}L=0E`{z>!KnZB}D;qM|)ON3r90cRxf*}*F{GFfY3WHCsT7R`7J>2L{Nmh1YQB`E!|8hz3lBA zTm`&@L4V^4yzc+i%m$+TTg1&)7^I`5LMh?sVoAx(%FW8oBIO13-~@@FPzt$NKm^nz zrT+=>dL#_8c5`zQU}N+2^kntqVs&(}V&mZF=VxQ*WaH#yd6i&s{ovqc>c!&VO8pna zKQJUMUCmvfPHs>~2g<)NP0bwL-Go7)*M7?X@Xy{!N$Ee~9bEs(!YdzaUZzfL9IWhY z_V#T5s^RJ;m_N=gEfj^^%vxhE$n4EoEyfQ6$u)I#9zT~2dL3tm%p3l?@hFb4}a z1Z>J;#?B65;o*Kg=7pF;I5|1~1xn7r)y>qw-10A|S8!J7D~>sbB_}@*gq?+hi-V7a zn~U3$#f;N}pM`^yhliiX%z~H4)bd{--n&3wtJ2i&U%mPZ%HkD@gBJ|u=QcBEdEK#O z;pXAxWijP2|X@~R*VQiM9Vd;M332GrhC-OcnbHaYls`8j#``8oO7!C+oKuKyC! zvUG8Mt;D}DIoMgb{(<{fS_EE$c_r5LuR47N_*>&O76AztOH(&T7Y#>8J7LgYE>Zra z`FD9!3jHG~vQXDoi4T8O{6A}6-O~9VNB$-?y+-;P&1(Vu9StSJ-&DT+cWF;+%fEPH=j3H!=V0OF*5Ke4 zVCN8Ef1O}^-Liw&{vU*B&TheF`dWZsOKx@+Zc8pR7E@CQFN+x$KNp0Po!itL@{ip9 zCxQP*LgZ%ue;1;KnI$&_V#dv4%EiaS!p+Ug#bRo~`N}t!1s@j=#EjF-g6H4!@_!&i z9sy4Ne-BZJ?XPq5f7GoI+yAGs{~_=%C-c|r|D)~oBJq07Vf)XE&OgiIufgzt@$=6S z^?%XAEA;;u`ET+2KXm;MUH>fx{#(NTQ(gZ<*MEzF|CaFoRM-D8x={Y>vDMPy^`Zcm73(=j$>kR+B#9CLhIeN5tMrSxj~?x?Y9?`x)=xFHq2tW?*O>=CPiA`t={@shf>X z@8gr`#x=jGL$2J-?Cg>W*Yn?-uKp!rw8;jm6q5x<4;z!+W# zr9d-t{z?A3&~Wg}syyS5(1mgt_AX$5NT92-q(yUh7W@Q^5k+8FDvm^8Sz&_wUfKqL zlfnzV7Dfl=7h>SI;Tc;p_rnd>0Am?< zj2s$ikAF{l5Q39t5XW^O=Sh~nHk2$`qlaTuv>*K0JSY`LbVPVTG5u4P>$}n%3tBuU zMF6EW5L^ty6*N8}IZDFzh8@PvbIQIt$DcMkE^_avqYdk;Dk`w)rNh+$(FsXD41W`; zW64>Z2PRpASO(Gae$(k)R3Oh(Tkn@Ud~34K9y{q_TijUz;vVV4jVYT9Z8a$A+xD*? zC|R-Nb@$-8B`tEoJ8%f$V$ho+Kzg5oh5=4AGupdz=P)TSB^v4-3Cgm|Mm3zPFt8qg zs6Z&lCC%000o>Y&6V!j&RgE9dKh^fxvMclVS5hw_b}56%V&Eh=7Qsn{XOQWY09^Zi zk9~4|W^zdsR}``&eHFC^jE=g+!_%yFGhzi}6q8VAGHn1NOlFp=r}nF{$URxaH~}Z_ zS|E6o|L&bn#vu|o636Yd{b|T6=XcKCaKITU%2`fTma`O`^@kt zX~`{MNAPU*Dp#OSwreasQ28$>0;zpe7qeVHZx+e9J*MGSnVaU>XPE_F+Sz^83{;h) zt-2=vDDu;|DyRK~f9>M8G6w+qL-5eA#kmJnQ*Cqrm~CQu6FG9?0i(t=e9l@Md0qsQ zB2Py;tSbKf9lpD!NXS93o!b;TzR)e)j?|7)&v=iX30Z9~e@iD4Lz9_&C`2~p2TlNM z2PESy4rYyhAlCcpX7zSkcmFet>xP7@IUc$0yZD~oQi3lS6Lm2Bu|hFI?wu!?eHs6e*JNah3vj}nN9r<#j;Pn))#G!5tNVe2 z+{F8IBkCjz-Gs*b;Z6t;3ea?O;0;Wr!&$X`i-0<#ll8&6spajhP?((o-`ey|&mL4S z{o`9%`o?BCtD4A>F6-K~+!<5u1OKVEr+GynR=Pu8ViF$+KKC5S=_@b-F_CPlEeHVK zieAFS%Wwxj_X)GWB;+5FvjH8HRy#>%&jn9;_+aL^F9A>P+|hrQ8FB&<2ghMUw>{PG z?dW!VPhgDTJ21d~jo%&+26LbG_=nHT%f097s`JVX5gjB7M4#;Ms-tB4>3e~9Bu)cS^#~i}&z-U1Zv2Ni zZ?>L@E)=kk?n~#!gYO<^k=Eay=(Tg7w%=f;)5V^ie@)NrhV8%y_cX3(HNBKU zI9WMef7$H-vD!#mw_Y8=nYQ6v+Dps5`lFlkZiEu=uEZe4hB$5DM*KZewKL$ysNFYb z?N#AVa;}?1IP5~r?>G^|0v%^2ZsdG!;186A!Lfw^<*n^KXIDA6py*AX!XC)?hcN2E zX;@207A%4g~wjA8&^5#Zn}O!=W!rrSE}Pz!3D_;@!OS}tW1M(`wLwosUeA+_ z=uKby0jmMdeveh<5$|@7Sl~P?e5}t@NXBV+C+~+y%oHpB!|LYe9KX-!D?hTXg{B*j zqfE3+)a$He^LK;JL0_PC*!+?PAtkcB7xZb4pvtP;T!6Rq>f&wggi8$s>Rsi(?o$`TU9 zfgGz(;urhYV)+DV5VptkR`HlY&c`m#FWWA+eSGQxVdwCGGYgXVVBc%-$m*2i*GvwO z{p?b`qHKdJ(T<#FQ);#U9t{j>amt{|xa6LO=|&Y2+xf!_=unsZLwZkqJoFjp`xWYk z2opdDx;uau(jrA{hjYB46FO z_SjTGXWWIxd0sMn-Zz4BC$g6ZEGS4UiZ(sxX&3^FJa|->VUZU&Sr=Cx$eD(=$ z1%)RBL3|kpnm`#b-JCr8UqHu;D0aEM5kPjGyzxL4solHO6$M#3@~0Va%u3@`;Jh?<$;m(Jgd%B4nUEwdf zgIXd-@{xZQXd%d+a6Q3v!#_t}5=n{rW~Y}f!v=&7Ju*8_`7QB#rn)+021zXyyW~Rs zpvAIeVB~wj9gB08a>eANAhd8*nRz_I;GQV{;oH1RoKGzew~wDaFI_5D3u9N#w(tN_ z0kzgoP=vaVI~?mLJGNYkcrTrfsC4UP5c+^&kD|Nv(C(Fmb$A5s0MoUha4bJpMTLik z9slN){g0PeCOW7*%nB;cpvlId#FLxMo;Q;F3O(|N8;@|Tc{$AtusKlH3*gQh*ClOO z7NMJHXZ)6ef!||a+QgBs3ZVg38FXp4LNRb6rgslc@T9AdG0Kc2Uc?(SX1?n^h zm`+}vp3WISv3Ws~-JwHC%$!{2DTa=8lXKDPr$)uAZNG&wAj=P5fO2X9`W}3FG|Yb_ zW<|Sn4!llrZbY9;T+e1h2Xk6`0X*wjtlT@<@qO>B;Bz=9&$@U6KOU;%=WFgvz2QqH zZTS9Pa-SMVWdxK#2}D~LH$0DD3hx399Pws2V@PHIdXBU7bqGltn0K^j<{W&l*77!& z1x!A~nY)rWwYr`ieiL55Bze2T%FB0x`j)1SUN`^8N0jYrLC4bIPjyI}$i!s5o*3OP zIdN8jh_gl=avpzzdMIFJ!bc9je63=Q2&i|q&Fi%LGjpG-vXp`UKA69B2Yl{CuzCJwQBN(Qty~$^%>bu_9kRv+ID83Zw zmur7(u!TqF3Eb-;`cxqJ5sCpu6}N! z`RQ}FS1W@K?kHE?;XpHqLc`GFj~35ohw3$* z0fv1|tfX%?KD{yxs>cSSpg;MOI5}7t{YqQwmX{Q<-%wo=-x}tHBZwcTc+=b0!S@-) zRk?nGZJkmCqk}DI+KcqwY95Xt&)sJJpuZx}7%x5<+2|_@7{wY7x;E;zb6D!bqL64U z6*kGT6b@u&gmr2R>bKKh=(Og{TqYj)(>?Eh-mv*{40E^hA*!s`LEkng6GVELg^JrW!e+Hg0CM8Em}i6bEV?sYv+{d5gBb(-Bgy@5KL#xe@ee2hb39dG5*Yh67YL%%a`MHVq^ui^=l^p5^s^i5KLtALvNk^`gs;47^Cv1R%2k20h zAzt88DLD|aG*jTg0Fkv}gKjurBbcT(=yA^Fm`N*1``l@Kr|TG#K?FO>gpgXSuM?Fy`5>cI{{S2jQ=pz z=AQU*4~*_5E~)H3wMiZ|KmMT3J9>sSLCJ z-ebZP&6s+1{V@JEE~^ zv5_&X&~QRF`v>Zk?**(WlfIp%a?l2y*$#Qcdw)6Fs&y zi8YgEvw5VM^DDqg&y=1AqNhkbl*mcJnV-v z8F+)$)D#MDxS&DwB^{I3;;=nsAH_sUSj0S=+8wqY8qIpYj&xsi+T(G!Q5!T=XDzCk zHR+ujve)&46K zu_5s7RND>FU2U@AW}Q)WUGD2&NJu&VD!v=oh(>7U7knX=mWeFJN|%F-DQ6%D5`5W0 zP6Y~NBYZAHfH}+{@(G1%8uB`j*e!SBv`R?kaAMwL>UqS86y;uVLxQ?Yh3``uZyDUv%?8zx}cNNh0g}__ytQBysI6#CW|LU z><|D1Ptx{`tzUIX{-(V;L+|$q_B7yd zwZUgCXSna^8lCIhK|xnAHIAGFE2H)_CByF%OV7Mk))DIt>$&d4DjZ+_C1VYz3A!ak zCIQYHu;l*DZQhyU%3=!OJ^1hs{YRSL=};8gK))I~T-()8JF| zg(LC|4w8Zsr^5~E=7OYnT3|Sx+=x}QJGtzXu$NLTen;*yc|I-9Qe#x?7uE&P9>*Y3 zKh5ct$PUv~+b6Y{?3PbneHqXw5<3h!XKQMHy79f9l3BY0cE+_9>ohM?852jkpdr4# zPw6UkzJ#sA;-kwYSe8Vn1DQ;M_J`YM$A-Gok%xT6a2s-h7W8AkYMOs$neK1>XwLLf z|L%w2J%8f&764a=Hdh()BWQ=Lxu6p>`w(s6_sKX+R=o2T&#jPhf$n-ixLbiy(B9ew zX)b(Ms1}z3N&l+UaL43i{PXh%x`=2N7sH?5uGM#PXJj>M_-_uZRegAz3gbP-XGnvC zq8;p}K-bMpUiNQDLz*vmKb!89q!-U-ODYqOZ`rpGYh(~r%%AEQBNh;}4)%TY3Cxv@ z@^G%LP0g_P1?VM8e6cN|tse~FJK4JBL!UYSb)1As55L4G7i)vYxbwQC{7?gPBi-Ag_HbMBtFu zOWU4Un?t(is?v8QtR~r2`Ez4TujuCO6`eYn6_9@BD`NwmsP8*iMp}2H6rZx8Am`3=UgJ|phzPrQCdi!JNU8RGZ zFUv~6qE&0Am>;u4D`}-YRLJc+-=^AzvCSw2oKH=uarrXZ=22|VH2cDW!W0Pi%ZjNC zhK^WmzuD4A`JBA>(%PzUaThI@AG%J)HPb%Pq2Q|>t!_cHzb15La-N(`Q6F=~kI4Ie zE%G@mh9Dg=Gx}L^mqS^y;saTB9z5E# zo15FvkNCMS$7sRooE{_9X!iZzgTBf!>J3A3g{d2!8pn zO8lF-{=RRsgbjY6ON#4gTqY6{WSCOMNop|PqNyW3Plnp=t!c(*U(#caxc2fLxM$*f zx~P}OA`*NXfgW`t^qI~(nBOW%pR+LIO?EXGtvSxXr1{G)N1+#XDzr|AAg>>oM z4e+_uU>RYqA$rM~bTV?=$nRW%ifZ1%-J%(sU~7`}1Abjo)chWq`2Jd_*9ULzsW>at z}j9HgP)_kh@gtp52fE-B5%&j7tOO( zueFVlK6^=v@1(4M)6ZLmZ zz#KAo3$*!pbw~!g0B-&1=1`iaksW5W%_&;qTM>n{#!tYC2#3m`okA=5_Yr+89fBFEnCoWP+J(Zof zH>q)>N>PQ6fOWH#{_oq@p@uah>n!IIvGv&&rjWg$#_=OqZ%F!vk{fXkA~3mXU_aHM zs6}H=1uMCh&hm>S`TeO^0~Pwtt6=#(Ub#U(?Mo9BBrYdu_KyV2zTaO7|E}&A_k}oC z?_|`@YK|TJ=SOcwX)VmNWOz7*3%7|-JMkb85Y_)1l8yVyrhI5_=_47_f9$DauBkBTWHC?Jf&#Rk?2r5P3tGW>{itOV$#Sa}qULxA&bx%e; zEE8wLB-m@Ai~1!4_WC$L$87ZZCTx<+2hAFQ;9V`=%m)!u$x{%+CR;$6zt zvSbj`A3-7^4u~yF`|^|3wREpZBE_jTEKJ2wzEQ});}Zz~ zgzXC_Gy*rA@VX!_lxKbh!MXUklgMv+RevYaiX2Z+Mq;!sRy0X$#%eFeB6l+W5latl(HD#P}gkxnOM{lzw+|sVcI)(a(2#LHLHNk%aM?e{ys@@fg8xvOc()F zH!IgdbN^NP;>sXQ-+ey*$vfzk(%>Gx#LtqNb=5A?-&r|nj(DCkWTbS)jCW2@<=-KBPCfL_5X z?UZMNMFCqJDDdw5ZJnL0e4Y21JCrVPCPc84GF!1=$5=f8QB4LLM|Sp%?u?*IqEKXK zqPt6B?|MwP(`J9hgr`^Y!_z5Yc)svJzd2!VU%oT`_Bm*e z&6W-AZ`q^|?k??i>4veQ>F&@ao!(lS4A zfrdo+g$ZU5W(y4brNB>RRFwtVob#*kt})4C0D@2d0LZ5;6A78LX!8l_l-oXD%(Hh? z5he0f1u;Wa4Rz7sdU}OG_Bv~9j-&|N}H6TO0(ABSINz%!4t@ziYrew;T zl>^L@$N>t##>sLLf4}q&_RmTSAdaJ7eE(9V|CFW=b}b8GZ{g#U=BwqNE2#nRmH6Z* z!rn`ka|eIzZ;WWoX8PIrw6qgq`H2wu7u~M(61pnk2RR{pd&h^G1Ws*@;!}KDR=;wB znz|58M0@I_ZMc58t28aQcw)m+=Hgd#dP=kJAOm9{hvSd|vOiMH&|(Ok(|dbqOxOVY z2uB;^UvBTVgCPGc2C)SM1f(?-0Dz#>;7neZ`6e`;+5K3M?t&#G$(08X5(TVLbEe z8*&inCR40Z9h(kDcr_rFFPAhJ_3=yzVHP-Ecqwa)8KH2a7e)mcA_es#L);A7 z%~Zla7$3*IS3y1$L-iI$p@YVICHzqkx=-p;(Yr1GwO+IU03X6fs6~Xjb2CChc zpJYliN*DjVh3wn3zj?b1=!iSvisLyrc*p^QAY-9UjNz*)TX^CMO zW)aOY_@aeC5a$(m()U8Vn620|w2A(*RVJm~v?Xz9q6%yB6e5vH2+IM$~)ol8;7A{M^nms6fna~i8Tjz98 z*ix|}0Z4UVAAS%SsC2)cO;>x%w=DHVisl#(PQaj{Pi84!%-eN0-uaVq`~7(~_q!~? z?#IFUUN`)jO~pFSz@FTxIUY`XeCS}o>pua7*6bN}#=&S=sm(P>=qU8HflnCS20kZs zyuiD&F5g)*CFE-1S84=+c#8=WX06(SyKLLLLC90Bh&g{E=y9~5;E==30)|Gj2)m7M zNJyjP{PU#7u*NuFjGp`lQ#)F!$Qg2+lCX9sX*MX?gA_henrr%}W4*Rzny=`i$y*`Z z3}{k~QJo}!K5Mwd6H#%v)rrzrG>_(*<}&`wXH*n~lKHA4$4u(8MP_9!j!A7>NiKQ# zBK907+P&I1p$$YsJJVIh9Am^c1end+q^-v(KgOmUd2h;&2IoN<*7Z)=H7xYjso6hsw2wZ;`Hd za@D)VpTFspnl(0SvAUBeSh%77QddzGOlG)HS3hjJb#^s-E7FR^8ud~^Mg}v>^uG{N zH%tE0Pw>CL_;6~aEX!X8pY?rxgYV%o<*;*K=T!6<8)xax6YtfJrHogLjNr>l2H1@g~o%pTVKpQE)fZcS*%Xro%7{>z#B0 zwrq;AeF!)15ei^>5<9DIZe6p1M? z5tMrMo-axOon(UkKTnI%#~ic&B6QLkErhm*%0?gY2~Ro%Sks)6p7Td- zdga7w8w5fpi9Vad8YU{&B2wDlrk6D1qW5LR1Z5=;|Cj_{*Zmcd6L&7lGF}!FN7c>I z>XEfcZ|fTz-4jA}{1;hgASn7g3xEM8N0RjS`xVd0?3er_E+i%dp zNHG^NDr$+F?{0I*pfJpRO|219_^_G!DmOk?mztB{gp5B9#}E)*qI)DTnK_}uE&vty zJim|X?J4RHLh%RgQ9jGcFzN{6v+}r5j<2@?RJq@B%^OZ<-rTH)Ow>c1u?c$pXNrAT zYeywf3JB5Ci5E2yVS!B3MXp3QS=_2zufV!!Y79(bf>q) z1}T^Q3I45UG5wom%VaOWeOM-vW6Whe|714Y2$uDx>2{@`^U-6VVG_FozD+Aq5cnJeNweOrDl0izjHX?~>R zckP7p^b94vghik9evT}S=RVje9~)tJ@^6d zw>liu2F_&D0Lf8W>9^XpJ+^cnimWQ0z6ke(-7b2IarF@!{CiRJrQ1vVrwF803ug{k z*erbsukm9ONO98)aG`R5jsIgCX0?AjlzbInMmrD2d%gZ}hSHq;XfN;WT$0HZWHhRF zlouO`x+7e2_@?gB0j|QGbekQFe3YoTWZM5)5^3+-Av}Wi#Vuk zy=e^F{Q4u1ghnF#1rhH!MvUspMLii7;ZYOUHHu>m+^Z`iY3`7wQ67D5-H2$jaGM-g z!)(9zU<}X&_da`}baBalsjc2X;ED+Wnj=PUpI1+Rh6PMAjYLN$*VDo`?W&Id3^CKH zfv(K(w+lWB;3K9%FD3Zie&+(w#gz655Gyzg0g~l$PY}H425iYIy;o8**gYbx2>D|5 zOlc)iKYh)mt4T@mXKs+vzFt~rw`G^q&+fmM03wa)t;_NWv$^1~)W7?X<@8;PSrX^N z2h_&uA#~Wl@Rs9Dbt9^70|zm!f1Ok)Wa(4R1mY9a-c*7QClXDUK4P@?u%#LmtJK0O=C*a?Zxsi9LFSQT!>EEuL_@KwHEt+pg_kMmXqH zZBs!t?W75VIIZjT-#Z+p>`7uL7s8c}Z~g_ZyM;So0+yEI6Q&v>KHv)Il$!`Yjthsv zJ78?73sd**=)0?K&%9&s+k{M>Zr=jhGNyIR&CbD!6eoHTESg_BwjI!jWrfYug{H#k z2T+~?A8R#;j$1a|UN403EF6Gh`{V~=-bog-=?D{Zom^>P23y+Gv%YBJE$dY|%b7)tl>0Of@o$Zd&fcOCam8OF;nldv;{*vE%0J zJm5E5P1r?d@ce%;#hKLy7WnR2D511Z1Qs0?PUla5c$a=VnHE_F=Cfu_gQu`*zZi7) zDpxB5DX8JWkZRDm}_;{-T3$Yj5OJcwSYV${n9cx&JJO#=l zC8WP(K%bNhXwtMkeIdO1w5`JN)r1}GgK`x5_u}qbuuCv6o;_N<)-$*`e=j|F=k``W zOtir$qe`5*`(-9+!&|2=-ptn5c4VB}<$*-SRF^}6CSa1WwVL=|BYJ3zDx>q}x_(}4 zz&jLN)#ptk1C3Kr=(G9M>o@y_#?$4zjuzh`UA3jk2E zYUw!Oig|ZQ0bRIyP|44k+U$nGpWoQBQ3xzk7sfQdfu#V#j-vsvQXhsCi@jB7A5)S1 zPP7}$aNP+$v7pXYvzAR!on=WKcP+gL0tw}_$!+7nOF}pxPVRx#{+`)0y`(Y|n5^Nw z*wPR8Rf?1_Y8D?FbH{D$Pd8V+V9^_X+6Kc#=P}>;_v!DbHLM4c_7>wK58U3SA@?Hq?oOy9--vB4%S+NJ zk#YBRBVc(KB2ZZPTeJhwI_mH4T_|VIF<`n4TEk@V2`$r#8tM?jtxgTr`aPI|DM0xT z4ya$MN3<0Jv`fmxgtJ)HObWmAV}$gONQ_Cg@Nc$$1|;skQ8Xw?YTLl5?%yq(!F*jb zdh>JqPn1y4Ym}0AGtG1mVpViOQR>-JkOJs;M|mdbB<$>#@japQvK? z3`A?02ULMiJk~r&7Y1>TT^hgqcr5&~&ROyx>zIEkU>oxR=xIFt?>)u)E%HzgS(;%} z-oh_;sLsSz)rQ;lrwBZXU9AG|<<~5$Djnrr_|;uLjp((hY0D5CKUo*2ML!&}p5*q@ zKIaGjM#{aOlH(c4P19eYC&0v)yWS#$@k7M4)3{pF-slnA>W@_V2eE8cAyQs(;FCgO zcM1-EFRbq~L}IWLLKfu)d+|J#F51&l%Na-N>b?xLB}O8SZ$P9rjL(!&$GSL6KW~my zN8@!utN&0SdMf%FrK@r+8qxQ|uhiE~f36e#x?v4*OSVkQ(d{l>qpFG9p>qS>{ZVo9E>=6*tUg!nA6+Z@gDQ{EP{sE$AW^nnq9gqcpK>oh_2HVn4_4*d$z8%?z7R zq=i@=%CnI0UPEWC;}dqtAbygPf(6fh;BNc~nuopbw`jh7!p5vK%i~YoV#$ArEsk_4 zuig3}J0s0^vFrDP*~aFS5(yZ8>DH1Z^Cjz*HSMsG2F=1o14Ym+5Un*styPg0)ph-n zO4OD zfr#6&4kr>b7`?&u8`l7w29Iu;w&IpPpTNRQ-%GC~Qb3jV)`Jxg^YivEGu>d?%#qR7)&j3%p{Q>grRWSay>deAfkC!k5J&sVbNSrnI zr+&a)0l^K{ySKG(?v98>wA+sYdV0g&`I0r3fVotCV)EPK5FaXI9~{0fjDa0+Xf*%s z?Aho}`!2_p9vQo4TpRv0P1-s}ic#&(=ZvJ`LSugdZgtRICc!$*9+!`Hi51zL$Px(# zBDz~(@>^2L+5f?9G=8-O5EVMk0DDdnjujESnbbLN$1k5m-oVj>TDUea`XNjVUb0Q5 zML>0QCXg|sAp6GZ4|BDVKdMvkc-?J!qEwZ!EqkkUI=t|hu5UY5Jhsj)Q!hgP_If*^W?nRiYaR?S40J7@x7AVu=sW<-d~p%U;Wg|50#lq(c5 z{PHSKcLZg7rk%$6Oi5rzqD{(!5}c*eN4javOf5yj5&1+&t`s8!UzQC_d{=gbA@mEN zqlSL+B#RU9cZ}51!C!J52{OxX;1_~lXhDrg@e&(d&W2D!7wBPP8%Y418vG?oHJ7KG zOfB6y?yA3)XI(^HREaZN^HFd!e@bB!f2{|~D@<_RSo9F1@V14%i|ZAAWLk^#;D~aS zHrvF1Fc+3{Rk%@ZnnaQ?p}rfZd{dk{#gajW?BWQdChIpZK8-3Yo_vS-`gAjWE|i3- zM%_yN=J(=5`U{EK;x_e;%&%8`avM2!A8?adLKO*_gbkESxgPtbPW2tZtmr!Hp1{QL{pEX)EEx zen`i0I4`S{oc6fn;35PJELr`H*`3nRNfs zQ%W1yKun@Ozuc!HMgWOA9u$$*M?h8qZcgGLQCp!$Dc5ew)?9- z19q>Gd=H$dmx+CqKW=km0*bT0YU_ez**AM2!S%?A&3EC+h`C`l!MN}>W&X1&o4 zHr%i{qHt3LKA|N}Xe}hD#vnxG2A>2{u&f;Bc+%81Qp2*mmp;2kM$JOvmZH;;%aV-p z#McsM%%nl1?-LW^C@|z!8^k=o38h^3QU^uh(Jr(k+NLS2EBlj<1zCXfcB#7mbg&t8 z@fA_0&)2V!S#go^!7{fHaT~%|M_-Xb7Dz}0V8D~>Nt$F}0_}Ws^m|7r`4L>nF5~pF zN4lEa7JUKw{K1blVz=F`N{-|{A?`V)bj-J2NS%Vrot@a*i>P%KheRkQn#q6ZAJ@WL z!>a@z*Gf^-N|pQFw<=&PDROs&Mc6inGTkm-kY!Bq9r)A{f%N}@y4GY{ett954}T;| z{^1+=d-U@o#wOBr&0F&9c~oCkUdBH3=Kx46-$f$Px3kED`Eg{D3slq3me$@B4+y*h ze}zfs`WD|{NvMM=8%WMJlN`Dh8|5dYZpVI^MjA`lIMlcvhgdo>twzU;22An+44}Q& z@CdRq5-Xron;CO%EX0Dq8WA;U0!76S@wpQ3=mUz{}cl5OQk0$(2ds3`VxevK=K^Wsz6Dn2$H`hh$%O9pbogYy}=)jEf91%HYT5j6i2 zVfMS}jvVmOZW^GVJkaxQFwfJ0f}`}fBx_qLj&cSc>Yke=J!kkItgSEB)waCf0em5+ zkrSY&((QTwGj>AjP^O|#h`|}YUq{UUrfIf&E)?)9oMB9Ln>hKhZ58l^Hy3O%vU2)C z(}&Ri<03K$Im8z@5WY&bkZJ(w&~rjMXKN6*)Q&=!o=f3ZYf7l+fjG_^=tH`t-+0MO z&m!q*)KK+`D&3JdfJY7*rxOB%YGnm=Izo6O!S6kTEa*D)a1fy^;5A zkB-T>j3f zURoHpS9=!S1-D){>&G$B`3iwZgr^sxiM`8K2}2FCatPdVn=$FC!m$Yg`=!w`lWvh#@n+_^Bj;Q#woBqakcbVt3iXIL0YT$U2kbs zdri9DMV4pw!XqebVIRP%gFC^swhJk%>T+=w+a0!*P8iw;z4sxTBZae%xb5~#i;R6i zV|U1HG&}g71?XZEH{p?1RR%0v6rJPDU>bdS+W&V?+8A?)AdncyGL~0|I3yHa=&O={ zTo(x>@(PKY%FV0#@emZz(dbgw=8cC@U3sqjN4Of|pc^^lItdzmC1{-*tTB5;Tw7j} zMj&w|SM5MaQ@@<*kK6N1qkU~PT6M}yce8}u=L^3cwfWBpRflH0k2kJY`_UK9z{+w_ p-J`Kc<^KN;kQ(X_vt>MyaAJf_Wu0aEK1XBG)PXuG-<515{|`Rz&UOF* literal 0 HcmV?d00001 diff --git a/doc/manual/manual/contractors/index.rst b/doc/manual/manual/contractors/index.rst index b46ca7ec9..2f3dea786 100644 --- a/doc/manual/manual/contractors/index.rst +++ b/doc/manual/manual/contractors/index.rst @@ -1,5 +1,5 @@ -Contractors -=========== +Contractors, separators +======================= .. toctree:: diff --git a/doc/manual/manual/intervals/BoolInterval_class.rst b/doc/manual/manual/intervals/BoolInterval_class.rst new file mode 100644 index 000000000..4d7b264b7 --- /dev/null +++ b/doc/manual/manual/intervals/BoolInterval_class.rst @@ -0,0 +1,80 @@ +.. _sec-intervals-boolinterval-class: + +The BoolInterval enumeration +============================ + + Main author: `Simon Rohou `_ + +A :class:`~codac2.BoolInterval` (Boolean interval) is a compact representation of an +uncertain truth value. It is primarily used as a **reliable return type** for predicates +evaluated under uncertainties (interval inputs, rounding effects, geometric tolerances, etc.). + +Definition +---------- + +Let :math:`\mathbb{B}=\{\mathsf{false},\mathsf{true}\}`. A boolean interval represents a subset +of :math:`\mathbb{B}`: :math:`[b]\subseteq\mathbb{B}`. + +In Codac, ``BoolInterval`` is an enumeration of four canonical values: + +.. tabs:: + + .. group-tab:: Python + + .. literalinclude:: src.py + :language: py + :start-after: [boolinterval-class-1-beg] + :end-before: [boolinterval-class-1-end] + :dedent: 4 + + .. group-tab:: C++ + + .. literalinclude:: src.cpp + :language: c++ + :start-after: [boolinterval-class-1-beg] + :end-before: [boolinterval-class-1-end] + :dedent: 4 + + +Two useful set values are: + +.. tabs:: + + .. group-tab:: Python + + .. literalinclude:: src.py + :language: py + :start-after: [boolinterval-class-2-beg] + :end-before: [boolinterval-class-2-end] + :dedent: 4 + + .. group-tab:: C++ + + .. literalinclude:: src.cpp + :language: c++ + :start-after: [boolinterval-class-2-beg] + :end-before: [boolinterval-class-2-end] + :dedent: 4 + + +Operations on ``BoolInterval`` are documented below: + +.. doxygenfunction:: codac2::operator&(BoolInterval x, BoolInterval y) + :project: codac + +.. doxygenfunction:: codac2::operator|(BoolInterval x, BoolInterval y) + :project: codac + +.. doxygenfunction:: codac2::operator&&(BoolInterval x, BoolInterval y) + :project: codac + +.. doxygenfunction:: codac2::operator||(BoolInterval x, BoolInterval y) + :project: codac + +.. doxygenfunction:: codac2::operator~(BoolInterval x) + :project: codac + + +.. admonition:: Technical documentation + + See the `C++ API documentation of the BoolInterval class <../../api/html/codac2___bool_interval_8h.html>`_. \ No newline at end of file diff --git a/doc/manual/manual/intervals/index.rst b/doc/manual/manual/intervals/index.rst index cdbc3828f..368899992 100644 --- a/doc/manual/manual/intervals/index.rst +++ b/doc/manual/manual/intervals/index.rst @@ -8,6 +8,7 @@ Codac provides data structures for handling basic interval sets. These structure - :ref:`The Interval class `: represents a real bounded interval :math:`[x^{-},x^{+}]`. - :ref:`The IntervalVector class ` (or ``IntervalRow``): represents a vector (or row) where each component is an interval. - ``IntervalMatrix``: represents a matrix where each element is an interval. +- :ref:`The BoolInterval class `: represents a Boolean interval. .. toctree:: @@ -16,6 +17,7 @@ Codac provides data structures for handling basic interval sets. These structure Interval_class.rst .. Vector_class.rst IntervalVector_class.rst + BoolInterval_class.rst .. What is an interval? The Interval class diff --git a/doc/manual/manual/intervals/src.cpp b/doc/manual/manual/intervals/src.cpp index cf43b4fb0..ca3508748 100644 --- a/doc/manual/manual/intervals/src.cpp +++ b/doc/manual/manual/intervals/src.cpp @@ -14,6 +14,26 @@ using namespace std; using namespace codac2; +TEST_CASE("BoolInterval class - manual") +{ + { + // [boolinterval-class-1-beg] + BoolInterval::FALSE; // certainly false + BoolInterval::TRUE; // certainly true + BoolInterval::UNKNOWN; // undetermined + BoolInterval::EMPTY; // inconsistent / impossible + // [boolinterval-class-1-end] + } + /* + { + // [boolinterval-class-2-beg] + BoolInterval::UNKNOWN == BoolInterval::TRUE | BoolInterval::FALSE + BoolInterval::EMPTY == BoolInterval::TRUE & BoolInterval::FALSE + // [boolinterval-class-2-end] + } + */ +} + TEST_CASE("Interval class - manual") { #if 0 diff --git a/doc/manual/manual/intervals/src.py b/doc/manual/manual/intervals/src.py index 633fde7be..53fb7d499 100644 --- a/doc/manual/manual/intervals/src.py +++ b/doc/manual/manual/intervals/src.py @@ -14,6 +14,21 @@ class TestIntervalManual(unittest.TestCase): + def tests_BoolInterval_manual(test): + + # [boolinterval-class-1-beg] + BoolInterval.FALSE # certainly false + BoolInterval.TRUE # certainly true + BoolInterval.UNKNOWN # undetermined + BoolInterval.EMPTY # inconsistent / impossible + # [boolinterval-class-1-end] + + # [boolinterval-class-2-beg] + BoolInterval.UNKNOWN == BoolInterval.TRUE | BoolInterval.FALSE + BoolInterval.EMPTY == BoolInterval.TRUE & BoolInterval.FALSE + # [boolinterval-class-2-end] + + def tests_Interval_manual(test): # [interval-class-1-beg]