From 13e1b358a2ab3e01c39bafddc8ffe2a8702ebe7d Mon Sep 17 00:00:00 2001 From: Nikola Vasiljevic <35523348+nikokaoja@users.noreply.github.com> Date: Thu, 23 May 2024 09:29:32 +0200 Subject: [PATCH] Neat 265 update docs for raw filter provide simple example (#464) * update docs, add example, add test * bump version, add changelog --- Makefile | 2 +- cognite/neat/_version.py | 2 +- docs/CHANGELOG.md | 6 ++++ ...ms-architect-rules-raw-filter-example.xlsx | Bin 0 -> 72471 bytes ...ms-architect-rules-raw-filter-example.xlsx | Bin 0 -> 165 bytes docs/terminology/dmsrules.md | 27 +++++++++++++++++- pyproject.toml | 2 +- .../test_models/test_wrapped_entities.py | 12 ++++++++ 8 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 docs/artifacts/rules/dms-architect-rules-raw-filter-example.xlsx create mode 100644 docs/artifacts/rules/~$dms-architect-rules-raw-filter-example.xlsx diff --git a/Makefile b/Makefile index 5d4c9354a..f29cd7588 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ .PHONY: run-explorer run-tests run-linters build-ui build-python build-docker run-docker compose-up -version="0.77.5" +version="0.77.6" run-explorer: @echo "Running explorer API server..." # open "http://localhost:8000/static/index.html" || true diff --git a/cognite/neat/_version.py b/cognite/neat/_version.py index 2e36b4546..0b75a5249 100644 --- a/cognite/neat/_version.py +++ b/cognite/neat/_version.py @@ -1 +1 @@ -__version__ = "0.77.5" +__version__ = "0.77.6" diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 80430f559..1967b6f80 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -15,6 +15,12 @@ Changes are grouped as follows: - `Fixed` for any bug fixes. - `Security` in case of vulnerabilities. +## [0.77.6] - 23-05-24 +### Improves +- Documentation on how to use raw filter +- Added a simple example of Rules with raw filter +- Added new test for raw filter + ## [0.77.5] - 23-05-24 ### Fixed - `DMSExporter` creates the schema depending on `extension` in metadata field as defined in the diff --git a/docs/artifacts/rules/dms-architect-rules-raw-filter-example.xlsx b/docs/artifacts/rules/dms-architect-rules-raw-filter-example.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..5d15f398fe1dd3275f32bf123d801eb1242d6fea GIT binary patch literal 72471 zcmeEv1zc2HyFMxsf`Wo{h@`ZDf~0hZG$JL92-3|+t8_@0C?MS(BMs6eATe~q&@c=z z|Czz#iSL~A`Nh5e@7{a-{oH%cig!KlyPo%5Yp<)Y{74*vei{)#Zh;oerz>bIV(4s23ShQ7*#E|Mlnpum!r*Iu)AO zacil!al#8e+PGj)4V9u(NIpz+|8#%qzB=Bxb4A~YKtfauZmFtRT1;(XQk=tmPM`i_ z#z^`gqq@!^gRdHx)f1#^CULGrdWSu#BG^3-SIAAWC6wRKoK5LJLH{6@O>Ug6e{Jcp zimv|UsNKTISpKM7@c^?V}5U;-XgsCn~-R0f1@p0mx8|?ZiRJ`2WDP&;RU}@Q z{Ti}YmZQq3ZJ;{(5Pjen2fO=ouTI^U$7BI_h9RYRrf`BHiUr!4qA4e2D1o(xx&#OIPEpw9E;^Y|ox z@M=5N!7Nv9;0=5}>T;(%|CnPN2Xsa{+h_@!+?nRG%I2XT@zE)0%!p^Q0|AK%G# zfT$$~x5bKZds#I|F!9pK{0Ri&ydJm8YfU{p%D*ryqOy_aUs%DNx*FM=02qnRSh*_n z>Ve$)K-|rCyQijO`R?tORQnJTH5Ic5=7mp_ZFz6I=owjl+7(Lx;+?v)C?vKk-{!h; z#L+9+Mw_}1cwEZ0-I?Ul%#GQU)4tW=9Z30c3O?fft&z zx2e?2m99Q+Z@D0q8$F^CXljNJP5GFuEmQj@{fTPVhELQ7CiXYVmJP>j+V&DfI68N< z)19(WA0)|HrSpBk?esD!X0@I9;&%uldkj8#pLf`7=1DHoT1%j(rVxbJ7KM zzo!doQA}QT{l@d=O=FZz?FKJu^6v4cO_3J5&&pl!VMN(H1$KzMF>>x!*1K(kMwbvG zE&A40skU%;GCkQWETli^%HZ&fyLm?cz>`WvEqprCGDUZ@lVk^KS*nm@XdQWO2QWkZ zeOYRg;~}nO2T{jKf;Rnu!sux^J=rhqqXLPqYh5aUOC%cmxS~$@mD&WH^+~@ma)W3@|!?DSHN5_l9HcG zi|@pK;Lof-l}JBz*;=CHCS}znNCax4gvo*wq8RyojiUO3+Mnt6kvT>`F%oM~%?)El zr7evW_ zSEiRAGHZSwO1My#$Gk(AlZaI;)v&>0rLBDdKz`K5iXFTvUFdM|F-Y87wqA7vCD`#p z?@1eL;}H$&_%6{C{~;0Y{J5SOueZzYVQNb+haY$w99HzROLdyH_)L4?=6OtiDMaU% zjUH%AvS(4oKcpFqlX=cWs~l{YVYWW56T5R&KnvISF0W8hYavBVoxZUU#elynb^A8Hc7&8P&1Zb(XT>y2_qK$5rEilHq85#APfh|uvHA#f zY3t)|5KJg~^GSV5%%vg^vrje8c1W9>bnl^_nOUOD+ccY4IkZkPVaHBHvogpOvOrbf zx%N0e&}Xyo!5L=Hs}MpP@Q&C7- z_WKevNtAV@WFANM4sL#RIb%2Lh06w0hg6JEUYRrw5aPWPbR_lY_O%*LQeC`qx$PEb zlcV+WedyK9o3nl9GxclO0ZGw=*BVV~0)6@`$t|>2W0EU|Uv=Uf6jN|yz6+BzyI6hJ zJuzrlsVBh9>VyTYOjIp8Wa-OaSA@mPkm;`8sq5o$ukCwbFXR!cYv#u7>Fjxh?OuJ- zHJ|Z1fn#HPT$;k@I<`a~9|wuRC&P` z(_%DQE*wW1GCVtzdUMRnVW5;&J}vf!nO~Ms4eLrl#ZpJqjU^Xt8{@|eE7!?9G(As? zM@egJuD+y~GSiVJ1y|U$CYn98BaCAytyCt>scKWKF|m5)rQs2#&Kx}FZO*FAi@SJ0 z;GgyE&UDT7B>yisxL9x8azXcO*Lt{EtQyR%xF;QN2Tk36O8a)NjY8%%!ETJhGiJRz z>(H?ICt*GcUdI{9AMlA5s6x(9b1=#lvb8x zWHu$#k1uozVlqi+jd(`P-R z-DN8-7#EcC)=03VY3Z9Dm-mvgQp`b(6kGD8*ljn}KI71K-xQW0ITV6og(jNlE)GC-9ed7!1jpsLAmV zvWn|3XEd%KT*x&J7gxU=@$x8)XUWc%g-9eSu-Pk}ryylas;F%4>fXj%RBwUh29UrF zLHo$wsantd)r}=KP`&&1dO`v0bUtB;dv38K0Z@O^me2|E#NS=)SgYu@-kIQstm;`$ zd7d7!>78yAI8o0nwv-fXX26cD&UO>3U2KUx?1)bfS|)mvJ)yH>g9THHkUg(EOJ`BN z6tT*OneJzwqUwbf0-aP2(3c{1&!SRl6C$`3K`9f81?cs)6h~wGpLz?>J#7TGI@i4P zbZ}0NU8lK6E&=N(jwbg%feX;jUI=Wpt$7K-vmmb1Y?Rpibx&@9bO^UUIo$1`4~M}9 zD*5Ii@_?|p?3GNR#Jla#xr$t+b{kA^^%)_r%pQ~%wH$A|eEL%R%8EO!8 zGpv)v7BW}k_EgVfmyIHR_te7pE&@KK-uUnrjUprs&I>zY!c0>oA zMO>C~Ms(a`lixgOJvK3qOE->={`JEUN0za2=Z9!%mdM9+WnGg1g%wH0GC7O5Jmd1{ zvBxIQe*N&^@uFGWd*hI3_`{|UpS>R?i(P3~KZj&zRP-GdmB$&Sa^`UZ9O=d~$b`Yi z8D(y|5GE1S5RAr6GGX@OeM9i*WwfSG7*_Zb%Yek=N2Ejz!J8-D)#%(;;7JTe zf=_P~S)%%c>lfa@Ht}vyU?;kQCflITNMw20r%1n$0DIB9L6@Bf8!fOwpM%H}&8J_# zkObSrr@@My=o(sQgFY{jCA!bHejx?+qECY-I}t7#R-?WMktK%Db%Vm&*e1RWA?!pq z&}19+Wr!>>eeN0*(qS+9HYBqX;iCmM>MIjjUh#QkP{@dF;@6PRPDFs#*{J`R$P&xP z#-NZDd(p37_ingz*nn`iENhZz~*` zWKhg0=jh+j!#+k#$Jbf5~wil;l7`JX0T)-`L; zc)XQP;GTC`&(iDP+3-KDjFG97qyK-~Wqye`B8h73{4${7uxCu}p(Cj`+OOg0-aHUe zTmGJHb2*3acqe2XyQ3%UzxFD3xQ#eL^pRdWpbaWm2|7YR}|91>f!5j7A zzF?XeZRsQ38})I`)Q*wU8#L}hm>?zZe>ZNPb@&u~rjV1&(Z8wZ#VGMLz9s|H|JcN> z-EU|?RRb0Idv#16yE3408I{?)krUIkho$K3?3<(XbW*Kn@lH&nMo<**90P@Ri1g*y05@Y*BKsuBQ*yVQB~m ze^`-IqNfVRNS=DMvRQ`%gH18)`ti%^O!wH)OjupRV6Dm}vjEzMz8J>v$W@P}J21g0 zu{bFrJq9nfZ*#G896Xvz+m#+p)PHg+*%CUw=zx&2G z8VZR`hOZ;Ny@vR?kR!@ubeE(>8)b9;^#U8k2?ClV-S zP^wsti~cAn^5|j*O*hD?YRIQ_o>!jy)Srp1OfGar2_gs@KccdDmpd zN4GpvuPZm#+{BxrHjo8|QUaY^`l$nNd{QN?Xi$93bYbRnOOqd!eYka_MHB_|;;6XW z#U^Q4)xcS5F zA@Mtg+WTG0gs-K;9>_Lb#ZKdOK3T<6r`alrYHMimo+eYAU)9KtcrJ29Y8pl3l`%1I zv~IX8&qtmhPvOI-@3C>lM)T?)4~RWPK5%qnk0~ZM|Bo`e>$zOZ(Ur>Tr)egu;6QO_bf&N!IFG`OZ|k z*K&S4*Bi4`%dx!c>wy?30o=O%5Q0n~MXu>0&aK1ym?^d7Znz-Ks8OT)eVEuPS*gRZ zmi}3VLAhDLx>nV%R&5)P3dA+T!;0UJnpjPnrQIWU=SXN}MaQ&Po)(M=enGf~1_kLH zI_G?;DUvH$i3`bD&L4Z8VLdX>qAri;ph>*eS`%YgYo+T#j&ETa!!zKZ*N4k&(f#z= zz3$5AOr-5Ieg{A~f~{7VJ$2gmpC z6uIHu@b!7@mtd({(Rn`UnoA;PE36pi8VopL=~kq94kGJR#|OUJeDbr6-9kG{iU(&~ z0*b3xoB>h<7CK%cJ4IMrnnz}Ol*tc^cvdIyFoWuuoge zG8<>agr?S!Xl;#K6;a}hH?ra3dv}1r%}*|-Ht*vQ{>q5JcC-7$ZZn4jN;zD zdMn)I!dI!Py8GSCU&ByMHQZ&Dk8aq7>thx?eQu&Hyv3*zaKnT*`rchUITclY%|9h*0UcoP@~x18@XjHlp6K6_(eTY38T;M3RoY6yH@~ z7$=-aw2C-Z@lwr=xo|~P7M6u4Idd?m!|27xB4@!;`{4PZ$jeg9tq*a6xCdf1!G*J5 z*jxe&9X_AM+z@Ol(w#olN_LD_?3CA~Rbf(kYy|jV3e)FYSK!HVEHLOFGsViQ!6r-K zI7sYy^0r&wK+va_?X{Gs^WD!&ZKnjbT32YZ+ZkLzuP2{*9hT2s6$-PF(74iaTplM3 zq7qep`y!92HvqUjl)`g1R6dbKSI=BAXfJMCe5Frp38RF{|8tJ$Ey~*rB^pFiz+LO8 zTT5F5%)*_rtm=Izs>V$hFay&eLE)Mg)r3b#_n9E-+tbP-;fcNK_ysO+;ux`pUoT3V zk)=vvgiSmQF8JK@jsQO}qAB&1B+#G3jPGGSF3wjy45ugM%2G;NVnl9Aji)y&_M+P) zs%0C+JW)ACnbO}F?_(UWP-2naWJ|5d7cIYp8j`}X<=A%t6g$GlC&ELzhQSz-|C zr%LrY*Yy|WFl9C$fv2gu`a_SN#NVl zd#YD_6ZX?bq|vM2WrIDEM{d6N*|)zPlSGOioO_?>aZNM@LDa?Rstgn|;EQ@CV<)A? zf*aa;IRgtlg;O!KpnT89d&6rVY*a4`j^&d}*)87_U|hX;M9?umTngerAx#4J`Z+SH z=!7}+DtC9tjSVjfxHT~G`CoZyHS^BgI*2h(c%iC^d#IEm6^C62OJcABFK!oE+@EZ8__9Ln7nVH;zMaV(Fh|N;;l49?t(W(O}WYl2E+O2rrHk)oTz*2bS5VK>K8OCK%^So1(jxBxaZi}M>ic> zr+FVoRWlj`K8{=*a=!CnWEbs|)zibI*A8=IUl_==589KaSIl^c-QM?=B-OmGsXP=Z z@S3dI68XyUyr%N2`gGkhX}pWcYH`&ZFYInwViyRA#J;8NItE?a1^n(OZ}bai0@vVC za}gd?@xMh)GXq;=BNcmFb1PG1@NCx5u^zvV?=kiAGyqG0_Mu6-i)O_q$48azCi)xR z_g5(VsZ!IQ1u}_e(-_k;?SP!5#uRcxZ!L=+KGno`5W3bYaA{ZE?@+{lJ5%>d$^lwRI={Iwr;o;ZD$D$#)hRIW^gHvpRWEn)Y)p zO|p-eK=-*gzf#MWljB5iZ~{QF{W^W)G22x6iY#g{ z#rQ)LV`=o`4Qm#Sj2QkEbqw>w0~rz zn6yNic*gqZ?v@_rt%U?!qfIlF_FSS@Z|3`6AGD1;bej)JDPO&!l0&9s%eQeylYw(c z_Eq48x8y-x;TToTi5D|IatNn)XqA~CGz+T|SQwn@KqG}y0|d=1zPvZNUbuC4byD~9 zC!fZT?qYVe*HgmCJ7W`b2ty37lyDQOYH7)^jTBxG4GAIh;cn%uOzT>V4H6%qyyRk} zAQ_3-9rfZGPTK}*enrFH8YC-F9yyGLT9Fx6#458DcE@;VQ{ z@VZu1rHeC(SP5c?dDgOcN2kNl8^FNYYvQC4<4-E`(x5>* zM3<#}I( z)rt7nDB~G@P%-Zv^uDDOLgsoS{^pfpF&5dq-Hhbx@fUO36o+6<{Q<75R8;SP@8-nR zuQG1v3dP5}7Zw+M^Z{emVw4*iZmQKy*FDJ5N$+vs#J(ut`n*KMRmsaTuafg)*S)%p zH7dS$0vEV!FViu6G&1=dHaid>aqQ6?zDr|Y&A+OEH?piH+WIR03QYpBS`6=p=iVF@ za!C(MFQKE}5E1rg-RZ;N3%IGGT+iYdzr0D^jxlnn3IhJlTO}4UU@3Q;D zTOh51t_;4HrEyF~kPZee)0q#)0V5o1od&lAaF)l%*)B-{IsBbe z>vVOVjRE~A4wOI{FCN%dlB<=eZL@y3YnOSUZ%TjN-jZ#*M9O9a!aXEtWz2Si-zz{~ zmd)mBAk)Fcjf^o4JQ>zpY-n^^)U^4@4l{GJn^sh~w72Ws`^*{rSXLS}yXHGMn-$mH zvA~jgyjBa`GW-n_v{AA>D_EP@-9tVBz#CT~(h3Zi)cQNzXU#5*n}HhGC$dj3_{rDA zCoLI3`m^W`4-a8jAI8sKsRSJ^;2-X-0DgDYDY1-`Ml6DYqHS>Tk3PyG-?I~=bgUED z@%_Q{8$!20=U#kHs{mLH#e+>(74{Pdb$H(hbrh3JagwC`y`GQ*#y-6l7%$~Ra}!zB|m zpJMp<1pV%XzBXafT;_F??aJDdDkV zo#I^BotHN;gs{B4Zc|gPoVeUifZW{(17AEiSby-s@)Y$({1PYf9LP-5K545qzm^4RGdmmMAQtE{2e{EZ#esPlSUCuOi}}SvdgN%JC7KI zHel_N^Jl)oQ}5azs1QJWEr5V7eDOc5Bff)kTq3@ys5uV?-2k}5&K!GG#g#S=L*vpg zW<<;|Sl&_Z`FgS6plg)V#9%U@UiW?fGF!^CJDJ56;C-7?XqM9!USVpk=8ItlgGePV ziHPhnhJeAXAm7*Qcm$0yqZoWM45^Ge3y|A~^bC#GkC&wCmqBN*b}@m6u(P`=s8oMs zfXk3$_b@1)=isd5d}7uc{l!1W)IQ$ZOAp!hmp?nBKWek40b+YViY~by9nGA!0bF5_ z!5Akn$io%p2UzFL4CIdp{19Fmp)eqe*1-@*Q(_bj{}-XfvLVW=k4LM|!i56rlA!9I zSJ_Ahgi%!ZFxmqL#Y<0J-Tc%|8hY2F(}bVZ04%iQl^eL$npkr&0w zaDM{8uxwa%3T4}{&1sW9#9&7};*d7!xUEH-U=%|Zku$F@ zleAp_fgmOXz;K;=(%Ks54xY^-^ug|-8KLx_RVf!tcvS<2Hxl)lXZJJ_UMr(tj%kIa z&L}J>LYhOCpo4LYre;3u32lY)s@S2x!I;<+f8Zqe4P;P1?iDAfH;&`FDM|O=TH#uU znk`ehg1w$)ihT3N(fH}b0I@`fXAiucL9>jv_7S=qQW70BakPO(Z!IHqY^CxewC^~i zK{KG1xAQweQxwXcZ+-;PmR zm^RWVnmIzPSlY3Js!GNxedx7rC2Q@V!%P%Mcs|x&C4b*as;{SjFLaK!Gpbn=m1zdL zoI1n@r2dcwt~1qJx+8vYm#Su69{#K3?>ozXft6^Fw;CO0+7ec)U&w?@ae`?7G&=dM zHKOYfD%`yzvkN2vHd%Pi2J~g4kCY*{E?ydhpeRfTJRqnn6!R)VEX@B z@&zokd{Ib9=_KW0iZb1RgK)v0&x}U=dJ$vue|Aa6{uubYOlV3K@PsE_>O&m(_ow*Z zCbxU=u`CeoeNnINb^3CC_hsO(k_!I?R+8DHV@)={LvFd{+U*!WT;OnUq?Qkl|LY4j%}Pvik6wq`X`9ZZo*s2PLf6fl9;j z6&ONt+zNlM5?s#ZcjH(iuPagUk&#C^tA%3nTwW5w&UH4+!8LCAes`qg<<9z^S25IK+S?`yXBxEYQ`!@VI;Y%RZ zJ|`k-+&UsB?2|li|HkCMt_1Ixn~1KHfOnnEJfiFPXMeEkQmeZ`d zJpgz*a=}^m95SZ3VkHKR;^hO)?>*0$w2#ft&=y~I1hvD~aA4s8$-|8l5bbOVEFO4# zq<9Eu+6#s4#sJTjfKGtp3c#tC(CH>O;A9v8JIDmMxXqcsHsHAaUiX$J3?RD_VTJl| zp~>I`k7|LBt3N_Qq($J=*d&DvPF9X(j{9W)Q1>E;{a16p@#ufen5$NYYS0xcA&TL{ zh{(@Y@yBO$)v+Wh&sOE?%-Mr8I=B)D1}(nI)vU1V$XC2U_B7PRt*!fPd|X=Xhav|e z0>S+m&c>9@)^5Q`3RQ<6@kwL|gL}$h@X3nR#QNZd@L$cHhx7k-V>(nE7EH)`@@Io- z>EBLr?Vrlq-@TXdWhl;dP@hCT()>P4#&Btzkf=BvMd0CwM84XD7K{%tTIR;FAzIxvELIq4sV{!#^^SK+cBX!}}!nPG*fwiDCu% zU(J1+8UA-0b9hp)-j)rr{jokKQPpv9=#abr&nCChwFmw&fFspwg*}3 z8ChWKw7{&pWf?s~321|6@p2{Rck?p3OB1dQ4%_D-r;jBm6^aw+s znN*#iC!g!)+uk4R+A5F9tAIdagery>@=00TS2Oy#;!FmgK9)}~=O)j{Sy8`^i2J5O z)+tqE05`s@zuryG-)aAszj=M!JXm<^))6YXUpN1uI3c4R_?k7Nbts-!#hOI!y*WpB zMoVe@{Xr{UIgP=*+laW|>p4~bq6Bu}sQlNY;(RUWfBBS2X>w!jA6rRDIj!|rfG><} zeE4fpalR1u!&9aTSnpWXhLoKS_mSE~frpmzNtd(di&kPYdG2@0qA!K#%c0o(U` z5ec4G{=CJXDxPZqZ$?0xt;*x1(pgtzuyZ#8Agfqa2UtyTS}_F=^n%j$YGpz7vOxD3 z&wbX@W1Zvfn!RzS6({fj7?dtlD+_RsIoo4Bh3Fi22GUdsY_`)w54H{KN?^yJ0a>f# zI|wWNs48$o2Q<=Fp?o_l6MH=rRgYXd6%pfeA@01~btRHkQM$H+ioat1-#29i zy|k^{M7ZKohSNcN@IOa}y2S(I-CCnq-ISP#0Xr+}l;g!Y`Qx#gy1A>*;~c@np>&)M*6=JU|JjXPqp-Gv;jPHj-0g^&VMH2YP^se-6rDyo3j_ z|A=VypTWz!u-f^xP=n(YLOsvz_XVD}=P0<}*uhBk$-u0Wm2Ib;dpuKnl{TSzIhk$S zPBz?|+v8JvJZEo~TLnBZXDUNsjlElk;O!J=Xm4B1@Yz8Dz!L_5K{uRWyCBh%*_@P< z4WYB`LAI@w5MX7cd8q8%I+w1(WNDkwXvyGFXl=s5k*Sd*32en?kOF4ct6)ggRk{!$ z;?C8M}&a^uz!{u@^2A}rZ{ zznSftn>w0L38T}nnhc$^16i>{Q`GGZf^{?zkD$EeMv|IB0v#d>pmx9CJzc^t@N#ob zOx1<0YmJZX4V+J`#0kGR>x{mEm!5p?K65gEZ|y9?)vlXF&qt7tMVGKO1`aS#he(fD z0Qr-U`21%9-+69*4>DJr_dM4K@zeQOxm!_h4P4O51v?C3!%LjlIJ+pqoma^^p%=K6 zadX5E+WB>&bhi2hz%MpI{R!bFTectxiV&`#Qk(lmGpib`{F!cD^M8pLg+33-c&M&2~ckvBsA^So>4 zc{B0mifm1%_Jo@nU#pRI1CX~7E#xhR8F|xyRUz{RkhhT!$XkpP@}?nko<|-Bm&AJv zmo#$oJiieMM&s={CNt!1gco^>xr)3|Z&^L=_k-$}C#c)c2(qqc+|;SWDXLf0PQF&; zS&p?=>9%A{HkDALm)fS70B*FU6txptaVLz1zKBY=5As_OES}5gb~32KiKsN+)zRFX zyK40nksZ1@SqfogK1}hhL8c2S-5*Rodk7iSsf2Zn$|nHfd6afY)r9Wa558fY030nM z8i$c}$}?5JfQ5%45SJ@3kg(B#bc~j>|s#i6pAzc6)O zx4P`4>))oxRL!ngh9GO9g%G?={b5gd*T0%@A;xwo)(YoiyX=(F2KyjRc-u+$%BEcC zWZra-?0iqBetYB{vCUfii8u;aBmttrok~stL<8UIfZ>GtRtE&9+_$nd+6_rD?MX4- ze1i!7Bb$Cgh?a8zw*|KPM&?Z*^;N`8hbZ@}BAk0ZYEZcDXgTGBS2kdFEgjgPi6)wyL;xm4+@jCW4B_fHKCabcsNB6#waY=YGj9dQ=|k14 zAPWdB#rEgtV>uNVfTyp+eH$r>6`AO0z&<}_UWA1x33oq)kadxB6&k|modS_|f~Pg= zx0eh)MYcvz!~S=~{4I!|ME{VOEUae@Nh>zMnF2)LC?){)G^w3*(M6M?V2M!B^Rp?J z;0YIUIMj+EKL-T-EUYyIJY~W!2+h)2bI-Mb!yu{Jr1^tXdqXY?sQWd-jed7gMtG!};J1D4xLxs&(Hqw9@mX)z?%s!!-0F4N^Yi$yt1}AM1#TBa zf7cYY?DoJNeWj@8=7bB}N0^YI0kYOe(936yr~tkX_(cVz@`&}z(>d1PE&~RgMc`Xl#ML=ljt<8b42sQ4{VVrMpH_sd$hlo1X7D{*4{)AVVqxY z^e0)*li4i8e*)A?SbmhefzV)d5*}+18vINK1R`X2{0X36D~pJO=c>Xx;~dk`a{5?GpR^$PnE9%~Rpq_}Z7FKM{UgVEnu42$TF0&bNVM>PKPz0uF+XYIDiDcq5z?8~J9Yer^NiTtu z4$pP}HS*ow@Skl02q~4^tVJq1eq#4Qz;@|3`XgBJP0TmO{)qmF7z_^o)(L-Z)?Y|P z%ps`$=K6!ql7x4bO%3_^a0dvn7u$44Ogw-H3sBoG zz5h1MP?LxAQJ&KXCb$1;0>bcZbfNqy9f{$*ID#fi16=LY!&a>Vc_Ip6am2KfbY1TRC|lYV38Ux+>T%il;v@bVw)JuP_eO<0*C zdTVeog*qvmFXbC0$X0?TAk61O(UO$ud=IivO}CIFFSU~(g2M>SzNf>7qMwQ*g88`= zWLKAbk2vm#u@a$KZ+lYj&kRCf_@>#y%WV@8}Q*6-*=hOR6q&E`~#&5Aj@27Mm zHO`A8UFqj>zTjtOsC|nq^|zhse~v8(4Bui4LhN}Tp11a0DpIqbz#&7{Z^WK!_8Y0l z*zyhS?~48Ap}z);9Di zJtmuQ8eL%fBB9)k3pVr2tB10ImEE}#;{=$;H*oG~Ja&+1I~{$$DuX!0EIt&X{GRcc?RU46n0*`JIs@OW z@mcO4?(xrw*w5@klx*nuE!;Nn+hcOv!y|H2!xpWwaUBP?;cUfyDfW;@pDJJOnhk@e zF3>A{c#@W9>?2^{xtn6pKI_SL8NOFgrG+dR`gMui^z7M<>Sj>Ap!_B~M|A1U>)FP% zg6uxv7;6x-ql~p&Q>^$yGx^t~&uVUCUws}+L#IUkY$oQhxiqu;s)HGCx70$?2aHID z&!W=Kf#@RdtPMU^FGhJNmB!?jT@vFIW?tsL3hsJMx5C0By_W%|Q|-8h%fwnK;LIQq zLD0LVZeDyN>`<@=L)`7E(?vzsD{~tf;WU|#iPgqY+GkQByr(WaIGE(pBM^}9>k_3B z7AI0?3EF~4d__rhTmSR|-v#Qfx3Yu+1u`e}yt;U?hTLM23=T~#`-E(S^@_TCw(ne- zoI7>7IO=?_^3|G(Y{-z!yr{xxGrk!R@<*blGXUq^y0ti6ZK#foZ(5k4P<-uC9=JadDjklZ#UP0N!50rT80$QcBA-q@X;TI0rHTda28n_k$@6skKrnrW%8 zbh4=DEj!y{`04`{;&*)kTafP<0n6+RMpWwT9LY%ob#~_EI^fTHavilgJKb>+4mI;* z&3IHVX=d8gi&6G+Z<@ZrD^1dKLKK{>j1UR*hj3 zIP@xj=l;p|=vJm-QwsbCJZC@BADZd8_l~nAu4m{#W8`#o0gylCe%QNIaJGH8M)5_^ zzHm*RLU)K>19mh~1``6DlHeT8?xHziV9?vyNuQy!~gu&=t*GNLfN4D&-Ktb-A3Xqld!)>2I zr59&DgX~9Rnh@$q=-iaTrMXFN-boxM&`0u~* zVdic{W-9)xj)pV$LxFtnMeO=ZZ@||0x@(72h>rR8CiNFD|dcQr_elyhPHY%+dI+FXyR4 zM#_=W@^ts&e)VuiK7%W6z(^+Y*AI?a{iU+q89Ej`8_I*`F(isLL+)SG(S}$dq)W7b zh1&Tb64N1`_pQYDdOq4nj6BxY>niX=VS0c}d1a8QgB6$b=!HZB@nzFJig{oVPuC?D z9%?l2R*}9~3=&ddLmIPO)Zn<(B0MgC?^fl$*efL3!iLOdxtD{hQi}+=(0p2-_Qhh8 zBnTUFndPDdkEIroa{2qT+V;g>BN-Pqb$YVgwVv zE28G|_ic^ni@iajEn+BVmWvtu;9U_t7n)ydT3;+aNrH%>s#)%pV6AsWOkDnct;Kz@ z1SI1khEL3Lv4UOR6|r%l`L{Oq#S)Q_iW(Z3pqz9|L( z#Vd(wl-T>*<>W4^qyHBA^`BGzhdlA}iJF=&uVW`Ay({6gcl7V+=^G>dXA=Q)4SFtH zP86G41DAmN(**)YZa8PNK0wHHfnedkEd5^u_vh7{^i7G@v3-&Z3OTVI;U`nDj}oKt z{TmYDyU71a@{Aqx5e=4Lr?+CsivSk_=d{Zy<_(#Tx2g!-i!c8>8~&%2`Pa{)_>p5D zetqc0&h9UdzVJ|&O!?BkYRj5&yoE zDgNmLB3gRCpNl;S(+9{GWV*JK8^a zn8!bJjKM#C@WFpT4LwJHs78Tao$Ky=O9El&+0Und$%S@?ct6Ay2c)aG;p2NhHzT-3 zLRhkc^;PMiWIC@nvEDWaJ&DK0Nr7dv?yUoNsJs2CL3;^6Jt)|#n+%^#=lRPD2h`Qi zox7bB;*Yw&R0sKd2%5c>H>;NVUIyJ***`}-7T+~o&>-G)5NvO)eNr@0?WrVb+5C`4 zx(#i_k&<8s{OqEI;%)n5&46+VimR%kGyoogS`H@$(}G%Z*k~0WNnh$K@`I->kE}o8 zVQJHY;U6@b`lw{ikUQS}_Vi+rPrHjF@Ru67zqj)_^5qzLLaT3Ig9Uu&bF^t_Dp=oM zFKLs#_0^!P_Od}tcu|Q7)9Wm1(lO$V@exaGb)t0!8js^gH3GfD9uY>AW1mbWU*0b7 zccHjiyB`3hSE{^O*b3s<;bEKk{nqP@mR@7duLpfe|?8x2gBR#mr zt;({*4kB)i;d`Qk{1%Ys51kCN-*euQthg|&r(AaeBoAoN{wiM6)w~dj=b9aX+MD?% zEl9O~>SKOHSxLTmLXV)Q-vkJGDj~bdp*FKezdB_dLgIX2xrT z+ePH>*#&tp;JIBw5q7~91N)u$jJnbA1t`6t)svwbp*uwp*BwtgkTI*Eg+P}_eMLf= z45!$209u6mfqsU!vGS}QQu%R-#WTAn36>Y6YVu$8l=daaZ||$=mOXqO81s1cfrsR|=cVp3`b zd0JnB@0{dH?ezL~&_?J#NRtw1SKH|HeJZ>rc@XP#Ookb>)-`G81V72*Z%u%898K@* zgMxBV9QBVj;6!eR{{g-M=htr=aB9}mr*K^o`&h1Erk0uY^~=Uro@<(;HYR+Rc{hMy zp4XRd+<2;k+VR>@2<#T3$N`*`^-7Mr|3vLUhz|y}`XjY1i=??saA!X%wV|{c?mNcl zxl5c!j@t*_?wNaEEQv}mFy3}-w|;dc@b|YuteM=)nU>Bfr6I7|=jAFh`2gR;?mFG0 zD8GoUD^9*~_5SZZN2nY;>X#_~?14nbknPBwkLe6q1T@nI=zv2w5~wkMp+wM;j#0P z&~8|>f$895xH*mG=*%TNiIVK)^-<*pBxn0{(=L0TzIx7Xf1$0wByBpLw ztG&6UPI9lvgqn%!7-)fyW*zzJy$|zFhp|dedgqQ3qCyO&Zb7T=+)v^geUbCPZi1jwwWX z*15aE*PjQe*%H|_s$xo!_ej|uMvK}-3Os3;&R3Cse@i}+AsFu#k(*f{%4hN}?G-Hn z3I-Mumls@P&GPsxe>l$RgT`TUUPh ziI5tr*pkdR|HFv-)787U&RxwL`MuOLwYH4^(8TBt$2P^OH9u%7X1@TRzdUV_0k|&4Q4AGeX?s^IP5cbw~md5 z?`({LdeSr2pvEQbc`I7)vwOw_IU#e3fRiT5vz;~2>4FpRcpJWbCkS}F%LZ8XJjzKq zTXTXzBG1M_dxtPlm^f@33Oie21008fPF8wh+ciLb5x@|@{n-6XC`0H33Y?TaY%1_P zIX%4#fI6yP=uZ)YEon4u&9R*=X$YOo9`?3tys8Zi@25V^B!b)%6Krb-xy*a)Mu9%5 z)Hi2NOvgZ3CFqVW-2+AwCl9n_GUGyUshLi^;`KHc!*ROVoB}er!hr#LvXlT8phrCo zI0raH884JRHy)?AJjukS52}3`I1nMr?2X{_9+*%cMNxB z&#uJfLjnZ^IXxh|$2GRAC!D9zxxpauO!gf#JjLCPv)0Lo`JFV6g&{D$3UqK|zYj#6?}* z?M6oTi;1*?EhQYOCFQ-tHz(I*C`{AvBbrLjM`<>GshmzMq8an#d&1_0}zmjc)guF~kcDw7L)~g+-c8NtNo%8>- z_a*RDZtMR_bdIU%D3mnoM5#ndIE_w`MpKHEsfZ%Prb(J|EpKyq1^mw^-}Q)l!dqSM+?Pb!_$TsP{Dzq)Q> z==jUGZccm32!C3-qq+%wu9ETH=Z=~1dAM`+hHvn>Qx?zXmv2UyHMrM!1Rl9l0unAe zansR%l5TA1mpIM2{f~Oq6t>YlAE||On!U(fzGL31J5SAGc~ul<*1)OxQdmZ_ z*Z!wIZx#6him15wy&^6q8=r{((Avo!(W&krScs8wE7sP2DP#^*?0t}-cM>>-OgsJ$ zFOB<9VHO+u1t}?;M@hF7^Dfeyvi+Y7D*#2b_Qufu;IVlZ6>K-zyMg&%R)$>)<$>5D z`_YfoH2ajvr1YDno712@{dgt4Y8{ce~faCS0t3d*FB@j6}y9DV=prT49?69RRWC&$Spd9QQb^v;|8 za@V39qhsGY(?Jl{@epJRMM0)W>TJDKI_UhBFZwu!$MPgOP)nZ&o1a?^AtG=~NBe<_ zi@9sBKOIytYB_I;Z?F~g_70{XAcP16LaacAvjr(USCGQnN(7=_U^MOXu=|5mjuf_O zL$5>^;#~eXJfvY+Jr1tvtK{)wi_oWQGI%X=ZF1DQKj3BB9#@n zn~*ndEqt)7vA#ZNgwsanrspEY74)|e>rD+nk{)j?h}dy<^4oGvr?)BZYc7aKK02Ik znh+D%Lu^=l+q7~@UPhw3`Llh`3RFj|_fR?%>uf!zhuH8&!`LT=SA*SIk3xjcgxgMg z@b##aZB?c-IXm}_w{85w7a6lEJWK~pGDeE>mglFatKrjEG}AR_#jW^V*f(zF@56lK zR{cKSH*WRss=je+eqZPtx3>9CSem}m)4L05Q`RXRsHnHSXKZJyX7UqVUQzr?e5Kvk zMz_GJkLv4AWGA^i_?*a4`dBw>!|$cO!Dp0c!RzNc-E3bVH~pH(!i&?dNv1m;m(dn& zGj|iAmp|>-WIo@C6S%&l;k}rrrl0J~i(|88Uj~nrl-s>I@AKUcoEWs#*5AVqc5P+7 z@S^&)Z42dQUvo`&dOlM7MmyRnXt>mtcQ0I=t#i+yCtQBlJTz9oE+|%sJi^6Ifwo9BVL!!9_y#zX%NZu zaE6^l2XE!l#xDPQJUp*+j^zM7q&UZo##Qi*lcx)mi~N=gW=D9{Y0iILUD@ z$Gw|9X^4W$UX{fC6$aslXC3=ECn2W#89Z@u$+c~ZK#rmNipr$a%DGPaD7t1q>jGQ|1y;iM#|JrW{GE#}|eyeX1m4;2@W ze3K+UY1mtji!Tqhx|u9L5Lg&@B|d%orst276}%!ulbE2(WWm4mTzA0+1mI;spZlyb#GfD4syicmHKxB+e^YKlt2uv z#TlRI`$4|7#}hu#Gt1&zr(MzZDU4OK9>l2&&ZmjcP=F+=f=CV zfc^UN@Y--jU35ipsux<-7AT>tfnK!RKy=Bdv5Ll@U1mmC%DDK2(}KJa zo{F8B8=v2eeyExfIQ~8I2IaX63;CeA7t-b34g0AdBcYjt?O!pv)r2J$jZ>=`^ikl-nq5weA zb4pS_g5+mit45+jBS6gic}}~wooy9DNg*uU;TjdDl8m&zFUIHR%(R+mV&nfniiF1( z{yZlEdFR#R2~P|^0N5vM281Gf05FdI0TRN8GS><2nX4(>=l>z^um%naDD_yj3&rL` zzRNODbdm`>p73#s>Y9>NgNf01qhCww8>W@~TrA%)68CX-HXXPV|$Odnz z4eH1S0Z~Yh8}aG;tp^S}=PQDwempc7;m9&$D2CO2WjGQtnr%sHur)DS9A&h7#AudT z#Aps?Zqpr!(b!Xo(I!m;qqza{0hqSa5}*EA8Qv~-a2jLut46nghX=|e0}!@LE$fFm zw>ZYfB0En~!OEt~8>wgp(2;ULm~TUaZ*nqoYB=*D$TjKVAjhul_q={aNAp({)zqgm zMpu*_^MnA@=B3Hp2tZ&)U{9K=pAn|Io)NEeZVX27^ur~o<7_OO7?mlLCcSS&QO{IA z-@MiKb^;3 zkZ0NuoqwV>Xd)ZPyr6V`&}QKHi$v$T!-&q84Z}JwoJHyUR!Qnr8xpSysCZRCbiO5< z=sd#SZF&^Z`EYfj^CjxUQEXMgQ8;s3x7zLv%a*#YPLj|Eyb7@R0AaC0D)iEfq6e7} z%gUJ>cg04(L2l$k-08U!Xc6+(a1A6*g43ZPIZ{R%Xq#%QjfauQ09&)blV?!onUjMA zf{=VF)@Nx>+J5wRh6Y4+mIhdL#UH4X&$Aua8c0rll{)!#a`J<7H&1(*sqg9*UGTGm za)g_ROVD<={_4VJd+(&EZ`6z)AA{k#-F9GB5ZT}nwLvo3VA4FIy6AT$smE=x>P)^8 z)yXsv)oJAt)#-b>MSmiyv(X}|JEuidSB6vvF{U+GUc!r5(QgGg%Y_yAEG8|~S&D6| z^%-@!k)x1brc#Tt$)bREYSCBQf%zds-gZh}pBeh`aUG&&9x&TPjrE%$xl;p$QyqJ1(XUY%`0G`k9E_f zB$NjWHH)Rl1`X5(;#bKAwx zsFq3(oJ{iHQ53WCOD)&N`55K_2;jBKVz|DGo+^g%)^L^J%|xbd^h|)ocGT>J%O2kP@l*4g86JHWhmQbST z5>d`vqePilxA7biMfnU7<@gyQiuM+w)=A4WizgFNRId|J^sW<8jIdfG<9z6=N$H`? zPpwb%G)+{<2EsSU1|x5f4K`C}nV2tiL!X@G;;%%lm&sWiE>dSHjPu!$PtLN9I*TJY zi||d#jWy~vz9(m422v0SB4>F`oketorpY`aO6W}@O5#l-iZ>-nQ@+%P6-1Q&Q-~-( zO~GnqUZzA5yXQ0Y6%pkSCCXtUO6V<0l*M%$W$uxP5=umQ9!f-6u$8EF$!blLr9_m4 zVMG+OFe1u%IhRz!kPr$SiO));1*zXcgG4ZiZi+R02@F`=d$Vc&nnt3<@ zcLGMps!Mr)I|t|@oqmYE7C0U=GxaRTjnGB(A&{>sx_rR;0?2_^<2lji#ejEinDgLk z1z~3RLm-5Y;(@WvEdsX49?f126fah3pm9YhVT4`5Rg+(+8|mOFv^m%=`?r^;dnI7>4;il`CTF6{++{B zLA^G|Tl61(9YkH`bvCE~M_pPNzo=`zm8FlI-Fyo0@{e_}7TFFn`FNN;bqG#3y`MUw482s=|FqRi@`%awdQf z-VjG{EE)Isx7M4goFlq{iV$r`0B;W7Q}Zz1mc5$B7~PJPT#xi;tGH1$TBKOaLHNF~ z=D1^6hZsGeR$E{UeIAMqi~{ygtbU(~Pi5;F1@Ho9{D}?->ejRfz1`}q>Q9jF&x_^e z+YW~O3>s{aNb?5Ko~&<>eGUb``BnfUWGBexH0*_~NbQ(>p+$&%)oX@&LaiU7{2&IH z!*&K39SQ?{bo>8&tpnZQHga#XzlnIbJiLbGE9{yW4cqjqEeNm{+Pu zLv4r197u);DQwFvx6i)@;ZV7~l@8MJf9YR|zw;~r3id8GF{u*+TrvkZh~5`6+qW&n zZKJN0U-)yR3PAoklkL_)Eu#F)rZZ`wMVtGJCQzb23r?kj?2lDl0k+O*G&hB^vyq*G z=&`MZo3(tiJ<=!~4?_xblP)Asp%0KytcOEiy={~10itrGTI2`$wx3&)h(p~%uRuWb z7KMfZ;HXhH4m^Sbua%7hQ!@ytWRXWIinE}p#sfPs&(cbRCzH&NRrb4uba z5EgOJI^1!fzv{3;3?H;>8}4np(K8D5gdjYU_!4r)!rR@=jT4J4HHjORz2>L<#2b0=lfG0zk~` zyN<6$YHo<^s^0Mnoj7HZIW>vpp7$Z7xZhy8am`cHlGHw9P|H`&*`{|y0T9w~`85aAF+nqoZBpL=E!+zAgt z`4fUXYWxU8=ght)i&2MTM*A~V_Cq|)DeP<=gW^h1KN8$)B#P+mGh|z05H}=linGt0 zkyKiRJ|mJ3@{&2~0Z~zz!b%Gw<6ZTHA2dFo-~f-rBpd+8r}06VidSqL9Q;V*gPZ$s zJ|`p`V;09R-1vy5k`R81Ff*JT5l~(cX2v5aDS)VYr3=*J`~~6%jvzoPPm^|0eX1SCR6+NA$v6^PfEn>23TCFZlO~@;|lWcErEh!Xws8LVX^; z@Jq;yeh_pM_LoT(^OSgtoD?>yNW;7^(Rq7S-)u|x2dJd?-XEZngHWOPS5&g!4^T<% z6htLGq2-fF(9YV*9(fyH_vFf4=)l!p_UJAO|$TZJgP=>xQw%t8?t zMI%_mI&VXE{%a*+jwl6Z6T}f~;7z#G)y|&)qR&%s*Awz&5W7VB;=`ID;BncmJYW;ZN%>+#Q4LaTHi}0} z7mGR!bXznWaaiiCn8N+jQnZ$g?8)7^Qgj4Jcz+3Lki%XA(_NTeYnk=R8<vYS8i#->0#7|M>m)OgS0 zTh7NKz?Qf;j3NRhP$}FfdjPsYh+L@tgo((EA}>*vS`*S`Rb~LHUxO1NM zD(DhHYo#onhDIbrKVV&MMGs60!YT0$VDxa=!C)%p-k4evJ3G62GoVd_^cesfB!-+- zs(r<+sk<~!s44Og2+QuG-|>&fIiCXtdf!t`G4F~Q-~mvBxf#J74C0tnFQY4HaAIep z;c<^DwyUu+5H(g%TcSKS6B-6c4AK=LOcq*8t%|zcvedQ%x*{?who*@lM7A??}#F@arXe@W*4D-Xpn%&IhROK+#)qz7g#=KXLt&a zC`#_-psqd|VIZlf%k(fNsq_l64(giVu_0#vnAhO>6fy!p@l{$H)zBf67@SyfWgT!V zawe9&|48xh4XFTD-XSaubFh(n@NSA<0MCbpB@qXq0Im~|UKDD4pu(3+^3fW^&0D3J z*Ly2~YT{7W44^ROa#g?rY4-N2_B6wDFVCPGBW?h+jx-$5N@$VoHtM3~R1=Hae2_{~ zZIKQ@RJ%O422pls$KZ@XM%F;~k&mhBC{}jao46hd4a6Cr5%)wDaRbb8xj}~VSzhjk z#`!qj^Em;cJA`fH2qB1V^H%}c0PYnm@97VPVbB8PRXb4>B2l#|7QJ@s9X=p-ve0Cg z*SUH&E@AZ4HLO-~)iB*|OCkMqnF5&;}Im z;;#}kncwUg6-h${MF9$mq)?#Rh+QW_0q5VM-HsEnw5NU!CH~XrNxwDtZ3*k?j0v*K zeXO*Ea^|bPXp>w#qNLTRzUlg^EXhUZ_9~b%H9W*y?v}pQdtB`+?WXA!_L2P9%=+_o zEc|u5h(*mQ$%yEG(+Vf6f-l!Q_Nz#jl%CRxg`c)MC%wldj!7JsI5u&7t6c1`@EpfO zDorE2!gST6)8JR>kP$}3b)TKe9r{g{(cEvrw_MpL`9=>oU@665KZx6xWG+g~9K(N`oS59G{j%PoYQO zPLww_IcsiGQ0}iBaf4NtwQx|&JI7A#ogGr=HjFaTDM9;rnRhK&rUH-Z4mZlB=hL?` z*&<16tt^{j&ki(ljjwdzvuarQ6Gw|TdW(k}>6m$JG<4U@Imngic4Hds4Ud;;-u+M9 zYNV;FR~XV*g+KFxv{#r$>pteN5|I+=63G(zlA?eh6IbM8u%Z{5)x?#UZq2Ln#KXTi zvYJ={))`WAS_yAu_WCjup@qkpFXKyJfu-|r*B zj_wUu2>Dx+Fym zAG#q8{{(5!#;!~N7L4tY;k9D+Nuys;JV!qP6QALgHN`)GO}<;$59gl03wv2~9EojR zq7a6t5XuX_CMG!UcgELgyc|^@UNgF#juqoRIQdLi-xwn37X)H-wkhzQ9!H(xX{oly ziSi?&gvS7L8cA-{!Vj!&9HURbhS)^l2xMVF8@0k& zmYiane%s2jJ7Se#&FoO;kXVI|fYIA4X7&kNl|2Kqrgd;(OT6%_ys~Wr2VO!2N%F4M z<)M~__nqsd-Dq`G9EWV!6-m1VB3RS7#2Ui`Uq;;^YhdcBF~?k@mLdPUcb?{3ZXWA3 z@QbD_Bnq%gbC85r*k)Fo?A+ut`-lP#CL80wZGIG;#&%`u;eiXMx-_z zZ%h3_eW-ewVrr7@-nvk>WoCHHF~A4fqX?O&dowEIHk5a~@JV`(zyb;F)%aG9yAtI% z91;r7(+qPCb_a@cG+z$eQ#~T{Mh=}skt%b_-?w&Dpp@Vhg=6v8*&{pdZwApl1Lest zM`OQ{BNmV37?K3dtjh>CO@$IbAw&DrhLamkm7gp>WulM1nJJhdnUtxycE=qEl$km zWe%uDfwW5VFtSLoruV?k=daG2qACLnC2CaVfN-CkcDoU8P09$A!#a4Dq1>q)0mb36 zbF4Aco*D%BSj!taY=py|QGEj$hV^y4p&1GE$sm~`HS9LDIo5F4! z%>Q~FpU47r34#hz@n0bE2TG1U6^NXWOYW%fjtg3-e7XzHS9jevHQC-sYGIAxR@FG> zGytlRp-_B5A)b-?%@M)b#+UIdh2RuzHrh61wlJo=yBR1-SgLgfJx8Gd;|#-@EE|YR zpmz>QK18g1_h>|pdnu=l6h+DlLeIbtcBIAjU}0uhKy1O9I4=> zK=977HWKCtNfC;pdUg}k6gyPC6z0ZGF`E;yJLau9FveW*@RwQi+bkfMn8_J}(&7K4 z74rB@V4ul4c5g-)>CpE91BHt0`Uv2Nu8@}O>4>@ ziO6cKCA50KPWH1QLwiCxKjIMCmMkJk3S~ zaJ8Ga8zgXxe>pO7BJ5eTpwNpO3qOJk@*p2>35^9}cU+uzb1jOtVOm14k2MI`M2e?q z_EB?_YzFFG;NXHkf#yojngX?FXsCMv@JE3*e)9JX9zWcE!T!?+X~g}Ne}#kmwHi=_ z;e$S4##Ds(_u0YT^+d-K(m3dYy;Dkbhb+k3CF`NY;yV6(tjpAYc}BE9-wsY>ffl!e z^G)hpkUY1`f#M#w%fk~X?aw9GK~55|0xaLvS0>Rs+;$f5xU-~9#>X1C%0^rcpsTCS zRBAI2MWr1Zv$83kC4|xe(TgHP4}}a-LfyXSdAOtn8Tu}18xSF+Vg;&&P&~n}gbp4i zlF&+OzYrGHfmk(pm-U+DN>tQ?CO`5p2;^?4%!gWwe-r1P=aN0+A=dyc0s=v|0Zp4z zoFA*IOGgozM$oumzZQp56|bbi!?#j%pjbGj1EvldLe)W1Bh^~s3IwDMxu#LB9aR+9 z8_q#ySIeRU=}U8rGOdRuGT8`8?c7y|@lbEvIV!4=&8AOD)ByiCrzIFyp;$tLE?RFr%+q6sJlV7T&`>%3{5JC)m+DOEi@*c0 zDK<>~AO?1iZbXfhL(H8~i1D$2i(4ATpyD_R$Tz>uxRf0X+X2LwP-ZW4bzx!|!nOVB zU(BJmPAR;P-a2{!iWk%ZMQH7VukkfUFTMuQq&O++%@E*YzRR1ZFmvv$1t{XsftpZ1 z5c^p(X;S1u4I7xvaAUGBR%x1eqHe>Wl20r`p>Tc=j|s!QwBe}ko!G_y$V>nb2@O2P z{5FFd!O${?UL3%=+b3Zwb5|rNK3o|$ikQ4bZJ(>>Sz}0#2U-Kj*&)XP2nYc9vSNWD z1T&w1Ov?!2h}7w*HWhfoWKj(Fk}_}XehRHiimH)5M3(z@JW06sPu8ZqsFXva3ApCTk<+s-%!YZqeN}G0geENQK@AX$yU2 zgvYqMkm!J|1l14KC&ay*V$E_qk|ebosnh$IC6d$OI+a_75fSGY%-D`f0d@z7tlWgZinY?FbH&x!qYoK#KgltIWp!V251Y^Oo9GZ)5Kj< z8@jjDV9pR!R*2?;!L*yn#xP@qz^Kfru@&YS9~N-jtP+e}<4=?vDF~U<`p%Jo`+L^jP+<3=^Pad16pdkh#HpF3-NGVBojK9d}jVR8e)>|LC@LHv-66AB}qDV zjh{!Ce3p+$l(%g_oV4eTFy5S95e}m+(4OGgGps-vmkQ39c9CfpYCd2>=Lkur_dtX+ z%ODWq{8s)~<2a-w3^JHg+(w5V-MJvYg z817{AlDpYlZ3%!VV!>cFG*CvrqR>YsSa>FeFE*fRARZzo!3R%kJi!`{`r%sueqobL=Gvl6CrS6(6{?w z_)^VM?r0xJbnI~aNy&eO6;NvifXlx%^Mj7_U#~#{bALp!z|bcgimy`hIEPh)W5q1S z^Sh@N4;DkG0f7m0`CROKIKs#uvoVr;1W)ws%~qP%YEOL1YZ3mM|{s zIYlPvq<8Q}H8QDHdyLb8KkWH9-y+G_dPFsuwj)@Z&G0G ziU(&LF|Mu7E^q&CI(Z&V458NsFUt5zidsG`Ea*N^d5xxZ3C+L>!!7mi`P*1(Qk;xO zXpVbg-;xP3?@ZqkM(Wf6Iqf#6oD?VcwiOyI;}>wdwq$KFZM91|w?ly4O;j5rEJKV^XP-@&Vmwk|S4-O6V>`;F}^voU6GsE^E2^cG>yP6a* zo{fQ76_=S1I)bhcG|RVX??nE0s9=S98H~Ardm6%Z8EUpgW=zW&rJNq@3r*IL6Qe7c zRp!)fOGLAPrS)8gSsHY@xb%#=!C9~~o`r{ks)!ep`<-YfidvEJ8+(Rk`!**g8`{L^ zM&`al$siK6`nqmgCZXZm!_ueBKWlP#dVh1Gl_Vx}YQ`g>@?eNZ2wIX4ygQ4*#@lNE z*+5=pibrpu!i^aRX^2UFFh`7!Oy8!^;VOb}mxK)rpmG;NXCrzBbOM*h=<+}W5Fy+O z$!9!c;4}H+)jStkD;eR3;KntY149uE#V{~QJ|z~u(Q(`14TCHK2Gix| z6tg4lj#NTj2;o1%g8HS$4M=Egaxa>|Pi@ZidMt1Qw0i)nJJ>KoB4lb@i zGd>L8vW9NgLN|QL;kg(}pY^EPOWxzd_NPFD+pVaX&iRL+i*fcH_W!PFx*E-p3$R)Q za2z;+!0~fA#t!bcbkFc8f51IKWVt@a!&kxch;s^Jg8vS9{@ZlGue|^s+SM}RSFsDg zE-t2#ilFmY0f^$grl4Mru7Ll@2BeJt*E#rqq6Yc%JZMoN7(-;O#u0>Ppk9e@8@1OB z?DA|<>5;pZFh#)kknoi)O!MFyF3@5WFla;JP~f1APc*|W$h~pTFP{FVsT(!9_|l4a zI~eU@#N!D6egCIB97Ac&|IWp~Ixz8bN@EV``GIr&NLFKCv{wD2>k=Qyyv7{6`tOFE zy?abQVoLPo2|ShM`8pN;@&vU3J=hz*(DPmJI5fJkpmSS)l;eTI5w7#N8fsAZF3QC3 za~n@rv3J}0Z-sh68a2=T0M%y+X31@2q6-0v+kE(|SY=)w+ST;rEqSQEH?8S78ZM({ z_n^SyPDiOBDb>@Z$|4TGvItN8T#uz8prXq<)Eu9hz)_d2(S1KWfrlLV{TI=wJGy8N z1z#72`ExS|F1ftAOJJei*v_58`GPSGu1RLV1I}kAH zJ|?wMRB&E5?%?0?3-ktm4FFX!5jPUsLog9)?yMb+Lc%uD@4vs6KD@met`~mMZ1(<$ zr`4p~2fGoT0gQ}6zROn7NT>FLu~v$u;T}aFxCn??AvM@)qND1(T-)X*o_)jY$g%V0 zL*4Y-N%5hm)W-J|@#vq+*WhmB9y|l9rolCTYBmQuqHoPngRsurlJd$WF;+`|F@Je0 zIP<5+{f;IJ#lKh}d}jqq!KETAc))m8^@4=0(R!(aFU*r3QxjM4@m|5X(xM|OO}iT( z6>O}!f3eKJ^uApDHnjwKQ!_tvv*nJug+`%8MrMu{dz2P-HmhnRw0HPKnrG>{ebdr# zEZyp?8Iu$>DSo_t__ri@WVvIq%?gI`9?Kd9C$(LiqWvmOr#9dXV}iq<)n#}_!rEi9 zOQP;finoZpd8Z@ol}^Q0=hln$dD=dmpU6^pcW%LZH!CgUGo`2Q6?|-xEpu+2`{jDY ziQr^-myYN8J9qk$>#<<*~5tW-`gtI=IZwsgtJ7pMNVf|j?%a)m9h64GGXqx=2Qb#HUCeNdDyj=IAx+x<>&17vG^rR@;< z9&E!uKHigl;BDh=v9FYq^onevV~n=lQOd#lG`2VnjL(f=vGd@$){65FI|_X|eubMJ zo}Keo^b++V3+o1L$kN-OnDnYOufau4=0WZoF9z7KOB&lkEO!)L(MIDfys7B53{I&7n|bezI(itQwQpR8;3FX(^|1^ zjdtOi*4unJ#E?B!Tm;vwaI)H_7Vwbavx}h}OP)byW;~04_q2b!AdBSUo??XRUSwev zo0L{IUBxx1c{NKn*Gy8hJ^`ydq{u~Ww|TB~1z52fA8&C~_14a$_CL=*gwA52QRmxt z;>X^3116e1kU*;TN{`Uj^ZQ~VSBWW zjOSXBvUXiUyOY+(kfdaACkyeUSGsN3+VfqC(TeZ9Gq61$)3ns{Eg92tr8^94{&W5K z9|_Yv!hpcXOR~ndJ~IX@@FsKPA5If*QMm1qf+49izTTSKl_qfb{L2W_mBIg;9;bO& z=_H^enlz5KkWId$qhiG02MQ`~CN7C%1I>AgLV3f6#hAq`%x!1|M|osh!{1 zh*~gE25QG-x%eV?mezrCpp3oVkAxPeDzP6#ej45G3k5@&wi7K<)RqI~7*2Elnu>^e zg>0RwhDic%NMm1UqHP!G4v>(60&wN5OOT5wGkU`=sZEr}1zG#(QC)>dSJuS^_We8G zAH~cu8P`ljoff|!*G@J5*uI3#lbXfj83tZqoY3k!qDt{V1o2F z{dwL~$FpKs8TJ@f-%le8{44?Gm zRcA`0O7dB$$Lzo|;KcLz10f#vtwn zFY}H+L1-F_90qYEqLvN`DWm#U&=#R-h$6`mVuc07RWzC~BeLWI<+7v2Df(ENE*t&Z zLq^1~?A_WWf}2-6@#8Q(BH&0|#{+JAWHDrdV9Z}UH8E|2f3cXJcjL5>RM0-5TG~E@ zP4!$A&o>UI)X^+zC_`fgz*}hbk7s#@#p6=l1ABQ7U-Y&Cbkd=O>|PR{n&KUwi_p?L zB#4#meij_?_5e5@9UFpCheZ6+@Q$oQ6bU|J2j6cIU(?yh(8yP9sa20f=VX%4pwb5i zjs->cI=r?I_`j!42-Kio8q9fg>>UX}pN+;f^J21$e8PHYktiq}mze^rfVqVyx>{&P z<+<>0aNDm%Vm}TcxnmGPq!XUPpvb1}U_zxR+S^k-yc)!&7As5QT(6*9l3z*mH_b@V zJ}fVAVoU?fiTIsO$(=3LI-Tu0oy{Dbj@C{gA)!w4k6C{6#nOJ0SR6IfStwk5$n|`> zxUts!YoGL2DvtI0DY#YqB{m6UrQ=ewvmLF=}h_&J)`Ue)5hm z3Yf&U`6+g5+ue~ZtPdGqW=)^TUR4qJ`S9gw>wOl)O`6rT{j{Bh;)S6t9KOv#<{e^@^!{6+3P}$*X?d-AEa+8C# zOOM}YOxv~1;rOX+$F%8#53tU*NS$J({_MAJ$$$Y>Hn^*|M+g zt&i%wPB>jpD=d|K>XwM*%nVhtb-T3;t}b75zkljBZF8H7dC9jfE!;4X zCSgU-`g7;$qXUAzB)BH(mpN&h(}(>$ zNtiuV=e48%@(B?ItvA9V`uQ8zTvtmyqoQHD|E|B**=L7*QkOlOp}#oTe%6W9ud8k@ z^IvmMedXJ6kuOBn9#|GERwH%gtdofPNh4Y?D=&J`&m|$NQZD?SBy6dtJdF0!@KL(^ zr$(%J_+aZ{pN2e&R?@lSafid%#(2v&VgRL?$YlyS2E+?ru(`} z6fUmqw60f*yky(rzCtdytuA^+q1FrU*e~%Z&F}phuC6;jc=`!9xkswMyxI`A_}1&O z$6~zCw*B1jD9_WgwDWGO&|jAs4}gz;5fV~_9}sr7 zJ8yB^Y3;nmdgsn9j=vSOybxcXxC zmc`fWBE`4miP?o0#!ve5*po%6liQWIY}#~O;kbo{$5w#|vf5M`d%WFEprE*B|xzH6-)K^UOaYGDmzp;*c?X&+HQIGg;1q!-AehIZt!i zy=K+YtV;iq>6=tew(i|qI#t*3tCP;Jrk+3hF_QIe-Pz{gxczHlQj3^HBkM+BM#z1g z@xPZkHK>_ZUYPyukN4*y8r-!C(+`b`T0MJE*jPsRGx>y;s6(G+-1?tV$ezvIdQEie z@x@}(R$J@XCjP2gtohUOb*iuT8Cd1{2A(=@;XD74WWNR1w8ra%?jG_!)M$X+*n z^ZNRne816k1&@Yr7xVt8nCUfxFt{?t$1OvubcpWyb%n9(o?fqR+HWvrhvk%u z{?nG6|2$w?(8A+c&ui7_k+b8jx~@0bDQOZ_Y`kM&l%=ea$>Z8x{YTm^1%)^L{+y6h80Y)M{Cbd_ePPI$ya>&zmi5U>qQa?Lv_gI6UQ3_5>1z3S zJ4=1>%5?!R_P_Z2c5>S2r3K6DvXvV(U&yCBj&xH@a`^aulJ%zYumeYEN;lJ1Rreq9 zFfQwXRMDrHoJ5W6=-;OF->veg<^qnbY)VQy-v7!oCx;nk9D1c^7C+H#^IXOpDLa3Wg9?YQPEv|do^8E!xYa2- zjcMqiaDQ2+duN@S=u0-6J*_@O_KvHVN$h~*n?CF-wA<&KrmH-9^vrAVCgaMgb{)$; zzfvLAPUEoKL+W06XSUZvtP_UnBr$G141SogzP-t=(55`N zAh6T(8LYFrymkNH`$K0- zrFhpmtUFfh|H!~RT(Ki)xp@CSeU;+n&4MokeQEQw9htXzOy!2Lv8$$t%&k+ZRQL7r zTtD&r>XieG=U2)PcRn#8Dl7j?0z2o5f7|f^E*ewbt3PqO@yn;F>n@*i%KNgs&c`=n zy2CH``dzs?byJ+5+|5sGO{W`-mbEeJJox8=U7ubrqLnU~WuG7LKxg|>%O>XTO0T`H z>E`ZZFYR7As9}(^{m#$tYc)2_tg3x&*Y3rP0 zDIsH0)`Z;i@k_PmBrlK5Vcl5j>8fgKJ-cL<-qWbn8qrLZ*G5MlIC)rw^sC)FYI##z z-jZpLP>P6y&3!Y^S9*Wep49#qO>yee`)1^Y2|-u<$r1A-=0>)lH=bkfwZy=_}`G8 z3~#fOv-STd9>jC%kJqUzgY@Zx7ju4ZTln64lj7S|rc0;vt2sJuLfS&6GVS%nC;rx# z4t8i6ygvAK@JojXT6J@d{*3mO%j5dhT7~QVF=@c!%N|PC%+Gzi8~k|KFLQF^HZBjp zvdC<^-MXOQU&>Zita}iDr(f;F2a`|6g_iwcS4F=fqnXtI@%o{o<{my)IORin{Rs3MpAUg7ycw4FAPulOVmGy5JbM>=odDXnhx!;w&F72w9ne^Qe5$^mr1JBWDb{qc1d}xl z?-u&_9*}ogb8P0BVNKp&k5$SyyjFa&UyxP+56$cG-nR({uOvwjRWk$)&lj$!rPUf_RhRlF~i88+g#1_v97|_w# znQQ(yEmb*H!{<~#XleE9KNYAXx2g5;z1`MGaJ7bkLPEpfw7vhBEp!5+>A2Hkt;cq2 zmkr4EcsICbIDLF0Jf#o5iqzHpry7bv3ukKw7nNz~pS%xRzNjeq9o}pXm8D$wQ}CMv z$O2j?&$>G~+i!AmvPbXcyN|>KUHwn+s>?qM2@UGC&mZtNuusn&c!em+pzF6u!qIOF z3CZ+&_%{44^{|Vbwe?OH75rlsKOGdG_!bZhBAk`tRbtslyvt5I>uuI5_@B5r$Sa0O zFmr1;yuJkVF}{}=;R?KB5Vc@oX7;I+x{zlY;-J_^a40xPk3Y}G;0;}NdO*{X-(d#! z>(G*dM?Zivq2P;t?IUiA*3%6l^Di2G8 zjTU@oD!R9T4KZ%`ZYbVzPVs<`kWl}{19-HRvYU6qZmaVmh_^Z2eN@l>{Sc4^w5oac z>fK=N-U(zJ&`*fB-OBqkZ@;Sh`7feak{{__@ovgXG`lzT6UUqK&`#dx`xfeV$sZ94 zb06MKdzUHQA_)n-AJRil+@gi|ao$AJy@BN~SSD`TS*a%?iawNv|HOf3E|&)E3H?7g CHfa_B literal 0 HcmV?d00001 diff --git a/docs/artifacts/rules/~$dms-architect-rules-raw-filter-example.xlsx b/docs/artifacts/rules/~$dms-architect-rules-raw-filter-example.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b472ee35aafacfd183402417368c93e6fde1203a GIT binary patch literal 165 zcmWgg%goNtNmNh>ODxXJ$x1EDOjaNQ2r>9EWHMwkN OlmS`EU~!Nfr4RsRf);@Q literal 0 HcmV?d00001 diff --git a/docs/terminology/dmsrules.md b/docs/terminology/dmsrules.md index 3716f75df..c016417b2 100644 --- a/docs/terminology/dmsrules.md +++ b/docs/terminology/dmsrules.md @@ -97,7 +97,7 @@ the most of the views will use a `hasData` filter, for example, the wind turbine use a `nodeType` filter `nodeType(power:Polygon)`. -#### Setting a manual filter +#### Setting `hasData` and `nodeType` filters manually !!! warning annotate "Only for advanced users" Setting a manual filter is only recommended for advanced users. If you are not sure what you are doing, we recommend @@ -111,3 +111,28 @@ You can set manuel filters by specifying the `filter` column in the view sheet. * `nodeType` - This will set a `nodeType` filter with the same node id as the view. * `nodeType(my_space:my_node)` - This will set a `nodeType` filter with the specified node id. * `nodeType(my_space:my_node, my_space:my_node2)` - This will set a `nodeType` filter with the specified node ids. + +#### Setting a `rawFilter` + +!!! warning annotate "Use it on your own risk!" + The **NEAT** team is not responsible for any issues that may arise from setting a raw filter. This includes **NEAT** errors, **CDF** errors, performance issues, etc. We do not recommend setting a raw filter unless you know what you are doing. + +If the above filters are limiting and you have no other choice you can set a raw filter. The syntax is as follows: + +* `rawFilter(your_custom_filter_as_json_string)` - This will set a raw filter with the specified filter. + +In this example of the raw filter: + +``` +rawFilter({"equals": {"property": ["node", "type"], "value": {"space": "power", "externalId": "WindTurbine"}}}) +``` + +the JSON string that defines filter is: + +```JSON +{"equals": {"property": ["node", "type"], "value": {"space": "power", "externalId": "WindTurbine"}}} +``` + +BEWARE to properly form the JSON string, as it is easy to make mistakes. The JSON string must be a valid JSON object! + +The exemplary `Rules` sheet with the above filters can be downloaded using [this link](../artifacts/rules/dms-architect-rules-raw-filter-example.xlsx). diff --git a/pyproject.toml b/pyproject.toml index 725f03821..e3afe7dc4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "cognite-neat" -version = "0.77.5" +version = "0.77.6" readme = "README.md" description = "Knowledge graph transformation" authors = [ diff --git a/tests/tests_unit/rules/test_models/test_wrapped_entities.py b/tests/tests_unit/rules/test_models/test_wrapped_entities.py index 06445b29b..27c719739 100644 --- a/tests/tests_unit/rules/test_models/test_wrapped_entities.py +++ b/tests/tests_unit/rules/test_models/test_wrapped_entities.py @@ -3,6 +3,7 @@ import pytest from cognite.client import data_modeling as dm +from cognite.neat.rules import importers from cognite.neat.rules.models.entities import ContainerEntity, DMSNodeEntity from cognite.neat.rules.models.wrapped_entities import ( DMSFilter, @@ -11,6 +12,7 @@ RawFilter, WrappedEntity, ) +from tests import config RAW_FILTER_EXAMPLE = """{"and": [ { @@ -115,3 +117,13 @@ def test_has_data_vs_raw_filter(self) -> None: .as_dms_filter() .dump() ) + + def test_raw_filter_in_sheet(self) -> None: + rules, issues = importers.ExcelImporter( + config.DOC_RULES / "dms-architect-rules-raw-filter-example.xlsx" + ).to_rules() + + assert rules.views.data[0].filter_ == RawFilter.load( + """rawFilter({"equals": {"property": ["node", "type"], + "value": {"space": "power", "externalId": "WindTurbine"}}})""" + )