From 2625ca8faac35d65699e83e37bb42cdc24163490 Mon Sep 17 00:00:00 2001 From: Anne Philipp <anne.philipp@univie.ac.at> Date: Tue, 15 Jan 2019 02:03:37 +0100 Subject: [PATCH] new build of sphinx for updated api --- .../Sphinx/build/doctrees/api.doctree | Bin 332947 -> 613904 bytes .../Sphinx/build/doctrees/downloads.doctree | Bin 3407 -> 3392 bytes .../build/doctrees/downloads/git_repo.doctree | Bin 2778 -> 2763 bytes .../downloads/history_changes.doctree | Bin 2801 -> 2786 bytes .../doctrees/downloads/tar_balls.doctree | Bin 2795 -> 2780 bytes .../Sphinx/build/doctrees/environment.pickle | Bin 225566 -> 288702 bytes .../Sphinx/build/doctrees/index.doctree | Bin 12705 -> 14034 bytes .../build/doctrees/installation.doctree | Bin 3238 -> 3225 bytes .../doctrees/installation/oper_modes.doctree | Bin 2789 -> 2774 bytes .../installation/requirements.doctree | Bin 2779 -> 2762 bytes .../installation/test_install.doctree | Bin 2799 -> 2784 bytes .../build/doctrees/program_structure.doctree | Bin 3470 -> 3457 bytes .../program_structure/prog_components.doctree | Bin 2809 -> 2794 bytes .../program_structure/prog_flow.doctree | Bin 2781 -> 2764 bytes .../program_structure/prog_overview.doctree | Bin 2799 -> 2786 bytes .../Sphinx/build/doctrees/support.doctree | Bin 3225 -> 3212 bytes .../Sphinx/build/doctrees/support/faq.doctree | Bin 2841 -> 2826 bytes .../support/known_bugs_issues.doctree | Bin 2813 -> 2800 bytes .../doctrees/support/mailing_list.doctree | Bin 2776 -> 2763 bytes .../doctrees/support/ticket_system.doctree | Bin 2777 -> 2764 bytes .../Sphinx/build/doctrees/user_guide.doctree | Bin 3185 -> 3172 bytes .../user_guide/control_templates.doctree | Bin 2822 -> 2807 bytes .../build/doctrees/user_guide/how_to.doctree | Bin 2815 -> 2798 bytes documentation/Sphinx/build/html/.buildinfo | 2 +- .../build/html/_modules/ControlFile.html | 614 ++-- .../build/html/_modules/EcFlexpart.html | 1270 +++++--- .../Sphinx/build/html/_modules/GribUtil.html | 529 ++++ .../build/html/_modules/MarsRetrieval.html | 230 +- .../Sphinx/build/html/_modules/UioFiles.html | 92 +- .../build/html/_modules/disaggregation.html | 168 +- .../build/html/_modules/get_mars_data.html | 275 +- .../Sphinx/build/html/_modules/index.html | 26 +- .../Sphinx/build/html/_modules/install.html | 446 ++- .../build/html/_modules/prepare_flexpart.html | 95 +- .../Sphinx/build/html/_modules/submit.html | 215 +- .../Sphinx/build/html/_modules/tools.html | 553 ++-- .../Sphinx/build/html/_sources/api.rst.txt | 4 +- .../Sphinx/build/html/_sources/index.rst.txt | 9 +- .../Sphinx/build/html/_static/basic.css | 11 + .../Sphinx/build/html/_static/cc-by-40.png | Bin 0 -> 12588 bytes .../Sphinx/build/html/_static/css/theme.css | 6 +- .../Sphinx/build/html/_static/doctools.js | 6 +- .../html/_static/documentation_options.js | 291 +- .../Sphinx/build/html/_static/js/theme.js | 6 +- .../Sphinx/build/html/_static/searchtools.js | 351 +-- documentation/Sphinx/build/html/api.html | 2788 ++++++++++++++--- .../Sphinx/build/html/downloads.html | 24 +- .../Sphinx/build/html/downloads/git_repo.html | 24 +- .../build/html/downloads/history_changes.html | 24 +- .../build/html/downloads/tar_balls.html | 24 +- documentation/Sphinx/build/html/genindex.html | 416 ++- documentation/Sphinx/build/html/index.html | 34 +- .../Sphinx/build/html/installation.html | 28 +- .../build/html/installation/oper_modes.html | 24 +- .../build/html/installation/requirements.html | 24 +- .../build/html/installation/test_install.html | 24 +- documentation/Sphinx/build/html/objects.inv | Bin 1798 -> 2481 bytes .../Sphinx/build/html/program_structure.html | 24 +- .../program_structure/prog_components.html | 24 +- .../html/program_structure/prog_flow.html | 24 +- .../html/program_structure/prog_overview.html | 24 +- .../Sphinx/build/html/py-modindex.html | 26 +- documentation/Sphinx/build/html/search.html | 26 +- .../Sphinx/build/html/searchindex.js | 2 +- documentation/Sphinx/build/html/support.html | 24 +- .../Sphinx/build/html/support/faq.html | 24 +- .../build/html/support/known_bugs_issues.html | 24 +- .../build/html/support/mailing_list.html | 24 +- .../build/html/support/ticket_system.html | 24 +- .../Sphinx/build/html/user_guide.html | 24 +- .../html/user_guide/control_templates.html | 24 +- .../Sphinx/build/html/user_guide/how_to.html | 24 +- documentation/Sphinx/source/api.rst | 4 +- 73 files changed, 6358 insertions(+), 2621 deletions(-) create mode 100644 documentation/Sphinx/build/html/_modules/GribUtil.html create mode 100644 documentation/Sphinx/build/html/_static/cc-by-40.png diff --git a/documentation/Sphinx/build/doctrees/api.doctree b/documentation/Sphinx/build/doctrees/api.doctree index a6ab819e8a5c26d631bec3d23eefc1fdeaa46291..a76a585de5dd27fad5a77acc11e45d0887e42e12 100644 GIT binary patch literal 613904 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	X4P%4y)L z(gSBz=?Qk67s!05{}7IYRh8Z#Su9nh4=B-~x*1#7%oh~4;HnbDLar+Pzy?FBN`J6R z0zg90`vM`}ED8i!^F9mYQbfvv)s#VC^*>{af<daL;i@S^pt9ha60|A{c{4M_9&8n5 zAuKP4g8TrjD8s-G4F_BNE(_{9kn0hygH@CfAVqj9O1KS?ARE9b5Ojqh#7RX_kVF^_ zwlM}|7&wxU%R`WBz!@B=o{R;nkAtg64?I{s84p&0nJwXtN&qQ<)su-}Q<FeK8Sf&3 z85kHmQ&RIvGSf0s!PO&t{ROB-EUqjrNzH{<dEl#}5=$V}9jJc9xi}*k6jSfBKwdzE zC#)Pv0b7pg;9OWdrNTpzR_;rKL`gb0FfzdId6xxtG;*wf!U`NKuv#h;tUe2(9$ZU7 ze2832WrJlgd<U<kazLJg)>64(^YXwtKn3OdERYR|5QEiH`Ct_oW_lOELaYF!09H#C zf=w*~38B_fAnOo@!)mEwutH43!L?Kg$hF`E4X>q2Az@brwxt}b8RB-3y^!F7)>0K< zC6y2*@LH-0ls3N97FC1A(d~Vo1$O1j*rFPc)zDh17Hm=-SjW38unF(8K*l4y14~`? zU`6Q0{`D>Z)esFJGoiIqBiPI)uyT+GzSI^qgE(Z=Qiw7XPb~%V1IP_6AUA-66jn>M zLPE3+?4Wj#8^8s``z(+XNvfqfz(#Z;8G)z>V6{{iSQfR!N9xgagQO9)R9<OrQfd)V zwbW#AE!Bgwmg)sNt`B5B)PD%a!D^{~kSvy3Y62+Hpt>1bEj1Aow%}R{#6qs6CV>rx z)>4zfE|~%ng4R+HZx&4jS@S*%<WfY+g4I&f!0La-7EK4KnvAQKngNx?T1!Ff!B$I^ z!}9V>kRPD6)GV+=XM-(%mj!hl$n^-<!D^{FAVqj<DYy-DK{kL>AgGptIH_nJBoWRB z+qeK^7&wxU%R`WBz!@B=mRbl_zX+}#J@8<))MBs-%xnpF)Dn;aSS_^_Z0a(QP{z9m z7X}7~;MAPdWJnKAAvYDACNuLCQuB&abCYtww=6<d4HlK=Vd;FS`@6ZR>lG~rMa}yx zked+!2rD>NfNjHcVF@f^R>FhLgJK6gYM9~g=Ju#zre4u1NWiZKdwC7m5%03VE=3M| zP>6uT9#$8v1*=~NQ4g+*Al^c*i`Ii>F}wt?i#C9K1g(oUg3a3m)&VLG-)DhrKm-%4 zF4_!Mfnlb187!E#fE2*$qOD+4w}FIE>mrbK2*Y7@(RQ#xOvAx-(GHMn!O0e07wv?E z-7c^#yTO_vZU@;52`*?|v<IwYFGLBvF4_l55MOGG_JhUI?R}pGcIC_1q5~kSp>@$g zut|r&I^Jc0O?aOLG9KX_SduynR)lWsU+*$dJ#YkMCbTX(3O4f?SUJc8UuuhvgE(Z= zMTn9TPhAA^1IP_0KyCmBDXcC!2?^0tU<aKBxdB`Zyw3tTk)*ol4A_XXNJb!vdstm` z4lIjWt|Qe&=Rwklx+t}xpp3}6Xd$>Rx`4ATx(IgMC6M`0{~;U)tBWp!WU<smS3rpd z)y>%IqN|{=1=mF&7IIy54Qw#9F1ikO$qkSYv@U{pv*;$sn)g{Cmm*RYtS-6*R{t}$ z=r%~zLR@vx9jGkUx(H$qwz{YmmY45>`~a<s?tvY8A8hfvEU4>1u1B~IRu?@0DZ*P9 z!EJa5vH_d|L3I(tNkxw!iSRMl#wQ@dz>$Pp9)es0&frLO(NnPcXK?lCfd{LLo`Y3j zW=puEUVs$9>Y|rmQ(u9EGTud4Kv!gxr4|)~rmrBiCukN6v=Rf<DZ)OJrEaLMSM(Yb z9q+S1?nDF{tgv_kwgJ;sRj|l-3lA#TWg(<G;!(p4LvWq*4idoc!Cw0Sw)kBZ*mcNZ z4DvZRjA3=oN3i-&5cS|X2jUgvI_EQ37Q-9xI_C?>7tlKAE7-hmU>%@h?|l}?21L-n z>YVRj6&PlE*T9122S@>|&iM&8^%qD8wax)qhcFyg=lljM#55dS=llV=7Mwicb<ST% z*!=_B@*k`j;&za|kl=#WISfMJ`4u7X{0h9zVG@EI^~4MoN4NKV7TA?9V~bdX7#Lt_ zkQHna8(7D?EU*dhvp~ipyaP){>|jOc#{TuL0hRY0ATyzL4ky@5F0gWt2fox6af3Ky z)H#R}5l@{1@&m{XJRmoKgA`Wh@Ctz^68OLl;s?0_oZa7Nft*NEog)A?LJ-LaM6nL5 zbA-UMsO2|Oog)mAhSWKrBXrXfON)y$6Z44b0nGr{IwC^2rnE%C&JzRK0QDild9YeX z93+dS){y`u8&p?gt92wnp$o2cKrG~1M+$5(wAPUZyF>;g1U*6*=FuWqkVWsaKyF2( zE?B)I2iEa3wn!eNY6h-)M*%7eu6NLn(1qEAt>$Tk<!D8aKcF>_64<fIV5{F{LEQ)P z0m6N-nnwks2ye{;w?P$T12`Rmj?jfUsz?oz7}ddcYJiLbM-_6p2yzcNqa)Qlnqc)> zaP{Z`2&;Rv!74DbC)`;&AO)~|uM0L+4<wZFE@C#g?#V1h%u<2Q(nv`y0PT7P?VSS6 zU=?TNm*%7><mD^m<maWQ7AZjItn|2o3sRFa;p2QMsl}N^psB3Nf>coT<qk{e=|!2~ zU09&WGKKuol7i9_EaQBMc?zky1tpaV#U(|cp+a?ay&`>3tiR6!1qC8zVC9kl*b|r@ zZ-B+PAv`|j4`P2lYM248L5(2E#26ewCSbq4%K`@ga!LWkA2_AJYEV<KdNYW6a19Cx zE#w;194w0wQt%qo0u)ft8q^YOo)uUJs1Sdj1+oDV`mh?*8mt1tOz#$0=-Yr4z-mxi zu&H(+A=DZaWF5kASPg0qR)}dhxCV6qxfYzw;5DctB<!5Pwm5?|L);Fs7ZP018q@`> z#1*0hUW2-U(%F~VB6qMjy1nnSz^;55TjT+<8ro~~1e@dq*6}V2Y{L62knsrbz*4F= zSP{Chf4y5kwU-abOlS@23pUdatQ_QlFSSMfAPyNdD57-7Q-gy10CGbB$PM5ih1H;e zkPr<5J17|B25_PEJ`3bTl4{Tpuo0n1Mj)yvSPdEmmPM_LkZRCykTj$Q1s#?ME>DPA zfXD-`Jwe;;6Ornz(xj|%$erwwV5dcaOo#do;WSw784Z%fQhUaLk_@VgvDKcjppXUE zo*)*ID~jU4219Glc(6+nKtj;`0rF%~BFK{WSs-^JQWdP`OaiO^8C#SLQpJO-=1hUg zf@@Cn!xBNZV5>EIV7WLI<bG(anFe-bI@sEGSx~ouT#j%Xtk%o`DZ*Q8!fnU|*#J&^ zpzI8CP*D~n@nwVU%K;e$jvnN45abqc#zv|!bHVEK;Ofx>4pw94gH>Q=N4S#;Knh?r zW+B+rB9KtVyNDvtKpjf82dU5$Kn{m4?MP0{1J#kKnI##iMGA=uC>0@BK1j$Xu_Uvk zG$mEvCqFM8%mN#LWuOsqfJiYY65nTme255aSn*N<b{nRDI$)7l3J>A|a()>kLd(HH zSpjzLyDYGukmD2-(%?9S)oqnv^;Hn{;JOVG0LXP)HCPtI^YFT@2IO~W-Bt@WuMVsO zRJ^{=0@;8FP*~ko4_1L;rgt|iKpQ{`V0Bv~*wiMF5H#<C7Vc!c&jMM8FdSC5HG>sm z8V;`8T0pLaX9n;d=2l49wSjGE2Wy779b_*gxS(}g2UtlbL<ziZ>jEX6FSSM8U~zPN zp{{%xThs%x8d|sYf=%iJ>v)$1HsO61$asWzV2Q6EtO(uMzuw)TdSwF0OlaLU5p3op zuyT+GzSI^?264!!+Yn_hp1KX>2ap@4fZPBMQdr$K6%wM;zz&)Yas#+{d7lMxB1v`I z46qS1k&Hl8Ah5b^7FZUwra-FOW`m>=bz5RlY9diR!whiUHV0?Va4y(s^FXFUeTQ%w ztZthRlEqTDEdV7MR2O5b+ZKXC7F@T1SjctTBCx^Gx@|GoB}+g;(EI`NWYJQPCGWF9 z?nI<2SlzY^tomnc(Q=Tg3|w{F3aBjBx(#Ftwz_RHEElf?xgT1$tpYo8HQ3sBSx~ou zT#j%XtZrKaQiQi|gWIqcWCJ+uf$BDpgNoKc65o2TeH%bVfujex90a)qoUxJWwvAx* zo8aov0}fWVZ3e5r%#Ls;Z2>8O)ookBrfvfXK@Yyd-lZ!pP0|Iq9@MP^jYvXQE~ZwL zfS2B<VCl|5>aFdd2zs9day=p-VMWIdu)UaW?T1CsPI&Nv4!)wY({@23VmCMl_JE!8 zE(`2l<hTHZ5I8Pib<$q2`h5`f;5rH7IpjKNKUfySWAHlZ0LWj^I_V(TyhC6epkncT z7RUxfV8QC7!(bH{W_nM81=bOe0$81N6m04-kPtM_LF*)tbqK>@b<%OLLQKQKb<zot zYvG9)Tqm7`gxx8yEvLbnA#MlR3kfc0opc7Q<Sax9yiPg?N)}&gi_U|^(d~Vo1$O1j z*rE#{tD$w$MX*Viz&hS#flYXy1u`Dt9azG;3|540>|gImp!(nn$V_ORbQNsoHL!A! z2fox6T?cW<sFM(7CZ0M8<Oh%&Zh+hX4pLa1bQ2Pyx4;g%4RQmxSa_cWaw17}(jBl7 zcae-h6#TF{=^j`XwS-5ilkS705p_~dYFY_Vb&?dgPI`c|PI?G-+9QzZP~Rb(2CI`E zgJiMPNl!pY2Gzyb>ZGTjkOkLCAQp0+^bBk;v`%^scF7Bn5Hx>)JX!P-WXbz1kUJ5n z3RWk*0;~QRTl5;FN(xt<^ad)6wN3)rf~`)P1<S>6LGFjvN$<dpd=IwvT^7`BAeSTD z2CI`kfE3}ali)Ud1la&id!RZA<e;KYki_>HY~L4<QQ+u7E(bww0cUKaI_WD|{WrLJ z^nioaN#DULFta1vNk2deV0F?@u&KX5LeM%1beK|kYH>+wQJz9>esKwS91_xL%1;9i zDuU}K@O@qigzKc=pa^=O1#&$iAYnzvAF#ccZk+~;puh0o1Jy}XcG^EkMEnN_0fR7j znkNhFUgWp{g%CI{V099sFlbtc38EfcCqX=iTqiMuWidPkuaj7W85pvlbrLJsJT|Zn zP_g(v3uFT#uwZo(J6HvVncg#DfyDt*0IQQY!KQM7grIp2S|@?5Ll_RLleobOF%1XT zNjxCe!V@vLPU01Y%=v(A;RkDmxE*9KB)Fh;k^oqVAVdkgP7)G^%%TZ{#nJ73p9Oa1 z%h)0jkk!ySNfd077+A-<EU*dhvp~ipyaP*E;$TJS#{Tu5391hyKxRVgBuTKDQefpE z4}7UDk_K_esFM(7CZ0M8<Oh%&WI%2J2Pv#hl7)n*9N0nfAUA-Eh4)z?Cz4brDS(Yo zL^1+V@WbjPC9o`N36E4KDTAaTbrR@;<DC3*A{TCSf-5BzVO&#as$jRNfsBWG58*ag zrKAp$#ZoD0fYJ=Ald)AwnxLQsS4toja;2mNHW*qdX@gy&0}_H>a18ckkuJ!V_gNr^ zBGMJCR?-72{~24P4^q{Mt5!0A%7SYp^b3x`)?lla7Q!;JA;<^NYRL%fOk=RU@3Nqd z1GydHI9Ro00#byxT7uhP3bFy5{6H5RgI!c)21$VCU<)lkW`Sb}xhw=Z2AsK(>Lp9C zdMmhk^q_;)OV(f&m{}6;CL53fSiNKmHq{O!gj6pT=a+&;`Ct_jbXX76PXevpAgNxm z2Sw5QERgFFAqgu!9KiNsx^*rrh8*GH2dkH;=rkutL^y+kzy<7-cUfTfBF6<NgurnD ztCw8C>fIpf!SxcvbIA3QJ6IOOWAJ*(1LQAgz2pft&kL*rR5ZTN0@;8FELgqd4OW3+ zruPC^VEKR)!0IJmu&I6^A=G*aWF5kASiR&AR)}dhxLyhXxfYy?L5(YLy%Y!uyCASF z!C=i0w}b431Q)bk3IQt#g(!j7OJSg7@ujvX94wA*@B1vUD__PIMS!e^)=QCKlcK;n z-erMJc%KC_9^oBW!iokfLO1rW_X1Fz5Cbw3S}(<d&5Q#p2YKL2ZBaakLq@%XC^qrb zOCUdh+>iir12{-w^->}vM3cY{N(Q+BTr9lL0y&YSdMO2LL@JUIh_WA6FQtKHQ44vb zdMO<wji{GO3kry=m!^X2r3{?)QYP4KSs>$~-b1(zRxf3PWU<ssIiNIy>SS#7QZ6WH z!Sxb|g<LP?fenV%OZi}z6o7=F^%B^ZMTH<+-e-Xvibz+mdZ`Gk{AX-YF-X-^T=h~3 zR2FN!1hxiSy|e<BkxM~7fYwW8U}u(t?R}R8bsWg;2*<(dr3#QDy!8^?hDwkP;N%CY zm%uJ6s)8iIYOsYhAhW<Rgj^Pa90ShWNcB=JSbZH_J$lf=>ZN+H3d}4CcT)pM0jyqX z1e@9f5<;q%^74x?>ZQ~avg)N~P!zq-0=XU$lCa{V1#B;-TbICMs1+W5uzHD#PHTfi zL_0VLI>1hOmj!k&a$JBy2pku%dZ`nvz6+urTrWX9hg>gpgJm&12CtWTK>mW(OTA$8 z`oKCsMdSM{kPV2yg4Ij?U=<i<dM}3s)&!6OSiLk6Z0aPC5Nf>yvJPQ5tX`T7R)}dh zxL%q9axFL&!|SD~kg%Huwq-h4GsNv6dm+IEt(RtimCS@Ff!9m3K*{1uZP9G7IJ&*> zv%s!=8Cx_5WHq#2nhQ2*9$3e_EU*dhvp~ipyaP*E^TCSHjs5Gr98@PP0GSD`mllG} zTm)7Q^1zqcqQxK%8TAsP*u+yWf&2h+!xE4iz(ESDmzF|8bQ#z|%Rz1c7YpyRKu#p7 zURnV*VkMFhh_WA6FRcR0q89Q<_0npPG@@QA%1qB7ZV)dTTraJ`Sud>xyKNoFc&PUf zZiCfJ>p`+u>ZJ{!G=u77Z1vJcP|$+wB@hd_UfKjU7+NoF2D@YnNC;XlfqhxD6=ci% zERaJH=?YdaZ38R+8C$d+q$(O$y|e==i?v<?TZ64$S`W*}J3&5x)=Rs<&fE>Q_gxm$ zaUi!N90#kH_J9=Ot(V|7>;>5XPJW<z3GAYxeUJpWA8g?PkXhguLM{tIjsa(Gq<ZNf zSp6Zmdi0=!)k}xLDloGo+)YP73SjlpQLw4UKtf3MQfeaA#_^7WqUe1V$n}VjgcTnr z!1iLgbu}!8PQt?vRxeS}X{R6&aT**1XTVN*mj!k&a$JBy2pku%dg&}!{W*wwaJ>Za z9CE#M9xRLDF?hXn0pu@ey>t<5-X*XOP|^543uFT#uweDlWv~hiGriZr0_zG$0jyrS z3O4l`NC>rF0$GPJ99Az~2P?!h99%Em0J#>NisALrO-R_?0^4#MtQq2VkiC%Lg4RoS zz)J2yl)&qyd!S_TrMBokSRCEn_gP?9zKkt;0J0idFFgdC^a!luT^87c_gNt05#E6% ztjAzQ=*Ir_UI(fZo`B4R)=N*pW<CQe2YKL2ZP9ZOhm3j&QEcL=mq301x#0!K4d5V! z)k`lSA^HmJpw}QbfQyCqSs*8pR4=^&8}Sy&2t?TrtC!w^Wl;-xq<ZN+NE%Tu<)oIS z<`6Zx6bP=DKH#jEK7!r$31mFfdkD9|>ZQ*hSuFL^7f_l(buzYk=_@E`!Sxb|g<LOv z0~-vjm%f8t@&hCUt(U;QEcywu<$V^&p@?(^tCxO(mH&(_`VCSQh^t=u1C_;EFM+MW zRxfRZW#qpgA3*D+e_&_+2iyBD3+gzK+Yyd~)k_Q_3=A50>m|4ij3ThB%t7@M*hNK5 zBH*EUW)aXd1q;Y5a10@rg&@a(GdEJb#0pl=23L<Bbg+7f9jpQ~OTyj60a5^~mpH+u za)E@PCkUc0EP$Pi3wAor1$o>e3=A3Xvp`Nn1Q)D~-~k(s>7Y%pXyAnh66gd$a_r}W z1Svn*GXh}y-erLug&e9Nzk)**R>KH_)eAw?gKHRw50GmZVX!QQ>)|zw2*~l!8b%as zo)}mMsE~V~1+oDVBCr}p9IOJvOz$nQ5Rm{WfYmUPU{j?)LZ~$i$U21Kuo^}htPs<1 za1A2^axJ(xgx4^#kg$^j+aeFv3~@WiUPy33YZwKv5=Dp-cnzZjiu*6MMap1tbbH@t zfnE7BwnznJHME9N1)HP>*6}V2Y{L62knsrbz*3JoSP{Chf4#SWN_P#Ana~<W6Ktjy zSUJc8UuuiAK^!t_7(@Yxr-lLf0ptc9kQ=~33aepsAt9;<c91^E4d4v^J`3bTl4=+O zun~sHM({E)WPAW6P*@FP1eQfDu90dOV~{kYh5_xj0_S7Um9oUF80Q67GA1IpCW}nL z&NBnq0P`W-d9X^x93+dSlCc0K8&p?gt7I%ep$o2LKrG}+#tLjOw34v~yTk@01l?~1 z^JtMR$fEaIAh#k?7p$JK1MB!1TVxMX#fz(+ae&H#>lyU@Rxq2eRW-X|Ioc8A4`@~6 z1a_=5*y?v#Q1^j+fN&qIs&N4+!dunAZEywI08WRX{Z=qX6}dqYqdVA650G)-s6s9m zLGA%(bfntG6Rh3~t{y!AVYQ7nSOsSGggeUzqySdi_<~LK0|{lki?GC4JzkVrSPI@X z1$Mpy=vF|Sb&fwMPTpsM9Eu1xSg8>JwgS^xJ7Dn<2oEjFToD8b-e9oDLcq4Z%K|$M zIfOy}28S@L<_QI>4}+)&*E|q^fHF4hwDfSWEQTN8HBSV{3(%S;5^P=+SO=)^d!Gfe z0TC{+nkO2p0>e!2U9fP80V#mhJh5O?<3K{FH4n%-gyFE7CmyU2({OOjlK^rpIC;Wr zo<vC4C4p^825W}69b_*gxS%yp3Rp=hL<zj+Ndu*TFSSMKU~zPN-)Dhc`7*XB17tO{ z=E($`lm*uDE(>hJ`z(<02=BnsP&QZ*y0L$~cY#X%9FUpNnkN@*W*%5M$OB($i}FDn zGHM<~sfefM0r>&sh60cqz(ESDc?uyRS_F1bF~|+z%>F(L<V2Eco)WMTrAS5~`VX+0 zrwlBMT81OlJmny1NX-LUqfnGuoKIZeMg?5$RN$<3D#3260vQkW9>Q&~YNr|`i>2DB z0i_vKCu6I2YC%B@u695y<Z7o5Y%sLisRz5H0VD+N+kkyp)CjWWeHO@}h;#+3bDF@) zf5sLygH);Ds&iVPvfw%geT@Rx8f+ELVOU0P1^ED4;k1FB*$%e%T^7`FAh#nN2di*8 zK#K5IIB**}K{kMsAE<8wc2Q9mBms7VE$jiA1&$%)vJm7LaOOs;ZF<4#`{3%)gAP{P z^n+DkW=Xi4CV&*cYMY5*QzwChGTue>V$?S9ExJXSiFxUzIf+FIB}Juq$?${Ii&9I9 zGE>V^Q@|(O>To5cf^I-oNKPy&sswGy%`YucNX)BL$Ola>DHMZ`P)bcvD9A4^(Jd&- zPfjf^&df{4xg2~lD2Cr>fjp0h2w3Se1?+50ukM3I@Kkv44?dqwgCv9L;0Txj_Q|^} zuy>JD0w{jKDFIe1&IGHU1yK*K6(M1RTr187%VLBJyjGk83KnRsI2UZ*Jg^Q>!Tdf8 zWCJ3sVYT9XunG(_y$`{{dI3lQtX5nIHgyq52(?xOS%)wjRx2(BE5tM$Tq`aCxfYy< z;I-mXNZ2g{+p-+28RB-3y^!F7)`}~@N>)OYz-z@-pj7pxwrDk29NpgcSzuSbj4fIN zvKm?|t_7R44y@x{7TARMSs>#P-hrjd^<YKl#{Ts_1geoXfXsx}iW|XZZUQR@dEiTJ z(Pj{bj9L*<Xyd6BL4E+aVGGC&;2?$7id!Kex()20?I1UR3#Ip2ASaSkEA9Xru@lJ% zM9l-M6?cJUQL7lFT5&f>8c{2P&qW|=#IFQgEAGKrEA9omZ6C;ZsP_<VgVl=rL9$qC z#RH%;gX&~#wc<fg(1L445DU3hJOnlvS}Ps~yW|K+2wE$GeOYuAWXt<3kV6sa3RWu~ z11tX-TXY<xssvZ9cmgVmwN?aMgRNFP1<S}MK|X-iil@NNJPo$@T^7`FAh#nN2dfp& zfE3}a72!6V1=#>jexO<r?4qJ`kOX)hY~clvS>PB#E(<}90cUQcTJa)S{Ux}1^q_;) zikHDEFta4wO;<n)V71~^u&LKTLK*KO0zkE5d1gs+251)(qzY32yBc&T3*?e31r0+@ z@V()wkV-Nqu|z*7KTko!Kod*dW}sJe9TZ9Lvq0`gge9y1xdFBr)3wK7adZ<Nf;4g5 zEl6bC1_#3(uw&k3fnAIoAD~bI#|Nx#x(il+527AiH$l9ITsPeZ%VKy9UN=1e`3zb& zJp`Ng2&@BCJigBY*?<TxSl#p(tOCPK?~}0LdIC}atDByJO??IuLam!X)*%ds)lJXA z3NZ}_*G(@#t_7!Lc-{085_Ye^w!8*whPWMMFC@62b<-QLlD7~g;JOKPo6|c`!uV2K z^d2mZZtwdnuq$827JUF&4Xv9#f=&7a*6}V2Y{L62knsrbz>?Nyup)G0|9YPU)eB!h zW<u+xuV6F3ft7<i@TIosJBUL}-Gp|(6{6_GQ#XP90CK|*kQ=~33aXnxA@UOvqQAfn z`VDdexM+Bv1#%)ub<-cP5r2`4K$QQmy6GQS7PX*9s+<0Uq#<<^Xsi%)ZFo^)awSpK zlP<V=Vi3hOR>&v{n(kl{1@Gbj=O2XgVAT^dNES==#3D-6bt9~zu<J%ZEad8m4Qw#9 zdSVB=gaaf59V>)+w1^XA(fcfrTM?-XRzq=tb^MGi;s&YG#Z^P`KxM%-6#7^p%qDD= z)J0g1<^}l!T1oMN9m@~4`dt>(eIOqo+y|?q1VD=LR#I>q1VJ`{(;;ZA5ay^NAyM$m zlrY#%5s-1<#E4ujg4_en=t%XHC|JE1Ts?XK!s;n;unNrV33rwRNCB*#k_4M71ro}5 z7m)?3r%+CsK%5Milvz@&09t5TmY7qT3aZDTXEG^d=7BaualsB&Pf>6W@^n&2&QD2A zfnMN<Wq8rZM6XC16p8P%Kt4kRG_07B0lNv)A7^0^C<_l>Iy+kq5`psIpi=-l^IaC$ zFUWBS3R!R*!s<3fuzDqkdT`!^cpSNIQwGaocp6@}set?pt=m+==Ba^ofQr}mSs)t_ z0ST+y)WIq+%=Eqh3rG!+0$AOq2{u&=B!pVGfviIq4y)U=!3r@A2iI*nAlHI30K9I~ zg@m0R*cN@TW{BHC_CkUSTDKX1l^8;l!0R?6P?GslTVxCtN4NKV7TA?9V~b2cRzvGH zQ?N;9U>)zWz$U!U0vV6+4lL1`gB770``7yds9v!EnF+1iEWu`4ft7<i@TIoM8pI)^ zZbOv2c<MHgA3$!f0l5Jjq_Dcp780U%U<cWQ+yE|4-e-ZFNK)PA05-xA$p}Q{0jt}b zz_K{&HfNADq;3O^M&{?HrW1FxgdMnIbHQ1$xq{v11~MM%J%rm}6`MOq7E8tE0ZKEd zPR7>n@&pAfxZee0Ay;f(V1uC*n>W}cJ|H1zzYFZkB43a#@3TM-MWicOt>y<-{xi17 zAEe3-SFIKRl?B&o=%bNfYp_*m*I^ks5aa`Bl@<hcW-!>^cUe%!f!vO89IQ$U0V%>; zrNM0o1=#>jexQCA*hNKQkOUYGwlD%@7C45G%R-Q2z?mDVK8pmakAka54?0+V77bQ` znI++FiUBEr)n~C_Q{zBFurt@u`(0pHD?mpb6LVnwuDtvba9>NoB{eOvG^a!XQqN@; zD;Ve%#e*W|eHO^gi133I8VO+AFkN^B7B7kLPy-(VPYnkpK>|G)?A;Ww1KwqUU5Om- zpwIw^JFE^$1*=bks0Y_U5HBIuLFr&w4DZ0}pbU_2pmk6t*t{&T4p1@pJ_}?6B8Xsh zP&QZvhMC^iU_q1vQUI%ia>1tNfrL=&Adqzk!(nw$K3E~9;ov%`0OVS5iiOufg^;i- z0^3py)(mkw$X-ZrLF=Fru#!@U5_la{21*QHYKzLj;^_9i&jP#hWo%Ie$ZBXER0%ez z3asN@7TARMSs>#P-hm~jYOo@7WB+<z1C{?ZATyzLP%YTZI<Rt(2fox6)q^->)Io?M z5>Fij@&m{X4InpwgA`T=H9|tP3GAR|kQ=~7!22wa6G^IrTEIrMA{l`w=V5hF8(0># zKu79dwS%M~br9(OU~qO%$xKTls)Hp2u7^5s)<d0O_jQ4+fO-+(K3F}}4U)xD5A}f3 z4XU%T)kD3Y;04!1AQo~x)CV>gS`YPuT`~bA1ie2P?$e@)Ae-K2fgFoSU$DAp5?IU6 z*rLfGRYJJxqA5^Wa9xCce=yuCZ1vGSSf-u|@(Hv)ng(|6bg<p;vY-wG`2pcTSba1D zqzG?)1h-)($Odpy1l=DDcU93WNP?UVwsa22JaB9wmyI9?fipW&oirD$ejZ#sdJw|u zr1@YKm{}C=t_2_kusUfW*wjTJp^SGC&7eLOyb4H3P0maK_ok8)bCOGQKo?W_gIi6Y zV{lyxiuGMe6w-?Fa}|>F^GY)FN;69;xl#*DA+u*``9%sTnThFn`Nbuf$qEIfMFsiA zsl`N9X^TPe`#uZgWkeLf%Ah4+$6|W$7A$I)!UKM=_-7d;%9n!!dj;72@3O$2M2>Y( zT!3R8RwJ$it6v3C53Ug*A%a{Zt_I6uga*7uTmuRWXpOiQY~DJs4p5=|J_}?6B7|Wz z;(D+O3^Tp&!a{fhNCB)y+z2*x6G#ZPMg&=hFdSARZU!sFG#p$bZUMO#oM+%Q;#Nr5 zZ3Ek~9jqDRc96Z0;DXkOJHSeILX^O3#9g4Y^rg0FH&`6q-uGExSH6rb+5@s0S|jcS zo3szC<6Rcmg!fq>;}PD0rN;eWMd-%<^}Y+LjShg!gw}`$!Db!;D+hVtOKs6%5QmH! z5m8v<sS!bb0J-4^$PM5ih1G~hAt8DU?4aWyH-HPE_gNq(l2jv}02^@<$p}P^1FI2F zfn`yv7Ni>SG)Nj!BdRknFr=0c*C*Qqt_#oLtP9VAU3Ly+IMj0pm%-}7^B`F)b>Rh2 zia~WSwz}{lC}6>LA&7-s7hVDz46O?<gI#h3B$V+EoGMdG5{s^a?0BCAawZ~8!D_*4 zV8uUUi>`xIZNgOx-hj%2Ye9a{)$jRvB}Mr;Zkai$dZ{Ie*y_Khuq=EN<a%iRcMI&q z+hAMYWkH<=ayP<hu=?)~ND<!p4{pO<kPYyJ2lDhiNW!}hw(bGQByijymw_OsfHO5x z&G!(j{t;X~da%K2zQ<q{m{}3-q9-5)u$u2F*wkkrp^SGCl_)hIbQUZnvnVyW1gSfg zpQeynl9-YYt@eB!gMy*;8CQ8KcnL^mi2~v#V|cZh0_nYlWTfU{?ZQ0=#pL@ekVg?g z4l7|^fSrixt%tCvd<hTef%U~JNc6r22kaZLtKVgTy@njapl}DrFszn)3s(OQq8?n! zLBavKmU|DD#Rvm<E%yNw1khUUBiOu8U>%@>_I(z}21K~RYPru~6&PlEKY@ko7mxy2 zE%y~{>Nk)OYApw{4q-T~mirD?h-o;umiqy6EjVYuYq_70u=@qJ<u_O}#O)w^A;AT$ z<^F(`{Dmk1mnWcEq<^3k^rg1wKUf^y-uGExSH6rbVh}^zdBP|Lo{$j(Psn6}O?aOL zG9KX_SQ=yoD?&H+ulEyB4Z{L56I#o$g3V+DD+hVtOKlN5h(ks#hbV^e)N&v{fZV_V zasxO>VYM8m7<ej!3+y0nkQ=~-&HF5n6G^J&c)&*RA{l|GOJKDeA6OQ((m<-^_(9T; zT232M%Msn{;{(@p0%EwP)daz=69QQP^&rA^u$oR7B#Wh{6A>e7T1^xbxZs)qs= z#J~naYdUeTOC&%-8Sf%M7ukaf%gnU2B1w=v@3TNoMWiiQZ6^iR@H4hZ8l;L3S8XQ) zl?B&!!kD!kC_u5*cyD0YSr+6AXpJWacB(ws=66|8=Yiaha2~A2QvfN#TjRlPPz2ck zPK3ywSArx&Ww4bhAk)C{gj^<qoCD6}NVT3SSiKrtJ$mrLYCUzZ3e2ntca;W60j$>3 z1e>Y_63TcN(T1(ogVkD~%eN2}9<954+Mwutp9S(YA`W21j}F+qn0|Z#i(6fI$PXef z=|Li19~|TcU@yGO0{as=?m;mEj(b>rXb4ts1W^yJ4<UhqTpt>PWibK-ULTr(!UI|# znu5(U1M2`4$?vm3HXs5SRv(&!RbZIu{Tdd?79a(%`p^<=suf5GwLSz{hcFygA6kPI zVj2#v4{boM1?L-heP{~_J3Fu~_F&Brw}b431Q)bEbO0-HgeZa6hfbj6^rg1Q87z)& z@B1vUD__PIxqz&O_WE4GCb@xiyvqWc@IDJ<Ji<G$1nCY|gl_C#@7JKZ$OB|1v_A9% zo9P8s4)Va4+9Gcdhm86VQCQ=t4?%taxxokI25^wV>O)^hi28vY<PUNKxEOk$1#%)u z^<e<mh(IJG5H$|0J`4iO;;avYLDG==PzzEY79<jP2l8BSbr^!PIt&FnE(~No)PD%a z!K%Y>kSvz!FanflP~D8J;};1ETX1y<Vj)+DQDB3i)nPQ)B{3i&*u9e_i3N#8MX?}j z-e-Yaibz?o+At2R{%34aJV@1CT(w~WR2Ezt3SriU1&Kx2D#K5(yqpN~1GF+s0y{Jr zZ1KA+sOvzkN4O4F8K!^~;jIkeHl%`V0H;9ky^|2Hr$G{7I@rbxkYV6RLM{(Mt^sFo zq`EK@tUe2_9zF12bzwGG1!lH{J1PgH09F^~f=$f>2|@Rwfft7qBo-y+rk11@DR@Gz z=>oN4KwZAf)SQ%JEXzgA&Gm}%LGkfE3*=BlsKH8$0<aaB&Uz1vjY4=>f%c-2?}{Qw z@D_tTRsy#5T^87B$RP~!H#mf0HBKp5eHlbOxW<9_1G&a22g_pk0bb)&fV=>$aVo*) zRe^PY3cdGPAR7?j0;_SV!74D!^!^A7ml}`)SdCK)Hnk2Ugj(Z(tV0+Mt8wbV3NZ}_ z*EkIz*Mbu#yvAvSgk2NZmS(VKh}%K-LV^og<FtU4v_h1?Yn(Pv3iwi6)D9L$xA%P( z*p)A1i#kA7Lu;H)ut{BD9q+QhCcMuA8ISM|EDd#o6`>pZ*ZU)=wC@3#39WH@!DjY> zm4iI+rM9Ra#37@`L6nDhY8;RsKyH`-asxO>VKvS~NQh1XJ7_Y<4dBfFJ`3bTl4_hO zU?Zj?8G$I&VKvS)uq<lnjno614w6RHI4K1w#11v4gKL}_IBT4lV8_h@nGf|J!f~(~ zXEsO{ON}!JlxR@hjIG9*3kq9sjRRsK*EsXQ219F{`CykU00}{B9EdlI7J{sKp9OL$ zB4xp9oJC;uKVyp)gH)yCs&SS;WwF*c5PPuII6q-|c`3*b&>CkM*rCh87Qf4ax(?)e zgzI26&I*tsyfqHohLs>2z$p+^<3OBLv<i|4SA%U_12PO8Nyz0P$Ti>$j#T5U1*=~N zSC1Zeuo`DQSOsRbgga^jNCB+I*$6gu6G$lIU4$35-dApEPDy4#P9|ax8npT;&n(GM zfOrbantMaNqRpTPdY=VyIU*Qg#m5$~otW<Y3X7ht@W7+8v$jDZU_03BJHXC(mj!k! zavXp{1{?>lI%y|Z{Vs@laGeD47;>Go8!U_ADR`Z<2jnMcowOHh-afDnP_g(v3uFT# zpkQ^<ey|D*GrfPn0_p%r0jy3s2sZT)NC>q~0$GPJ99AbC1}nrg99$<I0l5~OeBpJ{ zQApSw1KV;OtQq2VkiC%Lg4RhVz)DU+l)&qxQ=laArMBoaSRCEn_gP?9zKkt81F{-g zC!GbGbPlZJT^87c_gNt05#E6%s`Fq)=*Ir_{sF2FE`ZF0)=3w^W?lj-2YKL2ZP8^A zhm1N2QDWk$lR$m|x#0@P4d5V!)k#+&A$kq$pz9zvfQy6oSs*8pR43g48*vlK2t=_D ztCMblWl_s_q&n#~NE%Tm73b#Xmt+vN6r>egC*8qWC*1`*?jFc|sQ(a-gVjm*L9$rt zqz9lxgX(5%b<#sn*n;aM5DU3ZdIUBYS|>dQyW|N-2wEpWyjk=VWX=05kV_FM3sxsR z1FQcTTl5^HsufqA^a3i2wN8TAgQZULWnhG5=9eH(Kr5wJV3)oI+x#vI>O7G15zd2E zN^d}l@Ks7kR=fpS0ZxOUS_$H)qIZyF_#SNK2asvtXhJR#LCyhZaim)5BUt?>xO(*9 zgVjo(!74B^CX%bZfK<S$rLSOPzk!4@-bI9hs-=R|<dUMq9JKAwt|5*t{vis9X`tQ_ z$~a*j>aC7gYA6G}qVJ&SdY=XI1tLsgg~<=F^%!pU{sW7vpYVXBoeO_K;^j9uK>mPT z^ezkRY~-i`g%>z#V3pNhu=;-x_29}1;z#7l>OWW(!+-F~ia{K4;RvHRcxFZ%JTn6} z4`c%(%wUxjGgt+Nncn|lVa5Vd0IRH6!KSi-gitFhkaY;dVU-m-SRtn2;L3^v<XUj5 zhF4ac;*bd!ur1tR&7iXWeHO@GNN_<bD;}^CUWgKSWyL2Bxp0IZERJsP`z)|4U&a;* zfUJgAR)S!Ygupu9Wr0n2p9L}=;T>4|5(X<mH}<dhe^5ms0x}a?S&4$p6ay;<dEiTJ zkvND$MrDO4O7T=yAU}ZIAOUg%I7nfYl_VrYrN9o72Dt%TO1#ekIgzBwN(O9%ERqq3 z`T$m0$$@223x1@^N**MQsI1cRi*gf*J3-eITv;iI<C?)z1UpU%WIoh?2*<%HD`k)@ zmdZ*6lxR@hjIFX#1%)lRvI4P?D=Rgy!O+S|9qbYfkPx)8f_Sq?6J*W%ERahPDGOFv zX@S-Mj4jdzsq(~CS?NG!u~t?Pd$3hjZ1BoT7vu?OWu*spsXo}|cUe&9ft-(U9;~u5 z04c&-Ss|=21X%%2gP_U^;;14cNHR1ATWJC^4IE9#B_hZ<;4F?*S($>>o59ti2Oq4m zG6$=`$e6weS6P5mz$z<Cu(4Jkp^SGCX5gFbQxzaig`MXP9zg?L%!p;QP8}p^sIFIJ z4T_KVSs-U30u5GL*nrK)bQCi@Hf-TRWks?Z9yQDWy8?XCy&WWY?ZN(X0NeX63+y=L z5C(Z09Kx_V#}TaF38EfcM?idnT<180WifmKuX9{Let>q6T*2nKfpvh2z4uul8xSD_ zt8?7JDlp9SWrc@~2S^31((wcv>je@*t#m;4Axwu=I^JM~7^ZuJD;*z@bHS+-Ug`Kk z0?!X@i$7R1#PJ||A>jqBbOOLi0wGGkl}>R<QBe>m5qzmF3I>a#+xtEX?8=w1MIj)o zp_NW3*rYJ9j(1sL6W(Wmj7N9}mW;x|iqMVy3kodI6(t};p|wsV*w84jdXNvk)D}g9 zIK<RC#U(|doJFZ=DfzjHnR!`=G7(R$1M&o@)`<bR0UV~FS_c#)v5+8*13M@l<OXnd zf1d?%B1yGQ0@#Q|BqI<7JFM180?VS7;7GMjGDsRx>m;V65Ia$n0<LvZaMn7hV8^9_ z%!m39;W${WlMa%_QtM=ZQVpt`vDG@6ps)qkIv^Hut&;^d7+ULOgI$sX5`xw`5N{Uc zf~<L;1#&4OX~AlpJh1wou|@eHRVlb?odT#V)>;Q*54Ku|7oM97L7srtIz?cY7K3em zmj!hm$oUB8!D^inkRrUb4#J93kQLxG2jw&jHB*SvBl@%b<z|n+UCW4#;&f`e6 zP9<1<6<j@f@WE=GYOo5-oQZH%4M+v7)~N*>TL%)#coz}Dz`)=GIzux*O(8KQC9@<m zKQA#yp}4dtEipM&0djVstFv#on*w4s334AJbZ=KG?mL3(K{56|3*-?*u)+$I2Cxe- zoy`f4uSR%a($tkrkmzX!hf53CRqwLEPDhR*P_Thx2v%#gg4MS{)Prj+h(D2Qt#+_1 zh9BXzRtLz3&|0e#Y+e^w2dLP5p9Qi35pJ+rs~fBW!%SZuc)0a|RKRMjUa+x!AR*LR z3uGU{bXcv`4_1g_I;7T`0CFxkb;E0|iIBjX1h!=|STn@&AbTO<1+BHFfR#*zD1p~n z(?Ch&OKs6~usFKC@3X+Jd>LCb17tO{)|v@6X%<+=yDYE?@3TP0BfJAkWV6AF(2e~I z3M|kCCLlwhwbop)q4U7%K|c6WTQncUA*0qpl&N@XEs!TbwblZV8^B=-tF;zFf^-qs zL5o3d02deUvp`NHsn%KoHexA~5r~QbR%<N-%c9l*NVV2-kTjy!Dkw@#%d8-3U{4)f zYpuXpYpn!3ZWYLUsQ(a-gVkEAL9$qCtu>%jgX(5%wboit*n(><5DU51S_d{5T5GKb zyJQ1M2wH1FyjipnWX=05kV_Fs3s!4w0;~TSTeKOZN*!0NwFN4Rwbp{zgRRyQf#>F} zAWuMRt!-eJZU@`^E(_{Bkn<7FgVkC)K#K6zS_mt4f~)|iK~Sv)aa7SRNHW|FwsH^1 zG;lN_mx&<ffb%#~t+f}deji*tdho$&t^HsXm^l;SsskVuuv+UN*w{lLp^SGCVGIlm z0g$9vTv7x&z7VuW3v@4IS|+Iaa`SPG2yhGv(FZX?f*ci!QWH}u6*BV*N=p>dGILUk zu?*{}yZWi?6&(h}*ZVAxHxPjeD^8Ap?Z<Sq06eyi!h<r37H)jhFvHak+}An=iJs%& za5({X*SjpR<B?+s6l~xag4J3l!Rk*z)Prj+h)<Dgt<zvx3}3=)tur7$LTjzFVDrv_ zb%2V^_gNqt5FrPvwa$Z8V3_GE3=g>rAQiA$>mu0LOCTZCS_@<!!gN@zbs4M>!*ock zbp_;HaO#HFT2~=~cMWXIb+BfL<3aX9!V6k!-2f}O2~h&CwQhkD$(P!q+hB2Yd*5e) zUHLM$=nlwgXsvY@Y|=fjj(1sL6W(Wmj7N9}mdx&h6`>pZ7Zg~a>rFt0LTjyuU_&2) z)q{NSrMBoXh(kuLg(y?;)LI}<fNHHLAUA-+6jp0Jg#_s{u!Ek1+yE{v-e-ZFNK&o! z0&K)fBqI<N1FY711(rpv0g!5~*C1&~tp(bOm0X@oRFyRyTxGq%S!KNiyX+mvaH!`H zE`wEB??JLys;m#7B!lW;Y*p4rP{4w#ED#I1%K8L07+Ph02D{`7NC>(WE4e(m=qt#M z_gNrkA`%s>zWN4M{4=)bJ4n@ZT=mrts4Td?Lf?v&T%L@rvXX{p;-4VrLo2IaU^o5- zTl+2x>Nb$W5pIK3R)0W>@K#m`EB=D4fG0hWxBo$s-hZ%t3=*)Z2IO)O<Q8zgMyjb8 zCBRb?aP{Z`2dk-=!74CwBf?26AQiBhiWO`u8%QYQT|^UT3JSgt8M+$_y2A=oUlo_; zf`<B%bMi}56ml{POEXgx$`iqpQu%o$sd=D7c~iI`(wWJrXmZ6F`K3823Q4K3on5IZ zSjGtr^orOez?YhUyo?BaSaHJvb}Oa_#o^J)DFM6sWsvxXO9DJY!wn8=9<cl0Wr013 z9P6N{0LMD4_TvSs=YyyR*M5)?L9YGy!Lk^k0k8c8Kw$x`{RF}034wKhir@EHAR7=N z46FTw!74D!^p%2#un0&6to9QH8!HA9LaqHk_90A%)qdh&g&3woYCj2(bHUjKUi(Qx z0#6ETi!@j>#PJ||A>jqB{bayOWFbnxwI67QmK-QCeW@*y2aBWI`#uZo%9pW43LvYY zwVxu`BqgwpcUfQ)-e-Y~M|cO89F@U}(2e~I3M|moD<DImwVx{3P&Kf6kPp7p7O8_c z#MFLhM;{`JXFRnZ$P=L2PXpuzaF~K>KTwcpLV{Ea>>zEB8=w^g$cZG?emY<ybdiie z)G@HyPY*1MTA3i#e)=G3MD15zMBJeq=fSm~fdsC}Ekm%&j6jA%J%?}^toAbo$zrMf zOh8En)xp?mKT}Y^f@?nz3%T|)0~-vj{mj8Gu>c7{YrpcMv?5E89q+S1&O{_CSnX#8 zR{S%z$Qq>TJg(Z$1}clS_A4(+!&dt#!85Tf$obIP&kpQHd$6_dvY>7QIUM0OSncNk zQiQkmLs;PmvI3s;K;CwOBt2)aeJ&uQz_Ei|4uaeQ&euq_pDS3s8(cklz`<%icd!b~ z+=y_J2S^31_VWZA>je_Zco&h3t@cYR1z%u{7*8w)&3VCUuv}1`SCX$#Tv||&UsS>s z9^|G_oS6$cvm-M<58I-31HB?|P_(_z0{ICMys+}b2kaP3AIQPu%@-c1^m4EtB+~rB zp%nmj;JYlaFOcI66qw+6gVkSwVD&)|_2Bvo;$`IeD;O+`;azzB6$0`swEhYOn->Pw z0V+V>XMt=$1R<>c3J0seFw<8N9)uAf6|nj%5^QV~NC>t50@;T!9aeuugB4<!4ynIl zK+XjxczFF43kke9ur2Xm%@D_f?1h9EwEju}D@lYXf!AM2pw#lEwkR1aj&AS!EU+tI z#ulZ3tcKQKsbG`Rz&hS#flYXy1u`Dt9awrx2P;B1_Ae-~Ko_`x429NTnP5Y+!0JIh z_)=Sx4dRede<2E3JoOjI6QKGl2jm8Dn8NC>Tu6}SfgO|&as#*!d7lMxB1!dE0oaH_ zBqI>D1g!ol0?VRS2T1i-F-RIxe}T6cC#MysWD>WhDh^zSmEf$yO2Mux16cs|Ai{O9 zI;<Qdi=_^$03{n#M`NqQDnWq@uERhq<T|VhY%sJAs|LHI1|$UAVhr(TQ7y=x_gNsP zA`%y@9;*Xu_!(PN4^kC}s~&5B%7W`Lj4j3xi?G#Y8t@F=2=WHBE^7k2wHa*nyDX^t zKpsH24_248fE3}a%Mezyf~){1L+~bJh^va)AW5+uY-b0^IB-lMmy00xfb%(0ebxz9 z-vw8X9)Pg=tQ)KXGj}4K)dNxitIvAD#`b}PGTud)gU0j{OTg#LgL-d}iLv66{G!D4 zR0Rd~)Z~)f0xNx$>d;`<pj!RZ<ovvp)ZE0p6n*ugeo&OW&jPs<5p1wBV*=O$OjoJG z<6|N`u&nVr;!(p4+|GE^Ftcb9B!DM_eKrMb@w+Ur>yX13<Z*Bq!|I-?VD-}=>cMpn z#4E^k&vdXXhBx4K&kT?!pmonouz9n<IzWZr`z(+Rh@gShJ+r|oFwFE-hX>6ZkP2Ac zGZ$>^JdhA--2<`@VLGhtnGaToVLGJlSpae_IDx|Jo`sOWTLiXcF<3Li@gRF4;RUUG zmVlKkg(v~nJ)k8C%Rs5%OKs6|usFKC@3X+Jd>LD`0%SF`?pX;oX%$$<yDYE?@3TP0 zBfJAkN2|e#(2e~I3M|kyDIi0kb<bL`q3givK|c6WTeKd;A*Sv@Tcv?081d9SAWwkm zo(&*3fWs72_ke<ABP2*SfgQ9N<OXntf1d?%B1v`67O)Xpk&Hl;?y$ON8(0>#7)Ppm zwu7W0br0y+_}s+IoV3JD;_mvI1g?B`;H-Rhf}OVuWCPTP2<O2npWPr?ES1k5P`W{N zHMYuUFDP`ul@Ex8T>0z+8w{;{_Jdt=03-xGHXi2DqJtod-e-Z_ib!6t+UF2h$IsZJ z!yr|YaMeCXpt9iF2mRQ1m`&KK9|L%vJ__;(wE8&)cI|Pn-S4uX4g`4t;XqjRa{{CY zZ}o$);v~ola7qLn91n9=(J4rBJPo$=49GliWFeQ0AP0f-I#T^}7OegpTs?Xa!s?&% zU=^4-6ydH5AQiCs=OWnHOCX_)cM&}d3=FOymx8a81b3T?Q}a?l6JV)DMfpVvIr-_3 z`7Ow4hS2&cwWut$s929HBqLQJ6|6lmC8a2}7<7msVhFJ~wIH=9u_QG`A*oU!Q6V`$ zH#ZT>G+DGdw0cvI)hoITis|=RAkQNr16CMa0lOO0tJ?5bz6y_m34_6Bj~Zq`{r0F~ zW~^S(HAqsp4vvExVBfsU0(%)bHGrZBoEl&?<xQ~qTM+f&ni3K|$Tj6{uq;N{z-!7o zppb#qly|}A-2>|Y71i&vKsF%48&*@^2dls^(^nrJ-VZ=3U^V4Ku(6LoLZ~$*$UcPW zu$uBQSRsb#kec!d$hqLW1g|NdLIUp@*p}yD%@D_f?1h9Ew5EIkR`L>}B!ZiPfdO<` zDri_7R6V=`C9yBHMX$l~==Q(Q0=xEQY|$H#6QDKbTd;}mz&hS#flYXy1+oU=Em$Ib z4_1V3>|aozfi7<W849g2KY|VY1Xd67$(P!q&maz=8WYV!$m<&sr8=IP6XY3C&G`l7 z7H}A&nOO7{64c+o4*U*s6S&BFp9OL<Nj2yXun|9zj6hUTup0CiSQfP|LaIT3gQOuf zD5&=aDsJ)%iiw(k%K}%Re{fcyf5EQ%2eJU_L4@mI73hDEES3tCL6WEgq8KG%_pX3g z$Q3A)Bm;v+7PJComITcmv4Di2y*H>oi&#PSyw3tT6_MCr^(Pxx!_U|vc95zpT=gdh zR2E!+qW9jQ7GbMCE#MiQ6XXqO^~nWxD>vBccUe&Pfjoe4AFTT10V%>;eIl&j1z7=3 zj-cKf)Kx`%lHiFMez2VaAmhL>g<M{O+yl=4NVTURSiKNjJ$eAbYENOX3e4P!aFz&2 z1+4ZI1sf{{63TcNF$s4alMk-?AZs7#U5AQ;V*7m-C<qWS0xO;*z;4I%urWNUCE@Wf zZSeRHy(X1{BnxS9e8_<P^ezkRapaT%iY{=<fYqe3VD)kk_28Nm5=zK5sXSN~BZS~J zsRAf`pf#x?*gPe$4p0&PJ_}?6BGh3usWMmvhMB(R@K9F)sesj_s$gT)KtiZBDabyA z>9Cqq9jp+;bVyCA0dg)lTfu8mO-SHrfo;(SYlb);WG^JVpf#xuScxt~2}Vt-2TEvP zYK!#2^62)z&jP#lWo(fF$O+Jz)DUc<5m?8&EU*dhvq07$yah|D#$ZM0#{LBb8tAGR zkfG3;)D&!}8CX5YCtqrd%t0IqYEne;j;AICc?MLIT7cXF4rBD1)DjZZR$vEOgWLoz zzTRhnoJ>+pY6CXH7Rd-iT?MO2?ZC1)Yf^iVG^8dqWME)OFUm|ZO3O*DC`c?KZo8T` zxIT4|#5JSm2zH|r$Qr0O5pIOlr_LZ*EcK}iC^4Zr9b1Rg6%^Fq4k?I*T%Wpu4TjdI z?qHXAfP^yMMew5gw#XA?+xsk#gAoZ2R;zk}wf&4O@&>8W##O8OKxM(TswCP$Qz(Ip zt!{OIXMJCgm!Ng4AK2agU<bU*g1Qpq8H6igb!z}f5#G8LVMQRw3UC6&42mE~5)B61 z90D>F9Cyg&D9BadasjD^4F#(YgR4gmOjr#Y4pxDgixG~C0I7i0u#sS6qd-C#?;<v1 zo9~0(SOz_Wv7jgwdYyD?iUMePCTN`|w9l%fmsX&p$K{!(kXfRTSq#60S_gFVnL<HP zetJ=2t^!I_DU@gCfcAD*a+TzR4(~5ZEh+)424$4^)QXa##N-l%{L&Km%1?#Nypntc zuvMTAbZ%maUQskCX}r$@g%Kj+VC7m2*mIa6Vhv9bvGC~HO<4duYM7&!R`94{E`0(4 zZXG-z;vk7D9vrI)V2{7c0*4NA`T|8dIDNtD=|r&lB#3%&Jq-y;<a#<8EQ=A0@OnB0 z6o}AzIu&eQ8dwLYf_R?=vH=k_uzETjtOCPKUwe4eWPnt_>gi0du~{G?)Os3ZAHsB4 zJ)I3!h+#UUp3VU|7o0`m^>i*I@bbX6<byRs91pS=5?;`Hx&W-C5TYakbjed@UWtN1 zQ4uH|eyJ@g2Fsw^{5}ip&X=)8B_PY8HFPQ1tTM2UcUfQ)-e-X<KzIn2lFPx0(2e~I z3NFw^Iv_)#HFPD|&?>NckRQI(7FB~dglcHGSCD(Th^hil-3;;usBW$SxdI%naI=bP zApu(lc2qsc9pEDGeHO@>B-P3dU?Uolj6l?Quv)nZEQ?yTA@y&YLDG;~8FcYYYBFs4 zN5dKE(0U}cLSjitQD#zUNvdW>7q~`l!C51>g5B2!vI6Qwg!^DMayv*COO4zCN<65} z##SSDf&v&^BZFATHF6i&U}%lp4R%QnNC<lI4cw<iy&#+3XMr4xNMx|uxDTx5XKYbF zNL3fE+IRv~7F-*nUwi|%3R_L=4$s^ZL0*B@#FN18oeZ}8T^7`ZAWtA%2&;*wfE3}a zi4j&z1z7=3j-ab=;O;7#21%0B!M4r-83>Lq<WdskB5<xps)c8Q)z5;fM-N0;Ej$~n z0yC!~95x4}0#*yp1sgjLB$V+kA_ZF|1WTp)X^2`EvMU0)a^!;CGOFO}>=q2Jlog6A zi%U{-v9Btf4~oP0Ss+g#LK#-rEC9O((+ke<=vxR6Te`V;5hU6cgTreH*oE)1z}`TP zIZ$wdV-8loEd{Gz22l^L-ynWQuHTk}Wik8<uisXHd<(7LR)Wo21=ay7Uf*YdY(Rt| ztbSV!R)JxruNyoJ*ML;O>bJFEW7mO%Q0q64eF)QG_1k)|LJZR(_1gxJbHNE8UcYUG z1l}gFEt|obA&v*x3kff1{k8?HWGh4oc<vLlNOBt}xqPWD+71>+xA%P(*p)A1i*|sl zhSqL7!6xkj>v)$1HsO61$asWzU<qzFSP{Che?fr-x)cXwD71Fl3pR8gSUt!GUuui? zgE)k0H_(hF+PYChp^K+(19<{ew;cev0UV}KlZp;Pg7gsBL5D$Z02d?gvp`NHsb)I@ zHsUCf5r~=tR<j)g%c52hNHyDWkTj%b1C88*&rQlBZsb-8T(6zLS+AW0yY3Xo0;mTO zu7lNUr$Mq<>a{bVWP|ExZ1vh%P~d{=H4qEAUONXi7+SBL2fO3~NC-M|3-xEwMUXx3 zvp`NoBraI3b_uNEXKc}BkSZlywb~V^EVx!fAGw8Egso2VgJ<ZgAa6kHv}<6uUI$zK zE(_{DkOvU%gVkv_K#K6zX$UKBf~){1L(s@A)Kx{dAW88y*v>m3<G?Y6TrPs#1J372 zHQHUU`g?Ho=m7|;(e8s)VCGJQvmSs{z-qLIU}GPFgfiYmq+_emKnrk6iW2jR(^88- zlSS~(B$jHeBp=)<OiwIHEl;deC<f1nVz1O5gQD<#7RX<SV1|`3Prwes^o18Z{+_}E zm!6J(28q1q;81%3cI3M(uuqWV4-}~2_=DAJFTv_xLDYlmHHf#7>$TTlSqv}3>$Nu^ z4@2v<w_x+$fpvfi*7sQ;8xX+=tJmIxRbZIu>kALY4<Hq=dhH|F*iRrK)OrnMAHsB4 zz4jTb5W{pxz4is<TyWxt*K1!Pf%gq;%XhG5h~q)_Lc$ALul)ck`3X@1uh)KoQp}gy zqTgU~bbH@tfnE7Bw&)MYYG}Ro7i`i$u#R_GU=!YFfs99Z2bSjkgB770`xg{gplfiX z7#Omk^%|oTXjY0z3bq64OKlM|h(kubhA4FL)N3G5fa*0CkQ=~Z3ai&xrNGlbY+whm zgWLcvOx|aKoJdl=#sM~h6Uhif%>k>|xWKZgRRmJK#to8&)N7zMJ>Xry#4adZ1+Lh5 zq;L(P@`9bm2eJX`Lxl5S6&pWD7E8q@AVt)aq#!7C!4(^bg<P=-fenUMY{Fodh=7Ek zYkFWFEfNJ;^gavZRz&iG)ofy59Y14>#6hZ7;i}mrpt9ha4Sh`y%qDDATPQqFOM*NC zt=go(u9XJc{VogYK#&&@4un;0G9X2Gt2TrcvLGwKDG{`$2j;9IIY@Gp2V1HDG7lVC z$YmqQLEyZORJSRD)hof(qX!|ZZc_%Uz|5ftcd39>!0I+tu(4_&p^SGCjcCg`OHy+S z@{1CSDit7?w&fR9f`;e7^%wNWmBbwIASk$lR;-Yim%^0~zOoHEunJlZ1li<{c|}`% za(-S~X1ZR0V~9t*r(Zy5NW6<@kY15GD0<&#fqaaJ0ayv70d^{;{{rDrs|gSH!QmY( zNQ7&HLs|#y{C8PkKO)CDC?ddd4yzA!!RqxO>cRCPBtVesLw&F;Mqt3}LjzDyK<h(8 zuz5yc9gr#oWCJ3AVfCRgSOtcez9H}cHUX)C)rY2FW6eN9sP!SpK7{G8`p_J#5W{px zeP{u4E;z@)>qARO;8}rfu?A~~I38p#B)p*Yp$%AxEkp^pJ_N1Uu>+;0FSSMXU~zPN z-)Dhc`7*Z10c16_K6C_|<OJ67E(>hJ`z(<02=BmBqcd0$y0L#jfd#q-2V^L;K6C{e z>IPO1^1+wdB6kpnnEDWHjVq$8##0}HJOQc?JwR>%hbgE&1O<sFBuKr$4)O-M0bBsR z&jLA-r25bYY=ke85r_&0Rv-F-WpUPr{vc^ceFz%CgpB_XTOnG4E5rbt6=ERReL)~A zpk73{4^|-tgJiK(h#{bagX(N-J-tv+@PaEu5DU3N3<Dbstq{Y(E{OmMK}Rs*J}rs_ z+4MdO<XA)kgVl&pU@bpmi=siQEOFI{F;H1>jfg&i3AYMcl^6rh*0CV3K&!+!uzTad zmcPq_x)9_EgbQI+Vgg7J-YOAcMIy)waAE|FV8Y#1lmtnV$zWSkKn8;23%Ps*xd@!! zk?O=$u=+H(dh|eq)rsj~6_~jc;jj#l3Rs<(2{twhB$V+kA``7ngq-Svs1M6CQj1c- zH6la?t?LJ__qo7Tph99%ssd>26YI`+zx=#Zy`pSTM83}g`3w=%u+k<6>?BNoM8M-P z7aqX$b#@*k0`tKkR{(bAyDYF@kmC>(u;4g^)p3Pj^+gc%;5rWCapXF#7%Yq7X?Pu1 z0`fAnjw=P5R|eJrDrDbhfownoB&?1r2dls^(>EF(kQE>musW_1Y-|-s2(^v_*@rM4 zR>xI?6=IkUspD!u&IM-ycpX;@3A{S6E%ji{5XXb;g@hNhj%xrbX@n?&*KtjtH1nml zs2MDdZtwdnuq$827PWw^hSqVdV3XRwI^Jc0O?aOLG9KX_SgLCWD?&H+FDS4;7w>=! zh1PMMU_-mW>OnsEQd`sw;*e3tA&Or-bsWeOpgOJx<OXn<!s@tQNRak{9n=qU1GqqW zp9OLvNp;)=un`lHj6l>OusUuMSQfRiK<e{N21!HeI3orI2GD8%=wbk3E4or}MK=X! zMK=}f$Y~&Zp#DTS5?0Yo2gzco=w^UY531X-Rdh2!VGOS5KrG~nZWh>JXhk<0?2<Vk zp^SGCd>Gy>nhUb-eHO^Yh@=Lq?dE~?{fsS|4^mZ%tF~JJl?B&!QfRAZP=gm+m6r_9 z<qJWcf>wEpz%E}5cEP(Ws53#{K{yju<t+gz!dvAbtXK-N0-QFn1jaH*GF=X~dIiW- zaP%RUnILC@%K)T$ZzWj$D!6*|;DptCtHCNTb1uSlYd|Vs_1;>rvFkuW8Sf&((d)gO z)C%|_mZJRp5=5U6bMTT2rEdqS5?v!gf*hTpJ-qdx2z;Lf@&_VxVdc#Rumdn%9S@JT zjqos~r6V^%B4;x=RJMQ}^)3tSa^&~{1sXVhV0GG7u=;Hf_24=U;!Wf_Z97;N!;A1b zZ3oDM&^m1=*t}g}9iT$>eHO?DM6ki?wB2A87-sq=!GmoNNCm7;+Y2^!A4mwbP6OG8 zFdbH>?FTEwFdb5-9RN8OoW|jG+CfO*9Rk~O7_1rMc#yr2@PgK9N5D#sLX^Pkv}2$Y z@};)uI9MFr-uGExSH6rbIsvj8TBn@^n{*1S<6Rcmg!fq>;}PD0rLogsMd-%<1qIg2 z*rGEaL!ourS+Jq!!0JIh_)=SR9>gJ|PD7Nmc<MBeCqQ-D1&|xSVG66$E<%Fz64*hP zL2dvS7Von_P9&*Ly8<@iDv}Y1>H=1$T?5Oa)(c2=+I5gLq)r20HCmBMY+YsxuFG!V ztjlhK9d`?4KGc5*$HD5d+aOsib=e(IszG%#wz}*tC~U!X8Hj~km)!#!46V!VgI)3f zBm_N+GZpO3qK6=B-e-Yaibz_pI_wcx{m<B<#~@X<xazPcP+4#thH=#>*dA<kR~9@s zKLvRLT6aAIyYxBO=66|8=YgD$a2~AgdI3^|x9&n%@e*VOI1Pf%;)Hts6(kwH23z?C zWEwb{kjq4nbHI5Vsm^)}R{svJ9zFPAb=G^Z3e22|aMcHp3Rs=>5p3)ykWj|E2!FIX z%gsM1B*@WEA+;hkxwIrPDJK;?PD!x7f@q5m4szBj`V5Mw_gNtKBSI5aj(h=IjOp4m zcr<;5haoK-_YD#m-@&2q1MHZ0Szs3<#|J2o!0`dAqke+b|AMFo*HIAfA=gpA!Lk@$ zgV#}iKpunEQGdba{R8U&6_W3>KsF$P3sy({2dls^(>D_yTny5nolUQq7#K7gix{QB zb4VZ|)H(`eAHsB49mNb*h+#UUj$)C99UBL)qgbUO6GLEI*uk11jtAKb2`^|J#Q|2r z2~h&Cqqw9YSL<+t#nJ73p9Oa1%h)0wkk!ySiWh7WA6Un`EU*dhvp~ipyaP*H{9r}s z#{LBb7U;enkfG2zN)T+Q5Li9P2VZK7gh3oK>L^4Bil>eOc>+{NiGbVyE+1fZlqe)f z#lQ{{2e|=UIK0mSIgz9~N&;+zB$5$`Y5-P8Nr7ci%X_3cN*W{$siX9v9TCuW1!60z zt>B7EMjF?2n=IIcav)2fo<z71R#C}=WU*9K3ZSHe>Tqlol_DsB!4(yVg<Mf7fenUM zRLWqNsDOkr-hsE;fI2}?zZR*2?0TOCaxNl~!D=ftu%@4}Md~0`TXEG^8c<nqZ6%JS z#|5<vTa{G+&)k|I??9_8EwG!l!PdXag1Qmp5ri9IRhAA&5#A~bVTCTp3UHDHZKpvF z20cj9)Cb#Z05TFBYslp!$W7pUk5q3Ng4G+r)uRU_tllyPtH8{y2&b8VRKV&jQ?RjS zAR*{2*#XeAToRGiL=xy_DL}>y%|Vg#J`3bhMBu?n5eu*tnC{Aj$BHF9$UxU*lkW^G zNB~=deP#o;_FWd(ZOCB^@;Eq*VRex$SiK!YJ-9A{cm%mFvIomzcmiG*Ie@$Xt&1GN z<~f0NfC|I+Ss)t_0RyXxoWUwE%=FEN2aF3y1+2g13O3daB!pTQf$T$=4y%jY!3r@< zhtx$LAm@S;DZDQ7gan=!*cNZFW{BfK_Cmr7S{M0%mH0xG!0RGEP#XABTjUQGN4NKV z7TA?9V~YYnRzvHeK(I+cU>)zWz$U!U0vV6+4lES~gB770`xg{gplf_UhC=J2P_Ut4 zVD%s$e5ox82XV-#ix7n*p1KI+2~b@W0dfO4Oks6VBqT_qzz&KAxdEKv-)DiGNK#!C z12!TS$p}PA537sfz_O@CI#OK}50Zw|MWA&bxry1Spg94ewxaI^S40UoE22cO^O8U| zKz)dC9;_lt2FYTnh*Ci52G!NrDxy?S=z=RE5DU2?N&_1Vt%%aWF3A81LDzl2JX(|q zvgmyl$gPOv1*?U!z&d`$7G;A}?Zs6K<v?Y@wGjHc5138Zs-SXsp3Vh%1X=~<fnA#q zw)<Tc)PW!`ARGv*f(k&2@K!+xD+)nYfKwu9-3QEBMMaS0SPZtb1Y{mKvXIM0kb}T^ z9jX2)1*<QEt49w)Sp8EDR)LvA5$>u0sesi#m0)A5KtdVsBH|br82l1*Q$b4?K}#87 zj#eni2Oa2KTAZ2!U-#jbUj$m|2-^aO<y01RUuf#qOHYF+R@W=42F2a`ERc5)!3!&1 zYQXNmbbK*9-fH22nnYE%K5CeO;ac#W26d3=st1Qt1K54<vcR4|jxkU$f@2I;n>B*f zH$l{cYcq(Ck!!PNuq=je;k8){$gj}atQBlt8(0UZIDMZ5vH=l-u-dF0tOCPK-!gaz zc7RmCYO_wTv0We`)Y=SWAHsB4ZPpD|h+#UUHtPX77o6VVwOKDD@cO{E^n*1+91pS= z5?;{SYyw!xM2Hf2Z8iy%SiaO2O$Ljj+xtEX?8=w1MN>dlLu<3CV3VeSb-c?0oA5ph zWIVz<u;ex!tO(uMzo5W+8Cx_1WGJ*Yn+Y~_7Fa#V2VZK7W`j6n)Mkj17Ef&k@&u?h zn*(wKI80%+*<47F&I3DWKFAH=;^Tc5$cZG?W(&YZEJQK_QC+}lvqfN8)OrD_Hd_pm zhSX-Do>fX}aY<%gBIv#@qAIjraD}!6XN9&D?80RrOQ4=axDZyMEeFYBsnAw{k`AiF zu~ld*K>-Y|&_FEY3T+kGU}%N58tjraAR%ba3dyfUYe9Cs&jL9Yk;q_m+B&eNpRq;j zL8^Lj)oB}`vfw%my=R4F8MbPz4xYI;g1iH*);59Nycul$yDX?1K^{T45mv2j0V%>; zts$(~3bF#6BtbnZB$pL!gCx!EV0(9fj0DFTaybcd6FA=^)oeS#>UY7_qX#6cX4?%` zftgzoPTK=g0jt^ef{on=63TcNQ31V0v?w(<za&)w$=M3!8JWo$psn5D>J79iAGUxW z)G{mPN-N6GRX{$q3{)HD<R^nxJQ7;F59yfg2gU9CERaVLVGk>W4uD;V>8&bwq#lHa z_<;K25F~mJgTwU**wyc{z+OX+VNkGxV;EKw9tEpE22l^L2_fNtToWD#%VLB9ye2#W z3IS+McoJ;hDX<PuQT#p&WCJ2xVKw1tunG(_eQV+2dIqEdRui5D8+#5Ugjy4V>_eCi zs|nA86=IkUsR=KDoD0q(@S5-<B=9bQZMh8A3~@ZjUPyRBYr-pFC08Lz;5FejP!jr5 zTXY>Pj&AS!EU+tI#unWGSq-fTZ-Py_1=jH{3v9ysERgXC@4yn_ZLlJAWB-Bz3v^`= z$WUlaco%HwJ+OL^55CkE-3M{Vs0k58G@hCe<Oxts_yFVvaG1hs!iSI`eFS#UV~`ub z#m)OHkP}I&37>$Cc#32MqMm`(gwMdTs1*uQP52xn4XFu1`_y2YdWhM7y$@UqzQ9=v zz687O703dp2NAA=)q<}<vRG=tH=tyL>S%1W;9F4Of@?t#3%M422R0a53%&=t<O4_u zx=#)2&!UeYd){Y(oQg<Xup00aSi{fQqR${z`*78OU!bz!8W4S-8q^|ewO<Q7Lw^N% z16uoi1H1J**y?v#Q1^j6fN&qI_WJ=+gtzuXSn(5N1vnXk_NhT#RrCvz6n}&5`~xx$ z98<{UBFH`9e2!G}{RON42Um|CfUuhHKUf83?nF3?K?XEk0?qe~GT`YFkWj|E2pee4 z2X!lSpBZ?eVrg+|5v1bF%uC0d41*3UGRuJP=>a(w5q7YGg9U60rqdeXk-{nin{c7n zC2TU_i5hmW|2V)lzsmwU4>_bk-Uo*?tOnu)tLK8K2iHIlzaZB@++bM@f52-X9*{4f zH4rb@JU*}vP!ae(3uFT#Y+yAIKUf8ZnZC{Nun_>MfYm^PU}J?qLZ~$m$UcPWuo_4h ztPsO=NDU+caxOTT!fPN=NZ^TqZ4n1+hBzK%FC@I6HIM{Yi6le`yatj2C4(=uMbcn# zbbH@tfnE7BwnzqKH8ds4f=!YG>v)$1HsO61$asWzU<pYctO(uMzo5VZUE2dP6j}o* zf(=yys|WeuOKp)dh(ksVgeV^I)IcClfNCHWkQ=~Z3af!sAwjAJc91&A4d875J`3bT zl4>9guo0R_Mj*;~SPi5FmPIYhk!m1qkTj$Q(qv#@NKFP^+eJ+MqX@2lbYyVNZ|Q>F zrUx<}>OF+pVD*naNES=|V*pAts7}UK{}_UT7F_>;SjhE{5!hg8{bLMvi3vz3;~n^j z8n7>mOhLB1&jL9Vk+5L3j~Q6`&)6b!kSax7wT}f<7F_!XqRni9t-)6JbiuQ-CCCfV zy2lFaPHV8m@3Nq-134byI#}If15$*y?m<{#3$g;7071vlfZbGN2T6kVU>hAkhJoV< zxjY292Asc<Y92?hdMCJg^uUAFJkDShn7I<+C>M|lSf9%kY^)ndDC1p(F|_7^R5K|G z`FSYaD4Z3JJ18pNXMx;^2ryVV;Q=-r(?#v@nDB%L6S)rXf&{8J*f&043*TjdU4<O3 zAkTus6;{vqg4O#$)Pw68h!>FS8Go=WhV$X|OaRF7(0V2iY+evp2dJQXp9Qi35hSpB zCK#*&!%W{!c#wpERKV()P_VIKAR*Lx24o+?bXYwT4pxX^I;5V7067<&B;oZ;BqZ>n zz_vt#HA5T^vKJCw(0V2YtRxnq1YXa?fnxtlZBaZ}9NpgcSzuSbj4et4Sq-gc62T@V zfpxsg0-NwY3uHXPJFxVV3|540>|an|fv(p9849guQo)9%fz^Y2@TImW9mFA{o<S6Y zc<LFDCqVT~2FMNIFoo4KnUEmO0y`)h<OXmif1d?%B1!d34%moXBqI=IIjo+^1IwZo z+DP?GK1dq5o=MM4A!@X*99+*7;H+l~!EP%884vXy!fmj6rWhoPrJgAPB^p#GW2<LM zK|u?yXFx3EdZr9)Ftna22fL&KBm}Q#(lb+vDnYiq&jL9Vk+5L(Ochx9&)A}Bkg9TA z^-K*^7Dqjko|%HJo|yp8%C#UbK<k-0usiF)7Qf4ax(?)cgzI4SOan*}-g*XMMI*=x zZ~}zXGa#=wL6TrI*v1x+Vc<AIE)PMj0q1X|dZrbuz74J(J@8=lOgmTwX0Ajyssp3~ zR?l>TjqL&nWxR_pfz~tWMfs%#3Yo-LG~J-Mc%KDwBqGFM1w{|obWA7p!lR-W9!_Mt zpbrwP{b2u00NeO33+yc9kOg@c9I~*QW+GVqB#3%&O#|@*a!oTCEQ{fOcug|}<a%gL zGZk#!G_Vd(QTILzWCJ2hU^UHjunG(_ef!~IG6SRnR@2M`8#@amgj&;p>_eCit7&F~ z6=IkUscGhboC{8r@S0{WB=F{eZJ7_&3~@ZjUPyRBYnlaMB?}=+;5E%6Q1pMPEm{l~ zN4NKV7TA?9V~du6tcKP!OTi{B1M7H~1vcS*7RY#ncVG!<Iam?8v425<1-eWJWGJ+z zSqV0D6<9sU2VZK7R)aWX)HH~K5Km15@&u@+Sp#wdI80$R&00v1t^+%0J;)8<Z2mqA z<V2EcnhjthHX<2;D9vFt%_gucYO#$}(`*JwLuwk(eyPm7;*!LiocNN&qV!ba4jbkI zS2<g7RykY2j@$;a2kK9RBVkp}c91NVDrW~M^`N>PTa~jD6vp5x2gE|Ia(00YhE_Sd z!7kYY5`ylRLiKLZUXXR~vp_CJBsEywvk$EAXKc}akSZ=*b<Y8)EV%AL-!Fw~AGS(p zIy{#j1bGTt2^|8v{4m%B@3NrI1bGMHOjsp!1f&RWC4{izD98$M+63*FLUmlxF-S5! z4z~IP$W(CjA(xpTXMxKAq}u2tSp6xudi3Cg)kdemDll^{!gXgrDqywIS+KF^KtdVs zA_5s07+g}*GV@Z4!Gmm|nIiCvC}M*!)Hjfc(#&Ged{R=XLJDZ(FPBSdT4HHVi9%Uo zPH8G=a1JtsbRHCS@3TNYK!hu-q`3gL8q>X#;SqKb9-6dq-X%zcTn2~46|i&OWr5v{ z94DZF0>=rg9=i%we+{A@T#rFKh+L0d2g_o34qlJl0C^2skKF{DcMGfoRFJ;U0@;8F zFjzfy8>|AuOy6nn0J{TH0jtOEf{ncg5<;!VK=vU_ht*^E!3r@<hty*aK+XlHYj{2O z5E6Kgz_vUFYlb);WG^JVp!L`ju#%?`CGdLe87OUhsV#aA7Du=DeHPf2FJp^dfUJhr zV=uuby#niamjyQAeHO@ggm+-6>or&ry0L#jfd#ta24pC-9(xNm^c`3|$Om6)i{67c zWYlAb(iKlV2J!@`9{T`t12{}!_1H&9kbVL?=rhO--~!@(7RZSt)ni}4Mtnsw0#QZ4 z>alNNS=71!sUG_dl7`e{ppm(h)TGjMqIyj0z}43eoYmJ)u-krtjE8y;;Wk+H^&2FM zrTY2<N;IfW##Vj(1qCg*`U0_#tFM1xgQ3;ef3Qm!WWlF=fk)=RzAR#t1<xIT9EwO- zuv&`=to&ze5i>~DI$X6D3se?dYoU+Kfvv$-S<Q!MWmZ`RhAe1h#U=}y8es=p{4NXX zI*{WLu7g!p93Vw_D=UN*oFFT}2@up{0=ub*OBOs?!40;N2V@vHj*!bkkZZvC8>x=s z1*_+StAC$`8hEfeiXW^3Ggl%UB>++ZtD^+L#tMOiGTuc@M>)GNJ2kaH0dd3=c-4bK zBIL;W)VvhXV!(p@;u55joHPtI74nNf$J?i*=A@RSDkOpqyoVnW1u-GDB004HVhZF$ z49Gbj;GI{+3K|BQSe6VL=oJZrqWgUoC>#)x0xOF|z#hQ#^(=U7i^8K~FndxAk~qY{ zu_6KX)VnOO&ymvyDAK^`16E&3g4Ihw)Pw6wNH8JSm(pNaj39#7molILg4UO^VDsd_ zIzR>X`z(+Rh+v1+m-1j07-ss;g9p0;NCm9ER0JEV1QJ56FG2PpOo!E%%3y^UrbFsW z6_9hmSqolYszL%!4Qz`#STn@&AbTO<1+6bNz)CbBO2G9c=*(X&Pzw7}TciyZN4NKV z7TA?9V~cb^RzvGcU9d@dU>)zWz$U!U0vV6+4lIr8gB770`xg{gpo?rkhC=I0L$IMn zVD%s$e5oxm262d~FVW8YMHJ_F>PwI(K=q{w$PM5y1=W|JATfmmsTtTo<{&qK3#<28 zASaSkUs`~TutYKfQ76IbODnJ}YUP7eUs{8tA@wC_Ek#jkVQFeHaUDK+aE)mri)${+ z7VJ7ZkOfc=B3uWnG3`OJSZYiMP_jXFG`1Sk5fr%K8WY4qt}&g!219F1XRu3LKtj;9 z6i|N_xq|F@p9OL%B5}d$OgFHGpRq;mAXW0X>P!!)EV#}@UrPbC2wSbW9G;;)LEeDY znqFYHdV{Tgmj!hn$O8!X!D>w(kRrUbCc+9|kQLx$2wF=4byblcBq{oX?F;}J2aYM^ zauMVna6U(>Hv_@ygW&4X0}xhk27^^#=1zpOLO?2D^=2s8*f5Y##=D4#DD`G>YEEi$ zi9%9pNqK5&o<de>aft%-G(^yGhoA-YDTyVCpsG$sp}Z)w1SXoBSX9hakXV$Mn_7}u z1nKI5dx41x$;D;h3Q_@5#VVxagES@Omt-ht7~!Zf!$Fb#J_{5AhzNm|MiF4AWBPXy zJf<Vz(J(l@7X?WW(cqYf0ek0N7TC|oX#x~c;4}fND`Uax;~?t6btNQ#kn75Luq;O4 z!0XBcP|!f@%0#evNnjnI!uov{$Oc4!!|KXpunG(_eV4%lJO!izR#&EijZFgyq1Kfk z`w*tX>dJJmLJZR(b!7&~x!?>1uPZYlftLlgB^#_6;&_m~knn=ml{sJ~xez7rx-t)x zw!YLB<%7l1?R}pGcIC_1q5_cB(7Lh^Y*G<e$Ga@B3GcH&#v{A~OP$4FMd-%<1qBx9 zN*R!$(7Lh|Y-kx+J;(=NYKzK295U)kL_v<Ht^|1kR99Aj+yD+!SY25O3DPRCgQ`Jp z02fg2vp`NHsjjR68&Qj71fn*A)s=N%S=4F=sjjRCNki&N(D@q$rAaxN$qK|Q`#1rv zDjRTCm5pG>HG#~B`VZkaSXJ2!lEqS0wt!L%s++M@m93z#1y_|I7IIbD1~wR4Rknj& z(g6~Jp1%R{W>F`|n)g{Cmm-oDtfuS&tN$5W)D2Q~0#{Ah1C<5Wl<4PgK<vR*QLcyQ z=3bB|pcQ2w*rokoo8M(Yod<G0!g;WYaso&Z-ii`o#YB)5;4}z2e*@yEqDhcsI2ml^ z6p(4)XhJR%LCyi^ain^3Dp>tAxO(*9gVmGM!74CwCc;%SKq_GM<V>)!vp_<)>dEX( zNM91Nls-H)Nx`uoQz0=qIkgykU@&O3l&c`WxHuDZJ_oqwEKV&c)>8<8Bx<+_xNc0$ zOHuGm%}q)zDlSO`t>_2Uv>^4M>K1#?ayBTc-)DhB01+Rsl4uUt>6rdq1&`>t@L0fF zPY$^E=0Os~d~i%G0DI?M7TC|oX#x~c;4}fNCl`X%FM_BC*OQO{LarwlgJm%S2VPGu z0R;`To?HqxZy8tzsGxqI1+oDV;IMjfIamdTnZE1b0losH0#;A11RJ{wB!pT|g6u<> z4yz|ugB4<!4yh;CfSe1?Pw;wjEhO;Pfo)k2)(mkx$X-ZzLF>s4U?m$NO5pY6CQ#b? zQd_hcERJsP`z)|4U&a<~0a*>LC%1x4+6LC~E(>hJ`z(<02=BmB=XS6nbYuU50t<9G z4aiVvJ-HKX=q|8&kPp7p7VQRc$fzd~r8u5?666U`J-G+u25^|d>dC#3Al(Oc(0-5` zzy;L%ERYjPswWSCjW~#81fnW})su(7vZ!?qQayPXBn_!2L1VC~$%zG-L{*da;A-*+ z&T8@~*lou^#zVb_a2u?eJPwk@Qca!!B^p#GW2+`lf`S%YO@dg+)#NF#!O&{*G}t9) zKtk|UD~Sb}MQ1^_yw3tT6p^rCwd6Ul@}IFq=RvCMan+I+pt9gv5`7F79GKWD$!+kg zd=caYXeD_G?9R(zi{E8IT?cYJ!ga7p@(M^1-bxZ-#Z{0M-~<R7g9W>(=o%ymUI*KF z17sLDj*!bkkZZvC8>x=G308j#t{y$`V0GkeunNpviEz{%kP28Gc^7Q#J&;hwy9hr9 z28NK-oSb5X@>K9i`JnzHQr#GksZgF+tN=c&sw7__CqFSoA-_l=FTVs!?FN}7ybp?{ z_gNt4Bf=6^gggM-i|N=+@JM<H4?!BZ?GYp@9)rW+3D_;~vcL{Tjtx){fnx(!J3R%f ze+E$xuALyhL#~~kgJm&%2Cto7fcyomonC^?dj-}3Djwfwfowp87OZx94OW3+rtemG zXuSccfYnZK!N$G=38B_bAo~!e!)mAZV1*c_Lu#iFAm@S;GQ4*B2noDTU|T+eHA5T^ zvKJCw(Awz>Sjkt2k_gbaN>YA)PHJLa(Kk@y_)=T+9V~}#_xmicOJBwo{Qy}Ht)YH` zP5TAb@h%H&!uu?c6$mfElGksrB6MT_f&vV5%?!v;XbtrjZ0J9*dXO)^)E4~*aR}8= zNS;By$rDkC;;E%T9s$)-405o|C`hIiG0K6bYMA6elS9mM;7KfSS_3(iq?(EaYy>Nk z5s2CVR#UNoWl@WLq?(EyBn_#lAU(RG)HLFHbf>^o6^9(I!B0-G<G4WPgNwoUSqR6$ zsw!@fES9Q@M~<j_VR%8|3$Cg_Eaa++4{R{Bs^SN`L;xfN@6mz0StJOu=6x2(rHCX3 ztE+^->VL)-34>If!c|v^KxM&o6=shPWDmB=YA-xzi-J4>t*perE)@sc{4NXXJdpDd z&VyA}5+Fr*D=UN*k{~O<c^uNC139Wl3X%+^!B)zEOan&~a`^~y4miIf)mE}#^>T3a z=)ni8t>nQfFmouvRSF;#u-ZxyY^)MUDC1p3KFY{vN@{XuN-A>2m6e|aTC9?&P*7Tw z3OXYsH8~M69GaK|nl4PvFD=MPO;IS%EXhzv%uCFvEY2)e0CnrIYy~jTD^dnU<ohg; z{}7=KD{oZ54#V`#PIxq`!ozqV9Ipn6Om%Q5YJeU4E(`1<<oE;yGB`eA^_?bIy%t10 zxD0}LAGyBM2Fqf29bVt*fIJSZ?{vZD>49~C3fuQtAR7?D39Ik)!74D!^xXpwP6Ln% zSbb**Hr5Cvgj(N$>_eCitM81#3NcKF)ORKz=YsPByuLGq1fCh#7IUy>h~q)_Lc$AL z-&uf_SVEM*dt+9hl=G#w$Qmq;Ztwdnuq$827TJKThSqhqV3X{?I^Jc0O?aOLG9KX_ zSlY7(D?&H+FDS4;SIB@2h1PYBU_+h2>OnsEQd{H<;t;CqpnWLhdJa(n<EiIBo&eQz zE+996!xU;#kt-xf-M|iV2e|=UxV+B-Igz9~&I4?OCz26}Y6Motd4Xkd)^Xk-X-FLh z>Wvi@fvy@SX3%muxQg?^S;hH+-R1`}9_l@W+hA3kKS&l!6&C<XG^kF-)*A~11ueLW z1F?{+xFE2>&?+t%?2-_W5VSW2_GM8h$d>n6AcrCn7OaK~11tX-TNDmbwH#Ls7Xg(8 z*Kp{)F|ak*D!3!?tQ-mQ0<?mQ0=qLBZ1KA+sOvzEN4O4F!Nq_S;jQ2hR>Xp=04G3D zZw&0FqBuwrj0fA805S|5N66(N$Ti^nja0uSg4HL%)uRU<tbR)dtH8{a2uG!WRKV)D zRIssWAfb$R5ltxd8`{iXeol%)K~ZXQW<h2NWYK0yW^rPAdQoaRgqxdMl98VR8hPZ( zF9MBYD&(b>D|k8@D?k*crWc_qG}Odi<)wpS_I(z}%ZTuY6+0PVw_<wm06bzd;h{cA z{F4QV@@#Ne=YZY+E(`2Q<X8tq1vu7WwO}q-eI7(TxE6$j2y!i$50=FU4R|eB0169e zEm#OPuL!IIR1Ck*0@;8FVOT9#3|4_*rte{R2$z6Vz-qx#u(4$zA=FwBWFNwGSS?r% zR)}Fbq!z3IITxH^;I&{SB=D-hwp4>PLmUsX7ZP63TCfJJq!ywCUJKTN64RI3qI$46 zy1nnSz^;55Thsuu8d?iBf=y}y>v)$1HsO61$asWzV9Bu=tO(uMzo5VZT`~hQ6j}?m zf(>m0s|WeuOKnj*h(ks#h$y7-)Pf*SfNH@GkQ=~Z3abS>Awk*&c2GCS4d5c^eHO@x zB-MgFU?X~wj6l>huv)MWEQ?yDAocY6LDG;~5Ofw~PJVi3a$*i~ms_iWE5ZplE5eCj z=S>3H0QDild9aFbGDsFnMK}eNZctr~ts<NX3SDqT2x1{ugwwzVLo34RV3*7Q2|>?- zgn6`RCdi`qSs=G&e27@cz`&qil$e=fW}u&!Sgc=?o2>7cmzS#VnOBlpRFIzoE<*J| zXZb>}%>lDvcag-Gnd=$q7w4B2C8z2aRF-7q=jkWsBo-H^7VA6b=am%Y=eT9&r0Nw^ zTBYPC7nc-)7FOh^DIm)svlEMpGt=|p6N}P|<4f{E_n3f;D4GRw^QSCWjXfLeub;6+ zb3o#1xN7XVP+4$|jecS!EIhDO+TQSjXC5fDp>_6raF8wlTm3Ez8j7HB&iIf8bswzG zUI<czug*r;un1%WIJbb#tAshKXfY(qECJiO6l5GYK_QplAoqaFBcxh;8Cd;txO!ML z!yE{!wO4>uV3Z;VXRQP&fK}S7z^1MS31z&CU}R)q@X0JL0j*F4jh^Nu=B5^dI8etc z6qjd~Bxj@+L(lk1h9m>XzKpb-{Bo}RG;nQQP?Voul$eXClXF0(W)>?%tEVTH78k4Q zD5&S>rlu#t87Y}*X&_E&Nus(AmwIYRB1|NuAO$R_pq^Zw3{p~F1Xh_|l$m4%O1z*W zvO(gh$)G#n64O(`1|)+H(*#=tUOo&`09_FUVnXJ8AuP~X0f+@|RH?@ntpTO2_gSC- z$1J4Rf`bYpczut<6V^I-v^&y1I3G3400-!!hM77Fj~Zrx0~Lh>3PzYfYDpr9$@QpV z1~h;{T#!CUAj5dc<;gH+c~KgSi4x#2L3p5p1i%JE0v^N#8w^^U592^10LFzx0)hvM z2pA6>8IKxf#ulxI<d+TLl)4cd{O_{BafF;@KnWR~WnfL7O<?t#A?m?R9!P{DH+i;z zWicWX-sIT|ib`mcXB*hO?O+|CI`@4R$Oc3Lfi-z{fK_0a>3asAKz4#uz?wX}z{c(d z386N5K=vU_hc$WjfE8kx4r%i21vwX7;J}+a`yhe0A8gA3ux5zkLH0tz3)<v42v%|k zq6B=_Jvh(irzwE$Ha!f=6JKhJj)3LS?SG#IcJ0g9qN5-uK$||tz$P9C>v)$1HsO61 z$Qp#VU`?MBU`6Q0{sjfv%h;lmAVZ-|pHpB%PlMHieDbBX=nRNMsObYbTM@}a$O8e0 z>KRWH2;>=16X-0+E#NRlGqLC#B&g4W9e4rcCUCj_J`3bzlA1yn!A4v{G6K=ofHj3K zgJn@06-Z5?D<Ek|QwVhUJodU*LlgImEu;sgnXv`jF1m`dU33lX*6Seapx#Be71l1g z0g}biF1iUyRH$Bnw2MGvxDW>v-2#O-xKRXRAvcO{gH44titd1&aTg?%@h(CG?YJ2n z-Ul^BG&A03f&4IJ+DrF9fre-=-3NR5XKc{}koXp8d#Rg=fdQO{ks4q{4<QNk5jdzG z%P}w{W&DWEfMmMgu|-dy27sGXN<@WV(Nj?DOk!eS$ok5|z>qbWiGiULIgXxzTnF1L z^c-yQ3y@I8y9hA`1_tc$lJPzZ6rC9#vY>v2wY^?~wBl=f!3*wJAa{XtDQ;_uUPHp; z4cJ+4L1u$fFmkN|ax$cpTnV{3=N(w_dx+u)P%#TiL>Mk!!vwj(<^xC}Q7--na`AeI zC7-~Sd<N--)(K!szSI_d0g2%;?|l}?fuM5gE66->2*4a!^bO+Q?_kq^fJ_4W_k9+~ zK1czzjfsH);@|BMr~Cvf{)MC%5;dS&bQjc<zd^F0EU6U*MOk}5VyIafIX(OVxe8j6 z{{<WU52P9F4$!nEh=VA}4>2(?gt8T-rlsU3XB`G{IKiCU#LT>`BXFB=l-l4T9<sMR zR3tt(KczGWwdWGbT9lfWnUV!c#HAVUvp{|Y1s#Jt14Gs^i2oVoK~tDa@~|n)FSSL? zU=BFj6tRGmo@QcTNCai2pRpOgV?ic?yaqCf6(kLg1W*qk8q$}FEn<@gPmi*L&E^0b z2dc{6XMt>kM8pM1L}Yx*x(H#FCZ(1pWnF@}iW97p3rQ!W2!mx9SYLn}tOD#*B=`M= zXA>TfJgh6g3pSJwB$V+kB7%W|!M`lE2(-)|y74--A`^5RbvkknPXWC3Ixjg@A+e;S zC^M<F1k^dmEXm*k^&gV+b8|uK3Ue~^QWX-5(o1tw^Gb^KiumQhyBI;<7%Js%#-}V; zV?_WQL>Qrp=wS)Mqn)OqC<IAH!r*ul0Xynl7C2~;i!e~MLbCJ&Na7I%s~3Z)2RDo% z@c_!wk3pI0OKp)jSQf*J@Ps1)@*%WgED1JG3akT^j6p{lf;s5g-)DiW2IUJGkUXpf zEDP2z2NKG77r_O-X%4!Rqd4Pz7RY!+RRC)T%Y&7p+wd3C4psoU4xH^!O)FA_gqRZ8 zMrE)OAQ!*S0=WSaNYK`>3RsCMT*;T(A~i4v-AbqfU&a=xgKUL1eKo+^HNiUGMFfDV zx}x-A1r5+$5XA+F$*GzOy1L+el$e<Z={`gA3TjqS0H2jzoLrPyP@)g*R4XJW=H%#Q ze5ozc0-KNNB9P-j!K@9E&-x3Ab{(*jbU{LBm5Lr%3|weuF)}kSbimsLpt20)6_8>2 zAn$<#6<(njK!Vc{Y_bv96i9G_?1GeItjwSaB@3*NiGhJZL8HhRqRRxV%M?i$$fnYy zENJy$29`I6%YUgYvH)=q)dRTQ0d_D_Q6Iqxy~Y9@%te;+3=Ck|lzeclfoO8#s5Owi zYz6W%A2ayMJZrFXY(Or^c$Wn-78C=vU_NFHfE*7BG&_(9V9%pE%N`O24q!ta!G=IW z4rC1^<ix-smk6%`AYsVJz`&r{+F0ZS*6EC-6B>G8%Ro~^3Xd8lD-^jvEOG@acf+9^ zbdD^jp-668EOLj~;sLhB6JiVaoLovw%|I^2Aihh5mcoz_k_U$nNDS2X24~+?NHrM% zN%CG`_jp6x11{+heG^ze$_Fe9PW<p>kJOLy1xaJ{qf+zAkjF5I=|@?E`%!-KxYiQ+ zgWVbcvJTuD!nT$u5G0GG9~A_uPEoyp(T@rSr9^N)3dBNglZAjyh4!OD!OjQ+3E}QX zp?e?12lb;sei*d%ImnU7<IdrrKtuGSBEVk$8Cw(y61T?JkBWk%_GoZW#mJ-gqhg^3 z;Oj@BJ0=bkJK*vRdp{~3<T_YCDgkV9B1j0eABARW#``Q#bY^_Wg8CKKk4ge*&6)-3 zw#^1r_^3$-Ic+3^+yyRDkor+*))b{c!Xp*ztTd3>;1rCUeL+qJXV5HYKPnxpI0K>> z+>Zj8is52dKPnTXkSG^tfm{sjM`eR8$pPtwR(W7czSI`wg2eEc_dW~cKu`&u2Qm*F z0-$OSq`xR1;@<+W>4hMZ!2W%o1+ouPG-33kiolACkrYFs2Gr<+^`lBavc&bHN<prI zR+MF6qsu{>!S47{TT}t!ASy~a^`k(E7*u_N{0a)XN{}O={irIiBdbB~f;qAV%mLS( zMYSNMnEfb_*FYxKfuzBafYOhuheSjJ*z88IagbURWE&(R@b{ydz&e|ebV7<SScZZ1 zqguc!z)r>5k7@<U!}?KeU_;wMLeL`A5j^t+Y34x|q^IVUWftY<fx1Hq@O{gAMIE4` z<9!y$Swp29h1STR#!x5N%NU`A=ofXtqY*SfM|7xkL!!9{9Im}!OWtLHg9^Eb0R=mx zh=KNV`oQY@A?m@kKO|g1Sq|3EnE;l>a5B7~GZExsXg_BX*u2SL9iU|PrM74an1inU zeHO@SP`aH8l85zkrh)ZO2MJ;8=YWhy6xFbP&J3_}bQ_@koS7ikfwKi#KW7#s#AbtS zoC7uj<l^^PAU8k)3EIz@3sy1@uH;K?(R?rm-OBe_U<ba8Em{Dw723~P2-dy`tm9q8 zF3>UQd1b{48Y!8{;7P>dk|NBW4xTIknQ&Bcbq@7(QPNRRa&>kGF}RdmT!TYA{TxF) z{r!{_Ktl>j?v5d@;f|3?kkzl5CB+KK`9(#k#Rd6!DWI8X@Of{=dR!qHsg(-lsYR&@ zMX8A?kPa1SYyxzq4#)!EaJP6@zc3|mk7_a4CzyT*1rsPjmw@D9J*uT(&o2WBp;a%- z!D8TQ6-$o_6lfsBR)7K$9DVSrWhEryR)I}k4K@W5aUi=OB^s6<)f$MdwP0QAkaU4; zLiDKCgXK5C<-gPxZ3J-;6$Q8jg3+VmW?*1IiqN7>XniU~^Ak^>3gi@!r#FK<4ee8H z0Xt|b$PF3qvOvayiji$#K4u(%oDVW#JIDlZu%SC_2P7PJf{on;HU<)UAd4WOhrd^~ z8?18=l1`AbOOqgdFGR0uFT|pKVCDO9DBl4cLWlRN2&Vf-4RgRL|53wS&}8l$aOwwf zxE?jkLCOJ-8s>uYz@vsa&|Cl#0j~llGarC$hUSDv4RiI14nTZ(5bVQ45FbV?A=yU* zl#`L`1xO5ndWoR%J4h-Z*mFD#_V*Epzrl3}X3y~`SQebgvGp8}futclN6@kP$r-81 z*`P%)DVd<dD~pNgGfIN{jK^{I8Bc&+c@kt1xKV|z&v*(Xi>1$a8r0N4bv#C&@eC-Z zf%}Xg7IMGfEZ9_NpYa^n8RtPl8Sf&Lp@{^xJP5<%g{7&bsi5v6$oUx`B4!V+WlHGo zExG^-DMUx{BG{ilV~Z|<#3k`{6fZ+E(G_s`T*c@pUV|C{?kLI-2)3f@pvV9h(Ac|( zH$d)!brElZt-J*i%6Jzcz`($O?yZdXS)h2!_>cwlAFOkD8>9(O*9b9ta0lcfa6ydC zf}*<+-`@i}<vz$%a3V#{n;>UGnj_F|;RCSZhY-c!V-LZp1;eqhe&HjKN}?S5801)J zzwimzmZu=S(52)MTfWp5Jp&2iG4OpB$cdn8=sCzhu<t?j0@#3}7Z5MM1e^Z~WE9xT z@3TNQLW&-Yp5be-;x|Z&A@KrgrowuLZ$Yxe^$g#EoCWO}z6Trq0i+r1jxV)EA3+>M zg-@rRAt>#FdWImsg2L_-$dS;V;b*WTzku8YbL3Yr2iyWE`UX;p*)s%r4P?@HkTf_J zP<n<xAQABsZ1yj(agde($Tmns;O`m!2J8HTq!UtF!Ey_%XZRPa0_;?*J;Q$>d05Zz zKiE(P1@L5IL_H|SgKC9hg+v9&RxZ#|yS!A;`5lQxmB=${pcZd3s9_7PJ9M~;OOrDc z5{nfw!OQI`6~I$-;5GqhNnT=R9`p<>JuZLHR_OA~;#7s=)Dndh<in7Q^@<o3z!PyG z-wytg7^$nt1P()tU`KQ{nH6CBQU^mYvnYTkd|4GhlgVsgx4+8*hdpv>2udE1(h%B% zWe2P0fT#zzLLd<ZDjHxtSWd7kMo7SWuw0;kfc9Xy!RGORb%3(Nm)as;Fb7@x`z(;v zp!~%Ll85zR`N8@HKtkAhupr|R^$Dy8D+pGOZUeLjD+F>KIQydYV1*$eCIYrm6l?^@ z#qYB~Zh!<5v<E8&Rw52p@};&&0?a|T@_iQAfiGi=Btf=9d$3Yq?b2W!?;_?iFff3N zas>@o*A+Bn2g;YAJ|jdbGfknmG$}W;q$D*3bksOV2GX`KPAw`+Eh^UI3I$#4UXrf> zu604V6nwdqjzVg3dS;4_0_^HQP_|A%-0{qnSOm$Y;GS%9Nlqm=OM^u7@=Fv_a|=o; z!QE6DuyZjz2nq{OtjU7pVck?Yun*-yLg=-f0$32-3dGV+1qBVrG(}Kwfg=e~(<wpX zM;UCk3fLG({D5qO6tGx2s;UrOYG7UJNV-5)Av&rWV0lfrJZP#D#6i?s;C2v3M-{Xw z0kl|ATLE>_57E}e(?JC}0pwd9kZ++KR9&z`^gwoJyvqU^3+kZigZY@D4{|oh1Ot!> z;P8Su$PnUhBd~GCVC|650$BhFE&Lr*6R=KGB%L7VVs=c;AQqW}m0RFYJ^?yII+#** zktM|CR$!M~LtGv)7+s1oEeVMQ5<8bRU_aVI{0J`AF*}!bU|Dd^#MZgA2T4OZm!LBZ zO7i1DYg>uwQ*HzIDIFAW%|kkZ9p?lxAKV<n)~9p^$zthKx`0{}sBXsSQ@VmO2e?lO zVj=e_-N2?o`;_irXLx{wGTudqf|^Q@y$0YdCvg8}yw3tTIO9Xaq`}pTgu1ZE6BHzf z&Z8IDLqB7Syg}mI@O2)2AQ{3J91wmA=(CLePy@i7NAv?}VYUZ=0vlXbV(&8sf}8{E zGX{Ze3I+*55731glkq+a6df5KvY@_!brnNEYVmZI5M9MkkVC*lBIuY9sJTU95HE&< zEsg*g22OIwZ6c7PAk{szhZqS~90ga5?lxG@FdC$S7`K%sWkJ_E#(<5E1!)Ak17<X+ zxdrQq#ermr>xspK{0!}hC4h}i1Zf5v{iU`j3B*CvXmsj{fl>shCkFB>sIE!|ITG3v zO94AF7340MBh$bfa8*~74pNHQ69ah-WKsr58XUzaJ+Vwk9A|;e&ITI?sro>+L8?Cd zJ+U0H&Ris&kQ@(7jIf?q9#{p~saShr`5<{%PpklJXdy@_1JdgA0v$G-o|>0hln7eF zn5Y0MP(d{$WMdm>b|J4MF*6S|wE$}HAuV@I%uC^dtYl72f%dx;kk0ByQmGW5T2YXg zmy((Sn%qdONKMHsQqtj40_|dgZovbIfLncFLD1GFkceJU5h%aE&jN+Upe^l?I%vh< zpv8y{L<g+|o?O;5Ffh<1^dB|Mfrme6R9)dw!yHH)fOw!WcGP$P4XT4$=#LuafFz)C z0UjPNg{0~-a55?f`}JKGIEs)9FHkCj6kgB{T?JTuB}6^A=7+>5sDy!a=&Hc77$FDm z&{c!vv!Fe?8nA)2AR$<mtpjt=^}o*o*$v94^&ojzkFEi%zY!z^E%Sp?OG=CKKnpKH zW+TdcSa+@otQOsPXm_p|9;u*W9%@uk3nZ{w!FIKQ^+SpPknNE0f%fIv!Ad&dO1{(< zb%HtQ_Px&nyY6LdQ5VQcXkV@yti1=U<6XpD1_p*4&@xL$h2s1oP+tv}rNQ|(CkMR# z5;{z+0N&Y(JmdnJP5~`q&V-*QPVGDm>Pz&39gFEbP)LAcs}Cff^$W5Fu^;Te2_PY8 zPfklKM@uW?eHO^)poZzEtiQ~Vod*-as?ZHa)X0-S;RY_QK}!mAS{sWdgH4|T)(46o z<dh7u84^=qEo(t5IYH|SX&bau%&=1-X>c0YkJBN3jF<!RhOVvxZGAz0p%02tXpBLk zxHJiWR|8fo%m90HCd8Ye44{NI3(P@J4~Sx6Hb@>;EX)Dxp9>Pocn97`1j)+^C6xuK z8Sk?|=3^EO^T6uSt$-E{^Wo_YG;51wT+sqZ)GP$sxd?0qDEYn50=WW`=%B^JVz81W za3x=Ai<W{p=ypO~_%gO=8OT~_@vt1MeFa#@JMcPTSb?Ag3Za!?2~49vwt}+aDv(jo z_S|Z)QER|DK#u)VTeKF$LA2+<t!|7F3eYNGxTVPJk`Y}eJVO*94}e^<4&)MWMno~M zXgwq(H-H_t5#%0lrSLur<XlKw3%Z*GT2n*B&}Ty-i)fL_jMtitMVr9JZbmZp5Dx=G z#)piL8J{vfgF<i%SPm%!i?)J9vZgRHFl5|J&G;Q#v<=jZkxnel`0K5Z@h^i3<elwc zMGTDKb=Et;w(JB6WxUIp3DWsK3uHCKqAV7W$d}rpU0@YxolQH?lE%r53=Amd?}i5# zXpqr0*)0du3M(op+5-u%y<jW%fenOOiCp%9Tm(sm&}GH@!Rik{)Prkri2EYiY1aou zxEkZU1tcj1v*;iwpg(27mN_2+yB0OLkd`?g21!H46F_}QggFWtx!{dcnh~I5ksxec zgfw_C;Rtjv0p7SPP0E4>)lqOz9RryTO^T490yTJGPCE{k#p$#YAZdux6c`v75OynQ zK<ezwJOzZHW=1U7O(&slf;F2;ld{Soi^5NVopc&xDu$C_8&=PNWHARgGEf}}8QTDj ziGm$cbQYA(z(X4#7V^->Ik0)qp^fuk2V4LNWxR`!M)8wIvW`MpPH9DIv8`KTPBD0z z9OU4P4}&UkU4$eq*qI%dz<&7|TXY#D9*aDxftKU0Kyutwa1dO>7}U59)ej!jK+}2y z6uO{NH5AJ})0-d{WPRrW7a_O6rr!n$K@Y<O$B#nB`z%n{XMD(ly8job{Q6Q`bO)rA zn6ZMQyC6q^OJ2|xWr(pw_aL6S54QFJ$SiQeLM}r<PJ)ynQz5DFAz1Mvh+=RJi%7$I z7!I8QTBZG^w&*cPJy8yQ0(U5=x<xX(=qbdt&%h3N4l)qKwIIhqTnjxP<po&rONinu zP)uMr5jH0D3Z#fAC%%R|5iO?QKwS71Z0S3Yc^EDPISArH=&;axu;LF8#S#3V1rMk> z3B$p#fufHfJw!S96Idm54Z&xyg<n8Ipo3FD7J{n4uOI<DroGPsxfE3EeS>=+)BsOz zZ7li@Hu49^1h9wSXMrq%)X|V-16feZe}Yy1f~bt(VPIfDE;K;y_zjXH${l~;?m#!E z=r1H9{()`#4>A$zE|C4m?gDL1g$|-ID1zoV85O~E+~CR)lIK7rK5P(;2_#G0AR4nG z0|RVF7z@~FR*+_}JHFHwv4J><Mi=!4(S+d}h7oxOwqF>O{y}4CAg_XAk{#qm=olIY z*o~YZXTjXa1?GTTMMc~orI=%AAfJIu;sHs6ix-qJG+ssU^f4dUY<{qDphoBWERb!G zc)&k~CIHqch@=xzslW<C*ch4+SOwUrSjW(WLGrLMG!d|&q9CD+cM%4lA$rj1P@oyn zqSS(-)Z)~<5(PIO*N6bepb&-Pg4E>9w9I4$$V@5tklG?KMey<ikn;vv4JQtA8Dh(? z1lX4t0RwOG6iLEkj;w%?g2b>iI7nr{mc7dYhYoTr0t#_RsR!-R$b!|&LDWagWn^H0 zhj(6TYD%#J=*S-M^=HKjnRyC{&{#+YohO`|SfZ!kn3JP`Sa1T06os_R)SQ%JuC)9j zh5Wo!g_6wNRE6S_)B*+2G&JadrPLItS($n1IjLaN^%O!fQlUdA@VE!vLBj>#9u68# zf!u1Ek&4*z03PWqPAvi5<W`L25|HhPo8P#69fN|w=Ng06=jNwmra{MHa}|p7K_^aC zf}NL^2{s9l>cF9Z<T|cQ#03D5lO(}MPNss4fHu6qRwU==m8BMyfWj{Y-0211CI=cf z0)+|4)YKHNq)NC&Iv@jzQq%H_QWZ*zp>9)f^A8FMa`aPxZrs%?k_V-#_gRqio`sgi z6u{AlnZ}r5{Uk+r8XJx2!5-5}kPNL1&Y&vbn0=Q8j(+3}4a&ce3=Qosse;w3LDYk5 zPe@t;)t<2ak~&!SXDq0MhNPC?u}EDx4UjaXzXUo2F}EnSFg`iIG_OQK15uUfA()6U zPt6Q&aNkK&5!d9f7T9^(AREB78!Rb<oCoVW>40Q0`%Xo=ptO(bYDfnPG=>46BPr4Y zC30{l3dBP0MCpSKhIXP1z%DTa2|<@4Av{`S1hVRV7Ra?3A7I%G)>$zI>-ia5WCBvf z4ehLedL+mJT4V~91$RY2^UsJ7(?eJVIbjggAb_8J<INAtuVx^xKwHq}VE0;p?S7X9 zbs)$S2nWJi(3T)Yc$#j15jI$XYyh_xKuu_bvx=-C$<GFCt1ZYtaC{-BJ&=pQX)h6R zu8192y**q#dKkjm2@YTtki_>R7St^UoqK}hFh`IASVO@HY^pOzDC1p(5vZX6N{^{U zplS$Ia4O`Lg6<sy&9=d2;8GNF6N`!!pa;ek>lL|x;^Tc5$c2a?1Fh%>wRT;>W@EaC z2No4>@PH!IdUr^GdVsy+3AXNC7T8V5VG8moI80%O(0PH?dqdQN^E1Q)pbP_>@bLl5 zVmKZ)a#7?9ayxXs#}90tKUfE(2?(+Q5g?$A@Sp$*0IR?-)0+<#Ab}tSu;Jbyu&Kcy zA?QXX=r}LPI)ve{DWDLrLQKOMKuy?CkZZw7611r)q_QBjC=3#I;b2=Lz?va$2iXe= zF6aPnBv?rlL<#)Z-DptMf2l2s0gI#C`#uZo%9pW4u^_9VEu%QFN%3GE@3O!qyw3s| zkMIsG@g#s1p&R?xn-AojM39-#LEj{>naN<~AP;=0ElL4#5d9C(@C0Nb9e8XPa`+I; zA7CNqF%*cx5YKQg$PXYlq=MW44pPv1GSKbPX^;?22RkSO<OXo|exC($BBVnA9q5H{ zpd-BCu!fB5!UpIv!A4{u8G%{hWP@c<i*BR}CkG@Asc=ARkuviNN=s5Qi-@Rh+Q8LK zF3##E5A3*nkoi#mAsh#*ZVEuMSgM;sP@+L~Gq&oc2o$#9>ITF@u5OCK21Bcx60l23 zK|;_ocVXTvDg#;cJ`3blMB0K?HsxR)KVyq3K&sksRW_ASS#V{8IsmH&vj|&NBMQsT zRUmIbtD0)CTWi2JzsrI;599%a^I%m?El3gGss?UD9moc7A_R3!VU8-Qhor;?u$_${ z<G?Y6TquIv15SBJ6-^UZeKTA=dicRAnijAM%)AMARx3yWtfFZHo7xT%%6Jz6I`=Rj zu_Oc3AqBPEQ!<NElS}f8Diz8zK-)n<V$eQDY6_%xky)$&>EY-Vb%3JeeHO@}h;V}y z8J%D&Fr6g?i;pgNXi?^hZb<O<fIZd=w)I^W*lEZi4DvTPgkjZAA6R`qL_N6Lf%pTt z+L-{B#qa~X+L;LQ0<_wh1U7FnSO=)&d!Gfe0TC{+YG(>q1%{d4BCv3o3Q_>8cBX+% zoemO0t#&}xAq<CAJ2SuvF%1V-J2OG91t(8<wKEG6cC*2@%mHhLxE*9KB)Fi}&RnpP zc@QPw;u^Gycs?ive5oy302W8L_k9-Fl`mt97J{sXRy&KpCM^c*c$Wn>;e8g!c!YOg zX=n*p5xTK|y+uGp{!);c&}wHH*v#c%<sc7ysV!Oo;t*5q6qghsS38J85l^)P@&m{X zD?x4m2Pvr90fopaNQkZmJ7^8a4dBfFJ`3bTNKHdzwX+s%#5yD+5G6aTpR*n;i&}&u zRXZC%(vWIL6SP4&u_O_+!-a4srwUx_Y{XgXYy!J&Gst+T_YiJ_)jC^1vRG=Jt)Mi6 z>SS!S&Nficf@>WR3%S<W4mKEC>+Ar#WG6@nx;h6mLQ|YtQnU+X&-*NpQxPc(R_W{p zYxo&kv<IZB3Rk7G7b**`bU@d7A@y*e_F$`XWMO%EAIKBXI%hxFr3b(kzsrKU4&;1< z>tJ=xL69Q6bq?HyLm(T#DG;=r2<oPy!;n;X1Z?F|kZIs(LM{+N&H?9eq$=kaSp9Lh zdi2nPRXHcXDlqdU+*Kz*3Sd>vDX^)hK|&etB5D~J7~JxU6d(s%gX<LV4a%TBSgD}v zyg+phd?Yk4F&8va1X^MSKLdmd>PzSW>lumQfu|(Us1jteNpePFQDSmQYEfntWYh}O zR9DDP18dYPIs=N-_gNs%B7z=P<eUXN6Vq!FuqZtT5AcEa$$3aLUjPU2MX<}?Wr4ki z9Mhoi2gfw5>bnG1e;J}4T=hZ10=eqD0+z)H2YA(Y6%-86s_z=uyz5{cpwjn!7RUxf z*utv58(<X}W_ruO!uBRe0j%n~1vd3INC>s+16hYK99H$+0V~8b99;F?1-TZSOW;-C zJxJKy2ix)htQq2VkiC%Lf>wPG!Ac%Ml)$UL$Dma7rMBn^SRCEn_gP?9zKkt;3bGnn z^*sZd^c<|?T^87c_gNt05#E8N!xvyh=*Ir_mH|~eFF|HPtG-uYGhc(1gFNu1w&)Fr zLq^qyD4Fq8eIP%8-0&9U25^wVs=jxS5Pc7J&<Btkz=h8HERYjPs`@^HjrfFQ1fqI@ zRehhqvZ(b4Qq}hbBn_$hKs~M`P{jutrYBtYEdkekUvbub-@uOh4l*C=KZN68b>9z= zES9?OCn(XNx*1#D_X`xZ;JOdQLazIMgAIn(eSg3%`3n+)_PAi)Ecyqs=zSK*t%$S* ztNi|hb^MGiVo+jW$XJ4_@?(U`f-66?9v93aY_*>XEITtPF)+Y(PB1Hh<~&)Hz;m8i zQ0IX>fN&nH_G1Mp!dv^nZD0f008WIU9v93}MeIu8$v_UUotz-!z%hkfD1zJr&gDqe z9~W3XH(Wh>_`#|_9<U0`ya{&}FGvBb`r`we$`2CCco*RVx`8<ZI%fo$!bw!fNX$u7 zNJ*?zfcCT!b0D)ZhDHh*`K3k03Z(^UMfrIp;OU!^e1)V`E~v`X6ulw=P%ORA0=XR# zl(14n5Ns=^OX2Ivgx~>4b%zN<B0&V~eNnJO-erMZiyRN2&;iE-ta1_qs~3l;2UkuI zuOU}X5@1;jZ^0`kNszCgm6H_MJZZ2FQ2F>i3uFT#s9=?o3|Iw*ncm8<)GP~90IQtj zz^2NBgitFdkaY;dVU?2tSRtn2;L1r6<XUhdhF4BXkg!t*+oA&23~@WiUPy33D<@U3 z5;cetc;%!HN)%sei!{LE==Q$P0=x2MY>_6&YG~!81vW_=tm9o4*o604Amb6<fh8*) zup)G0|9UHfDh6GUnb68f4{WABSUJc8UuugCKpZkECq&VSr*Z=M0ptclkQ=~33agxq zAR%fDc903k4d5c-eHO@xBvnqPU?a?sj6jtCu*%6CEQ?yuBUMfoAZbYDqz>wrfhUj& z*Gzrjn#ocL*VL00*k#rr!=au-xC~Y^*??rR)J(RZ6ocwuY&DY|C}6=g6NrUeGueX; zhSp3DV3#<8grKYNQ$T(!ast`%J`3bfM5=;SOU_{BKVyqrK&tw1RZFf=S#Y%kI#mU^ zPX@9DTb-l@%f)UW4?ufl?qFAXfUSL(1$7(9=?J&M>LgE)BD{4H+y*a@4dAo~TJ{L> zw>Kp9`G76-1(^koAmoA&<QQ<yMyinf!0P?s>d`|ERv`s|Rbb{vxSIk&3Sbpd5ZKgU zkWj|E2vEfy0%{q77cgYzLFyd6q7YCpzs~|W0TCRq0w5Hu8Ph^_STKjd0|A%$;gBGS z06QiUY~H&pu%*bM0&*)jRAALZ6j*&UL_N5AfVdF3dWZqbVz>@oJ;Z_>2dy6Bz~;q+ zb%08!_gNqt5I%-g4+&ru7-o8F!hD<vQUI$SlE9`WgM?742at6L!(r7!3Roeg;o#~a z735lQdV*IEX^^l>2iuYX)(mkw$X-ZrL92&Mu#zl@5_t8H4T{?@wM98#addm%XMtV$ zGPWoeWHq#U$OD^{57zN63v9ysERgXC@4!+=0ay{bv46caK}B;R$V_PUPy{x!7_1!R zfiJa1B_IwN)dQmZ!c#qf`~Y%8DaZ}rAca*AWsndp2Ro<&<OXmCeV+w#B1zRlCD@26 zBqI=oFsyp02Fs$Bwn)`O4M-YNJ%EPo5|fj`0~mxWh?(FDq84WbQ3rNgJ;->d_YiJ_ zRS*pzSu7PqBPh+FIvHC9(F6)wa0LNkAy*L1V1uC*L<`s@tso)jupQKwMQtE^-e-ZF zibz?oDxw{%;b&}72T0XSTvbFTR2E!CpbgtW?ZH+_7{Ky!7swOPN}?O=(jKtI@3Nq- z134ezI#?yq3sQu)l7QRL2eJX20zt!eP&XCzLsH=cu$2=*rh%ggxj+Ot2b{x^s)<Qp z^^@W1(L)bbO-uo+z|5C$S4{;efK?OIz@|<I31z&C0G-bVTEGTg`UYO^1z(wvn4Dai zTbh#y+CB(c-IbhJTmoGpr&lxs6cz8YKu$yi7_6X}2{s(lLAtPrm<10ea_yfD3DP-W z&&&ne_bv<UDCAHD`4t?huxe%=Sp9s6dT=!Z@d0u*vj8lM;d*#Avk>HXXf?A4Y~Et9 z4p2$=J_}?6B1B--%o4B)3^Tp;VIi^<qySdUECZXm93+HV&48>!7!IpuR)7^^8V;^z zR)Sm$PLc3xW)&ptR)cL>1J(?2JIG#0a6zk?wO}RdAWGoX%z9AVf2l3n02W8L_k9-F zl`mt9HiE2%Rx_KxCT#}mc$Wn>;e8g!c!YOgsb>pV5xTK|z4bvw{8o^e&}wEI*v#!< z<sc7ysV&+8;*e3zAWA_z)eOiFAUEs;xd9xcuxe%(Bt&<E9kd7J25<&{p9OLvN!83= zuo3%^j6f9Suxe&MSQfR+Myh5GfTU5Y8BjZra5WPOu4WG6tY!{@-F6scJk)y#x528J zBOqBU)yz>)nn86kwrb`WC}_de42XqX%^U|C46SBPfL(GDB!pDWWag$8odVhOJ`3bj zM9P9yGpE5Ce#RD^0jUbbRn44*%HpbKGILY0RWoL=ynGJi31~HQ9_-Q!V2j^nL0t!O zKEiddYUUzH5#DMBZo?&z4d4_At7brczYIx*SHM<Y1(^npCgcJU<Q#AgN2+G7fz@A! zt49w#ST%D4tO7G%!d-O}qySdU+ya|=8zhwRF2WExJXTziSOi+|3|U(ZzTpQnFNCeC zDb_2x1B!_ESs(`@f(uqm+yxtr=^SHNG~9y+5_z`YhXm&Xuty$(ZF`pmb`o-kg8T^% zQCJo82(11wL_N5Qfw&*Jig^N-#c(^kig^lhI<$&;1~%_GSO=(-d!Gfe0TCXsD&_@P z1%{d4rm*mM2~q&7VqSqweGL*qtztmdAq<CAF>k;MF%1V-F>gVx1*b-M74r@fcJINq zd;n{PxE*9KB)Fhe%tx@2PY@;WD&{jN=0TVKfyL47eV+w(<;&QjuOO?TRm?ZAN#DUb z-erMJc%KC_9^oBW+W7%igl_C#Z&Oh5{u5*-w2Ju!HuE=FImiQFYK#7WIAl~Yh!PM_ z6$A1E$PIr%ZU6@<tcv*u3DN&x2Qesv$J@cF3*<zSsu)IP(2zY7k`ahv99G3JgJn_6 zYoscM1tblrVn7S66O)s36Dz<24TNhM18^<Fs*G#2iw*2Nc90F=;tShCYYvbsmRg2W znSlYcBp2y!Pi(aemofuG7PyuHv5;#SZm_}7T80Pg5?+u{2IO`&ghz|`Kvuoa0=X8E zzF-v%KUmMt*dhUtDg#^<jUZGOT+yH{v_@Ekt*)_wWojXiSD<x`Fxb5!V7uRCK^+M4 z1j2!^x<(YF2ya~jw?PbK12`#y7Fr{mRV1zqo{f<J+bRh%5FB5~g(JvC;M|T>-AIAe zOT*Qphas%GkpZi~%%gCJ$$}KXsv9}5sq!G9jCT=s(CQ{Pu_80KG#AvRNd<Rbz-bgT zJ%g*(fp>5eKymXv3*=fv@WILtMX)`XZnK0%ixNE0sNfW3NI<KAy{HPd`dt>-eaK-A z3IT9f!zv;*uzGcfdT>zz@eFcBqyd)2@Cdvj(ggVfS`lf1&C>?!0F{OBvp_Z=0tZ$R z>3~&WnCWc|3mjdL0$4?)2R2n7B!pTKfviIq4y%X^zzQ)92UkRfAlHJED!d{xf`pwh z*cKD8W{BHC_CkUSS`nFom6$=4z$+qiP%;4BzXujaxA%P(*p)A1i!4D_Ln|UHuu0Zn z9q+QhCcMuA8ISM|EFsx|6`>pZ*V`IY3D|<ngjPg$U^DH(%0V9ZQd{Hz;*e1hAqq)6 z6%oh}AU8OI+yD+zSViOn2~lUTgIqvv0B8I6Ss*8pR1vv?jc`LU0<$7=2g~BDh&({j zkcvo~fq?<EaRRb4op3!=46cVfan?g#VApwrEP#3t;W}7v#|I>fr5^GHr5aR6W2=Y! zK!FRchd?akddMGaFti>D0J|g*B$NR;yan#hq9Bk>@3TOTMWilRH53fi@-wz51f;4M zS2Yw0l?7KrA}EJ4=)rBmRtq`7a&#ETBhXqX9PC=qT?iT(@3Nro19<`AK3FXj334Ca zS_p1K6vzf}It1;Rg1f3H8j>1gz?Q~>%mYUja={345ICnJRYGxK_3?1^=phKJgc86i zF!LweU5OwCuu3QiY-%z{DC1oO_*w(_lC|PQ(D~({eLm1-ZhA#2pm2Ym1#$}_Y+xlr zD%ccEo9$s?o(2yQf)=Gi0x1LRyiBmc@3O$QBZm{n_26)VRUlbl_1O^h;0grdROAXI z2P})>On3#73vwm20?7lLmk-tfD#PAqfowo{9ae!9fK_0a>Fo&fdLc*wtO6+ln_3JK zLajhR)*%dsRUjo`g_wqeE09u<Yr&}uUV)TB!mb=_O9fan#O)w^A;AT$Kq|pXsvt_> z6-YHGlE2gz)qus(?R}pGcIC_1qFRvE&<dmuY*IZ~$Ga@B3GcH&#v{A~OC}9qMd-%< z^>zdm-i;tLp%q9I*vw|Ia*zkU)E2dXIAl~Hh|&#D1p@K|$PKL^H-Li_R)MrZLbM(1 zpbn55z*+Wv7RZStRUn;UBf5}`Korrio=i7b7PTx!>dEwgq#+du=wi0wlA_eaTq5@G z<bi9CUYxZ@AJ}RAAk(3~LpTjqdrSbyVyQhQf|3lXi?P)nlRzO0u0233<l190*kEYw zF$L_BsURWfkuVTX7EJ?L^F9mYQbf9fRUOm8>VL)-%>b#&!&P<6gvx@e4$v`4NR##u zYp~TD9<Yo&3*-f8y)hf?&N*Ov-(^7^2XZ{Zaj<%0E=UpHdIN65Jdh3G<Oe#n2I8cm z`H&R20BqwzkYV6BLM{wJt^wz6q)KBESp8zSdi1b^RT@jcDlqdT+)+zG3SgDSGO(%3 zK|&etz&8hbrljVTWTs_8@1BRvy?_=>7grXSq~<D=LeJQTZ5ajcBn8zgdPOThG4ehO z<W@w$!AgsjU|TR<<_e3DRq)^fU5reTLsmlqc@5ZmYrz)3%L2O&Ih;Yh2ZuAP(pd*q zzaF9<T<Ji(f?Vlr0Lx-{177KD1o;A5>1+a<w;8MhRPMdc0@;8F8d#;X1*`(YOmBBs z&};=MfK@u%z@}~o387XxAnOo@!z!H}V1<~5gDah#AlHJED7@0y1qr*|U|aTpHACDE zvKJCu&`M`7Sjj$!5_qMvACw5b)D|58i=*57J`3#1m$5|$K~_U6okL)g4uf^P%L1G5 zJ_}?#!aJ~JbOfvj-Pph0?w|tyD9B7`rE?5y=5erckO#ih7M%cb$f$G>g(99x2jmBk z8%~1U01i@ErE>}rqNl+QIs<Y8ILp7!0y&YSO6M%th;v9rAWC*vrE?xEi&}&uRXP_y z(uhh2x&@qYmt_OE(z%GU(zyh7+GUXGP~Rb(2CH<gfMl^$I#)qS2GzybDxGVfkOfyd zAQp0^a~*6jw9>f&cF9eU5VX>Pc(Ujg$eQ<AAeSQ26|B;^4Oag%w&)H>)dpOZ&RwW1 zwn_(L4Yo=LUOL<Zc>!AK+y}e!0odMmSy0D;9FK4utkQW1QiQkCf!pv1WCJ+)fhrw{ zlZqZgQs5J?jZZ;_f#V3dFa)^<oV$@Koo8V6&*AFP!wy#Iya21f%#(0Oy#y(MRXVT0 zroILVWxR_3jo}8T=A<T<KrZUdO$DDxkeR2Dnpd2fn*=)QCcg+Wf>u<Tr&sg_6a(+G zKyE_>6s&Z33pN$gCEl=-^c_5SNVfPrBoIG<o&OPR(Yq|LYmmbc<U4RU!YY+dVD+CN z>cN!?#OcVD$``OKhO^<}_Z8%7Xr=NEY~FXU4p6!FJ_}?6A}C;$$`7y#3^TobVL|Z| zqySc_`~sW$8zh8User6Q7!Ipc{(u!?8V;^h{(@W!PJ-}C<sT&M{)25{P(hkOP-b9& z1Q)bYVN?On5I~f`D-~uH$nnZ7U~zPN-)Dhc`7*YMRfT~8md@C~Cb5HcyvqWc@IDJ< zJi<G$WWxbggl_C#Z(mS>&IvLTTB&e>&Ey6v2L=9@+9Dnhhm1-EQRv~RR6u?Jxq%nt z25^wVDiuBz@CZ0R*g*myH-NMB`z(+XNvc!?!A1xn8G$IdVU>z7SQfR2MygaqK+=#( z1+@6MD7830hlq~Mc5s~{s)B1eMhxsSaggCq&mmj}t5YOEvRLXANl=PGbuhL%MG6$K z;5r4wLatM!!3IO?6dABfWI;mE#m8Vj7RiBZd7lMxC?ZwCsuX#!@}IFq3LsV6aaAdb zP+4%5g0}b=Yzwv;B@~v6l|UYV)+owgSE_)meU}Aw8_4Mhx4~)@RgfaQH45AYHINP9 zv<F&z40chGIwbXJfGyMnnFWp@<bn|77;w%;s!+7R>b2qO(L)Yaq3D2BVCF}-n{+`6 zU>RKxY^pv;DC1p383O}DFyz!bXeTBmwK%f~w2iYUGchl{G$*l0p`@rZFBv{62H*Mu z-a4wol>|9aEIF~Ls1nrk$uBKYNX)BL$OmmGRVW76R;eip1^LA#x&=k~po;@D^V0Q- z3_vmYJ`3baM2N%67(=l8F#Qw=i%BDRI1iu~j3E(g0uEABu#?|qf&GOXx1bOQ$1SXq zGXtwPho}cva*#kkuH-DhvKRpXujDL2{)bj_R$%k2!8$<Y?E5T`4TwO6RdP096&PlE zhrj~W7Nh`H$=QKTwFe2IR&pTg5Qf7lIR~&pOvAyIoFmA!;9LQ(<eVU3=M1*R1*{q3 zc96Z0;DT0iu3#l@5GC+R&K;C|zSI_ZfW^`6eV+w(<;&P2PmtBno|6~YByX^ecUfQ) z-e-Y~M|cO80DZuU(2f1;9RjLgd_iVHD>*-~nf_qqAP;=0EeZf}$f)EHr7)gK4&(=r z8v;RY00$|ok_&=_XfW78As{z^i<$RXASaSk$%TTA2tzUgQI)_dxp1&7YMp^p$wh#q zA(b3x`zL7KP*GxXB@y-95pX>hiL;)I0y{1mWIoh?2*<(dxfqZvmU=E0lxR@hjIExF z1BETPo&&Lv>$!Na!O(gx0ql}QkPvkHC(N5gNg#{fXMx;`NL#R~E*Y%jXKYalNYxQs zRb47n7F^YVc5xsL*}*KrR@=qEvU3{98_?P=9qiT&u+8tXpw0t%0O34XZI=mBgtxYX z+mHpa0h|ay+dpBBD$0hW#2m1lxgg`fF@;<xg4_en<wzA?9$0-oTs?aD!7980unNq) z33pZ@NCB+ED*~HZ3=+zC7ZHk4;X!(Rp!uF8(8crxsnEMrKu7Yx&NRr(0}b49!A9{? z6x@S6ofMMuQ&Lml>kvvn(e*wH<OxKW!itkpu=SWuj)28g89XFu=fZMGv{Zltq!R3+ zcUfR(BgYIVyudL7tFEfR>Z>8@!POPSkI2<k4OkY#fAH$67UVr>byWv8uO6%eRARo* z0@;8FGgx)i09Juvrgt<f%o;%oVAWL<*wki_5NdS=vJPQ5th#CeE5tM$TwS$-TnkRt z@an1!5_auiTROm+A#MlR3kfc0b=3)0(gjfhudcd5spCs+Q4d%g-QM?EU{}73E$RhX z4Xv*Fz$W#Bb-c?0oA5phWIVz<u=F(ntO(uMzuwWHs$wF@OlWmA32f$MuyT+GzSI^? z0ddHvt`LPOp6UwZ2ap@4g4_TOQdo604HBZ$!48@Mas#-Kc%KDwB1zTNOt2BNkc>do z2(apEHdq$5=truq=76Lj)fH%VDKRCbAd#5U;r4?otGPHUt9f9j%?Ftd^&P@#u*zxy zNES<FwGfnKP+g3zvRVWRS#V_qVj)*ni@^p%E2|}7mn;PdK?nLEo-A4hvgUmj$fbyM z1*@u-gVq0xEm{FmwI5eiwGt`|uBy;xmmt<)tEiG-8F>}R3($&cHQ1eN!1lh&f;tZ5 zc!c9%71dghBD@t9+=g`^8^FmAG|&feQqg)y3fus;aU;kua2z2Qh9K8~b2m~owF#_# zGh97-*uko)EnpRxc@plZtsn)kYHAzU)a@XljCT=w3=9lDnZ+fbYAG=#B@?tHAu$JW zCN=ED9e8I<uV@D-4&G;hT!#oMSoyFMY%Zo-;$cy+3m!mZSiKt(kbA&h*bBDmT^86q z$YBZcAvi2y70W)b`uz~~;EDy}c;t%Z09Y2o;qZ#(AjsX&isca4yu)A}pt9|K7RUxf zV8AMtBVZL6W_l;W0^=x10jy#<1~&CLNC>rJ0a=GI99FTM04u~a99*%S1i2QR4B-{a zDM;9z2HSE5tQq2VkiC%Lf>tbN!Aj0Sl)x*N^Pp(|Qd@KZERJsP`z)|4U&a<)1X&HO zST2E0x(wFwE(>hJ`z(<02=BlW&K0mCbYuT|CxQy~s~|I>70WfSnb*O}K_2*0TXX}& zA){hJ6nuCp7LXr6Znz0@12{-w70WG1h~5S}=nlvY;B5Uq3*<zSDwexoBkmy?fhfIU z70Z3FENU^0RIxk&Nkb|Y&|qIqYFR2VgMA0U^~yt>^~xi#%N~Oahk6d-GFZLx1SE^4 zUU>>iF{lp4R<Aq*1uVE;0kM$lmFHlCq4mlOuuEQogrI|cU_TbU0@?CD3*=Bls)AK3 zuffWH#umK+sXBnGT6qhV1y?I*gMDCIu+=IVuw48O<N;`{@*eEU4`6HGWkKBrayr6o zuv+CKND<yz1#ZJ9kPYCp2O8`HyQt_hB=vm(Tlf`Z7C3^C3qp`%z&RVKQuzi}{~fL# zJ>+1O$`7y#%=`#<(@&5BSf%m{Z0c{25Okdz>R=yi*)`bddPRRg;r%`f<Q7D@z)FI@ zU{f${PKAZ{KX_<>*16%e=szTo7*s*i7mTXl8ICNl?a1K-ay>YlU=;=vSUodDJ-EVv zI2F0VU;)cwI1^rBu&OdJz^))<1DnSV)&VNB-e-YqKzJQiVQ_#|V3_Hh4)Z!ENCB+E z-~yY<4H81FFhJHJ42M-1JYa>GhJz~%UXW|SDGXj=@To%PGQhS7fHgzh4zd>#T+j+b z5UfN9q6A)H2&+P7heW{Q==Q$P0=x2MY>_C)YG{Qa1~y3?tm9o4*o604Amb6<fh7|O zup)G0|9Yo`3TsJ_na~PD3T&n{SUJc8UuuhFKpZkE3`B{Br@{dF0ptc*kQ=~33ac>W zAR#Ibc8~(d4d5*MJ`3bTk}3>Eun|f~Mj(o1ScRbsmPIXpktz%okTj&i0QE#tD+<a| ziRp<f1=kp=s<@_y)WA+t2bm7_9l~j_8bbpli>1cU1SJ_%7h|h2v_K&Xt}#F?<QhX8 zY%sLO&;h$d7bFDji9kGAqzAI*eHO^2h;#+3GW5aff5sLWfK)BTRb?1LWx-VjT2BOG z4YoQX50;UQKwf~>8OC6Dnt<(nmj!hk$nglr!RicCkRrTw2HXZSkPYDE2kMDHoK$2E zNr4t%8!bVGf#V3dFa)^<oV$@K4J)vEYq)y!u!B_^HeeN)c@pj@TaW@+rC|p))gB}S zz55Sz?m$^;QE_H|9;ibC+L8lW!&aPHqF3Yq3h?(?Ag3V01y&e1f(^m6I2#t;PVmqG z-7$#I9%o1pxquz#3O4s$7T9v+Py)Ff97?b%!wsz79ikpwWk6htTxEEGWiea{uQEJA zj)e9xyujvpgLQyPt@l|V8xTH+RT(~D6&PlE=fZsM3sL~9GW@`%`h$c}s|=8J2*Y7j zMgUkLrs3c!BM{_TZ~}u@89|V+3kKT~0@e(1JIG#0a6zk#P_U9Ph!S{}5e|yuFSSJx zU~zPN-)Dhc`7*XB5@a>B%7_A+6b;t#E(>hJ`z(<02=BmBNeoyKy0L$~b3w&*EXYh~ zl@SLvGajrQ<bf}>MF}7d8C3?NNW)WQfcyY*Ln6ox;2?!n8A*^3O$IwC1>^>BhJBv} zaw17pMk?5dG$bPs<ua_wNC(TJ7QjeVMg~Y4Qe}YVTELAt(Aa?n(u4tmiF}ui7`W2N z#93)%fgP6(G9T(cgyUe9Mh-|8OQn$uN;If$##U+Mfx;GCX@FSBl}0|;U}&XL0Cq_s zNC-OD0`q235y+zVSs=F}(iW`RC<g2J8Cz5WQYD6~+9-v}f~yU*xfYm3*eZ?^SavQ0 zc>`K;l!M(`0k-*F7Swql4<MWet2in_ittt(a2u*XHh>c$Xs!k3sG@2}N~{6fSqm}_ z98<`JBFH_ZNr_;TbqR8}XB}95JzPC{_`#}<2Cxduya{(!BS-<P>SzL++6)rPco!kZ zfWEi@bX5*`bphD<#d<|8pm2Ym1#%4{aA4&^E7%-Ny9;4~-Ubg6BCKkM1XKsuiJf4h z-(`XAM-D5H4<G^c01{ALVD;S)_23Ew;#lMgqz5dE;ZS%5(hG7Yv;ye^o7WH40V>1Z zXMt=$cpg@POaQCEFw?sj=J|;r1+WTa64=zqAR*KW1Y{k;a99O01*{O$aBu}O735lQ zLW5Tz(;#6t9c;@Cux5zcLH0s|3tEB91S^>ZQ39_(W`m;nOKs5{usFKC@3X+Jd>LCb z7i2ZG0+|OkX+BuTyDYE?@3TP0BfJAkC=0-f(2f1;T?{I`7lO=$Rv?SOW-bOR2YKL2 zZP5}Chl~mYQM}=)KtO%~xnU{D4d5V!RUpeCA-WvwpcNoDfV1uUERYjPsz6qPjaY?b z1fq<FRUoUuvZ#eIQU$UGBn_!RK$|nu!MT&T8YB%|gRI3_gRBF)Zav5Xs0R_QgVi7# zK(bhBkd2^JgX(B(HOMAV;DT!q5DU2m*$g%qT7zr>yJRa!2)a2F?$4raAe-K2fgFoS zU9c)-J6Oxl*rFXERcW}YkeyIja20~KITLOZwmPH=mZNupJOZslc7t8J2W<7bEU5cH zUO>1HR)_2bDZ*Qaz-`zEvH_e9L7Ow-t}5CONsR}<mL3F|2aYV{f)V5(a85_+e;fj< zKMYro9)hq+<Oo;=X8we`>nKP8tP(i}HuX422znq5>R1w5B?3A#Kp{P`w757kF%Nth zX0cw;2~cFb&jL9R5n!<5;w0E;Oy`utBH|Q0m_P^8kZ${FNN}D3d*m$Gws%=zCn1L@ z$e-X4h4od=fz_Xfs0UXy5ceZjH5b6L7;cAGH5WlnhgLP0z~)^B>j0H@@3TNQAi@Jy z)m#Cqz%bLh5*8j;K?-11%{8#8*Fi$4RSn2GgyFEN<_1_Hrs3eK<|fFs;PeQuYHmTo z?l#z#J7CQaw}b431Q)cbxeHcu526HK)!YZg{FmCI2Vik@d*5e)UHLM$=po2zXjStF zY|>+}j(1sL6W(Wmj7N9}mUf<i6`>pZ*Siu_%s&O039V|Lfz5mlRu1yOm)fEiAPyN- z4Wb;xQ`La{0CK}ikQ=~33ae^fK|=I3*g<bVZUATQ_gNq(l2p~a1sm}W$p}PY4y$V3 zgJn@mZKSH^14tTD)qwgc@O(?SuaXO{X+GktX+D7+_Zeh9)PD%a!D^Z>AXzLm%~w#O zL3J~>n&ulQY{4}Rh=p9!d<Pp0t!aLMUGfto1nsN9yjk=MWYPO9kXsRH3s%wm2J844 zTl5E{Di>Ep^A{=$u4vHuDlm(%)iaH-?EDYp4QM^{AM92JHOLS=)OjEeAe;xQXBa_> z@YXYM8<^A>7_z{L5Y$(JIjV?R4Lo$sq6QlFX9XDtjw$3q5#%0lE=Q_n*ud)9;p)-D z4_3`^fK_1TO}Mi-K?-2i3>Vl`ZjcakA#_MaW-(%l9ds2=3h0jTWbnb7pc`<CGxAGw zQWWy?6>{?P(o>5RpzFi*xKQf|_!{cUf>h9enLBdr1g@_@LumP>B?YA=dPO{H;0wk< zzC;8%ti0g`yARV(wXn$Kg9kNeA@l%wfgcjF0^lGO1Uva%7T90NaSIA@aNNQwJRz`p zVTgKgg$D@)<O)v&EQ=8U@Cr{9<bP;|Ck8f89IOLW=DyDY*?<UCScNA6R)JxrcLOX? zB|!>c6`mB>RB4b9YJ~@~4q-T~!jl0j#55dS;mLwr3(gqu3QrCacJg3b6u_DxZU@;5 z2`*@brwCS}1W^L7@RUKx=Syvo3RoQ7-uGExSH6rbQUzHJt?<;qCaHsUyvqWc@IDJ< zJi<G$1gHU4gl_C#?*>q1qX{w-TH$Gd&C~`f2YKL2ZIKR$Lq>&%D30+|cpyK3+@K3` z12{-w6`md>MD@WAG61;&T+F=B0y&YS3eOO1gb|Vvh&lyU;TeNvQ7aFm3eN;24XN<d z7#JARi!xJ)SOmQTT-lkb;hN1c13SzdWH!`q2#3KcI}4C3mdef&lweTZi><P=0);EM zvIDV@D?4kj!O+Ui2J8}BkPtL?fV@~_2eRaS7Ra55GzF{Z?7^yk#uhn%RPDf3(K$k8 z!4(}p>Tx$9OR!aP9k49y1adyKl5+;T(FJVlyDX^FKn_PZ4OYpyf)wGc<lr{AfouRL zJWyT+IjG1TlJY#j_IZMg0>=(=Aqa8{I9DT8a9&{b-f;Ek;RdVVe84I&^CH|yz90p# z3eFE~sy|35<6T5F#$X(z{sH%xpf|ZCC+2~wwA4)S)}2HJlzNLRzepib!6&gKv!pa7 zRo^E+FCEMR8=zMd0E(>lSs<?<LKRks1cDub>F^d<Yz4u?lGg4FhD1>aIB-J2?s}I6 zc06({fx-?POR%ac46HsJq8?mTL41l_RYibhF?<QHsv<$2gjQ8iVDqBEIzXl6`z(+R zh>(L-RWV={7-o96!$K|=qySb`#eq$Y2MIwlBk17zjQ3d}>kx*+s;UIALQKQKRaGL$ zweaK(z9c&d5_ZX8TT;N9A#MlR3kfc0Rh0@>k_J%%ud32PY2-_7Q3hBX-Cn3GU&a<? zf~<yCRasz@vcWpuWr0n2p9L}=;T>2i%K<AwH}<c0JE)q-1(^x0s`9{Q=7W`kJn*Hq zr~t$vqpCs_rg*9<kRL#9C<M6y9Hg+Sst6LI#b5`OfZPBsFy3c@oJdktRSGtu49N&Y zjR32v%E7XzML$wiRRNMlR8@&Zsfk2XRU5%oRVB`<stW9|YLMAbzabn3tEy^1vRJCB zT2O*PbuYH6sty#c;HnD5LawUn!3IOCss^x28bLzP+yU}pQ4`3L_gNr!BGMGBs%i$S z{ux`;0#daRS5?&tmBm(7fh@sRRrSHLa2v?^(5k8(?8XkTt?#m+P6Ig{;WSuP)d^CB zx2l5M&;_yqobW(Z705wF-H?>m1GcXhWE41dkPAVOTfn&*sjBJ&tM7-aM-MkxRW$*u z0y8hdoiq`o09I8^0-HJ+B$V+k!W^Tjf_12hOOtd#t_O9hKr0ZSdvsDOO2GGxrsx$- z0Y$|7ERZu1AqFcTrh+ZNbW}GiCZ@r|i4r$VhXm~mu%~8%?R=L7b{KN#g8U2)U04+} z3#@)NL_N5Qf%pQsikSnJ#qa^VikS=Y0JMsk2R3g$SO=(-d!Gfe0TC*&DrNy#1%{d4 zy|7SO2vPv6Viti-T?`U}W+G@61F{ZbIIN0U0#=A=IJk;g3UVzxS%RyWWstC24z^_l zSTn@!AbTOf1+8LMf|aa-D1lcot3mPqrM74dSRCEn_gP?9zKkte3$hwo#jFFHv>vSE zT^87c_gNt05#E8NpbcO}=*Ir_?gbU^8$o75tC&q-GdF{kgFNu1wrC58Lq-*YC<O6T zF(5yH+^`ko25^wVs+et%5Zw-T&<>Crz#0907RZStRWUokM(jc|0#TB~s+iqiS=1sM zsfyVHl7>_<pw(>!rA4V}$wX8#hM^38B}IF2Rx<m*PTLPM9qK!T(_od%0gx<~O6DLa z$)LIzTP1S{6tdt-2E;<HWDbK3hE_61z%Dro5`wO7gLty&7|5FUSs<4p(iN<lISy9; zGq&giNR=V3YUU(V7F^Ast!{%@gRP>O0?Wv!Kwf}WG^fGtJOj4(T^7`FAjcyd2dik# zf)wGcXy7)S1K9vhexTKD5GNI#hory@U>h%j3<Jjza$yK^4LElrRW+Bu>Mz69qlX== zs<{GIfte@aj=Bm`0IO=Qfla**5`x~U6I`BIlAHk^mP<)Z%gh6BwgJ^JAm@XGA?NAj z=BK18<QFOA<(KFc-2g?z`z(+X5#a?ZByNHY$8^v{SUlW<hZ5*k9dhiy4GGdaV9(qI z+xIRD>?q_=1^E>ms<0~N9$5W-h<b1p1MvZJ74rZri{W~B74s0}cxV;#2yEVCuntfu z_dW|`10qCVRm>Bx3Jf#7C&NPIDM$gVig^Y$^*KlgwTb~*hcFyg#k>G3#55dS#k>T$ z7MvhKEgx_d^9mAnufevw0c(c19b_*gxS&<cTd<OM5GCL$CNr<3=shUzztk3e0E?sB z`#uZo%9pW4A3;__tC&w<lRkrWyvqWc@IDJ<Ji<G$)bj<b2;JDf-jhMa`&W>e&?@E| z*v#)><sc7ysV({e;t*5CWagEGau%hgrR3)(X69ufia<P749E{4H~a*-0UV^DDh3oH zzaSy{8|<JzAUA+B`1>r76G^IK{(_D8hhzkz9EVjg|G~1T1vXL@!=TQ<paH333>X*~ zAfp^<nK`LB#I0yh1y?nU>bQp9nAAbD7tA1ApuR*n5mwc(fMl^$HLU7HU3<W$4!iaM z#6qrW*ue%vs~QflOE^J78Sf(aFg#nt1+wma7RbejbOx((xWW2<#uo8_RH@>sa(JP# z;3`KFbr23UY_U~6vtSvV59B3i)x!^Vw*c7wcUe$Jf;@w8B&_NY1S!H>^}uZq0@(mg zmRLeUSRFj`Bm%Zs6l5qk?vM*hkgLGCAE^ow1FIK@t49w@SQR7zR)Lvk;f|98DS%Z$ zQeac1K|&etB6OiwAf#pHCFUrA6KQ^$f}4+PM1W&Zh(b|nVoIe#W?n%l=uWqs)MC9N z8BmnG&jL9P5n{07Ll$f-rc<WFVnPlcPNdr`4+%yEum=>uHoeONI|n%=LH+}WB&^y| z0;^Yss0UX&5Vs>&J1SsV40pq;9aWICq1BEW*gSQx4p7PWJ_}?6A}nCljs{o-hMC?o zVPT;OQUI%Vw7{lngM?749guYh!(r8q4p<?k;oxdV7vx%SVuV*adXTWw2isx*)(mkw z$X-ZrL8~1@uo5GPk_c`F1_oHFC@v`~G6u!|m)ar|uspi`@3X+JeHmM13UUIp`Y{8W zXb#r#E(>hJ`z(+(2yemCj|Er}y0L$~XM&1;OOTn+>c<LfrZreO$Rl5Bi)=s~Le&qN ze~_yoMDd8H8UpzR<Q7|yTfjk#W@3>YB&6-Z4s-yy37pyAXMvndQg!4AHo^(X2t-*A ztB#z(vN)?F7mzfhIs$C~1$CB-iRkdm1J^>XIBOv{u*=**hC@Ava2c!?@&L(Vsf9d2 zDG1fU*g8C3pa2GUct9-VTF4u0Ftir(0lUN(Bm~_63ie}>AIO&XSs;fZQW>oB@dqpa z8Cw(pQZ)}(<r4^%1y??38$iLfV5@T$!g6;I$OF(iCm8I?5U{oHvY>7QIUV6PSe+9J zQiQk8f!h!UvH_e1K^s89E-DI#q`nBSg^?h$z!8L8K!O|t&hbc9O%zytG+aG;$ib?b z7_bV={0VncEJy*Ys)+-e8V?eJ9)9DJT9R6no0$ha?kzb#Hz_j@ez+UR3!ttK_?FRP z9R<*J-U^_l53sYX6+jpBaFyhP=82FFA4mX2)cY)uClCP&D^e1{)?+$(E-a#w;K2ww z{Dw9zOol{D3OGPg!7h521$H)a%z(lR95b-0D-EnZ9ikpwbwT`yTy<rDWik8*uevfp z-h)<MSzz<B!8$;t=KCy=4Tvy<Rb4q?6&PlEFMx$vE=U2a>dFI~nhz2}t-3(gAq<CA zT?Jr;n1+L^u0oJ&!D$*^brnIvt{7}f30O14?I3$0!3C|lO2JCXAW9-Y_fVx|CW8;J zD5@+f2PKj(wM7+RX>{w~XMr92GPbA^<N|2TRRuP%8m!}87TARMSs+^wzJevQ8n7aC zWB+<D0M!<?ATyygR~^{Qda!bkKfcr!HGnvTYA#goAXi+75*1Iy1@a2WDUBeffCCuS zz@jEdFgJsp*8*}8xa4@B1#&P+^;Rp`h&Ci65VZrW-f9QSqE-V)-KY+bG^E}FkJKd= zCFT-SaVdZ+u1=g4R~Oi6-5}GUzC$<-R&n)!WU*9Sy`Thy>SAmaS05;V!4(&Xg<Ns< zgAImOTob@9nFtbsjnsiXSu_b`&HF5nOA)CIR&z}TtN$5WGzFwe0awj66)Fp^xzI=I zz}8@^x>mq)_cV|fpjFp&usdgf?R}R8bsWg?2*<&yu9+Z3c&jeB4YNQtfKwrOqz>$) zqS=rXI0tOwT##YlI6^KVL9PL3d8E2)9$5W+xO()kgVkLNz$!3vDBMvCK?-1X*CMc~ zi$Ove?;<i87#N)Mb3kWbL${%VR$PED!Y&5aP$e0unMDf8`9(#k#Rd6!DWJ1R3qali zRd~fZT;NRUL8dV>734;P+@K3L32`KvBXMsG12xVA7vlQ$kOm8fK#ojV_*wWY4 z%OTOX0vvEF!LEFl1@;PZ41&TH9D}erZWUPlYKVGp9S89@aviq@EQ{f1cpbME<Yj0b zw+?LHdaw>q`T9N!WCJ1`VRhUFunG(_y_dtnaU)0ptd83RHgz*d2(^v_S%)wjR>y4t zE5tM$T*qw%xfY!G;dR_LNZ4%$+p+_!8RB-3y^!F7)^R(*N_Ih%px1G`K?&zeZP6aE zG`jWgv%rph8C$d$<N|0Nw-0RKez1;rSzr_1XMt=%_zITv4uBP*8~fLLIjCYe2r?5| z#~lKjc^Ir5<c}}4MMpp!^6NN6;ftq^19=7Hl%pW0fCCt<jynbk=Hp=JodCHAT*AE1 z0y&tZI_@Och*L;LASx1A9d{Zmi&|qK)p2J)(ug{)IJJnlvlfcLb=+B;b=*0y)6RoT zhx!iTG*}&X0VIp1j=Km-K&URpR>xfe1u(dd1F?|nxXWOJp>^C9uuHCjgrIdC#FItW zK-Rp^0=X2C%3yWeb+G!Mu|+pPs)}&caW|o|*y=clHQ4I7b+Fuh3*-f89d{e-&O2ax z-(^7^2XZ{Zaj-h>E=UpHIu35bJ&+CHR0yi$AWkZ}4@rR!z&1Vv83v9c<Ps9(8gQ0J zs^cDk)jx)-M-Mw#9rpyR0yBrg9rYBX09MC61DpCBBm~{-1YW_N3Ax@OIX^Ei72JFV zEpz~_8FzK|4R-?{ysZH7PO)Cm3s5w?&jL9R5n8YU<0aT=Oy{hI#lkCi7=iXWk#75I zNN~OZd*m(Hws%=zCn1L@$e-X4h1EIl!0O*a)Pw6Bi2IT2oDX1G47bDUoR1)<L+hMR zVDmnMb%4sd_gNqt5a9u<bH0F8V3_H>78V{~K?-1X&Nr~B-$6pCbq>fngyFC{=Lc9J zrs3c^=O@Uu;KT^8bACa>?l;($KVZ!ew}b431Q)c<`3qL^527SO9yAOON(sTKMP-@E z;Au&4%5X_6Nd$?d78U&mrHU`LMGP9CtsUrYdY=XM!OPepMh(Oz5KJ22sSU7>cUfQ) z-e-ZVMtBvLu2{f|(2f1;y%tpZvw|eEpfwR2*id$m5ICcKsV(9FaR}8!JZPRo?r$Lq zNj!BC$TuL@aDsdY4tR7Ui?}qv(*oRJC-Q(?1$N^5ERds-Ya_^J7Er{2rhtohA^P~h z`uLIbf$S_zf_Ys4EH4O`|595d1mY0#I(V%!D1H&~Nw)8W;l9UWYLN)UBcfo3ih<k) z4FHhSkpmzV!jWeN-9Q53lqRKuQC0wCpS(EO2nl2(6d4#YK7cYbtU8ti%c53pNY$|v zNE%Tc7nCODWD>JDWD&SJme#;EV<!W4nk>k4nD5|DgH^|JAXzNcvAhORGj<A~PzG1W zAQp0UtOzz3S{*BaU7`#Uf>y^6PZp_wta+aWaw#IO!K!0bu=<~|MQR{bi*QxP>QGs1 z)iJ~xY}N4=Siz?O@&dFv)&#p#3vBPZEU4o^jz>5SRvl}D6ydFo;Wp@iYyf9OP<0G( zQjsns1?quq)CU;`jw9sC1LPWTX^2!E8-Udt!quaP9jrPw0;|9*r{In<1}T75$0lG? zO+iA?nK_r#<jj=RV(0?-@YEy)#{f?SNExdDI}<6h7<|#6UXd9n3f^ad9ES)gSdnQC zHWt$<8(}eE0S_P0%p7SpTS9`-3hV)Euubo>z|KJqNs#}*AqlI7ZNTbnA?m@^FvRVk zT>F>_a!{NdSQf+G@M_o|<ZNg)>;N{;5v&7Jm4R$Pgaxb`b^@!wFw=W8EG(Qs3SiZ+ z3)oawkPvD$46+VkIIJ3W11rQd99#{%gIo(vgrL$KydcB_5_X<oTfD%UA#MlR3kfc0 zHS7&m;sa3vUl8I8iuEtGMSfs$bbH@tfnE7Bw#Xl3HMGwc05&NQtm9o4*o604Amb6< zfu)-uup)G0|9Wo*Rc^r`GodwY2-wU}uyT+GzSI_lfjES!8|X3)<SGVH?BS_kL4E+a zAspleaF9YxDvE%FXe8J{Q6M*fGxhr{kP{&_$wekmO#(WUCgW2U?rJ3(Y(xx_5s0o7 ztXhc$%i^q7;y}`nY6Ua{my%eLO3Xl}47gT_$62c+fL)ddG92nTgv(&HN)kvGORbU& zN-?Mo#@5M80R=3$Rspd}GycN!Tq@XLXswb4c1b!&2s#4?_G3{7$d>n6Actmri0ETr zV9+m0%uF#e(9cUO)-TCT)_2UyOV#(xD@iRX$j<>!0_msaq*g%JQ-j&@P)>ZAxt^hZ zaeir0a;knoWl2VUo<8^n_tav2#NkqU1(jAQ`N_p4MWErg{4@n5DI{icQEFmIYEdT0 zfuFKq^;{O%2R~zrvO(f9xazqas4TdiLz@%?dmLLe#|SG}azSAVt>*H;0hbT9_FWb< zxIm$q@gWQ9Hdr-R08)gvnuFU=2(kg39YB+UU>6k?K{7-!*uoN!S>QB-TsDIo11@Zk zYPnLd`ZBnBSY*On2dm}E!74C|2)LUnKnh^BTqW4lDv(gdyNE#Wz-nGeVrE{kLUBoA z5$O7+6ou5h6i`1Cynh+g^Mp?JCFUq(f-l1WEsV@fEa6g$jEs!*^>uO4FUi-3v6YId zL6P)63*-UJ60HVoHKud7!y>5`9)zF?LFat3UH7PA4$Mu+?t9cQx2O&hCH3IIXaKwD zT^88c$gu(nD{!p9YRpEk`X-2aaE%G^BXW(|43@?4A3XQAfV>B-F<ZgrwSjej3hnn< zAR7>22CFgK!74D!^xg#vvks5~SdG~UHnj^Rgj!>QtV0+Mt1-L53NZ}_*O)yZ*MieC zyvFQ>gk2xlmVU5ih}%K-LV^ogV@?1onFvt=t}#JtSSEo|$Cuio$zXAGd*5e)UHLM$ zXbQ+`XpK1)Y|=Eaj(1sL6W(Wmj7N9}R%1>FD?&H+ulFucZ8ZaACbY(!2{v;USUJc8 zUuuhHgE++0n8hVU$TcRSNXJuSg8Tq-!yJ$sz(ESCF+m|R7ZRfLzz&)Zas#-4c%KDw zB1tvo0<aMak&HmpORySq5m*+r0z&GDEe1&=YD`FJt)Yo)*-CC|Nk)E(W(FI$#$1B4 z##{<^*)ovfP|qP;2CFfbgJiMPm@7aj2Gzlk8WYr&fH<INB`8$E)g_39TwSgLn+mNi zSA(6g1|*d6E<yn`%#iGslUh-bSX811^(%P29ca;Lv5rErX2$z0klP1mCAt<AGKfla z9oSz#V~f^<#Mz*gXg3oB19++eQ3)4qfF!w%;NaM#!N8D|@gp_^l52j)7Hx*=2UoLb zGnkN2D%t`H@JUPz3|Ti67#Ol9Gcho9A_x0ckXy2#mF+gLJ=;M-(7rFkl#KUTpcu*c zkOlP#tjgU1Qi`w2g_oy0LGA!&Cs1mD7+bUp;=SEqYxjW60w+4;!X4x!NNKeaGKjGk ztau+paRe^|0|QDzz;NmsXcuWeNC#0)Jpfj@9%9`=uyuz(LK*MC(Sxuq<4bMPVUP?S zW8Y_i91JQ@j=)0zG~a?SrRXRm6pn#yIu0@q918EVKz2jQm2Kdbcox)6C%`ICLR3aD zGB7YCgPd{-BtVo?PQ#r7*4)}ybOvnXS&#`(%R!bPTb^2)l(iiaCg;G4&m$>@qz+L1 zx(gcI7eKP1EU6U*MOk}5VyFcJauU1<at*Y!zXUe=GDtJn9bamTu7Eg*(*6(=14Aeq zcwKyQ)?p9_X_5R9xJ@`pcyM)4l30|US`sQ8pPQdjnuF3f4rMJ$P0LKl0%e=hjQ3d} zuYw})D#(q;Al|<QcH?!BvtVw#0p@`7WzkKL($h=~42ht;`ZG4;cPz*xkk3FS-2zF2 zGXm(`ooGmFJ+|mJBoW*Jn|&8-9H_Q?p9QiF5)T)^i6AlKQx?2q28tBuX`%PPI`1Rt zgp`M{EDLLgJ^-r#I~B=&h;GY6kUXpz`Uq_3V~|kByNDx<3=EEW3YmE+sTB&Kl2@TT zGbabM%nXvBQ=mgIDX9gic`3yT`H)s9()u;7{4@n6P;*;JM?nd+a7_ukE<g#iVl5~! zFFjRBp)4_{G__by0XEH1S`51BG+!aJB(*59B$X>4H2;^FlcSKET3no%o>~lQ?4~9r zXMk1+Bte~(k(r#KP@Y<ps!)(v3^pL6D8Dp41AIjse8qu+5+WBWfu?VYQwzYBC=^5P zTTMnBH3YJzBp=kGF45EC0(rhzPr)&*B(<nKu_y&H7v$z26cXg<r%+IopI(%h3p$-B zIWZ>(;{N3Pyt34y5-w0f9lS3VvVKni<du?qki!&;6LV8RzDNNF3TQQXNk(ce$bb2H zsbHURfv&zQ&C4t-O;rE|A9$&sf(B9ugH{G&hA<aW2y5yUJpt7l@3TNjW^h)RPeBg+ zlm%-nJ_9E}j5O;F?>jw*XQ~HONu!S%=73V^qlURU3XdA*fP(r_!(4E*JZhK&Ppu#^ zdZyP$4Ra7F7G!xzzQQm`v$#W?3oXPo^@?6V3d@(^(&-gAalFd{Cu-!T1E}x<Hyx5w z@{>zTGINUc^72zsi@EahOH#RtUTZKgXf_tT0UPobVn{>=c&A5Zu>z#M3d+JsiJ$@m zT9$#Q@Dx%j5_1c3QXwUwUO^>SMoCFQv6a4laei7!d16tjUTSh~d755kUWtBrW_G52 zN@j6EPGY4#=uS#~aQUfMP?-VCfmx8`9?Al8SkXIB+W%5p^d9Uaj6@G_QGEcVd1%M$ zBiIw4z&hU1+Y_J=%=iHH1U%1v20I4B`QALBO7IIv5;9>2+Fl7R>q!goqOXuN@D1$q z?;!J_dqv4GEaQC^C<IHBveX#CiQ)&?)SpmOO&J&%$co{jU(mSx4KfMbYAG$s%mRy| zw}&8300qt;P{e{;2;^J*7ZN)E!2b9TvK`!1d7lOH8KgO3$OszUh0GJeMot(sL9@$@ znxOe;Nb>_yM}S&(u(<{%uq;Nz!qX+QCgS!U7O;7&U>zXyzSI`6fjQ{f-)DiW2Kk;H zBo7-S;Q;IB1PMV~-vRLDf*J3#K*l3FC9shaF0gWR8~%EOM@qOst^)@ys1=Sdt%yex zJkQJvwvi8P1jxnjvp{YD7b98F@e+Qp5&^i9FSSL2U=F&KPzSz@EfNCRDh5eg!eH$p zU>zVEzSI_pf;pJlK{kQHL<}UKB?Hkf4%ROL5(3BRm)aspFb7jV$SRP2DUkKhqCy(1 zT?VY<U4#)z|4Bh3G&A2VGbgoJQ$bf(0Y0dg2;cJtY50J88?s;%Fzp064`intNIvT? zq{%D~wp0Nm1dT^TJq9vN5iA4F5?PGQ3=AFcJ}#)~401BaNF|Ur;BkjAp-34LcPe08 zRKaF}LiT+Y$X-ZlX9drSLy8<G1_lNNjUqLOE_JXj4J2J4`w%MxG{N#(aQQE_McN<^ zqDunqUW1*D)V+uRHSb};S)`-MzyOwn?&d{|mEh>8Ap2Vv<ZnJ^aLJ?xc8xyB0U7VI zK*oZ?&j8HFj0}+5K_O=dG65WND6TSsgn%*FOcSsfkZ=Rp0tq)UaJV5l9gq+NbsIHX z8;eZAI?a%DLc<Ph7ier<;Zeh6g(7o^MHXP?mN=AycCO+~az$1UBdozj*g%Ykz^etc zumReyd7lMwS84{NQ3>&z7q|q3<ttmT$#xKvLm5E9Y7gdM1}iLIIe>x{ny(ze+MU2U z-bDm}I^_x)Anz3A=YX;lT8_%e0XO;KeUV~N!`<26FC@s{2i(*LH8#1D^K)}STYGXc z^HTLdE^-E&kLe<i<3SPa0+NU2I#;lh+(1GZ?-1hz?qC62nGNI*kVzgOzk#C>6xqqG zjYXbd<GjGSA;|<}0VF7~WG`<>g!zDV`6B58*?`Dieqecjxcryeq5u$wQ1$}tC`1b0 zqCj$T7|1Cg&jx`!3(aA{U<ZYO+>r4u3uG)P;6uTD%zy_uA7nxp$OLe3p*t)b5)Khy zV<W-FKtc~>5hV2RXR;`;&S)f^AZM2*L9!wulf^(RiUli=!=c<3c`6Cq_sjrwl8X{^ z!E5jdr^2Fmh&2gdYZ4*WL{MxjN@j)l4_jshiAjR9EvQI>&Piu{$^uQnfGcU#6;DZE zM<zoY37!c;3}?dz+Ec)?;Oqdeb&v+yQ$f;@fp*Z6kCfEJ<mC9YoYIQaV#34iVc_BR zG)-K~p3=eY%K%vcuFKzNA>0QWZqEeCVi|7F(!{as2{gb8X-pSogHk1UxE;ho9(2nA zn+hFn&jmXp4<wZF4s=8!17ZwX55>obN*6ll4)Q_9hlnYIXyzK(!A1F?P(lp77l8fv zGq$J@Bp!xm=)DM%%!|Q6Q=*AJ^j-?p4<33KN1dQRaX=X;3cxJ{>;v%SAQ!;~;48qk zRf2>v-bH}cLL!@$@jeR_QyCw!puU0)!&iYc;2HUa)`Bl%i>g7c0T)x~h8NX9JX{NQ zLLJCNaFRssQG=WZ&ShE9!T5Tx;s%Iftb_5W4u%cJH-dB!<=`f;%Jq<DWHZ>h7LX9u zW@IZ!29L4tvp^0871wR>Z~%1!5UIMT9TEy1V4FHY=7B@ueHO@WNNJ5a7~cg}*$q*N zsAPLU0z^5b7w!~TMcW59vL9pu)N+s|$d-e~eW8Q#6TpfmA}NLhIjGA98;qX>k|l01 zelo~4(82gAV56skG=tsorM74qh=Zt_=`$D)%0i&_FvzQ*$eRvwBXlr+2H1@=LC%7? zaTb^ZuBwY>gOp+p#)EtYGHDJ-8k`+K?PB;~{9H&Pm<Kj{KG--&l?}2D5)b$X;}?K+ zE=1A^DJNkW7d9Bb2&@9^RIG#Xi$U_R!T2R$LzjYtGTwoj6AUh?x{1ljrMaa!i6yC^ z2BShsW^rPAdQoaRNB~qzffk4)>J=>m6<6=GK<*mMrS)=<Ga*fMP@`)F*smDDgBbT+ z36DQb1_ly>V-+NVSA#=z4cL}<S>P~2F77}94k_-SZTz)h_3I$&BcvG_7~J#0oAe=* z3!vr{ILx6#`<ZzP`9&$IMW6|Q%v@*$Ax9Z_G613&V=@6EtdLlgiV~?Qpy>e6c(fju zOJ-VHYEf!l32c!oxDSDp0zjKELDwY|<(Flqq^5u-FBFOrGxO3Cb8@)Aa}XLSi68+T zh1~p<%(TqZ6a`REBe6&moR~mU6~(1RX^F|H3Lt-_f_HIp6_*sH78ipPmV!n~VnKdR zrH(>!X;Nmg0*IZLpPQMOqp4T49u%3dG?#@IwHv^Jh#9rau(dK9;ZZvp&WU)#c@rct zZw4pME#Po{mjw=d<ire0yO6{Ty)|zuSp7DLdT`qqQaXSt4%k@VcCai)EWyY6c7P%Y zx=Ly%*t}g}9iY<kOKs6^Fb7@x`z(;vpyGEANFFxUw->B`A4mvVxg$pBGTvu_j7PM5 zU}Jsz!OGEXfR6PY0J#oax`QftglR<wAt81MY~x|D5g-@8&jPst5=hXoz9V2IN8w7o z)D|5BbI`4XI`Cy|(Q%Ni(6PP~VC^TtIzTpjsVzDM=3r_E*#ruc(;#`+n8X>d{<9z< zSnYNW%)!(TvI?aCJji-zd36D-{UTV$y9jTh#`-{+9(I-yc(hNUBqOmzAsMp34_pp_ zvp#q@;u6?sOvixS4RXw7kUVTS;tJR`S3yG12u8HKK&AaPunf2(hGh^C<QI^U*FpY+ zM=HXEq8pG%y$QDE7T7FMkiX9Y*$b((v5ZpOhUmHj)^!(27sx)uD8)Un{C&7Q==LfQ z2hkJ)H}UZg0zO0=qCoWE@C*Wi+yV0UBapwLLllp}u6Y7-K*qZ)kg=ffdkW@bMh3|3 zAQPT}OaO-*sIdbdntTokffryiUxLkmgd4~fNVwr2pLhk<`5H+l$jzAJ6K^0Ey#*_O zheJ7NKpHfx177M%bXqKW4>9`#*zAuGv%!Pgq??5@5&`iEXw(5T7Yzvw)M3L<U@JdE ztb`03egShZBLbF1zk(tHnnk~XwSNcepxv<H53u=|E&@3olr(;V<YD>r7uZR^K|;vG zhJU~UxUwh6A0U(dg8T+fWU$`MKd^EC!MY&{3uFN#D6wQn1}*SB45JokCW=W5F%t!{ z0g)k@!SXC{`7gCatRN1d42eEE$EJlkFi%vT1UUudS#~W3hAe2F<N!N}6Xb@BcUd4~ zL3xr3%*PCPkn=$%aDz+$2N$}-cp%}x3pSPyYz!pyKo&tl4}Z4g2kR6-(g|`lX0{ZB zSR@2iE{sDt#p8QLA`ojt!PbaDtfBI-A;f>!GAl@ogkeK*up=cPjs!Q25W{k?VM9r< zEI2!08#a^zNkfJWL7TP<ic$*_i&Ep$3gW?)D&e8Squ`-KX)RnshcaL{%7Ux`Hw~~2 z9m;`Zu?!u`YY`qgQ~;$+@X#TMg*<eq2sRZubf^S&hB8P9dYv@V&>@De!RvHEF3<Q7 zF=G%78KOJ1NCgx^h+#uju>U~YJ3-<{@eCWPLz1}$I9N2b(1#7Rp!&hXhSI3Rh8T{} z21Nn5U4eb*PzU5H*wCRa*hW2&P{z9m(4HG~^D^FNfnqD;Ll)F`u;D{}kS081Rfyq3 z1CWcr#T7OSiVPv1Hv&7w7-T9qX(D$+K+c4;u%SbUCSb*;5XI2(GjxZ-h7HX?s)%x^ zImn^VQ9}!`4VECi$n}{ONC1yv@3TNo0~ONNAj81EhSg~{U?XioCV+kTJ_}?Cq*R6s z4}x|GK}YE9z>4jW6hoo`)X{>C&^dr)i5sDF1i1z}LgxfF+8Lx7?2a$BMJ^x?q86mj z2puS;f=1{-UIm4iE69z|5jr=p8{I+9g1ONH%mLSmMV=s~m?Lx`pMgyB0!f3z9@J=s zkI;ETQkoCgY+tZ(klGPs8zdg^kI?ynb^0UegcM7#ya5}b3jnJCI~D5)T_8vvHbNH! zHZ&L{1YL~e3|{qF3>t~aPg4Lb{{m0$7K2us!p{!|o$gpv2^yZsO)SwX3IUZ7@3TNI z9OT6$bT%E-&<O>58Y7$#Lv>;Bhy<<pA}3tJA#ol74&+F%eebfsfrVVafZ_mBz(B`2 zqQL5-A?m@EIV5C3*$+0(5d)URa6NpSBNpU%=r~6l*t~eK4p5r=Qd^V&=AdhTp9QiS zl!y~S^00A^B(VNukPx&Rj2M~7c%KC_9#KTY#yL{J%F%6rj&r1fTnEl0XyY7dkPu4; z+n5110_5WNSs*t+0tq_KkqK6k1y}N=wkR9SLAMg>z?ZQ_IUrl1y_j6E_B^l-+Vx`c z!RBMS2;_KBFc*O2VZE3_u#<{FLdd0lF<1cHY{N3h0P+XOq!N(dz#$4N@k_zRm4S6b z!VqKuq@-a5uaSXF$3xc^l|w?l0<5bNNf*clL@%ZaEME<m|59621L7dcZ*cXGF|2^z zS*S(p#UL7Zct#dLP62tg4&+&AFQy*spazf|GTvo@j0I)xMlc^U;6cs@na~6>0UTWD z4r_*lLkrm0R<JRU&;wZn2|fJ1m^QG^b|jr3XJhtaIv^Hxf|YmSP)>O-rW;~S57?Ss zh&5F1#X$TA>aie(90)FS=mR^bAL1ZzA&1#xnE;jrCw*)^mWd!~NRLIIfq|i*C_g#1 zxHukifdJwD${BEfWfIQ*%4Dz$r+_R0Hv_QsSEhnwvGiA_foeolhhyw4oDNEZ;Qk7T zh1_460X7xdUzrJZ#w?If#=8g^^cFaZpTWHqkh?QJL`)l0y%l6<7R?5Q4x+Cz2kf_> zu|;!1;%D&mRpvnw^L%iSEWqfiEQIO@_f<eE?NEAlC{9=e3Vd);g}tY;8002cPh|<% zzNH``=$#m-X)WV@7ATf7K4d|C2J5FR18Kq2Vn_5-mV?{_E|5SMO`sZIv;yMom0)MA z0+|U;kjRY)kP{*GBea*Y8mxE?L@~UVg6d3IFJ&!A6;aMy2XZE~m$Dvg!v>IE<oaqO zNC1yv@3TNo0~NxXK!$<+46Cy?gN@t*G6C$v_gNrIAf+xwFJ&uO@irvI5Z{5CNw8kZ zc91M_y_6jw*FbwIJHbZp0%-=j12i)P;vi}{`t(vjsT9;p0eKY^VtYVtg!WSQg59_e z<SdvQ_k%g$TCeB;NGWD71>`f3Ne4mF;IK#Or5u8!w8LPtkARJX)P5k_An|~|mvR)W z^B9s&NO1(q8L(c;aj*)oQ?d3^PJrZLy_Az+Lr;N(GTwpCz-I`^FD`**66l#A@V*In zf(6oN(JML)DiPjifm}7Xi^MY^ha%PyoCW(8BX|&<lXLL+106p@Y;c^1MDGP~cwPkC z@h%G-M#yCeD7YbI3AC|%39SAyM14diBLhQ726*2eWcOk*c+S575hbZ93XmO@;JAV8 zsVq)~owA&n$A!FX7_@ORRiP-gxHP8(q#iul2sSY{zYMex0kYK)Qmb>NWEQ0+m*f{! zDrBZ9WR?_zZcbB3Ei6sU0d-J8(=U+thpW@$0=YFUKPM-@9ArFX-9R$<T$*Bq+|2Zh z63~9o6wrpn%rvfoqWpr?qMS;FV(<lSso>QM$j-Im0`-ZF6u_GeU}tre<b!+4MqIAW zp#7A=3c3m*MTvREX{kk^^{EgqmE<dc7P*usRzi>2<Z^Wm4)G6ibaz$IRR}K0FG@^L zRY)vRfNa@<9K~651(YygDL4x)nOp@&31%{ZuSvKDPbQ<W=IKPgSi26%Xg9za=O#Fo z-erNK5;>!R@)abbL3{qU!0K;9)Pozvkdg~jrNMgscfhh3aSreK-vvcEwC8^hY~Fpa z4p2D`ngj-O(6ztM0$B~J7#@P;VLksxVEvClLfCr#Amb5@9$3%+30OJ04bYzdQ;_Sx z^$uFk{~092o`Y?C0X72U;`dn~H$Vaj+Vg)2R`Lq2<V$VQYcL1h%J*4d2fmCgdIPc* zT9~~BYkvpULA##+d$9SKE&@3o6wDt$^01!&N3fGVfrOA-QlG&B;9dllo<GPRAd|j; z{00tDSS#u)*tl<C-H<Q@SpccMvGn}ELqh%sSl3S^T_76}J^x=|`QLE)FSSK~KpaGy z2;7_|*z^C3*7HYnmGJcZK~4dA_8-Wz(4PN)u!9)1!4s}oAY(y2e?~ALGvGna2bsX6 z&A<Q|_(1RZGi!tAaapuM^SG>FV<4divIr7-_<R0rV4dtpIzi6H?D=y*EaC(!=fa_! z@}568#2Oy3HM|gOsND01_>aV%KOfjZ{169$3pvc5zW`Vkob<8v`~^YMke)wi871@> zu~fo+{$t=izmPVrIZ9!$+eARdgB#V@`uw6GSuA~iF>S(gl;WV&2k!HOSjc^T39zZq zKEEW`8B!pjjCT=^sC|C8Zy_xN9nj*Y)M6b4$l0el3Pq`frK!awI*|MQQZkEd)%Dat z#|?ozm+>KD!XO$Lfcd3J8WeblApse%*MG(q$%4d>;TaN;gQRkKaEK{rqfcKdLiK}( z1cb2%WRVgmR=}kf_Q3#UkZWLr0V-gdR6#-+@4$N|VV=l%p9PAzj1O5*-@t|e)If^y zbcqqe0O}x@fD3a_w+v=*kp{$*nqaH7K&F9HCvsZ?<Sa-v2^|2?1}oNqD2~u!U|=96 zy<qqSHddeuGLR_0=zMhGUt}y@!K@VzzxCT^Y8-hgf82LU6<QGukZ3GV<(3T;H z2}Q<`z%c>aU<xt|960Z@Kz2gPZOGUG>@*@Xuu5}?$_UVQG|<r*#UQ6xfCPzhiY44B za0800ATF^6n{NX$3hEM&jo4gb3sz|dQ5ga96C@LZoMI0WCCVudaHk+lC~}0j#R+VK zGsrBcTR?VVbBhaDr7J{b1Umx*1GFFkImQhnOq65X;f_HvqR0c{8c(ntULeDut^wJK z%{AU&l|B%a;C)5lejT(l13AeTBuA8!{NPRkZ6QK7r^p}Tt^lxYfgls1?gH75>@KAJ zD?wnz!AOcBxgOL=hmAXhfMkgqcM1i$4m$1>1~xhzq#5jvFSSJxAP%C9MW1meP=N>< zcLI48l<y)zZiJ3IMS<NI4RRLDjWJ*jxXo1*3sQ<X?ga7~$fP)sG`xU=&yL4K;voTS zb|Tm~NZSi!8zdg^k2@uSbtWU}gw%Ghq8K*rlmb=(b}H6!r&N$UY}_dgY-l=2DB~UY ztXntGeY%-dpn(L?SOc_x2A^M=mS2<$9#v3C0(J09po1Bp`*%}POA<44in&k*Mc_A0 z>2U=>)>;)S_&Np!E5HpcRsbEI1Xl;%;ZR(flnWa60G+d>SCj#&-QH(`JU>V)cBBdS zOmH}21U+I*D+``BK*tIXvY^g}q|h92lE?*n<y{sy{E=&6P>O-n!q6Ul9$0-oL_N5% z3yCaHVFByW7l36k0tVirF9d}Pv`1eAHm?}01C&F))E1S1Iq2HoXMwB+Ww}z2Jgi4w z2G(B=62jJ_2N{oOzrcF*6=3D)Hb8syl_1xFb2M6yz6ugz)nFTIz(#;v{5}ih21p=5 zd-SznC3SEmUuui$!5nle-)Dgx_%gPr0c0z5&q5<udlOg($c8VqMa^Iirgo4`pfG6x z$;0+6w1V}wfrMZsT05A7sUKt&NPh>&dgy>cCs=zISjW4FLPl6aOF;uXkOw-}ANzGG z-~$#wqm#I<<bgDBKm(+i#h`<oQegY1xYF{A6mnB@lTwR7rz@AFg02cEf?X((kyw_h zkXD+LqmY;knh^yT9C`V9T=;e5=jBwwbd*2_T_LRz$j+<c)DrL^cc}^~smYn(1wx=x zrxH_A71E0Ga}|(Jeo#m(N-xb#%`4$jf*7G>4O%P&?V`Xe0hMDRMWw0GfI{3$qKV6Y zARTUrImIw7(6H46wFkPv5r7$Gpx6aPSr14aHsaC?j<Y_H5Jq#fA1n&)dtw=O0mU}R zxCx*X08aLxMi(TeiY7vm{3NjHlfmYI66E_VkbRJ949ft_6o{^=U|rLYbb;(b48TkW z%g=zzf2l2+3F06c2jDIY#sCbc(Sw{4i)Lw~t{_KrT=9&+fZPJ|_iT{Ap(8MJz%H5# zazw_vEReCFh?ocFV@3qX{U8(OgG>O29EQslKtf_6*xW^6b0FadvI!D?7(*~nw=4$h zSpv}$0XkF~bg2%=Jxjr2nC^l3Xc^o+FkMB<A?{cKHghFdKg1m%TaeuWyOd`YSmkQC z$}hD=Yd{=Aaf9vpoVAoh&pME2ph2=8?5GVOcVxWF0vQVmj*VbGW^jPK0E(VXAQQmR zgUxZ9AtAE`Z1h&JQIL=US%w@kpwliOr+z|4+dzYppaXcefpu<2(g}(O%t5jp5Q}z# zmG8o#+!Hz#HH-_;M-6izMd+i3xwI`ri*`eTd=EIt_d<d^!gcruF`eot<aQz?&7%&S zqVCe#2abjPkXV51(mDX<VCGy{qvRkc=RzALhrrqogLS-%NMK-K0FQAfXcU(ef!iJM zZD!QEodHy~90A*h=|YfaKxNBOkUXpoJ_dH;agY%54I?0PPJjh*Rly*?flNCI@-Mig zLJYy2f~4WoV6)GFje(R;Alo426P6nIEJW8iu&(n+x<FPTYTyfC`HOJ*FSSLNKpaA) zJnTIF%jA^oASZx)dj;fMXvuyR?2v09yEEQpfs6%(+I27=GxR~u2AOaJWCA$6U=F$o z@%JsTaks(RA)y7b01{dl^)1){SZRI-tn)6CPLOjkOY?gWi|&J!Kfs}!cGq$|gjoLw zZ2e=1^|ZO81Z6KKBrNdd@+V*yJ%zXklFOfgIhe5s%jM5Ou?WrOFTmPgf_1!$*o+vn zQ_#rFD*@;8VDP#N$Z^lP`6=M5SKuQIdRzup3PGtQMVYB(;A0_DL6ZrIkOn=t&8Wv^ zXr&NPl$looH6pR77&gNI-V>0RrvO=+0bX*W$7O`oK+utJ1=vjiZ_9oK_5!A-LE!^R zy01a<u!7?a*w=4CLK*MSM=IZeg>e-fpa27z_Z}38;FOF!O8EhjOg@6m{{%J&k{v)c zLb3yv!s9bU*B7v^uSmK;mLUp{Z(#ZFaQQE_ML$3sVhWGUypp1y<P;ttCxHC>3*=vD z;qe>nkUt>1Gu~x^j0F`Qf5Cjr7yvmNWWqm?3E&U|6&@f5{fGFQK?gKn%BTaLh6Rss zfGmK77XHG639OSDNhip;n1u(64tQdg6|9^Mhw?=X3=D%mtrxLF{K5hD3n#=c5ktf6 zC`B72rtlSQTwpJ9L%awn+IYYm%rpio+IV#k*T(XJwey2@yo>0Codl7RSp;sw=qThD zlw{`TCFX!jxq!ry4A=rN_|h+h@(j>{`bYz{poM9PC5fQ1l*FX`(h{zce9+>r;*$KL z)D+M-3utg7EwMDG1f&F{F}bt|d|(a2Pz}&*D!9-R06PxTJ0PEfvWy@|9#&`xf&C*4 z5`s<}!X_d>xlaTvj;quHg$2k!QBe4R^B`z;5T?IK43ehA!8S;MO@b6#AUh!$5lgWp z3DG45)+LRk3uGIj*pdOu%fjWq)E3EsIK&iNpgV}<b;uZO0678VVFi$fp~aRW*da<F zyEEQpfs6$OoHCe?83!O|gG^8XnE(zlP_YGakSfIAYGC8k!P+6A1+oAVS{TI^)Cn43 zJ(>_b5ulATItn01Xn{pA9Rc%(Hrx>qJw-YYH|T=R(*x^<xB+AXvKwII3;JM{25^;M zYKsg(973@GN++<4Qe;F)R2YN&01XEduxm^~4#;?y1u_;C3T9wFW+;H%4vGqMkO|<Z zKyj4?BrGh!W?F&GfP@9e7UZzNHKJe*)@g&J6BO>4)rc*`B0I2hdmPG385kJoS(rR( zn4$NmVWy^Dkpskej$r3GL7W#+NN49j$~NSlDkLni74#r65{@Wv27Al};xTYL0dv`p zD_9m>3}RdM;|7w3Ec*d%_$e>SEJ=;eOUz9L9sfgk@s9|2@sGO>uEjqdU>ACVECJ60 zU|am-1(MCG0bNR!RSUZR3Y4P@DvP{z2rvHe0c8O2;vWzTdGU`g*i`7^A3v}&{6RvP z8-CFI4Bqeqa`zxx-Hz(aq5x3nAXfJTg8lY0wkQZBE`n!uPcS4?gn)x2R0n-^PZ(4` zcy$ljh95L1go6SfJV1_pjSpyrj0S9tPbApBD6li%MSynXpqiHPJ_{5}86UEsK7+0F zi3VxGvnT<v(kBMw9&l-hX?#&E#M^OTXT*cd1Sd%3d<k+QWD*U!-X{U9I1!>4zTpSe znXpAXNg!23IWrmLOz0Y(6tE4cAic=TRMS8Lcno`=1#%jw21o}P2KF;({2;ltu_yy< zWG2W2un*s7fh>WP`jACCNXHUnffZ*XDTeqCG?xlnc##8=C2rwGF32^|g%^2Xqw_(U z!S47{TT}qzAnI58EW7}vQqaN+kXJz=RtRz<bm2u2*p0;?XTjW90_K3L+@eyDQp|-H zAfJIuDg#M_!yZ)o!WUkYLsD7=*z8KMagf><WE&(N@Grcm0_&_s(g`V!U^xS}@S+B+ z0_;?*3omLx^00*$bznp5K|&etBJP4t00&?0Tda_%04wjo;|<`mB{NbLN>XzR@{1CS zDish7b<mgtINKIOPOXG*0fAhA1nMqimRKp|CRXI=fXE~rh1{IfveX<ME(o0oT11(f zmspyn1G-%&u^_QXN1-Su-vCS+g2+TLJJC>wD>pwkH9Zk@E+vQt&D82B<fbQ<78mO% z<QC`V=a*zaOo5P41t|rfwIM|fpmOYe7APzSbwQ4_nxhdMIT-PYSk2J{PjJIO{+c1V zs0EyCTfrgoE(;u~$VE0NRYQtw=;Dwzu=;k0dT^5nk^(>l8f<Y$2Ur#(oZ*W@Izhn< zT^!N{Hm@731C)!u)E4!CIq2HoXMwB+6$`x}dD!BRKCu3NkPx=TAt2)sRUT|{$ON!* zbQ_?HLneY;2QGEc7KcoNgxF-TjZ?rzfL#1O3*-h!AVC+0Oa&{M23PW>wrDz-gKp*f zEU*J##um*0*$Q18G83$Q7FY+!2GDK1U=F5skWHX4nFErCEe@Fr);|v<1S@stgE^S` zK~{nEF92B&9id$a*1ia=gLb=37K6>lbP>q$AQvqG$-_n>mV%wM3?zhHjV}iafZN_! zmOX&{0WxU?$Zy~Xg;n7z!N#ou>jnkz`z(+Jkg5aAu)}Id#IFJCT8pF$WCLQ@VI5e0 zJzV}vZP5l02T>t|+j1C-9nd#*Y((qxBHHPA);fTk0`lx8kY}NN-pybKZ2`F<<6RcW zSWusLE0~WN@F3@dOxOl80UTWD4%-e1haF&JcY=+9gdWHuNa$e<Lx2qeg*#{>eHU2g zZX}%`XJdAI_dqP#3s$}lhjPkyo9u^Ja{z43L5MX}-faT$AE?`jIA;QN()1A6_QMd{ zA!Ck5z#PmNf@RjDpcsN?)?;Ap$H6+@fjR^Xpq-nb1_yY|5j@i92fFeyKMi~r4oC*n z^#nIXz(ay3z<M!l133(o9!`SfVHxoh*t*joA?T1G%sNogIs+ERl^;P)1sQl2<a}_t z05$7i`iss%V&gp6h6`YmAgK#vCnR-Y$(t7;x-NlrT}ILcvJH_puYl#R!sWlz7F`2z z2<1)K2;6mY@+8O!AP?UFc^H}}Z-O0i3uJf3yDX5gpn$s#=3~YI$k`wh?tn}H2N}#k zcOm}12R80LSUV)NKo&qk3x8gG0M_{sNhip;n0fIL#G=Pw<xg-ZmttUGz@5s9o<huc z1~%h4#Ec01dQe90Auhv~i$G#T4Cp{EtVu0R%6P5WSo8wyj+YR3fZH&Kco-NmK4g5% z_>}P(6d$j^a!Bz}^cp0RwVaWGA>&bM#_!moH=y?Kti;lczus!F<J8}R6)`}rkb4KV z<vmC!<6YJokk0p6Agdu3WwC%nzSI_d0IL9J8u$QGmL2Fa@nxVpc#zHi2u}u}oa0`U znG{-*nN#!$61<<m7JdO62elBnDF<>7q?Hl?x#;67Sp7GMdT=m6To=(uyWLhWH|rHt zTBYPC7nc-))}@0^ZG(D752m8%J1BrZWx<XD{Q-6-YA_+)AoLR?4H;(x-O&y+ML`2{ z{j_ETXk{3LtqYR`kFEWJj;+Ca0i{V<&;a@k4xm3ElfmsMSoDF~x-e(`1<T@e)<2Lm z#95$Ya9}noXe8$(7K5%kR)7g<X4Hb+^B?LSSZld7DXSb3Uktk7Sxa5StR*DAK+b{P zW5fiK#T@I)Ky@JGTp!R16tFXjm~|N#vcRK!AQti{9}Cz#=qMj6*a2)Hp^SGCpq*(j z$7{e!@nX=XJ&;2)J`9p%#IDQ0kbxM-;{dz<XKWECNW2z#91kT=ap{65aJj)==FvqT z#p8wQ29M&QXygNhC8(hn%8)e~H0FvNocti$v%d3yZy6K-n=J?uf-dL<$A&`2`z%mM zXMD(ly8RcZbox?TBm`25XVeNYQYQ>@1h~Ect@MQ$TO<PUk|@|(F_2l{RE=ClfSd#= zBc?*qoH$sq1VnKJCj$cmEXwsToH+w@FFfd?Opt1#oGAr&CW^^L(h!%*fGw8=8HeFg zki#G@T>x>Z99XeDL~#}<7BCzL8}U>CDI&^&if{*_#IX{@eac`fRY0a;xDVtUi2I;p zovL8PY7oWXkc8(M42QzTJk>#}iE^k0$f3|NPff5*S|Gg{@6c=l-Kz<bz+>q9ERa({ ztqvWKq2N>miXOOgi*zC0*8|(54>Aty{r6cQn;~rvjDb)Cuwp|b#gH@(D!gC=p++EC z;s!#EK~94XgqnbjHU()0yW>l3kr{}CXxklPVqgGY44jgmoOKw);Veo`gWeK)1e9#S z<s**n75GZglEk9))RIuact{;mtPjfvp{zxzX_+bD6bBjx1$h({c;+A%LWe;uz%H}| zISS@ND=_C<Y{vK4B5ROR%wbTFzd$D0fTY3E07``LVNhF0EZBj~wg(#rX#s+4gTw;< zVNeIKPDdo2kb)al?7)UWoxm!<PQ^M5>I{;H4THLX4Rr+xWxR{901bnJYdX;G56~$z z3ZOf}GfOg4ixo8TQp-Vulo|Oc#hME68^FP;90NRy+(2dQ`z(+%2TN^&G??fP_98~8 zz?%_89`I<RC=@&)(d-2dS8uST@3O!_gIsWff*n%aK-(@pVD-Kb_29-GBpgBc4c2z? z1IvPwKD_0L)THtUNkiH$+Mt_O^9w5DQ%ZAlE8}yE(?L_0uq*&?vq581Gs6emlnKzq zHEkIPc3lw20&s?a#WKisu%=8fNS4T^45*fa-o_XL3U+W?2E;<Hd_%zoLfbN7U>Agg zgfiYm#3NU1$*3NMm3#4-c{&P^BcZ}Ui*#&3`+#&5vQsNTed=P{=vXiZGExubfpmh_ zFWRb?gAX$R`I@$S9^o-Uuz9VA>dT@CP-a6klOn+Z^E0+63MB4>vzZhPNu4p^(2T`s zCdEN@gPTd93moANM6*5~6l<VX6Sy43Y&a!=+yk5HOa$AO1QLRtZHQ`G#``Q#^k#g> zg8B+p@h5|{;Hml$4X6~5d%$HbXsQ#{_@Y#Zr_;dBNC%k-PQ=Lh5#&TjeuP&48DPbk z5XBL03=Hsb8p_fYhF@WAhb)j)MENxvtP<LI$N{@E7bKMNE&?<H2uj7E6ds?M2kIK< zfu!)5`#uZgRZzW^4-Z2$V~PqO0aysOs|aKuH~`;gfoz9VU62L@?D&IXu*wpMO7OY+ z=ot~@v{H~fQBEs^I}LQiKDt>&<q-E(fNiY=nF@6u$Q{_+R|QsC4N(aWHKbwz<g^-) z6j4sAg*y!tYDmTu)j?cU54NiTWFXX4AltFIsu8TR38E5wAVGF&CA@qBIjb2YN0hT# z;LZZ=fI~K?s1@R_Hn45&AQPeP0@;tvT^(SRoe-5^cY)FvtfU0Fs|zGYl)Ji7+=XmT zQ4hpjy<pq=Kqf-n1+pL6T}THd^n(>oKvE1TNkA17teH9yBuiW~brQ&R&}Qmnu+dXM zn!)b)Qd=|?#G!996;#lInyDa<f->nekPD&B)ahUs&Hy<I=E9j^4!D(5Gz+8@vzZF= z7s#a9AZc)siPB7+1Br#XV6*3eje|5(LAF6+0e>@fK3L}hB%P3Y6jr#ynyCxHD!@*~ z+Du&pl7}@@7lRF50usu27a_vPz~GpY0v;d--N6RB?lC`2Au%t%BqOy5aww5PdQm3i z>`2foJZPP5eo|Iya!E0GBwZn?w1f-18#y<%xHvIAwOAoJzo;m+xFA0-1vJD}k`HPr z6zfB>pF%-maWUec$h6YDWYEfB$ia_D#S!#KNAULLl+<F-0g@&83ZUu;?AGkm%3{Px zk{X}}iKaq+5f^Bt9&%}ANxp&xc=xd;OarJWFV=@=U<L4G01oFAEd|xz@3TNrFjyNd z%Ro*<oI<)B9Hkhk0MRU80Z*o*v5q|v7OjM2*;U{?vKkzq@3O#20lA3-%0iGP4s>b2 z8nF7c5cS|L2PEBq%1+qQfOTM5jOc+4b{4G%#SV07zy`2+8^Jn2MaGxfqD^29y7u>3 zAge)T&}NW4Y-zw2u>P$eA#6(nK*l4Qh_Iyr+rY}vZGbKf*bZ_XxQIhr8n6QrVmrY$ z?gASDa`F2tkQ*R@1YH`i8?0mxT*;T(qP<`ax|Q#<zz%#FTeJ^kD|BhVez5ifU>zVE zzSI^S1amO8gKPqY$sv$DY-zw@u>K<;Ay^TA6wJZY53&lR{}{-6=xpP0u=W#R9q%H7 zP+PI!3CGO5bnu*`TV_rwsHg#*B?~Gn!7KkEMP*68LQ!fWq_hPWs_-HcbSMLOPVyw! z223}BoDXu-DUdvDPVzL^QD;Cx*qf|p!BXIUE|z5iAU}c3JO}b8IC4P^FHlPY<o@`~ zyrT1v*u4O@=OWlJP}slE0@)0y!m!LtUV`Yl4Ayl8Nf*dM#LVPXu>3WMJot8ZtNf%a zs|3i@NJ7zdQ2F*g3#2LILl(5O1MN}=wUcguw80w?5unMz{G=?fKzU+OUeQfm28K?g z@vEX+x(p29L%SfxgQXzjVBoz01(ij&LH2>e3fFKL8+hz2x#$ikz`&zv90iqD;6di1 zyC5+>UC{oCf=VmMSXt3MkRYgw2%0Qo2Zi;0T?U5al>B7SU{JAMUVchyF;`AzNorAI z4p-3wUGVVuLvX-60{IX$Qwnm{m)fGoVE#AoxY-jBJCvoOC^fC<Daa0x+rhposMO6* z$|`!M%fOI|)EIc51qyAD1D=DFgCiR>bN~sAq8E@DdkMDq707UK9(kVyatb(}L)oFO zEPAcWzyQhEU{hc#9NvKSzD3dtia5+!)pro9-h-8Yz@glVfq{Yid{p!iV#g=29iJg~ zL{MfX%B(EJXP_BaTx%P?fUW)tu^O_r;TxC(jz5%$ft5DjK@kHjZGM2Y{{-uJ7qJU` z93bdKZt(Dnf<{t)eoks)9@@4lm(=7;>`f(5b_QRrtpII=!O!5PR?CSC-jGvpNrmsp z0yWFPrP?pBPcZ!s3MNpZ{0)+am1=*$p8pFHf|hDX?LtuA{|A-==Tt1E8Yt{QX8s3- zCpd|MN;M=SiWv03GhB>%pjkyGJ;bac$YyYA&%#owF++5*fOWAV=>l1ZDAm}&^6U_K z@M?5OsRoU+gdz?-28N9HSs-1Q#Tq9_AGj1NsVqo^6>C}G(ku&Hgn_oeLe0WbhH-%m z2Zs!fGAs*Tc4fg!tSppbiW?Mo+<FWQS<vE$2kawWkjpaOWr3alrM8F<%m+tl5kH8X z1ulp{4nQu51oY4gB2WN<tPliQ0gfLeFBJ(vLRlDWrwGVgXh{Te1tf0J3LsE}1d$Vp zL?H%<fejFc7!ZM~1{(UXvI$m#Nr1ITLbQNeaiBPYsRGRzD?DnLtWYEcu|XQFTn2~o z=?n}EgET`H$wE9J2ljwG!~+q7*uf}eFC<RzmAwjJe<?!z1u1)#z#MR5#ai|%gVG|j z>{S74R|V^UwDe#@Q3@L1E@OV00;JkRq&jfJ&nL6E1k~t*Dc3_T3KR1bQgaJRD#5)@ zaG9tEwgJ;kAm@YfhdM|eRwinI9i<5pg04P;*#asMwZP)wY>%Zt1bGN#pf<>p;0y;E zrhw@$(t)G~U9b&$V3QziJdmA`9EYVe)Q9LY0P8YD(gm^&Q5qV7<&7co;Nd|?X$T6) zgd!7AY4tt}qy@7mGzDqGTNHv$fC3qWr5rQ^nG6mPvdckUP?(v6!VFptT7dmx3367( zyDYHVztk34f%)KQEV2f%A>|;*0m$W`4MsT#3L20Vwje9O(E{^NksTy(?ZFm0fDDBe zf*>bAq6DoF1Zf4Oy&^}5RwuAlXNXql0b6OH^%bD7MnsPbSeYwS87~6^10;GN={upw z4HS&HBFG)24Q~V?T9{a($OB|H6{5%!6n@Ys@&fzE8|1KzcUfT9f2l3<0rMeI<O^a$ zq6p*w<S6pPh$2w%fTGABWCb{i5I!mjfP{1)*vcS~vCv2YIRa}Wq1Hl0!4LyNzy^du z48W|Zpb-YP9ad9?fwhD~w18_WWL1coDgt6dBv^SA4&|U3P7;c)qG*VrF<?VuA%=p^ zy=5T55R?)f;&yx`dK}oUc!*t)5<LOT0mmuU5<L+VWzZ5m39LOCtm9oo2m=EHVi1t% zA|29lCQzoQfbGC^703gigp>-Bhn4ARU}vR+grKWc;LZXS>KR}Oa0bCrsDu0jGBFe6 zPjKP@tyF;<P?QCUrEIVrIbfq8r8>w~Nb1B=s^>y<<$-nOBk2NJhbT4*!19F<d5luM z2$ZqkXMwa}mg>bIO?V3pP*H}XR4)OU3=R>pOLcxwpp}9G4O(QBf&Eera#qH>EU??Z z)D~5M`QV5wssyniMFz+L$VEmKMv(yu8juy$AS=M}0`pH%4J2@D!4}qm422dLASXbg z1XrnE57F8H*4hZsid?FL!Wt1hO<-lsP-U2<dJ8BRaYaxoNE_Y=LX?46O7%97*;I(4 zc2M|1qo@PypH7g>vo@UH_%Fs0+-8L{T@04T&O<1CXPr2P29=!2^n-UXT^wC_?zC zs1Fj-{a`C6fQ*Gk637u)BMGfkp9nEv64-#r5Cbqvb!dcvZHJZWQ@~oLLbQNOb!1hD zQhgf4hUsACGjJ#eT_J!}AQLRTie^Ggodq^^HpEo$t_o62K`GZEuE$rd&jDLD7h)Nt zT%QN#fMXSFxjr8hY0z?g0a*J&u#R`&6T(1am!R2H*nlir3q3fs1bQ$Q=xi;}!Yt4L zE%J$2$W3;oawTv>eG%9KOecX{4@yUiLGrLdeF@l2OF=@=hC0kmpfY_KSR9-^u$1W_ z|9}i!4)P;7X@DB)F#Sa<AThKOY{M$BNsuBPWG5tPVky#BLv*bH>spJX3uGIj%vcAO zUk{PTG8nr7l&{}sfiz(j>Kj4Y$S*TCfy@R63faZFASm26gTf73W^4ibXDi5I8Sk>d zuK!Y7v<=J$M`h7=5F1ivfE<8aX6(QyGeE%uvSKI53UJgQl^MGrLA)Dm<sOi+&@uz$ z2uQ@B73^qb#$Jd4`@jb5hZulaW`M#THW~pdGY){Y9E4~Aml?>a5M{<8hz*Cq%8%es zZU#P;i<B(#s9{d|qlUS9MMoj#9|N0z9AbWi5y|F(vmEkN8^kx*$`Ftk5&K_YI~q=a zU3L=UGH^g)t_nN_mIWt7Y^wrKgQOv=0#z9p7}8Tq;z85U_}2rbg4Y9{(ZjVK@GRI} z=Rih76Ai*$u=RlFL9(Q;2fP4EtKjv3AQtj^z>8o5q3Z!Jfn9JJB$V+k!U1_bAl!?v z!2%t~DP1rwc!+%9;-(>6L5v=IX2t&9&5U4vmijULP!MOQ!t4PvR^Rj{9b#ui-z ziKpUR>USNIxNm?1>ZTt0j)+@O-QcBu$Xjp_7T*R%1)fEIcR((IE%Lhyw&xy52wH`} zJdp7|3lv)!AF`l6fi3U54^oV0)evHN-vf|Kzy%nnZh;wG^bq33M_{WTgG>XbM&zsr zau#IX2fDED30Uz{h+@!sLr}L0Jk>x{GQsc+Z2jIdkcmWj<~dj;bp757uybC5grLC& zOQxWj_Z3JSkD>3gK;8ir@vl)r2xdmn8%PMf1>5otWEwbx-e-aAg%t9rEBD@mRepe| z1h3qK<rHuj*+$2L-1QM8Pn5ep!QBN~xrc66(PxPJzJP803NjVyK9D=Gx$hfT<#&k6 z2vE9(nF(nuLLK-6q<|;~{)9Uat6@dIATIn3w)YRnSf~p@E<tu7(yFw-V8#EC6hkrq zXk`U#RoZ`$EOD#S81xw!V5hV(>Vv0$^kLIKUuuh(K^%BHCW{`MCqN|wXjK}>qoCBs z0&*dART?YUg=`>4fkWy`Z4o<|18Kl;fRtjcN(1=|WD+Mx8lKbPn<u#R!INLyV6%C^ z#z9(<Alo3ZfPYmQFIXoZl1@lr4=a;ktJ3(vD!@)fYRMx?A_0&*Y*m^d*ia#mP{zB6 zEKntsS^`=(21$$H`zR6>(lg6a^S~qMps`L^)>KG@)Jl-cHNY2HBq!#9j*5h+hY#^& zr&fY**8q(!fDC|`tyv_j51x?&d2I02St20EAy#>bf`bSnR1vGZ#Ng3R=TH=fBrFMV zOiF^C`7R3_w8*sxD54>?$OFjkH7T%qX^47o!weD+pd1ccJ0$~_#qczI?UXD?J`1{d zN)BwGJV*$ZYZSm7bp7wMKz4(&iXuoJws=YjtX~-<gl+K@$aq8r3|l;<0#=T019b6} zDm+R+?f!toqQu<PlGLK&A~i^mse^6Q02=|xiy${ZLJ7KfN)xO^3$6sTn+?oCxAJ`! z*nux&i*!J?LKjczg0<^`b%1R6Qd^`C=3r_E*#rs`1CTsy@suH0zY$0X7N*8v4yJyP zRUrK)AnTzWbyKi*Gq8?#ph0PPO96dK4f{kIsG>9n>&CPX<TQ|d79e?8FWeGrp%q97 zOIyGiEDmnxW9fy191Akg2IK*F`3Wm*ifkcqW(T&x9&8dQMBitD?1Yq`SbE_O5M7R7 zT~0{4K(--z;m%-r7l=H@z^W^#D0rU*(vtBZ3tBM17DTy$G{NgGY%2#~1Cdxp?c6~o zg9C)*9yq8~3|ig93JNn1P?$k`;GST=c!8Xi@h%JO_Aj+X-e5jB8jE~DY)B6r<N)Lz zxUW9?vH?)gfUNKXSpkj~n171=A%PnJwlEN6C^(V6&jL9C5+!K;Z;)0{4Nw#W(Haca z8UoRZJg^E1Yee*ff|Z3qm0=F7hJ%6;R|G|XwBd~)#E=4(D2fD`O@%0m0)-zmilV{( zi2*q*<6Rcm^<Qd>V!?b!6vctqkSGE<06B`{F`@_*JfJ8_09gT!B7~2M5+Na-1hz66 zWGpn2K#sr~Nw6`F6tI?5BrVWb0b79><4A+pkPcR!fkQc{X^J$W32ut(6=g!SW`VV4 zL$rdM#289ZMmQnv0F6Z8S_hT`HZd1sB4mU!56l4vFH*bceHN_X%m;-YwBRfNYcB-r zco*T#z`y`&qk|oeUV5SpcfwX;f!jHtGqN!kAryg)#&itG-Jqx}2Fb%p)e^94N<l&y z@4#b(D6RpO(q&*ta5BYGw1T_?GPNA!MR4qa@(_w4MHP^!s07<p1vU;+zJhFrq!TRV zYc)hy4Omw#k}i;yhzwi@mam7%W0bEApe*)23#0|Jd~F12!kc|Tg$k%?i6!$kflLO6 z3fbi=c=c#ADBz%(w*~B%R*<tY-erN^{-w644a^5eXi+<e4avM92OwwO4vfqT3K~${ zbb_n^#|_LsMO~1<?FL)e12PnvbwN&mL<z3)wHKnb53IExq7}J(1%)*tdM1FCO@t}~ zr47{O2$Mj;h%167gS6p|AVg_|C5oni%%(yVO$CJ?G>WEy{WBfpu#9(EVAp@CEt&!5 zL!xLVhz*G%kOPpTXck5kfr1AVMYBOxfTIZEqoO&Gke&;+avsQ7Xe5Cgfi;pqjZs92 zQ8XW7zyh!V3n2zz4njjC3~W2BfL;XFvKXQT+=NF~g(#qxKx|kFR=x~}a(VE=Imi-H z90ga=a)?1Izy_^^7!*N-MwG%E;zoRh_bRaYt0Cq?3hy;w4mj?x7T#+?Q3EZ!*MYUK z2kUqj;e%9ogZ))ZdFj0YY&NEAKn@2bl#L*HSn0h9?3~RYA?V&=SiuW%4ygFv0+t2m z0xZQh$U`7ww}LzgP641T!l<ScZG*(kcCc+bz~;RJrwNe#kaUQp{N4%CwF|6kH<B)p zornTr4_JOLL>{C3-UrIU@3TN!Fw5`#AWe9S2UvNBrEoX^G8r5!WS8HZppZKV3OQ)u za0u*|!ysp6yvqW+{Y!1p5ilPdrA0?UY)Ih%asYDSa15hx00j-misK+Fz>x#<PtgfT z;GP6qcnV}Fv}gc10TLy+%J0(<t!Kbm&qA~!m*1eUMnum!u(I<|Wtipn1yC^JilB=i zZFnOHQQBdNqDvsNsSrh%LE#6DqAOtkTm?BS<6Rcm^`PVPz<fv)T?ertQ3P@TaunUb zh$2w%fTHLo$O>>2A$(MH3lh?|!B*Y@84HahkRz~05?c9v7h=FYumSfW24I%o&<F$D z4lBPOfVDh?XaVO{WL1dr`w_&3$6)18a409D7%qAWG3XiCpyv>SNG`u2Zp2o8gT!!8 z4Z_BWUVv?X39%hgy1xQ*z%h$by2HkaUW4Re<3w-3`rm?tpch*OrIwTy<rQbV&jOi^ zIY{<QOsP=pfO1c%lF;hld(f^Z^o5AHjBg0_%sArXbr<Mu<Lxm3)CK`BGc-70f}m z59+#?u|?lNRzfSQ?_ljez&hSVn1C-Q1NkN%)S^|;)m1?12|?-$1<?8l$OtQJa0I+u z;wRV)Oj|(?1f~98Ao;9c%;2p~zroi20SRTi1D{l<rBwtDMzF<NS{d)NKu!bI+@G@k zGBYrMs;R$V_2^b0hL-<<JO)nUpsgQB<`w;igeQXmXzZWS05<lIJVFU_5+r27CTKA* zFo4(n6BPhOOa|cLb!M;yED#GKG(lz%9frt`0r|Z&36!7_JxqCK&;~4!m;#suOVF%f zJJ}$1LJ~APn1dcrh=ETIkUT6wbAt7AfrOy@ZXl^p0kjnbbW)cA=%`58Fh6YMlN+oa z-3n-;<}qMkfZQkxiU=g*ig+R6#0R#MA8ZCBVS`)&34Z9%rvO-qAY2LPI5;o|-Ol$} zpb!8hF=3Fk(1a}l)-DRx0l6IloTA~2_(ADO3@nRj9>{8tdEy{>*u0Sh*g#2;5Hy$| zofMF<2}M$%Kzg4AvK6xpA`Q}nw~B++*;pz#8IZ}8Rd778<2q$Q0R*k&<iP%s2RSX{ zT^88=UuugKz<h9!6e)t(kV+2Z2;@pm$pC$v4ir3~FjEFu0nR}%KNYD!;#?JMp&H0g zXcY%?0@f-Hq!m0)rw-Ao0oJMs(TZq?Am<oR$Rk=LT3`*@Pz{(Z5*<*W;)*U^kT$&0 zg{Z%=M3^4PY$`>VJ}5My5oQ4PlOf1)8Sk>dKKN2wWCZ3zBFq@XhC~?15y%l{f)Qb$ zAOc00DaZ<Ngdu!YWCjU$bFh^bAY-9X266;ilz~bl+@%!!AX?ap980j7R!C+dR=&W_ z>9PjPg2NEoiX0n|G-O4N68O%!l++6R%W+!3%W-TCa4pBN13StdWG>XB2uHz|<2Zn1 zNneiR2nt{DavTr~c{z>~*g)uV9A~f#TtGt5W8~l`M`h-L{0An%E01iW)pHYziq&Iv z6d;12rGmEVxs`gEDHY&zw?N*>_z=-PD3;-X-B{!b$`yz;IBsB%{){bh2Z^`fT!Z5Q zNr;}{(D5=rUxVWf)eT;Q1L~Ec23nC1DDd$t!0`n+1GWIi4{V7)NC<k@G1%!D@3TOW zlkp)7>Ic~Bn*fkXJWC`H4U<5SGr)Na)T#!XS`-BFSuohr5Rg&el!siVfgA*>6QN6Q zLcxl|Ac`Y2U}>L-RDt0M*s7awkYPl5A_C+I=%SlQutTCidNbaU>JX4G5TOZLJp-zY zqd|rd<&YSVL%^X)N(dCiLIOMv?DTk$Z5RO#@)kJ26HAk_wnHYW6Ts>d;p$<j0W?t! zTZ)ndk|k~_N;1gt&;ycEz(%KnG=rV;rM4&y#DUj6bXkf5$|InqC?Jo5Dui^93!zI< zGQcj(1UU-k!YnWcQsHESlwvML0r?ALQVvKO98sV}XYi#cxsZs+1Dl->HV)DT1lb0u zT<|YNDFEv%MA8W<@L(AfwiKlZtOD#*q<$SDTNZ=lVM|d;z=oEBgfbxeKb^tX89~Ze z$Uz>U<2n=);VV%<<u3S$qRbM7l>F3Ug}nR{h13f0e$XN=@R1*hc}V*8ipoIc)%z@v z2L@UBTn=&>V!cTPI2<s74zb>(5+1jpLs4iDR8^2vQVoul8nAQTWr4#FxrhYC8aT&h zLD!Ykg4NeS)Pn~#Ab}0auCR3_^<Y^H&%xJ~G=St`-K$2hflVMGSQcmobI|p_&jQ&E zO7|@wd06+V6|BDvB!q2U3CMUvVF>G8wS$$T+W_rdb-;rjG!%riuA~zZWL;nzyTL|4 zG8V`UkWhklu6n>qdf`gG)E4!DIp|it&jLH}Wo%JD$X4jOk_lk#6Tvz_Hhifqngr%x zY6sZ_3X{nodDyy=DPa9mK|-)Fod)J$>IYc`(mx$!J+yB(1FU@}SjW4FwJ6mffzfs6 z{JfIH%sj|;5Kz|*)Xe}b5G#N!&jH_ERt&yfovS<}GdTl%ju^Pk2F;~HE+b9`7Y!+T zT(G&;Owg@oVDri|OEMG^6^b+S(sNQ3Qu9iRDxv$v6_h~DHpu3ZSzyOwdKVNjAn(ow z$-{>5=Yah?7bFBtLSW~Bt9?+_IS(uYZZ2aPz6XUC$jJGi5CoUTpk#wEp=bdl*(?Ox zvIuMzC{o{Nf$W8p$5@8$7ejO{0qa_dqzhypq9?WtEWaEgk1=$=0#xd}&jM-5_>cuH zgJ4TrR)RFa>p~KjwyXk~3=R^Khwed*P0-R7@YL&SP^dwBU~9mBSqpMj#=9)A+rQKn ztpoGHQCYMe#D?_1Kn_6efo;I(fq{Ys6fqk?R)8Z0)b9l)qM}WZz}*bCa0|##a6WmT z1#$u;N^lL`Z-r>x2G+VAq7~6)hJ-aDdUk-7?Sv}B>?rR71tUZgW(4g9X~P>qh%P0T zj`ALm*;I(4y`b=eM$ta7fA)hMmhmnN?D{XYMF+rqNE96eu^~|easYA^9m0qrQ1F1F z=rG6%a1<eYRCELq(nrBo9s?N*jU<pGutpLn;~`DG9)}ok0&KuZhyj>G_n^#yzW?VG zSj%aM7H}<xtP0f00FPZ3oq^bJ7Oean4&@!7Gs_3ETzu3p2UIeGcNCq6xcCCt#TOwi zj%XQZ7s5(z<faEC#8F2-P;a`r1op&bh$kQ;vsb_za7sjKlD^M^RdZKC2@P7!T?1>s z4%YE5A_iW~ftsB-b~?fj&jQcR!fLL}<kVt?#G+J%;*$KLRMc8a2{LQ|sg-Vk?ZR{& z$RnU^a1$gCtCennop&1~gi<SkoCm6v?to>$`5Q~E1o9ln$h#m9gL4)rb3ke(kO@Wi zAPM0<*p>%ivmmt+$X-b9!cr?egy?z%*7X=k7sx(DvG)Wl{}dt*UeW{^%!M6*@eEWn zz0U$^!YuZlgS3%f?7aY)4GtEvYbGvG$h`!G9JJVb1@_Ntki#<GWr1D)rMBn|m=BK5 zqPHM6q}T&F0J+$Ehf(Z-f(K;9dyp02$U!RhK0t!_BiPDMAY-A$9>@`ph(W8HKrxF{ z?0tq9@C9tZSBL?a#U3c^(TlxrU@hMvTEN8~vMNNe_XA?XPq6Y|IF#EXA2vsHegTzL z;DI)9Y4sao(I2oye<2n{Sd(QiA|oOfG7$e^D`Y@ogl9YdfnD|=;xb4P#9#=T{sN~8 zlp+Y$dtn60!+I}FhM*ZUW{?oZY$wQU%&rRySS`Bo(5?%sA#7p@dA5_y5IlLt4z`N} ztRIrqLAImxTR6c=xZp~@)E04rIq3Gi&jP#dWo!`-$VzC5$_v)c2iEZ}LKIY@W~P8< zIYGmQ(2ja$3V1q`AFK$|Sda@qSwjFM51Y;u1e+@a5`u=3mR4qF3V0e5WGCu0rZ89? zy3vSX2@#Ns!MP4}yk%x)N|7iefW*Moh=a9*0th*wfSdpcDzHw_T~**F0IJW5Bp@b9 zf=!Zwm=qxdou@=q3vx8nQSY-rz94o&QW|Wy48(9qnv(@{(7lZ4G0TDEVQEettX}~n z1f6L^nnBEXp9L}>Gu<hI)uUShO?OK0AVr^$RE7kI3fN9nuo<ABeV+w#1tdVBeP%VV z5_PzeFSSJ)U=F&SP#3<8Ez$&83r%}kVC~vq9q%GQ$v-o%BsD#?2vk?<fQ2y)0@(>l zZMq<XpreL*V1x9*Iv_Kfkh%+MTtbn7A$VUC$U@A@%MhdwZ{>yLG%SsFBaq>g)n2@? z=}2Rcub?%U3D{SrAlGHQ%L01=bgdDX4-S_ia}XO+gMl1@T!UE{qEAPH0tpmwmLMy@ zIReRBMOKhVw+7p312Pv{g@IgwR)r;IKt{zN!swIm7}Hy}U^DHI%tXv2!KSzD!Lr~$ z#5TR<0Fs7GZ-F+P7ZbJNybe6W<!Fd&hRX@;E@zO@P`@JF1)Je=0m+g+!{rJJWAF?Y zh=n}E<pwqoI>Y4-c7X>-DC1p3A!x53><UD<7eNE8pw=JwVj1vScQ6aG@`R}E#X8`@ zmgEv!@FDOz;Bi~f(IBuZX+YsHXm<O-{9WV;%2kNjF)wf+{fsU028q|<oE`Ilq+?%j z$od(g&yM*+b%STeKsz8n1w7~iO+C290id|UGeH&zatUmLEC_5*Fh~fxy$WVd#``Q# z^k#g>g8BqDM-~E7Ow_DSD99z?oC=yOfEipA2JvDz*y;$7Y2f6GT=jvR1u3ba(`1og z#ZeH&5pkeHyNmL3X_u}rd=Hykiv~G?DBs6`RYGUiV!`f@0|`OH8I~_VbwxZ#9FL*z zvq1g_6@CdQK?*aYC=n8*Nnl%&L8gI&^nDh{UPv(qnv^R|f?Y<F0#=y{Q5gY>9@xq+ zkbBZV;zYS89mPE`Gm0`G?#Tq(k_9pi>K>52*xZv1R+$4)3BK<Sehvl5LAf9aq8yY5 zcM$3+YWWZs6@cw21Q`c)5y)n2E-C`6EQYAWx#_<IBu|vXO5qN}y6L|R;=XdQtrZ|s zq3#2@1DpFQ!78gDD#1IPz#SfVut7KdSA!G~<-i)a13~2qhG9ju5Es^g?X3qH3w0sL zCD>fp09M%uQ3<{x2h<mbmE)jjZ34*=<+x_J<3LyUAe&Rv0&!O>*tRy1iBNZe?8oM= zcCgA0h)S@#K;;OmMgh626C_8JySh-^g=|hyH^f~%VB2~@CPLi>vLD%9NQWf!ffe^7 zDTb86ps6m{%=841EO9f_6G5(nwlODxjh+nB40gwt+M+2S4!q$=mzil$<pi3U26+@z zo=pY05IQqG4eY|{AV<MmI0MXqG!|!qlw!_IgZu?DX%<KtUfIBBre{N9VGh{rxnScU zodJ+-kXXP!Gd&Nib3T$zNP7cTEy8A|7l2iOor=^4hxWE!#uhCE$-`!*7l9333=+zC z7qNkXfx*8Z6*`3lN<^URdBBs+pi|9I@0Uo-1K&E4r%+y$S(3^HQUEy-JvBuEehGyJ zc*+Wvhl@2q<|QhC?y5vSB8|&2r#N2+JfsLOHb9eSATy!2>42s#KtiyR9Wv&aTB299 z1k@6Fp9Kn@!Pod&3UVBzkq^qx%fJDR5jTjb@8$5sGbH0;1tgKL1gEN1V9&nG0!I*X zqY9MhAdM>M#QJKm`ZW;s;ITJIY=TM~*u?r;uq;N<!6(+&fkF;?Uc-8@c^kkwK$+}I zZP7+B2VML7ERfZpT)PP*4;v-e4A#E|Bm^CPM$Cj~yw3s|k7$m<=GC`?m807L9VFNW zaviu(01a3oOe@+B39%hu8+U?@0J->m7RU{dK!T1D>;fy<4OjA|wrCHSgKj0%fiGi= z_JVAM&a3YOYu^vn0kQ!!bp_^NY6sZ_3X_8%dDy)AA+Y|#AR$<xcm&MB)DN->r2i<$ zdgu_vF|hXIU>)xw{E^ztu;~WyISuehhWs>eaX{KlHz&ZxV>$@rc94Tkg5+Uy45z>@ zIt>!S(h@!c76<pEvCJ@ld;>D@EXar8Xa%)g;jQ3vkVribw&4QUBv6pQ&jQ&ADeJM! zFI<G^x&+pB8A%t&HpKkG6|nqOh&-10g=?T9=Y1APQ^toZXaNM9_r4C&2Cr$c&3hw8 z<FSm;+yI#k4iu8-7eF0J(9Aa*DBNy>!VNk)a|`UB+aQN!yvqW+{!4Aq9WWmpl|^?! zY{=*g$N|WsGxsn?XF$ONvf@6-3UJgQd{p!R62uR|Rz3n53r@@Lvp|l3L=4*e0&GLm zW3ZMdNLoMv44XtiOb<MT*zgRj{5cNgl-(Os^a5hXORycUAa+pmE*gl>K$8H7wb!V# zkFUX2zkyf{8HRle=71v%soC*93sxAs1H}ilFnABv{sFAxT|@@t^lb2u4EhoqaG`*- zO$MT<BwwL8wL~E^4_roIv^r3i&S2b<@DXe;rb|Jd0;QZ!AbD6R@fqyYFCZakDFJJN zfa>$FU~zDUz*0(pya_V!8_4V6qzEb{VET)`L!$8q*oL2AlOUx8$WBON#8OK9g6R4U z*7XNT7sxh5De)I9{|_RMu{P#EC?CJi0%^f4BN&Vr7&P#f5wNu+SV{;+BL;>HaDb3q zLV&lmG8rLmi(xhbO%$<!oR#q|3+(nUwMDF8J~$eS*g$MZ2?25datXn1gg$-?3K~$f zaDc1;M+?k9MVv<9*&;5mh1?)Rq2&X}36Lm3D<42wLG98a9*9<6uvR{ZR^+uYps+?n z4?kF$08|;~+89AlFye|JA&@q_5rio6utbqC$ZRS^kq9XKpoO?7*gs+*hh@CW0=xc8 zZIL*b4~ZfP5E~LjAO|2vkt9YGfr1AVMN%Luz)^(oQIRwxq-DTX%7ToAMiR&oSR)Bm zh|7Vs$RlZi#tPU9L?NyKu|W~6TnUGA(9tPWESZXwA(pCuEmehB3O=8Oik6_vyFvVp zub5W@yG0%17DzF#0p@_C6l*cB35qdjF|P&It_{}l4txS1qIU;BK@T*90=?!C$)k`_ zc~EbWf`VQLY%``?LEZwTE?tm3tf1EeJ60bggzf4C1F!@**I+5>K|TeUXbAE>I5D9P z`WZpu));Ju3D_t|Q4g{el4P+I^`;PAW?)_BNV-7QA<7a9u)HNi9;2wY0_FDiSs*Q# zMZGmh6W)>pRK9`w-dM^J8<5H15Fxv$=K%$pEhx~S<%k{FFZLj3WxUG*yZuXTkpq|y zj>sZM5F1jCfE<8ajyPeIBcPxGS>X(_0vs<e{}j1E0@oF6p&Q6hXek160whXs74_~A ztsY>lo)E3bMLj625z*rXR^|;=hFR46fPxWM1o?ur;f)|f!H6Y_{6J<?A&UG#;RlVP z0I+`oK@Q7!mj!nHm)fErFdq^{!5}syia-uPj-n8ZC;|l!D2hTsR)C`j;iIB3NJxi+ ztppwZtpSZBkRz~060E3?1Z#-`xdf^O8Y^Hc5Ji17#D*BK@>m?oK?ki+vv4YkgV-7m zwlx7_EBH7UYTANQ*h74eudq)9J0=O@7)W8C4Ca6%6>DLi0*W(eVV?@to(9(OE}|Ui zXc|bH9j(Aetl7fT#0T9^3Ay?^xdb+*h-ln{>j==gdCW7&(!tKabU4V5pv0B|l82T2 znP8V^frN0KL6!}c1ZN~Hr9a5)AX9Td!2wQRpj-|c^aOjqC>Ijrd0@Np!Nx&q0FdpF zl#HbYD1hiH1nVk7(gm^-QN$F3<x3#)7&SmCs1SIc1=5091C)U@;VocbB_@{Qr5t23 zI8?~40l=5%RDc2wTD(+({Za*TR>r$5u-m`X7FC1!;0P_M0kI*)3&;V;#Y-(l@d64O zP~6mktN_Oi%s)l-kicyKTi6IP6k1Y%oB)XuTs1%wL~AoxYYRjxat#0qYee+4f|a#F zm4VU*WK|8M>61{@4hlwG5!3<FhBtx`<t3IV>I9ihg(&I*g&#DEy21YG0XZz=T^88& zUuuhb!F)&*^?}%sC;~YEIg0u*q6ic`peULEvH~1M2p<(qgoN}Yu$7ZR#zG?r<Or;h z1R7vPlrBY6AO=hY8!!!G0OpENXoP`nhgBid!CGcOw17vYkyRn8keLu0W`UK@#-SW{ zZ-J~ru4oR#(z#$u=RqvR(_0|R5|j!A;&*%%$b7I{7C_trsX!KjIp8#bwE|fLigIWL zvKXv=30TLwh&H4O1YFP)I@=7h<^&xk0~>6C^d!g&g)g;5OTn(f^asexprpGDBoC`k zmV-UA0wjd<RJ4^~S#Z9@QlWr?0%YteQ1F1$BxwIRtU`eVN6~6X3RnZSZ7tY5NR0xr zACfb$)F|s9y4HhrZ9vimvJ+8cZ3N42g2-dkD4Rir%KI#k7R(xD3rG{*0t;3GV=1n- zf=mVn3)wY_5GdrffkF;iTx|#YWe3Pv8Sk>dZvRqSv=ht+M`_V65F1ilfgFHbT<yjv zu0TNpvSJU&3UK7W{8O|S61e-o7VZZb3N5TaPJl!St{UY4MC(DY)<Y1j$TbQmtP#<3 z7_96FR2gQCaugJdxFYBnNE_Y=LX^K)qUbotY$`<22~hY!qv#~qKc_$r%XpUscKw&y zqSIhLB#O>}*pMg!IRH6|&SFFnD0o0obPi+%IEoNHDmo7d=?h>hFM^DPMiR&oSR)Co zM!5tr;4;{ND-Z)PYZPdNfo+G?C|AK+u0gbbYZPQvh#KWO#D*JS<u`FCk7Qs#z8@1( zDu7SWqC%lpbPM8y+h8Z$fjA+8rdFcVHjr?^SKHhLyX+psWsutDK9~beFIa1v2cYBt zt!*BHwLb#uco(sQfq?<k8cQxw(16~Aj%Y%FJ19sOZ>N@}7FCvHWag!Vck+U+lmNH! z!52ZmN4U5$i@_@+N>cL_@=Hs=GZo+k6yRkQ8sH_QnhN<v3i)|Cl?o*p`NgSRxv8lo zAY(!69>AqN;{FK*4baW^nkbirg3SQ$D0mF^2d2+KfdtA3PeAgp`spdy>(4+!8SlUu z3F39ogvN8QC^&axsh2>31~TpiC?LTp8<ww<ONw4XQp_u`>94`&K<XoqeUN;Gr9OHC z(e)Or>m8CVkX?uZ?>$)l14KRoR2xE?(9p<ADEbI0mELE8bYWIWpFsNXmUy5Q+)%Ty z6nURPhJyoz>{>|-6mDNY;RY@8zJh)94dk+ncUfTPf2l3{4(5X+vgikh4Jq<K4gkkg zL8WefQdZGVj3N&dKp-oAfvf;W4U(6NenUd}57^GXAakK*9>^7txIwF!(8|1j5Ci^$ z4PY<^?ecktS>}O4A2uZlEAtqQL6bL35G~*`4_OtW%wskNPra~!m9yedJ_~%3Z*pcz zD)?-SL6#GX*dTsj2m65o;)jUA?Piox7ZNl0N?lH{*SH{FgOs}5U=BFRVl8!fj2ReU z%guPf+WEjbXn4IQKiC3HCxKiK$|M3Hd025M2zHYYNC-N^3o4;Ot1v+YqA*w-ocFO5 zh#>!f3={$R5uEElGrTbUMWT@OAO^NU9BdM#NCepl$#z(ZL<xv4Nw6*{BwZle5JjRi zSY8Gqk7XT*tTA}24oDMbi6{rshPOn7mF#)xSPDdWklElsA-h170EL?ZDBPe0q9WKo zN+5@2yvqW+{!49<GMEpJ$|4mI8&V*G9DrOPsv4uu@`8c~WQ7{Y3UJgQd{m?k31SVf zm6{-9q2(dS5s-+%Umj{f4A2G}paU@gvpfWaJ$iYl3)Z3s(E=_HkyRneLw$%124Lle zIFwUxy`~Ywd}FZrCJ^&MBkT-h+-QruxDVnRY-I>Y4EL_m#L^`Ah9?Lk<F#gEktx`H zW)Sy*gX<6v=*-ZJj~SmbK7(?oIam&yLLlW&kp)O3YZoH}L&mMtjNh?EmZ0S7nh08c zqyyU^W(8Knzz9Aw)*5V!4M-^CUDke(&i7d$t1~`;EXra5iF~OovIVOECw%zssw_Ju z28OJij0_AY=G(#39jJTen^;sFlv+}hnOc^ZQ)CYbdk3(sj$kvPwjzfl$Wf3LfB}%> z!kobBogwPMVF7Vs#01(M#)sl?y@E=sl>B5+b1^R+wCVv>7KK;j0t)m`S+I?1u3%@Q z23;sS=nR|8)Z*A8H;^=BW11KP0|Sat3L3fjDWy57nh_!l3=9yqE{Y291~qqM$Obj| zYTD8y*ujt<;E?kK*#XVykdOl{FoikL3oMJ%f!-i#hy&Fy9hjVxSX>NRkc8qa&5Xrh zm-#?l23xFJnv_)ziBey%!~8&IV>k@9b<Q6oOXSu$Q27CNOHlwQ{egGRfmp~p=K{gz zL3hptfgKPG63TcN@ebW*8pWwaWvN9v3I(M}Ihn~i3ZTO@z!uo5r)H|_D5NBoBo?QZ z*s81RfDiQrGjdYPKnMK7*r}iiWH6^FwV)`q7|cvbEJ+13ic*X7bHJ?PlA_eaTre}S zC^ZqxD9Ox)C@U^WEdYz8Ruq(_7TKyBs_Q7^mF6aa*y=h8iOI>OMTyCkU^VGQnJExP zVrg-4W?~+gQ<7Me4s|N{NG4l#@QIe7ILP=gI5SZQBonnWK~AX-1;^9R*rG6y_+sSE zdzht6IHZ(`0LO5oG5QX^D5w$O9ekL&qe1Bhw0kd<A!{-d14Acr5{d!2BkMa4xbTbx zTM!2lg7zoD2}B{|eHJKnWqinj`r;R;<o;4y6c190XIBeiuR;RI5%9_zVr)?	v8Z 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 F^Z?`&<x&6u literal 332947 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 FJpjC8I{yFw diff --git a/documentation/Sphinx/build/doctrees/downloads.doctree b/documentation/Sphinx/build/doctrees/downloads.doctree index c2534819559b924ae3ec4efcaf885e5a4e219c3f..61e0fdde0e823e6da7ffedf4114e54f28364e136 100644 GIT binary patch delta 299 zcmX>vbwFx^G9!N$0|SG8QDSC_nSp*@V)15OMjtLm&h*s0)S|?a{G!6$exZCRrMU(1 znRz9tMR|!i#f5wPLV1dF6N^gX3rq7$Qi}`sc7*a2q!z>{B^IZ~mlov|?wfp$TUmC0 zs6cULUP)p_d`4z^MowmWMoHm;P?nthy!66@llge$bq{6C4dqKLEy<71Oo=ZjN=?hG zC_Eg>l$la^B$O{DKe;5cBque#A}zltxA5rXC?0v?V}7B$@yYplX_@KqX_+~x#f8Tw z_wY!moahMUE=nwqPt8kA%1KQrJn79C$_sXPacW6PW?p)6;i<`|c%(T_doyGx))t<b u{FX<G_iSz9xeTccwG5fs!t;|wc-2KN#1>u*Wdpe+rMU1?ZQ<q8Bs~DE1a$fU delta 314 zcmX>gbzW+NG9y<i0|SG8UShGK*=8d~AFfdT^wg4))QXb$<ow)%#N?8~-5sHv>8W|C zMTsT(MTL9(Litika|_}#^GZ^S@)C233-|hk@)YML7L~*omgbkF78ma82<0hAEr?G_ zEKZFtEy^j}KY2g5vh0CSf#S-%lEjMmjLh_moXqr$lEQ<bEIIjk>4k?T|L2z1J)AK& zlrOQgBtJegCBC32H7&EE@JJ|AW=i4FP`;G><dV#ioYeS=wEUvn!ef)YdE|wU`-Sqx zC+Fv-Wv0icW#*(77oM10%Oj<7vLlqcD6u>~H7_wKCpD$;ls982FWBA1sU;<udFjQ4 zrzh{`k>)t#&5)s3TX=TzJsv6EbG3!%Go&)qGGuBCFHC0TRTsG!TX-py4djxP;=;?d Jg;z?G^Z?;!d`$oV diff --git a/documentation/Sphinx/build/doctrees/downloads/git_repo.doctree b/documentation/Sphinx/build/doctrees/downloads/git_repo.doctree index 8e00af1dd48b3b23f56750f121c979834be3e3ad..b9eed9aea8245f14381bfffb754ef5b6b987e6ad 100644 GIT binary patch delta 364 zcmca5dRlaYE+c<20|SG8QDSC_nSp*@V)15k#<T2>oaw1~sYQt;`9+0O{6hIsN^=Y1 zGxJJPi}Dh4iVLUuh4K{VCKi>%7nbIiq!t%W>j>p3NG*s@N-R!|FD=R`oIW{{Q(1OK zs6cULUP)p_d`4z^MowmWMoHn!P?nthy!66ZlV@_u>(0(73*}2JEy<71Oo=ZjN=?hG zD4Y|@l$laEH<T|WKe;5cBque#A}zltw{YI%r=0Tj^Zi13<CF9A(lXQI(=u~XiwhUT zhKhk$@tJwWsYNB3`FZiFd5K9msVRjEJ3_gO63gNIMc#~|ykO51r<Rmt=A{=GF7_); z3KcD`%uUMAiBHSVFUiX<NsTWqNh~TUT;k1;p;%kEG(#Xmq&QTlxHPF)rX;hZ6l_Oc uVs2`2;j-Go<rz{LY8f)Mg)1h{=TaA08C$q2lnvySl;XnGwS{X+lk@-++>OWp delta 383 zcmX>tdP{VJE+bbS0|SG8UShGK*=8HYv+SY#>8T|psTC#h$@#ejiOD5}Q#wL9(^K<O zixNxniwdXuh4Q78<`%?f=9Q!t<t6467f$mF<tffhEGmgFEX^-TEiRni5z14LS`eR< zSezPPT9i{bW3m^gvf|88f#S-%lEjMmjLh_moXqr$lEPV`EIIjk>4mdHWis<7pJS8O zos&@(%9mJLk{_R$5?@f1nwD8nI5(6jGo^4|C|^o`a!F=MPHKEbT7FS(;rz+hIOXdX z_=WPuC+Fv-Wv0icW#*(77cPtq6$7#2GxLg5i%K%{^WszU5|eULQwkS#gmM=pmc#jr zy%|G!!5%73Eh)*&OD`^5;#Zm!Dq38bo0OjupO&9rl9ykS8ed$JSX5HD)SDqgv9@qo zhCqf$ai~ynX;QIFNoGkY*p9r!+|=U2<+X(?GNdxpGGuBCS5BV5r7p56ws3VQ8^|ju O#f58X3)hw==>Y(AIhCsb diff --git a/documentation/Sphinx/build/doctrees/downloads/history_changes.doctree b/documentation/Sphinx/build/doctrees/downloads/history_changes.doctree index 77728270b650974255ba2fab15d7cf018a20c703..85af8e30df2c21e0daa890b74e9173a10d891b16 100644 GIT binary patch delta 299 zcmew;`bczxDI<Rs0|SG8QDSC_nSp*@V)15s#yjkeoaw1~sYQt;`9+0O{6hIsN^=Y1 zGxJJPi}Dh4iVLUuh4K{VCKi>%7nbIiq!t%W>j>p3NG*s@N-R!|FD=R`oIbgLQ(1OK zs6cULUP)p_d`4z^MowmWMoHn!P?nthy!66ZlQ(e6>(0(73*}2JEy<71Oo=ZjN=?hG zD4Y|@l$laEH<T|WKe;5cBque#A}zltw{YI%Kb-Qy^Zi13<CF9A(lXQI(=u~XiwhS_ z*5i^=S=bTEU6fcJpPHALl#`lLxX7C^lo#yo;?$Co%)IpC!o`zwxTHCjcr#=u))p?E u+|MP&yR5cwd4^PmT82z*;fl%IxYR{f#uly$Wdpe+rMPf)ZQ+{IBs~B$wsKqm delta 300 zcmaDP`cZU)DI-@Y0|SG8UShGK*=85UJM5wS>8T|psTC#h$@#ejiOD5}Q#wL9(^K<O zixNxniwdXuh4Q78<`%?f=9Q!t<t6467f$mF<tffhEGmgFEX^-TEiRni5z14LS`eR< zSezPPT9i{bV{#&=vh2)If#S-%lEjMmjLh_moXqr$lEPV`EIIjk>4mc=FXWVGoHO|# zr?BMQP^Qe3!g-;5Df!7InI$=?@fB(LMY)CZC%@&C7hd2O${U}YpO==I9-o$(lUiK3 zaI!p?l**!xQ0}6{^7z!e#H5_ml)}Z{jG??>mlmg%lw{_m7Z)y>9LpumvDBL(L$S7S x+2jT;Dc<F^g)1_oGSo6;Y719RUe2X1vMRQ4btqd=YFcJWap9WU!nLJIdH}<wa$*1g diff --git a/documentation/Sphinx/build/doctrees/downloads/tar_balls.doctree b/documentation/Sphinx/build/doctrees/downloads/tar_balls.doctree index 75305e3b557580e9b68f29d63fcab7dce0c3758a..c0c0cce40e77676b49bbc800de64213e22f28cd6 100644 GIT binary patch delta 364 zcmaDYdPj7FDI<Rg0|SG8QDSC_nSp*@V)15s#%t`3oaw1~sYQt;`9+0O{6hIsN^=Y1 zGxJJPi}Dh4iVLUuh4K{VCKi>%7nbIiq!t%W>j>p3NG*s@N-R!|FD=R`oIW{=Q(1OK zs6cULUP)p_d`4z^MowmWMoHn!P?nthy!66ZlUH%d>(0(73*}2JEy<71Oo=ZjN=?hG zD4Y|@l$laEH<T|WKe;5cBque#A}zltw{YI%Z=CY=^Zi13<CF9A(lXQI(=u~XiwhUT zhKhk$@tJwWsYNB3`FZiFd5K9msVRjEJ3_gO63gNIMc#~|ykO51r<Rmt=A{=GF7_); z3KcD`%uUMAiBHSVFUiX<NsTWqNh~TUT;k1;p;%kEG(#Xmq&QTlxHPF)rX;hZ6l_Oc uVs2`2;j-Go<rz{LY8f)Mg)1g+;8GV^8C$q2lnvySl;XnGwS{X+lk@<ViH=AB delta 372 zcmca3`dV~@DI-@t0|SG8UShGK*=85UYwV%?>8T|psTC#h$@#ejiOD5}Q#wL9(^K<O zixNxniwdXuh4Q78<`%?f=9Q!t<t6467f$mF<tffhEGmgFEX^-TEiRni5z14LS`eR< zSezPPT9i{bV{$a7vf|88f#S-%lEjMmjLh_moXqr$lEPV`EIIjk>4mdHWis<7-)EE7 zos&@(%9mJLk{_R$5?@f1nwD8nI5(6jGo^4|C|^o`a!F=MPHKEbT7FS(;rz+ZIpymY z_=WPuC+Fv-Wv0icW#*(77cPtq6$7#2GxLg5i%K%{^WszU5|eULQwkS#gmM=pmc#jr zy%|G!!5%73Eh)*&OD`^5;#Zm!Dq38bo0OjupO&9rl9ykS8ed$JSX5HD)SDqgv9@qo zhCqf$ai~ynX;SgzRxW<t<+X(?GNdxpGGuBCS598Yr7p56ws3VQ8_4}B#f58X3)hw= G=>Y(O;E?G6 diff --git a/documentation/Sphinx/build/doctrees/environment.pickle b/documentation/Sphinx/build/doctrees/environment.pickle index f456d33c4d67382e3942142c60e15c9e1b82e56c..ea3657fc3b0cd668ed0cd3a5f1cbc249f0329669 100644 GIT binary patch literal 288702 zcmZo*N-i$Q$jqzIOU*0GEXvQzP0cIeaw^TtNpVFIC}h-ZEM%%JWY!2}PsvHk%t<XS zWP#}{Ey>K`a>*~x%gIknaRbS56|!nJ7P8eAvL}TyCl(YGa`=VvmE<SK7pErYmF6a; z78MtA))sPw@)o5Qr6#7tC+3tVRu&g>C&$Mpm1gFYWah=ka}}qSa24{zwgwgQhO(7p zmVhkft1aZ$h>&DpU`T;lSgfCsSzMA|R2iR~k(igBT3jfQoRXgma#XQiUVchyF&9`b zSD~P0W1&!Op|D0MXHjB#aeir0a%!PSC_^Y$Vo6C+W>RTMYH^`xZK0S(C`U?ZL0)2R zYH^`>Y$$tjPGWI!YH^`NY$!)kVsds-YFcrjWNauaM2S>vD05~?aiMf<X(&f>MrKY* zQEFbHOl+Ynx<f)zD@wQu<syU_7#KVtu2#rTQ*eelT)wrjP@%R^Q6obHmlCB=wt~c> z)Vz{H<qV<Hq{LA6lEie7GYVBgS;77+R4q-4U}j)oNG!-KRLcN)TD`VVLnA{Zlp#a3 zwont<cUnlk(?<544%AP&a9`@hmS)Jr7V2lnMaVEPFgTW$<SV$R=A{-TmZYXAxa237 zf|5>RNoIatp+Re7p<!*I5y&G16&q(LXQ-DZC1${VU{aa{_CF$u(=$uri&6{n3r)cu zGOH~#hkM9EBSSnkLn1aqGB!ghHbWZXPRk6r2tEb|2KUSog`m`e{NhYd8Y#4DZ7j5| zEwll-42!gFhH{1(*ew~LU}R-rV93l%Nv$Zf1KVp~Tj&6{*Ac6|P8o6$`V0&V;i);v z`MIeICHV?zIjI%#sTCzfiOD688fF$NloqEJDS*-_Jj4_Wom(3VU1|$mK@QW!tzR9x zZnq5O410vT#lh|_E=kPE0Y`{_enDzcd@d+66uN_b;!#`Z3HON?R-brh$VKooFfjNR zfZ{kaFI@p*fKO{<p>J)WAIPQH<oz?0GdvJ(VP{}qC@w81$S*1>3;^35SX&qbw>ucC z-60ur5g?7hP>rFjjfG*gh2bDOk;Nl2lrsVmc7e);%seE27o`@KW)`J_!nwFG5^Q@^ zZDBOr_86?T$7aYy@Gvki1R?8=Yi%ryuPsafIRQg5F+({c3gHe#1_p+LqWtut#N7De zlA_Y&lG377eUM0ea(-?>eqL%`NpWEk*geU$g(-0Nq+)eXS_Y)Z2!I%=;EXUMy|uA0 zqqZ;;<SJ09f<;MIhH^$S!fl}Z2ugtQ>7|(|srt$Jc_l^pIq@Z_xdl0ipb{_}?5v#H z!d$qs@~}E9KSM4;jDdl{+21cD$lpg7R4phV%qeJXEG(=oECM+VkFw$n<%}GJ^Mp}~ z_L9V+_@u;~oZ`X~u&YXI3(MfHD#z-o3TR-#DkO!H#3EgY8I`S#g;lkM)gTvv0t<_h znhfQPQiN+n5s6p7Br`cXwIsf{vbZEQx3CuMp1Rt?dboQUu)3!)LoR}sfq@|etX&}( zqP?lLv9P(eum$84Oxe~9<%~LnD>#wEq_7Qab9-%J2i)dPtTuOL$VGs(!n|2r*xlM# z*i&2B3$hherY}P|qa9%*H<G{85(^9a!FEolEu09qa}riNCuhh-C@?TExH$$Y=qk8@ z@?UCRNlv9gVsUnAib7#&YB8vWC@!4R+E_TXws0EADMV?Qo}rvE0pUVHY+0;u2H2f5 zYYS(=-8mbpJLhD`MSzTe<(FVsE-jqf+E_TRws1bkVc1nH$WYFhiExQLHkUv$dwyAJ zQCVhcdEr8^yB5_JE{3~n308M4&5(-_U|?W?xyv7B!m`%J!sWGvD?rY|s$gY?a>gQr ztGE~#7!cXKa241At7{9_z#Xs_s{__$$VGtkhJxxScTf>gxW2Wqa6@h3Mv&ELQkycA zGgc!k1%(&FQvHnl^7xYc!p&g2x6~GHh1<OitKHi(<RU;-mq&g%sNO6sPDQCZ3wN|O z7VfMq+y!z7K6Se@lry#<Tm>qvk!yv*Jzxjztu5RKchG*U4mtp>2t1MMl){6pjfID5 z3lD=_0Wumz@<@hq#$JTgpb80E`RQlp<(KEhCzYlb$7dE7m!=jM9tFGOSZ(2PxI0c@ zb;rpJxd>2E<P9=H!KpO8SRpYlMZptd%&FGK!qc^dXFv|Zt?F!sa>g-)%S4cJcy3~5 zPG(+ud`@O@N#QxLqt4eBUVuC5B34ITf);GP5ZwwsnZ+f=g_m0!3$N4`UIjS@RIs7S zUdvF<IFE1yD0q-#M!zJrxFjAbQg|Kgk{h*!H{mY1h1Dgup_v&uCKNzM72auWEWBG= zcn{<nP~yZ?aX&*j;|9V-(zr8oT26j>;RCRn9@Z8<g1hN4RyRF?CLLHtb_3~t+S*w7 zthVqu$T^^-gChANLpkFi+$E)<Tq*gviJ5sRi6x1JFKY{5X@oKtm!#AdzSaokO3cg8 z%SlX1%_*)ee4_zw=%#0uD1e&C(1z~Y4AW4)^vn`nB(ZmGp&YsSDUcTJ`%vzJN?jN? zl%Wl5N=jyNVtRT}YC5>xSok4B4V>_D^HWN5QgzW}Kek11fQp&Sd{EV2T=*$N4cuac zst(P}2loaGKevH}L5<MF5=2AtONM(WKU@&xl+@zFuWjI_Kd7x#l$fi4)Li<OkrXNf z71u=){|?as?FEARQ?QQUj|_oOA*i@+ewr>!{3k>Qtb2jfLim+Y5-J1}*G04(ez$?^ z@Z7|r;-b`&qRiB?#GJxE8EO%rYy|bLZ(>n#5M1(aTLh>Qg*LB1;Zyi8Lk;XVsCs8e z%L^1lh5y^YovK7orz#!ZsY2-@6frO|Fl4BO%77H<!WHSFDq>`0U}yu^Y|xNWfVV%3 zm_P>12o;3N=ptm8!MZ>x5>#Qs8q7s3APteBJSc*!V6~vk1kI=5lmgCfMQk7q*Fy!7 zWpqIqv4|b43sifgCWHDz1&Ku^MI0dIYGBtw!^Ab&Ehn`CEXfJh0qTL3<mcxU7jZ!p zgB%G}3=!uBs{?fkpapFa4@hM|C_9YL3swOtjGzUb0;r%XF5&~JI~U3e71f1^@`F{g zfs4na+{}_90gy5^Nc=;xL2)TqLJ+JHWG<v>r~qji772kg)Q0jxM0KH}!eG^){8Er# z1nL<S7m0urs)cgE1w_GWKvi1?_A0PQ45VdqsCY(xxo%0mZfS9<E+{y4q20?OagYh2 z9O<cf;9OoL!N|an1tLHh9Mt54CGO%PNsv)(p_~X2DUfDx^8=bh6krXQB59D~g`oma z30=5^3|J4S+5y*Z3ZVK8TscANxFT7Q#-pL4U|C&|tZrgniY`=E4y+p#gz2dz@u2J# z4=V49<UzVnau=$+0$3j?EkGTl04kk}6hYb^gz`WIb-{v4V6~t=bvgDvIrctvkuu0I zyHFjdE>LhI2eoc7DD;ca@}COWGEjpyEwNBRS0N3Qcd)jAi&R18_lL@*B^K%;l<9&S z%DV7|a*-O?L{J9`T9%;ovx?L~=46M8AxrDRyJ1BdApN0i#i@x!$r(kOp!5JDK<NP# ze#lw1NDE}to=_eXL2Zx$;DSCKJV=(AQ=|h@hf>zN7iA`emSpA>>4H^*vLhsy78mJ( z6^F9J`1)WKpf+qlQ7ULKD;^ZA;5=^tRtjzdLR9NwC@}=<2AK~Xl`Ap=Yl4r`6&b@- zK)q390#*U8-=N0AWK6+oLB$fN*{T5U5*L|)l&=cq0tx9tgv`O}Kz+u{yp+u3R7m@) zBrz!`wYbOvq~0!62r30m-%u$_kiODT_OjHX;>`TKA}dA)25*K?&g9GzaIslj8_EW) z$BV2P85lG&-e#C)yaPKGb>yl&1HHnA4Zr5(Cnx5la>a)fCFT`F#(M&a@+&I2iflk8 zqASZutg4JJfvQdADzar{U<hS{3<4L~fjI1t$|a}B9>nAE1s8e>o}h8CA_qnWhLXl2 zM^G{X>C6J@$O0+M0!g(OIe~nf)SmGnLoMSY*dM5khW3n48EP4y!RZOsKxohSlHs25 z72HTb8*OUO_?D5B@f}=m!dgp+;g9x=9~lA}Kf$t?<EiZ#zcNZPeuHIUePBdg-=6U& zLoMSkxLil6y4y4UWvFHR2Up)nb#!|cqyo+YRk7gO8s89Tdlsa&%>q@e5un-<=6ZNf zvpow^zh;4IRE+Va_AE$cngyyk!3JQoUE8xD6=)Wysswl15Y=aU7Now+0#%O@@LIGz z3sN~|f$Bu$5w`X$NNtz}s{Wv10`3$*n)U5jkXkScROdw?D#!LLNM)A=s@=faP=-0$ zvmjMm7N}waM|l9W?rYD2)MQzp3JaX!adi6H!L=8d2xZ6ur|2xygcr&RNt(`(r0Ies zX@aEMi(DZ|GYeAjWr1ot)bWw_EJ!t%1*+7*^&l+LVBPTcEJ%Hp1**8fEn}=*vi2-U z1(pS>r@+C2Qhl{&K`N>&P}KyEd6+$*UP5~oq~^&2)g|PNCAVims+KHJ)j`x~OnVlj z63GHp7I?<=+Ot4a2bjPW8Qj6(ibf$IF+H`&4H6~pSfT_Z)n4QQjS@)3lLe}3z~O<M z*4win)lC+tY5^xASY^|m1*u!IKvfDjHABj(;`S^^O_BwwEx-|pUXQeAL8^@`P;CL$ z>I|9WY0rYx7FnRG0W1NnE84Rl^+Fb?E&%5?#1Kh)7Nicy0+sjR^2QURnrJT#WzSE_ zN=+^)F7jk#V5kk{h1CM_pb4egP;OAOCBFbXK2}>A$_eeRq?Xhcd4WpuENJb)4wa}a z4P{KOE%FA-fsKT!C=F#QsH`pWK}Zz&g4p0v3sFYsAu*GSQWHy3i~K-UnHo5Q=cblq z<fjz*gJLKGG%5=X2ff_v_|&|z_%cvmC;+0KgMon|tu!wg<n*FIuntg>2P@z8V2q+5 zh<Z?Y1g^e|g29TF7#J8(%3wWIUO{P6PG)jZ2t+ri84I7WD+&dhpavR;Ms%q3kP2=+ zsKet+5{uGPONzp<nGy~*1=Mas3KS$}Zc%Dsd~$wiUP(~|HvN%c{h+aRWSf!M=|!0- zMN!!FMuYW&>_%3P%+5(IO9k~#iej+oj|J<O#S;Q4C7HRYMRC|P$AdM4#xRjBL}n)@ zCzn(fq!uM$)1C;{4w~;kjWJYSL1Iy2Zc!381Cqf8NH8!kfV*>gsTHZor6sBH#idCF zMfu68#l=M_5Pc|#EETK`WG}K)k=gmVsp*L+nQ3W7X%PLW$tE3a0H}+Oq^T$atTdDj z(o8JM1S<mBf?j^;p$imcfwh9mCwNxK2J2U0U|>K>N=VG|qRf)ic+m7MICgU&Mu4hU zXzt4e8z2P_or2Pmc+glvd`W(MYI1REQCVtHQ65AaO8Df1HOk?%8J?mFAevDFrx2_g z)Tx8!9Z;qR4Y_3Iq-NzO6%|1=q1adq)&uIwK_W6UFSEqZ$fBqOi`r7KS`9oYHaR0T zIXgZ%KQAQ{RHzgel|hU_3Y&7UA^5UfPHI|7Q3XUJss}5<dO?GINU?#$OaaY=6;)x= zS`F5UFSn-VrGR>|sYNx|^w+}mqvjD*9>@Vjb=dURgZ1Ofu;4CdaY<1FHtmgI?VwOY z@-7k+oK=g9ny~3@2J6LF(4;1pW~LOiVAI?R){M{Hsmb7ONl_a%?d@Rgpsa)%P^i4b z<mA$##N^7N4s2$0g3Z9^{-V_4{G6gLY?`~lnn4ag3N0jNerZWTX$dHEg7b0@HZyv` zX5dRZIr-_C$%#3|MSa-x_k;C=ay3$+g;LiQ6s4wRRuoOZrh6h-H)tdQRv*JFX1#*M zl8mBB*mO+>>jI5)Lh?1JC7Y6&o0<pe&=wa>f#^Xg3Z{a!fQk>)zMo!7VnKdRWzjS& zdZvT*sNyLSK%);v@S%bk5HnD-^-QoKgjy4+6$PMTa~3ueW`j+@7enwQHV2#jxnTXu z1llt>sb%0Qbsjb&<`ZQEXqc=xwWMePHX{~-jR5%qDS;v}6O)s36Dx{KQVWU}Vbi}D ztRGJyQCgImmRz(1o8F~hy`WTvNH3XrY57IDkP(lfWe{B`DP}oX6Uf1+`5Bc5cJK;_ zcGQSp3DysCFs_UN4)0ai^sWZ$1vv-SuP9mrR+j~-{_z%BC6Fe@TCfIiZxYcmT?aN8 zRLQ_<Q79c>mYEozo>-Dvo>*D59-<XwKfK+r0jv|0ig0-cI@kv)Zi+TSOh65hO<*Gk zg(x^wHe=Jj1*{*`^ugr>NP(A<SyZ$Yn*rOv27rdl&<X)hN8_UH5FIF<-T~I2ho=Nc zEH2JW&ja;7ia`w^Xc!djgcyd@G}r|;3S>I0q$}DDRs@Ywd?jdVMJmWod%)_^VstOq zTznM>xYb#-51Z!w1U087Cl+KD9l)mfAXqcL1P;y|hp_2A4AzTinH3b}r<5j_6di#m z1_cv5<sAj9MH(2^1I<Ae9mAsZI9MqtFhErTeC%Ei(x@#;EzC$wOi3*&I)O#+Nw8i} z9}!YW<bjHZocPp=%#xy0Sk#{es|R@jr9>z?16B)-RZu4tVq9@%PHG-##b7RIp5iQ6 z5o*i)9N0j7=>Sq<6`hA@M$KFoz`8+|6^e7vdaa-!f%I}OVl(6t*bq<-!)FMjMRFON z0aw5VfU-EO;L?LLlJg5H<5Nm=b1UO>i_?p)Li8hLk!xVhsKs=0Zc0vOUTS<|QF?LF zb%+*})Nuo>3Dj=K=j4>k;)0yS%6M?8e-mO1lFhfkhJc)n&k%5T`8Gr|YT(}i>j$Mf zTqP5@b5nE|o9269&G_OS+B&$8P4@$^ZqU>PB%OiRE~h4^=9Lvags4Xeu18?yh`uc- zpMV;N@rlKtWr3M_=|zvRXnO+I2J#?Mm5sy%b;v>e`KJ)QsG;)=tQph<Lehc6Oi4{l zPL5B@DXmB?E_x0z0V#4`fVG2WAYmmZqKycuY>JCsLiC{8`U<QKRM<nSI8cYNB(Vsz z?yl%HL<dUHya8(fITKeT7MCOzl|cGYZy^StTKNua0;os;1uH18ffOeey$36X773t0 z#AQKIW_m_R(Fd?{v~vC<*lbW+A72s$C$r4rlA=%8%=ip81Jnpc3Vj5#=nF&>Vkqn@ zSOebHMsiv)sBZcO(TW-#-@)1mWh?MN&<||-e}eUcroxaM`3tNP8knF|fg>=BeuEW) zCmJ9{-XE}WngklcpjK==bVWsK(O-xmNXhXZ*c4DQ!50zGfxZ6_?Wn=Rzyw+l0g49n z5gSO&#>fO(Re@SLFoE^pD<l$AQVJ4_ikKmqQEg-a>jsV4z)NE|1C&&=Q!9&$SRp!* zyvhdF28w<}_#=<dro)pPJ47$4tsG$O_}rXQkdj)GSj34<Hy2npzUD<@QEFllH#WUI zV7;J>2w4}Q2ce31A&OD5Js(&t$dfn{5-3t~@(YTK_#wJcJt+XzPAEAPmlUNY<`xNJ zGeHP!0w|a;%eR!&oYaz3@c3GBkuXFzQUr;>wc?1N#M0v8%*4DRQHWMlr;CAggF+a) zZm6ThvFVin>jh;$q|!AjKMB5QyGRnE4JE9lz`8)293YidZe@IGQBi(Tku(;?GGN67 zLl!dNC<`$F)q`?i6YzKtqE{Z9UInmTP_n=tIH1xUQmiOq)2;;8j<2jw2gOa1GB(XB zV9ogE4?trM(DgN-(pMFmDQaL-kk&KmrKIM7#xKiKi%Q}_dzw;;)FB#CB1r?R51-Rh zlhZR(iZmg5QG;9ytQk~;fMd8w8>|RgT7!nRAvqD0r}Bz)z>=s1oi5k_knPyR9aKDn z1{w4qdQolH2Wuu&;eg8x18n*Y!TOQg45fLXIT~=A!3d%QC9I6W8bF-}czFtA6q!KO zgTexmP)xy!v6sTdsU`8?QrHZl3n`PEgSCMKAYoTz0agMHQ&8&0Rd9i8R!gvIwAO?b z*i2B~!lf59+8dvoQJR-sWR1-P8?XsTSvfH~H6D}}Z6T^rg2@i77!<Cc+6I($zzriv zDzL|*!2zrRRJ_1~6VZ==tRi!S=mG@`bYj8@tOrz%;__2*Zhn4AMv*f_D{9hlf$PSe z?lSWVN=rcgbH%3H4Xhgx8p%1SiFxs*1x4-<)hMCi0ags!rv%O;dc~m8dC-c#B2O%; zy}+tL83LELa`MYli;BD<dQpAl1J(@c(BaaYnhe^h2$~u9#b$sX*Z@#5h|2(2)88MP z_5iSUe4|DwpxqaF;BmO3Kx{??fsFtSSz(VD$V6f=HmxCGt)PY$+IUY&Vo_pdUQsAS z6H4TSf%Sk&P0ZT3AhDz*wJ5JB9HI|3s3X7{K^=ZbHU)JzvhtIPlZ!G7N{S*OT2QQt z0_y;kR=C0zlqk{?GjocfA=*)Gi~;M%m*62ATZ>|`>5c>I#uu}&qBb6z_5`qYe95x3 zpdhuVC=r|HB(P?DE{C=~lCkMd0qX{(2wdToT%KH%icM=8SS!9D2Up9WCQ~{#{TX2W zAYWrojG)W_nwZYSra23&88p6uRtjc=O2gFRqHKsRlthvP*2D+eZiTWAz9<*07+MQ} zT!d<9N<O?31KMg>lm}LhTG!@-&BhlEsU?Y^PDKGkGivfH1nUMx1NN{04dfOV6=Bm_ z4Au&&x}YT>c=d8Txc!JUi(CTHixM8CV6C9Vme7W0Q5jejG$24`Vs{R7!A3b)HClC8 z0X7um6+C^qqDqKXM1@`j)&>ec>{ccv7N>&i;A)6Y)bOhT>&ES1=%`OEHobLVy`W(n zXefY6o8<gFq^4axL?24vHGs8&5(}=JQ&g0hS5njn(TnQdCa`9Fc?a&_W^DRf!1_UL zB}k-~<i~?&cH=WsidrEWP#oI^R*%m<c%9r1(T?ig4zPZF1srU`sS}&_F0gilbMx}^ zQseWBK%-<u-4G2Z&g}uK#}~FKsY#{jMZFNcsBY~8YX-H)@FYMzXmQ?;&4dYH6L6;{ zsNRX#^iBfn1vN~ur(<w~c``PgQ@}bw83$K_0`>2wV$(VetQ9kSLFsQgL<36r&H$?? zVlD<WRE#_qGZSJMQcH0b*eHCh5>WpNwEP>?;F}H6j~Zcfz((LpTqXJ7&1*$-A=;6w zp9j_p3N-A&4H;jb57CEe?E<h?+%W|nqF#ti=OVC9P;P>i7?AZWP#&mX2wT^(7@{8~ z^p}9O6B>SmSDs5DMxZ)=8Q2VbjZsj~0Mb`lj?I7-U;{v7-RJ{nMJvJTp_Ks0m$=en zZen&SXw<l96<7yaMX(xd1HNd5&5^FbrhP3~JMK&f9iv-^P49ZJUfihyJl0mU0h`v1 zaIL6q02E%)CWuy)Xx$9f393g>)an(bf~KkB^K(*)wqVh=6|4=^Jww%&n;j2b0JaT_ zuI*r5xT{O}GKL)x&8VqoCs;RVPy~CffhUOq=y2ICh$%=JZ#UQo+zx<``tHHdx)-b! zl(3)~Mi1n3C_5fymTDhFGfFt`2Wtn}j4NG2n<ob#no+%ekO<x2)encT={^kB4XRsk z*^RXJ;s`bqj)F}9Wqw>i4_*}+51D>1ItDQVDd3NT4FHwh_^P)8P}>7MMF;A6#3vV* z6`jB^>Ll1GkZ<rARg_v#lv-SL3Zfk~G*5#~0A(~>;Za_cR&)lN*0Uh3rHFk)=a?86 zYKzV@F)(OkfoAhHGSosDLK!+svOrTl2p(w80>J|<<v{R2?RW$aRE{BdpphN~57f{_ z@Idp-2p(vaD1rwXb%XOt5lgVMiffB5fL#k&n+<k9T$(w#prE$sB1k@zyC^>&bg)Ej zQhp9>yAEXYZ?Rr-K>=5AB}j&==n@kHgJxsVWpF@T0c+*YEDlOdNlng4EP{0FuQD+( zbcXW5_J0L{R^ApDU1MTk@XJv43+0T59Z*zsor!@VHk3CWw3pZ!dTLS84X_{&OuHj! zCio^ub0{~mEw{iz>?!%lpv9|2x4~S_%#_r;68|Fqf}%Shfzl+XZ!@H7OGBB9ic4yX z?t)yM1ql$ya`w_tmfXaWjM}1m2&qusjKt#j)WTA*pNeaX?t|nq1UfU+Ix|c=GweDu z+&eP@Ix`|WGm<(pvO6<MIx}iJGuk>c`a3gbbY?8<%vjZ#vAHv2PiMx_&Wv-N8P_{A z9(2NE2fVvFxuhr+yw>9Z69Yp;3IhX!eo<m(ikX3aUShF+Np7;fV_sgWzGq%ZYEeNx zWM`E=sIig?Im-vkh8^q^UuLdnsE@K4S3ekhvX(x0^cN%rvah)4ArolBRc3BtdTMde zBPIq0Sd@c~tl|P~2L^>{XkKQaOJ;HjSJ7igtUm$e5zuK^MNgR+7?MJH({n&G0Qq2F z6c;^%OFsvhF9O|h2HMsSUqxH=0-8ATljGAe(;=<Y;-Z(}^z;g(jW;<zFD)}YzPKc@ zq_nu`H4_7aHzPO}Ym451;viHAvQtbi1-v;OoIZ=*f|bEHk-Y<P%|a#6RYFd=N-ZgR z4^qGwDvYK8lnjbKfaI9qa;X(1dY}_DlJiqii#~$n7%`ksT#{1s2_hwcW@K{FXNUy4 zvx|yLioQUk_@R10R+Z$Z<QIK~h)Y7nVLr`DEK7tAFnxol5Jgi_P+5|ZpI7u9EL#dX z@hl}jJ~1aJ9%O8B(GO7GD*6cuXSU*^WKeVW7bxY$&@AOa&NwUj4Ym>zwMBoBQXE8x z%NZQ$Tt$B&DeWIPJ^TkpH(x<zI%r4(v|yn!C$)%ynSmh-6v3f_86~+n8L2r1@t~e4 zD9IKvGBYrQ@`G{+ELWuDCl@h+M7cn!<4ZD9b5o0$K?2a2iZ3cjfeN#Lgt>APi%U|A z;z1f&K?1Ch5ok6Ln-}7r_~Ozu&>~lMW(J1j<oukRRPe@=VlMxpl+>cs6iBw=U}j*5 zE#hQmV9<yy;sQ~jEP9}5=VoSL@Jo#?;sJ{>>*b~t@j`|8z(Oo~B^4z_{9v)v)}SH* zkllhMsTH6FEg+YHPdY0u5(L{I1k#fQb{`M2*NcRi85kl!y$57b)PvHBL_lgleIrmw zqY#jhnUh&i0Ny_BlbT<UpOd2Ck(dcOFE2f{s7MqP_8?P375wv36+laM6jD+lNis7( z4|MWDK~a8IYI2EQD6em3adK)-PGVkaera)$7&8MyNs%}+14CjcCunUDWbuOp$a>Hm zy^(>Tg^mI-j*tWe23uljNk)EAkrc>9AZLXNq*f&7l%}M{Lx*jPi=@G!BLh+n-~K8K zvJZ4Now=T2ksL^hGdD3Wz5rYl%7Zm1z=Jaj<kc)t2*nmD!YoSkW-KXE0{erlEHS4v zwYW%`8PqON0qG0n0v%yh5ucNvo?oO2ia<ZV_E53Jf`Xh>a8d;)rqm*kD>I7JKn~#7 zFD)+8Ps+^G&&UK7z(wjHQBJs)A`Or+?V-YOk@(`0{DSiQqLktyO^{lq)Vv}sko%x2 z1;9zYI3vG29#TFOX)`l0bcC{i#EWzw#z7S2WaeeVQnM~dA`2=l1X2q=D=aa&1l+YP zF46;;0#hK82U<#<nx7Y6TAT`+%mO*6NFSsmlo_-h$pB<rdniBHAaI2R@w6d0l#M{{ zh1$grDtEIIE8?N+wu+3wN=(23$`lh_WD53WOl*-EGXp~^%mrLU#U=5n1(`Yd=|$!s z%d((Ws-QS6F(o%Y54?vXJ}ti}KD8n-w*b6pnwf#26Q+eDwV*U99<+795@Z*9X&(5v zfFdi9Goi-vfPDg5^9k~eH8|33K=M#;h=b0>NXbu*Pf1NnEX^s2hwh{+vIQ%(11W_X zC5ed3+|0cAlGLKy_?*<d^pcDsd$3O+F_{I*9$BCS5A(AC*qtCZfOo>@7Zo{xj0HI} zlm#SL<OtH=9x9QTk`fPFR0$e+OU*0ENG(n+E^-1z5zODbU_TXSrlcl;cGEe7UFrfd z66z`bWY7Y}#PrnoWJvV6g5$;w6iN(!?V)@HMVYyYMV0Z8N~*{mB*9crS>ypS1nOM{ zP{<TR3Q6#0^LWTE0eDeX<cS;^Tp*7?PKPV<VrF2_gt-<{h8LHB>H%+%KViWlT%4Jg zo|B5|86S`fko_VCJ8K4%u5<JApspzL1$)U4q#WvNA+QTzB?@Q&p}5E&tSSJc3hFJ1 zw9NF<qSW}D#Ju!UP!NF>g6p9`P%#4<`mY8xtZVhEVM=PNQ!7epi-M3$;fItMu!dW4 zQ83t|5K!uel<ES=<+ol*YDEO7I|CAofmL&;rFs^)L}bfN%qvaIDGCJ_y<wmt3se|! zgZ);LpPW)!P!x`w7z9A20d$-wJukl~wFq>KXKYa<D5(9~K_}UyXXJnut--xq6a|WJ zc4&$(ibnF65UjpREGS5YY(_1L0edYLYMvM*zCecuq{M@pqwydY6vcrZ1&s=xywuc` zVpu^I57r7wcZeL6nVg?jlmL>*f@GUeUYHk)lfkF^fLw*_G-0sCkQ5saJv5;x3E5UY zunC}&4P0OsC4(iQd5a&`9*ob-1)VBclmfCm6qFqxr79>Lz)ICrkQ^+Xf{UzzqI^)1 zl?Il8CM7XgV4*oG9b_*k)}%pM2wb@2Cl{9#fm+p|rRa&Ea~+E^K&oJwL;_y=<(1}w z*5JZ46lEeS;{%65a&a+q{3Ht;HQAt`f`+^(SVc}^aY=k>0ce3hN_<*wNl^~i-B2}< zZ~|8~rA0Z#MY*8lz?PW@Y8n*ffeeF&87IUrP_>wkY=9KZUzvFssYRJ3pdta{zv7|- zWcRWcrRJn27N-^!g7Oxqk8iGLsF0XbkO5i-$G`ydz9QWFnR(C#K~ZK|Vo7Rzd1grl z$oQgS<ibWAUchC7(|mk#d}c{%ZgEiwxGXFMc?cY{kaU<@Q3Bg|R0dX14)Tp(d#E5N z=|VD3d45rLYEf}f1v3MKH!CRi1R!}FDJN8dgS!f%ISbTo%>p%3L5jIba*E^2Qj0Rv zDvPR-gMc5_DUMGn%1lX5Evf-&ho&v?CiC>vl9JSll6cUG9H3o`MYSOP;7#OEsiHcN zp7u~7crbwyc@b##uBaZQ7#5DAV1wYtCBu?)11LP0^c0F3L6Hkhz1+pQiA5!arTHbP z#YIg>reuLys9B%}D%fM-Oa(q8xTqNvi=Z(kP%#EC#o$qjdN^$sBoSqST69^U1|7_i zLM26+xu7@&9q|;OmXnxXT-1VOe<-A|gEkghK~4r0jWF{-t-&l%D-doTl1Jhb!HxQ& zHjs~*3tdu++ClmuUd{rw6|+E1MUclJ<qfQiFX{lP12@Q^?gsTEz(qOC9^SmtTu?7J z4Ycc^q^J{|lDa@8ekd#W;Fh9pQ22lb6+=KryeOy^hq6N}(4roY6lj@jFr-EWNwPtz zqM}}q9B8`KEi+vYB*6vhx9TS4<R@nr^?@Wo8bJr;flfhFEiQ$*2vTqrXXF=^#6x1J zAEcV-7=o4usL2XE;a4;PIYKx~@>3Ek!3D`gP)dZ^&yOh2A=Xa<Sr3{oLP;PVsW}C( zQeG5RbU<q#X#7tG=d3B9IDo`eD8z4|PDebX|5h{=>?Ek0q16!hG;UBPh9&iBpooWb z#ioNygDQs<d5D5@2H3utAQh144i$hE=BYW5gMW)=fg^Y}$itwz3)CA2S9S6Ec{!Cu zbHL>h)Oa3nCV>u~6wPI3U~qQ;r2_^A257Pkg|y8<jpq2G)I3m+v#4ku$ZS|(VwP!; zqa}*wgWb9S<S|g0CW&75!5WOkMGL_y7r|6QTJhlCGo%@~7%aa8<ZGzI#ghvPK$U4~ z1zPiJDOl+;kWy%b$bl<^)QW=CBG5k0lEj>NkceqKc;`-0(Q>e7pyrBzq@aV%@u_*q zpyLD6i&lVK##&mErfX5O5@a+)HTVP{Xi*1pMnPh7Nzp2BY(ok@@YxtJ1)u~3T^hL> zqz2U7VF2}A)_@$)9?AjF(rZBiu;7(Iq}8O-yp)_&P-zX?j9Rn~<SIr(SPJFMPE9R{ zFHbDW%gjqJE?N(cXJ{Dk<z<!>WF}|FL#myk4d77P2(rhoJyZk~n4qJn^5Ws!`HG7+ zfz@mVc^7I5q)(ETSO#tcZ2{?q)(4^D2v>sJF!70b$r<@Y#YJ1e&VV+RAZ=}MIw;zP z+}1|aqo4``trL|8F6p;}4T8D^Bh5ihFeonC0e19GP{@GN9Ku{!{ajp-nw*)KgQ%Z( zA)6~uSOV@igWA=_1&PV2MZ1xGDFn_-skxaYh;ZHm)(=S#S@7{9Sh(<kG7hM>2^o7T z+KX(QFr=aeH)ueE0-$qIiuQrb1DErlu>!ChxUsVzCe972Z*#y4B8!U-fc<+A<X?7( zcyZAoP~#h#e6m2JPg$U`Cb)|rr4p!@Rt#!490r#bN06df01=lEBa4oLWWjX|G$KVH zE=OxW9s?z7u+zcSd0uKcsAX1MbR6V7meRb;ilP%Blc13Z$!lOALfix@4~tHM41qZo zshtB$P^UohAWM*v9H`m>HBcd?#c7arg7AS3m}Jozklj!Z2t(^cNRuNzCAFX=qv$NC z3B?Evxll;a3!XbG&PXjPItS8@RH4HZ6v5Wep9jaq1&}hR59Q$P9$4}N9TR~_dlx}* z3bPN=PXGr8sP=#iSzQA878V+yRuXtnE-ybGw7DTOCpR^(wCFO(6i|q8RpjP?x|t;< zl|@&;8lmn$iqY((_|l@BqO0I^2n`HYa5Y(U4HRzhrY)r0hZMrFv4!j4v~mOFLr8)T zm4y2+JwHDklq%sJfSbrJfX~nrL*nQbIIM1iY~+Hk>n|?415Ub7v%w=Z@sMGA(71BZ zU64m%!NrrCm<P%<#bE#31N#T+T`@@NOiY2SI!Mfc_B!r^Eqwq|3Ti`x3S{t#0MG)3 zlGMDCqK6>&u!6;k9)WxbHBbSOBS5P?lX6l)jmXrZyhPAoH|V&|#~`PH;(!lgcS?RT z#F!_bAOlH=BFuo6<Df#O=qae>0os6y-0~=T2C^I)JMba|+R=Fq_QeZu`;93^qv$2b z(M&O#MX!*@tJok3yy!K^VX!cR<~Z<?Rft~o8&H72(il>81Iswjrp{ZCy|Bs#>P>i? z;~mJGMeji-`L%~aI&+Y`m6TcpYvX(XyHro1=p)E`&{&3~Gst<3@x{rYfq<e<AcYK| zP-BM<@fLjsX#ocdG)^GRVEADC7nnRq7eBaJQ;=T_IX<Si=qt$WMc+VbpxPn14OH9Y z7o_GvtS|Zwwigx@l8~q@$u9t}j{x1~0_x^~_A&kddlZz2K&P%2r4|>*!z<pOV7q=H z*(H#YS_ZCG;I91*k_Gw3&#xUkXbx{AAkr*kn^$qsAFz3UK{}u<1xPgt&YDI4K;odL zAgsLx@fc`8t{}B2HxX2(78m^or7|W428Ki1V7`M?<{%e=$^!-#28K`un4ADeJETgD z2c^>DB1RSlh7MRVQh*Ohq~+)2<d;K7CQ?)4b5lX1_r*m_Am!jO3h00nD4;7c^HM5{ zm{}MYIzf>n0dg9o4+|~ZVXYGu7SLP<E67Pqaf(H3EDQ{ZARS1x0ch!CerZV&I|~DY zA6O35hRIApZoqJWjp1ZLbk}9UJ-D>|{1Q-`0(1^pYEf!la%w!JuIB<d4dzJ^<lY%{ zaIUzBn*}ub&cnjMpb^RmYp@j;@q(@51G_jYv4|h!;!qCoOem<16#z>Mf^{+HCgv3h zfmE`9YRMvD76yh?c+W@;UY>$N46Pwll$r){Z*h?bvQr`14XL;Tmy1QBV7H2a{144* z9MEQ9Wsx{YKPcRIpe-IqYLWoCi#0DlFR`ph5=kS{bO5yQ%1kMe0);)SK;VI7mejoT z%)HbhX^=S_1u1D@(IOd;O276{$dD?e%O%Ugzz{)dk52?tW`hQ%APFr#A2bD4BnPsM z3p_fLlv<LRTqF;2IwYfKfu_x}KyzBKh~<Ix;EM8dQi~KoPJ>Ei!6$g20-^knh6$o4 zpa`;x6WkNfEzV3YQbO1iDuNu8@bP$Ma4e{R)InoG8XPF#nG6Ukw=}0DGdVw}G&iqE z6&^9LmLvGA8a0r;F&QN#1;tkS`pGGIS;czEIr*ia5H3p9OU}>LPs~cJ(9g+CD%OYU z)Hl*I*E7`jO)SaqO03Y!Dz=9-LTy7*BXk{ogLQp<ed0Yre0}nZe0_b2)RCMh1`B6s zsg_v`*-NJZ%Ga>K0nHJXz)HpB4A79iCdirWTDH1%O4<oUS|Af4(SST+1z8GJT%^qc znr;UrLTDiYZu@{6yE-6qnDX+AbV1SM*B;6b4O>uo1uBt>^gw1qOVCgeMBSR56c0P_ zK_8UDK;z=bRjV$1)CZPwxj`df$)L7=NpX<@$Uc|{Azk_6f}BjyDg7y_6-9=i*nyRj z!l3*c4=O6*HC=I$5poDYCQy(jEsKmn&IV1OWP!?TzjpBPkFdhO6f`Ad0=5Fue+(4@ z_mx1S{mJn~sp+YpUF@dd1Z4&aAy5|wGU!yC44!K?M>9TDFe4K-iVkbUS%CFhf>c7| z2I|j}#F9+tyo(jMz_JF}!46&>k(pd%11i*Deuvbs;1w{LX_=`-MYbUGkUSPD2(E)c zeQeP1G3YL(B0G?ITp9UAnN|6DC5bsj_8?7=fCv>tDfu$X5{rr)z(E0ZqzKr&+{6m# z;C*>!N=ZhMBPb2Q+pHq+iYYY@G?En$(o^IFG6q~3LHcj7ws=W?N`7&XGdRMaSrgH( z1UWo49(1M$s1H-*0#XGw11YV6Rx*~Pg4>_2;B*6Pv4O0OM>OKyK;8sTtU>(>ZrOr* zg|Ikr2givANFCHAkh!uf*nqhwI6}OT6hLN;z{NJatnmgL;{#F!wMiP0GvLiRNUW7q z7WpDOS{9zvinB8d;!E>D#cXCCY!J&29*B^!d{FfS?&%l#gMtQ@E)WHDK4`Q7JY!K@ z6aaR8Ajn<N*aVdw;I0fJ&j*202M4TjE(!)Y4m3D{@Igvy87LQkPL>V<DP~R0(=9D7 z3I&-94SGRP*%zN$Sd^Lunt;tsEGY^D83fDH++cZV+c+HTa;S?SDLO3^n!bvQB0xTd z>Ei*r6Ed`0Toj2cg_r_KE-fy}&xMtU#YIubHbdI0pqVgmUo#q%aG7DoLmF+6Rwz6+ zW5BT)3-TQ#QIuwZ#%{AfL$_I=4pbJX|C9xq!OH?o;AMdZ2eZIqgP{DI1<JlzpoEhJ zPB)N*4r-`pf!gU=;8CVfPSA{NQD#bNaZw!DzIc#*p!u0B@bnD4-5tt>G#ilsj?hGK zg9f&)3ACUHmWPXyK=A`xg#?mGECpq^<f3GdgfwKOfF4W&I@k=Jtu0CcIRLaM31w9j zEOi#8f($@585E;gi4{d@APHp0WTrvtyP|ZEiJ;X~p<+lDr)QRAlqNx%N*SO=SQcoq zC#wk52VgBuEh#N1$^=DVX;LUhZfZ#)XyIs477N-U9B5-A1-y1G8zhT-rz1o-hlPQm zHK-^T6kHhswMBU>phFmHi}FFVX>Cyfh_<UODg@E)wM9iBI-s_w7(_?b7L|bLq}rlV z5S?9HR0g6;YKzK2bZu=>1&D5|Evf|3{k26^AbLh^Q8kEOSX)#BqF2=x)q?2FwMBIx zdQWXpJ%~P9Thsue&(#(+g6QkDMNJ_3L2Xep3j;%Gs9-$2RE2a2ii=vnDWw(UpHL3i zUPg_Gbpi|w%8KxTm(;v61;`pPE@cH>EnNl3XsVS0xcLMU;ZoM3F5psDaBu`K*0F*t z?{Uj7&CJQkFRf6}2+hj`4|JDQD&(gr_!sBoYjP=rG`J*|q*^KXCzs?Wr4}g|85o*C z#3A=oDnL(Kw*m_)C@A>lmw|gZAeE*Hx(b*}m(cAB%S_G7OVqUDQdWQhUC`x%po%j^ zAs2k`F!+uR$S?)yE-28Xo&snJQ315<Q313TJT)-|<ZjS`Iw_e&$VMfmq@<=OKvyCu zKnf9s%sfn!VLot6O)4r)EUHw{Rd7j7hI__BK^GEeu!UJ@L59s6pu#ybHANx7HNZjv zyjDU1e1!m}`(R5Bz-wHQr9pLIZe}r99OOgH04dJQOHNhDEKx|wOvzI(Q2>Wda(+=! zYH~?VCBiHPg|z%4h2qjAg_KN?Tz*kzYB54uR{_yQQYbD+O-)fKEx>9cvL4Vfjx>-L zOEOXwz+*ZJ#rX;)8Hptz7iAVJfQIxk!MB2fBP<af6VO;g7^VQS46>RpwOCKVJ+mye zSRpsRC{>}LC^b0~G^h`Xx8l?s=v-TVngVEczgQ1p2G|p+DGHF&JD_n4j#vku%w*6= z1~i#zIBP06=ND9h#}Pqk)kN3Gz|azElw)3Assc2gb+9C1u!#x^3LzPp#gOpMELO;Y zSdgMn3YrH}00oFM=pgOPvQ*F|jk)=G#R`rkkh^6;EA&kC3?L2%uPKIX#7@jnfVxvp zAtWC>lAw^N0BS3N0;dFI9n=~fg|f`z%o2zRpq>w?;{&xWIX@R<n_hlVx;|8Sv3^pe zzKNcJz5*x>q~@h4Br4>9W~hr4O7bCwpgUGaA;4e3DZfI&(8A12N5L0#-gRPTo<dk= zYPpVrv!jBgiGhicjzVa#qaO8(Do~-QOHII~tl;bK66)g`OnsvvYflvNi@Bhz;z~F( zEiX5*BsqhNOIe{fKdq!Zu_zUky^=H2GLu2&Txm{fu|ir=elE)Oc3j1k#o%*T^%B8L zb~M!W^z_v=xxfl@^HYlTz*{*LVD@DqopGn50NNn~Dhd&2i-D}CW@zf_aw#h~`#1*E zAT+rk<p{jygdCKwX~hMq9@N#<o#Cr|L74(v1So*R7&MQbhzMM0nXktM))<nJ3NL$- z6Y~^63->_DxhOTgG$*l0A+-XuaRpS$6oU&&Q2qs*tq0c*<|=?95EQtnDd4raAhVKE z6~LzzgVqqFrhuxbL<Pt)IM9t-AZO(lflVpNNUc<W>VT9{DNyIZN`};8utG#!fw`bj z4h1WaVPGyOAY7n@c%?#lMrslGZeftCz~v6up-_XNp@6142*cN~z|m81%Lj!9cxk4U zf_jXWUV2fIIwTOm1}j*B>tj&h7neZ%1#%E*B?Cwdq6Quzpm2n_Au|u`Jdkf7p{lN~ z4)&0;0>Z<TvY-Zn6Q_c&Ylw%xOE6T7Qlk<2!3L(JrYXe7gKD_=c#Y!JoHQL!AZCC` z&~X*eBnt{0b#-+|@PVbE+k!BXC@jH&?zjY9nGTIQkVf#Hoz#-lB1pOb38A?HBm@dk zv={~n6PrdrYGHANn#w>jWTq8}){@eqJaAxvxDb~^k`jmyihj5xC;-7lo`Nkn7%?P3 zK?;!ru~4NUiOyCbIu>C%*g)`lX-Lx%97SLoG!cr5Qo$~S2!JCLl#7rwfMYWQH7Y?# zy;vbJCkN610X0iN$sE?Ms)RI7K|-)>0Cz2BaRc%!$V1eM^nk>Y3{VjSvK|~PNCpQ% zd<zPD5XKfCAaM{@R&Y-(0cY35q~iRX(h_j-nF03*ILX;6<io0|q+*bW28cikUS&{S zgf*nVg=cYTQc7l#LSnH3)Dlo&AnX7&SV60HbwEv4(7<M~4miZYOi-xj7weTL=43-` zg;WqAw}UW9FUb2KwIHR?dRQ+lGp8iANCPHStfK%<C(z`N6we?-Ko~3yQeF(Ji(!7w z%FoQxfVdAN53)%U$?up+3v`45w5UL`2wbIs50EGZhc_qzA_~&XypntcwCV&>c!C@U zs?|VqvzefB1=O-gEl35m0#j2Ik}4IHbd(f8Gyg~_0DpM`k6r8u1!N-#gM16x1O!_9 zilx{AISN$0rskD^`~gacU_XJP8MR(Scm$;=0GSU8&0+;xg=ko4!v?oC(lo*4Wf~|} z5s?!McRNTo+;z5~1PCbv;0LWDM}BgCUUFhdY944+Dk!LI)pZoqF(MJ1>R@JaAqopf z9gb95phl|;_z*!ztb$!dt%!j86*buMixl#6QoznZ4II?0fpQ|U222Nrr@3m2+CYOC z;G=6`t+7z(0)TeV2%Vw#jCSy?r!ZMPNJxYI8p@oKnpV^SQWx)C(hj~L3$6}1;IhDK zx<F=uP8fiziHBqth;+Gkdpr2%GbCw9%?put^NwjRtu5-ra4_`JTDUf3n={l(lR-W2 zlFXc9y}bOC)M75s{^ioVOwe#JS5X&ejs&#g52m}Q8#GweSk%J;n&|9hVPHrq3FQSf zw{sJVib017C2B<YX^al^6s4yY5jW6N25K;8q=K@kt0!m_Q2})G73jKOXvqg#2&tfi z63$AHUMr|L0*x2JjB!jaEduRP3`i^jU0Mz`qZm{yCYGcszzjpy3>v#ED1kZyrT|>T zfJ!dV#p9WIsGT#Uk*cCpP(hUfE+9a)E{Ypr;{@;_CD7J7nvNsEuklSmUAB$v-`vc+ z{2~SDy<wno0vh1CppFV;lnPXNCg<lBXBL-$RsbODhK#4dg9&sZJh&<c9b1tC4_}4k z#GIUBg|hryh4^@on)rB7-By%}FiJr|BQF(nrxR$b4P;>wWIO_tAwe++8S(;;8l}LN zO+mV5pm|}WF+K%_eDEd*R3B?1Y|>Q#MPh!MLZ~NbM|ClDpbBIssH6fl0H8xkpo`SO z1w>|k9<qK|`bhyLQ^eJ@2=9W^S#fGvYEfd2LUC?l4rubcAQR+2=!g?2p(-dqCeGmJ z;p-^C5AFanL0dbDbre8TXJx6NLqK#C5XXsu0tK9+M#r*-)>xLhx;l8I5VAX00kmZ? zF}b8z!PhY;SOHw*froWmoqfaI6d=dA6zg$uIhH7-Wfm2e=zwyL0wS+~m-2(VgphF~ z&~P6p;ew`O!CBGS-!CM{-v?YK6@$hrK$BBNiOD6YDS8SapdpBq)U?dJRIs^V`-?$M z{d|R_RG8yZQy^x8oT$ge1$I6-uYd+G5_5{dY9WJ9pmC65g+%CB7T5ux#$RG)9<<>D zUImqzm(B$%G>WYtEhsGoP|2X63w8&X2~z=UHbO!S+}hDX%X+%t`=~*EFpzCU`8gmx zkRSwm39^o&44i2|c~1*H?<wd)L?EsN&1I(+DS-1asMrVB=g`ZuzyS$$1U$bg=qf<& zNrdQ!L>p*SDGyqfl;kTwoCA@9^xw5W86KR=6?7FKu>jRyl2}v%4m{A{EJy{^LPS{r z)&V+|x){{TQ-FFfHAMk*84}oyFgp-s26)p0l2buD?8-7zN)vNn`V(`Cxwt|q3sS96 z16Z%1QbAW2v@nmWBp)QD0Gg48UfiRQn3P{yqJWa}5Xn-HD+n|n0}4je!W>lMmKG<b zr-J8fib}z|dW!Y9K&@D64grDswF5QYo0$h%L|+0KsRhL&XfYmaoEFB{Q2>diq~??) zf<|UB2Zq5zprAfoUJ5j0VH+e?2F=-kyUd`b2Y5L;Buhai79ldAKu2EV15%ovTB49v znv<iDm<+0cF-DtVeXf+uB2e>21IAB;_VU4L6Y5jYc}$?9K?BB5E-flb%_~VOO3Y2w z(A3n_RM1vX*N2Q>Ly8Oq(3;}3%ydW~p^Ri}z)mLDQ9!x}1~R0LeAtr?*a@JFjf4?b zaOfz2jvE6ViwqqzhXyFpA^Na5L7c1vaSlu+tj!No2jiovLOBZwrW8exi>sul64C(! z-|3@Zs}NFDnhJJ5G&oX|bIa2b3o^M<E0R+SN)$Z7D??mC2ehMVbW6-B1~s8T37mSE zOIg7!)XzD@)8CK!b0eTJHBi~E0qq(?MmtK1@^c^sAGGlaOO@cV8&tOBrzwESU}%pS zTmfYkE2QM-r7C2mK_?eMjZDyNA9yG{rxH?SAs0%J@r96#)I5+5aJ^NMn4MY-?_+>W zP)ICFhn(U8E`MRw2`Eh~fDgKax&dwI1QGs_+6-yP1R@0y29<5#xCWh$r~ny`Ku*XS znqb*v1zQEAQ?WEas`a2w0l5U)I|p613omFDY!whGUIUt^^a311JmSGMPrR#N7}Rt< z=yh2jW08(%1Y3iqBsH%L`9>`b6f0qBlhLl^1RJDRSejaz3Uw(;M@S<Xq7f-eYb1jX zAqQRWpreos(W#@L?vkIEst6l@feoO6k`TIakbI%8t{#+HQk0nrnkxp?H?Gc*1{G+B zFsKcaU!;(z;O65R5#SgUqEMWfTM9Y42^yur7_}~>hXJiy6LS<m`{MFb6f%nyic?GU z6ri?&Dos$i1DXp;$t=qREinK$9pFv>)S}G%lwwd)MKs(%jWkdV06yGZ0UnLu_=j2m zNi(=p8pzUQ1uNvF0@e-^2PGeHs|(a90tE)#hGJ0L2)R`VO6YKXs2K(<j3+IFY)aOH zm1JNV;^@pYg}nR{_<(R~MP_kHu|~2UI18m@7D4krNI$G>MwW#elB@@7cG=o07(n6~ zqzQaTorV%L20(pPXk;rYK@wMLPH`$id1jgdib;kDDJ0VZKqudU%mS4)3Q&uSVJ3nU zrsklVWQ5fuOm~3-Spn>7bPJHpF9%=y3-1xat6K2jG9vVJV0EURo2QR!Jg8kBALJSs z>KYsp3>$O?+ohodzAOop4N?_Uixrd<R24Lm^}vFl0jg9@NN7P7!&;k2N<oL>gOVxC zSV;R-!4}kXg|I={8Jtd(K?xjOWP@@-3Ak4P%{!?nItt*!_(97^67wp-ZC13FDtgEo zfL14<#2QjqBO1aQ>RO;FNl>`~Ph61XgWiZ#Pyk(S1qzEql4lsf9s~!QjzVf)iVnz> zR7lnZ2L&jIiZzmTz*eLd+kz@}NYJ7+zd>ps;ijX2)jTvKz!qcrBrhK{3RPMGatCR? z0UL<bW=N!>`vly|pwKH&Gr(3Om*eQk9hC3D^&2EpsjI7pgEB<10<=R09{+)?{#O7s zML{cyO7g)?16XzicYUA*I{uOqW*OR?1@ep;NC`HB36zMwK?=4CD9t_%zx=#Z9R&~x z2};oBVbFv|Sz=MKhHsFj9%xw)wDwO)%~1f$N2^0piaKOE14$gb)iN0>4h|L2)+`N> zdqLr+qo7`{t_hk+OM`?YsO(CE+`p)y4lUTA+XdA@4RY`_2S^bJ!xic%sOy1Cp5l@s zjqKD)$W%*qY9(l#usFY{BsE0?>`=YTlGLK?)XHLT3m+WKC<evkVXMXAy=RSNXmtQ; z4uU7FKox9JS!xk-7dkTy+Jz2JO>zwI1l7WcWr>+Npw;U{MfiYJm7s8d#G--~#QiRb zC5ge{D~~`09Jp-;;$|j8dI2B}&iQ#b1`ZU;G83UIMM1+8sYPjt$*B-?6(HdP4GK_8 z6J!*)R0UVeh?D>pgCrq@AV@LPp|%RJK8POJc?cInQz%F+Y6S}t!J!-KISnOH>cm<* z!!?4-2}t1$sgcw}K`Uoa{AZ;AO0l3632k`5Y9>g*0v$5r;^G1|6my|>I)F-DP~o3i ztO@b4y1IHmQ7UL7e=(#O2G`H<`Y$CFd^A#Cx&o}6%`Z|wDRZI0?3t#JmS2>boLF1} zVkqP$R%GUu<|=@CCMk)P3L2#aCHV?QCK;Nbp*K*!CMgv**aE5)OEOX+D<Yt$6@vQU zrLcA>q;S^&IULN?ge)aMTAG=XSP3cvL1Sj%T$hxZo|y+a)Bx<AM97pq$X6Pr#n2XT zaz5yowUSf?(DvN)^rF;s$k=**8rX#VqRjNnJa}6d+I~m&Cb)*r$<G5#>Xc+8=7D@i zJ<oxfs;L!;$t75#1?)f#G<TP0=H!6JD#4vW(C`Mr1kkVwtj!K8B*FTV@=NnlK(h?+ z!%vH$o(u-Bodp>Inq3BKhL}|X8ZHH`(gbzEz>R8<xS^3kMt*5gu|jD<T2X#p31ko= zGfe@mJF{5905V<+u5UpNKTz$ekdasnO$i`#K*=O26_koVkp@Zq_-igY6l9<@ms+e~ zrI3`L54uE2M*+0<I6p5j2ONl??Cz494B86;YV?7;0n&l!#(+9VC7{DKz$pWCw^3?} z0(9LQNHa)BQED-KNdUZe0$xo9>8XR%xj>HWQvjdn2rBZyMFceSVOGN+E#R<Luma^6 z@U<Us2ZL53KqSGjke>$1Hn7YHjhsY~!=c85@(m7SKvKjR0%;>+GbS@P6_z+N^Ax~2 z8I<-wB?qX`%SnZ`YrtLF#2l!rU<EtGC$?~J>J^t16@U^gO8Z_%L0vUcHCHu79n$Uq zIUKtlSVJFO2gC!mh%rhHkW+0l^GY<5^*~_&xt<JG3WMtwSPp=cwV+5r5mvCZRZurD zP)A6El)yX$p>@$MG=%0-XwNcPuK;}2JSfjV8{G)wAV%0iix6x^fh+`JNO*uqZCn-> zftN`^%z`%l!C?ZaVURi^&{ab^kZ~eJCs$ov9k%uZbZ#rOOOyy(F9x3Ofew>Gw1O5m zr6!l;7gd7OE^OHtIJrVCfhGq0<pfkMS_2oH4N8+h>qkL}9;T=~BQrTe0kYvO4YYy? zltn>}NmyA0o(fHcEm4K_wIGILDISp9(MW6IAj?xTQepWHG-8)nk_gJ$kWvEbGt9gV z4hvZ7hc*xN^z<O}qadGv0vA+5LsuGsnh7vhLemat+X}cFnwp|us{k9r)qtr2ukHh_ zzJufyB-Nlh8{s#AYCugZ0w)Y;OM}>M9%z(5z69RM0~cqAHi-*(_y{r<3a_XU2?jR) zln0+x2B*YgP$mEe4^(L?!~}3n4NhL55dvty;!iSks9K<{J!oqf+B$?cg%NE{u!lf- z6okQv7Sd==#%vrzy#~ql*vi_BR7m~>mzJRMFHqu!1{S<z1(gCgG=ro-WgRZ9;K`f# z5^S}O3na!Bv=t0Ni5z4xxRIEc11@l2RX~0kd|e;h<LC|qRk4&*%HZi=Xv+g?HeG6E zu!lf77tBxwt@=w&RY*)O0nI#unm^#N_+-$Yl44M&6;uVLBvwKiRLTnFsh~9-l?tF? zT#)M%Q&Pb32u}M7x(bGn%CjUNR;EB3Dazm$c_K7~!FEIADL&Uw!4|YHs3bAI1T^KG znVSlhg4AuWss`jVXe9#HU7nGdlM1p-!NwLe3WTU|KvQa<i;5I%6%aE>NSzL_c2GJl z$t{4G3L>>(PKeJngsaF*Q-CV6LA3*<9h3$^!v-mdm7w}Q4P4(VL27s<(A1ieeo4N* zl7hBE4BSAFJ{X3Wj72M4HD<StQae-gQm|PFw-Hj5D?y5Ka9bx;0ptUSz1j*&pwR}< z!eEdfVhj{o2!nhEpHc&HKo}MsdazWk0V#AK!*<1>u|i1q7sP@Nhk%%{iU3mngG_?W z!TBT2zk$R-7&bWxoxA|u5UHb}4k~I9V@8RYIjNww7u>htc!#GwNNXQfkz|5)5P-(D z;^RS0Bqi8lDJ4ikgG`)p)fV-E*END}E=3zagRFjB;Jvjyf|r4T0cDy5BA4equRQ{E z)Fh(a0+#UQVDyz`YzN=N1Rs|H%Xn}1zR(^4vJ9<?1Izj<F#1L@wu4uN!aCbv3Gd6k zY>e%ojo}O+cSFR2y>me8GW&74KSK@E-5F|V?#)m`b!CPcHrHjSp|~kS4epc-wbCr` zT2720Dw+UU&^ZyjpmP#rK_?edhK^7YW*ptN3+nh2vELQE2OcyR2I_i4SJ{DPrHb-% zkXO?|5+Y);V6j4Oc1mVZd;ui07A5ATr|KwFrh=B#CZ(2?r>5rVDCFknm1GphL;1+Y zp{__QR)E|w3o@%9Kc`Yh0qMF!P(wYl#L&nBb#(#4GzA4%7KhGW#FrL;G!>VCuI>QO zo+jp{fTmhOGuS%F8Z*IH!xW{K#N$z>3u(K824+h0z{_70;^RTLgU5r4Jn+&31y@fu zpVSIa-GVS4wy_n|mVg{91#14nmP>&Lgj_w{av<7JRvaq8SO3I=${El?e1x%}GEG;Z zpa}UEDRkMC)WqcEct}G8AqQG>n*!OR4W8)(IS1ha1zq^kNXUdL$lahtn3+h+DnXMo zsTH8J;y{Bf$VS7;a0PHH0XFcIT9gZ_-oYbp#h?f*fiw~l^Ad9^iy@0;5T+<7fKSj> z03GNL*9K}tBqG$nLKSj<Cur{<XoNLi!9B>+$%wEry|e<5$+?M;fxtBIZ6yk+6{*Rk zprg=0El1eYGr}+h1&!j=R0YtMUC?1g<>lpi@VYCtRKGkkJ5%4Sz_}!;BtJag#I3*$ zd@ivjc;Tmlf&%@P5~D2LLbxAG3QkWgfhD~V&=5yv9yISG%28zf`K2Y0gQHTQ%AiFA zXl*WDbtv;I$SNUgnPJ9(k~w542vULst;S1+xe{3~Y>z&4RdjwzDtu|Q26!<v%0gmT z(WR6ETHyxTC7`6BqmZhX4(gPGTQZ5@g@}RB7H?(=s0RR=7Y8+EQ&W&_hMNUy(iJNq zjiiA)aIj3E3*GV$-{+rM44!BQ4eufwhghQwD;5-#U}k_CR3-WFE+kArv4TcUYH=~> z=n2rOB2Z}n#wn!*Iho1eL1G<+)WqV<)FK7YvEG?^>5zmtx&nD<tw2^TsLaXCE3pF4 z03_w4+Lq>lj%EbU=jlS027wmJ>gE@uLavVEQdR(;HUL_3m01j$Z%a`~N=;4#mEoWv zORywpp(A)3dvani=mZMTpo9YWC^S%I2C<S0!)oxpf|S%E-BQq)r*3LqX)ef8Pyz&- zib&pRr8yvjz@i{4sJ}REfX)N}9a{oFDj)-N(-53jngp$lA<GOwJt9!?09#oI<0CI1 zg)SllUoipdOXn4EK{Tf(g9@l(m|hJq4|*;*<QNSdaMmx5&r2<j2NgOHNtkGQDs+Ye zTqqzD5R*Wi4e%&EsCxz4Jr!S^S`v>T0_oHvYX`F-W`MghFbkpgO2D{iu7Y={z}jI1 z#2D~lTk&Z6A%f|tC7N7VPhS8xw;=5XJd12`oWuYPbx>0fzLM3wC^IRvBr^vV;xIlW zIxvrI&;adV1Gh#|+Ndb|^K?MXvy{?gTv4Hb++>9<tb(kUMOv_33=v5Io$(H8=M>|J z6a@un`z1BL7@icNOK4H5UzitB1YxNd>{GN!yToE};e(id1jPwtp(M3P+8s#&PASOa zJm_aqfYYWk=xBe?a2041VQMjGP#V_$Lu~m6Pp^a9q0k{rxDrqcp%`f~Kd9`39cPgY zZD{H#IOgOa?FE61_hzQ%q(IjGgUV*mSQ@y@C@x7YK%R`t%!3a&Le|WHHiJOhU~ngc z3URP+KnL_Bf{qpfcjhqG6oLkzK{IENDL=#_N01Ak%?{9>4^TD*kB@*|3R(dPIWj0O z9W=L*3pp()wG!;iw9FEaX^8cj;1B_CS%J6`;x5o;@f`4h7f4Ag6=WQARtW4gNSnR{ z6rL#xpgUE-lNz9Y2q=6&Ca0!=%}c6;TL_-HElLGX%z|qtu%T}LK_NkoexQ7qUX+*% zjW+xTcH|bN7RG~zHx;ZveG0Hmps;WT4SA*(fua*^IOG6tP*)*6H4j`5robiv3rkar zONyb^!N#c|lP_@ND4cQuMG9!|59*;0paVc4gJs}!TAW$}o?IwO1+`^CAqcPd^Af?E z20_sZpU#E54Q4oGnh7xj4r;i9atY{ARM4iRqRc8t?15rQ0lFvw6jmSupx%c~FQR!L zG)DkV>Y!AYsF0DElLj8Fg(kqn97y6ppSK66Ht=dixMQI@;FDb`U}I6k1>Cs-XR6FR z$U*?9>k^Zb!EQ%Wo{_4M2FjY?<Oh#&&}G};<sP6x0Qf=@kUCgggNy_9qcDvFPj`U2 z+F;j#YHV;K!e%6rVY!JFU{_<B2cDKFMRcnb!0JGO35sTH#zK4qGaR(O2U0eon(dsC z2<p?P7G)w%E(66TXbm-F0JONIC^az`Ejm3@Qu9hcg9_mE1`087XCLI@;>zNZ)LhU; zPVo6Uu*?GXKFDNfOhB^}s%wH%b5cS3?LdBl9E}VrT0y6Q<tF8%!mUv#D$Ro$Q<Peq zpM&POV9?zd@M+SN)Z)w{(4OI<Owg5cpc8~jib_Fe34m6O<fp+VCZLm@i0T%)?jt#| zsHhU;G0<KI@bcJ_jMO6NR#eb|b@|05y3nRzW?nkfU7#2#N=&ZA>ojN><fkblWtJ3! z=0c!rDZnWn5`>VGc;KlY7Mv;Ip$~AQ5VWNkRIR{lPDv?9EJCvvbPfur=t5ea1TO}_ z#Vzv6C#XT-)8f(0K@D11q6Dji>PoFB0Idx~jaN|a2OnApx$hJdy`ZFkNMv9WGK)cz zbjT+ap;`x;3;;(ZST!tVr-OMU>IEewh4jSI;^NH2JaEkeHx4F<?t{!?q<%lBw*|UC z9dsfE<aDXxjQrA^6otHe1?VVPQYttC5zA#zJp)gcl?ADwm~n^Mn_iTe0(KrKlpxo| zLxUD9gX%0)Ga;(M-cf**<;jV8p!HX&ncy^=sDNS%JW+x7Uic)IWR{esr0V<R=cR*L zV1uA`Cl;k9;!O)M{}h)d>4FvKg9`YPL{R;KyjvA&9&~{SYLy#Yo>`Kd0rot2$0hgz zQc&Q4RD*=Ug$$?%kP4cU&dV=>ng;PWXh8&M)D*|DSD-|g23|e~R+OIxZ%u$V=YST@ z7L<Z^^5&$%5(B8N04=lvoqw8{pO*+-^Z}~!TtNGJb2Iax)A`Byxk;IjqX9t<25AJ* z;98{^(gy@Lc0er_@Pb58`3;W%NPb7J*}ypzhxMpOtASGn$WBn3Fa=c9W`dUI78Ruy z7v$%qfJ!g0VIVgnbtu3&r&vb;OoQt_xPEZlL-xIbV*wh_kf}P@YFQ%I2f((2ff6(7 z;sB5cqKOS%8VU<|Xrl%-dB7I6L6UZOYLWtIsWHeAsYME~;w7^fn(e@W3+jb~LJ+x7 z0S#h;7Yc&wXmG6HTtWb<en1Wdofnr_0yYv9`AU(Ik&(W>E-s)MT^L&lER8gkPOaXO zt}fVQ=rMlq9f0&ZD-E%A0(nUcC?Jp)g(v1IK>Awx@cu}C8d6UTvOX3Rn2E*3`N`m; zM#269nNyq!?ofcYKY^-3(8~49q|y@5iHrF~pac!8rr|3>K-v)NWgxS#ATgv+hZ~P; z<qSwYJUL)=oWQQZxfu(j7t4k$kT7HlMgiXfO^`BJdIqg30JT7KN-L167<iC?Htax_ zUm-8j1Q`GdOkx&lg4E(&tO-(pw5SWjg#;s{2?*kY(lv+%VP#Nv5`5fgDQGGUR5F93 z2+^KFG*dtgPuP?@q~{AV0el)1QrF8?!2n?uSQ6fivQ<E=D}YBRSP8TVp#V|=Wuq#9 z_eDS|U>sB>klq7G9?U|O1U2tL)iX#M%EnXxYX8F&Wac9F34ooLn4Ao2(?iujxv1uV z0twPO2dRSdP!&NN;vf|eCaN?v@IlfLCaN@~p$w7*vrr}BtyPdbjDw~G(yRn405egg zAyo)S7R*AGgtiGmvJfV!G*}0y0S8h5<De=*H1cc})D1zUE@%Z|vL0Bqf-<O>28}y| zs$7&-9hxbyHWtVtm^w5ipw<^yx+oJe>Htr!;8qPt3dBIw1!|w9fi?!iR=%Q2qcu-Z z4?k2^a6vlbBQp(rH%<w(HU^)ZoSKsYI=}(ez9?4E09EynMg?f2T517eO$<2Ifuunz zk*aIq?m)2x(G~#LekB>HnMKHr09cCv+)hf&Lxh7eq*(w?L6DhKSPvB1c1g@p$jVQG z+X{9K*fywh;4+zM&><j1!3_`Sc*t=bpsW27bBm!9+5~pD<fQ4LYST#81II9E=}>A( zB8bY*O-%<glFO4p{PLnSq=iaw7lFeBG!Y1kOgv5mx9{S?;Z3qTk@RXL>w(MwISMph z0HQ(dLqxQ~Rw04H2()(w=2v7hK!L5JkOnaby!uQ>Aq{K{!UOR78eCqZHCn-jffF7i zZGi&<rNIhq1%g~bY}E^P4~`Z&$Q)SD6k$264G5A2djpSdP@5hUVxR&5vf%@|a{z1{ zl5@cUf!2WmS%BJsf_oNhCMfJ6)6;NqP$dFh8j9%FflLWY%*jlF^xYxrI3aG)@bJ*Y zZ2&wkkWlkxDu8NAkd+_|&U}@iA^;R&pfIS)EYJXlI5g@(=^-;W6}pHSqz8nPO29eW zRsp<#N5jYjk<dWWnQ5TWjWj)wXTbph+7e)BgtjFBq!MmWw4siIk&c3~j)IAff~k&z znT~?Fj)H}bf~Agvp@EKqp`ng~p%G-OBuFC&W3>ij=K)A1k~PLU3Wg>+3WlaS3WjDn z3Wnx73WgRs3Wk<C3PuJx3PvDz80jb&8S5w*Ae}G^G6lQ^T0^6xQm?e2Ahk$C6SR&` z-O*1SoX#~Mn<ha1jn0hKR8R#C25Thiftv-IV6_IC=nXK4vB*X$+A5$M2}(vdjRe^Z zPY596z*t!U>Kq(;K`uAY)Kt&}X~(vl6m9_AKbd(7&|m}|DF@x4p$R?T32do?0%*Gs z*y55*O;BorXaM;dk{}?}9GV`G-pn)w`~eFx5E7!GQi^b(f(*qQti>g;D8e)l-B%#P zKp51{t^}{h$jpOy2vk-U>p?chA__^6T4W5i0jxB-q%u~)R-sxQ6s*PSRtoB%Lr6i9 z1mV;o8nMU*fGp0$v>0SsG}NeA+}6YL3ETxl=mFV|>TI|s1#Mdeb$!Tb-XLY@7>~A+ zOq~8JF2UtLNa&E}KZ1Hdjz)JVR1>NGL(*1^=;4Db$OIXMSo}>y9Smy&fSiU@=2BSe z!pjG6d7qIAZaIM`e2^+QLiI7+5E5z|kT<{$lj3O5o?b8)+7Hr1%?Bvbpb7^uj1CG( zyjUF)16B&^)wQ6OeRVD93XJMnbv?+aiw4~3c#VNcf?WwNwMlRTNHbU?qQgdxZm_kQ zh*meQBm-#@gO54afeb_ID1aNOuqG;~feLD#B1#4DMm6|Zfbe-eut}g{Jy4e%G$#vL z#R+YWgO&;*r4dkTDFxocfNL#=?B0Nzi8h)D>0^OQA9zfFQX<rjRInuq;i(F_nduoN z-~;Fo3t!Qin5d>`pls!aEOY@)%7A7mp~nYg=46&sB4s6wkc`ygRPeMQWYuVLX$i#3 zpurIMsU^@8C^T|X6TzdO#i@m*pz~1?4V_?*_;_C*9R+`P2<;A~LE^zsaS#m>2hslS z@%};nKEb~6!9MU{C<pDBL&Om%6$N`J*eV1UWTX~lCMV`7cqA6(=I3Q57wagvyDQit z2H@R`GE+ddE7&UdmzIDAp1~q;qd{i*`hd==$OoM*;gedHnxmr-3=#=0g`6w^7DJTC zpvmCW#N-T6Cm6C43u#OmH2x2s6;1?i;svRJ$3G;n5a}Hhl88tLPqjmPhu~%-D0V<f zz{v#B6+}&EMUXf`q_*PZ)V#!^%zQ{>fre{fCs=}F96Uh^T77^BOhZk?8BQSQg03#h zM=79FOA>7jq4~$wKt}<bd29{fL1?6@;GCF~3_VB+VFsj0o&vf?D;<<5;2J<{YDyA8 zMuEGIAj8qkG{$QtSha!%D0hGs_<&Bz$OBy!kzb^clA2VSo(^7@35r@M26@2%!wZNy z#{@YLKmm{4LmK&cphMO0S_2O$L(Gse)l_iFFVD-#PfUTV<c608pbIZ^z^%+;XsUyx z3~&U3{0UnWqZ=ONhDeKqY9pxkA!Q%h!V8cb$~+ZlF$1iyfo*XGDM~E?O-W_up(F|g z*OJ7P{1T*rRQMqTu*2uDnFWbC)cFRG9iSo;A_vYcC8<R)<FJ{MTn-v(Mt2d&4Dcnl z3OSjDrJ0cV!p!7Uh4RD_$T2FQTiX@z8C+hJh9#67;kRsq=frZLxfGO6u*4RI`Ji!I z<g~949^|Hv9G^(XupxKKNoYYRD+GrIxj8z!D!6&N`arLD0fnnFWPF)o67GI*?G28j z;%Ie9A+8Q;qeQFw_yq@mn(4kiAkq*-_`A75&*uTT1w|{UJ_z=KY7KVL_YL;Z4{>(Z zH#7*<H#7*-Hww`=a?y{{_X+k@*TL5H0-1=6)q~xfL3V;H2HONGHxWHySnEC!JgAB& z{y;{6mBai5b6B)NET~-ymV;<QWILE)@DXH`uCA-2I%wJytP_Wd0JKg%SS^wZpjBWz zEQFMTUHpUeox^<eox?oz-GYOZ5Y-6C2ZS(zz`@+`NScE{?ja_QkerFbMeuY6UWn}K zqu}Ej=ITS=R1Hc2zObYjq8|uKRp3Mo4is>?oC!LF8q9^HGPtv$Co_QSHE?mBT9Qa0 zv4O0DCN_2bQ2j7{*APb+{}4pa5q#ht!bH%JDSlHSZ7FEpLO5R?lr^yLiA9PS2vZ%Y zUjQDe0DBhP3IT1gHPlqlS1{5<WG|2|uo74z1{Dn;pMfqcQ3v_T1vMDqGYvWl>Zrv8 z*t;N4lHz4poFNA!atI<Hga~pgWW%j`cw!Ogq#)4okvX6xQJ@)oNCOBQd0@|gTK$mL z6xczT(1k1n(t9T81n{!dqDqD2{Nj?FN~DSssjW_^WCQIkz-VJ)HbOuLgo1np!zeK^ z7*Yes4XCL>-`pH$f}nC5Mb4byHU=pfG8}r*8z^W&2e_0clcL+%C)`=z*)!Z3$rNP; zM;8}Q(AmO{u!2p&%|8gfN(R)z1KrH%>Z73H>81ca(bCi3&(#IdsiJzVo|&dlUW9Z` z9>}*Si3lTqMd^q6BQh9BeP)`1y1t7#%J>vG0~JTBBWXtsK9ENI7P+9>QeKo6UksiD zj8+G=H`If@L)3NDgM&e&vnPld;$sM*j6f+YIK;;o!ZlIHS!t>VhlfFQg@^eVfs}`b zL9~U3`IsQJVL<K$HOE0q|1$GHfd+C7rk^s?Kp7rqSb*yFXagLBbr|6RRSjy6sOy6! zWD63D5RDPo;0HLFBTrgE0w4ES8Pa?xSShHWgAH$h+N@Z|zuZ8pC&0ZD(0U2b95#IE zE_lT*XgnJ<Y6~tuK}ujtD!?}#g53xTLzH$iWKA-B3?U=Gs6-*Tv;^E=20H}W4Nd|t z(l1uXEJg&llD~UAXghAOj}m0%i@!Tq3+#?Q<W4`RTMvpnl#aa)$fa<1B_@M67AQC- zCqs^)OHEM#4HzKip+LP1aBzXPZ-6%}gAP&y`w~>-gS+ne;Mh;h1&1hT_a$g)T1G0g z-vAn%L8L^G-@t7O$bbQ;QvnhJwJQ|B^(}Y;7`4}rh#Albjg^8=aDcvZfPQeWhnv1@ zcyO@3UvO}+esFLQB9##8DZ)d5gkA@FLWRTwq}`!}(@jc*Dm_s80AU<WM358+W2XDu z?D&$zqV&`fP>@4M{h+gS;1~n#fG<Iwq=OF_Lzh>BE{#ph1uuXGPuzl5!lo93ZbAZ& zc!85WWDOxWzEc!3^N<q;XrmrTJ9r6eG3c;C&>?pjsR~LEXCd!sg{(J*t=K_|UPMH} zqXf}=gA0MZg>9Y{lzHHJ2Rca$N^qcI8Bn@{OxP;8f;Q+n`spaRIqN6{xalb9=^?oR z99sBHhZ+n{q#)DvAO=DjeL4yt8Z?*(srC_R9TaUKF_0XjN&pSb#m7VW&|VLe2T4tc z6bxEph{a8y{0NqU9t?$WS`v8d9=b3V9$}DeoS-$VNFK(X=t0f}VMy$O5)}^nAqv2y z6Id0fkO2iYJk=ml3G(_bh&HeeThJ!>oHY2^;GhF(!9_hJqP0P_Nn$QYR1Z`EfIY0O zpbp}|(*($=2n?Dk$S(%nMNv?YnW6!?bONLvbm$rAQ0?^85+n)G`O!$LG$5Hv0pUU} zNJN0^7x044c-X)UXj~ea*`WCabcR?_JZLd5(uguzUIT5DLmGGl6?@<|c`>-_T$+>% zTAm0BL#UZ>U!sg<gA^2(B$kwd*ARkuP~{3`iA9;9UAjn-OkB=_8Gt!Pg|ce`v@IU7 zsR6WF5)t$Y3I<j%zd_e6gNqLE=qq?FE+RdEbQxMHfR9~=ltQ2(16a8L-ZKDN@d+8a zhNN1M78o|dY7tUsg2DvZM5OR2NQ6WZ=)|r}SWN~GXOImjYc|1!0=PzlEDX*_ECcU3 zOG*Vb8o-q<ctH`U4^@(ZSfB?o2sO5gAr(Htz{Db?bLv6rK`sU_)B_jUiN&cUpw$<k z4Kg~=g)=#+WuSrwx`Ybc9|zZ#sD%xz$EE{5Qx>#QL<hXIN(Y*<bwKrJBG{5t(AtjN zR2>D#sy<Y6KvQQrpc}EvQj5T;J24lMA3%=9UU<L*5;@0%R?vY0sW=sC4X9WKc@`ew zaBbkq6=~_FwylC8!cHv5YlAgF7LKDj9^^(O3|0qO_>ET`$XVbxu!SX*Xmz-ldMsYO zpyXbhT7sk#DndXXWWgnpHi!TLU7&=3qzA+$paYtEkTgL>2<uA)weV0if`tg^1Sd`; zZD2kDJ+Rb^qzxuSKqshO4odAvI$=Ttbb_jMBwZjb0UeM!0!a@<fPgO0;!Y$zAT9wN zpgIpp2Z&2R2dE!{qyxkypaYWkk@P?W2<QTp4oG@HTmm{E%X5+RKm-Wr0vDJ_n!tSZ zSfpw@6SU0^yiFFobP3T-0_A_-Aib2#;)0yS%6QO5c%+q{FxkYCM0mB1Bn=*sgVl?+ zwhCxBhxi8Rfvaw?si1rwpIlr9ZV|wnGtfJw5ycr|ECbzeqzf*f&Z59@s0rkH8^@@j zTViHTX;CWdJb#cSkoFRCBPll<a&`pt_y=%!fDX<oC@o3JEP}E?6?(Cb0%&Cv_NG!| zo&xyL25{RFT*rb>X9iUp;Kn6534kkQkQs<(1*laFId=jw3kzxnKnwz@1J!z<jUJ^% zd8wdIi~?k~8mVnSTw4ij7U&EWtgQ#wl2e2mK~3Fa=$1KfO$9#c66`J{yTMx$z#*ex z1wWt`UN3?|8__O-beh4-w-MXPKuWMz${-mK&df|vumbPuEQZ7qit(_`REeOrLK5Pn z0<c3t&F9kOlF}k@;|F?O9LP)<&P^=_-RK8Cf-DgnZzz6CNv!}S3D9mSP)!1gNiYp! zAa9=n83*?#DEiQ&6CC*9t>d8XMk44iiIU7b(4q0*-Myd-TR~>PaDE!ZH^|OIY^PNK z_jkcb3LNr?lmr4GcYqFW$jQ&oE>_6N%uWTL@Pt~tfI|oDHPFbGf`+=0fuXsfp@A7_ z6b{M;kNHB`7V4S`)}SsLYEu!(7{gdA1r2orkbXlW0|;#aq0I~oz}i7&I!fFjX*WXF z4l=|TM1Y-R3DyiMsDnUf>%mPxZmWUPh%NZK61X(PaB#ref-^0mK?arr1)YK|{KhBn zy&>S#49@Y;lTje|6@gAvi}&<%ag9I}g(%0IXuwTGC;-QgEoeXre5wlM&}NXO#d=^8 zp;8%s7iV5-IZ_dV@Jc4=_-BxTdSHtn*2RPTW(yVoGeN}^D8YhEhX{jMNEMDUcuyxd z@j%mOKIj_yl++4H_<&Lm2t$l4OUwanP>4p%8-bE8^fDEQ5|9H>(^YnAB{)@q_8)=I z)PX2WPc6~N1g-4>UCILY7RWAT1z6VvbUzE&Z6GV4?gQDFoL^Lwnp^_PGKq-uS5RBD zp!1$mp+{f9j?O5_2d!3yTtbUtC6XJXK?|I-q1VKKMnhq82v36?2@}-=xe=+ZMV152 zoq@XXgiV742`G5=5(_}rc7U#`0f!nQNq|fS^*=!I2~w#5$<3hfNUcZ&U5EkB*{Fe! ztbw9zjbadb#s(Dx7&#e52RJVy=U*KKbweYxTnvvANNubDP9BJ$L8_f$V;9g`8C(|? zLArs(IttLv5v)%J$^?*F+g4pq9krfz18sE9tb+D=L3JwV?!83NF<p>Vm7rBuNtK`; zGHBJH0%T)!N@_`BW)5PT9?F;osL2iP<RZ#o_%$t{rCSI~AV(R%)q@7I6^ao<C$NKA zKoL(|eGUl+61E+Kj0QC|aBVq;7zpa_XM%?972xaC;86uK0h9!x$54O<bHE$=i(u^p za9&2bnicHJynM)wF(BO_j9)i+!W2?dgGK{El_?~OQCtCPxq{*eIy#Y(nw$wb7z(s1 zDmO7D71EAE-iZpoCKJUNC5X{V*5K9}gaaCV039m`8q)&Zil(3e9tA?2^NyNJafAm* zH+W+(R6A%#c4l%aQfUn86M-5QINK56kvnh*lDZWe6v{ZZW5c}<>mm&Qp)**e4jB)| za`OWyxJW;W2z-e&JUBsSAkQ{{vQaANtboMQ9PlZcpo9#&Gy`$Hga)XPLTYkiZwbR~ zL2mMZhlU`D2y#IRqKE=ZL9(-gE%X!txEWwcXi~R@7N4k+@Bp)gT<?*RSp-**UzD$4 zs{l^fi1w5+$fMvZ*)wxfiy>2cAeVuv3D7FM(i}vyvBc0QLjn1A7Vx$(TSFs6wkk0) z!KMVXB@6BjWd+cXHRSvWXeR}9l?M0>1JI^*L_Y?UK|z5J8V-Zk5=iEx=7CN=g}ORX zK?!u{9cX$oCkJ|zDyUrmFAHHNKn{ffEgwWO3cR2gv@Z^Hz6j`Ks?0nE@akh&W`mt_ zngh8g1(aw&wHsttCwLGZypsmxRPbn?x)nIK;C$3p4@f%_RtFV|#i=DwO;8?wEzlu5 zE0Cx0s{{|!5upw?Hb<ON$Y>l9Y9T{#kl+Bb@w*m2^hSiy@WD2S=`bz<3yLyR)QK=0 zI=)7PO7N%}5$Zr0izu5jb5n^?2OTwocpk#R?{!d5j2MHV!(<SHAsqY$gYzuJWTZ`F zp!^G&SVP&NhTil|%Ld)OSOP8p!1JcyW?8X9acOdfLL#DU1Z5ay5TOu_Jf-R!hT7y; zR!A#D7zip+pmUX(C8@da39O`4(7{Ha24!|CB1?lzhgtzD0gFM?A*lt$s1|^{RgkTt zP*4UcU%=TM?Ehl$-IQQkV3&@A%!6TNg#sjxf(`?OxT`o7+=l}VOhAl*7fT48AXYSJ zx)-#^14M%+Z$VSMAU=o&@zJJwaTo*IB7$uO7}bv;3zb1WL@Amf4psnr5#(M_;fy;V zA!dNcXt2k?lSrV#2+RPNACPGxOshdRtrx=%UePEh1H}XKMb02YVHo7X%slAD_Ao&Z zjaEKKtAp$YFPi`-N{sNqR1eCBpjFr4I0or1js|Oug>OG3YzR2d;V=XwSB$po39HM& zB?sIP5Dzt5VATYzA>i5|e8Mh<7JMLm*p~=`gCibw83;IB@D>svH^Om2Ht}jP;sxY? z^;o^)f}G3}4Rw8W&1i#IL>mNV2ZlCqA_T{OL0Pl`W}?H;0ILu|AyH5kZAhFJaKeUJ zgSJT=<TeazKs`&CdSfE&09Q94H-X~;#3LN1@LCnF4<>?W3xXU6!k|TU*`SFH(0W2> zQ2|;a5AM)_Rt)DC<)fD2AYC8~X<~x9UKlO{NrQ$O6r5dy9E}W|6*R!jBn8(1P0-L0 z<c!a}e9*8j=zK;c{{Yt@B}J^p;NBJh+OF=3zUUuhGYn&dJtR+nLth<aCF&|joZ3KT z0YsCdAF*0sg$d|7LahG6;<(fTh%E*N21Hr|$s6FlLrxm_(!^raj6$5%NM!&xm7(Q! zb=+$_VPS?sgQ`mm??If3nQ_5WRRuUxAkNf>vm!twXh>BFIU)gE2!NA$Alfz&nA0&_ z49aWZ2vLHZjs{Z*qcJqVG8tHtdQoahX>w``bdfUbrga6-#lI=3x!~0#i6t2dB;Obh zJy8wj3J?w5AOVg$*ufXr^Q^Lh76d@AtpoWXGqnu74;E`$0h<{Q9^!z{VuBYZLAy#i z;E^+=ju9k=k-Q5#>>qUXFIgVOa2Mvz8c-mBu(CpOMrv|4=qw0OUkr4f527OoZfzDT zB&Am7=cT|e(?tvjf((FR@Oc}Rsl^JZIhnbjvk^gO2j_#fLqZnhLaxau$w;kK$V~*F z%YflZkWtE@4kl!fEE9AHEclS?(&E%2^<vOm0{9@>#GGQxQW>N<H7^B}X%uYHgE$)0 zgG@!O6LqoFS71Xx?k@pdN|#syzO@!~Wg6r<SD5+Qkn<#935WQq8f3nL0_-AKRS$Kf zQ8TC<n1U7IFdM+x&=A|1EMVmd3JS2~16!mCy2Pin0yM9ch&R7rjRcUPpmp?#$;s-V zHhe+074`rJDO6SnE-6YZNlmZBo`E20GSfg8a)UYzy5Iy-qF`qWzOEXQ=|K)nRY<B- zFvK00;1mWLW3jPCGs^}f3N;911$fLe2XqlQC^_KtBG|y(#0roWsH>1o0<}I7CV>>; zG09N@+}wh-`oSaQS@}tziJE)`BhctAXudKBbai4fXlAykQV%*2016*$7+ivY+)rF` z#?oLzHWik1ZNVW8@(d_hgAZKNfJTU}0%&+j2lbX>WHXT2pkffI41;Ab1@LJjdf+L? zXt)n>$0@Rr_}J<t`6O1U*i3^40`gK7Y|2P3@?nOMQS{?XQXn&N2Qv1K2S^VLgHjHz zXf`y;K)+iWrVX9Oa019oNOg^?%>^?8Q!98?JXkYf_d~)GTPI3^l+F>%F(4YlL7*@~ zS-1pJg^mYBYQQYs^YZhM_Fuq?eRLXU^1|IBfcbyG{S9`af-=0_fpQoc%#|=2N8Bpd z64)RKN&=uHjjJ?-)z!FaYLNXP{l%bV$hHdV>X5Pz!#N-|c#|5azSRfUwm9_Su3h17 zz*bX0EJo_%;7k%AV?cEtXl(?B8$c2$?I*m(K(6Q2D9Ba-bvY4-sld9)cr}CE0cs?H zTOXkQbY>oCXb|~iN~jWS6nL93$kWB3Q4a-ePz|gBay^)@3A!)X&<JVv9Ge*+F|ZNP z>73$dLo2l7<v>c1ab}uAPHLV8SeK@P9s1%#WTh}RMi_%MgG)zseP}WQi4;Tn2QXde zG&q+K3{Tv4fvo@y_uw>xtbzbie1ls6#P))4IskOu9C=9zv<L>n>!8Gdl9a&-#nx8A z05pPw(-okA2bl*Bu*9-dq$~wD0M}V`AiW@r;TBNw1CDaS6(UF}$ZqtKY9MNINDzV= zdpJj4K;8vm3@;-Moe=gkBpHp=Rsh;MYS5k}=pX{9Lx{FS8N5DO19s^(Xy&&pRUrj5 zkD{lir=X4~MZn`nNamoeqee9cvWgolmYM?Eo`+l!LKZkd`!S$BS>Rja;P=@=mo+6L zm9|LRuM)u<Yr%_7L96*d{Y=n&Nl9vML4FZvGb>^(0chw4Y&2q2AEXp<?ih4Y9cW=( zi4~}Gn4<$ClXMhv!JAqU9S{f~yiq4NFR?UDM<F-0B(Wf|NJpV4C*J@}8iL3~Fgp>c zKbi~PwGX=S7<95QXx>~$As0M?rK6BroSUCtk^wOdLP8a!6o8glA-d1REr9|ZECgEa zT9lsyzJ3*ylVBJm4xS7I&E0{*0X%RIT73<ky(8-gd)Ss!)cZzYHu{0KlR_uAK#Qm0 zkw)734tUWD-hq~$npd2WsRxShoWzn;y^_?564>o^eyQalsTCz5sksFpIlLNSdK6%) zeex4iQW5Jquv(T{23i~kN@*nu3ZZ%6`$tk!z&Fbyq6*_Od(eqlsYMF5XjW;!med9~ zhIqt>xcUb8IEJ_e>nJ3amgIvjKg>@|u>~(IL1aQu(87W;9u@`)wh9m{^gtBcSdfWs zo<6SeevZDbKAyoLh~x}1h7eB9DYiumP_$tua4CzlHU`TP{2)s}!@CN$3V8*3iN%RU zMTwQ*46X+fMyd=o^%9Fg<Nq3IIr)hts6GZw<zO)ZB#g%dc=UrDk(mbCHjo%?7^`3h zVHsmNzyRbXkP=;61!FVB8F3&3auX|Z6hP~LN;EXU%8X+bbRi}g#)1x%0l6j`#MD+m z9L)yRnS`R#0It&rq0=B1d^8Or8G*Dy=21XiPs{~RfWhNj4|aJ1=E0Xxmx9*bf|#0^ z(Vm-F0df&kMG`g@;PMYN-%(Noi7v1JPL+^@`9TJP69rgtW^oBN^`PPt*<kSE6>JJ2 z1uUqw06J|2B{o4}11fi+=78hFFcym;MLGF~$cl`yD@rs#R%C=j5sFC$*c3s^dZ<~+ zdf<{Di>n~YKqWn@QjiEX<>1-^t`y9}rVLV<z|}#x*c5`!#Ips>32G$krIsY(Py%ud z+%V9&LYZl4*px!5D!57r7c~PTc&Qc1sRboyWhdyGTeLm2;HHCyI;aie8WiLoqyXAD z4oY9Cn&_oaWwBmr1!&4TCJ&@MwWuh+NFhHtxfFDv8>CBF0=b;6BwqoRZ4j*pbp>sV zv;|6E3b5iCqa4NXjejt>3LwTC&i*d0RtV4Nr4|+C<!d5L1lf$?cVE}wU`KaXtC&26 zm=Yw-pyC1KTPg(!ygnf(NZ?_JQT@T{D{ylSZGQ>4w18D1I`AMzskYGK8$7j>Uyz!o zfo!mjf_k~SCMX8b4gvxNXqq0l8K?mYuf$xvqSU;U)FKUaP}4yjDeR$Xb7;pV*r%X0 z0*??-2*5FNm>~r$Mw2`x6?B3H<c=b61pwVg0E$G={m`h5bC*<I&?-U5VLG7hF!JUU z>_<_%=YtOyD9SHQ&rkq0NkMi&ucHJt>hp_IQb8FQ)OUrLh-?SkbD)MSWWG^P!7&YV z@@8UD3gjpPh%l&%MsW>z%OJ>9#Dt^^{J3N21!3S8G17IkpnVXab5V-&%Q90^Avf<8 zC1&QOCFbP7odQ~4s-TgQ2$BFb_ftSuU#2MJWagzN7C{c-2e}q@co4|HklU)^CV<js zaWQDBB@tv$L4Ho9jzV&2Qf9IOh@F?8o0*uSiPU-~u2%rgU*L!%xFr$fKyWi1wkc7e zBqOl|w(buxa*X5#I`=t<SP%{m&l1oX8iqy|;MP}WiJ_4Nym1U}bAz_Ag*ZC-xFX8m zg2W=wKqk@!-r&@)2ktCE&H@8v4CtX&ppzJqa#9VAERgaN&aHRgeM`_yd2lx>gU`YS zg*&u23hgj~wvs{Daf1$`f^U^f$t;F!l!VN7BbkG-N3tw45p>Hj=(cgVGRTG^u;I1} z(Mq7vAtfCJB~X3<(V!6;CB$MWv^_|mIzBZgO%Jqe1!54y%^HZ7KW1YSUi9E#AW|ne zdO`caK)yl5AZR%hNE95}kX>S+IaIVgpUA4n-WrBt2-3DN(Ed*F7B9$lPeahQPmEn+ zD4M}L#2}kRiQXp$I?zwAs3<e91a*ubx=024#YCV;fDEsKq8{sVg=9S>1=<Rrg;nsu zLh#xHkQvB0H7_L|k7;meZ3T5Bu<ukORdZESFwDX}CS43NI=;9B)PY8KTD6sdoe|;= z0C<`#jy8-1jjqCzJ<PdCK0}?-hOE?p+eN^`C{9B5A6^IP8e&;b3D=FyJ*hB@2)G9k z0dV8A!8Z`4q~??)YCv|BB<n%1l|w44K;Z&9PC>yIR1AU7Kq$&hEXmBzD+ZmiRFGJb z0hyViB!@#b&44Q)$WC8S)F3h}$PFo(xu9Y<J+&l0B{MfQ543l!SOerT&^1?(D`h|| z@ZAZZrU)#D6H{g&B3(xT7Cxxf!!{g)&b283-Ckdmh`M?`r??<KuK?5$FVL$>Ey^#} z&;U6ZG*+Oc0A?A)>OdHv-lIYaXeh%ruRsqxnqh`^cTzGn4a+Qv&nX5u4RyRCvm`zl zQxu$@z!g0BemPLk!!W4mk4H$svks`7$}GuD%mLl&4&P&x32ME8)|KWLr9$ttg6qgH z%1j4u-v#a6LELizYEohm2Cw@EwfI0)FKS5!Hz>LQw7?c==QYUDaP#1@a2F^mC>0dt zgDO5HNRKZy5p+u^c<WI?esM8)jTq8NwhBq9CFQB9sHZ$CL;VF?oC7Xhz?%x-_JG}9 zln-uFLM_zL0;>ai6seI6a<DSE4gy!n3bxQA1`JFMOhFs_4L}5FPcYnUhz<}5!x{>p zreP|Gs{^XALCg0+*ZQGofp#99LxX}`{X!H1g8W@VokOe?)OElXqvd^&2Qoo{Uj#Zy zKm#-v32{ESPDOJ+$l_$AP3(}nI3WAj5xSx?V<A?7uCqcN&Vsac(lU#ROB6u&R~O~y zD!{e?LW2**FX`ZI{tzqkQp@8(W3rGFFF=-}c?G;I3%ubBv}`Ib9~4%J;DuP=Gl=1r z6@Wqx`KCk#eQ>~(CZpaEpsY}woml`{L=8H~vILe0KmnGMpI-p(l7I^q$nL&8&@eQ} zXizrN$L1MmwVa-rf||%7p_*3$-fV&5eR!z^+wl)EKQXrevYi*yXe`MnN=*e9^$MWU z5>|Mln3D|3^`N#}Ns$I5FhR!;q=SwhfGluC>H~vZ1F{BwUI9WWNLXD{-_XDSe3xcP zYC6(zIY=MK>sa)Ggw-{1=t%~d3L4`>t2sf!sAY6A$Q+nTV??D75=Ki3C3u=6;IPnE z0NabZRxOE70j=eP8iZMwLM#P&8iq^aa}5dW(FIKf!|#hjiKUYGTq7b3Fw(+j1azsI z0(vh4<VtXR5mJ?6rognk{8EsQ^NaPcR{9F+p#Cb(fgzCj$QTlEh&gBI>OehEn-AA` z8?t^7TU`&7CeUJ97tQ~uX#}J#eW>^ZB_1*TkugO4fmV26Z^TnQd4ci@M)CrsF3f<W zdV&CDbRzAhek7LQuo<N+fiwb?^1%mhf*RfmwhBrL+6v%kKn<a^_>9E7l$=xrTLti- zDp(0*G!@0j3^a9MpJ7p#j;0PA`cQQ!20{<tfu86DuBc&b(8N9X$XkV?)ST3^#Jmz{ zWe(mGprZi3Q47s5@aS81YGrvoX#5W}WCAt;(lkpfLM#CQl@X9x0nm;r%#sjaJq^;E zRFs;Sjbb@Sv>>s_6LcmKdi@F>H}XuuS^t6bf+`bI>rIe8P#uXyA4nLleR-e@V$mJy zmx*6b78aZQvheBwZ4d$n3v@Leyg85eGEHU3X~Cd{36O?di9#ZH;86#3{!EGjxTTe! zhd4k16cjKF->ifYLGU9PAjctrI+zM+iOD7Th$(-VA#iuw+A0{D7=hN$K%*DLH^xjd zAdP8>*$TD_hI$J63Wf#-28h9BkR%9WFBm~G5Us{$AYEA8ot}z(Q59sw4cz=JN-fSv zEWiv1s1jS~5pkeSHAF}wJu?M0_k*m5$bot!c?Eh<Gc_QBItm(jSvm@NnVOoKdTBX{ zB_*kO8lcJUw8U)Graj0YWd-nZR#3AP6xE=^g~0AaObx)UKgRGSNIkgA1lrT=nGy>- z2nyniXe(@M@4@XE(C#DfmPf3Y7?q?JfL3lI*R<GUPgw!fVL+N;0FC(PrKYB&reL@g z<W;1;Cn$wux>rFTyn+;aQx9YU?&P4Xkdm*Eg6bBM9D!9a$W9IPV2;)`1g%BD6b3I$ zz-bPe*D%y6D}c*hg@U5g<jjK167YZ$Xs;OPI5)IumE6>l3{VFebPXQp5*sW5uB-q) z0|}I_QY#WcC!Zx<=E;5kugVfn{VA6b2v++9y?#SOjULf)WV0xo=|&A05J;NT6Cl zr5WzQRgfYW23_e3>PUceWafeDuvG8}3vT0KIzhb@uu@n?0J#t|>%x@7Xi!Z8)&@F! z4bRpd+=&ln62$3=C8@AmK;SMS&+&;Rsra1_j+4{^n00WU5Vj7k6c$z>0o;}$5(l_& zLMqwORz|{t0!Bl|0HdvRAR}&|5h?Uy0F<Aitq}7kFs;ZmL^tR<6hn-R15*cHYncog z+(&mMj`|0t6+E^Gabz-h)Qn6wCKo`Qh~Y-icp&0*IB-idzZ7-s1mqU5ga$ZtVP}(r z;sta_MIN+v(bR#CutkFgPxA`&ic3;pQfNJTkcrBmrSj<|;Hyi~J*5C1A}KD&&jU^V z=7WZ9us9rYm<xC)Co?xy0py-y@QP181rzW*F{C^Jw?!evRBCz=xbVVa7<e55s7%Vw zNdd<Zs1ya)d5|Ivi<Y9&JcazS)FSYFH|X?A1!#*Ga(GffY7r=4v1lyL$V>yDzz4c` zBQqDX%7^YFKo1s8&~`~22?n<o1spm+kpOKSBd1MBB!iX~V`(g58A1dZ1H+K|9W)J< zS&Vd;r5<D!T?4~E7-0i5h;WI9+bYo9Iu@&N+64^*@b(apx8V~j;A8-+8VKwl0y#Xt zNC8x?gUl$2hYsBk2ry8uDL20?6>^LxWZ(~!jzMF%;KBQnd<Af7!RdOC#mW$kprr|T z)q#>UO0%pWzd*wPci9Ru8$HhS@aVxGYp@Yr(4{9uDG(<^{8|h-xK*PdwFuN(@Jzw7 zE)C=s5LQ-zEQtY)Z-KHaWcV4hz&#Ok<xx_8X<iCw-8eXX;0z6Lt$}Os3}g)qgN*^r zWub=ywu4S!n(&7MNEL2l4Pr4{;vgNcR7!kS#gp_Py~X0x5>RR=O)UoXBw(dCmZBPD zKL`^YYH;%*27_;V2On;%4lbWH3?OqIgh&5Cwt_I>5XEODfh3Nu72M<2QGkr#>Valk zwG0hNGy~MWQU}d!mS{lDDK063Y_x_Bo~mo2uk!<W6ow&g0w;Ay7{Ug22t^O<umJoG zEqM6^DyuP0I7rrm&8sSCD<tc|j3j1q7Uq6*8tQ4#kRHxVNjQ>`oegd7BM;`I4JKpH zNHCWvD-;)&rlwY<Du9X-q}diwg93bPKuI}hMl`hmb+8GhA4V&~mQz7auSYK@aQYUc zUs=H~zXWtdMq-Hqx<=6Lp&5zA;1+ZeXfm@Pzn}n1cM4<<41*eTpyIVyAvv))6~F&s zEp%I31spYAei7kH52M1vpYA{oRaO9pE~x0o8#o}fM3*=q#UPBkV8wE16i5R)hGaZk zMI*XuY<##0kc^8`_<=l)zrKZ;s9aK13SKV)DvdxpP$Bb4$jKd4G8NmRCwiCx_-Kd| zkxCcXa4=!F5zeGAiwAjB5Gc@LzMy?H6sMLzQwk`m)pZn*tpry;3R<8+NWyUgax)}q z5oRJ+L`W$LW7+{+9f1rWgdrASO*_P7XK)u1)I`S8yC7V4fE<TNS6Dk4pk}j1Q7UNZ zZ)yr=KLBlh3uGWVCMSubI|bYcA?y@_AqE<IOD#}HN(CRgOT&T_60L}I11hOtO*Rl4 z&r~;h_`&!@7h%W)x+JD@tPNP01Mtxh{~{%0*i08;2N0h=AeLYcR4SK06olc>D}5-h zp0P$eMs9?}A86Jxu{aeJOjugqB&}+Kwc_=XbMlK*(XQHnr9iBbuo@aJ33n{Sk&qQz zFsEjMW`^J@z^y1O1L)xGI`N=8083Kii;ChwV_5MirMbD47`M5A$Mg`ZM$y6nVo*U* zYC$|`VHemcjl4`91<-U8WS~_KJh>HZ7^|ZI5g?*B0UrE>+=Kxh28Z+-q0D3?H^BD0 zfHFL22YNi3Q$X$m&3i!{lve_Gg8~675H%8L&w64`aw%vhGGu%YoP>(Oy$8@h1Z0G< zC^bE?BsB$Xt^~4o1!<Rs3rc+fnivJ|(T9!)f(M>JgEipsM^LK(GCu;cu>`cN5p_fq zw3G*Yw^K1_E<G~`)S*aKNK8q|1g-o{%mLlQ0ou+A9&$l937$w&D@uwWS40&fIh439 zDS4R+nD;C==H{2?fmhm9<>w{lfNp$BQ7FjI%qu~*ATJBA*4)&h%oNZu_&D{KVA1ba znwykb1nS6v0uM4WjN~au0#vX<ULOon3|`#}4-imd0^KK)13Iuup*T4)Clzb7g2$J^ zYf<5rp-vYEgQj&AH1aYPw7?l6uLOD14>$!9>lW~AcXCN)8BLr5YAb?smx2}iE;EoA z$X}Sj0@@^;p9Y==D+Y%F<SJIQya1Yc%>-W^n*=$C0x2Fq?Fw}JGV@R;AHXpHwF;yj zVpXC-ab{k64)}KL)MU^Ze;_xa2D^VA@<DrG7lKCoKn$=J<WxBLc0GYo9|%JxUcftN zkxCd)sOA@;B}ecS253$eGGn2KblL|v#iy2|FM3Bxk_uW1#+o{KR=R`IDS0NqlMZ+) z95a3BC?u7ZDCDK4gC>kYb3Kp&0&qJYlr51j@P!U_7pE3wrh+fW$t+d?4gMle7=ae` z!fuf&$yYEkQ2_On5%rBSbR$+dI6<m|tWHfqq#cm<%nHy5JY*GhUZz%F7TRDcB0Qrr zD|D>DlZPlpx}K+_u?ARG0Yrsnv=#bUqwo-gr~nPcVVVI_glYs*aDplX@YR2ynj2CD zC}@E0C(;Mi9?<f>Bp<xq1}qJ(Su*pW>*JA30%af2ErFo<hE(v;v#FrzbFe0)v!{?! zBgAf`G>K8`fh^7h-Gqpg5HmrmQW0AlKw%9kVL+h`qQRvBqS6Ir0FV+;#s?_@(O8s# zl$GQbKv%}$Uh|65#L+{$WgKJ(2!k6-pn@VT8Py>mNe~8Aw;-!Pdv8Gtm_dBdc6N~a zF}l^zC9;GE(m*C-T_TIUKLT?A=n#Wsy@I0Dw9E<xZE#_X?1oCv&Me~HfZYM0o8IFM zu^+7sbB7UVJsCaRVT9=p-2E|7)WBRwFsg8lO~XteCagh*P%FIPW*I>b!v>`h7zPbH z=YR`LPzHfq<%YOI6P~kS%0Vq)J;VZ1(8vUAeFZGPfQI=&X<7q0)UXVfkYp6}NFhTi znPY@)&ICRsSd^I#Z!v=#eV`lGK)wMNW1!OnN{dSq5nH@rfdf(kiev?(>nvfR0zSkR z(ecp%m!%-ZprFFyE0|e&pgt;S+l>aaWCE>s%t_77Pf4{^PgDnWWr{MBOKd@_RuNSb z%te?qc#&*&Y9+|pV%unS*h<t`P@6xsC^b8^5?o;x+eRCj7~#JW9cns~X`r%8T}K^M z3#jWLk65ci3?*<GG{QiLa$E4llORKp3nTD0QFTo`le<uJP${r6pc))B3kM3f)B<S# z4cr_7FOG>N#>1E;>7a-#V`AJ6+NcJLdQgB2smKDgVUXhrqjW-za0LYgq`o~&4wlOy z6aK}eN$@T$IIClrnVOdZ%BG+~+r20gaz`!hOpT|Uf*FK2N0*Q0XjnuMra=i9Jh6c% zM{66#;$L_Nu?90w6BS*wE`Uc`o+d7~@Z{>^)MU`@5=3WfP<xa3Yz=BQK++3>gr*at z(QK^&&W~8urx4RFK?EqI^Fg4Z);1z0TjR{t_+x7{S0lv+AtpG|(PIm>rY1MCz@7Ze z5(RAqV+Cb}tkT>9P(vKD(+8uC4zIW|2Jx{@On`bHItrPfsvWev3UU`V(&!9moW2Nh zK0qR9$T<np_6LuRB`Sa?H(<+jK_h|S;U>^RAC%1va5sU@eJBP^Sbzskk_*7sog$53 z5;r^!b}i(3UbxAi=m8z-3To6r2e}{zYe3vvk`GxE2^uW}5AML17K3)pBe?*4-cCwp z5yW_^-Tn*S@sWaL4=D#VfgB8qAe{Xvn4@*nu?)!|)e<m+^pf)nDj_pd@wvt68sGrc zL2eTxx<e=-3<_lkM(-bigBj8rD@Q)fm{wLA$D(!sk$j1s@FD3QmeTVIN=rb2iFr($ zW1a$d)(`9z1<+l+plg#Lx>KNIoRHhxL1U!gl#X;r20Wbd(-cq-jsmB3CD2$KcmaSC zbXh;>%4f*U>EP3=z{f17g6{l5m;_r44^OPH3xYwR3Uy{iW^#r?d1_IrLP272acYV} zNe1N9IOJhoaCCzA3@U-s3OE3iK&1%mieUx#2@r6#(DBQ({Gt*)Ex4n=S}{(ObMp@h z33BvPC@9KLFG|b>&A=rm=H!5!lMh<ZSC(3Yn1=vmLhy!E$UGi+y?+UK4o;yMbSN^o zCj#2#T2NX73g%qUSS4sw8e})zA)wXGrFof!rO*Q&Kmn|vffOU4VgNHH;QEnb1bO}l zw1N<>26XcWoD-6fSqwVZ8oD71G`^Dpx<(D;9q^s+3b0Xfa5B;>Kpc{jQBqP+Y^ASX zoS#-wo>-Ksmztbgo~D<XSE65@nVqShl384klUS(_I&w`Pt{ZMMk;NiBX%jriE)hN- z1q#x^J#zyO1@K66c@f$PmSmh_2P(nJi_$<R>VQ@P=0mSs%1qHvFD}r}EzT*>FU~H} zH!9ILG$_?KG$_+IO3|;<&neE;FD@?8PtMdYPSGcP%)WwxLUBosp?+~mjuD731`#Iu z#pPun!SXVYXn9$VF<8WesGFEzo<%C{ltDS9I2APanv_}unU2oPOUX=5g-q>%QYYx> zQpoY|;OJIR0_W+93dDtiusIyi&Tv?91TPvuMnFrP)Ew{*B1B788D8tV<rkF{CFUWD z08ny-N1n2Rp@Ee`s7{zdje?<}l|l%JHnLL4$tx}ZF^#PhTtKv$l|pe^GW4WNWZmXg z3V|R679d(j0esAFW@28Af}y3ALb*bXf{~$>0_Ysx{1Ony$VwqOr#x9ZIkP+&ZcG~J zfF{tfOX`LOkc*>1=g=7<m_`VuF@k9ZWx~w?B_J?XH#CRJDX1G-AefeLrV+w)BdF;} zmsMwikMIHArVck7oclq`ut2*cz%p<t$N@p1*nkWRf(keg4>T+at)JlW2O7m5Jq!^X zNe}`OuArbo^oBs|yJ1JADGb5G5Dkq$=VE~m4KxF>EY(5hD1s_Na7zQRV14w&FSLWS zMo;{LxA#Dk6odA}FJ)UA0(ij+Dk0!o2SFQF!S$mSxP=W_oR(jZnx_C-3zDCgin@OV zT>pX&MNC!5DlIMnHSR%&x8)Zpz!%kEJMRosK4<GFq=A~Y;A%-Pvm~_$e965AQuiC= zG7tti2vm22&Y{751{J8K4w^d8Mig-%%^+M18j&xFFG>Y%kJNw}hp7(imgsEI3Jj2+ z;VPkL)X+0NAU!Y0-sR*H1yDLIE}{AHZs4QOK$F{`<F$}ZPlYTC#dh8sY9Qh|hz(so zsFX%NUL6!k2rptg?i6xR9pS^-GILWQ;iPQ~4m9LbPQlBXK~|$pwSvu#2Mu3=mdzmT zV1w+jgF6iMOgOX*1UeNV1JWCVH~_Sms1&?p5!6`%83MWQSwA%|1w6c|P>@=bnV*7a zPJ%)Kezss{F;cG-a$qHjjo=Oe%w){PCE)W1<H5FK4Nhw9%0t?Vr=SZC@py2Mqqr61 zG0-kR8aoHcEg05=q6eNfY#=cK2_Dc+Yq*RZXrU5V95YBkzQBHn5I8O{I%gpDpgS1z zbHH~<tAlsnW#%d5<R>TQ6l-XL4i5q+J<yegP(|2nO)D=-0~LOtn+?#W9U;pwQZkEB zlM%>nbgUj8<OV7rA$DpjsOy1w;79@SKt~g$7bO{~YeLIAbOS(qs5?O`bU=f?pc5_V zSuBE15lVrMoD`+zrh=B{7DJo=P+{<JP-0F|YGO*I0;oHOSd9nr0I~@f2i+<w6qn|L zdKSq!`K2ieIhlo}nUE74GLusk$`eaci$DW9C8=l&ON*1slVJxdf-Hey$YEk=*P($V zp*yg#p7;rp$9a-iVlMu(#4r**Xgmot@(hYG@ByueQXC`|Qdy9Sw4@GXHwfpXmf_F@ z682B?Ni9pw!J-dxJ{H80whHFvRtm}rt|5*t{vj9+16c#97r?9kKszFI6d*OQx{)F1 zW>b&~WDGv~1Uy0q3IkgOLt_Jw`J@?bNTkt*pzMianGwjcP#uLZh4Re26i}<NAU_X1 zCBWQ^%V&lL#QDq^Ja7t%Ay9yWN(gnxb>u1W>FMeqmjsd&qK4*V*=uX7fMG9U{DCwV zSP<s|Q;_GvNi*7#D5FimG3etL96*}sM#PzJiW+60pexP*N0kd{_8AjnpOJ|fS_(BX z0cSU7pKxa#1!vE2XRNkDia3<=4N|Uw#+);gG0%?yrD)LpZcq`IS*!pWmBC(1ffPau zLP+W-bh;c!1Mc;fAX%_++Qgn#2hst;5Zgg(<{(2wkfH@-7HVr1q!xzZdLWA7OX74C zj0_A7j139t#8QS~O*Sz5K(4`7V}Rtr<y^8JsL}^T3ak*y%u|RqG_urDFf_K%Q7|+$ zjRhw-Tw}5DBHUI%J)<(IC^H3|7Nc|&!u)j<uqR3IqI%GgWGVRyiFuVJ8JT(M3PqXe z86^sN`Q<p$Q%Oc@aVq$XBzU(P>}2qi3#h9X9^{5qD`?IJLjre#K&o3nPRz^$pD74! z4d70a$_l|Q`o6(F`XSEF`i2If`i2H!`bHu8MlSkM`aZ$F`oS*#LHf>NKKjmK9{RyS z7%l=u2?#5LgBx@ok)w-CfMXEoc$vgpkS}p+fut(Tv|(t5EsKLJ0b!&j3T$01I6ytI zoX`kTk2}afve0GrDWwHDnaQA2+d!>8&~<4rGeJv?!EIBJJ4;gYkY_MK27oZe&0Qct z5XRl~1<8W2vI1ykG)EyPu@dc2aF8qvgO8kowmA?9798TZ5;#~Z)DxhQ1X$)U0Ob%v z5Mcx&j6no6!{AOOAj2?YtGp-;cg9x+57y)N7C0*-xe+?^LKSyF?<8|9DJjZKDlJI` zUo?l^WN=QyNTm?}!nS#0Jph!@hE)2s{Xqo@(tr`PWXCpI1mD$4KgTI6fF^vwvq5fX zGeITrDPYJI4~SMAXhjKlLJ1{eKtplqr8$X3@i{r*<e!`f-6^U7y7o6EzeGQ!07XYZ zIp}oZ{9?WI)RN@#6ts=N`New487Y}XNEb1oCh5#Hh5TaBy*?!x>Y$-9JtISPO}*lh z_+rql9<WQy6~Na)Vx}%==>ngmRWLVK(16TDX@Vxgb2E!UyX!!go)woUfNopLsZ_`; z0ZHM^*Pzlpu`Dq&2XsdlI8edYG=Lkz`9<Kd6MayxH3n2vfif;KhC0YOBQ-f2Q9>6h zIQuvT2kR(=L<YF(C<KQDxjOoSXvd(Cco)YISFC2`R>r4-E>Y9~9cq)Ala`p7qoV)| zB#;+Ua|=o;LETT#cFx2iNNoU`h{Lx>2Q;#iS^`>sU<fL<kZ)I3*W{vSq6HQBkRyvg zwHjn70pzZn{B-c}FYKrY@L&?CDF8|zNYk9TDCw}c5|oTm@=Htf(sD|RGc=GUYC$oi ztbm?3AcLI65W7HT>lvCVXn>bjmFkq~K$4M8iB55WP9bWdO|3{xE-guoFD^}jZdB2T zMjIJPtw<$mSOj*LCv+7@ylaH3b13BMH^PhQ!N~)(jL23UsvmT%ihGcwuY#MSr;n?P zqPnJXaYkxR4tR40T8O~&W<hxhePbRH^5C0JLBk!8EkDo%02*r7ffQD*eul;dCI+Sk z1_~Okevy&BzAi2v9;i_PZUNxh<5pan2HH$!s{kH!iZ-&chy^t_&_<p>EfVn1F-m&E z-mF125j<)eZDeJLcA_o#sCv+l8Ls&Pq<wA>6Hz?{DMg4nC7*=NQ=s*RL~on|-SMC~ zAgKb94nWBOQUT?I?!C&%0TsN7kn3eK^GZ^Sa#K?>LG4M9LX2r4$ciQ;lQbY{47A7x zX>B58nTDH>Yeax!PzY)q<QL`V6z3vEB51T5w8T*(Jtsd&4@4kUYQ$b0qM)FluJ7+2 z?;qsv6YLuwAMB&21xb#21qGQYpwy|Qt_iw^3?(tbcK3iLM?h?Fk_C@|8dw>D(ljI$ zq3D4Q@+Ipfmt)!fnFiW72Re)yQlS`v?s@{53<^$IEn^6p*@lDz>IMevc>|k~5Yvr7 zljV3#M{zm02!>37fs!F;JU9t@g>HT++MR-+q8-sV19=Lwl>kyxoKaemnFC&Z3G!lo zQkDkT2DD-uyhIOFa4V#N#-WRn)QR8Ym6l&xf>y+WODFJU+nBCG_!7+xkYo#Xgu1`4 ztGgp)NE~kvkmW^a<d~A+N02=V>fm5efcTd_Ee3EvV$5-XW+ve6ZFmxbbSxl?PGH>& z)Kg?&%T&QyK&PxgYw>tU&_ma&CL=ZP)z#Gl@{3EL>OhT={4@nv!GT<&Agwb7o%aA; zyOjgFPZzXK6k$eciUMRsE7&mb1#b$Fd&@v4B4p-)-3AJ7<Q5ue;c6=A+ON_a@Ttq7 zqzqYi2AW$=0kxh$tCAqzfSZt#S(FO8PoffZ(tTzL<RHe>!qUVXm<DjNSAeTS%vpf^ zkd~j5lV1*UW^O*{>fmJX!PCVGx!{o*=vf#FnQ3tQ3X1XzQj2mb6^hF<OOi7nr%57v z1Cbd(1+tNXu7Y!Z9_W}ekk?D{6~Ll!<6NCV>sx~rbQMC167!1FAjhFVybiiJJ+UOU zJh4)tIJKw@sf+LG930{w<mm3IpsNsEl3$dVo~n>oq5xSf3RMfY0^Wf@)Fhzwrw|NR zHTaI!fIAJ+Vo;CCi^)Sxr=Y9Z-SUfa6HBZVs%vBN)b&6oc_)@=Btsd<+mPW^Mrv|m zK_()WK*<nlLuxW;J$+(&D#SR2)a10{l*}RsPaTnPKw2OeZXaAL=)O#-KD4=TxFw+F zjKvT`6+p)jl_yq0c`2!&Ylgu|5GsPXjb1?k>N$;Mz0_o|Ss**127#DJrXU9Z)P8^P z^+e!~0k}p{K$>fUD8bT}LMr+}6;eJZfr5HiSd^lMEJP*#`{%)GkZb@2Ex1gCgsxsr zetBw<h9>AVLUmA?W2BC12S`1(UJF=pd~s?CXbqcgF^Eis9JXX@q(khbYU<EcHZG}Y znR(!onnF@@3qZ$9K~68SwIFJRt%3sBmpTwiL0dsR-iWx}+6qV=A#mBD;Oy@g<{A|2 z>F<Z=2_e?xfkFd>v4%))nL4Typgh9eF|d)K9y_E<7Ub&Z=<Dg{uHfb$q~PZo4k^|^ zJYUBU1#GDnWB>|Qck}dd4aVgKZ~}m)Z*W@~G;{$<@fevGWGGh8LUn`UT^Do#0Ju*M z=0P(HkujI72UV}5psovA=~R-cj+V~|FA)H_QeC$=zqBYBq#K+XNDg&yUE$^$q!8k- z;N$P?=%Wzq8WiRlL?95Mr5f46SO5;Re06AIA<na~hF@w$L1JD?Sz=K!xWEFJsG21E z+}S@MQo-L%0g`4y{1p&YAaRM!G04>sZ!kgH6`(CzilC#G!L0^R;SaBdKrslySkoFL zW8vx&gJYY>#&$Ba8=I0@L~<wvxq?zf2&iQ6cT?~W4G9Phfd(0Ip%mf|)#c)eHBl9% zmXsFdaY0HONaHfKAh9SlKCK`gR3{W;Z(bs`fb!G8MFqJ20iQPpZ)hfE=7DYmfEM}? zD?s5rRNF5gw}UWfd3_#u2bO|kn4_nUqmz#-*!%F5rL5puk(gVMlL{IzLRAAE89-Eb z%Ah$@V?#p&a|Hu109l}*02)jJ2^ttc_%PDnPr=1A7%^L&465-#9b-h7m$d3U4Kzpq z8aDt%wq9{TPG*UQx;|110%S92WtN^gsCfWZ4!WKP;RBEY5YADsRe(#wOhP^j4WtN! zLBr9IWq;UK+vP+X#766yS%Jn0azMvc!UGkgmoQdWtpuID1Ukb9Lnp#!94j7kqK#tF z8hIca!2@zcu6INWI<WQ(@U85i5fG3I5J$6sc;Ju#t(Npq^;Hc<(~W)T0_GfbBLmRT z3OvxGbuFxPjSwjTWH$&WL+nRVX9Nyjbx?vsEk?lU2{w@mu}51$T>)eb*c32F%M9ND z65JY4n@B-j%g_YGfF@id|3R!O&MzuKnuS3OGa!|kApQCvC#b`-5~%(vhmNwKCdD*8 zaH~K=9n^b(93lkDBbp#Xz!MknRDqO@L3j0nG6H0H9j*dCTLhBVOH3*T(HclDLkz+p z91hZ?t)Q+CQVTYduv=kT{0l$_hZgID-3f|07>0QYrjT+4@Q}o5l)8c~sDX}^uvJj7 zRRHURhZX#mZKx+e{c}(cJ})&nwYWI32(iZz+HXTNCo+pmiZx(fgKAet8qNTPLT+Mq zYCLFauAn?cTU{Tn3Q?<oCIb^w6hK?pK#h3?XMbN`M?V+Tf*BD_2<zdk8C0Rt;?yDy zxc5MANY+cs0X2S#N>Vb5G{GrKUr!I_7JaCNpy)2bnly7@V~%NhpcR)Iny^w5JtWgW zYv#a1LZJEslzbs~wSopfKwDiw$JJ&aRv#&Y>XcM)V-QrLAm3mPcfYa%_z13?N`=HU z(8^5Ez>ANIXOOFN2x8_Bt{QZ+De7T?IiS)X;sMnB2C5sN27zmc9M}z#sLDX$hq+KQ z6YX*|&_1i;)S?p5Rz=*N0tE`_4lwXk8`#^ad5HTZL1sWV34=o}KTQF2K~phE7c`1c z(*(p<3bqOmMzmF?wjrqY!7}F>4KB1mHI$X1S*(r%gsW>98x7*)&;&I$Q`^`I>5d`T zu}Ywb0PPpS>NG@hMav$@i49r~rlSUUIz~ANaR)frq9?fIjKsWj@PU?yMl)zR6(oc~ zP6T(;VaZ>is1z~crwmC^<%ysRgCS#R3Q38{*`UM<(pjEglnok=OUXoB5euKp!&;Um z=Yl5b;d7LrEC=mxV9B8vnG&9e71Tkw6V@7y4+!!H%{A(y_ym+$ON&z-VKe9;zMeXw z3dPbjNX|uCS_Jn9cvcc_HMCV-TQr%4fk7ient_4AHQ5bXc<9CFX2*kbH)!`}X=-s+ z2MYs(uOgFgFjISkB&OOD&_T#0d5O8H5S1qweIGEkN64Y6gv?XMgO_&4gBAcl4Q6EY zHD<&x7&<r%9Yls0EWzd*$<`hrg=R47q23Us(^-54SuqR+SH1Bdmx8h$M5QvbZwYfd zdKiGrMDAul)W)#+u3^J46?RfOcx@2WQ|^quYZ==k#8I6Jy2~dy9yE6Y3)OOF->EF^ z5nL$hvf5b~7`#Kkb}699=%Lz$V$=pk-=kQ99h^tvi&9I9GE>V^b5rw5Abxqw=qtz6 z9wCfsK1>}%O&F7}0&{x=4mY5j(E-sQ%<8Md+8&{bYADRnNKudCa#KcMS4Iq{#K(ii zzvAP;CVL<D{@)%Uh-xk*MS<mg^;msH+1g8Mi>82+G+Hu6O-&hU*iFh%LyL$EHA3kk zLk(XXXQ-j)7t|D(p@u8`Gt^46x>y((&>U1Wm4$(!wXtX#3j;%K(R3CDhNO~E4%mTL zMKi#D7tmy2P*&70EiTee%FNSG%_~zVs4U6I&*M^7(AClf-4~simu{s{T9T$~0TSU- z)}k)pQdV$qEG@~%FS1f_%*#tvaLX^v%*n|wtx(Vi&C3K&PLx!FYCQkqoP13#WsnA! z#FA7i1+UVaN>HEE1S04RDfvAzK|@NFR$R&o3JPwiNkyfgp1YBOp@o7j#D;*3%$&@E z0(A4kGE?*N5;Y+jL6y9Mu0mo#K~83Bib8;EfQ3SFNo7u|LV9UtN-EfJn3|Ln(410! zaw#asfCtEtr6Cnkib8RIZYpTyMP^<)#JxV5$*Fn8sZjegoHZ4k^9w2=%WjPf3{7-F zZq@^<RZvg>pTq$>O9QkBDF>oGMWHk=CAA3L%mB^KgBu5+%F3}IF*zeu0c=ZhszO+5 z5%`94BRvC%>mWz1Cnx5CPJGEvDoM=DOHBdI)PN4|u+rBrFE7_i1e>9kUzDy7wXRs- z$J5!>FW6PrNY4P`I0xsP#NuKFm(=3qqD*kJAL=F092RI)Siv#C6LdsES!N1oIxZ(i z0p5~UD9O*y0S~o+>Q+!gJ2kl^r&0mjS^%Bq0*XY?iaE#`OvQQ%exPf4N-|P&Qj3dq zz`llC0Wk}796(uWQKdpsVsU0NxJ?BT$^<281qG-TpzS<)smY)|3fwLfYrw$`zD6A3 za&Qc0WTt1N7D0kAtuzm81Z*o3D793A_Q0lsHvpnJtRz1@wIn082-N%pMNm;HXyG*I zAbyBxpiO3}6(xEK!TAu6L97RrY?+BUIh7zcgJKDEM<u9E0_6!%3jo{%ELPAc$w<wF zIt)~86>Eb14zj5fv=$HK5AZoPB^jxC(1cwK4nW9R@5Rud$*F`M@B(!eICArovQm>v ziosz8y6Y|@u?*A@0yj=G^Rg8Zlfa_+<zNF7lS@EzoG|}$fg=$TI~j>(;Ko@JXz4ik zaP$<EROFnW2ij%@O+mT}u#z2OhOPo=a{=f;0~jB)+#i{bddd?_6}X84&PmY33ST{2 z47Uk1Y6K29kUHv?aavrU;uJEeNhOj?S;5!eCDg|?nEFO%<`(1^l_=yFb8&%A3R6f; z2G8s(K*cq{JjhKid8y^`AT{6tRvl1vky;#|Ssb4NnvqIPfr+H2mf#qehnNLjEdWzq zoLT~7f-6B72ON#@pbjTq(;&*QJ1q}%_C;b!3dF(iRxY?GhY=7rK}<ohAC%Z2E08s5 z5~JY7s??89NI3$l`86PU89FGTt_~SBgOuT*0atLY1+Cf1EXhnQR?q<T=%6KpCa6qJ z1s?zfR^=Gr2@XM+A<7C=O5M7;x?qEqA?tS)+(P}FK{E%zP*Eyd1DY&=6*SOE0(fZv z4JT0AP*+#?1WmIh=466)zT_!DLK0LC!vYsv<R%suXQt;VpdL5{E?STlsSr1F0C$Fh zm4a1%QkGQ$sN_!oSqb45mlS2@r57iF0|w+sFm^;a>k8d!QqJK6Pog7SVGFKozy>0Q ztDs#(hyW-oVTCj_EMbR)BaRsd8(<ra<>2vH)bMssEdd?T2g!8cHQ|X0>6vAzd2kQH z3|B~m4lEUyB$lLtT4L}ZfwplV`ZPcR2nxUK)Jkw{!T1n6kf!>Hiy^rEcq0fkete*p z(ZKW~B@2`@+VMwv0*;d!T~gB$OLM@da+IcmT8fEz3Xm1+Ag^Mv3*vJcTZTQ+fm5r3 zf&wH7f$!xY;0}1Kg0vz9B-9h25)2a2h`<G@1YuAy1=kKr)8Lb+z^f5alevz9dJ*z= zC}h`xH;=<j!Mf8M>+TtleHtJF<ytk6vog~ZKss=4vV@E^!mWgA$w|%AKuIi`pxwgA zqL2_l%1<DjAY7CPD!*JSl2gI0bqyuRY7tnbfan9~4Nx8d=T(JV&^a$jsrWWHfQ$xV zP>U0ErlFpKJLr<BM9}dtrQmCpz(=2g@-xUxMJ1%X2GR#vgr{Ju0J_fr)w>F|3WzaW zkXleQ!+Z~FPs7+CgNso|4?)VI<Mhyq9o{^FZ2E-h#S&5=y%?bdRuA%pLOJwqWoT;$ z-9sSVa8H5C!qnsvaIk8C_ThnzfgdRvof!*SM1<mPkbdkKq#xoL__ltSahjkz!O?Z0 z4^D&RL7RJ1b5fJBtn1AI6%?pbu^=5F3<`Kqs>sX(g#eD=1}Oxap_f`wlA4#I5sk&c z*{PM9nz4v!Cy*u(M#^lk**maVXsHF_eQ3iG6p={skZgvzKow#%a$$qCS^(6z1N9_8 z5tXI`Uhobw2XRC!m<7okSZXrNn1jU#L<_jK1J%~aCAMyfImM~SXStRm&k?DstNRzE z=0W;qASZx^pFxdYaNi2t<AWcL3L4o4_vgUvRJa?!Sr8n#sVT6dii@FJY+%kR)&!ZG z2sz;ivF;ABlF%`y7}^nqr&3T60Wur3u`o3SOC4O4s!*I-f>g&4SBZkU5MZCeDp62C z<)x$6n$$Sz7*;8eS;>IYJ1E$SQ%gX_4k#=jIUFgR5g`al&am1z6LhE+_Iel*yfE*B z@*hSc4>dF}t3L3(TU2xwETKR=jo)cFnj%P!gqQ+$BdE}UA8`du%Gd)9oONj3gh6s7 z*gnYS6nILZwv$0gI~jE2B%}eKl%JoInwW>XF_#P;HOov>01bRW_vVB03%vXVS1Ir` z1TO<Xi7&HQ0aP%6F8l<I&w!FExcmU;H4Shv1U`=_A9T-QNk)D#VkQ=(JvTKKyxJY4 z51bl62Pi=r*9sb-T3S<20V#ch%|pujAX`A2z~Pw<<n_FCTwV=MErFDIU_GFU24pW} z77yI*K(S1zTnWi4?5#_9Sb$o7AP<2sc*{9iZ6}PD0P*b`(3TC*(j?GPPUvk-STG@~ z!nDjhm|{>&gA^duZUoz$peP1kq6^Xt9_Rq=!a_0u8VsbiIw2*U!q8}-ff^~pwS9)V zrU4Y2APmYeAYT(~nq{Ve$_~(q7}(WZm@Q_IfglWNW`Wv9kg^ff(n4wofts!GTn17P z!`PR5!DQj4!i^)wOl+-Kkckk}Km{H6f^8k>1}PMGLDb-CF6P18iXihq7?fe*f^d@{ z4M@a52kK}utmT-QlM1Ts;xqGfpgW7gGg6CE!CQf`3|zu$8gL5{UXFu#pqvjX4Q<uY zTZoP+pi}Qt!E*wskSmfC^YWq73!sHHph5s#YJ!?8;DQu7gby+kbXzLiQ{ciMS`8ON z>gD2s{Ja$C06(ZrtPhEN_;LG?ZJw~{4@BJ!n(={@5?~)g_aP~yq{1sP@VN*DmEfi< z$Ycfhb|^@NqL7bRT9J~OmX=xs@?A;30<5+Ic?A|?`tZ<#G(`)bw*jC#5AIbWTcd~w zM6bHwCV|ojH5#PIp#^JV5#J<03r$d}12r>KAYJZae1Qw{0A&G;5*F~ZfZQMeH4%_1 zX;`$u0~LESm&mpxN^1bu5EmkWzyg<CJ0UrMC`&;(43ul({v1s09#|y6hl}7rgf{*` zNoxnG{es9#NbMU?W7Jjw>&P1{@Q|7-;I$y2qu~u8B`+xHLK;C(85;$(vlc-u8~E{I zMVU#1p*2LXYQ{TA1sW~EUQ1)dlXq$*F(Xs(@gHzejooZW>7-z*0IJ$hMz7$h2Gjyj zu(d@g3_uZt8{--a!m?T&cPoNemnqW7W!Tyx@DRleOlU#{O`m|Tlh9T$#0W7+6J;Qp zG2p3AP!y+u?!yAjkb<ga+i0cS#G+!QSePIvYuYO1R_bM@R45^p7V!JBkna)#^*zw0 zz=}bOs546xQu0%wTcIn!6CsEiA3VyHh<qmzQuRSx<qh^rJjnfImH43b2Z@=`!8cG{ z0UGiGWnJ)!J<zFdpfx<8dq#@#QP07Ftfv7rPryz9jaroCgVxqSmYyNq4iCy2NZn@W zJRx|=3;g`_)Vz|SN(D&8p#X^oq@V!X0PfkrJPA>Wt7{E!sX%)1P)CCAO98Eo0WFw9 zzP=vKfv_k?asc-JHb@@`XJ)3r+yy!^Bt5kVb?gc>TMA7pnMmP++)Ib-_Epl;(}OC6 z-A$E}pO>nHs7f-yb2y;WDG_x8<Y+6<rUkuJPzo#7K!g`kvW2=7enKup5hw{Ft4GPE zP*;T(rz(I=1~rkv+Q2PsD+SeJ1tkSl1!VmQr(zanpdK42Q-RuTpy5Q+kpaw71Zuq} z=$09fK7@rJ9>^3dWoTxa0w|DhPA_2(29(tk;CU;M@vxErl)Vrh1DOEAm>vX)f-t0L z1BX;RZ1IIgW@ZXx3>;)KQgsi~fN(TuYb_{xF+&5{P)Ml>HW6YAC_s?RgoK<rA~}JQ z5#|&hD5SWGX0m`*OwIx?kmO@vU;ri8P|zVJV538sQ&Q84W`ou_%Rv^Sf>!Rr)u46> zvq0*+Z~DqGwnuOv8I|>jnSsIE9K4nlv{DtW9X53i(HP*}4q3?xmk0I4L7@+k@AAHm zCJ$T20Fk%z_64nTorA+GMRQpg7&6pQTvjv>B8JCPMe`v_usXbG0TxM^tBV$bC86t8 zkprY?5oERMVsO|mfvi^LOUW!wOiwRLO$V>4)QE6*7<9{3@h>I?ttC@%fGk(_O)N^z z0IgTGfQVwOSB0!r^UE&-pKlIQX{w;B;FFqP0J@*UBQX<n?0I@>5itu_b2HP6z<~y; zzd+?ZbP10_N@77iXzL94HiDwW%slW+7wn8Sh!a3LP(eWhv_~R7wW6dbF}WnZ%nUrv zoSImalbKoso;wPFt`vr7ax5sy%mF!?w(D$*ONvU9OG=CIExFAvErD!ihm4V+rXmGc zSG5>3EFeCCc)uiH0Wvw3o1ape175ldvJ)jmBGl_DB!ZU#gMu2gVhYVpNa!no3jBhi z)a1;9%o1?yKvDvDjV^(ez?OOt%fM@-p@~ihOX2{V2wN`<UR0Y|tN>lSi@a9Y8Fa%b zXnx)~KQ}i&uUG-LBocHKj0tR!uqWumuRO3*6LTPIiHlS96hiV9$}&^S6%rLd#T_Jx zA*|6+D9bF)EP=Qex|$f=2+Ax=O@`Qpx}-R%Qr|?+Kp%9lbus9gj6{W;)DrO4u6&3g z=#JG<2=G^M%CAr`v@kQ%QSi+#%>%8BRS3&WE!R<Sc2ux5F)%UGQ3wrogsv|2O)bgD zPeH8qgk%GV>ADIjiJ+VS<9Rw7Q-7Jey1KdxO4<R18hDdOX>KWKmtTqkXtM`ss~GgO zwZuFH$e}r)v4k82H+RSlae7=_&{b$TkYO~0HfVb@KQB482)vlPC>2s|>MG=bHs0tK zCntiAtVBtHpwtdp=$}^xS`S^8s(_k6A=1UAMQMr2pvm35;>@I+RE3Px#1gQB!R;em z1-OFzoWvr9qD0Ucahds$tyQ`TrJ$B<YBA)HA6<nq7?;ZhKEwxJ=nqPV`DqGhnJ2Rt zw00S^dOQW3gFtbWmY9>n1-?*I0}^?lqeel8B!Q=;^HLLw5X+xoZUY4rXaRa&3RiJS zQED-$04PaR(14@`9fjo5q|9UmQ1O_TpPQMOqp8OQYLZfaK_(5??$W}sh}D<WT;K^> z!^s6&EeHvI4bZB}5@_>WNlD2WEix29J&B@%{2Xv$ggx`5!fy2h7h8nXg3Q2?$H0ji zvT8mNBUvaE=jW6{b`F3qqD{`v10QPznY;u!GrcG=2a?wF)4(I$(3A)2;=!)71#NFF zE=bIS44$JE4VlFXpav>9wVNm;CMTEX=9DIufUcGW-C0wRm<Qc*0Cs44D&z<U(8ho~ zPyvXPe^Q}i!JyM>lQTe_Qs{(gVhPA)VExIU&SqkcLP35eWF`Sri9xLe6-}TT0p{Fd zh<m}?BS7^WL{DZh_{tTqdqF!?6G59CN>Wjx3uI_=KIkNg638qw*vQl(&>~~-Mqco? zOK2Yxt*;MCD-aBJFgU3wSV0E;^V1X(i;5D#TZGbb@)Hqv?!qSaO~4lvfdac&A+cD& zNH--jH#HBm8zwPFM<FA>D6=X*uOu-CQocfc2rBnn_0sheqNBma$Cnt!>L|e2Mo4VX zwahSalUV4!SfmazlEd@B<3I{lxLk}#x2e$TAhARNBYME;0X<@%0SCXz7i23quwczj z$oU&q3ITcwUXH%5kfqchU;4xDQ%?kM!-Djqy-M>^6^slFj6o_CtP~ve6r5b0y}>4e zgd9^63m{FHVu%LRW~&vJmI;n#E8Iw5c#{=8b_6>$xFlZz+Ry~6R8mrcSXfY*2pX6K zr-f+aSkPuI(0EO>0ch{Cv7UmK0;EWZHblsQj>J&VS1^Ml;)2Q~gbCo&JRyb|#A+(& zD;Vj)jRc!u2{IC7DM$+Jl!8jo?LQDbU?mWy0mwdcWYr3~Ak(xI3M!MJ8bP~)kyJyB zH38WOa+JP;F@%{6b_ZAwH0jtXSinryRxp7ulN7XJ<|iv?D-=|wKtc#ITd4ri$;AaN zY(cdrBxDeUtxqPX#-vvf3vvOt{stu^NREJ&wUC1j;dS_6Dryzr#Vj~Jz<mQ9<faON zq82qDgUx`}4mgWi$fiGh#VptuP?dwTsD+e$qs1(8#V}gTf}1Zmidj&ugqN}vph6Z_ zQh`%j1*p)3h!{dn7pOoKgU};;DiGzHF;q=rbVZ_qje>z5=$cIfNC8}t6kU;oA($Lp zk&Gdj5?zskEC_K*BFJU~JyQiOg$hW~nwwahtzfHAk*J`pP?4-)rvS4mF*zC}2eQ2) z3Ch$`sDO#;D`-?CLWMy(Axy{^XGIdoJ5XyNH*1580$BqpdMi?ptVv3N=mbkbnP}F) zY}Zz(fGUPq11YCL8WTaqctsNSVjR?D_H;DXNJkXk3Wx*^YO8^onV_+Y{5;(}@X%RV zszQ2delBQVf3iYuDrn1ZVlim5Z%%rCQD#X-F0}CgTE3AFYYl)dAp^A+i&8-iT=1w% zYKlTqC1{`nH11tep07|0IvEVa0XGASL1WmdiOCt@$N_iGiXjCLxP&T8%mE#v3%UoP zGzn%p=%zl<3YF~C)B*+2bp)AtY2Z^+K^{pd1#NBun+9q<f=z+9>OsDQoF1c)SX`W+ z3_6rN1yY59ZE{S3oTmxeI;*3Qn5U4KQkIyPoC-N!B{x4Wza&2|GdZ)Q5;S-Z8f^eA z(S`2!F3AV&b}Y&VZC1@lRX|Y<Ib|2TIW8Y^_AbbA5T8N=60;SCvAx?Iw7uIB?6=^= zq|Cfj1&_><lHAnHA{~@n>N*MmsU<~;3c;zFNvTC8keVIb{HA1Z2b9ObiH6*<9gqQ( z4())<plD<V9D4Y>3h7AQ1k~PvGqf)P8F7I`pF&ASVu=E5stJ+aQd1NlJD$Ndg4_*? za(Fia)RP1W!1GQ~Vz~muL}-G*-W^E8={QhMM6n(@H-S<<I2VFS@x&a3VrX`PWI{;M z3UZ@o3209@w5tQk%J8*TAjjsU=B1Zpz?=>~QW7~R5IzO<I2B4Vic(YcpxY&aQo-x8 zlA+f^gSr|J4A$h9U!;(mUzCb`c#}eLDrm!ZNoH~mbVv%3+Jp7172pG!j(XOxq^<+% zs%RJ)7@BKZDL8^wx`DdciQo<MAnzf<2UJ!RCugMQLU$Q~Hk}lM#x@H}6Z1+S`&c1? z2Fl)$W3)kq4(NaZkV!s?>7cFXnTdIz1Ej!?1U2jmphqS^$KRm073e{h@VTev7bj<? z=9OfoWhN{5=BK3QD7b*G$ILH)Z$5<AqRQBTf<jqhQ6~7hn-s+92@2R1Lq)+s4Bk)= zayi9V8ERf8#3WtlY%APdpb_hw{QLq?ArCsI7BpypoJ=6v5G2gJbchhhJkV-H<m3yH zA(Didmj+P}G7mPc0II<9QlN!5XlOpMBoUhHz~>YoXAy{Q1qB6|d2j)6MFhz?a4`}X zF!RzN0jLX~U4SgX1D&T)kY5Zwn^_@KM<Fd9q7J7G2=fd<YIGISGK-2!6hL`g7wlBn z>;=^PwD`<8uu70>EEr*)5lB{7p%_%1r{FaYtP-Re3r3h%0J2tBAuqL}1h1#H4ME=4 z$kaB}#A9Ac30M+xm$U-twr((=WCHHK-26NR1qEHysyi(+2UO9MU@FW!613n|3N;U! znW;cQi)85840)xwpj%st74ixoEd^z8{|_9X;GCXPqF}3Fs0Uq1hh{(MmQO^J(H-7o z^aV8;oxn{-M_7{)y_AAk2P!Zi)k|85LQ;NdUJB^=9gqm(Is>?HGH97Gs1^g&PGyNX znJJL@3T1FH1730o%0VTz28enJmi<A6ej?m8$@!UikVVGef*w|~D?{@Sxcq^dmz<nm z1Y6t;au>LmFD^;VOHNhDs4M_2qAt#a4BvvT-;Pd?Hh_)lfiC^YEhsHXRRFbqAz8Dy zGzpS3!SzvDVh-Yz6qIITGU#eDa2zNrq=Qx{7v-0xXMjBlb{(X>0GVV3RbVNQ-Lf!K zK`n2Pr7-KDCP7Os&^|!0N^tWy6>Ms9ei7)18Bh@Cr9;YWa0o!WrmO(HNDv-jiN&DJ zV<o9YWr;ZoDW#BOT3`_fk12?5kfuyfb01W1rfL}IC>Uv4L6QI{`749QSrZkCQVUBn zLHBj%A#E~M2CV`EEmVi>O;@N&Ey_o7okDSGGAL9MOBB+hGh=NHz-Qq=uIVVx$j^a{ z9YZVu`xxZf%shoOg^Wb-K|)EX5F<hRw%|skMT1U4v;|Q{v0%zL))uj)SQ#|Njz|@* zg?b7aW{_SP$R^MZ?dZ%{(2fZMJxB@#34?GNe2c4ro{j<p$098}QC0w@r=oJuj%!e2 zgGC>t_=a2|0>A1Ha_2a7A{mrKQo%#q;HU;!hPl8-8GJ}+ei5h@2s&8@bV4L39>Ea} ziXU(gK@vp@s$n1ll@*FJLCGF+Gatx(IjP9m7L=?qz!?K12O5adNXyiOxE<~)kU?pn zEh%ZB)07d303?o{kuy>iKoh*sfiJM*K=G%MmRVp3zBsU;2;2}#f^;=u*%)LL2!qbK zMefJyfUaaIDauR+O^qNDP9CD?3+mow7AvHeCKe^;m83#@e;~6!7+bs>nIa+{qz2?P z+uY1N4FzL8El`qF(1Ef*XKU&x<Q3=@7Z#Ohq=S<fScRqnQVIZ>0SN}Qsv9x`11+H7 z=>nXg6*ST^A>ok%T5^~RI+_b5ywMyEiXBMfKCvhjG%244>H9+3LEz+UXo>DELj_v} zV?BK%h_7@__4Eym^t3?U)is2%vBf5KZ=km;;QlZI$14&3fH>0v-I+$9!?-gIwGH+3 zjrFv^DMdFe6C;2VQ&J#p5qP4?PlJpGz*4^kD2z41jVN&TfRtpQ=mFt0*k*H3$fJZc zl8h0W;}CiZ452PUR1rm~#o%MWK#_x7!owU0v48kg21YsxpkpY~HFXU&M`WF#3_e}0 z5^K{FTycUH)qsk<q|~(hB1DA-N`}e`;C2E^9jWB21X>!S6t1LDoRL_7sv#57GXj-D zndx~NY0<i-vASu|x@NJO3R>X82`X#?7B&SRGohesh<TC+sIW&e2B99s7-O(8CPW*9 zP>*7a5!e`Gm@!D{1QZG&3@I~Fno!W@JGfy3I*ksLv%pyy)JW7w%gi;@R7gUc&J8jJ zgq1<Po#K+rl2Y()W~f4NJ5eJoH$P7kv`sHn0bKqVnQQ7OXc$>QR*z^Hp_Q5-<3L&z zY!yIN0;ERJ1<eLyIbs>47=oedKr_gA)q#Q^RF~u?R%jULXc$`P=^H}z8i8gNL1nbD zo>p44t~n@rQHm*uO*lvtqrh{O2%`*R!DohG7zR3p95i8H3Yq7HwZK88D7X-Xm1B_R z0C+({4!Grs#U!{|Xwx4w=?`v7fD#?3OgGY0C`!!*ue>kKgC3cQ#T?Ku5;&d=VKIbW zuYm#}En3$k7F2EILRTPx1YsDQH;}77U87id<(HeE2e14<fsEk<aQ*@r4a#BK;N%0! zZRW9>`o@TnHzd1^K@Ndev$}=|yFjfaxMet8Y6Q}q7OiU>s}0K9hOxS!)CaZ;#c3$b zPy;<31HI8kC@c~bASDUBpa7K`L$MJGEpwoa&)CssDCF=}Nbv)z0YDKu;LXs2f}GKs zAKVTZ+%-R_938Fqk?&xHm6xOSzBy#g0xUp4^dPPGl|hpngQVYE47zO%bTfDfXlnsz z5)9U4gxmoRYXd^Y6mSg@Qe}7$d~ph7Ad`}zL9|g8aKjTiEC?PF)HTEy6C}6qM^e9! zI(<G+(;L*`z~~>Mbkq=~xUDTlw-L<<gjy6M@b~o~tuspdc~tD<focY5TMOLx(giK> z#o29xD8btU1O+nIUY#y@*(#zZMnb0!sY9oW)-}Y|pQBEhj+Cv)?#C&EmjZyZ63#vx z&i)&E-%ZyT(VfEEbtAs`26wiQx`)WUL%cn<v}jO7*eZYxz};KJ-BVMh)>HxLf-KN{ zJ*Yj5eR2ylJp+wF@U;Sv(PD6q5_OJ&g82oi%q<|zD}ZWY5QdqX1DfZ6)hVE<4#)(W zjsjQ$(%S>A=*lV1R{#xagM9}w0K`$SRY(WLCR`9w3Sl4GMw{n@k8I-{p+~DXK=DAr z=zLlx^2j{$h(Tt7A$-6flPIT?-W@`AJ1m#NtxC&;jmD>x;24b`tpIgFgQKGrASkOr z@n{7I4G0i5(knp9x-3YOafXP=I3!V|DLN!k`1BlfPfQwDZP8NjsR(Qg3=EJRh~Ue? zye++x+as767#KVqjUghleHSpcM?lnpwyr=#)4XSbj#gNPW=Mt_Oml`Bk{<XSU7+(M zkhbS#=I0eHhn#${0(|npO329v0`N=apf~MlL`X;uy0Z_6zpBeWxg<X+wFq=P0Iu7* zAiJ;qsB-!NWIGY4-VIMp0^L592yO-B7eP1i<S6($1_gr-0tel62imL&Us0*6kd>bV znlQ@EECy{61YL%dnw$>m*MfRG$;pWjhk~*)L@n%^)?$U?(##U@YEIBBUrBjpa;ic~ zVkYQ9r2^0$+nM=!pp`Y5#l@+)nUICo$Y!NvmSuw1B|$IN1Fa+it>?(k1D*L$kXn?P zp8{H9Uy`qol9`@b46!OXqcktO7}*@C_EZJ1r*k0ML05w*fMy$$6N^iVbre9ys(=rE zOw3EnsVs(Wi-w1Sf<kcy=nfzhZQxZp$TlVC=Rvn^gJ#<E!I!5S;ZvZORseEDE@<y~ zevv|2Vlikr9^__9(0Z=?GzHitm#}jT2Eh$(xtV$SMGBBfDNqD}cB6xC(#i!jvLTnk zfg&8VO(GMrjtn^roI>5*JR__?(_8svsVNG{pj{66X$r}pW1r(o3v}H|p#$0AU9d2D zgb|>Wrl0`YmJhnk9(MI6sKpDKFGE?ulb8cKzNivxMk;7C1VK}vi%?SYQWOztbrrzJ zHGuY@!rTV73X}nI!JYtREzoK-c!L?_EAYYD2vZak5{uHocj7_Lq%0@`4G^WqgN_v` zNGt*`Hp^E4of84N(r@$(41HRjfkEvH&D7P^!JAMZcmBZ=Cu9peWVjDjGC<dQ!Ox=w zPZTF-C?po8a)GZd0B-?Gs)Xl!&;b`E3Xrk|dLnodXigY3nuufy^k5p$uFK3s@V#)L z)9T{ED{UYPD|EP$Diu=lLAex^UJ;iLLd*u2?j`vktsvWq!Fjg?bPHfgF=)L7Xz>|p zRSj|hXe&RsAk<TE%glppE&`bjwimpa6}qS|KQ{@yY%4Plv_w6%SfL=bNFfn+JFh}U zerXY8c@{`_ULv?K0Xr-YydbusA~Mp~*Tu!dLx&4;YFkAGs8BA=NdX-yXQYr=l$2Rg z1X^4RIV`1EK_fT67<74JMFnU%Z8GRM_dL)xhon>mC09QsO+79yaGZh8#!>)XiUh78 zl2Soio$`x7OXw0oM+oFX&bxu1XO{;G9nkSA(Adq-$;mGV-C_yL{Ke4K8(IpWQUcsr z)Pki5cy8z73aKnewZahBE2vb^)y+uFDd2*}1@aCs$i0G~Lt{W?59nwC&<>5nT+phx zVm+>)RM0i)8L0{>`AD~KDu7Dk(&EH)&=wTPc|n=^dBsEUG!N*i?v%umRM2S&Tu^>~ zF^rX&2fjlR#x1Ud%M|A)XQ!5MaVaanFAW7L1@Be?UkC@O@)aPlT?{z|3RE=1PJH5m zG}J-I=z$VZPJVJ?4mg6LH^eG{Wk5lVtP7+xJr%SgASVa3s1|hSOL1kf9!N24wH)l~ z>y*qQ(9v%iFn(fEF-VyPI0Zp{rk9>t0!ptMFn)4r5$H(hw4%h^R1MI=6$Nd`?bzy? zuuzCk&d*EBOov=v2wqNA3{B#Y#Z~bI1(_*OS<vm4sl|GsnfahI65;A#d{kAS!y$|E zb3iI#1|kVT)IzSgghmvsj@JPdGV#f|DWDV_pIDS$3|hIGm=d3woSIjrqmY}Jof;3i zRUEt}7aBc!h<mnSwjo5gxKfi73qY%G)l-vm%hS}sExOD+1xUPuf-NJz7<|*Vh9*}@ zQ6*&AGUyr!kUj_x)UtrO6l_RhK_(Y;Rk$bk4oKIcqWmI=T9|d<OCCVU3bNyiS|pb; z{E|QFA7KO9G7Bo2G@x5%K?j!R=am$Jub#~Sop_WFYR`evF0_%N07}!)Mha;E5-15m z^9ZPxfm8sHi7arD3Old`bZ%h@xb#iT$pP(2$}EChXbXwh{M=kvIR;rQ6au=7HM0cL zR4+-)22~S95XXR8RA?<I&<(Lg`Ji)3azI5}L1_tedm-*Ukl?(8x%&_-3_jcllm<Wv z5;P*3T7r^BH6R^q&>m}~WUc{Htp{}qC|sZmUsLnS;t_|W+A4rrqLB2h0nLzl0gfRa z@!&J9;$8j1pr-3Vu1f^xiujUzkXlg8fUQAOlA2dmjI0F3N|;)3h6kAf8PqNY8>ClQ znp&C)btyEC;Z+kv1*lNaQAmcWfs7MC&dk724^s-s8IaUemRbaDtiTfpq*DY>NuU6! zRDf)>1ce*yu%h6C)MRk6jM;<$b+176GWaYy#A)r|<#(Wj1Zp~f8YJN81ZxK!=b8>_ z@_-MYMQXsLrhv9zgSw<8iO{2NK#eek<oukRRPYLV=-Nqe(*$HZ<Xl)#PXnYOCl%6O zNmPJWB(Tn!0_b9evc$X+(BZhCrU58bAsRCTQz=L}C{PuwKw$><4M+%->cC3^LH-2G z=aquaKm@hJKtj;E0D4SXR(_J6f+u48F6h)yg-pl}ZIEdo9nf?5Ko^66@>gmK*h}DT z<eA0Lx)AExWCbe)kOQCvKBl8U{Wy@B@I(*3dfVCGFC@s{2i)cZZRUaNLvF-Ct-zBn zK@NtbWRSl#l64e7G&FH0>%mH6Fbye(l%btA@ZO)|5>N*V6o;UdZlLx9*c}jITTt-@ zZcylfWHc&M6N_v!^GY<5^}q^1ZRpf!E0b7F$W~X7TQG5MeqKoirZy8RGyM8e5-Txv znOVicmZE?hjK_tkc`3xW57~8aEd<<#a2Z?&lDohQ6Os~(!2t&<;te4Chd>J%!1uj^ z!w%Hh00k;&d2ng5f}ui6B4j}_Y}%?kRUt1GbdXm@s)C^rxEoNcP+E{yl%EGVxk?#) zlQ&480;C%QX_^@tDTIbNgQ_T4s!vI*R4_0Ai9(9L%ru2$J-7pHZ57lF4Adb-6e#w< z&Qq`jUEx$zq5wMc5YnjB1GOwuQgccYHBu5Qi)~>W8K6hz20(i43hD~l5UqN}B}Hi< zJsL`?k*c|>DN33O+Thd$vPD5bK}o+PUtdW<8?@60i(+URh9_6(d1NV>MW99R@J<@o zMCg(Dum)l(<TU4GJ&2x^%pz!o4zd~6hSETmhGh*<lN6L+!R0PE&ntk+O;AQi1chl* zsshScj1b#l=PZNn9)Pt7HIntfMR*G6payj<fA{#r<mC8ZA1ysd2o-50>w&W>s9mb3 z1v_I{8O3~X9)&vqY#F?ouvI{`@<90>q%5@<e0dBco?$BW%8N2fQsY5QXwbn|8p&wV zU=PJZv}=If4E8;ujsxwcDnUA<9TY&|-D=>%3$i^0p-;h90ecwO+uPg6$J^WMX%Ps4 zf};GC(&SWlM_(6GBZ9Az20IN@UV;YKl0j!PmSm*nD!{IR1|2i1Us9BqSDcnwqz|6; zg>35qg=8+Mw+@Pa2nS@I5m8|ZZp)&D8f4@PJ-k2(3?A+UMfo5X#zRseDBQueDTABw zpo8#0^;4okL4GmhtW0o4SOgnxNQ5eeSE4X;6_PUZK;8K?@cAcTRp2ZQ8uKuMDMI9D zn1~*{c~SsA5xyA7LEst$l&v!J6jD-?O4HLp<rC;U1L&?wa19SWcLf{)U`vtLA*7_{ zq=I(4rh>WyV8><VKu>)DyA5n8!cEXJBPK5dRf7U}TVZBiNn&z|IwZhR*BQV%N^rNs z+FzMz3i0419v=_deyJ264{FHA$16cB1#vVqxoV46f#+ca7#JAf!2z8)flSvFdmn6% zU}0cj0O^1TMS2&4W^h*H)S00M*8!iu!Dd6z8psUJS{Bf`;p-qXIBdnGNx7LN8WC>F zqw_XJpcxE}(7a6WpkN93tj4g+)V#bzO)JEJF=RRg9By=(dV$zHG$t4{Km#pEGYpy# z$AiixUFg(A3S>kER3CshLc`ARfc9G<gCgLf9a%4Aw{brBCTQ@$8K_nPmlBCZ#o!&> zsl}j<O}+wnz!gou0%-jy_;d@%NN8fQ0@Ntb_A1adKj7#r0dKqlHI~7hqpbWSlo_ky zf}G3}P(KHv7;&6LNj|tZO;61$&d3CBbq1Z344!8ImGuaJC_rZIl8Z76AXh9WmgQ%r zD1fdAP)I2)$jO8p`U0L*au}Uz7|K%(iJ;+U$WU}?acU8$^#)Fv$t4P)Vd4Cu{G9ys zOweE@bTl43^a4tI;E@N&>;klsfEZJp3QnJpWCfi)1?2#c9&o1`Yywy}=zJMa83t;p za6#Jvpp*#OhhCZkPUYZ=6yz$X9U$pkaLxjmS6U41MZ>$!`9)kHc1VyT$Z2T`kiGcD zr3D4~pflP^@)f`beSybcAt!$4fz*HmLC!~<B7tZ+!w2TU!;YXV2kJ5<f*g%G{;uE; zI*b8)KtW~+OuCpW5jjU`Wak&<DHLa<=HzHXPZ9<nl9d8EqyTO+#Hsn<(;B#t0}M3s zkXft%oh^dsO@+*|gEM|vW+Et@6jGBDlR<4O1!!*>G|CAU(9OzE(uEWc^qIy`&;>gP z)LcN6N6@(}h&RBEB`v5Y6m-FpuEh$u+3}#_4N?-Nq!y$?E>g_T16_9py^;ac00Tz` z#6!gjnI(|cwic>(*gPyKo>P(I1Dqfe;RPaWZUti8=!^>PL21|&0b&LPdCH_T37Vy0 z%Ak`DFfMeY3^bVp8SDr3^g&%=*!Vn*uLC}H2i&O!4V9BS0|OnK2MuPz=QDEiQ;PLa zCK)vHKplph_|%Hb5-bx9;A9GFC!k|UY5}EI(3om!GU#-*)FR}G2~CJE!B&DUra_b> zP?w<yA}NLzeetk93M_ok#UWZ?^BqW|Z7>Z;LZE=e9kJxda49SJx`uf8y985z$^m@X zGN|xCnsabZEdiG)h-DGrd<-c~z{Ll+Pyh=e4<kaR3S6L<sDh<IRSC=(1tsv{wi2kH z2NDO@6bhhP3U&blY<2>o&=xc>3O-Q)q#CrcsXVa~rXDgj0#yiE_oM_)LHR{cdu)@F z6Jb|xkIp-!7D2kR$$H?vHYls&oOe(LttErRPH|=m<QNCA7;;UiP?7<<wLKp+&kviQ z2gMVbKFH{GJSZ`MCJq&B74nNglYYtNDbQ(~OwhUb>BV~B!~q(w1VuZf*9<BNz}<K7 z=uS#z5$Mo#MOy`ReWdY1kRrrb7sLY4^sHW1erBEqn*BNo2&Iq!0ci)@0U0I1YYAKl z5w^h9BCJ6vg+L<+AiF^rY(MA_D$q$Rwzdiepn;-fJtPq$M1X)apqEc*GeaOHFbpbf z<Ds`EE7&TigW7QMt`Q+Yj?N(pp1}$({(i2C>fo#c(t<kN0T!vqEI~FPAjs1%#M93m zyfiUB$Tcw3H8=#t9MH;P$bpBc;0_*gvH@F!Y6+x#hj<|?KPeuzPEki8SqC(+2u&J@ zaK!5+FMlV6VCNvu0I=_ZL!Ep*LtI@H)gdFSNL7#qvN6!XUf5_3Xd)KstSl7gfD<Wn zFjrk&9XjZY(e43FXh8IX+DxEEHYjUAN77PL6u`znCs%NnO`y<+Td!aRx{L-Kd?0bJ z{3Lj@3f$L)jJ|^oy+{Gi<>nVvDk#CjvRDb!vWM#iyA3jSQIZdtmI6;nfo4m=6Iq}k zR(NX}t}Pd`;s)e9Sf^b9rBed(B_y^}^U5-d^7FvED-(+q%2PqhEFg_Xkn=$bLF-pR z*%Mru<R)h3C={g@fEIIR<{>YJ0VxMzq?;&}KvQU-c!8DgbeIDJM;Tfq_$B71g2qrG za-fk9ECH*akqWw=15!tUGj?(!?A$Fp6Kmi=ht4Y?rb{5j0Mhj~u*tN1(7-8p(jFA7 z(5jl4#s=6PQ22rip@Pz))U;%XEg(S<h7Oj33{wawEdrlin+jT<3z~;aRa5{;KnF`f z%26{nNCepc|2*B4RIocioeQ{TxGO*f0H|k*Uc!PZthCH@$ke=-zY`>j2jiRg16i%0 z0M9_tR=TF3D>u~jvWqid(;Xl+$_n5W&8gtFFlhB#W_}82*#hWbKFE}JYKj74LKhUi z(8bIk-5{(C%HbKHbM10Lo$G=e<W3MG(St)6<Uz1@)If&Kdcj)epb4o0P?H^HvQtMv z9Ws}N6y6{Qpv^@VmlVPD!e$6@=>$7P!4~Xya6bStxt6R4cPF%H1X%;ZkPEFL&b6@x z&7Glo1f(W2O+f>qLR$fBfu;g3r6A?WdN5alt~o)~2nq+ZSv+`J0qF%{%oGO_1z{AE zQ}a@=nTBCpGH8|xbla+4Nq#(tt$`K<Ad`{1&l>PFrUUByf@e2$6u`z{(FqDz@MW;z zvZ4gNU!wsoOb`Yksy&dkAPmh;prf}zX)!ZJA+y*DI`3Je0Wlur(aZwSx-&?<2hs<_ zkN}2FutH-9GZc{K*kQA=AX9Ng26$t0E@+7mXr*^LN)~_{ju}(nP{J43<OMV&6hQ6< z&u)+w$m9et!e`hDXQXWvpeQ4{c!mcY)JdSCR>2?1v;iwb^9xdo&<j%JWf`ERrb@MM zuvdJft7A|tgz4+=7vceByEsPHBAT5j8C4yknn;bHl?3sik`iI1lVh-Jh^MbBk_F(h zH#e~Yd}6bmf{_Vosg(>~U4X>|1+X8G41`As-jqvvswF$cLX!qb#Q{`LWPT}ZsWy1w zL7oEWXtNwp9SADOAbsrO(xj}^WY8swsTF##wVHYbnJKV36uHq%tiK_l4_c81I)ek$ zO~^p5Ga-#xPzw(<k22a&PC|^jP}Wcer802y3bi*8kXVudYQw;q<<J5Oq!JqVkkpR2 z%C5Mi2%Zx_gI}1v2BZb>puPvBm!W_<UIaD*Pa_yqWr2ncK-=MpGcxtyDWU{)nmcrG z&o8w+B(<UhG?foZEnqXTX@ZT_DZo_v<R_-2LcD=Zy<RHl>`SO6p?N8(X`p=);HAcp zN>y1QCm*z~KQ*@iWHGoOlL@+G5xgq|v^W&JBOx`f1ayu8s3ie*8+?&7$af$UQi~L9 z(Hw=k6g9-vH^9d+#5Gt)A+fY1KfWjxq|Fv-SqR7|Q0J{EKL_6DQ?LcQFSSSyq#CJ_ z0(J#R2LYU%Q*4VCxJd08(AA`gxuB{WvP2nfuO93IG7XrEKy+$ei7hx0K^ipB<=d#i z3JNCZwHqL(K}#vnW$3O!LH<GTHcl#R4IW4pXw^QbE3cs*lLu0o3R(-Uke{3kzIz$c zTrDZ81W%NKHqk)tpahj~kW>zBN<$sw9}JFQLN0OkcX36uxl;8~i;D8{kuJ5zaJsK+ zaImAht5r;%LQDz5BcK))*uhlx5jcwBOV<z+J)j&7mP1K|pgC~Rv`-$m^$1d<qo7`{ zt_cc-G)Pem3TY5dgRJJ#fW*FDQEFaFYLSLIC_k!0{Xb+wvK+Kd4IDSHViKC%VKp2V zv8#O6gV*YyF5~g{u4<3q0j=yont6k)@VV;C1>Ly~=@URiYrHRm*8OZiF)Kq2!wl#K zZirU+0wB;naEMURM#!?CP2goen<2}7*g=CVi8(nM5lV4`Y26Rex5z`5NI-6^N7;-G zk-%|j{a{!`1KyYl4SvXOg2cQO(D(+p#>mW5$Ve?pMJyT7Re&!$0WT8)?VZU5?b;}U z&-bD%Qh_dogDmDNQAjGy%mH6MlM3Dv3^H2*WI1R@8fbTKer`b~YG)0;xf-!xrx<j! zZZcWxcHoW&Sqd6fgiZQ`R?z1w6sMM@f^P+YdZ{2Y6?9z_k{duP5kT|ViAA7-NueMy zIUBNL4!XY!65pe1WoWuq2DI}T^=f+1oFOEUf~GZ~k&Ch|2O<lTDa%ZZhtA<aBp~xp zFlnTFJHT<Dn;l=0Sd;|1Jsr$1%|qqqX2*ke)s!U`K@)#&c0A}1=**ndto$U14Uo<V zyj=njOi9fF<u%YYn0RpBfCz)NgSWB3M7fk{ycZejb;#raXa*X#qY<>U7_`qzkBiF% zd0_^qbzYpB1K9%u)eX629C@@|13Uu<I?SO6G>-?`9Sj+ghs>KRpbSK7f+u<lpj)}1 z>yscZg05@<?F8h4P2oZ|$b;O0+>S@I^ubMF=;Rd46r{^txRBhb#|7%K!si&ka~QB4 z$*_GsnRyC{3MGj}x}bCbF*_#_bTcCKG=P%CB2d2-<YCZWWYFTBRM35HCB+J*c_oQO zsVU&)!wN{&!f!GI-F}mk!<Cc@n!x~@4e}Q3GG}l}3ts+{lnPqo11cj^^te3Jz~Kc6 zPh?X;YldJkgR&wivlzBi336!)q)IMHP2mDf7l5pU948KHo<deWmO>Wa6e~cEStuw4 zFZu%83lEAC@OmaLsQ)3(fkZE8(Ght6GBkaRF0uiQnPJDU<uX_o*`(*>C&3gH6IyUn z0;!xJ%R~~3(hCxciecN;6&#_bO9X%fLAPc?`OpciVvp3E0yogon39szBGBp)YA(Ye za?J|3{|i$K+dcv7FvIu|?}1m@pf2nI?P&nb?&~NNl$L;pzfo7}KoULrAS~{=o8ruz z)Vz}TqEyf!9y$t;b5~O15z(Lt3MTB4O0Fo<#$FmMvjI&ggKA8qRW_he6Zp<vXl{j+ z=Fr7mdJ4{oIXRGG6h$7^f&zEsGSfgMB&Zk!l|iuiD(I*U?zv^KUd)jfP!|u|c3Y_Z zDD^vZ{RZJ}w;)54iP%01x_B%eZWHJ}Fi@$E*e3#$LTXBYR#AYx0_&oI0vcC?1S#-c zQbCP{e9(D9pfVU**C~K1JJ6B?q|;y^yMDp3kP8|jgH3!FLsmOEg3nP;Nli;E%_)H# z@eWy^o0p%b0Gj>I%+CW|013_Wu)VZoMGR;|vx1cZXx6#7ATb%TFb5R4priyIfJ5>N znpeOX95Udc53BA$lkX5;fTA2^5V+g|jYgrCSsF;Ue%h*g<`tKK8}d1+74Rktyvzbs z#yODI2hOu-K~{m<CXk9NH!(RQGcUDR9e05M(g4|RRFYa04=$%{VNS$aj6yr^5dY{U zrlf#6THsjKP}kLk)SK!$3Mr|@CAR9YbcG}gj!y6bG~A8?odsg66qcBinF7s%#a0Sn z?<>^6T3Iy;$;pWdI+&N(fP4hTpeV~p1Qq?@yZS);q7zFXgQZH4p)zcqP}0=}6}q4v zkrLD!N+<$Edq5qOoIr~hd=s-%LFR!HIjGMCYM+2INoEeHZQ|_j7v>riVgwy6!{MgX z<kHL(xPuTp;#~t?DxaAGx+VdfItba9j$$8-N4$OMMfs%#3Pf87?ZLpkh|DM6Qqa~H zP>@3s3)Bqgl70Lh1|?YNk!)}`po<ajj#Stxb|fQo6u`?>a#Hghz~i`?$-!wQ1+cju z9Ptk7y?{=kNXaaMI}1e&Tt<V_I~oBkIU!k10g|OaOVk1!gF+OF^7Bg+5X+hJ^C0;G zPi}%Vf{PV2N<fF{=B0p6NlJomN(49ao&9}%9sOLu9S+TyJlutpAE-?RD#}1UffsZ| zsh~BH;IR}?)`b+Qp!=&q2WWs6UEwwmG>Vad*j5U<y1Aq%GpQ6*%jqdWi!5cN`UjK+ z!SltSNo>^RS~?2gQ}IAsv>{gzLfTk*1(03bIN}L3t_hn%fkl)$vLK!^7#36T#aDXy zN`wkWkmF(Yfdd>o69jfDs&`<%$Kh_!1VT}M4ybs7Ia>)uj9~gwhjv)OQ%HDx2}yw< ziy*U~P;H1VZZXWM;M&+0BvG7Nqz865sFEp$trmf_NI<b!%mq2016I$VwqGFQ>+0(2 z0jWixIu6{^OH3{)P0Rrg)FtNRK$?a5dC=MgT493Ll0p00;Qis?Fo5kn29@HV_H#+9 z0;qfer+jd@gEmrwq6Lz0kv7SIwL_h#02-C6EXe?s{E%HT;9~)yh7oLBg7P>WmgHeJ zU%`HWHD;hQcd))0SS~d=MZs19Gynu&Oa>}#pzC4dT|9%p%Ai9}@!*0Qp&m`CpQEoU zc=vosVi9C1LrG#0xch^?dMz~>G!g+B&jK3?&FqjC2dL{r*e0;U((;QyF&q!+5`oX~ zL~@>gP)LxYU%YFCt8-|Gqmz#-WS$bd_5m8Rpi#8+)Dpd%{PNTy4NV2mYHDybq;934 z3~RN3PLWJbglGoEC3tWQJWiaIpQMqj2Wx3SR#SspgHUrpBH(Ht!bs0d!Bs>g>w$_@ zXr%!S4yawo1(F8n43W~z6oh#S$$Fp^U7lEp%V-6KWIdD`4Ub*0K}5Xvpqhv3SZGqw zfJHsXp{QYvq#j%MSOX(*U>bqjr=TEHKo27%8zFffz3UA=90DcYz^Myt7<K}7v;}xk zJxcxwa`lNPWkDvg`7ndrJbhf_J^g}19DRJ^o&9|SJbhff{GCuHMUlq@;GvD=Q|Oc{ zsBD8YTOp+;w44K7x}21nng`tm2inA2k`GJopn6sv^>7dc1qE2Y0AfyN9(ZODB`INO z0qsms(1!K~VA&ediU)Zc>O@@2Zot#9#n9z8N}%ik@kpu?xGsXY04<`_L5&c|-S(;F z;KN)>Qi~N~%{B0<GzDdF28U||7Y88Ip_vbKUI8p3z$ag!6>|!Z8VckA5Qcgp+%d?{ z)6d-seoBUmXAt;mYtV_kkdTHAMnIdiAk82QH2~xSc&iFF)C$cx;4@*t^I)Ls#37*o zs*6CL#f&JBq3W=a+v5DvqGZtWU2t@v`U_e<1_wDK;sm5QzgRChBPFv4b=8F%Hs#O| zg)X}W4+}t}8@#6!<VZw=6_l=!y$O#3kfo?83A`@`ylo}5q98FZ1vIe%KX4Et1nL?= z&Kv}3CxlUqhtABy^kk-icHw|+gPmoVnw$cz3}E>jCXQ+hYDxeZhnS~<=Sj@s3pKRC z+Movs!o3JCS5Pb?Q09S50b|rU6wRj~74X=F`HhBlA*QL|!GY;{nmLHrAVbL&pz<3z zsUsDs$_mcl<#`IQ%!SnK&;>2!0uKqmQ#CYW!^Vd|r|h6c4ydt&IOa1EybcDg8x&Qb znj2aKKpPZbEud3j;G0@7^FJ(Jv8P#(2{C!F5)otz#uT82x*k#)1#ayiO$CBvL1`M+ z>Ol%1cuaz_58Nk6*(<Xc)RjP_1=I|bU#tgeqnD*36hInXkiG+?*MMuDR3jO&56Kxc zbP75XH#xr)wEG}GO#v~pmRJJmWkL^9MVe^^1qP^$0u`&!V24z8;4A7Ai=jI;D-}{f z2U>yq5TIUHVrCw6q!TiFh}f84oLZs)?I*%jfP)41cqhmWH0~>aU4W;v0G0>WiqJrS zr9IF_CwO-rv~du*$pkyd6qcD_&6g0zAa~c0U_?wqvjunwo0URoUUpu7c^;_q20pnz zFCDd)2gxxCNa+!(A0lC;pbkols18LGF;KMyIjM=osnGKeK{qEAfkr2=TZGYwDK06} zK=TYzsS33LG(xDG0rCapP-Jk&9@Ke8ayWct9_*+#Tw#n6v`D=YaO8jz34AY9YI1sJ z3dm+qO9R^U1##gq1yT)>gLV`^vJe5JZUG{KK<c613V;M$D(L2Og-X!T*Wgh|(CIEk z;88;GkP>Xj5W24ovqS=!sGbOE9mM2;`*zU5A8=C)+$9HXW(FlNQ07Zb2KDNSK}{C8 ze?ewIusV{fkrM_;7V2(r(-CDB19H4gv4XBHxIYG_LE(lHN+1(JSXUPoQo6cGmLbI@ zNEOts5YWy-P~i@W-^8NyvS@=?J@7Ig4Rw8WP0)2!3ffr5=+qT-Gn7Ch6JV1RU`Jnr zMm@mg4tD#XaRNG22sFon7_>w=OFO>^IyeYwCSkQ*0en_TQ3*Jyrj-_fjuTNxNi9jt z%qd2*8RRqYno?NG1$iHy06|SUXxkYz5uvnSAe#w1{86?cfSZpfQH-t!g%4H<)}sJg zY@D2!0~R6AHL!vTTN@v>+JPJj0AGOvs+~Y9FycWiMjdE#7pd|Aw-G?K540}~?yZ0i zYeQ5*plT3yqCRNQ5|j$SYcKLjKupjo6|k=$b4%dVfEf9OR5P9>3Mu)i#o%%`7cyf4 zn*0Q9L(eRR4vpm(K?kZJTAU$A#ukGeQ&3rwk)H=1hAf7x3xPFjpnV2VZiH3x#gMiX zD06~K0MJ3eV670Huwg-nw-6g#L4$YTC_)+aBs}W}@;fy2z@dz`(G;{)2Gk1zA94qZ z1!$Oo;sWd{q;Wj(nsZPU4O%+|G8cs5=iWlj2?E_|f;4*v9ngc+Fj%YxZ%I>tobC?_ z5l|l+G}{asmIfb-Q<4ug0#7Xqat3%7611`cwzL4mhNL}kk)WXtZE!-vLP1Xt)G`By zDCp+V#Ju!Wkk^rVsEAaePz+iXgIF2_zB&NfUV)lWlnNS4ElUNjWCZOx0qIBuhahBW z6Rhu+2|YZJ@OUApd8rQ>{X=aHLahYN%!8KxgAd&W1s){Hlz>k?h8$`JS<M5FORz>z z%7(0N0v(VFt~HR(Jb)+3c+kj+f~`U{;wIpt(maqAAVFBexF|ITlxQ?6bQDk;s-P%= zVo)=%0(62hY_SJwUl`O$2nzKB4Uj@I22>kvO1-EwFCOe}J<xVrJ&>D<A+7`$XkcH0 zv}5`OrJw@Y3|9it57I@RFF`t~?o*JVAm5_+6YRZ$O0cg<hzcSc7Z4fZ;qMn89OSH{ zpsrO=sji6}wgr_Xsm0)%2tbFyMiZF=h_*JwH8=#9)u5~founbfZcy-nt7HPn4_f4c z5<C&xzQLv{z-E24Py>maAW|U4jiBIB07VPBeYpjsrUWAGgKi80TMC)mLP-vJ;5jqW zqJxOU0N;=Vu{SRV)xV&VU?I1D*(wm51j+C($QrbmO(QXwiSR4Z*a#?Q_0rI+%%HuM z8K}VvZ=;Y<un-lzs9uFF2to62R(=xb3~XD4XpC|iF%1w4snnH0jgjQUlGHrVy>!Ky zd7ypaklL^$Um-sae3pblqC!$CcmYgKetrS$RDMvXf>bKlD!__SZP1E;c<H7MG8?pI z0;IB7K^uG=3XBa)_gMNN&?KS_UK#*NrP>P6NYn-&jSMpcUhP0?SuAG3Y9VdVb}~?? zfLsA9ezh^WTG8sDePi+dZt>3kelDTTA$qwf>N*PQKAz65e!;F#UXZJ!i!Ydi2t{xc z8>9cO3vwyArb(?x&M8ev1y4SLbGs5~bG8zszQo+?1)USs%P&aHLu=hDm0P7(DS@|s zfu^)F67y1WkoM$(%2iON0oe>{E`VrIG@*8cK&lYBLF=zHKng);wk4Mq6=#;ELN+fF zY)hnN=9Hus+2$nXCZ&Lvf`cwyvQhvY5e4=)$Rhk0X)q4lM@_9L0r?nYjvlCEt{H6z z2_^i-KxH%Y6i|YiNJoHLJfQX+$X3W;4Rn(nVo9qWXt8H%N&w`{ZsIo~#^iw-$)J$~ z(D^_bsd|vHL(l?t%uyTA{z&jRlmgOzM35l3J6}?yfp=$RGWf7B&_D{P1j0y-3ZOnB zXzB?RR#5*9z3r5sv)(~b1<qTbV8x7L&;S{<g97fX!KNu8ArD>bfjSca3L1!7NJddt zS9h%_DN0NR9a)@_s*s*pmYN5$7NiieGYWov0&L_P+Qq^@l#1*wEIm2ecOvoh0Kp*% z?dOGp_Gf@nE^J_)ghC2$;e=G|K)17ib~&PCI#}r!l30W-pTP%zh}uw0M0x?`2P|m@ zBs`L{323P{(l#y)@Hi!?hYDIX0vjTQEN+D^dBis61gcj+xA~-|K*s;T12vF40YM!S z*s^GF+CvOSA?@8s%t6`{1Y3FwU5p7`<n37kI+qZ1&`1hs*)pgX4<FxwHxj_DZ_qga zMCDVkXR%~Z@aQFIcpJ9X5wfBYY9?gp8};l4(AW@s6)Sv+B#JiJ;4T)8i6yC^foO<w z(C8I(sJmDJd^a)FUZgQ$EN%wPVU>U`CMhm~Mig{7DidT1=nk2D1@QQGT51twtOXn! zp!5$O5CR7wG{ixpJK#|RSOS2GLmh&rbb%WOIfWe&9iYAGu<<6e;|##=0J{NA6HGnY zu?#rX>k&FD0;PBZoyU+0T4s-W5(Vmz3%rko_s|FMeR!b70`P5)XvaRl8tEY8Kz--< z&|udfP$mg;3?jN8t)QSl<Y5q)?m-*}0ZQB8)o%*63gGllu=xjyQv?R<ha`270ia?6 z93co51X$2~0CNMBOQI`~@&e2tBq7oqgi<XH+*ug#!VK$77AysU=MBJl6_k8XoIdoL zdEm9}piU`yeg{W0N}dMKz=8Wy*u!gNpQr&2FO=MgJ(QqpD_|{YXcGa{YK3g<)&TW9 zKvh0$8Vb~2051;(SB*LfX$A41T?2@gf^U9GW?Cj_tUn`FA-^ay9dsEosJjjxF96lo z;3^3|c>ulE0Je4w>~K(r7gXtk3Lx+*2oMLU387F9*><b|TgH}HP>_=ey2mgmwYW3~ za$g!~!lWd>2(q*-Q6Vq29AYtiJ-rgBKMgV&I#C6ii>QRwefS&xuz*3UpJBUuK<2`g zK$=Iz8Q}h0QYxs*PXSfD&~R3Ojst=H4vI9`<{zYu=^$a8^F>ez#Do!axdLQb4`FXg zeqO2$WWNc>ec)*(sAs|T1DanzEgf(aP`iBuO*E+1A)ko_N>WG@P5Ei?RgWlp%h9IQ zVBv?9QlP#Y63rL|)CvhQqL-Nl%VMBqqw0Ek$VYL*!qHYiT?I7p4Lx)jrJST<+XtFl ziEjD87PTN27!zIf6WRJfcM+oP14|2_d;`jFMR?jVpfnB|n!?^pf*zP34?U3<vHU+i z%rz+36Ermx5`^k8XuQNj)<T2E2caUU%HZXLEqoXhRRL`G0c-;)!ft4ZfxPtq>{A5= z1(b#YYLWt-FNHL=2pt*#jYmNSsfZet0w146_`EOT>Unr888fY*_+!{Nc<=@UI5DH- zYG}d-Eet@cWCpLZMXBcz69lLU3zk+;X_!`Uw*^~-fZYMogJ^sq95UMA0)-3$BSHpy zBMW8M4Y>LRwXHy%ELc|@Wh`b0HnpIYFaCBE*ypG%0R@^hJfJ;LEY`tfhRVPUv_e7k z$!HS_wZ4Nip`bwpo(=$=lLBq-qm`RbRm7B&usjYgFMV7ikajeJwkeWh47k4!T7H9A zaRR9WGt(5*Rn$Sf6{sW8yaJix0J$nN547D9yDGiRyp+@m4RsZywU^jcD%ir>oM;wB z8(3xLrGO9hR{^yZFeY3<Za~G@ZHUgyOR<8^wxZN)gP^tQ<?lpv><y1*Drl`5&NxSe z1tc*-XHZZx+7M`1g0?q;+b>WLjJy^lI0PU?B1)bEwbZlnlR%?9==-Q)B^<bD0yR+~ zry_&H5jCG<@L*a&y1)%ei1jdah!!N0^`lKlSnxn-q@cmlhQ!=fRa}$|F0m1#an3oZ ziFpd81>l(`wB^_E@h<QX8)#CgEETkH8yvgfqZ+{jX2sA8bz-#i@^utqwDfZGAxG=M zMya4q!{5w<ISsYJqJZ3Df%bM4psT~-&Vx21@r>bsU7VYr0!qT5-Zp$qEzDN%LbBX^ z&=LBekj+oZ!ml(RT1Tc<K#u4^y5b&TBrJtv_Qjzg0&|fb<cL_vVj<`$UN9$MlY`od zE(P`_#z<`*;$%$?gxg?43rHyea_}r<j|?m&fL5)5V;?p=50OS}JA{Tkt>YHvT(r~y z>IZ-aW}usS;L5NKs6w4eD4C!Xeb5n*P|!*__!tc2oN<_4kXjFvY6>9No4`(s3jj|( zM5}`of)<tOrr|l}1f*X9z6luIQO6Qlv53kRq5+L8E=kGEvqf6N6yO=)N?1>RX$k3? zQj3a6)Ra`3R-9RtYHNrTWcj5fI-u(<K$EWpdY}zcrFog41&YvY0P-Lt5(@H5OAs0} z(-aDjR#t(I%`iYTbCGnV7C|ps1c`w##58s2CZ^PsOz^H(c;sU2z60q|2W?m@DXLUR z%*zMwQi3hT1hu(ABjv?K$%x@-&<+WZE*OT|=$l_$qL7oBotjgr;2z}Z6z>?|8Sm-m z>=WwZ3SP&L5cTnNQh;n>fSCcI)j>OATz&n6K?-t9i%S%eQWX+Y5(`RFQ*hYoSeBTX z13s4o=H_B6XyFAhQ$YdZK5S(oOp6xmD0!F`#F89maIpcINJvY}%t=i_TX7bam{XdH zZCMY*T6OTqqLl*7D#*ne5R;G{3Q?U3Ndchcdx+SElt#$MQEEi1=M;nUT#mX9j$8#U zEn)sar|}fsu{sLi5zhGB;&fYlhNwf!eFenvFAC27p*}7Oe*Pf}POb`W{-J&@pwI%F z0xP(QKGS{+_#Ao(1_lOP=PN>vtxxlw+8)6VKj$7kIuDlh)nM{1WonNQWME*xXfHri zlr#DEGPOs5EW)+*8LZIzt*<O&djvPcCfGSHU@71EjJ~%S+atIja?mw#5Ge&l-&&{? zVu>C^s)5mWE@OKHFGLq&ybL0Hm(f>^sXYSqQ2!wBl=cW=1_lP`3|BnT*-l_>-ZQ*k zw?_!Tj6|v(!P36{OuoCAK*#)VB^bOJYS@A`Lk)XiW~ku}!VER^kjqd*3oobuB9t=J zFvBK84IUyHYPdooLk(*P!0#$xM+9KeHppcK+gTVGYKwM2E-T>mO)M%7N-ZhM1TC}C zi0JYkOji~-=H;a-xaF5-=H%p;Rw!tM=4FECXi6$UXZ-mW=j3Zb&Zvi6R^XpplAn}X zq+n!VXaW((epdm?r3MPR3Pj(GU<EnR98|{WDuA{D=Vn%=rhrbHE67Q#j0dej#-Spy zBr(1S63nUKW>|45_^z>3&;tE((CInQu_{o#P@IvPlY=lwK>;$m1TIj){!&mF1h*|f zXW|u#^K(-{$K&J|fo`qLOaoQ=p!?B5H7ayED;IQlOL0kMPO3iS{?XDRlxr9gQ&Lh> z6hN1RfE4DZDS)mSSAbp8i*(9DNxnj&LUM5#xVr)l3Ww3_321sf0ku!+r~W<b$_l>z zE}=fIG&oxtdd?lzQ_K-<bI^&|@I!i`HxVZ*fRECJ9t@HTzTLMNa`zf&k2~yiCN5C( z3p6OFmsn7cnwO#hp7z&-osJG|ywD=doP8XFX%J#yUn`(iD*51B?hyUcV8{xfWQF3& zypqHUaB&D)Pz<`w3$z{xe6U(^ab|uVsFe403<_3&7M+PXu>IbS;5)Jvic-s<RTubx ztVHO!9GP&l!GlkU3Xr=UpeAOgR+i@%rGU33gBxrm8L62?3d#9M_bI^6SWyT8ZGwmR zs-P&pEHeeV-U+eb8Fpqk<Tl!*N?3IOD$2k;3fS!h1&Kw8xv3?oMPQpj<20E?P<y~( z08$J&of7OSsGn0oM_q#g0wfLIV_uR`lwX>jp^%7LOy(CUBq{_zcH)<(CMhHqWP;7f z1f95%mYAFhzQjQxGcU6wGchN#3ewU~%mFR42c1JxkP6x|0XlvfWD_)ypzeeAxE(>q zIwu!p7J$xG1-S_vIZ&m=`lxqVq*f&67UZPDc4ucou7fKBbs~zv8_1JDd(=wvQoyH? zK{^2$B_##LR{Hv|?4$=?^s1McSE65@nVqShl35I@Y4t;0{GIi&&PjNtq~?{tD<N%| z+munoVZyrLn1zg#I>Hb00S6o6w0kfYI$LN3SqdMVT2z*q3|jRD;kzW3B!a}Cciw>- z2;hX12^nQc&d<wBO$G-VbVoXPu_yR!QRpgcSi&wSP0Gmxo!XO`2U*+(GRq}38JzGS zgCXImNeYeuo(d2P6~HZ`{5;S)`qJXm6lhd|YEZD}AOkHr;O0tx9?~%v&KZfIT{5Xf znZ=N#ke>#2P;qJr)C^E+1D!hrUfhnw1h@Pm1*m(WO2OU*-4g<4AaY|~BDe_vYTUqc z0XSGezJuz8u51S#CkWZX5AqFo?Ht^pRjHs{qfk;=0J<C;#Q><2!BV)~>jKJrxu65l zk&RJE%S_ElDF)e;lnN_p;Nh5)T1LRky!;YSnE-K<LQZN~Y7W#fV0LD43C<{hmV_Yf z86c|*OEW>M7{U5r38E;qpeVH%w-Mmd1rpp4rKx$KE2SWXCnzT;7A0q7mVuh7i6x0p zmx1oW#%&~|e1^KpF)uNvvN*FClr~Z!M|8O57eQ_*2kqMci!0<qayKYC{gXg>1)QWH znxJ+Tr55Ms5NT;jYB4w@N{TWQ^U_Om5{nc{ic0g6!KQ)=9$4X+0<u04F))^tnwDRb zs*s#mR0O`4Fu$}!Au+E~0W#PFsRmM06bkZ-OLU>bdzpFZP!~dO-oxocSP=pZ7?4Gv zyV^nJd~s!QNop==^%;1zCv1!roXkMU8)`vfQEDPi<53d>ECh;6lXSt_pt%#8OraaF z;K>wxOE0c;k7_blDRh_><Tg+{JtMyqS}Wyd=9QMD!V(|&PG91Tg#`!rzH<ezM)39z zxHvemfGmdwMruVtS!xl^-~f#X!-_T}*CI+M=qf#&u0zTgxv9CJej#X!X<l(^Zc+}Y z=7FZ+qS8F5gAzd(TP7w~;&c*fI702uPg6+BEGY&JeL^ZrXbgc%ugpA95`Y&}uym0E z9w1Zzjmd*9kOLJzP&cF(Wu_2me|~96L1_tSuXPHv=uA$`0}UglW`ajH6BXPOON)y$ z6Z61o;En*d6MPa&GD}KRQuTfE^U}dAup*c%U>b1+F1T`om*k+TCk0eYfrfh_Ge*#r z$a(n+Ir(|%sYM`nfkFgwco3+VKn+Y-atD{S`Dv(52cHiCD#{>UhB^|u6dIQk5#}d? zdy9~*pO6|9lI&qcKB(VWl9~s(6$&0q&=Mvw2Q*@wo0ykbPzpNXCO;2qJ=pg|Mir>l zmtT~hlb@cMoR|YT*c{RjgoFm@RBf=epf&mN@t_7;e7r_+YEGICv~d8s{Rh-6&;hsj zz}32~QfemX!1lzF#NyNvTO}nOaJ2|xfXxC0F&slHF_0vrg32t0Xo1uiU~y2D0A_&8 zX%Gw397q8Pk^|kQkqBmhax|C$%JN_aBxBnu8Dcxc9+GRo>R|Z|%mF2Q2m_k-z#K>% zgP53(0Y`wXk`lCI0rIT6y1FN{c?-LL20VJ02WqN8E*L}Unm{^fpvE`cc*tGEkQO@Z zf*Mf&p#)UxfYKnM;g3imV5fi@7mz*x$SI(X3`jZXJSFgr3z>PK+zLv0kXQ#PBDOsZ zu68qv6jD+_oy63<WY{4}AVc!=6jBqDGoV!*sELKq@`e;lSX<q2kCW8&2DSU)ZEHyL z8RQhS$wQD3S~D6X1Zp0D3x04T7}Sa-(3A#g0+%=>HK#$kU>LH^6m&XTY6`qGfsD9i zCMzT+C#M#J`zc@-ftwW2Tn;h-+QhX2l_2oo0!d(RmcuG7=oU>##|ESvgbl0|AeE6W z=;BZC{t#%zn^u~WqX2EIL0yDmnV}V|tqpZ9D5i5Vb2C8)ZbOBjoeQXgq2ZjEmx5xD zf&$os#i=F5dJ2B2si3BB2I$-_Xzvszi%6y*hePiI0u}X221=kT0}e+_&maXH;XVk+ zWPJS)1y{XvJq1@!1r66AM_o@)Pc}1G6VcoQ>31~&%bFNy>L~cTC}{YD2UasdeH~bM zYU(JYCW2L&YU1=3D7PZn0t*HOP(h32DNqi^*C_%yiAo(KkWnz}AQcxGog<hbdJ3V% zrHP<RS3s?UR8U0bfKolk0)<4_+@g*GwDkaLxn$<1LJ#W$83Mv7`Jk)TKs6$~$io?) ziFpdCxdkPapu;l|ZETP!;7T4>y$w=8Vn+?61%`v6&Az1667aBkK2mQ)M<FveF_ zQ3UPup*r3bHevxPydk|pD+PG}M<X#$QwMZjGo<gMk(P{>5Cc++N=l28Qd5u=6{KnE zD1a^zE6UG75>8Ij1ZSaQ&`~|8jzG$2xI++Hq2p|RfI`D16<g0#!6OlLo+M<+4QMZR z4s^U8wEey;F((tXumE>OL0wqLxQ!x8NdnHCx%nxnIgnO`f<|tRrVi*<&f?<IqEwh* z0Z6d8v<Nf?rJzxa5pD(fC7>}I&}jkrMJ1WZnI)A98U<w_li)I-^--xsi6tOoH42cH z4}g3MDhX3k3raE+G*Sw1XK=j1nF=~;2XA;H8kC@t0yH@R?xKQ2s8~<IvjjW@S(2}i zkqBB{1*&t=0uwR9m<no<Kuc?QrxY5gsL27ACapk|E3kmJQZUpn$=5eDHb)QbVk-qx z0|T(6fq?-^Y!Q{PAPqwN;Q-BHkWc^(P7oMz07VfDgOf~gh63p7?TpkSaC0~#u_!k` zFEhDVM<G33K^L{{k6PB}<S6JWfSTdpz6+>p0q(o#DCp^-1{+bH1vPo`dzG@05Rj)a zM?(}K_u4^@<^|u&i`qnROe)ULDJ@9_t+b7djEvOv_0@H80hPHRp0BTq3mIMoH|k07 zE4)8O>HrML&*Tomfb_yJsQV8)?>w_uA+fY1KR2-?GZ}dtNCPCQsRO#m0#ZGKk|gN* zonpk$Dabsq=fQV@fiE0REXf3o0Dz|kKsvxh8*Ho+vWXbf8&SwawB|vkfGh($0bGf~ zb1kT@0GR^s4WPzOXfbHKzdSLo1T;=mk`Edu07X6e5EOK72-FA!O(B&OA&u06Y)A3~ zv~LYkmYG(m;0PPv1Fz3f&`2ypD*{15nU<fElV1*U0_Yk<<PJhA=m2_<1i}W;HJhMu z`OG|&0tDnsXam(s!OU1k!O*}=N5Rn4Qb)na&{#*o$kbFv!PwAJN5R<AQb)nm&`?Lg z+|m-1at)2lEm6Y-+@6OH!-EUXynKb+)Wp2ZymbB4w6xUZ66g{6ur?fIqz^q(Ku2a} z<|z~xU=$__kfID$Hlf=Nns_fRL7Es!h76vh<%4{lky?bbdlD4>Bz2Fl%}hWSS)?k% z7`h?w5lu*j0Z-Hv<b#U0eAJL9sx*Ui&hh4PibgO&p#a0+Vm!YfwMaq3u_QMi8vKwd z3e?!nOUqZ#a77(!D=F3_vz!Kxf8uK|qE^kYvWxK0Da<<{+Oa4#5#B?Fi~@kia?6Vn z3ltKIz{vuX13>30ry}(SKzd=LX`nj4G__a(wxADk_E=)ELUCp~=&oAG;773z_!w{0 zQXgbYUVc$Y2E2MJR?x`QOVv|=h(d=zQwvKIOY+ecLW1;ya8fEL9~a~oXO?7^rGgi8 zTPc_r=$S&++JTh7aB+Sq+$zxY1;i?dDDhV1rKTq$S*2@=VHaq45i-(9Vc4W5g4SHZ z1}kA<0~Uq4*FYg9HN7Y`RUtREC^IE9F%Q$%Am3vRBx6%O15D-Rso3lUi;`m}dT1Ge zLkp#d1?4Ny8H`0G8T#R=#U=W|pm@@EO+>5Fh$;|3BXf9*1JrB-Ru1(SxKo&!r+{T% z02GEW3~9-L>(657;1sAE0m>%eK3+a#MiHqK1+oOSNryU_1d<0;7;c$G#U%>qrJx>a zS!xk{LKi%{fD&XHpc(5@XxBEe1hl9Cv@$Ch;&v+q0|Olea6M%N?r|AfD4<o3NG&w5 z=?WU438Uov+@#Dr$b1vFfB^NM!QCZP-@xt|E6E3sAHX`+nK__N4X96@kqWEO(3}CP zrJ)NVGK&>FJbZmY;o#w6<?E}b;F+f2>kG0nKQ|M6EPN*XHW=_Iwt)d^{YF&!01eoZ zkUroOIp8<~YsNXj14|$v8YPi{S|5-^rQzYB32pSCOeca&2lu8DbBgm(Vj9xmfgL!L zlbV-ak^vi)g*y(?5QHQd(CQo1mLMcqxr37x*di1QK)FxBP~TYJOc&(F9LR;QAU}XG zQDF)h`^FoppooTz5h7(b(8QL4D`+4$wW1)kC=<Nw1Jv>@hE^VlC~hsy%PcHS1y3O< zXh4nA)Kds3%1<eUtTce+;bH~ID0XU!f*~kD8KI_EP}dn@Ut$g<)n?`?z(>)F6+rDc zLn8$p^gdQlYH=#4JqR+^7c#>ZT#{Ils$Q&sFtQld9ZmyX`H}-ZjTprv2&D>{(6t+> zML1KllA#h(-3zHt@rE{RJP1@KK?W;9^PQ=vO_Smh1<*90f`)%yP9<o@E>9s7HQ{6y zBd&eY(}Z>Q6BSZ2)6!ClKr5G^jaO(f2&#zD8gU>OAeV}$egvmI%n_twD|p8QGRKeB zs46ajjwhppDN#ukHvNJ>_)vPl(C{W@$`h1x@J@Sz6u__}s8<AOynq_Rpn1dG#7fZI zA*3Z$k`E0Ha3p~Sn$l8>Kr1F74nqk8WJeYxCTFLnKw2Q6RZyAGCK{;skd&&B4n70A zNTDPn5p}*6<SvNOpmGL0&6@|ix*9Z_2_6DZ1dZ!~4q*h%52S+J47t}A#Wm2i2Khw_ z;A5Xb$pe%gK%+>YMutX7WdUd`B&Slr*a(!L%uGPD%4k(YcqZuHV9*NK{M-W22mwqx z$S8PpLdz8Rfn1P*Ocd8Z`#J@Q#l_GwB*Dv1KnH3;21Y?$YDjSlUPS>j+cvQbHPsT8 z(7>H(;+yY~NnY@DG)eQ?pvb~Iw+&k|SXi1`Tv7~6Nw8DVLE1qW<XYRrGRT2rMX4pF zMc_06tF==gogA?9kV+zuPM^dQ&~!Rj$_jk41;{Lg;)29vP<(@CpTLzhXs1seEU}=( zOB!fF7Ic-OC9FML3^~RNY?iHpfu5<pfu1R1&JAR<J9N$zYBeP0G9kB@Cn`V+U4<0T zcreHzpwt2_h)`@tF+~9~VgNM*?py^8kZ!PBAQ=O-)eP@*!|Z`50_C0@@VYD5usq0= zfczZDT6kATrv|lVO4Un8O>1CFZ57-M%?uQD6~NPF8sJNb(n0HkG*O2Q!96S#-+{tO zK|uke8`Q%F4InCDx~Tx>CTK?s#R#Yi{EUr2E`ZDx!n0XXYD#HxY6_9g02x7oGf;yD z>XqWuRD~dPTiuH?Q$XW4Mc}lc011ESVX=uNkkyLVJmqg@g5;^>lEjSEl%m8O1r4ab zhz(zmF(h~l#VN#<Ca|=QuS5ZlF2Sd$Kn-V-*QbC28MT818&`nl9kiH+jRQi8FVv(9 zX#%6<FYv&xLSboQai(rjDmV!vg*75wqZ;H5S-Px{4hsZONuCdCw195>g4WfbVT<%s z&@3NjE`W`=fs(Qw!Uv$SP|#92kT7gC4l)XdYClmi1X;8}WV3?2#W|qJfe*NX>PwUb zI*`5QpzXxP3edsQ#GLZP%3_72RFnjlnwOlD52^w|*P!N?f<}c4OF_#yL5+k|NPUr< zlL>0xL2tN28i__R3EISgmfg9fIVG8(+d`p10oj5MKK2=6C^Q;S2bhsvQ(RaI>MA7_ zfm$vl#R}01v3d%iZXl@OL^|~le!w=0Ye360;(bGXLOdZ?X2u7H1bI4##Jl+i`8tMx zvIA%ayCh%1PysUZ2;N!*DziaT_Navo$U>-dAq}WvNYw~C+!ETU1$hw^;-FcJ;tbF= zoJpwNCy+U*$<Fzp1@xdzvkE2o`8l9MDk(mvSV1=zdRiqYC6eM7xJN+dL)}>n?#H8g z1KKeI^>@JK0^Adz!FbS>cPSv38<-h@h6@Y~3?YLBMwWVpMiwaUDM|$AEO1*9tQw&d zMIBLD1>zKZB^hcFgnuC!C|7_msD}xj&IIkGN-asnw)CtR)C~fq6HsbMttd&&1Kk~h zn%hIb`y!xg1E50~#n9c+Ih6|FE8pPl$IK!HRM(+|2CR3Kn3n=x%v1zkrwe8(6oFd6 zprIo0bqtwhsj#+LW-97rG&HG!T@7veqB__Yr)NRsBuWvP1nxpWHzj}q4TQnz60|B) zK?58!wuZ)_RV9%9A-Q>};Au*jT!|*~s%MaPaGM023831MX06eh^2kvHwhFX*3|3fy z917hYm;!2vCn_lEE9ruU0Z_dQ?lT%18|WJv8|oVx8>56cQRxrq2nCP_Ad9sSZA<vd zM35wCL82aXO_42hVItf{uq1Tdku7wg5~?JqWC5>SQ~;fUSyT*WqbdQ7Sb*}gEqD~7 zI2F+a2OAHrcWuGT98vW_C(c2~vqM(vV@N}0_iZ675;BnnQ^5v9TCEDU&?zHS-QY=L zu!|6N2UHhmJv&HKaX#YmP_PtqD#jMH^d&Vh7u7)UY=$j(0VS#gXh2HA7F>3rN`S}O zK!&9jph`dsHCxblOBvGM6R;y7O+N)&Xd4h!C#*-OU<+DnR$7#pj3}+ay1^|0TTuCo z$b%3GSkuE6-U>lA8d~Ssg6>>NM~_2rS_fS`1=<URNNA9L78gVSv<w!y(FeSx7Q7S| zb(Lp8QD$BV<nB>$I#NK|BMK_wAvqR0Fb!E}fpBC=VqQvOQHlbrr3RP5zkCs{jEGDF z$}b?Stl*wn0y=32w$c>7#|T`%pg0q{E(bh#mso^|4v^PCN8Ny~B7g*iUUGgxr3Uoq z8HhERC7{(YpzSfxy<womgs7H*&s_iwZXwd6GPr>V62r0o4en=9>oya##UV2f9M;8p zAYQQsQnY{^l9{Fe5|1{B1ywK6>X70BbbbS*Y*3HIob>{YLcr|-8G?Ey1V{vg!Oqu! znXav%4mrF9bo&cf&@dKuSrAAyMuGxs2PY>`DHESuTm}wH9R={Z+?32B&<$GPkpbxO zzeqk)S62@&$^@;*$jO24N(QH7aH$OnlAMCXq|_475RO8AQA%nNsCy6EtE`k<T&4tG ze~vU*fIppqoDae<hd~<BC?N!@JwUrgp%=%3W<Wr`f()mF8ba{4F{GPO3_cwl$pz5b z6Y5n3%%!b<rQjVCpaw)@Q8CQZkd9?qPAO#5W?p`tE|>$d9LaPdG6>u|w9O%)a0Fq{ z5;br>f+tDD&16V&utW+ehd>&Y6+mbIC_sBDpz%jgP=a$bGz>vQI&j~BTCZRo8nEj@ z!3O}rq7t=93NjxJLpS{DfsauGwR7TwTmwU0gF}KfbrjSS)xq~OrJ?4bG(FG;hExqu zPJp@z8n2q58+3Kh?=^?12jxmVu=7AVA)%9<S{aKvqJ!o@1qJY!XLf2OD1#U07nP)@ zXn^&C3WTEU)XHKFO--ch(Lnm)Hpb+^?xX?<!}2JI4KDMM4@m&$PSiXY489Z@w0aQ~ zGO(R`i8*=-F5q?Xp#BSF=v4u{s0F;pE<X((IgkOH@YEz-#{f?S=xqdGGeJwJ%QE4+ zXF;Qga9xOf-XI@?GFLF@cm_xh5m5+$3P_M7sF{Os8r&36XRahMJ2elHM`3FW&?_*c zjD)|SfE!LkeglOu2-7yZ!Cj=RkP2Fw4!)bR6twp>wYWGDbm|hKN&?Rvf<i1M6ISIx zY8JR5NEs7aj}V<{Q!A1)z&BbWA_&|r2gMR7hQMJCw<s6P1vQ0AN{Wj0(o;(`)Zwa- zj#xr+5JDQ^CU7>0RtFoV9t&#bf|<yLNkLI+0VF9Dfo`uZODxI+pXihbnqEo;9fARJ zAt+Q}n|wjbYvB%s)Ys5%5K_2-G=V!GkbMA1>cNc)(3xjBsqmo!a1MqPb)d#yYB6FM z0^W85`vnpb5HX}+$V>xY6rY(_0?wp*5TlUtDkz~Lg%#8QL_mS-VhweOIHVefuu+;c zX`mx+K~)>5PyshoKqFL%kU<D=^C>wWeCQ9jG=^;OM6~#dONuh{(h)ubFGY_B8-;SG zHz??`Q!90##)9f{a3TOTs6g!sY)u@nE#ONU)KQCKkjD`g!OnC56|dQ;m1u<`_Eru! z+@nFoFz5)nk|GVTT`1uKIbsm(X|P?0?PN%03p`K3(*o3^ph66+4ICDz&PT)<$N|Xd z7Fytf+eZpWB_-rw8n_*qX`lslY0zFGs^KW7@qq#ggkc&WNeEQ~NFIctsU^rYB*@b> z%vB*E)XB%wS;56I#8D9`Rf3elFu0=vDKkJv%YhCzN`=%?n3Ws$cmSCMwHR{fm#c!G zzn?DDZm3%veTZ=Y^iVU1{jke*P~8DJs20=vsh~tqS*({@kqmCSYG_6qAhHq2jUWth zrxNt|H6<Md=-Fx@IT(hhQ3uCkP%0!IAxE=e^8z%7gM$$gHQ@Y~U#th(wFJ84H9fUN zQ?IxrzBscg6_gXuj_ku{Eu`8{O;N~$u94BjdO{w|2=#)T)WqUc1@MVwu!bm(crQxK zEKXJM^ameO2TzqSlTvd~lN)7z3V<BcfD)nu=(S?B^{OyWV-FH#$S^dtxd_hD;2q_l zYly&m;XrF@LCqX^AYx_{sOI?M63~&4>P4v~s0STF3moE0R*;iX4MpZ@E2!&$P9g_2 zJ+&3oZ9!~M$qFqXL7HJ0MVqaHx(=jvu~h=;fv`a>V<lAg;ym=Ts92rQah)KW$vLtU zs*m(zJE0m$Ke`j75zFzNAYstCoC>xIsE2ogyDqj!A&OB1L5dcTX1$bD(BP>Caz`9w zFz8hKV9+UH;NuoSy~zS_#{qoMJ&H!mA`oIawt`DRSAoc)0ec<*xeQz+kXEc=a}bt% zPnOf*xea0<S8dTw@Y#i+a}!ZEE@!o~Ffe%Q__8szM~E>nFrY~4!S;}Y&q4HV@hxI( zkC4Jpg*?OtR_R;H=-bWM9wCjX6uD;xQM;BAY`Fr4T5$M)Yb(&G0BE2EqM?t`cQqsE zIL2Mry_BIwz>OJdgj|-P7D0@A;D;k(1Z&Z5$PtNqz(*wRg&dK{4c)%ymYI{P5fK_W zm<~uJ`s6~$S$U9S5>bvngh*gNCvkWkG6?ArrhsoW1}#Vdch2B@GfVPeOi(<7yGXhD z$fp!4fSb0usTBn|iO_YykW-Bi2Q}(~hLoXan&+oMhkTJz53)+oDG#7yxDaPALEHoC z0AwbCj$l#H0G%X~SeBoeqL7i9o&g=lSIAF8n4_SOoS&DH2|8ISF-HN^I0GLS206X} zG?fC|LItiRixo5xT6GmtGC{|gf#y9yQ%m6Wruk{$J~-3?(2;a#(+lJym}SMt=H!=_ zKs=oS8c7CivC2)%O98E|QGlHY23>>-vI8_;26A-?Xh$r<w~%x=dYB_k4|C*FR&a36 zNh~f_@J%hr$WJMT9%u@yFd(rS4>}PJG!hAlBG9}(R2bCKi;stJAd8CQ6N}P|K^N_S zj_)hVhn`sql}pVl!;}NJ;z4FZ5-l_xK}5kvb>!q=$d=^CgJ!e2lt<5^EKxw5MOl;z zJ0`NYvKYq9%mXd{D}izIN^=V;K?@u53b?qG6=28eLDxQJQumZf@Q7Y+eoC<(XlX|= zXmfdfQHersWjwgur=w7unUk7V5)Zk5f(xM>9Q|<h8encbXaZ6PQuM@wrc7aM$bM@W zub{LjH7yy>xH`lz&<rX}OKxIj4vY=H7Zt_<&8VOscmQf7!ZE}w(1dU?OiylN1+v+o zDQcJ$w9QP=ZJ=|pKvTakeUJ_}jF*_43^o+rG=#eb#(=mAq%Jcz6-gVq(?GI>Oo5(I zR2&bs6B_zCsd-?2Jjj*tVDAz#Cov_ZAh8JM7|{K9$r+`2*_xn42w7x6Es{%Ffu={9 zB30iS=m(jCLjj~9F*6UcIv;cbbP;HiaDJWwWG4z}v==h{1{!$-jqE!6`-KGg`+z3} zi=l)4pb0%>anPb1klNys)Kt(oCTNTgegYBvNFi{S9Xxmrb_pzZ>nS+q<RG>yfb>F+ zn}QEAm*m5yC_ppDso>=nkcHon0aI|+1lbQB-2m<J0PQCPb?8%yGRr{oEO0k~{g+w- z@?4?<vKJsrRlwaoP>}@M!G-J+(De!6=0b5vViD+!z7&PjJn$ahRQN8;{Ib*{(A-u@ zDr7q>WX%q&fdO8<i)5sZLQ*N%9pJTisX5>gQuz2k%<tfk0{J8nWKKa&YDuaBsG*df z1`Pmk(+}=F*t#Kz4?#hK>PN6~_)iXn){UTw6m2RO6zkw=3Fwl2s7i3k0JZ&+QeopU zpbM{I3wpp!IcNd_TMsG-K&FF@0?nqw*JObYdsToPPz#zZ1})@<od1eADij<8@t|T2 zi~G{R8}U*S!6&YR{12a62JK|e%ufN$zNICW=9Iuj(2EuP^7B%m2|G0}1!{6}3F3%I zkjHaC8#>807v$P_aG8QOdF=z=76#fxl@B@XDNzAB1p=D3fhB#%o~jiK&N0hM(M zR_Klfi-Jl(P<jXL5i7>;eOTF!C1AluK@ws{Vh(7dBxpq)^fY70?4qF&WD}!8X+c_1 zeqIS^%@8DAz~dbn8(7l^QZzv80<^FKMMG|4MP_bkE-2MQ&b0yi4&<)9{5%E3?7jj< z@<TEnR9h%mDS%pOpq>?SsQG{nkAY<_@Y*d<x`D+3s3-viBmPhX2Nizfq2T~B52PBr zx)EeBdi)fDG7gf<!M;T?8nl`is|R4a6hY>L&$mQa0t!6^)bN7G5Wa8&Rob9)W5EkR z;W|Lk0^YO(2`*4vfHEFv$yP4t3_{2eW{}tdt1E_-wV-l<kZqZ{saVn?xCDTO9ViBI z*@qsSXrY;yoJ>wi!(|(^M1}{920S@x;!iN3Y!2y8qlPTrqsH(B9cU;ER7;>5N2O!F zV1`2)3}hVf1u_7CfIt@{qB@@{r$OKgHRuXNR9i{fkcnZsy1$#7I<$<2u6{%{9+Y{Y z+hGv{Cg6q!D3rjPY%vWrgc%9nSAlM5W-+3r0ZQ~FZzl<cZq9(T6Up03g5hwq6Ri}~ z;r@UhBMZ+ws1AUveFQJ>gf>*6Egk6bZ)6=Fi?@yd_2JNp9#kj6!i4x^J21insbJ4Z zO@p4h4G#fO(f}RakXn?dkPE)T3wE3YyvPHc&kQ+y9NM-99k2{4S3wxBb@}DsBQ23@ z4v>A|6EzSPLQmbL+`iHR(BUiSsWcUGSO}VZsVS7(SCpBafh{~i2XG*)qhff1j#0;( zTwo0s@OS|J(hsZz)DA%nFVy4*>aHUWbOX0#@S6%gFA1*`VJVt!r<j9MDG1|Bso)|G ztsxj(o>`Kd0cu)8j<tfX?1t9B3L1u>%?=8%jcPfGCHgt}c?uc^NZT4PEH!|Z)1Zb6 zXn{Gpr6?sLw5~wjwGHX$K(Zrvw>4zp6FfhI`+13=wR`Y=8}QS#F^eK26R30Yb5qkn zr?4Ykuz=xzh#F|460{2v;(yS7agd)eO^5jvtPyl50J>-4A)Erf%K;SD$%#41;P#w? zKiEm2;dYmTVttnq$U+`acQ7-rG_wS;796}Q6|~6=)F@2JOia(qF9scoR!~}0kPkZY z7#dN89hzE#76u9!fdD-t5)lgdX$q+&i7EL|_kjloAQr;oq#UyEFcW?lViM>ueyBfF zzzGJlGdd4<2!d?LOiRNVe$W&O3p`L@AlyaoAS_5MLUSlMDZ)n`6g(jvP>`oU!3Mr* z0!y)CZVpYHDFrD+#0+$QA^hY{c)WnuA4AN*(<d;5T2`E!pI?%J<^fQt2s(WZ`Jlc0 zGzHfXM;HGP$QkLN-Gbnh3l97|#5PjUm@OWAVVMN7<qoar1l5*M3FvSLI4D7_HY@?A z4w8g7+aSY@Xa>T1o{1@txdzY#8T1fRaD@Qb3ysvQgOoJT<W6kGUr>~qmRW&jbpS*V zvIY^{IRtfa(lYZBa};1hOZp&2NRXofXto8kni_OGIA|CLUvEy`)eqLhOD;#hB?cn{ zLo*}D?&8v1P$M8YC%-gBAt$r2G&4n^Jh3DdbnQ_d==fF8VkmenhA0D_%8jZ9x|tT` zniSkQxx9#AE>0^g0`I1TXBfy1185w8rVBv@C3NpC+<D<aZVJVj;Jz^EqB$(d1D4WK zlhcY*GC_G1xnYKU6*Xj0IB0}6F+Ej5K|M9OB)7myU!^)U*fpqDKNU2;nhKiF)K`Zr zhy+a^fL6}o81HZe$%9)D;CL@i%}W7wtidxN3OV`d;K4oUO<+*FQ;R?y7DT=Q<%CqQ zF^MTDMXAN0avc%!u!{qsI|D%%?It4hVpPJ>>QJw!$3k;G$mIM2(2X+K#%pl6A9U6q z_%N)*oWbFX^rFlpBhXc91)$+$@CFtI#Cf+ESpnKs02f$kpo3$e2eN<;YxZ%C0H4qg z&U^|=dT9kphye8j?Pvn^_#pL8DrEaAXk0eEC@~k*fkJXdd1g+ILJ88|t&)7uR5$3} zZg3YA<X+g-Z=kgT@GKA6E(Eq3lx%VnOQ4aJnhZ;tU@yY60EP!)%JS3TB@DD=fp+!4 zzJu$BG^G?=o!x@LDN+G)gALxS1Ulmelx&b1PMD1bP+<dBn3h@uDse!i95{3##T-`0 zKsM+pq$if7mM2z1x0d2@3V2N#{%j4}d7EDZ+HwGC#pD-Nf&vyC3((Rf5wiOn?0xWp z33%W@){;Y02q^c0!w!psKvUIendy1~jv*fLo_+zLA)xD@p-~6%Dt>1|ssw}+%RvW^ zf*lEwK?^;w$KlQdy9zue42pb0L%^W4ms(K*I$?%@n{rYs;EA*-KfeUJ<2%2o5;F+k zjzI|ukh5JQLV_Hfkpm>PA{D>QuxpkfE2hC4BS3y6+E)LdkRV6D_~0OCXcU0_3@RUR zTbqcKTL^d+d0GQ>6FkUiX!X8dVlL=nGH?XKl|Y&m;0_F^)eg!aZuv!^JOV345Ty-9 z@vRQKO<ONL4WbEF|EHuDm%t7vMD5pt>JQKydr2zjx<0rf$nYZcRtiwH3UWd*D4T+O z0-5*&bsoW!f5=r6NNr9&=;9iJITUFC2BsF%Z7><g0)22`l@^1xOoEQ70o@dU*`z=+ zH#Hg5cEL0iVnhn){7GcTV<sNtcuY-BhuyaXPsyO*OE1bVEl|iL(KOfs7U&XVR5!Y$ zrh!jD0>wWlG(l^&Kr?bhkSSQGUT_@?s%{{uCIvi`28tCB#z-AV!IF}iRGN<7l!tdZ zvr|(G6cA-1IKmYYOTb|dns&`k1D(89f>h+8_3J?AS*C&~OF=tw&`pBuUjUm1DYqbH zAGBx%^_bzIi{S@YQw=o!0y+qSKs^ULKq{*gbZ8&sMrBYD4GLCJUjfv`)PY|m3=#!R z2EeU{H#8x$mEgr_h#Q4r;~XjZAS07Nog)n+Vum;%Yc_BOKcwxTkPX_=1nNsU`-ZzI zfOmKmWJ0%Kf!g1o07SSnzqlBDPC3|DklR|Idk)|tVE2OhypZD;!R!AZlldU^prF80 zw7>#BH94^$Q^86hDL+3aH4!q?4oYnysW~~t3P^njNVWnyJ0Me`9JI9zbYe~k=#H<% z6wtg`UVaH43z1SQWZ4eR@Pdw!AlaRjp9IPki3%W{pqd;q{e`H?kuD%i&Mz&<0o^B^ zS(2fUh;)5nB9_7c779h669tG&d-*vjpeAH;W<e(Os>PJd;>7gyBJgp@`FWs&P%`qt zqaE<*%m*DWn5vMMTCU*fXbid|HZeUtHN6Ou;d8;u@j%gu$B8+R>%%}zFl;S%SbrCk z=0QsVz!w@p^(YjBi-Oc**kFHt9%ykNWHKTxC%+uwPRKP`(2Khft^wPaS*#GP4jw=R zZ5{@Xb-@{+K`#&|wIop;vF1q~H1d&|mIji6j7xx6$>qr)s=Np+j?$C|iNhPcC<Y~i z>no5vxU2&)pk)S#3CV#F7HCNrhy{*Qb;yP(_)#XHoyM^Bj^O=^I^bdo6k<qQ7zx}Y z23qt}l%E4$Dh!!u1m!}=j$TAf3Mwk0vWR`JkRh5>q;&_ydJ2wdC8<T_iJ(h~lM{1t z5Jte)Zp34(%8ZW(Rm`AfHPRRcxblX&4(u;zO9+&q@$V)EsQ_V6-2e&<w5AP63f8>A zvIGVsO~f{2crsIlbdf>pjdOB9bq}Ph!w4-<utHABKwZfUHwe5(4Kz|(l%E4~x`Hj( z+aMpHssYb&L)N0$f|~%S((r{U*d&owo7gHKj@bd*4PV@*fK?}WwE#95_|gz;lCW8H zY;xem7FZ=fll#~tz>6HPNx;@0;F7~-AksWPHm#r<7ZQ`$WI?qTXf7R_9CV%<n-p|{ zz*Ye~1&kJXkgG&(71Rw8d%D1}11_vG6Y~^o71YtCKy#$nYy!_zVyXwvC}L9&x^V=w z1rAidp}Gq)ONUJlWIhd>3}kE)rwnKs3!5ZlHVT^zI0zJMkw!<rAp@V4u~jfKL3K8` zV8_$}76ujbm{OoIYYZEpML$;6pn-E+1#@#$iy<|Hf~|rfsyK9@8p8(Yc(JVlbT}AQ z7j#q@TbMvcZEY1m1FERHK;x<y7J-H`F$7_Qi?;Yj4M9aC2!lf%H24M{J+xIo8ks|N z0Z0vKfDVrmlqwTT0K-R(us9lAjbiEnk1c>Y%C-t9eR=q>2C5?=EqsW2%!Ci>cq0uq zpc#oaJb-F2bd&&H3!-n2svKk!tc#B=rs3UiTLmnAX;ib2yVTgsf^}T6$w9iM*kwR{ zOl&gHK3_bvzlco<xT%8~S<r?LrUaxJgeeYb<YTh|)SymF#?%3BJb{H#0}0xq1f57l zTw729(FTN@1j-L6SRIn}L9I428iy!GfjFRH{G!CXVvu>@AOta>fd*nif(gQcv=;F= z4IC2cv5?_^km=x@jL{xLK9CE#e-msdxWNf(rh&2*sMQT>rhr?XsO`<5)Wj5&71ZD^ zA!IWRcr7z>vr7SXbO>w(Imli38+c&HfRvHaPQy60AsOU)1zQD_^Nm10gO7tkoe4U^ zC>V5saZZ{ZQu_?`-~(`D7<9st2H0F|#~XoMoCaz$fLeBXpm5aC)GIE?$t=-O2cIVd zQUJoxK?vyXf7G4C;7zF->dyJ4IiPa~O29+osDTaM91eB`WN$dCL!kz^Lax>Z-M*2Z zS`0o01$@*HsPhZD1RQaJM|n|xUb-IIIR#KtLW(LCz}6L47V9MzrI$q;#KOF!udW%b zYZ$Abt$^(kDUd(a6?8L{Kuv$JX$qyqpouG_jR$CUg6v4G$Slz?L^(wyJzt?D19Dbe zYFTPgC1f={sJRUuOh$Am;K>Fwc$ou^h|D|%aEzdaab}tVL>goWm<2ip&em2zT^Y+U zDas0&>3R7@pc^c5!Sj6J{eqc!p!pI|CIPqN;dX=k4Z@&=l$lqGIEfJ?2-;q*4Bkr) zwiVS?AO*?_$)%v(6KS9&{~*gS%mr%%ogWGEA1o@A)iL(EgQU@vp{5g1Af)DLfYfO! z*eMudItJw0+<35aL8?Ge4{kuBAEgI!I0!=(DS(flOpG>&jW)7^bZJ4dFr1kN9``{q z4Rk68^eiGwM}V{;3`RQa2qR>07@U$=X^16O(ac5kxe#q{kP;BaZLkqxgJHcjtj6ZR zBf!>H!3ewOL9w8Mhy+6{=MsV(3BtvxC7^Ap;1XL0J(QsWhImd*E6>QxNmWoM(l(Hd znXt$<jMdA`OG&NJP**|A)gWcaI15P&=-?y`^=bk-vN3ej63|hW2<qkJgAd3`%_{>Z z@@T`@=qznRt86?00CHz$8mPts4dH>7CV?7^*y9DH7KXtI)DU!#7L*ljl?f^sLGI9o zM1)~%bhfr3miz!S14LsUT>=tC$FOaR;CR*pwZTE{bi_y&x_S&gQtbkY0g!(ohkIcr zQVhK?0fe_8feNaMKtpypso)w5G%BsGppB79VcIcha7zVLXhKIvPzx($<#<y$$Qkje z6$OcTDXA&y1kybI;D%*;!&p6Nv8SMDtDv5jpO=aw+rwOm*M$V!1Tq7^yFe-k*Z@kk zm;nerLIhFd*x@R12pA5{O;(^&OhImeVeGC3?eapjM~lF>ltB34)+S`9HaI1twlM=B z=g)!8P=qc{g3Jm+t}F&EUdTvAIR^nUi~}nFAZG%=lODL`25Ryo78mCyXM&euf){KS z>p^a@g6jcgdT>((a<yuHUMjq;0XGeF>{?Di2I?8ANJE#<Tae-Ep}R-neD%ciRCOx_ zL&ORY_2m4V{36gHvB3rTpexf5xllbjGo@JF3TZ$@Jts9CBw~ax5Hx@Y((RI;j-<0V zH#H{*B<z@zUjkha1d1t&THYW7Ko}Aua3_F-f;02db5cRaNQ1II<OGJ~#FA9d!HOxw zMHI*waAZM-Q6X^zw*)jS4pITanYo~2c@&cKb8=F_yGn~8NeUzficL_L5AzUWkSqwp zR3K^B^9LP;o0{U1nOvfQepYBM_@GdP4Uj~v0BX}iP9;@REw)lnEml%c1)nLb0BV1N zPUHh^y#reYI&l<i3d9gl%7^rp(2pemX9OM4VHCxv*})&W!88>z5dv<?g8~{lfDRts z2Y1pz*L8#Jgk%EnVTAA?1kJaAS7GI)KofRRdMT)tNqpA~6n-EKI!-~sN&z&^4!Si6 zwV4ZY6nvvG)IxBh8Ft79bX6JTOg??+3=U|mW)4zLBBk@EtN=Qs66u^ta01K)t%ig6 z6h4~@UO$6$=4WCK;zV?1L|+0n{RG-H3@S|(G|E$pK${jyU?&o!rXWgKP-w)1Y*(-a zRi?!nAORF<NH8ndDpY4HSb^ggtUfwB7MxnL!AS*lL<Ptcc!YsM8jds5Q1vN7#z<-* zX$quF8G3jLxDO60cvDlr{RnV3Co>OppCdHBL7g&CEWu`mU`YpVGbjmX>nM~#-34(z zC>euJmj)$e)J73%l>s{JEL&4Yp$w@X2gx)Lw<4u~w4*nm=^rGDn*JTZcMC!iKV)_n z`Dzh(>>?!}`~@8-xIh?WlY*53DAYk~z>wEof}}xV1W(C$>;;v<#R^KU&Y_+zN;)8h zJBR@fPLNqjF0R2Lo_>xYp8kGH;1LrgcgGOdaK}g`a5hx{)ltd$MMbH_1)$Sw^3tI* z|A>idkTD?{sg(-g#0VN;fULg<Wo+<hhZ5M0@veSh$d?b2l9P}l9uzpF#W}2{qywr5 zG|G^VS3^$#ki#HAi&nvh0u@7}9(>LPYTP?#q$X#B8Um2%a!@?wrGn1>11*|ED(gVW z9AO@!JzQLxoB=vnBojPgTnRaH85{wi_GV&c9!5C(gO>W1gHC7!P5+?I=aHPmz&^q= zM+u5Nh#JtLkML8Tp-T<H5ei*sh_v1sloCQg_W^;{ZGyrFbO$+jWLHN4yi`aBzDN-i zEJ)+UC}|Q@yn(z3PIk#9IhEjG0f~Y-Kj70>k^D<UIs&;1gdwpD8-WEM$^ngFa6=y^ zfmA?%#bKQp1zYHe9v}g*MtDC5n-<6%1jJ5M9r*>tNE#q2z=5p+CZVH#(BX0@4=Jz^ zi3sE=7zR5P8rV>FdS(ieJzzojyaUu&)bW3aQy>SqKs*SW)<Cn9kXcBkBjz#C-GUh2 zfGUR#OTYsfG;s{cgP@aBi%P)r&uC78`JWICb~4NcB&R_944Y1d_!`DTQU=xzo?Of< zE`hoi%!NA^%!9fX%tlj)ZWwf08Dc+(1F;*#f|?IXHK1NJx=zIOHbgU&577_hK#c&I zhNK;$9y*c_Q4i(d3RRSWYH%RHlLUOC3p7?858BRzIBp-qPRNu2#7YPo>O#=qL~&{f zk_NCX&}n*zgFzgKRuBuS5zT85U63hvsIJW1RH&}Z+*E89KurQIGJrBch9bo%`pG>| z<0=bMafKJ5WQZaUcQf@&19^aYroj>uO8Jc91>!ki&qAil(BlHJkOC5OP(CEIp&V!g zff4{V?Z^=i(gBZqC<m$?!~?}1_%uR2oUVcT8=evnD>mS6f+|5Xmz01)3J|C%P&3i} z2XQ9cF%T}qA=rWgw2cg|7{q}n1+maghOX6shI&zIB0?$DNgx$aCU`jplnowyBACv= zJ_IfNfa(G-+rV%G_^>OugCWZfAnt&$(KR418G^VRE&|a8=OXDuZ|Ol##RF?VZP|H& zmc~LiynwDihcC5)3@{Xfr&tm*^FTdaP%{a&u?J58kiInR+GNn3-pQ#2C7?B`$Y(?< z!N&zbEp*7_y%Hi^l|c0~q6USw&_ROGNqgiLHU7>8++o-oOt5^MgS0VA3$6zw>!<)3 zgMfzz*z-9#c*jw|od^_TkjGIJpp%YZlMrkC2m}hqF~kH6NF4}+25I0<AZC<?z!(h1 zAP%TI0_uJu_bhTi^IVz5CCJm-pl%G-AsEztD`;{Bo-DwVEFewM23RIpK>caB*Fb&+ z52va_(h*r&k<u2~`Vk41WFxSh!w$L?s~9#I0J*}-Fjfbg43Tm!$oDW@T#{dcx?~L| z1EN9E06u&O9ISZfu0ZB!+bR@;M(`Do1}s6wz;F)iq6#I|Vg=RWm^{#s8^oCgv7kO@ zehJ#$6(F712c|(XSj_`D6{9qRW=M@3O)jq5qJ7|lp@kV37(fFA&_NVEXgLQtM7o8^ zcP&$Uge;mGjI|gL)vFkN-!QgE$e^i)6uF2#Ekv;ulW!AKdxR32Vn`_%59+id9druO zqQ>NF!PFjs?&5gJ@H<4!J4RnF+{S`Nv@ne2Ve(aBYLDPXbqVCiZzr(-MNp+s5B&D^ zWAt4CK52VDI6w(`KSK@Osth$;!GPx83^feTL!%3~5ojR^Ka3mAyF~{eM{yryVPL2& zIs`e2n-zSps7Az@gu!$Ow_{#jszN|UW=>{7fr3V8UM6TeZ)OSj#JsS~)V#bzO~~oS zkmI*~6Dt*r3=AzGVi+fHgL066a!GztY7t18iGr>I*aElw(#)Kk{L%_^EBuRd@=?xp zPA*CXPshO4ju$JS9J~r1j3_9|Pbp0<QP4oTlnOj30&%K>f&$7Z;R?D6Bpfvk@&X9! zDquJTyu%{3sGumd1TspWn3n=tJp@|vp`(xt+JF*YS^zm?7-WQk0&HGZ2XwYgZemV6 zXfX@u+P=&ZLn8|vg_8Vu@IYmJW(qh&6%-U43yLyx6m%6_Qj=4`*VuuA8y1fEBMN#T zGRSIOg~Wn_oXpe|g#gz83x(p6%A8b%^wP|fRD|<%6%tcGw>G8ZCxZub!Miz-rE~Mk zQd7Vq$DrfkAhT(Z%^uLv`n3F_+|(lQY8M5!9MBwVQ3*JegT{zKyFrmnL+t$qWkhg9 zf(F|_CuwKql|X_O!wC=<A`(M-Y6<u}<@m&6P(hWMmkzr6Ffk=QH90k}4AjugONj^d z+;tQ{iznkjcOxPkp`cJuS`rT$76p}CsmYK{d^!rn;32knP|LL>KOP|tvJGi*Qn3!Q zQ6R~b%v{jj!})o|Itq}DpQ-VPJJ&$5o|hV*UlgC2SAyVxMwFF7r&*647*6v8!%>e4 z2Tjz2q5~WQplkvY0PPA_1_^*7H8~f2{yR8}Ln0hBtPV+G5I$;Fhh=hz9O%#la0-NQ z^YV*e`5qzwExaHcl(G#X1Ug&a(8vP9K`9?#?gQ;+LZp9)LReyl@UW$Fhz$0W4v_=- z9XYilL=njxB8HjNseit?y1IHuMrN@>ZhlH>4rrxaUI}>G1$6W+Y>pQ+?w<m#u~HRE z5{t7zx4V~QWP*<VL~H}s;{ta<log=!?o^_<lofpaT|#|agSn_~G_;$9I4(W4s3<QV zb}l;7iRtM%`AKl$(j@2>SeOWCzkF&^VsbW20Mg+D9XkR!z#KHf3mSfdopui6Lu3<+ z(hCxcic?{-j?k&$0FYpjjslDi-4$Exk(yKB21@QFC8<R;IV{`PHN?Z;g$4o61)6_^ z6$YTWO7KbpX#YlCUELXSSs!Gw5j+G7n#}@@L1gBY<SP_ZmSp7TLCy}=1q}*;rd~kZ zYRI4kxQ_^`>%a*ZBBr1OnnQ*SAfOE%Ad)CpE7&n;(?!80;G?x6JFUT;0?5g#;2{o( z*$U<PMJdp^8l+(dh~Z#^K~4az{smir=mtX+E2MxgCM^bSN(cD`<bl*Y&{9;e9gt7} z>(o<#95e#jRSU5iF@{o-k(viq4+$g4sjy&sGeLJLm6R6cfewE_Os|2gf(B7$33vz# z>{L)51{HwdwRkzD;CtKDLFOPWyn>7}A@;{X`CvD4p+qt0`bV%ZJ)&3v;W@~?t<b9< zAtzlYf=;zANli~Jg3LKWBW!?E1bP60f_~5>3&ajnL`Z`3A!b;D+)Y8!K?DON{eY@S z<mLfv-Lty7x=U(uelFx3J5Umau5nR7TjT<od4=@K!DUG<Xw?PMZU~Tb9SaI_Diu&? zm=!>yCZI+*XlYJnejcb<4lRvg3w3ZO7;yf9L>`!lQ~-cm;@H;gfCe$Zr4^E2(7XcP zt&4TN4#*dvKnL3fu0lX-Z(-F1r25cENrmXm%+Iq`4}zS9kcv3a1X8?!?ZCB{0AvjW zgFAnaTLGcx{UdF@hA2TLK^>PwP&E|~?$y}B+=jI(gO2<tgNL3$-4$?`4Rm`tC=L@# z6hKG)7iFeE8Yv(JpdJP!H$##tBn<QtQ&K>UN^oaOLrGT`F$Jrn13vA<RtZ@M9DJzm zhVVc&j4e`a1=0-Ol5Gnr5D{fBL^XoUNX;pLS^-*toT?BR85!y8>*AsWS(t>wnXqYF zxFZn)G;$)$0wNs<YPLYm(}z0|S%^4Cg1czYTt`$mDuY{}iIw1EIFL`31D#EhpO>79 zKU6`TP4FE6a5p1~(A~+PMV6p-tgyQVvhtJgJ0H{<fUe7idjLg@I4=~J6d_WtI&}Ay z9_WY`JUJMWj=`A><Zk#@C`7)*?{?S%1GvKx0>rtR<g@~^KmoSs$iM*9<}x%=&;XU{ znD-|XYvOl4Xp$N3bO?tyXQKo*aYaRHK{1lM^-J>gO)T)c4z~CL?m~nBja(U)T2zt= zI^hXy6GnE_QApKG*HbVy0J+}G0Ke-&6RvQVLpU^YHOO#KEuRUl%t71nib^u{K}US+ zgU{X82c1r>1h0FFL06E%4nhGt2}fxS-Z2XI0+a{VfT#!%ER?E*<YWyt9n?clRnS$) zNlh$E#W<%aGp{5uxdeZpLl?oo9S!Hx$l0I)6!5Sn=&T3Wt<2y#DR7wr5{-wtp;#{^ zk$~$V>uKPQhjD4-c8Kw?Fozx?1YH6Sm4mM7DJBr;pfiKut_E)tMw<FYq!0*;vUCDH zLJD;BP<|2k7@>lqRHPG#AmhLJIpE=6oO?$V6buw}6+nhS2BC4c3k?-?!L~ruDQKXa zqMHO-ilI=DpP5$zE@{CLr3}7D33irYW-8ux8@O$nl34@~J%j+*Fi4Q0k|+U4azTuG zk|DS^0NUva9e_wJ%1uoH?P39s#1n{j_!>mG>ybq0?|g{m#5f#jZXE7(6fqh(9(3RX z<PcDlGZqyzO7a!Jd*x8iv%sAyL47}Ge_vlmKNqlnHDmG={6OPnIXRUIAfF%(u1qb? zOi2ZoNVtsy^~@k$sA9w+m!LK&NCNKYluXcIN>VB4#6CoAQUV%T%>)hY<WwqvPj^hJ z1f2?2kXV!&4{{1<fs0;2C8&E^lv-4pr;rFb=Lq?XJy62~9O5|Yp@M?U6nH#AIAG<d z*#g3&EOS6^XsZP6)Buf7K?gxW2OxslSGWTZ;xW+afsl=5aE~Lx32Apqevty`95?U) zdT}x6EZ&lQ$SK@93i)|Cl?r*Osi4`kq)O;?l3oGi=zARD18VJq+POK2C8@A*Qb!iV z(*VXDUP@W{N#N!)p0XU$d<J<2W<NMNLP{0TOc<*7@K+<?HPbNnD?xcQifFLuxSWZn z+Ry+u08^7eYq~*A@8sk}1yCCs>`d?wh%G4b6sH#Hfg=mlNiT*i9fA%bf|NnVfDn^G z8ldI^XuURK6cKa|253|u6%wS7Q7Q0VlFa-((B=fhA-UP9mC!K)@G-ccTnq2OfL#XO zK|<7UAj}<TW5lqd!a>qVr*%R`OR#R1DF!<QRJDMPkO#X0`@j)sAp~@j3|JK?AES&J zVKrU>x<VdxI|AGQPyvaw(jFYs5XV9$Y88+Sg>HNR4Kso42D!&pp}H1q7RtFF;2t9Q zlnziZfMQEWLA^*F+i4x3;sQL#m6@lIh8PY9nGeFCb`^MCSzf9hs8B6{pXC7=J^`tL zVUT;GK@$leP0<FinxLKFa6W9uJ!C#c!9Uows3^Y(v>_!GVJ&#usfN0qo}PkhP>_F+ zg0sJitCfPff;MRGK_gWUJSl{<xCujpuWN9yqr0nBOrAna36e(8L1iEdkyp&YPuftA z$pc#nQlOBZoLpK2I*k&13_wXyC8)&#zJN0^1ycBdHWn!$Hkrcw52n>YA&zh{hzAOP zn6=QH1qv!i&Vo&=Y9u3PD9|bdaBhMwIsj!9aDx%n=z+D`Dit(f4KYn<w(%@c0G%ES z%aO=e7$|_%LJiIY9jl%XJ`}yEG!HV3m|t1~PEC*$=m<LOG%rOVJGBxttx~L@lnOc1 zQ3+I{D8WyCRD$H7)DlqDsbomp1P|yk1W@jQE*k?|3kpGy7<d#GbQmMZ-|zwgd_E?0 zxCHD6(0U5EKIFk?Xh>jYW3Xya{sA)}iAM<(_26iL1W!t4ks_=%1Pg<^PPPi5c}G1E zp@FhPAz2R`sGvm`3QAf^u!znCT_>NKm<Q5~NZ+8`mYM^;@*T8X1a3S+1t<tWdi9_u zo`E(XW#%bBHKD2lsYRJh*MKTR&6{B3Am>SC7Av?V<`k!bLQX*=Sq~bYprc0&L2(Ka z0hNTH6KZU26%3(i5@Zn!6R;2|OhIQMgF+Id6Ls++lA^qP(BySGDCK}d1Ec{QIgp&f z1<56_<pvs{L!*mz6mnCGL8s{0s)I`jb*MAd)zt$)Jv`7RIY<Kuv=|6-lLJ(T0%ZF< z^zJm!VphnE6eyv=R@{KCPfAS#9d-j+y9Cbv8Q`m3LAeE*xNy%sfcy(`C(^oR(Bcb_ zFbJb0aP(^<AkITv9+8({l9`qXs+d4pLD;iIAs2kNS7J^v__6}f5&;G9>B=Baq$cN< zr-7QcMGBz06zbpd%p8T1qRjO4RK%UGpcO-4uYnF0N(Jqig&hlk;wS}BngzF=L4JaI z9u}J56SH*`@(Vys?L@>DVo2EzRfRZ{7Cik3I$l5t9B;6Kf>1sM&*_6!*T&?jL$;cO zML@IsdXQO-_~Mep<ZKOS#gJB-lM@fMT)`HWSU@XkWAbA1K$QttKV%m!BrPIqfsQ}H z7q!3=9W=4&C}2}uS*!<2EAT^`P?9f(QN^Xnpq-oXx%nxn@YIYu6(@r>YnH%00!buz z(=ari2q#iphZ7HnREiwRXwAgnlEf0|2ofmTAY)6=Ym8tU@j;6mz!y}P<b#U@Q0@a| zF;K<<^>?yTlS{yJozTFBr8r!f!WU9#fio1yQc&iD+J!BPxa8-hDiWJTK$#SjKS8w$ zh%QFd6rjcZuq$O?(g<0Qr$8DYC&Z<vmVgclQU~3ogLJqMO5+lwqd>tH6avt0r(OWK ztr@Kj3K`HDeY(Xcef#(_b3H>)TMQnIATzLI<T%rTA6f@mW|@})-Ub13tY$3k2|u{8 z#U&}3dA5j^iFyH^0j|X9%P%b<Ph)CP5g8hjO4Eunt5R(ZQS0r3{8G@Kf&x8I)21{J zba_}Rq_t-YOKRGn<2OKu>O~tMju?Zsu)`8_N>d>PabmFoQX?A_LXc7q(a=V;SW}^e zC`c6uBO1w|b`s>ap=9{6d`Y0o*z-yhkrE5kdh88+kcsGa6Kv#T)kH)?AEXb4N%uw$ z`pyujyCFeP3>tPR$p@usoT(IAk)TusNNXcCps{GH4$kU$S}`;#|DpCnibgE8I4uh- zNMM3`hfr6*8qO%81zk9*p#>U>&{5FR$}UfV9SH+kq6S_#585A>n*_aD1>8vhbseB> zJNRf8w2+3ZuY{c5pPUcU2CW957tSYVB!X_-Ni6~!1S;;)4FVTp;2w5rVseH8`0gP+ zg<w!CDzQWXECx3OG&BhofjI**`T;c}Cr1Hv+akmjDd3H3SoDM30Ja2l?g@AuMKP$? zoTyL&x-|jnEx-H{$l)`fg)U&@kv*DOtbnv_0CWj)MPhD2PAX{D9%MYEyH}o>ovBcs znpB)wk_tI&Bcr6Gpx8=Zzc@dwq&%@GRS(>{)XU5((FZBkPsuDU$Vsf!2i@(b4?g%# zub|Qzv<t#Q*T7iU&<xVVLOu)%<UU<pU9b~jv8(Rr<m>{fH!3RCH5GJq?Gzj<6dWrR zoGKKYDixe76r3v+Tq+b?Dj~+fv=t@hrKf5bX@XY67o;YF%1UF1b^`+g1p@;^1p`9^ z1p`Av1w#V^1w#Wv1w%sv1w%tah%xxvMls+d2XDd`fyN)ejs_Jd0r|z?(>fA!km5um zu_!6C1bl@R<mhu)hdf3r2ApnjjvaxLD<~SE{cI#NA!~uaPJu==W?LELAW)DfSSeWL zCuLbBfYU_++_4ZH3gD~Gl2R2wy)sBrQ>p~rZmFcF;0Q@dpu`Hz5-A8bKvDw8lHk-- zg;Z$5$;<;S-bpUX1h@PZ5|i@FplJrwy9TL7X)_e$=jVV<qsmPz&;UCRdbpE<mI5e8 z>!qibXs8#Zf?`o!M**oGEJ`gd%>l)1baX7Dh6A;BKt_U^GawqNwF9ymp{YVaTOqm< za=1_hNHtUnWB}+2M+J~>G;@pcQxGaq8%p2+g9MfaD99o8HMGJDsVu-+-J;e!0YUyQ zq0S)+?yi2WLEuAh6x<v=eOz5YRVX;lPzpfQ-Zp473Dm1Y^b~?p;X_5B^|zTNpq@f; z33Q|obTbmHSF4Z$I{+7SzynAzD9M3LM98F8WEPh|6B_>P0n!I@38d}-yBiepAPd35 z(55s<8K`RyUMd7~DWsGGHEbX~+hp+cC)7$vN(CDRDJCEp6>EyhFV+KHnN^kw9*_pv zi4qyuTOY~_;PFE}S3iGOzYqllTLp!@e8^f4uuJoc5VJ~PXMp^anWg|8cLWWSARB<1 zI6(CTTodYe2gsPBM9@Jx3d#yask#t0B;9~!RX}H2DWqhkrKJ{uniY@{3+Ol`Bn(gz z1$4Uv*yrHEMTkSx)z$qAQu823dx1vmAwz(msXEAT8Mx9a0bkQ*Xk?*)wC@2L0fgfm zWF1<Zql~!2FG~X33b6}P8Y&nXSwOA9jAu{)ffa+?1v!Tb9+dE&C@8%`YAPhdK^jmz z0x}AOK}iub-2kflK!Z1lMTxnf^@|En=YR&@K_<e-BuX+MH7H1PaYlYo31k2Tnv&t8 zkdX2ao+d$|337uic)~*ik_b`CK5(dmJ4m231`0r|<M5zCb9^UeLsH979XE#uAGUFG zb#T;!(<q`J0uL-mkfLTNQ27lGuuNPhTZ3dl$615UDpf>UFAs`c5C&UmXk-x$QD|ix z3!1F}b4)F*%uHfo(;dk9PXVS2IxLB_RY?Ohi>3onfGD0rKxf*6hNwVuZLsv0m<wuh z<|7GZra*?@A=3-sJ4zuYA!Qo;c@tziTE29IoN@tgd4k&#D8uK_J4He61Fh&ygJ(HJ zY=H_^(42g63Fxr<{4|Bklwv&vP~JkQ0cRGtUWg9R*;$~?kBLQ~>)ydxKuI5Rm_!Na z<Tj8zsK5j*>V~X40YwVvs8MJ;95mUKmkup3z`>5Q`2@<vgP~ji2Lbl7EfaKoiWT?( z0Z=OowDk_;Ul4}f0tPvG1d%A9Ge0O12EGXd6kXs!Yp{JFBM?ymN=WFj3c9KmwABK& z;L1!>08K4`(ha2c02u_SWfY<zEh4CrOvFhDAl0Dr1&W|49Ha*%W((@aff&#pZ!*Zc zkojdj@EI=fSwnSw=tu!LL~LPJf$}p*59m1gg2W<(i$D^v0~o=n0Ce&N_QMxJ^I4z+ zuWc2wK~otZ<7{me$`EFOTnoY=t6?W7fHpg1qm6ig)Fc(9CT7C}7`5;L$wRuY>fwn+ zpi^0_K+y&s3IN%vt)LDL+qC@BJaAJI>~K(4R)>ZUG@L;Wfy{4!_E>;siV#~IHNf2b zq%0lK5`5SZvhl^4>3O!Gt`al`K%HRNKCMJ}`a<+XK+BUsO$z9wJhse*zhHqm1Ktx# zQ$QTj;s~)3oV_vZgy!Ak{5%xbLrN(uqYaLrE*5A^6f(SxbnhvW5#ViA5MRJ!2joNr z=*(9!wvkjF1>D1^pvWvPDT>ce1MjhhxDIYKsGx%dA+#X?wheTZB5c_>tfT^&1Zoz5 zHDl%-kiK|ue1cfe=mY5iaX}K`Y4+k0c*H~MJ!H4pVk8B~YzQd#<!CB^@=6Y<>jE<o zHMJp`1W9zT{j(bI$z-UjK#2-EvXY2s5JThBvqT|1vkZJpQ8^^_!}=0%V-yl|K+R9+ z5tESiXmNICK{4q5T+qA+q$mOfE_D1`p|}Kecp-RA5#)TzqEyg4Q6gx1FtrGzFDWNA z7wQE3DHh=j@IX8`IzZtJwl1+G1JoZusDUIl#Dp9400gK_n58+`I8Zc$j6`YY<rnLL zLNq0_s2C|k!Rqn0-Qb-P*9gzx5YQq2nMJ9|C7=tiQNs~z6v$evJrb~P)WQx{NI3@i zdHT6qDY(E5t~RJeizG#L=u{e#+aW0sWFuw)2<gI5*qcd7O~ZORfktX_3gVVWP^+pa zJ+%aMq-SYn3Wx%oGYRply1II3F{nM2k*biIoCuy)(*?C1bwPKvgGSE54gGut&>WmX zBDj$WN&$#Q17w{IY)cuofwWYGBJhFjkik1px&%+Rg7RAl_)_O|&|&|@`FX{93Z5m1 z?lkC-c5tLYcC3Qe9D-Y6Aj?75MuJK^c>laO6Le@bNUA&|KPMH`Rn0F_$Vkis?aWUH zo0C}#8NSKPQvjVb0ZpX%vqNff3YJ0*)D3|gp9``O6kZ^2fu{aJbIoAOK!Tvg92VVR zVQ6^>QU(f8aQI?5trhA>=#^QRSrRG%S?7jWDF!wcku9Oa?NGzOORBKA3p6(bS_7G% z2W?41;ufw8bgvht3vk{Y4Qcx0DFeXagi;6~O*erzD91zA`f5b0V<b*IYaKyZ4vayO zr>&r_51O+Eg$O9%iI~EIhN-rKx|M!Ler~FMZZXIRuyeuY;v&F{)IbyEAmxyiYsB1M zf$BgaCg+MvQqZQ#f<s*VLqi}X4z##L3QOn2oSf8@fTDa*?SXAh3tH5Hr>L+l9E0TG z<op!m`7I1xI3|@~a}%IogX)2-7<0*2sLU@_0A+NAL{RaNnF23`6p}%Ebkac6cAzny z?9@toXxkTL4C<($tFxoCvukj$F6dxW-GI;#q(MQDYG{aHAJu}o2)EzCV^&CwTnr63 zybbCCgU6z9`rkLd7&HZ*otje#ZkfUSp^%fA1Re>`1a0yuQAjLH%*+7|m4HS$K^_8O z;)4L3a3L`WX}W+{B$vd4mkuKiuhD>{dmYfCWl&B*G-tq71Uv_3<tOPvOn{#YUjiBi zOv=qHQAh;o1{G+af)UcKL@7mvT?GLNG%TelRDw{M4Bcx63NCOV4lQl7@{>SufW=&} zFtql_%1;87YoPE3O(la?VuSAf0P#TvVhMlD;uw^cKq(;;RM8=KtwAlm%oNywAHqh+ z^jT3Vc(^qgJ_`n(+){u=Hpo;^I}e=pP|A3yT_`Ica2585qz3A=>4F0YbXx>5g+Isz zU<`=}c(RU#w(FsV!bmJ8z5JbYgF~HsJx6jui8T<w$rVymf(kOwA#0E#6EwttG*Dg) zo;?6%MMNp-o?23@kd#=QnT$L)0J&QMY0?-x`VPvq(3~EUkqSC6Cl53*1)k0UF9(L4 z=aZOM0_m3~mZTPemL-B$p2CLOK@%C7i8+~75N-KspuAd8sgPJy1lnT`YG8v#WI??{ z(8(`Q`|!7SK@J0X3$5S*Wh79>0}a1{N*0hZ#NtTsL_BDW9z3w706k6=Gc2Gkz+MJ{ zor-Jn0wY-A>kA-d96V4#r>g0tLwd*{N2~i~f{G5mED#CWEm%^TlIox4mRVF>;$D=Q z5&+uN=b7h{nqHKeT8vb#sORM8rDqaQt)PxD(kGDw6LBe4P|t#NGc)t^JoA!^QbDJ8 zV0B(5UUdrUxtYbFfgbQOCdguYP;m?j5^x_XH5t^HD~27^1m?tpLNPuswLBiA1bpZn zX!tB8wKzT<)PIC1DoV{sO)O4@wC=%?2Hr&h&N<*?trS2h0n$@MEL8xF6e@w{*T9`N z&<%m0<e8pYQUVe{%2}XeCK5phZ$a-u0;M!if`qhf!DD40^AY(ER2?C0y--%j$xlpC zNCQPMe90%sKVTPuT?q;VP+tZ#AO!YYQDzdVw>8qBl>|tsGD>!a?%4vH2nsKl9dMJg zQ!7Dp_0ezvkQpEhPKsDWvyf69NF4|xr7OZo6{G=#iAu7V4j>^3gKPm|WSej$WlW2R zOxhp|Kv*4r62~+jCCOv-^N=nyhPL2i@;nixE_ff4l>$;91C&6)Q=oaEEgWczB$O50 zK^rzQQbFC8(o|Tv2vwg5nS_F_%|et$Aa8-POmuc?C1}D7lA}P&H_|gxbh1+`A*mds z41^)>1RYas3(XB0*{PK}a1)R_7Rm~4MX9OaZbWWsE@=1*<bF_D4RwVAxWxwAnv+-z zc3x%*!eJ1HK(n?6XnY8gzoAtj$VTX-9jGEi9PXz9%DFlUkQ4586jDG(!+{PfO-ZeY zFH6iR22FP)!tMc4fF06;s58OKtPo>31*yrP_4<&R_his5M#&`#2;0DQVTFzY<boOE zmRf)uh;#01v|2&0_3-C8^lAm12O*KK06yv#EC5Qn!R47H$r<1XOG!-ww^Z`;K)D2@ z8YG;WoLF1}T{vC@n(%=(4!}tWt@RNCx-0^;dl)o4pOIf$1RHJyFPZ}<G^7a@(D*&b zCak+gKp6tOW&t`u2;zfFY{>8;XiJ>}XajU+UUCWO&WTj;&46%k<)?wO4y@1z&Fz9l z*Fobdpn43P{lK*XsM>-qBLW2nXcY!%A}J?7Kf72VCo?-0e8dQ35Ei5W;S<og@d_I1 zMh1rFhK2@apmqzCZH~mYP}fwj2Gx~_RToG`7{*#DXs8>2)EgQZKxhjHZDwEq)(Xn0 zaBm@LHA2=3GQb!_fSq9p)(DD+Akf-DNC|;BehNL(GC&tOCKi=|T?vX1P*_8cpGeFB zHLsyj4l5S07?7HmLQp&Q=A=eug^og2rH(>oiKc=TWYrnS5y(AU7uZ?6pmbHC3z^o) z%+J$Ns6=qUO>WSvaAq#j8a;5(WmYKIf*S|Xpt>De!DLk;1hdqkg3t*qP~uNZMv8UN z+B^*ncmU`sAc9j<F9p<!*H$ppRM1i|GSLS$p}@HVQc0jrDkv)`=jDU^2Z|mAEf^0J z%f$#T$V9Nq!ATBeIp`)=l-LJZh9+nji$%}?){ll(5y;^Uttv3jeAP(KO#x37>OjWl z<8zDCZPkNAodSaVK?8V*aXUyDsjI8IR-`7Ef;O9gPH{!LixG6cKv5|;cPf-+CMqN% z@2G$zO~^<mYzhE0LJwZO30f|e2eBWzTNPHE;O`p2+>TV#AQv&v*<9#23HW5cywtps zVo+fRE*D_4Dd7FWkg&<j&x2ea3y&0V;gy<KQd9|YZz61#6m+-(D0V?v2xbms?k%%e z0kl%22yz5^QGPDmD3IEs)Z!9_q)LTEg`}LsyljQyg2ZHKDh4G1SI{v>(dxNn>X7*& zLkMLAO|{r_7I;h(6myXLie)YuG;&msUtFA-1fPh3H9{cMlSpx;09sE8nl%Br2ZWsv zCmCjzK-S%Y=Zi{Gb8-}vFw=?>q!k0|-GIH0GT4MPx&s+w0?ix2Qz0}XRe&#gK~g%1 z#>-Jhc|j8y@Zd*r{a_f|#_Lva+(60-uG*r*;Hw(g85kHq3xP|MOCYyL<TLutWNeQB ziG!L9hDH_;@vV%$ml@k5gcukYAQ=bw%yfv7pG>||%#d3okk*w!<gPLL{)TD?HD5t_ z46#%MqU0~5uQ2oy3Zy+I5V=@J-yFvF2tEb|29S0{dlVvljLG*KQ+os#0|P@*D(qZ& zu$1=&?>Frc91IK$;LW-5r3Db-cfP!g5OL6yH|WH9u(+=%ldmpQdju~70|Uy+Wr*w? zM&C`05Fa9)<Or7Y_V$ixj{sehf$bb`uo7Q=Cf_8c_6Px}FF@_$qFnIEQ87e8Ka=la zruGO<knNxvDK{}Q2O^`-=o`h@9w7#j0go}GPaQy%r7-#SFhTuQ84pgU5D5WBUmY}; zXXZho+&j*@0O2U)gHpj-y^FlhwU^cw9Ra5onA?$+WvF3^80Z}zNHGZ&K}s4KYT)z) zic!=A0hPc^Xc=lKahaip7UvmisDYQE22RP)6b{u5i}4IK%y`aF!x@JeYFJ|q>MdA$ z$jmFrP{R{XFgHMB2kJm*RzowZxTFYvSqUox0|WS$hN7d8Yf6rRuPHeWzNVx!l)ofD zIX<s6Hy%`RWu_Jvod8Rp1VvhgfHz}?nm2!jsW)SWoi|g4yEkJ-fHz}Cq&H(mk~d>U zwl`x&i8o_Ltv6#vn>S-dzc*vX3~$Dah2D%AtGpRAHhVK>?D1yIIO@%qan74D<GMFv z#shE0(og|#8yj>jLs4o{X=YAJ(J8RCr$N?6@GvkifZ7O&IiT^4{Jf$wEDQ`8Jh4S* zL9|_BYf#ZS76yh0NpPYr09^&HpPiRqo)@1~nqC~ASzKJ2T3mD<q?jkR=mLli0BO1i z(j<;%xPE>?Y7uxla&gfmkW!x5qRSw94@k=ukQPw3O35$J1C34<7hMHO^28Qh1JPi| zTn8xvT?$iN3UN$YVqwt@kTg$h(M=Eyw*D4KnJAK*OEQzQQ%mBDD~n4~bBk_+6!OFt z-2u^H4R=8rKzHJRX7}U4_j%}p)?^js=fsz!<`#es6Dlsc2U5=yTXY{puL3#x0Z1RH zM1i>nR2*dHrGuMqMGryhcw&nlfoQNjk3s4MAq9GRQDQFWu8q><lG38oq9-6lJh4Sj zK{VL2&p?V5u_*@M;~kG^Jrz9%Y2t}3dI6$mfL!(xq!|=#$kD40I(;t_GG1C-^a`Yy zC${J{hz7^O8;~Yu1_p-2g3O|~AYq=^qIVz~?4b7`X?ffZ0-e`emYG^!^Z}%WC${J# zhz2|76G$tl@J9r2(Pxk>Pi)Z_5Dm8AD@YZn{(`3g{q)R|_@dN;{Gx9lRXnjp-$8U6 z$csNfszF{vsLsd)Eib8zPtE}Ky^4!|f)w+_7X1RzU`@Y4nm{ptaEN|JetCRJe$gM0 zBA(cyzaSbMz5hUpK{q)eY$!=Aicd<+$tf=S4^qYxTg1T1z>onpn~{})0bH0tQ$rCG zNQx)6h#5qKeaHe*0&+7-w18Il#6v}jSV4+;VvE>7G&ow=L7Jp-hkII1et8iGNI6ez z5hsWShdCE314C&j7kG(id`f<DaS=C2jwiN=hn0ar1DvT59zzd0UXWTy>5otZj}1PM zlRyO?xLZ`j58~p>?*bqNpcV@(Xaqq57y*HjK7~L^h)e&%Af*KJuLwvLuILm6N#ZUu z#6Z%h#gjNl2)!_p011N9S3wc@+#94EE(ww%Ci_T%6ryDoX^<GmT+DPU1Cqih$z?&J zpa6!3IF@o-4x|KU=_L=61sMQMnBZ2BK1xzm04X7qFcn!D7*bn<ij-Ix7(%%~6GkPO zB{`|ZMarz8Tf9_2X)!|}LnuQnLp{SZ!z{xt!#=}3!y_XgBQPT}BPt^)BRL~GBPXLI zqco#7qb{Q@qdlWPV?xG^jF}k=GZtm6%2=JTIb%!4o{YU2M>CFPoXa?$aXsTk#)FK9 zrJ+2K+ZIyul0j9jDk}p+RyH`}wgwfcfvhHw4b(x|fG4&!s7M3EQUg_vnqYle3=9l< zdioGloL^d$oT?AGj6olK_<3rverRUCTV_sbv0g!CkrpVdbP4ML4T3?>D*|cL25HkL ztj#yEs2F<MdtweqqYg+T9{Y0hQ;I>GYZKGci&E3UkqgqM3(}^}z`&rNUr?f-n3o8; z5-(9dCo>7^IU_xDeb@~qAPssT4GOp&2w4OJQmGG8se@Z3EYw_+VRv4EbQyqj5fRqz zMVU#VC7EEq8-nzx;I;|ucW_e;WP=e%H6C|?RfAf<-~((yqx>LU#vomU!WUgva*+v0 z8>mo&q#Hdw(5b{oNe3QW$wj6hrFfzq?5+Z|GZsNkGXrVFV+S-tgOr+sl;ZIP);LKn zvH)pQB{G1Mi!7l<fE7p^j{4mil)b<i%?6|jQMcH_CG0>F_-Yw@xKam@Qsnx^5iaEf zlENt0P--4$xMCNOVo*?G6z3RiFju%HH;^WRwUIkqy$47=u6oH6uFMOh40jFX4Oi#` zQixht`NAdrK$7USmOorN03;2nXD~cm6bM%o1X4syO%@E-5(3hKR;Pu+Wy3(SAX_nO zw{W<k2#_L-dM*+!9|e*JMJ(<bFB+~m2Ba8g-4_d27Y9-YG8CF=zy&30Ef^11oB&cx zs6I@DD^CJ9&^R*ll5<K^Qd5eOQEI0YP<<&-lAl~sl$sh3Ra9J*3a&NNKvhtNU2IW0 zh>->ADP@8BZdssiL>8!Jods&YXMtLvsTq4>i!#9KKu!KEP~R&H)XGfFXp1e%1WSM# zvsvF*7#OlZP3F{$8L>rKU<puDJ`2>n$O1JmQ!`e@7G;AaK&|C0P>(1zBOtaY2P_8a zSY?5FJz1bGVHT)kmRcIh3F<+`gUZdKT(INwKt5wB0kuf;!2$&!-5CPOpc@lQGINUc z^72zsi@B0Yb8?{f5^@z4vNAAeHWn3uH57w2h=ej^h}IUBfH~r^84|G>lCc?5u^G~_ zr5Q4@MWw6^4CrQpM=?P6&T<u%K};+Mn^*xh1ZrX>n1gPjau&#Pkik_TgNq9?GV>}x zmybYP3+j#~CYOLOo=h)FEXd$0s)pE51Gb?SY$()*Ixq**29RSwHq?V`Kno7=)O2cI zaw=C*1H|A)u)$4Wv!DhygE*mFiFwHx`9+{5A)ySRY(=SQrA3(;0vXca5Q11M6&uO{ zKJPIvF{h(6LpclNOpx6zpad!h9{2Hp^rt|B>X180i;G%W85mj{i`u|ew}WiU5Xn%= zP|gB5rZg!rLnV|G?$V+TP!b0V3Sxv$Q72rI6CN!^U2s8er1&rD1`B7XWkJ(H57_=* zi2aas&<Eyd#b#*7X6VFb=*DK~LDE4#C|^NidjeSBM6gn5kWB(}(Df;2fvf<9$7GOv z7BnuWfb~xW31vX_PXlu>^@FSe>7Nd=9vWjaz}jbmbwIVx0&#G}m>S3zI<XlL!}ZW( z4CEM)4YMIJ2C8x#OH1+<+*9*XA#)ur$ajzy&4I+-T(BeNf$Yr?$uQ1P&H_0LBktyd zgB%p0SmJI0SP~W+3&AEXf|v-2jm2ON#Nmk8P|kvd$`X)#7Bp6tg7q&03Bf{jIhcc~ zA7mBC&nrOkuvl3M*1rlQ1k=A7%)!(TvI?Ys4N|PE1#4di)&Y%`^&k#PtZ*t9<QIVk zZHnO;ia_*$Tm`af10;GtL)-ySBZ@XcqGA)+=FK3>GDN@wr*IWpK)RH(KyCv^O%^;p zvQPtmE7*)}5Hlcwza7lM?fD%bd061@1nb`g5`qQZZZHQ^KgcSOkM@8951J$Pg0=4h z>wpH{elQ19JIE%G_5&d8&>V3Pto;yJ2UPoE5C=KzBlsB@7?g9tH&*IGD`H|J0pvW8 zoku{yDF+^&ftpZs6cPu=z%DorvNS^^%Y>1EAwxL}<SgvL4$2Tn<<$vDMt~;dlVGz> zLCk{0#c41HGcaIbc?J|1(6BrU)_xAG0~#3T!5mEOAe%t`x&YD+4a<vQ?U%qhpxQ5k zI4EHWnxTP(C8W1OY*2z+2eR@CBq-Uy1FT88nI%P6At8AUZ2xtTl^G&g0+5gdISOY; zW<i24HA5v7rMSNV4%O5Q6{rGOTD=Lj;TFUONci3cb1(x4R#4ml$-@eYyI}qIKtiyz zejm)i)DN-><l6^G0sIiG{SjCPG=Lw2ILHAU%ApMHH4z)GAV-00dIAYoP`AZ7C$YFV zwYcahBw(L`?R^fiDnkUEhG7a`fb=M5fgFZCkYPpiORy2IAVxq!?lqW$+vjgU^01J9 z3)cS*Bm@h&_h1gDevnll|9k+295iKr1Z)2U)&UK<&tMLwc92aV?O#CJp(*<-So=4y z4yg9;AP#cCM}WFeu#}B7j6!TQfSd@j_Xj9Q<sv|RBqURcenO(+7uY4gL6&ETU?}<n z(yN>WaxV7hNW@6ef58U+gBS>jnEzl7X2`$-mVu3d0hXc}*+8RcOl%Ac8nAd_26HgA zgKPqMkOib28nCQj?QCEj(12wJaZmyl)MbYSEMjzq*l-285M(U}8v{dz9C$hqVMq}t z8@N5m1$GBF$m$FcbTvF6oyu7tw-OtwykPVAAm%|rl^@K(3>H|Z3V?zInp_3J+J(S6 zpur*x=3r_E*#z>Q2uM3LR7Jts#lSkC+QmT}lu!jt)WSj)HhM*Dn1b8~vQz>TGIHRC z1I&mbNl1uFf!!btvKHF3fUA%J=~B)DxsurMlm(k62Qdv2p7LN0W`MxLQvnnp(C}0Q zYgYp6fCh*%n1iVuWE041Dj@C9@KgnBR|D&SYF7twP{I>5Gy)4xl;Kcf0~O>*kj)yP z;E@B*JfoOXqzMUGEwF2}K@P|e!J<qDq+dA;<Y;1pR~Kxg9>hpU@als(nBfBpUIS40 zK!ev1tlbE#0~$WYU=F5skWC;@nt-%JgVz+S-3+V)s@)vKK?z>u<O&<uCN^Y2?gLqB z0SXyNa)lXDWC;mWE3g}^LDoW(D_n&QNSAUJ$d!b`6VzhB)poE2+h7N=0TRacU=C&= z!P*WEAbD6x>j>8G1QLRkw9a4-rhbrBApg1`1+ptxyBk;sG?3jv9OOU_<$xw&qWc&i zM}che0EH2xdFu;qCl?oaLITzcY_B)SDrnmQroacJM>z}RFzn$9YdiRYjqrmQ0SP&O zFbB8K13>bywnHFTe-KCr7IML04yJyPRUrR_fI<$Mx<kR*!@xSAAr}tjU}^{11kxS> z(hg1CkznmnU>#8H(I5_Tz(*h#9w?*s#3pf&BSALDfC3d#c%Yb56bp%tIIwHtK@P|e z$&!b(kwH$x9tD`~g#@qxi4X%Ik&y)EV1@=PFq1){0S(L)u=Z524rpkkfjOAkK{kQB zln&Ak4a^L%_Drx2sP-%n2PH5ikh*K=6BNXTC&-;3%d;Wj2`YWijVj841ZghVO?e<^ zWQb%LK!OzHP-25LA8bGY!~jT;7J@mLVFC-%B2bt>gR~f|y#%ZS8YZP+4yJaHO(0*D zfwV(|v>dFx0;~h7y%NMh2~yB<H)z?Q3!b?mHXK2Y1KC&w2}jVp3Rr(pH6-wAz_!<d zEX)we;(`Po$VtQoULDwgdWZp#z-s_=FntdTyhf1kp@G)~*4_-(0rh<gn1iVuWE03M ztsw2tz-t3*ZwKpuYVQDXPy!FMCJz>PDVfDcQ=Y_zBFL2>t2-f~2<k(l8dTH;3C?b? zdwM`l$Pmf+kfEFfav`Cx#8z!#69bh7km@bN6jnI*f^F=B*a!*#elQ0z%!@K2J^>VR z(4mTnV11LoN}(Y)8O%Y~r<?_{0_6KCAnnk2n+n!G4XgvIeL9$fsU2h!Nc#+sc4)lK z1Z$rK)&bQ%8^l45H>9C!Q~X2MAjg1gn1hHO_skN7pwxo=;!MynM@4fX(K8Qh?R=0; z86p|B8Om88hd`nSK31ItADGU9k49%f2cYd>!M*@&(n5$ykYHZ~=AipuCbnoXNCH+F zE&*#?3KD`<hReVlbdAbcAUi<bS`LzjHA7Z_^{)g8!St^Jb1?OTtODs@jTG=}z}nY> zbwC4t9f*S?;O+1SJjgL18`eVt9yD7Wo|=;kx>Of*jblz~1?=+0M-4NJL7TIS6hPA& zpdGv5sWio+4Um}G2zJ*dkW(^5GTbthvp_Dz9y72w*bLUQ1)>KM2V21$+(EI8je#K< zed-1}$;MT*oeez6v;%DJPOwp+FjCF}*%ZnKS>;i*i;aOHA`P@gq9`#l#mqoIFR@s^ zBsW>#F)uGw-!rcywWt7k>8d{H(nsi4Z!jAc9N_yZ^ihIBKNvit1X~aQURkAAR9upw z63PyBVbN|-IE&U6?E$$hlml|kY-)-(LntqFhA<;DB_%blGn5T<=VV?<hFvHZWW5dO z;Iqz97SQcdo#>IuRg_qsoCrQ=JF5${=nd544*?yf0-pNG&np3K(y%Jp3yG_J;PBbc z#=wvi$_`!58e4P#<R(AxTx46(K{f^kKk$@fThSpf8#FW7R&*H522D`56&(SyLGzSt zMMuGG&~#;6(J?j#hSX3tm`~VYE(2K`$^-Q$cwK93(Q%NaU^~H<VV(aB<;YE}NJ%Xy z$?#?_4P^msEh##|#=zj6mLU@hNnw!O4JvXWIUbf-PlA1V3S<c^vz-QWFjE*Tvz`HE zHfSMv7OedoSO+K}iPjdK2XipBgKPrjqzfSJ&_ePeSo<Zg4yg9aAP!1i6;{s7OUX=5 zE!IuUOVI_N1BvK85XinD_kk?E0!mhpDL+q$Vc-p25W|YDLSp?I*frNd4#*GzPY+_M z%}~w)IT{kExC>NJKtqB&!yT5HZ-9-z2{9g$nQwtP=wT%jTXY)~NYHxh4p`q^uu^Cs z-2-#b^(kk8tN?lUK1e$>iXMQqKLqQ5YJUXgU}^{11k(N(q#YVXPr%xrf^|T(KLc@4 zq6jes>yDoDP^Vx)jse;591<U(X%GJb&{Q61-z4ZFr{ba)kjQumw)Yjtstl0~{|x0U zkV^=KJE;8t4fg<8xW5LQ^af%QB;4PEIp_f(6I=8S<a21azX$9409Fe1`A0AZU7vCm z$O@3RK7r(6_1I^y{x2XQSl0Rq=3wdvSq0Mn4P-qu;J<^l{{ZWNTK^No!4dEQ_yZo~ z7?2IWAOQ~=f)9o)F)#WJ3GhE)`~HHg$Pmeh$WYD#xd3~B!-Do7SkHfm9!StKu!9C_ zaeI-Goq-_>S`9I=gNAmQ!8$-*RL%k!m<6tWGH6}>Ko`+KDxfS_y~6@>3`)HNt7igG z>ls9m%Y>uOK~x;9AVdAKK&waEirCme6$fY$Nm~&+m<?J>(pJO)W`mZLv=wo(BUKO` zp|A?V5502W0vQZ87kyO<dUaWv1+EY{a8?LNIVTbpz1-mV;Q?6!OToNg4tn&;#1`>^ z;uV^6_`&)Fz)C^!Dq3442<D*cQ_cce0ZNxbAnni+OBk$O1grz9T@=j0)DE%<q+JZ8 z9hz~(!P+IjI-uGmK^z<zClY_g0XYU_gA_Y>a38chD=4+F6u!wonjJj6F9Wtz7GzI` zNJe6Yau&!L*mDmks3Em5hy^XKl3;-@2R2C_ViF`zDS$cXzL$wDQUrM$8t6)3eac{^ zP;aY%Iq3S7vp`mW{G<xf4h?iQuy%E@4ybkwFb7jR$R?0>O^|kIplgA(YlC$_wd;U5 zI08Khf1raL1F}IE66m1DS^#9Zxq@?kZb3eHOKp)JB<S_QRvUn9%Mi)P%23V%IfjIw z&xQrPA=o4%h)Iy3HwJUi!$2ms$OPnhXwaL2^_hW{LOpK|=Ai3S&H`Bh@|gulJ2dDm z!P>3BI-uIE!5mEOAe%tiZ9v+gL2nDzZU@!@)ou^s;0XF`{6P<L49ErtNYH~u7NEzc zgHME20IhX{>=tr_1ius5dS{T086p|Q8Om882ayo`C9vRk0h{CsF$og<ZeR|2ILO2n zxq|`#8vGt$eV$;Y&;alPbI|oEXMwB$`OX`p9UA;TVC}wO9Z>ClU=F5skWC=%{vhqp z;12+64+QIgY7YW&a0Gt|{@@2W24q7pB=|uo-vzo~Ora#PNEfm-Cj=7op<t`SK(=Lw zWYlCRXMr3;LeSU3f<7E<5@_NbKFJyhHWob$WMYe=K%R#NeKc5K3|J}D^RZwKx<2JB zkQE@G#euX#gFYUtJprr(syz|R!PE}238Xy<q#YXc$zbg%U>#8HsUQxHps&Rr^dQH8 zY)FFyJ!n8O1iY<IAsDi)E*%o;8DLv8K^A3*WVB`|XMx;7La4XFLOly?QZ~dSNP^D+ zbI`pn6I+xE@;5Zp^T7J@!Ahb2E&y}T^(kk8tN?kc5F`(4nHGWd7lVXg^?C`IgQ*{6 z6-a+6$a-k7mw~mHgLOcyuK;my1bZ9)U<Ww{WJ4t+*g?y>U7#txxTp#e<kessYe1G{ zh-CC-C})A(fIY}zfm;jKQwPxl3EX-x2e&61K%RuQO&h`5o4`6io>a~P83<{cX3@HB z3g3{1);etlIR|U&w2l1MX$#0uzbw!S>9(R)a4QtFP`a(C4a^3umu@R+C$dG_0Wu71 z7Sd{KN*bg6u=wl*M@SdQd|0CG26NEkQzo{k2NaRe%+d?i*9TS#ib&DgqJA(3U7vCm z$O=$WoB+}eEutoZwNC=;fNGx%=3r_E*#y!)1*9FCSEhosPXp_KYM&0`;K(ce`11<L zF(4aeK=KM`SCX4!pn@*w)UU$Q)Vz|MN`=JY?9>#6!cx$o>iK!aMKd8;XcpKZvq5%e zh-6I9P|gB54SN;>HA^uXs54*@F$ZkYT!=}Kj5QC;K@Sm`*rNHMpnyii0<gY?V5QKY zSOn&v>r>7GSpo9rVvszn)LH`8zZ4_{O90Ej98CQnt3djfgRF<f#0s$Xm0%rE>sNs| zIAUT3{+Iwc24ur(NKAmXcEDPw!6l#*X+T?^*Fb`PE!gIDAj>jDG8SYgXMx;;J?LS9 zydJD)14IubkT-%kxIMcG<XLFxwHd5^3s?upv&vZ@10khX5v@zF0!ULGu`?8{6x#}N z7S>X12KlAfHjtryS)lD4ZAII`B^PK{M_bVjFdMYFqpfHsk)_x!kYQl6khX?UQi?5v z#p`Zx#Owi?4@<;*!5s8>m5D9d2Z~T==GhO{cL1yu6rrNEMF+tgbbZQMAS*yg^AJco zv=loG)_w%61FHQfn1iVuWD`jHF_3m>-Z>7|egdoms{JI0gCp-O#GiLSjse+l3X*p~ zGvBbh<6o9q1m0nP8j^L+fGs`?vMWO*V`YYN7RV{svkul$YZWZu&w))k4>1Xnp)P<q z=pi5zTXYfRb!fm}0_(dBRtoj{6)*=~pK=z+3Xs39g5+VP)-|yH>mVUmgx>&jF!h71 z0_ndAvK|`px4_zOgLOcyzXRgn2>Dg`LmuQ9kPUYsArIQF7FwKIq~KnfnUY#`4-)40 z!B##1*^(iWu_;423*-pwVGax3hhROAAbKF7`xwl@?aL=1UqXwkr(o^Rz&b#_RL%k! z2q~_zX<b|)w&bCeQ_n%}!CFqOBEOt^0W#Dt3$(ket>`7VYyxdEYb$z1WZCo@WB^z{ zWOo{lVu_8Ik-p8a_<IA6fVUu{VX5>Tn1ddFGO<PPK@kVd9Us8@K7y5kB2Kin=o6TO zu1`4&WCbYgeFkZV7E52i+P{KzK(&7Zb1=1oYyxTj4$=<I96!L?e}Z*Dwf_QfaAc0n z_%jE{F(4a$Lox?wAFfA!Ip`Gq(&AJF&^#w>ZnNkQB&YlZ+y4(_Wrj$`?hNHDkc+VA z6s)Dw9$5JQ2b;ve0UA4p`h*e8K@SL-*ditl1_s#l9Ww`L1f2z}6snIE%t6<uoCUH1 z<UKZ!JgjtL2kYkm3Blr>6U@QX53&lRp9^F?Gy=H6+Ihe_pw{z(I5;9;5B>-MIR<0{ z9|wG>)ibZS1b%i8KL>cIRRC<MAjqB!k&Gi5%2^<1U=MXz_zHpb2t)Kh$|n&p2e&^( zLH>l6Phw#0;$R&he=28z41|<VxwI~ypu2g%s|nCbC<%~@u$EAJ$S<KJL5BKefwt1N z6-jY`W-CBDYTJsW!EDgR+O{GY4&r7gWI=|3&B_890@;>JNs)CF7Nv6FIFSdL4@<fV zU=Dheg2u@~aS1K5l)(Cw!Ae1KDOy{k0_LFWQ_cce0ZNdnAnnj1OAV}D9jpVYT?5R) z)DE%<q+JuF9hzgbz}mIJI-uHhKpY%7<|zIg19A+=23<&w0j=@$&dV>)Q*bIxhg=!w z2|2+^50Z8C!L}QKEX)weI13so=U`yKo^`MmSm$7&ZwNNY2x1Z>Lm7iP=)nLQDhK%= z8v3SSeP&>#Q2(2QIq3S7vp`mWJZAyY4h?-vuy!l34ybl(Fb7jR$R?0>8<2Kr=-Yy| z+ktgJwcCR@I70s%{?G?G24sT+B=kW8hQ5iJIiRU*(1oPMMUIeAcLLk$46-OgB;y)r zgq*ZczYYs^7qCgL5R)LG?gr+ddml7H4)QlN)IGrZJi$t#{`LZM(Df;2fvf;|${VB| z8tOh^?Y>|gQ0;zT4yJaHO(5<5Annjl4*+Wq1nYom4+3#;g!*;-p$>8k$cA7@sDpam z$hCw5=m4Lh5J<>}f^7~1S(YJ^aUV25PFl!6fQ5WG*d)+C6vO~I*jV%+01c3X{0<HI zXt2H*uu`bsW5FDBeacxND?lEL18Ikbd^}it0$2xBdm@;FsU2h!NP7}UJ2d2z!P-;6 zI-uH9K^z<*{{Vl;gB%00Aq^7pps7$;zs(JFLRUH@&@;f6W`gX=5XpD}8XqSq&`UwH z+$pIQ&~;ZuSzz<B!R86XW~jv$<$%~4p=_Y5Epk$eayb|nz~>@DYf1$T$WB^K@R^Vh zHhfntgI`He9!P%{SeqW`Sk8>p<ZRgSWbvT$fHF%m^Ye-|G!-;5^FXJQm*%7@Kn>T- zTFk`25DGFTA7KpWK%tb>9FXR+)S{C3B+yBOIP|N-^cNuXgPZ|cO%Jss9{Frb9LDT} z8B>TbMiX%&VSHI;VtjgHNosjwB@PqTGeSL5gfKyhfq@}6F*6T`mSZq2#Rx6RAT8P8 z)A}-VQnT`taOf?9=`BI%RfFlxBN%M;F#nb!w1W<=$<2;W%`1y9ODw__VF56U%Mdz2 zXZz%4LryS-o_~nL*^)4O%MrRk1FyN+@g<2xp!ql)8ehY#tw7aSnnysR5zNL)ghtRx zDadAKMCt}rIJw}xFwmRWz^Sqdp$T-X3ua_OjM2=}fmu_H&;bq5to)?n<f6=i5>&6j zbVkB-)*y6(PKANUW7oqA(^HGk13I1tX$LC8XP{|MsLzn(!QQJwXjfujU_g>q&;V~s z2A$%LB&wP98x{}s2(6%XywLM6LF+6PG>~-YA+Z$_OG=6|lS)fcHM2It%xOTF1Io9E z!`g{5<}J*aMuah-!?{3*?WQD_q!MLF4a|@xgdrfefDDLF&M3{xCdwFVSfn%~i~*G) z-~;A~G9eD;kQRgqAm1b<7N>%aohQnWW|%Wt5r$}kN`}M=@Im&(#7-y7j5dTB8lVGf zD+`DV(p4~@w4)gSx^{vX7g)kv(1B_I(Ox(Nb3rG<08lU_CMTB=>x%@K8C{rW5bF_t zm`A!1W`Gh`VsdgW2{Cd6W=s#l7|=;<pi|}`IhB}DT@Ev)7hwu0P(a5m6{nUEmA>L( zX7nM<0G+s3TvC*pm`juq$uJ}OQH_8sP$$ZWSeOwLP>o2fC@4!UBFc#Su-Ki5Fang@ z(i2OIi!&4Rh%zJ{=8j1SLqItty(lw<C<CHku9%E!Kw?p9B2fl#!(1>0)qtGTG~yz( z0_K9L2m?UnR!)97ks;{~bHX%K6G{sTh%_M)X2Nt-6N)m^Gl=uW2beErpqh}AT9%qa zR6yQ^nJ^P!0w_IzO~@=J&KWT<LuMfi0R?7JYH>bs&gg=fFdNkbaIz%IBg(MAoP#g{ z<dMYW<kF(V<VvCpnFDjiT!bMYkL2g3rW2Pi_rXk<hcE$DWPwdc$xKTl${lGiQ|2Q~ z0d){kONevDR9IjvK<Eb*d8s9dM7v=v%nb_>W`K&k)RM%4MB)mY0+=%vp&F4=kV33a zIAKOCMm3^1H$T55gQ&oCh8eL0)d<K%nM4_J9u^i$QH@AUNg*~Ym|?D1hH6AXQEFOd z1yQb;0CUB1gb|=rkzAfkl>Sth6IP(=FE1i4Ri1(AUy0BUPF2Zi#VMJ@C5dk^KdeHS z0m`PJQ{h23xDe%$XqZD*BMbpK1Y}5lK`~Kg@WaelgD}Gobf-m8W|9$Tss?;j4l(VE z889!cMVJK2@~O$7lhzZ{iEBLi!rZeCVG77ksmUcpiFw5NsSW0m^$0USft#6EP+CH4 z47I}?vH@WT$UFI^B_x=#73P$U2vdw07#Khyn_5v)l$cDkgH&M-+JrC)To6^H66>cu zFxPBG7y;_Qfm{QMXJXBn4RgvCggKx923^KMbT4of%#f`JLqLv60j;;n15eTrm4X9d z=4?Zl14=Q_AseF1SOYU-JHiZ5g_oLKN@P>61s1eB&`khcjY>@Z(S*5SC&C0!Qh|+R zLGIlq$~$2&$LvBF1@cZxYEo%BQ6}`l9J3o?0w_>HhaZFPz#_&&4KP>iL6`wbumz<_ zIhn*2)dyhC*o!a%<dM|m#DYwsJaPc$h<ykXAdV<XO(V_`hhUD_k1zt{h@zs*JmMOL zjW81qAWQ(|mz@0c%;dxz;!3qXm`@HO46y{=z)@VBnVuJ)Sd?B2y1WHC7y}wRLK=QS z8H&kGEy>7F(af3&bJiiOCZ^_<k!s>jm>UlxOf-fM45JPR6LMV{%&a2_vp_Ldk`KN! zg%}Ucg?aEO!U)jOZ-_(15F=%v=?~~g8A2L7P<9NV88lppkVP6NLkMbSeStarI6@;R zwsVV83*(dXOF@YSp<WNcL>?oHfEjWEVF<|gh&l|R4~G%1FyEg<7y(MR@D4vg6ZBvv zoI;oYas*;bil7nIFe6SQi~u#(paWwB^#{ZBpF!vcc>+F^L(qgwm<eYwO#lz%5H#T_ zEH2I=OaMhF@-PlTLl(gdIgc;|RH7mc;t(`L5$2T(2s1zf4zS@Df(D4g47iAD0BrDu zpaBzM23$fI0E$j%7nh*^`7r&L5&A(X3ei0!Xv7Yf5myjKfC2&52_a~}I+y`h5e9(# z0PgE6Xb{xD0jB>NLO;j>u;C|y2Gqg~xQ;LY6bN7kfCn208c_gCO*armfKpRB31+av zoN*Ij2FMxU!3OXc7(r)<!i>0uFak6a1sMS&sC^+!`)yS1knt~q+9$)b-$7^xMFiwp zSR!I_2`m)vA`CEKU|@i>@j)$F&}rjD7}NtZ=pMo#P?7?THWw42zX;}&`w0DDpClF~ z<`QE-6U+e*Pz@+fEdmdT5)4aum<t}F8USmo5j3D2X22ta0iYlNO{5UxgDRL09;50{ zE=o--Nd?vR*qs1t%=p3dKSAgR_198T6O)tU({f5HQo+-j_)U2ZGvz756i{~<exO)E zJSbTZVbU&GcsxUx1nS-t6y<}iw~mLTF~a^j1~cb5!W>Wq2)+54h>+O>GvNio1dvP0 zi!w`6<MR@8Q$eYmuuF1aVe=AU4ye@xJ1i8@mIBSOLfcX>NpMT*6+$EE1bUbpQacJJ zq?u&`bM<S4CQu2NoL^8GpHiBeTM4=|7vyS~9z7UC0hT7N!d(0YVFqZv8ni$FbW1sY z-K;PdyhZ2+&6I+V+rh8Z5vKJWLMzDP;?$CO!WNssbiYUF25lckIbswM+Mvl_XlSFT z00;R8gb|>E8ASn7xTA<`W>vym@DZUMG;swhPEeHVq41C!v9d5@KA{=|D^yT4;x;A( z7LA_~#(**<Qqze@lP<zc`hqYClojAjVj|6105j(+!W>YG5LDhPXb@@0W|$%05Qcyp zlapFTk~#BW=6pw(1FFRkO#vbu^a*Cr4}?LWST9N~C`v6R+Fz$&vHlZb3@C6wH389v z)WO{H3t<STIEOYgiS*HBm?^&zrht3|YcLaOj3CTMe-Orid<1Ey5NU`3%#gpRhCn9w zi8SN~%tQZB4S`IJ6KTi_m?8fWhJZo^)_^6_m{~Am7&sXiG!U!6V4Vpfjp>Jl3nRi9 zQ1V4|35YbP1Lhtkgh8NKf;2{nG~_nS5N3oSAlD!o#Y7sk6y_}!gh8M{h7IEpY0Q6^ zdsq?1fbu~BsAWiWZc2ig!iF%#gn@wpRPMziw<Pen3RbKBg&D?<Fbp)vlag6nkds&$ z54s8)R6P=7)=ijM90;>OgIWcku{E$sU?(OQml12?30SyuB1{CeQebC9BkE10RtiiK zTxD`0G=f?wFgc{!5+<aX6$EoXH$oGrjZlyXnw5j8(}OXPE5}JNtvm>=pf*B5Vo6DA zQJ#VZOcPe!;V^IVB6Ne+4}x2#1oXay+02K~3u;oPq~@fSq#_!)m=1s?0b!W!{0I|3 zEfi403REk{gJKO4(nu{76cym$7C;yQYTu>g!xJRv=toerBbJV$=+?~2gE>PGVFt(} zD9Z4funA^@5W)n|ARp#pKNK@Hv+Q9Sg%KJ-_ekbugZvKZYT$HtHcYb!LNh4pbF<?i zEiAll-UibxiqH*e+ZCne=9i_$=jWv0)xHI$T@0Ze6!4JlKv8O8MrvY8Y7t&DPQX%- zIKm9j8cBFJDJQi8G@*n@0-#M`&_*h{B5*2@Ko|r{#+c!cu1hnE5#|v|gkDhl30)<s zPtavGv$9~GkwTcm2U_r!pAQ<Ehqzi3d;>a!4Lw#Fv~pP*p#@Y{B<G|i=Eav5pjrt& zMOib;9p+vcgeFkDrB<XSmzJc)7ndeMJBL`cr@)*ki_i{AaiD~WdzCZP?&~nkatO_! zatfq5B{MfQuNZTkHdN~rm{xg&R+zn@qP{2>JXZ(q5+hPPRP!>JW(9<1ke@;Jf_k0t ziN&DZ?U{M$SpEDMrd<)C9kf0+GcU8m(8vO-o)VZIC4?SO+<+!0<5M!x5;oMGwy?NS zM$=RopITIuk6n{AOp^*i6X>qXy!^b>`23>y%sjMZzfjAj!}O_Q*H>JE-M(&^J~ecG zMY)MN@u?M=*zG$73lVjMK2RtY6y>LsCS%ug1g1v=p$9x7RayeBAV5=1sma(%E2t;) zU<PO+43J}BU?@sWOo>lTPR#??=oks+AxxVVLYpk;`Y6z<UeLk@ta0uM3mI*MF3<|> z;>?`XJkYi9ppp@*&a*K4bPzg0gP@QV*pOxI`SEytS^~3N7hwb_8I<IMZ+Og&&qOPb zp&`@?)2D~f2P!5}j|)c>p`cA^&;kfm3Ag~&M;HRCz&ss|QT>amMKfzV%;N?Kji8b@ zC9xns2W_JRy54Cpy@u#|i!gRPpz95V`Pzt+fgv@+G&aL7Hp4wOBOo>-GBzVAHX}PW zqa-$?Ha4RzHlsf_V@7Po!q|*eu^F3VGxo%09F5I57n^ZCHse8TX(&fxP7dV0dSgz| z_FWT@b20?n9j~)|jBI+#oT29Kc%6+c`iIn#3{!|`;|qZdI|#GYR6oNV!t6M(F(UxN zoZvJoBND>w^!}TX1Y!0}?8?Z7FsByjWt2de%?rviY9Y)io~JX~Aj}3vql|tCbE3FX z#taCvTjpBELI|^O?fZ;X5av{!{EW>|=BMKsdmzkqG2@J*5ay(aM;YfJ%*jVGGp<9J zo!=cY9zdAA>Gh?d9L1?6C7F5Y#YLvzfG`6EL?};DT5>#St}ec`C?`}Vqokyu*h*g? zoc#1MQ%lnH@{7{-GfHxE^oz_n85lxElXLPDv*S}i`7Ay$C8a18bhTJVC{ICZ0m2{! zm_g;`<$92N%)thwq?YLyq!twG7g>M|<H|_PDTxOULU^-=3Kgd&mlT&Kflru@uK+DN z>kQ>7&P^;Ti7zb8FG(%#2;~D$ZpNqPCFiGP=A~yTu`n=%%9a#m=EkSx=a=N=m!!tS zFAR+@E=WvH?F{7uc@i#K>=()haxAg{Z%$%fdTC;MYJ75jN@|uCGXp~?UrK&5ic^?V z^U5-qLWRLDf;cEXCqFqcC$%`X$P(lqF;LSQw7Ds@2(+mwJ~a<?>UBy-s6c9NQff+k zaY<!PYH>ztYDs5lD0fk68fXtw322dz6*x|;L52uII>)Ig@z8U+i;HYH85lCa*IC<w zRIsPygBm}@MRp)vp+aS;MWDJlGcO&yF(|PpwaA{6fuS>0D8DE(Ju@#cCq6S5<hjzK g%pwPno+3w(Ih^t3iA8y7rFqFkPMi!3ex*rz0Q0WC<p2Nx delta 59372 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 diff --git a/documentation/Sphinx/build/doctrees/index.doctree b/documentation/Sphinx/build/doctrees/index.doctree index faccda361bf97b7aea3b5a409fa6963d97d87212..8a1eb251dc241949de28cefbd05b7b76e870b228 100644 GIT binary patch delta 5081 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 delta 3619 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 E0BGF0VE_OC diff --git a/documentation/Sphinx/build/doctrees/installation.doctree b/documentation/Sphinx/build/doctrees/installation.doctree index d9af92cca10d1efd2ddf5237c26877518f9699a4..0d6cb2b9a03ea79485b197d7adecdec77a1bff26 100644 GIT binary patch delta 209 zcmZ1`Ia6|jCL@0?0|SG8QDSC_nSp*@V)15U#<`r1oaw1~sYQt;`9+1B{X+RtN^=Y1 zGxJJPi}Dh4iVL^+h4K{VCKi>%7nbIiq!t%$?Fi*5NG*s@N-R!|FD=R`+%{R2TUmB{ zs6cULUP)p_d`4z^MowmWMoHn0P?nthy!67IlT*3nb$4Y<4dqKLEy<71Oo=ZjN=?hG zDBK;&l$lbvCzLNGKe;5cBque#A}zltw{Y*|jok8L`}{(A<CF9A(lXQI(=u~XiwpP1 L79N=Vg!>QxyF^il delta 252 zcmbO!xlD3{CL>n{0|SG8UShGK*=7sIxtyW=>8T|psTC#h$@#ejiOD5}n>#`|(^K<O zixNxniwd{+h4Q78<`%?f=9Q!t<t6467jE?n<tffhEGmgFEX^-TEiT;F5z14LS`eR< zSezPPT9i|`eX<z0vf_?Vf#S-%lEjMmjLh_moXqr$lER&#EIIjk>4m#OWis<7&*G3y z*qt#olrOQgBtJegCBC32H7&EEa8D>xW=i4SP`;G><dV#ioYeS=wEUvn!hM~g(#0i3 znFaBwIjOm+c_qd1<(VZJ@yR)f#l@+`h5P+NdE=Aw^U^ZY<I^&8Qi}@@#7@4>eFy+l CLu1VV diff --git a/documentation/Sphinx/build/doctrees/installation/oper_modes.doctree b/documentation/Sphinx/build/doctrees/installation/oper_modes.doctree index 1b60bb5105375b4fd4f14858370319dac8b82b8c..4d354fab57efba8cc84570deb7a4ebf05ef7342e 100644 GIT binary patch delta 350 zcmaDVdQEhLJ|lkx0|SG8QDSC_nSp*@V)156#w+ZOoaw1~sYQt;`9+0O{6hIsN^=Y1 zGxJJPi}Dh4iVLUuh4K{VCKi>%7nbIiq!t%W>j>p3NG*s@N-R!|FD=R`oIW{;Q(0w3 zs6cULUP)p_d`4z^MowmWMoHn!P?nthy!66Zp)#3y1*IjE8`&guXJ?d!@+Fp*<i}^G z#1|B$re#(X&Ix78Oevfj%9oO#T#{LmlNw)<mS2=xIB)VhPWj;Zexbba$@zI{nd$Lq znK`M&g$rT}7lw*~*zuWp#i>OlnfZC~sd<S>IjJdyi#kHNixSJ>{Kejkp}b&U6{nVz zWagz87cQBcz$LA})SDqgv9@qohCqf$ai~ynX;N`XW=Sd7u)M_F)Z)VBwS_A(q%zbp hWNHgnPF}^OF0v}NaCImf$ki#ug==aH*On&f0RUT<hrR#+ delta 384 zcmca6`c!m-J|kB#0|SG8UShGK*=9S&E9{~C>8T|psTC#h$@#ejiOD5}Q#wL9(^K<O zixNxniwdXuh4Q78<`%?f=9Q!t<t6467f$mF<tffhEGmgFEX^-TEiRni5z14LS`eR< zSezPPT9i{bV{$O3a^}oXf#S-%lEjMmjLh_moXqr$lEPV`EIIjk>4mdHWis;$N=xEX z^OEyZGV{{oQ;Ul7i{dj9^HOqBiwfstl!fvomX_qlXQsp#6s4wRRus++Wy(w`oEOTM zlAm0XS(1|)Uy+tylv_A|@_kPE;01o6yz$BTd1;yH@oAYksl|m0V+$9Bih<binR&&j zMJ1W}dGV=viAg!BDTRwWLb;0)%i;Vb-i)EVV2>83mXu`Xr56`2ogBy|t-s8hAw#jY zaCwG6hDdR!P;qHeaY<%LDcG>Q#N5>4!WFfJD>I}r)G}mh3s+5^&804~I<|04C>zMt PDaD0rYYW$vCg}kH9+sBe diff --git a/documentation/Sphinx/build/doctrees/installation/requirements.doctree b/documentation/Sphinx/build/doctrees/installation/requirements.doctree index ea7c8222f7136d787cb06d37a52e9072a40cb346..264a3baf9015584eec9ed0bf7b79b99ae493adfc 100644 GIT binary patch delta 390 zcmcaDdP;PICL@0p0|SG8QDSC_nSp*@V)15U#tZC@oaw1~sYQt;`9+0O{6hIsN^=Y1 zGxJJPi}Dh4iVLUuh4K{VCKi>%7nbIiq!t%W>j>p3NG*s@N-R!|FD=R`oIW{%Q(1OK zs6cULUP)p_d`4z^MowmWMoHn!P?nthy!66ZlV@<s*U!!<3*}2JEy<71Oo=ZjN=?hG zD4Y|@l$laEH<T|WKe;5cBque#A}zltw{Tu(sC02jQD#AWYEEiyYF<fke0gR`MtpKk zVsUY5ap8QwP~Q0D{JgZx^!T*QoYdmN1+k%GAXa>4UU6zsNoIatd}>}|Qch}0;lhqk z?xMtua=5@EZ^lqwus@4aOG+~H(u)fh`;{hziWXPqCgtbEr{(9D<mH#7#ut|)7L^n( z@n*<StSwxcA&?<b94b^?np9kpSyBqNBQG&GwYYFuZQ=3^sSLFYncBh?lNWHQi>!<- UTouX&@?=VJ;p*DLHKj><0HU&)2mk;8 delta 385 zcmX>ldRugZCL>oV0|SG8UShGK*=7sI3+$o%>8T|psTC#h$@#ejiOD5}Q#wL9(^K<O zixNxniwdXuh4Q78<`%?f=9Q!t<t6467f$mF<tffhEGmgFEX^-TEiRni5z14LS`eR< zSezPPT9i{bW3nfwvf|88f#S-%lEjMmjLh_moXqr$lEPV`EIIjk>4mdHWis<7pJkKQ zos&@(%9mJLk{_R$5?@f1nwD8nI5(6jGo^4|C|^o`a!F=MPHKEbT7FS(;rz*0IpymY z_=WPuC+Fv-Wv0icW#*(77cPt~Toft>V#jCZ6{i-JWaj6^r{*Ol<)o$*F762BE=nwi z^OtxthVp{FRGeB;l9`uYT)5P)G$~ZHxH2~>KPNsdKffd|za%xjxFoTtq;Q!xLxy5) z;qnZD43Xkcq2f}xq~emyl2Wi8d5O8H#f2+s3s+`HWvFGy)E2Iq+|Q*hvO2bKO(+}4 QGbzP|YikSFl_u!{0MP4}$^ZZW diff --git a/documentation/Sphinx/build/doctrees/installation/test_install.doctree b/documentation/Sphinx/build/doctrees/installation/test_install.doctree index 658f4ccf63cdb189e6f48494f7770880b70451ac..a98264b3288b3a734d25af61be42006e1f051d4d 100644 GIT binary patch delta 302 zcmaDa`apDpF(ZE!0|SG8QDSC_nSp*@V)15M##`);oaw1~sYQt;`9+0O{6hIsN^=Y1 zGxJJPi}Dh4iVLUuh4K{VCKi>%7nbIiq!t%W>j>p3NG*s@N-R!|FD=R`oIW{+Q(1OK zs6cULUP)p_d`4z^MowmWMoHn!P?nthy!66Zlh<&{>(0(73*}2JEy<71Oo=ZjN=?hG zD4Y|@l$laEH<T|WKe;5cBque#A}zltw{YI%ADr@H^Zi13<CF9A(lXQI(=u~XiwhUT z7A~Bu%O$C@s3VlSD6u>~H7_wKCpD#Tu{UEVFWBkDsU;<udFjQ4OD1P=NpmdqX2?*i xEnGIamrIIwd2Qi}45<vY44K-(m6Nw{sf(<NEnFSS269YFap9WU!nLJIdH|XsbG!fm delta 307 zcmaDL`d)N{F(X$g0|SG8UShGK*=8rkTkN6y>8T|psTC#h$@#ejiOD5}Q#wL9(^K<O zixNxniwdXuh4Q78<`%?f=9Q!t<t6467f$mF<tffhEGmgFEX^-TEiRni5z14LS`eR< zSezPPT9i{bV{$B~GULq2jhw=~vqD*N^7GOQXNSsU=1qRcCapUsqb!s!v9u&VJ~Ji0 zpeQvhv!ZZrC{t!i;k;13l>Fq9%#xhc_=>drqTIsylV5Vmi!JaA<&96y&r8cpk59|Y zNi8m17+bh#vK*JB%Hobt?xMu<_|&|_q@2{0!X@5}p}b%R7pIn#Wagz87cQL~%_YsT z%$p%Yv9@se<T@@X-W9clD>I}r)G}mh3s+5E%B3!{I<|04C>zKzDaD0rYYW$vCg}kH Ds&I7t diff --git a/documentation/Sphinx/build/doctrees/program_structure.doctree b/documentation/Sphinx/build/doctrees/program_structure.doctree index 9206c2d1b97a05cb7d134f5f2c1242cbe8867eee..6407be0a23fbea2286c33c899a9185f3ec765b23 100644 GIT binary patch delta 195 zcmeB^Zj|0&%*bEFz`&qil$e=fW}u&!SiISmv6{<~Gd(pgwJ5P9zo>AxUnpNnX>LJ$ zW?o5ZQC?zBap4}nP@dx4#G;b;!qWVb)Z)Uu9ico0sRi*#iN&e$rA0Y~`zG`9C^PP# zY{(<bc_5S}CqFN}@Ze-$9(mnE8FNGV5=%?+<1<s@3yM<HGAjxXhcacR6dnoXOUX|z x$t=l9jju?{FUl=EI(a6Kyx1|nP~Q0D{JgZx^!T*QoYdmN<FSP&CZFLs1OWZgN~{0? delta 222 zcmZpa?vvhN%*d6?z`&rNmso6Qw%LiXnk$q)J+-7HwW1_GIX|}`F}b90cSk5^dTL&3 zQDRAcQQ;oHP`;GX+=BSbypq(Syu_U1!o7Z>JjJ<*MJ4ftrTHbP#fAGiLU{^O3*wU! zi&NuEi*gG0PyWZPEPEhSptv%xB(WksBQrfCCo?^xr0`%UOHO`Xdf}nTc0BUBhco7e z@+Fp*<i}^G#1|B$re#(X9tma2Oes7X%9oO#T#{LmlNw)<mS2=xcx-YPkG#lnzfj)z Y<ovv}%=GxQ%$(HX!V|HR_wyVA0Io$>s{jB1 diff --git a/documentation/Sphinx/build/doctrees/program_structure/prog_components.doctree b/documentation/Sphinx/build/doctrees/program_structure/prog_components.doctree index d28766d2a5877e43018c0a079526bf81ea2ccc8d..a02d96d19f3fe813ac06d412c53a8ccc463ead17 100644 GIT binary patch delta 390 zcmew<`bu<zDI<Rq0|SG8QDSC_nSp*@V)15s#wYBKoaw1~sYQt;`9+0O{6hIsN^=Y1 zGxJJPi}Dh4iVLUuh4K{VCKi>%7nbIiq!t%W>j>p3NG*s@N-R!|FD=R`oIbgNQ(1OK zs6cULUP)p_d`4z^MowmWMoHn!P?nthy!66ZlXq~+*U!!<3*}2JEy<71Oo=ZjN=?hG zD4Y|@l$laEH<T|WKe;5cBque#A}zltw{Tu(sC02jQD#AWYEEiyYF<fke0gR`MtpKk zVsUY5ap8QwP~Q0D{JgZx^!T*QoYdmN1+k%GAXa>4UU6zsNoIatd}>}|Qch}0;lhqk z?xMtua=5@EZ^lqwus@4aOG+~H(u)fh`;{hziWXPqCgtbEr{(9D<mH#7#ut|)7L^n( z@n*<StSwxcA&?<b94b^?np9kpSyBqNBQG&GwYYFuZQ=3^sSLFYncBh?llO6{i>!<- UTouX&@?=VJ;p*DLHKj><0F>F8*Z=?k delta 383 zcmaDQ`crg+DI-@c0|SG8UShGK*=85UC+wm8>8T|psTC#h$@#ejiOD5}Q#wL9(^K<O zixNxniwdXuh4Q78<`%?f=9Q!t<t6467f$mF<tffhEGmgFEX^-TEiRni5z14LS`eR< zSezPPT9i{bV{#^^vf|88f#S-%lEjMmjLh_moXqr$lEPV`EIIjk>4mdHWis<7zh#rw zos&@(%9mJLk{_R$5?@f1nwD8nI5(6jGo^4|C|^o`a!F=MPHKEbT7FS(;rz*8IpymY z_=WPuC+Fv-Wv0icW#*(77cPtq6$7#2GxLg5i%K%{^WszU5|eULQwkS#gmM=pmc#jr zy%|G!!5%73Eh)*&OD`^5;#Zm!Dq38bo0OjupO&9rl9ykS8ed$JSX5HD)SDqgv9@qo zhCqf$ai~ynX;QIFNoGkY*p9r!+|=U2<+X(?GNdxpGGuBCS598fr7p56ws3VQ8^|ju O#f58X3)hw==>Y(BPL`Vh diff --git a/documentation/Sphinx/build/doctrees/program_structure/prog_flow.doctree b/documentation/Sphinx/build/doctrees/program_structure/prog_flow.doctree index 3b2f49c3efa2ccb34e50fcc51d5a41b250e1ea02..6740c4288bbcc6bb1c586dca39063def100f063b 100644 GIT binary patch delta 322 zcmcaBdPa1ECL@0h0|SG8QDSC_nSp*@V)15U#!Kvuoaw1~sYQt;`9+0O{6hIsN^=Y1 zGxJJPi}Dh4iVLUuh4K{VCKi>%7nbIiq!t%W>j>p3NG*s@N-R!|FD=R`oIW{<Q(1OK zs6cULUP)p_d`4z^MowmWMoHn!P?nthy!66ZlV@?t>(0(73*}2JEy<71Oo=ZjN=?hG zD4Y|@l$laEH<T|WKe;5cBque#A}zltw{YI%XPojP^Zi13<CF9A(lXQI(=u~XiwhUT zPL}49bYIvJ%3YLL9-o?*n3R*6Qn<*QF_ahV@Z!{xlFYpH;=;v#rAeWp#g(~9`8n}v z`S~Sz`6a3G#U+VFC521888Q@W3ztr==91!FR$I6{Ln=cpL#DQH#pFd?>LM#+3s;4* RfgG4pT)4Wna7}5F9ssAOd)WX0 delta 372 zcmX>jdRKIVCL>ol0|SG8UShGK*=7sIOYEWi>8T|psTC#h$@#ejiOD5}Q#wL9(^K<O zixNxniwdXuh4Q78<`%?f=9Q!t<t6467f$mF<tffhEGmgFEX^-TEiRni5z14LS`eR< zSezPPT9i{bW3o4=vf|88f#S-%lEjMmjLh_moXqr$lEPV`EIIjk>4mdHWis<7pJ$WS zos&@(%9mJLk{_R$5?@f1nwD8nI5(6jGo^4|C|^o`a!F=MPHKEbT7FS(;rz+hIpymY z_=WPuC+Fv-Wv0icW#*(77cPt~Toft>V#jCZ6{i-JWaj6^r{*Ol<)o$*F762BE=nwi z^OtxthVp{FRGeB;l9`uYT)5P)G$~ZHxH2~>KPNsdKffd|za%xjxFoTtq;Q!xLxy5) z;qnZD43Xkcq2kiX#ax2CD{2c@W=LhIWysVPu9`fNOI>7jY~h+vHjw*MiVN4)7OpEz G(gOfG43Mz^ diff --git a/documentation/Sphinx/build/doctrees/program_structure/prog_overview.doctree b/documentation/Sphinx/build/doctrees/program_structure/prog_overview.doctree index dd8eba5101bd28bac02e23431d101ba955f890ac..9530fba73664ad181fac6682132c082fcc0114a5 100644 GIT binary patch delta 209 zcmaDa`bczxAtQeS0|SG8QDSC_nSp*@V)15c#(V6Joaw1~sYQt;`9+0O{6hIsN^=Y1 zGxJJPi}Dh4iVLUuh4K{VCKi>%7nbIiq!t%W>j>p3NG*s@N-R!|FD=R`oIW{^Q(1OK zs6cULUP)p_d`4z^MowmWMoHn!P?nthy!66Zlh<*|>(0(73*}2JEy<71Oo=ZjN=?hG zD4Y|@l$laEH<T|WKe;5cBque#A}zltw{YI%U!3w{^Zi13<CF9A(lXQI(=u~XiwhUT L7A~Bu%XJ6<ArVl( delta 222 zcmaDP`d)N{AtP5c0|SG8UShGK*=7gEd+ee7>8T|psTC#h$@#ejiOD5}Q#wL9(^K<O zixNxniwdXuh4Q78<`%?f=9Q!t<t6467f$mF<tffhEGmgFEX^-TEiRni5z14LS`eR< zSezPPT9i{bV{$yFvh2)If#S-%lEjMmjLh_moXqr$lEPV`EIIjk>4mc=&*zlaos&@( z%9mJLk{_R$5?@f1nwD8nI5(6jGo^4|C|^o`a!F=MPHKEbT7FS(;rz+3Ipswb_=WPu YC+Fv-Wv0icW#*(77cPvQtiW{$0JH{G`~Uy| diff --git a/documentation/Sphinx/build/doctrees/support.doctree b/documentation/Sphinx/build/doctrees/support.doctree index ac592db9a73ffca813ae6fb12a9c8b28e493111a..30cc5457faf4301655d0e1c17ffc417e00d50253 100644 GIT binary patch delta 235 zcmbO!*(13@o{>L;fq_B4C^0j|%s@Xcv3Rp4<19``&h*s0)S|?a{G!6GexZCRrMU(1 znRz9tMR|!i#f97aLV1dF6N^gX3rq7$Qi}_>cZBj3q!z>{B^IZ~mlov|?wBmWtt`7U zRG_#ruOzV|J|i<dBPTOGqoi<GC`(R$UV7o~$r0T0NqaJ;hw>$smgL80ro<N%rKV+8 z6z&aW%1kNT7s{8CpInkzl9L)=k(OVSTe!b7RJypND6=3wH77MUHLs*NzC5!eBR)AN lvA8(3xbT2qC~tgneqLH;dVE@DPHJ)C!Pvq>ldp3h0swZfT)F@N delta 226 zcmeB?oGH0Mo{=k=fq_9kFR|FrY_lHYEY48=^wg4))QXb$<ow)%#N?8~tsSA9>8W|C zMTsT(MTOh^Litika|_}#^GZ^S@)C233%C1)@)YML7L~*omgbkF78ma52<0hAEr?G_ zEKZFtEy^j}Ihm7NS#ejWKyhVWNn%BOMrL|OPG)*WN#X8LmYn>&^uj%%GMRakdpV?a z_hw8F<x4Cr$&b%Wi7zNhP0Oq(+!xA}nNqkvlrJSexg@hBCpEqzEx#zY@WAA$-0~s^ c{X%);lk@Y^GSlPJGILUk3lGIkKE-_q0DRe40RR91 diff --git a/documentation/Sphinx/build/doctrees/support/faq.doctree b/documentation/Sphinx/build/doctrees/support/faq.doctree index 20aab8e428ec2eba9759338d7fbfeaee359ca462..86ae5f2a75dca675096d8d9abcb124eac5c7d658 100644 GIT binary patch delta 390 zcmbO!)+M&VpOHU@fq_B4C^0j|%s@Xcv3PSN<12PY&h*s0)S|?a{G!4sexZCRrMU(1 znRz9tMR|!i#f4M-LV1dF6N^gX3rq7$Qi}_xb%gR1q!z>{B^IZ~mlov|PM<u3Q(1OK zs6cULUP)p_d`4z^MowmWMoHn!P?nthy!66ZlW%a!*U!!<3*}2JEy<71Oo=ZjN=?hG zD4Y|@l$laEH<T|WKe;5cBque#A}zltw{Tu(sC02jQD#AWYEEiyYF<fke0gR`MtpKk zVsUY5ap8QwP~Q0D{JgZx^!T*QoYdmN1+k%GAXa>4UU6zsNoIatd}>}|Qch}0;lhqk z?xMtua=5@EZ^lqwus@4aOG+~H(u)fh`;{hziWXPqCgtbEr{(9D<mH#7#ut|)7L^n( z@n*<StSwxcA&?<b94b^?np9kpSyBqNBQG&GwYYFuZQ=3^sSLFYncBh?lkah<i>!<- UTouX&@?=VJ;p*DLHKj><0Pu{No&W#< delta 383 zcmeAYn<=)zpOGt_fq_9kFR|FrY;zprEA~+S^wg4))QXb$<ow)%#N?8~DIKAl>8W|C zMTsT(MTJxSLitika|_}#^GZ^S@)C233#a*o@)YML7L~*omgbkF78g$M2<0hAEr?G_ zEKZFtEy^jJF}agdS#f5lKyhVWNn%BOMrL|OPG)*WN#U$emYn>&^upPpGMRakdD*3P z=VX+H@+Fp*<i}^G#1|B$re#(X&JAVCOevff%9oO#T#{LmlNw)<mS2=xIDfJzmwf#K zzfj)z<ovv}%=GxQ%$(HX!iBM+Vjxz0W?pe>QAuWgUVLg^Vp2|OO5vi8Q0}6{ayWmn zH)AL-*h9ssB_)}8>BWUh{7RETMT;wQlk#)o)AI96^72bk<BLlYi%JTYdNX7w))p?y z5XcZI4izdcO)8ct$t)=a+mV-;n_67BytZ&fhE#@HhD>eY%E{-s)J0as7OoCu19>H- NxNuEv;o8z9Jpe?Cl!E{O diff --git a/documentation/Sphinx/build/doctrees/support/known_bugs_issues.doctree b/documentation/Sphinx/build/doctrees/support/known_bugs_issues.doctree index aa1c40730eb0ec829ebe48c7aedd0c866f18bde4..be6c5e3cf333959c9d4b54939255e60f1616f346 100644 GIT binary patch delta 209 zcmew>`ayJqH6wo&0|SG8QDSC_nSp*@V)15I#z*Xqoaw1~sYQt;`9+0O{6hIsN^=Y1 zGxJJPi}Dh4iVLUuh4K{VCKi>%7nbIiq!t%W>j>p3NG*s@N-R!|FD=R`oIbgRQ(1OK zs6cULUP)p_d`4z^MowmWMoHn!P?nthy!66ZllO4S>(0(73*}2JEy<71Oo=ZjN=?hG zD4Y|@l$laEH<T|WKe;5cBque#A}zltw{YHM4la4I`F^3i@yYplX_@KqX_+~x#f1xE L3l~nd<~jrbGq6x6 delta 212 zcmew$`d4&=H6vFk0|SG8UShGK*=8@sN9>{e>8T|psTC#h$@#ejiOD5}Q#wL9(^K<O zixNxniwdXuh4Q78<`%?f=9Q!t<t6467f$mF<tffhEGmgFEX^-TEiRni5z14LS`eR< zSezPPT9i{bV{$I1GULq26FG%>XN9ul<maUq&JLBy%$xj?O<H$OMp-CdVrfZ!d}c~~ zK~ZX2W<}xLP^Qe3!g-;5Df!7InI$=?@fB(LMY)CZC;#M>7g^vJ${U}YpO==I9-o$( OlUiK3Fm|#Y*C7B$&QXK_ diff --git a/documentation/Sphinx/build/doctrees/support/mailing_list.doctree b/documentation/Sphinx/build/doctrees/support/mailing_list.doctree index 8ebbb3dc87f42a0131c0fc401a07ca2f5f2a1501..fad8e9af58a446e31e26d332d11300204cdad0dd 100644 GIT binary patch delta 235 zcmca1dRlaYHY0y20|SG8QDSC_nSp*@V)15E#<T2>oaw1~sYQt;`9+0O{6hIsN^=Y1 zGxJJPi}Dh4iVLUuh4K{VCKi>%7nbIiq!t%W>j>p3NG*s@N-R!|FD=R`oIW|6Q(1OK zs6cULUP)p_d`4z^MowmWMoHn!P?nthy!66Zlc#gaC(X_%3*}2JEy<71Oo=ZjN=?hG zD4Y|@l$laEH<T|WKe;5cBque#A}zltw{Tu(sC02jQD#AWYEEiyYF<fke0gR`MtpKk lVsUY5ap8QwP~Q0D{JgZx^!T*QoYdmN1+j$-CyQ|%0sx~nTTcK0 delta 252 zcmX>tdP8)BHX~O70|SG8UShGK*=8%ov+SY#>8T|psTC#h$@#ejiOD5}Q#wL9(^K<O zixNxniwdXuh4Q78<`%?f=9Q!t<t6467f$mF<tffhEGmgFEX^-TEiRni5z14LS`eR< zSezPPT9i{bW3mUQvf|88f#S-%lEjMmjLh_moXqr$lEPV`EIIjk>4mdHWis<7pJ9_u zn3GW!%9mJLk{_R$5?@f1nwD8nI5(6jGo^4|C|^o`a!F=MPHKEbT7FS(;rz}}>Ee>2 z%!2sToYdUZyprPh^30Nq_~e|#;^Nfe!UcYzyz$BTd1;yH@oAYksl|m0V<&TR9RdJB C+F~OB diff --git a/documentation/Sphinx/build/doctrees/support/ticket_system.doctree b/documentation/Sphinx/build/doctrees/support/ticket_system.doctree index 01cb562d058181904b0511115955ce85481d89e3..d6b0c6e5969fd9ac71d307faffb1de5ca0075732 100644 GIT binary patch delta 235 zcmca9dPa1EHY0x-0|SG8QDSC_nSp*@V)15E#&hhBoaw1~sYQt;`9+0O{6hIsN^=Y1 zGxJJPi}Dh4iVLUuh4K{VCKi>%7nbIiq!t%W>j>p3NG*s@N-R!|FD=R`oIW{%Q(1OK zs6cULUP)p_d`4z^MowmWMoHn!P?nthy!66ZlV@<sC(X_%3*}2JEy<71Oo=ZjN=?hG zD4Y|@l$laEH<T|WKe;5cBque#A}zltw{Tu(sC02jQD#AWYEEiyYF<fke0gR`MtpKk lVsUY5ap8QwP~Q0D{JgZx^!T*QoYdmN1+j$-CyR3(0syDCTUG!7 delta 226 zcmX>jdQ)_RHX~Od0|SG8UShGK*=8%obL^q~>8T|psTC#h$@#ejiOD5}Q#wL9(^K<O zixNxniwdXuh4Q78<`%?f=9Q!t<t6467f$mF<tffhEGmgFEX^-TEiRni5z14LS`eR< zSezPPT9i{bW3nfwvf|88f#S-%lEjMmjLh_moXqr$lEPV`EIIjk>4mdHWis<7pJkKQ zos&@(%9mJLk{_R$5?@f1nwD8nI5(6jGo^4|C|^o`a!F=MPHKEbT7FS(;rz*0Ipswb c_=WPuC+Fv-Wv0icW#*(77cPvQ%*AyG0J8j6+W-In diff --git a/documentation/Sphinx/build/doctrees/user_guide.doctree b/documentation/Sphinx/build/doctrees/user_guide.doctree index a065e8ff0ef271aece7527c3edb6aed35e745547..0766fd303dd49d534aededf68d5a0c165fbc293b 100644 GIT binary patch delta 209 zcmew;@kC;SDkFb30|SG8QDSC_nSp*@V)15u#vD#Z&h*s0)S|?a{G!5*exZCRrMU(1 znRz9tMR|!i#f6*vLV1dF6N^gX3rq7$Qi}^WcZBj3q!z>{B^IZ~mlov|ZkhanOIdbn zs6cULUP)p_d`4z^MowmWMoHneP?nthy!68DlMT4#b$4V;4&_TMEy<71Oo=ZjN=?hG zDBKy!l$lbvE0ixKKe;5cBque#A}zltw{Z958g6;9J$|9Q@yYplX_@KqX_+~x#f5ug L3-?W4&wU60LPk;U delta 208 zcmaDN@lj%fDkE1K0|SG8UShGK*=7^Q9L`Yw^wg4))QXb$<ow)%#N?8~jUAz!>8W|C zMTsT(MTMLELitika|_}#^GZ^S@)C233pe|P@)YML7L~*omgbkF78h>m2<0hAEr?G_ zEKZFtEy^j}I{6`&vh21{f#S-%lEjMmjLh_moXqr$lEUqwEIIjk>4iHcD{{*-?wst% zEiAb!lqoZ%aCazQN`7)lW=T$Jd_`J*QEuU$$+_I}B76NpdE=Aw^U^ZY<I^&8Qi}`s K#ZF$teFy*o@la?0 diff --git a/documentation/Sphinx/build/doctrees/user_guide/control_templates.doctree b/documentation/Sphinx/build/doctrees/user_guide/control_templates.doctree index 6ea301c6c9ce484f5f85f2d08f5ec83e2b0fcf6c..0f92b2adc6adcd41149dcfe3df23118394f75d14 100644 GIT binary patch delta 369 zcmZn@`!2e{mXW`ffq_B4C^0j|%s@Xcv3RpP<8yXL&h*s0)S|?a{G!4sexZCRrMU(1 znRz9tMR|!i#f4M-LV1dF6N^gX3rq7$Qi}_xb%gR1q!z>{B^IZ~mlov|PM_S&shl|@ zRG_#ruOzV|J|i<dBPTOGqoi<VC`(R$UV7oIP?^lUg3^-s)V$>Ul+3*J_|&4J{G#}b z#JrT8)S|-K8D*h-iKQj^@tG;{1x2Z8nH7a|LYXpC3g?FMrQ|1<WR~Ql##f}}7v&bt zo6OH8A3WbLls7&(KQApaJw7cnC$+e6L2Ti|P%#iYJ~OX4wWuUBKQBHtFEJ@6HKlM- zM<{nuVmX|@*qbqw7wpmE)RL0Sy!7J2C6gPur1h72Gh`^%7B0&W$Pg(G6)G-GDlW+^ zDFqvrmzbMcT)4cpa7BhxhFXS9ZQ;tvr@7QcR>c;s4rK$mI;FU9O>N=Y(j+|qY6*}1 delta 406 zcmew^+9tNamXWK1fq_9kFR|FrY_kvJbM{dF^wg4))QXb$<ow)%#N?8~DIKAl>8W|C zMTsT(MTJxSLitika|_}#^GZ^S@)C233#a*o@)YML7L~*omgbkF78g$M2<0hAEr?G_ zEKZFtEy^jJF}Z|OIdf*HKyhVWNn%BOMrL|OPG)*WN#U$emYn>&^upPpGMRY=r6uvH zdCB=HnR)5)sYONkMe!Mlc_}%mMTK)R%0l@POH1<OGgIOVic-@uD+=d^GG(R|&I{#B z$xklHEXhfYuSm-;$}OBfiA%nIfnO+Zd~$wXT4s8DT4qjaapA()!bPECAa;CaUU6zs zNoIatd}>}|Qch}0;o^=^?xMtUIDd&ZV<<1!pT(&qC7F5Y#f3}#N|QoGiz{=J@^j+T z^7Bjb@=H?Vi%SxVN(z^GGh`^%7B0^a$Pg(G6)G;3ODZnOEGY%sk(Zd8T3ooIws2*J kREAoHOl{$+$$PleMOMcat_fuW`6Z>eaBXejy3!;)0H6|}H~;_u diff --git a/documentation/Sphinx/build/doctrees/user_guide/how_to.doctree b/documentation/Sphinx/build/doctrees/user_guide/how_to.doctree index 259f520d0734b31e191834616b02e461e0c044d1..bdbef2730358b7a2ba8c2ecd9125dd40affa7a95 100644 GIT binary patch delta 300 zcmew_`c8C%JtKb+0|SG8QDSC_nSp*@V)15A#(V6Joaw1~sYQt;`9+0O{6hIsN^=Y1 zGxJJPi}Dh4iVLUuh4K{VCKi>%7nbIiq!t%W>j>p3NG*s@N-R!|FD=R`oIbgRQ(1OK zs6cULUP)p_d`4z^MowmWMoHn!P?nthy!66ZllO4S>(0(73*}2JEy<71Oo=ZjN=?hG zD4Y|@l$laEH<T|WKe;5cBque#A}zltw{YHM4la3-`F^3i@yYplX_@KqX_+~x#f1xE zC);vKsx0gX<t|Drk5A1@Ov*`3DO}{u7|IKFcyVe;NoHPpapB_0Rb0{>OS~B}6l)8Y vPM*sp#k;JwaCwGQhFXS9ZQ+W^N4V5QR>l^t3S|R1C8fA<b#39A(j+|qe&%vN delta 307 zcmaDS`d@T|JtJ2x0|SG8UShGK*=9e+d+ee7>8T|psTC#h$@#ejiOD5}Q#wL9(^K<O zixNxniwdXuh4Q78<`%?f=9Q!t<t6467f$mF<tffhEGmgFEX^-TEiRni5z14LS`eR< zSezPPT9i{bV{$I1GULq26FG%>XN9ul<maUq&JLBy%$xj?O<H$OMp-CdVrfZ!d}c~~ zK~ZX2W<}xLP^Qe3!g-;5Df!7InI$=?@fB(LMY)CZC;#M>7hB*L${U}YpO==I9-o$( zlUiK3Ft%{fWF0O^mBk&Q+(n7y@u_)<Nja%0g-g5{LwUgtE>0~e$;?YHE?hb}lS`Uo znKwg*Vr}8_$vs?Byen!8S7u0MsAb617OtASnM++{b!_39P&SZbQi==L))uZSP0|AZ D8^3j? diff --git a/documentation/Sphinx/build/html/.buildinfo b/documentation/Sphinx/build/html/.buildinfo index 71c4dc1..8528278 100644 --- a/documentation/Sphinx/build/html/.buildinfo +++ b/documentation/Sphinx/build/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 02e87e48403e699e19326e64e41ebe7d +config: 329a9aafadcc8557df76a3756510535e tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/documentation/Sphinx/build/html/_modules/ControlFile.html b/documentation/Sphinx/build/html/_modules/ControlFile.html index e5d5029..e31a7b1 100644 --- a/documentation/Sphinx/build/html/_modules/ControlFile.html +++ b/documentation/Sphinx/build/html/_modules/ControlFile.html @@ -173,32 +173,23 @@ <span class="c1"># - outsourced the commandline argument assignments to control attributes</span> <span class="c1">#</span> <span class="c1"># @License:</span> -<span class="c1"># (C) Copyright 2015-2018.</span> -<span class="c1">#</span> -<span class="c1"># This software is licensed under the terms of the Apache Licence Version 2.0</span> -<span class="c1"># which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.</span> -<span class="c1">#</span> -<span class="c1"># @Class Description:</span> -<span class="c1"># The CONTROL file is the steering part of the FLEXPART extraction</span> -<span class="c1"># software. All necessary parameters needed to retrieve the data fields</span> -<span class="c1"># from the MARS archive for driving FLEXPART are set in a CONTROL file.</span> -<span class="c1"># Some specific parameters like the start and end dates can be overwritten</span> -<span class="c1"># by the command line parameters, but in generel all parameters needed</span> -<span class="c1"># for a complete set of fields for FLEXPART can be set in the CONTROL file.</span> -<span class="c1">#</span> -<span class="c1"># @Class Content:</span> -<span class="c1"># - __init__</span> -<span class="c1"># - __read_controlfile__</span> -<span class="c1"># - __str__</span> -<span class="c1"># - assign_args_to_control</span> -<span class="c1"># - assign_envs_to_control</span> -<span class="c1"># - check_conditions</span> -<span class="c1"># - check_install_conditions</span> -<span class="c1"># - to_list</span> -<span class="c1">#</span> -<span class="c1"># @Class Attributes:</span> +<span class="c1"># (C) Copyright 2014-2019.</span> +<span class="c1"># Anne Philipp, Leopold Haimberger</span> <span class="c1">#</span> +<span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> +<span class="c1"># International License. To view a copy of this license, visit</span> +<span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> +<span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> <span class="c1">#</span> +<span class="c1"># @Class Methods:</span> +<span class="c1"># __init__</span> +<span class="c1"># _read_controlfile</span> +<span class="c1"># __str__</span> +<span class="c1"># assign_args_to_control</span> +<span class="c1"># assign_envs_to_control</span> +<span class="c1"># check_conditions</span> +<span class="c1"># check_install_conditions</span> +<span class="c1"># to_list</span> <span class="c1">#*******************************************************************************</span> <span class="c1"># ------------------------------------------------------------------------------</span> @@ -208,11 +199,19 @@ <span class="kn">import</span> <span class="nn">re</span> <span class="kn">import</span> <span class="nn">sys</span> <span class="kn">import</span> <span class="nn">inspect</span> +<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> <span class="c1"># software specific classes and modules from flex_extract</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'../'</span><span class="p">)</span> <span class="kn">import</span> <span class="nn">_config</span> <span class="kn">from</span> <span class="nn">mods.tools</span> <span class="k">import</span> <span class="n">my_error</span><span class="p">,</span> <span class="n">silent_remove</span> +<span class="kn">from</span> <span class="nn">mods.checks</span> <span class="k">import</span> <span class="p">(</span><span class="n">check_grid</span><span class="p">,</span> <span class="n">check_area</span><span class="p">,</span> <span class="n">check_levels</span><span class="p">,</span> <span class="n">check_purefc</span><span class="p">,</span> + <span class="n">check_step</span><span class="p">,</span> <span class="n">check_mail</span><span class="p">,</span> <span class="n">check_queue</span><span class="p">,</span> <span class="n">check_pathes</span><span class="p">,</span> + <span class="n">check_dates</span><span class="p">,</span> <span class="n">check_maxstep</span><span class="p">,</span> <span class="n">check_type</span><span class="p">,</span> <span class="n">check_request</span><span class="p">,</span> + <span class="n">check_basetime</span><span class="p">,</span> <span class="n">check_public</span><span class="p">,</span> <span class="n">check_acctype</span><span class="p">,</span> + <span class="n">check_acctime</span><span class="p">,</span> <span class="n">check_accmaxstep</span><span class="p">,</span> <span class="n">check_time</span><span class="p">,</span> + <span class="n">check_logicals_type</span><span class="p">,</span> <span class="n">check_len_type_time_step</span><span class="p">,</span> + <span class="n">check_addpar</span><span class="p">,</span> <span class="n">check_job_chunk</span><span class="p">)</span> <span class="c1"># ------------------------------------------------------------------------------</span> <span class="c1"># CLASS</span> @@ -220,6 +219,269 @@ <div class="viewcode-block" id="ControlFile"><a class="viewcode-back" href="../api.html#ControlFile.ControlFile">[docs]</a><span class="k">class</span> <span class="nc">ControlFile</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="sd">'''</span> <span class="sd"> Contains the information which are stored in the CONTROL files.</span> + +<span class="sd"> The CONTROL file is the steering part of the FLEXPART extraction</span> +<span class="sd"> software. All necessary parameters needed to retrieve the data fields</span> +<span class="sd"> from the MARS archive for driving FLEXPART are set in a CONTROL file.</span> +<span class="sd"> Some specific parameters like the start and end dates can be overwritten</span> +<span class="sd"> by the command line parameters, but in generel all parameters needed</span> +<span class="sd"> for a complete set of fields for FLEXPART can be set in the CONTROL file.</span> + +<span class="sd"> Attributes</span> +<span class="sd"> ----------</span> +<span class="sd"> controlfile : str</span> +<span class="sd"> The name of the control file to be processed. Default value is the</span> +<span class="sd"> filename passed to the init function when initialised.</span> + +<span class="sd"> start_date : str</span> +<span class="sd"> The first day of the retrieval period. Default value is None.</span> + +<span class="sd"> end_date :str</span> +<span class="sd"> The last day of the retrieval period. Default value is None.</span> + +<span class="sd"> date_chunk : int</span> +<span class="sd"> Length of period for a single mars retrieval. Default value is 3.</span> + +<span class="sd"> dtime :str</span> +<span class="sd"> The time step in hours. Default value is None.</span> + +<span class="sd"> basetime : str</span> +<span class="sd"> The time for a half day retrieval. The 12 hours upfront are to be</span> +<span class="sd"> retrieved. Default value is None.</span> + +<span class="sd"> maxstep : int</span> +<span class="sd"> The maximum forecast step for non flux data. Default value is None.</span> + +<span class="sd"> type : list of str</span> +<span class="sd"> List of field type per retrieving hour. Default value is None.</span> + +<span class="sd"> time : list of str</span> +<span class="sd"> List of retrieving times in hours. Default valuer is None.</span> + +<span class="sd"> step : list of str or str</span> +<span class="sd"> List of forecast time steps in hours for non flux data.</span> +<span class="sd"> Default value is None.</span> + +<span class="sd"> acctype : str</span> +<span class="sd"> The field type for the accumulated forecast fields.</span> +<span class="sd"> Default value is None.</span> + +<span class="sd"> acctime : str</span> +<span class="sd"> The starting time of the accumulated forecasts. Default value is None.</span> + +<span class="sd"> accmaxstep : int</span> +<span class="sd"> The maximum forecast step for the accumulated forecast fields</span> +<span class="sd"> (flux data). Default value is None.</span> + +<span class="sd"> marsclass : str</span> +<span class="sd"> Characterisation of dataset. Default value is None.</span> + +<span class="sd"> dataset : str</span> +<span class="sd"> For public datasets there is the specific naming and parameter</span> +<span class="sd"> dataset which has to be used to characterize the type of</span> +<span class="sd"> data. Default value is None.</span> + +<span class="sd"> stream : str</span> +<span class="sd"> Identifies the forecasting system used to generate the data.</span> +<span class="sd"> Default value is None.</span> + +<span class="sd"> number : str</span> +<span class="sd"> Selects the member in ensemble forecast run. Default value is 'OFF'.</span> + +<span class="sd"> expver : str</span> +<span class="sd"> The version number of the dataset. Default value is '1'.</span> + +<span class="sd"> gaussian : str</span> +<span class="sd"> This parameter is deprecated and should no longer be used.</span> +<span class="sd"> Specifies the desired type of Gaussian grid for the output.</span> +<span class="sd"> Default value is an empty string ''.</span> + +<span class="sd"> grid : str</span> +<span class="sd"> Specifies the output grid which can be either a Gaussian grid</span> +<span class="sd"> or a Latitude/Longitude grid. Default value is None.</span> + +<span class="sd"> area : str</span> +<span class="sd"> Specifies the desired sub-area of data to be extracted.</span> +<span class="sd"> Default value is None.</span> + +<span class="sd"> left : str</span> +<span class="sd"> The western most longitude of the area to be extracted.</span> +<span class="sd"> Default value is None.</span> + +<span class="sd"> lower : str</span> +<span class="sd"> The southern most latitude of the area to be extracted.</span> +<span class="sd"> Default value is None.</span> + +<span class="sd"> upper : str</span> +<span class="sd"> The northern most latitued of the area to be extracted.</span> +<span class="sd"> Default value is None.</span> + +<span class="sd"> right : str</span> +<span class="sd"> The eastern most longitude of the area to be extracted.</span> +<span class="sd"> Default value is None.</span> + +<span class="sd"> level : str</span> +<span class="sd"> Specifies the maximum level. Default value is None.</span> + +<span class="sd"> levelist : str</span> +<span class="sd"> Specifies the required level list. Default value is None.</span> + +<span class="sd"> resol : str</span> +<span class="sd"> Specifies the desired triangular truncation of retrieved data,</span> +<span class="sd"> before carrying out any other selected post-processing.</span> +<span class="sd"> Default value is None.</span> + +<span class="sd"> gauss : int</span> +<span class="sd"> Switch to select gaussian fields (1) or regular lat/lon (0).</span> +<span class="sd"> Default value is 0.</span> + +<span class="sd"> accuracy : int</span> +<span class="sd"> Specifies the number of bits per value to be used in the</span> +<span class="sd"> generated GRIB coded fields. Default value is 24.</span> + +<span class="sd"> omega : int</span> +<span class="sd"> Switch to select omega retrieval (1) or not (0). Default value is 0.</span> + +<span class="sd"> omegadiff : int</span> +<span class="sd"> Switch to decide to calculate Omega and Dps/Dt from continuity</span> +<span class="sd"> equation for diagnostic purposes (1) or not (0). Default value is 0.</span> + +<span class="sd"> eta : int</span> +<span class="sd"> Switch to select direct retrieval of etadot from MARS (1) or</span> +<span class="sd"> wether it has to be calculated (0). Then Default value is 0.</span> + +<span class="sd"> etadiff : int</span> +<span class="sd"> Switch to select calculation of etadot and Dps/Dt from continuity</span> +<span class="sd"> equation for diagnostic purposes (1) or not (0). Default value is 0.</span> + +<span class="sd"> etapar : int</span> +<span class="sd"> GRIB parameter Id for etadot fields. Default value is 77.</span> + +<span class="sd"> dpdeta : int</span> +<span class="sd"> Switch to select multiplication of etadot with dpdeta.</span> +<span class="sd"> Default value is 1.</span> + +<span class="sd"> smooth : int</span> +<span class="sd"> Spectral truncation of ETADOT after calculation on Gaussian grid.</span> +<span class="sd"> Default value is 0.</span> + +<span class="sd"> format : str</span> +<span class="sd"> The format of the GRIB data. Default value is 'GRIB1'.</span> + +<span class="sd"> addpar : str</span> +<span class="sd"> List of additional surface level ECMWF parameter to be retrieved.</span> +<span class="sd"> Default value is None.</span> + +<span class="sd"> prefix : str</span> +<span class="sd"> Prefix string for the final FLEXPART/FLEXTRA ready input files.</span> +<span class="sd"> Default value is 'EN'.</span> + +<span class="sd"> cwc : int</span> +<span class="sd"> Switch to select wether the sum of cloud liquid water content and</span> +<span class="sd"> cloud ice water content should be retrieved. Default value is 0.</span> + +<span class="sd"> wrf : int</span> +<span class="sd"> Switch to select further parameters for retrievment to support</span> +<span class="sd"> WRF simulations. Default value is 0.</span> + +<span class="sd"> ecfsdir : str</span> +<span class="sd"> Path to the ECMWF storage 'ectmp:/${USER}/econdemand/'</span> + +<span class="sd"> mailfail : list of str</span> +<span class="sd"> Email list for sending error log files from ECMWF servers.</span> +<span class="sd"> The email addresses should be seperated by a comma.</span> +<span class="sd"> Default value is ['${USER}'].</span> + +<span class="sd"> mailops : list of str</span> +<span class="sd"> Email list for sending operational log files from ECMWF servers.</span> +<span class="sd"> The email addresses should be seperated by a comma.</span> +<span class="sd"> Default value is ['${USER}'].</span> + +<span class="sd"> grib2flexpart : int 0</span> +<span class="sd"> Switch to select generation of preprocessed FLEXPART files ".fp".</span> +<span class="sd"> If it is selected, the program grib2flexpart will try</span> +<span class="sd"> to convert the flex_extract output files into ".fp" format.</span> + +<span class="sd"> ecstorage : int</span> +<span class="sd"> Switch to select storage of FLEXPART ready output files</span> +<span class="sd"> in the ECFS file system. Default value is 0.</span> + +<span class="sd"> ectrans : int</span> +<span class="sd"> Switch to select the transfer of FLEXPART ready output files</span> +<span class="sd"> to the gateway server. Default value is 0.</span> + +<span class="sd"> inputdir : str</span> +<span class="sd"> Path to the temporary directory for the retrieval grib files and</span> +<span class="sd"> other processing files. Default value is _config.PATH_INPUT_DIR.</span> + +<span class="sd"> outputdir : str</span> +<span class="sd"> Path to the final directory where the final FLEXPART ready input</span> +<span class="sd"> files are stored. Default value is None.</span> + +<span class="sd"> flexextractdir : str</span> +<span class="sd"> Path to the flex_extract root directory. Default value is</span> +<span class="sd"> _config.PATH_FLEXEXTRACT_DIR.</span> + +<span class="sd"> exedir : str</span> +<span class="sd"> Path to the FORTRAN executable file. Default value is</span> +<span class="sd"> _config.PATH_FORTRAN_SRC.</span> + +<span class="sd"> flexpartdir : str</span> +<span class="sd"> Path to a FLEXPART root directory. Default value is None.</span> + +<span class="sd"> makefile : str</span> +<span class="sd"> Name of the makefile to be used for the Fortran program.</span> +<span class="sd"> Default value is 'Makefile.gfortran'.</span> + +<span class="sd"> destination : str</span> +<span class="sd"> The remote destination which is used to transfer files</span> +<span class="sd"> from ECMWF server to local gateway server. Default value is None.</span> + +<span class="sd"> gateway : str</span> +<span class="sd"> The gateway server the user is using. Default value is None.</span> + +<span class="sd"> ecuid : str</span> +<span class="sd"> The user id on ECMWF server. Default value is None.</span> + +<span class="sd"> ecgid : str</span> +<span class="sd"> The group id on ECMWF server. Default value is None.</span> + +<span class="sd"> install_target : str</span> +<span class="sd"> Defines the location where the installation is to be done.</span> +<span class="sd"> Default value is None.</span> + +<span class="sd"> debug : int</span> +<span class="sd"> Switch to keep temporary files at the end of postprocessing (1) or</span> +<span class="sd"> to delete all temporary files except the final output files (0).</span> +<span class="sd"> Default value is 0.</span> + +<span class="sd"> request : int</span> +<span class="sd"> Switch to select between just retrieving the data (0), writing the mars</span> +<span class="sd"> parameter values to a csv file (1) or doing both (2).</span> +<span class="sd"> Default value is 0.</span> + +<span class="sd"> public : int</span> +<span class="sd"> Switch to select kind of ECMWF Web Api access and the</span> +<span class="sd"> possible data sets. Public data sets (1) and Memberstate data sets (0).</span> +<span class="sd"> Default value is 0.</span> + +<span class="sd"> ecapi : boolean</span> +<span class="sd"> Tells wether the ECMWF Web APi was able to load or not.</span> +<span class="sd"> Default value is None.</span> + +<span class="sd"> purefc : int</span> +<span class="sd"> Switch to decide wether the job is a pure forecast retrieval or</span> +<span class="sd"> coupled with analysis data. Default value is 0.</span> + +<span class="sd"> rrint: int</span> +<span class="sd"> Switch to select between old precipitation disaggregation method (0)</span> +<span class="sd"> or the new IA3 disaggegration method (1). Default value is 0.</span> + +<span class="sd"> logicals : list of str</span> +<span class="sd"> List of the names of logical switches which controls the flow</span> +<span class="sd"> of the program. Default list is ['gauss', 'omega', 'omegadiff', 'eta',</span> +<span class="sd"> 'etadiff', 'dpdeta', 'cwc', 'wrf', 'grib2flexpart', 'ecstorage',</span> +<span class="sd"> 'ectrans', 'debug', 'request', 'public', 'purefc', 'rrint']</span> <span class="sd"> '''</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">):</span> @@ -229,7 +491,7 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> filename : :obj:`string`</span> +<span class="sd"> filename : str</span> <span class="sd"> Name of CONTROL file.</span> <span class="sd"> Return</span> @@ -242,6 +504,7 @@ <span class="bp">self</span><span class="o">.</span><span class="n">start_date</span> <span class="o">=</span> <span class="kc">None</span> <span class="bp">self</span><span class="o">.</span><span class="n">end_date</span> <span class="o">=</span> <span class="kc">None</span> <span class="bp">self</span><span class="o">.</span><span class="n">date_chunk</span> <span class="o">=</span> <span class="mi">3</span> + <span class="bp">self</span><span class="o">.</span><span class="n">job_chunk</span> <span class="o">=</span> <span class="kc">None</span> <span class="bp">self</span><span class="o">.</span><span class="n">dtime</span> <span class="o">=</span> <span class="kc">None</span> <span class="bp">self</span><span class="o">.</span><span class="n">basetime</span> <span class="o">=</span> <span class="kc">None</span> <span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">=</span> <span class="kc">None</span> @@ -288,9 +551,9 @@ <span class="bp">self</span><span class="o">.</span><span class="n">ectrans</span> <span class="o">=</span> <span class="mi">0</span> <span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_INPUT_DIR</span> <span class="bp">self</span><span class="o">.</span><span class="n">outputdir</span> <span class="o">=</span> <span class="kc">None</span> - <span class="bp">self</span><span class="o">.</span><span class="n">ecmwfdatadir</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span> + <span class="bp">self</span><span class="o">.</span><span class="n">flexextractdir</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span> <span class="bp">self</span><span class="o">.</span><span class="n">exedir</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_FORTRAN_SRC</span> - <span class="bp">self</span><span class="o">.</span><span class="n">flexpart_root_scripts</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">flexpartdir</span> <span class="o">=</span> <span class="kc">None</span> <span class="bp">self</span><span class="o">.</span><span class="n">makefile</span> <span class="o">=</span> <span class="s1">'Makefile.gfortran'</span> <span class="bp">self</span><span class="o">.</span><span class="n">destination</span> <span class="o">=</span> <span class="kc">None</span> <span class="bp">self</span><span class="o">.</span><span class="n">gateway</span> <span class="o">=</span> <span class="kc">None</span> @@ -300,16 +563,20 @@ <span class="bp">self</span><span class="o">.</span><span class="n">debug</span> <span class="o">=</span> <span class="mi">0</span> <span class="bp">self</span><span class="o">.</span><span class="n">request</span> <span class="o">=</span> <span class="mi">0</span> <span class="bp">self</span><span class="o">.</span><span class="n">public</span> <span class="o">=</span> <span class="mi">0</span> + <span class="bp">self</span><span class="o">.</span><span class="n">ecapi</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">purefc</span> <span class="o">=</span> <span class="mi">0</span> + <span class="bp">self</span><span class="o">.</span><span class="n">rrint</span> <span class="o">=</span> <span class="mi">0</span> <span class="bp">self</span><span class="o">.</span><span class="n">logicals</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'gauss'</span><span class="p">,</span> <span class="s1">'omega'</span><span class="p">,</span> <span class="s1">'omegadiff'</span><span class="p">,</span> <span class="s1">'eta'</span><span class="p">,</span> <span class="s1">'etadiff'</span><span class="p">,</span> <span class="s1">'dpdeta'</span><span class="p">,</span> <span class="s1">'cwc'</span><span class="p">,</span> <span class="s1">'wrf'</span><span class="p">,</span> <span class="s1">'grib2flexpart'</span><span class="p">,</span> <span class="s1">'ecstorage'</span><span class="p">,</span> - <span class="s1">'ectrans'</span><span class="p">,</span> <span class="s1">'debug'</span><span class="p">,</span> <span class="s1">'request'</span><span class="p">,</span> <span class="s1">'public'</span><span class="p">]</span> + <span class="s1">'ectrans'</span><span class="p">,</span> <span class="s1">'debug'</span><span class="p">,</span> <span class="s1">'request'</span><span class="p">,</span> <span class="s1">'public'</span><span class="p">,</span> <span class="s1">'purefc'</span><span class="p">,</span> + <span class="s1">'rrint'</span><span class="p">]</span> - <span class="bp">self</span><span class="o">.</span><span class="n">__read_controlfile__</span><span class="p">()</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_read_controlfile</span><span class="p">()</span> <span class="k">return</span> - <span class="k">def</span> <span class="nf">__read_controlfile__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="k">def</span> <span class="nf">_read_controlfile</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">'''Read CONTROL file and assign all CONTROL file variables.</span> <span class="sd"> Parameters</span> @@ -333,6 +600,12 @@ <span class="c1"># go through every line and store parameter</span> <span class="k">for</span> <span class="n">ldata</span> <span class="ow">in</span> <span class="n">fdata</span><span class="p">:</span> + <span class="k">if</span> <span class="n">ldata</span> <span class="ow">and</span> <span class="n">ldata</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'#'</span><span class="p">:</span> + <span class="c1"># ignore comment line in control file</span> + <span class="k">continue</span> + <span class="k">if</span> <span class="s1">'#'</span> <span class="ow">in</span> <span class="n">ldata</span><span class="p">:</span> + <span class="c1"># cut off comment</span> + <span class="n">ldata</span> <span class="o">=</span> <span class="n">ldata</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'#'</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="n">data</span> <span class="o">=</span> <span class="n">ldata</span><span class="o">.</span><span class="n">split</span><span class="p">()</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span> <span class="k">if</span> <span class="s1">'m_'</span> <span class="ow">in</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span> @@ -343,15 +616,6 @@ <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'start_date'</span> <span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'day2'</span><span class="p">:</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'end_date'</span> - <span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'addpar'</span><span class="p">:</span> - <span class="k">if</span> <span class="s1">'/'</span> <span class="ow">in</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span> - <span class="c1"># remove leading '/' sign from addpar content</span> - <span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'/'</span><span class="p">:</span> - <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">:]</span> - <span class="n">dd</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)</span> - <span class="n">data</span> <span class="o">=</span> <span class="p">[</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> - <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">dd</span><span class="p">:</span> - <span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">d</span><span class="p">)</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> <span class="k">if</span> <span class="s1">'$'</span> <span class="ow">in</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span> <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> @@ -416,7 +680,7 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> args : :obj:`Namespace`</span> +<span class="sd"> args : Namespace</span> <span class="sd"> Contains the commandline arguments from script/program call.</span> <span class="sd"> Return</span> @@ -441,7 +705,7 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> envs : :obj:`dictionary` of :obj:`strings`</span> +<span class="sd"> envs : dict of str</span> <span class="sd"> Contains the ECMWF environment parameternames "ECUID", "ECGID",</span> <span class="sd"> "DESTINATION" and "GATEWAY" with its corresponding values.</span> <span class="sd"> They were read from the file "ECMWF_ENV".</span> @@ -463,7 +727,7 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> queue : :obj:`string`</span> +<span class="sd"> queue : str</span> <span class="sd"> Name of the queue if submitted to the ECMWF servers.</span> <span class="sd"> Used to check if ecuid, ecgid, gateway and destination</span> <span class="sd"> are set correctly and are not empty.</span> @@ -472,234 +736,78 @@ <span class="sd"> ------</span> <span class="sd"> '''</span> - <span class="kn">from</span> <span class="nn">mods.tools</span> <span class="k">import</span> <span class="n">my_error</span> - <span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> - - <span class="c1"># check for having at least a starting date</span> - <span class="c1"># otherwise program is not allowed to run</span> - <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">start_date</span><span class="p">:</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'start_date specified neither in command line nor </span><span class="se">\</span> -<span class="s1"> in CONTROL file '</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">controlfile</span><span class="p">)</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'Try "'</span> <span class="o">+</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> - <span class="s1">' -h" to print usage information'</span><span class="p">)</span> - <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> + <span class="n">check_logicals_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">logicals</span><span class="p">)</span> - <span class="c1"># retrieve just one day if end_date isn't set</span> - <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">end_date</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">end_date</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">start_date</span> - - <span class="c1"># basetime has only two possible values</span> - <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">basetime</span><span class="p">:</span> - <span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">basetime</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span> <span class="ow">and</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">basetime</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">12</span><span class="p">:</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'Basetime has an invalid value!'</span><span class="p">)</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'Basetime = '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">basetime</span><span class="p">))</span> - <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> - - <span class="c1"># assure consistency of levelist and level</span> - <span class="c1"># up-to-date available maximum level numbers at ECMWF, 05.10.2018</span> - <span class="n">max_level_list</span> <span class="o">=</span> <span class="p">[</span><span class="mi">16</span><span class="p">,</span> <span class="mi">19</span><span class="p">,</span> <span class="mi">31</span><span class="p">,</span> <span class="mi">40</span><span class="p">,</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">60</span><span class="p">,</span> <span class="mi">62</span><span class="p">,</span> <span class="mi">91</span><span class="p">,</span> <span class="mi">137</span><span class="p">]</span> - <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">levelist</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">level</span><span class="p">:</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'Warning: neither levelist nor level </span><span class="se">\</span> -<span class="s1"> specified in CONTROL file'</span><span class="p">)</span> - <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> - <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">levelist</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">level</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">levelist</span> <span class="o">=</span> <span class="s1">'1/to/'</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">level</span> - <span class="k">elif</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">levelist</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">level</span><span class="p">)</span> <span class="ow">or</span> \ - <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">levelist</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">level</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]):</span> - <span class="bp">self</span><span class="o">.</span><span class="n">level</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">levelist</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> - <span class="k">else</span><span class="p">:</span> - <span class="k">pass</span> - - <span class="c1"># check if max level is a valid level</span> - <span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">level</span><span class="p">)</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">max_level_list</span><span class="p">:</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'ERROR: '</span><span class="p">)</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'LEVEL must be the maximum level of a specified '</span> - <span class="s1">'level list from ECMWF, e.g.'</span><span class="p">)</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'[16, 19, 31, 40, 50, 60, 62, 91 or 137]'</span><span class="p">)</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'Check parameter "LEVEL" or the max level of "LEVELIST"!'</span><span class="p">)</span> - <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span> <span class="o">=</span> <span class="n">check_mail</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span><span class="p">)</span> - <span class="c1"># if area was provided (only from commandline)</span> - <span class="c1"># decompose area into its 4 components</span> - <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">area</span><span class="p">:</span> - <span class="n">components</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">area</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)</span> - <span class="c1"># convert float to integer coordinates</span> - <span class="k">if</span> <span class="s1">'.'</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">area</span><span class="p">:</span> - <span class="n">components</span> <span class="o">=</span> <span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="o">*</span> <span class="mi">1000</span><span class="p">))</span> - <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">components</span><span class="p">)]</span> - <span class="bp">self</span><span class="o">.</span><span class="n">upper</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">lower</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">right</span> <span class="o">=</span> <span class="n">components</span> - - <span class="c1"># prepare step list if "/" signs are found</span> - <span class="k">if</span> <span class="s1">'/'</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="p">:</span> - <span class="n">steps</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)</span> - <span class="k">if</span> <span class="s1">'to'</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">and</span> <span class="s1">'by'</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span> - <span class="n">ilist</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">steps</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> - <span class="nb">int</span><span class="p">(</span><span class="n">steps</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> - <span class="nb">int</span><span class="p">(</span><span class="n">steps</span><span class="p">[</span><span class="mi">4</span><span class="p">]))</span> - <span class="bp">self</span><span class="o">.</span><span class="n">step</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">ilist</span><span class="p">]</span> - <span class="k">elif</span> <span class="s1">'to'</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">and</span> <span class="s1">'by'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span> - <span class="n">my_error</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">step</span> <span class="o">+</span> <span class="s1">':</span><span class="se">\n</span><span class="s1">'</span> <span class="o">+</span> - <span class="s1">'if "to" is used in steps parameter, </span><span class="se">\</span> -<span class="s1"> please use "by" as well'</span><span class="p">)</span> - <span class="k">else</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">step</span> <span class="o">=</span> <span class="n">steps</span> - - <span class="c1"># if maxstep wasn't provided</span> - <span class="c1"># search for it in the "step" parameter</span> - <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">=</span> <span class="mi">0</span> - <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="p">:</span> - <span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="o">></span> <span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> - <span class="k">else</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span><span class="p">)</span> - - <span class="c1"># set root scripts since it is needed later on</span> - <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">flexpart_root_scripts</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">flexpart_root_scripts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ecmwfdatadir</span> - - <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">outputdir</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">outputdir</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span> - - <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> - <span class="k">if</span> <span class="s1">','</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">','</span><span class="p">)</span> - <span class="k">elif</span> <span class="s1">' '</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span><span class="o">.</span><span class="n">split</span><span class="p">()</span> - <span class="k">else</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span><span class="p">]</span> + <span class="bp">self</span><span class="o">.</span><span class="n">mailops</span> <span class="o">=</span> <span class="n">check_mail</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mailops</span><span class="p">)</span> - <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mailops</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> - <span class="k">if</span> <span class="s1">','</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">mailops</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">mailops</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mailops</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">','</span><span class="p">)</span> - <span class="k">elif</span> <span class="s1">' '</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">mailops</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">mailops</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mailops</span><span class="o">.</span><span class="n">split</span><span class="p">()</span> - <span class="k">else</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">mailops</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">mailops</span><span class="p">]</span> - - <span class="k">if</span> <span class="n">queue</span> <span class="ow">in</span> <span class="n">_config</span><span class="o">.</span><span class="n">QUEUES_LIST</span> <span class="ow">and</span> \ - <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">gateway</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">destination</span> <span class="ow">or</span> \ - <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ecuid</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ecgid</span><span class="p">:</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">Environment variables GATEWAY, DESTINATION, ECUID and </span><span class="se">\</span> -<span class="s1"> ECGID were not set properly!'</span><span class="p">)</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'Please check for existence of file "ECMWF_ENV" in the </span><span class="se">\</span> -<span class="s1"> python directory!'</span><span class="p">)</span> - <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> + <span class="n">check_queue</span><span class="p">(</span><span class="n">queue</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">gateway</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">destination</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">ecuid</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ecgid</span><span class="p">)</span> - <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">request</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span> - <span class="n">marsfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> - <span class="n">_config</span><span class="o">.</span><span class="n">FILE_MARS_REQUESTS</span><span class="p">)</span> - <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">marsfile</span><span class="p">):</span> - <span class="n">silent_remove</span><span class="p">(</span><span class="n">marsfile</span><span class="p">)</span> - - <span class="c1"># check all logical variables for data type</span> - <span class="c1"># if its a string change to integer</span> - <span class="k">for</span> <span class="n">var</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">logicals</span><span class="p">:</span> - <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">var</span><span class="p">),</span> <span class="nb">int</span><span class="p">):</span> - <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">var</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">var</span><span class="p">)))</span> - - <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">public</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dataset</span><span class="p">:</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'ERROR: '</span><span class="p">)</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'If public mars data wants to be retrieved, '</span> - <span class="s1">'the "dataset"-parameter has to be set in the control file!'</span><span class="p">)</span> - <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">outputdir</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">flexpartdir</span> <span class="o">=</span> <span class="n">check_pathes</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">outputdir</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">flexextractdir</span><span class="p">)</span> - <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> - <span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">]</span> + <span class="bp">self</span><span class="o">.</span><span class="n">start_date</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">end_date</span> <span class="o">=</span> <span class="n">check_dates</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">start_date</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">end_date</span><span class="p">)</span> - <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">):</span> - <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'AN'</span> <span class="ow">and</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'Analysis retrievals must have STEP = 0 (is set to 0)'</span><span class="p">)</span> - <span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span> + <span class="n">check_basetime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">basetime</span><span class="p">)</span> - <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">time</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> - <span class="bp">self</span><span class="o">.</span><span class="n">time</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">time</span><span class="p">]</span> + <span class="bp">self</span><span class="o">.</span><span class="n">levelist</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">level</span> <span class="o">=</span> <span class="n">check_levels</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">levelist</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">level</span><span class="p">)</span> - <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> - <span class="bp">self</span><span class="o">.</span><span class="n">step</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="p">]</span> + <span class="bp">self</span><span class="o">.</span><span class="n">step</span> <span class="o">=</span> <span class="n">check_step</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span><span class="p">)</span> - <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">acctype</span><span class="p">:</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'... Control paramter ACCTYPE was not defined.'</span><span class="p">)</span> - <span class="k">try</span><span class="p">:</span> - <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">'AN'</span><span class="p">:</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'Use old setting by using TYPE[1] for flux forecast!'</span><span class="p">)</span> - <span class="bp">self</span><span class="o">.</span><span class="n">acctype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> - <span class="k">except</span><span class="p">:</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'Use default value "FC" for flux forecast!'</span><span class="p">)</span> - <span class="bp">self</span><span class="o">.</span><span class="n">acctype</span><span class="o">=</span><span class="s1">'FC'</span> + <span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">=</span> <span class="n">check_maxstep</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="p">)</span> - <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">acctime</span><span class="p">:</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'... Control paramter ACCTIME was not defined.'</span><span class="p">)</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'Use default value "00/12" for flux forecast!'</span><span class="p">)</span> - <span class="bp">self</span><span class="o">.</span><span class="n">acctime</span><span class="o">=</span><span class="s1">'00/12'</span> + <span class="n">check_request</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">request</span><span class="p">,</span> + <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">_config</span><span class="o">.</span><span class="n">FILE_MARS_REQUESTS</span><span class="p">))</span> - <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">accmaxstep</span><span class="p">:</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'... Control paramter ACCMAXSTEP was not defined.'</span><span class="p">)</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'Use default value "12" for flux forecast!'</span><span class="p">)</span> - <span class="bp">self</span><span class="o">.</span><span class="n">accmaxstep</span><span class="o">=</span><span class="s1">'12'</span> + <span class="n">check_public</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">public</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dataset</span><span class="p">)</span> - <span class="k">return</span></div> + <span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">check_type</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="p">)</span> -<div class="viewcode-block" id="ControlFile.check_install_conditions"><a class="viewcode-back" href="../api.html#ControlFile.ControlFile.check_install_conditions">[docs]</a> <span class="k">def</span> <span class="nf">check_install_conditions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> - <span class="sd">'''Checks a couple of necessary attributes and conditions</span> -<span class="sd"> for the installation such as if they exist and contain values.</span> -<span class="sd"> Otherwise set default values.</span> + <span class="bp">self</span><span class="o">.</span><span class="n">time</span> <span class="o">=</span> <span class="n">check_time</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">time</span><span class="p">)</span> -<span class="sd"> Parameters</span> -<span class="sd"> ----------</span> + <span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">time</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">step</span> <span class="o">=</span> <span class="n">check_len_type_time_step</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">time</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">purefc</span><span class="p">)</span> -<span class="sd"> Return</span> -<span class="sd"> ------</span> + <span class="bp">self</span><span class="o">.</span><span class="n">acctype</span> <span class="o">=</span> <span class="n">check_acctype</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">acctype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">)</span> -<span class="sd"> '''</span> + <span class="bp">self</span><span class="o">.</span><span class="n">acctime</span> <span class="o">=</span> <span class="n">check_acctime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">acctime</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">acctype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">purefc</span><span class="p">)</span> - <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">install_target</span> <span class="ow">and</span> \ - <span class="bp">self</span><span class="o">.</span><span class="n">install_target</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'local'</span><span class="p">,</span> <span class="s1">'ecgate'</span><span class="p">,</span> <span class="s1">'cca'</span><span class="p">]:</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'ERROR: unknown or missing installation target '</span><span class="p">)</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'target: '</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">install_target</span><span class="p">)</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'please specify correct installation target '</span> <span class="o">+</span> - <span class="s1">'(local | ecgate | cca)'</span><span class="p">)</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'use -h or --help for help'</span><span class="p">)</span> - <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">accmaxstep</span> <span class="o">=</span> <span class="n">check_accmaxstep</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">accmaxstep</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">acctype</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">purefc</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span><span class="p">)</span> - <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">install_target</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">install_target</span> <span class="o">!=</span> <span class="s1">'local'</span><span class="p">:</span> - <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ecgid</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ecuid</span> <span class="ow">or</span> \ - <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">gateway</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">destination</span><span class="p">:</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'Please enter your ECMWF user id and group id as well '</span> <span class="o">+</span> - <span class="s1">'as the </span><span class="se">\n</span><span class="s1">name of the local gateway and the ectrans '</span> <span class="o">+</span> - <span class="s1">'destination '</span><span class="p">)</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'with command line options --ecuid --ecgid </span><span class="se">\</span> -<span class="s1"> --gateway --destination'</span><span class="p">)</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'Try "'</span> <span class="o">+</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> \ - <span class="s1">' -h" to print usage information'</span><span class="p">)</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'Please consult ecaccess documentation or ECMWF user </span><span class="se">\</span> -<span class="s1"> support for further details'</span><span class="p">)</span> - <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">purefc</span> <span class="o">=</span> <span class="n">check_purefc</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">)</span> - <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">flexpart_root_scripts</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">flexpart_root_scripts</span> <span class="o">=</span> <span class="s1">'$</span><span class="si">{HOME}</span><span class="s1">'</span> - <span class="k">else</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">flexpart_root_scripts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">flexpart_root_scripts</span> - <span class="k">else</span><span class="p">:</span> <span class="c1"># local</span> - <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">flexpart_root_scripts</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">flexpart_root_scripts</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid</span> <span class="o">=</span> <span class="n">check_grid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">area</span> <span class="o">=</span> <span class="n">check_area</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">area</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">upper</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">lower</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">right</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">addpar</span> <span class="o">=</span> <span class="n">check_addpar</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">addpar</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">job_chunk</span> <span class="o">=</span> <span class="n">check_job_chunk</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">job_chunk</span><span class="p">)</span> <span class="k">return</span></div> <div class="viewcode-block" id="ControlFile.to_list"><a class="viewcode-back" href="../api.html#ControlFile.ControlFile.to_list">[docs]</a> <span class="k">def</span> <span class="nf">to_list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">'''Just generates a list of strings containing the attributes and</span> <span class="sd"> assigned values except the attributes "_expanded", "exedir",</span> -<span class="sd"> "ecmwfdatadir" and "flexpart_root_scripts".</span> +<span class="sd"> "flexextractdir" and "flexpartdir".</span> <span class="sd"> Parameters</span> <span class="sd"> ----------</span> <span class="sd"> Return</span> <span class="sd"> ------</span> -<span class="sd"> l : :obj:`list`</span> +<span class="sd"> l : list of *</span> <span class="sd"> A sorted list of the all ControlFile class attributes with</span> <span class="sd"> their values except the attributes "_expanded", "exedir",</span> -<span class="sd"> "ecmwfdatadir" and "flexpart_root_scripts".</span> +<span class="sd"> "flexextractdir" and "flexpartdir".</span> <span class="sd"> '''</span> <span class="kn">import</span> <span class="nn">collections</span> @@ -713,9 +821,9 @@ <span class="k">pass</span> <span class="k">elif</span> <span class="s1">'exedir'</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span> <span class="k">pass</span> - <span class="k">elif</span> <span class="s1">'flexpart_root_scripts'</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span> + <span class="k">elif</span> <span class="s1">'flexpartdir'</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span> <span class="k">pass</span> - <span class="k">elif</span> <span class="s1">'ecmwfdatadir'</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span> + <span class="k">elif</span> <span class="s1">'flexextractdir'</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span> <span class="k">pass</span> <span class="k">else</span><span class="p">:</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="nb">list</span><span class="p">):</span> @@ -723,9 +831,9 @@ <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span> <span class="n">stot</span> <span class="o">+=</span> <span class="n">s</span> <span class="o">+</span> <span class="s1">' '</span> - <span class="n">l</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">stot</span><span class="p">))</span> + <span class="n">l</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">stot</span><span class="p">))</span> <span class="k">else</span><span class="p">:</span> - <span class="n">l</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">item</span><span class="p">)</span> + <span class="n">l</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="n">item</span><span class="p">)</span> <span class="k">return</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">l</span><span class="p">)</span></div></div> @@ -741,7 +849,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -760,21 +868,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/_modules/EcFlexpart.html b/documentation/Sphinx/build/html/_modules/EcFlexpart.html index 3468886..03e112b 100644 --- a/documentation/Sphinx/build/html/_modules/EcFlexpart.html +++ b/documentation/Sphinx/build/html/_modules/EcFlexpart.html @@ -193,31 +193,13 @@ <span class="c1"># duplication, easier testing)</span> <span class="c1">#</span> <span class="c1"># @License:</span> -<span class="c1"># (C) Copyright 2014-2018.</span> -<span class="c1">#</span> -<span class="c1"># This software is licensed under the terms of the Apache Licence Version 2.0</span> -<span class="c1"># which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.</span> -<span class="c1">#</span> -<span class="c1"># @Class Description:</span> -<span class="c1"># FLEXPART needs grib files in a specifc format. All necessary data fields</span> -<span class="c1"># for one time step are stored in a single file. The class represents an</span> -<span class="c1"># instance with all the parameter and settings necessary for retrieving</span> -<span class="c1"># MARS data and modifing them so they are fitting FLEXPART need. The class</span> -<span class="c1"># is able to disaggregate the fluxes and convert grid types to the one needed</span> -<span class="c1"># by FLEXPART, therefore using the FORTRAN program.</span> -<span class="c1">#</span> -<span class="c1"># @Class Content:</span> -<span class="c1"># - __init__</span> -<span class="c1"># - write_namelist</span> -<span class="c1"># - retrieve</span> -<span class="c1"># - process_output</span> -<span class="c1"># - create</span> -<span class="c1"># - deacc_fluxes</span> -<span class="c1">#</span> -<span class="c1"># @Class Attributes:</span> -<span class="c1">#</span> -<span class="c1"># TODO</span> +<span class="c1"># (C) Copyright 2014-2019.</span> +<span class="c1"># Anne Philipp, Leopold Haimberger</span> <span class="c1">#</span> +<span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> +<span class="c1"># International License. To view a copy of this license, visit</span> +<span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> +<span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> <span class="c1">#*******************************************************************************</span> <span class="c1">#pylint: disable=unsupported-assignment-operation</span> <span class="c1"># this is disabled because for this specific case its an error in pylint</span> @@ -234,21 +216,18 @@ <span class="kn">from</span> <span class="nn">datetime</span> <span class="k">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</span> <span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> -<span class="kn">from</span> <span class="nn">gribapi</span> <span class="k">import</span> <span class="p">(</span><span class="n">grib_set</span><span class="p">,</span> <span class="n">grib_index_select</span><span class="p">,</span> <span class="n">grib_new_from_index</span><span class="p">,</span> <span class="n">grib_get</span><span class="p">,</span> - <span class="n">grib_write</span><span class="p">,</span> <span class="n">grib_get_values</span><span class="p">,</span> <span class="n">grib_set_values</span><span class="p">,</span> <span class="n">grib_release</span><span class="p">,</span> - <span class="n">grib_index_release</span><span class="p">,</span> <span class="n">grib_index_get</span><span class="p">)</span> - -<span class="c1"># from eccodes import (codes_index_select, codes_new_from_index, codes_get,</span> - <span class="c1"># codes_get_values, codes_set_values, codes_set,</span> - <span class="c1"># codes_write, codes_release, codes_new_from_index,</span> - <span class="c1"># codes_index_release, codes_index_get)</span> +<span class="kn">from</span> <span class="nn">eccodes</span> <span class="k">import</span> <span class="p">(</span><span class="n">codes_index_select</span><span class="p">,</span> <span class="n">codes_new_from_index</span><span class="p">,</span> <span class="n">codes_get</span><span class="p">,</span> + <span class="n">codes_get_values</span><span class="p">,</span> <span class="n">codes_set_values</span><span class="p">,</span> <span class="n">codes_set</span><span class="p">,</span> + <span class="n">codes_write</span><span class="p">,</span> <span class="n">codes_release</span><span class="p">,</span> <span class="n">codes_new_from_index</span><span class="p">,</span> + <span class="n">codes_index_release</span><span class="p">,</span> <span class="n">codes_index_get</span><span class="p">)</span> <span class="c1"># software specific classes and modules from flex_extract</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'../'</span><span class="p">)</span> <span class="kn">import</span> <span class="nn">_config</span> -<span class="kn">from</span> <span class="nn">GribTools</span> <span class="k">import</span> <span class="n">GribTools</span> +<span class="kn">from</span> <span class="nn">GribUtil</span> <span class="k">import</span> <span class="n">GribUtil</span> <span class="kn">from</span> <span class="nn">mods.tools</span> <span class="k">import</span> <span class="p">(</span><span class="n">init128</span><span class="p">,</span> <span class="n">to_param_id</span><span class="p">,</span> <span class="n">silent_remove</span><span class="p">,</span> <span class="n">product</span><span class="p">,</span> - <span class="n">my_error</span><span class="p">,</span> <span class="n">make_dir</span><span class="p">)</span> + <span class="n">my_error</span><span class="p">,</span> <span class="n">make_dir</span><span class="p">,</span> <span class="n">get_informations</span><span class="p">,</span> <span class="n">get_dimensions</span><span class="p">,</span> + <span class="n">execute_subprocess</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">MarsRetrieval</span> <span class="k">import</span> <span class="n">MarsRetrieval</span> <span class="kn">import</span> <span class="nn">mods.disaggregation</span> <span class="k">as</span> <span class="nn">disaggregation</span> @@ -257,8 +236,112 @@ <span class="c1"># ------------------------------------------------------------------------------</span> <div class="viewcode-block" id="EcFlexpart"><a class="viewcode-back" href="../api.html#EcFlexpart.EcFlexpart">[docs]</a><span class="k">class</span> <span class="nc">EcFlexpart</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="sd">'''</span> -<span class="sd"> Class to retrieve FLEXPART specific ECMWF data.</span> +<span class="sd"> Class to represent FLEXPART specific ECMWF data.</span> + +<span class="sd"> FLEXPART needs grib files in a specifc format. All necessary data fields</span> +<span class="sd"> for one time step are stored in a single file. The class represents an</span> +<span class="sd"> instance with all the parameter and settings necessary for retrieving</span> +<span class="sd"> MARS data and modifing them so they are fitting FLEXPART needs. The class</span> +<span class="sd"> is able to disaggregate the fluxes and convert grid types to the one needed</span> +<span class="sd"> by FLEXPART, therefore using the FORTRAN program.</span> + +<span class="sd"> Attributes</span> +<span class="sd"> ----------</span> +<span class="sd"> mreq_count : int</span> +<span class="sd"> Counter for the number of generated mars requests.</span> + +<span class="sd"> inputdir : str</span> +<span class="sd"> Path to the directory where the retrieved data is stored.</span> + +<span class="sd"> dataset : str</span> +<span class="sd"> For public datasets there is the specific naming and parameter</span> +<span class="sd"> dataset which has to be used to characterize the type of</span> +<span class="sd"> data.</span> + +<span class="sd"> basetime : str</span> +<span class="sd"> The time for a half day retrieval. The 12 hours upfront are to be</span> +<span class="sd"> retrieved.</span> + +<span class="sd"> dtime : str</span> +<span class="sd"> Time step in hours.</span> + +<span class="sd"> acctype : str</span> +<span class="sd"> The field type for the accumulated forecast fields.</span> + +<span class="sd"> acctime : str</span> +<span class="sd"> The starting time from the accumulated forecasts.</span> + +<span class="sd"> accmaxstep : str</span> +<span class="sd"> The maximum forecast step for the accumulated forecast fields.</span> + +<span class="sd"> marsclass : str</span> +<span class="sd"> Characterisation of dataset.</span> + +<span class="sd"> stream : str</span> +<span class="sd"> Identifies the forecasting system used to generate the data.</span> + +<span class="sd"> number : str</span> +<span class="sd"> Selects the member in ensemble forecast run.</span> + +<span class="sd"> resol : str</span> +<span class="sd"> Specifies the desired triangular truncation of retrieved data,</span> +<span class="sd"> before carrying out any other selected post-processing.</span> + +<span class="sd"> accuracy : str</span> +<span class="sd"> Specifies the number of bits per value to be used in the</span> +<span class="sd"> generated GRIB coded fields.</span> + +<span class="sd"> addpar : str</span> +<span class="sd"> List of additional parameters to be retrieved.</span> + +<span class="sd"> level : str</span> +<span class="sd"> Specifies the maximum level.</span> + +<span class="sd"> expver : str</span> +<span class="sd"> The version of the dataset.</span> + +<span class="sd"> levelist : str</span> +<span class="sd"> Specifies the required levels.</span> + +<span class="sd"> glevelist : str</span> +<span class="sd"> Specifies the required levels for gaussian grids.</span> + +<span class="sd"> gaussian : str</span> +<span class="sd"> This parameter is deprecated and should no longer be used.</span> +<span class="sd"> Specifies the desired type of Gaussian grid for the output.</span> + +<span class="sd"> grid : str</span> +<span class="sd"> Specifies the output grid which can be either a Gaussian grid</span> +<span class="sd"> or a Latitude/Longitude grid.</span> + +<span class="sd"> area : str</span> +<span class="sd"> Specifies the desired sub-area of data to be extracted.</span> + +<span class="sd"> purefc : int</span> +<span class="sd"> Switch for definition of pure forecast mode or not.</span> + +<span class="sd"> outputfilelist : list of str</span> +<span class="sd"> The final list of FLEXPART ready input files.</span> + +<span class="sd"> types : dictionary</span> +<span class="sd"> Determines the combination of type of fields, time and forecast step</span> +<span class="sd"> to be retrieved.</span> + +<span class="sd"> params : dictionary</span> +<span class="sd"> Collection of grid types and their corresponding parameters,</span> +<span class="sd"> levels, level types and the grid definition.</span> + +<span class="sd"> server : ECMWFService or ECMWFDataServer</span> +<span class="sd"> This is the connection to the ECMWF data servers.</span> + +<span class="sd"> public : int</span> +<span class="sd"> Decides which Web API Server version is used.</span> + +<span class="sd"> dates : str</span> +<span class="sd"> Contains start and end date of the retrieval in the format</span> +<span class="sd"> "YYYYMMDD/to/YYYYMMDD"</span> <span class="sd"> '''</span> + <span class="c1"># --------------------------------------------------------------------------</span> <span class="c1"># CLASS FUNCTIONS</span> <span class="c1"># --------------------------------------------------------------------------</span> @@ -268,11 +351,11 @@ <span class="sd"> Parameters:</span> <span class="sd"> -----------</span> -<span class="sd"> c : :obj:`ControlFile`</span> +<span class="sd"> c : ControlFile</span> <span class="sd"> Contains all the parameters of CONTROL file and</span> <span class="sd"> command line.</span> -<span class="sd"> fluxes : :obj:`boolean`, optional</span> +<span class="sd"> fluxes : boolean, optional</span> <span class="sd"> Decides if the flux parameter settings are stored or</span> <span class="sd"> the rest of the parameter list.</span> <span class="sd"> Default value is False.</span> @@ -281,49 +364,85 @@ <span class="sd"> ------</span> <span class="sd"> '''</span> - <span class="c1"># set a counter for the number of mars requests generated</span> + <span class="c1"># set a counter for the number of generated mars requests</span> <span class="bp">self</span><span class="o">.</span><span class="n">mreq_count</span> <span class="o">=</span> <span class="mi">0</span> - <span class="c1"># different mars types for retrieving data for flexpart</span> - <span class="bp">self</span><span class="o">.</span><span class="n">types</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span> - - <span class="c1"># Pure forecast mode</span> - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">></span> <span class="nb">len</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">type</span><span class="p">)</span> <span class="ow">and</span> <span class="s1">'AN'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">c</span><span class="o">.</span><span class="n">type</span><span class="p">:</span> - <span class="n">c</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="p">[</span><span class="n">c</span><span class="o">.</span><span class="n">type</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> - <span class="n">c</span><span class="o">.</span><span class="n">step</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">step</span><span class="p">[</span><span class="mi">0</span><span class="p">]))]</span> - <span class="n">c</span><span class="o">.</span><span class="n">time</span> <span class="o">=</span> <span class="p">[</span><span class="n">c</span><span class="o">.</span><span class="n">time</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> - <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span> - <span class="n">c</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">type</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> - <span class="n">c</span><span class="o">.</span><span class="n">step</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">))</span> - <span class="n">c</span><span class="o">.</span><span class="n">time</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">time</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> - <span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">inputdir</span> <span class="bp">self</span><span class="o">.</span><span class="n">dataset</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">dataset</span> <span class="bp">self</span><span class="o">.</span><span class="n">basetime</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span> <span class="bp">self</span><span class="o">.</span><span class="n">dtime</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">dtime</span> - <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> - <span class="k">if</span> <span class="n">fluxes</span> <span class="ow">and</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o"><=</span> <span class="mi">24</span><span class="p">:</span> - <span class="c1"># no forecast beyond one day is needed!</span> - <span class="c1"># Thus, prepare flux data manually as usual</span> - <span class="c1"># with only forecast fields with start times at 00/12</span> - <span class="c1"># (but without 00/12 fields since these are</span> - <span class="c1"># the initialisation times of the flux fields</span> - <span class="c1"># and therefore are zero all the time)</span> - <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">acctype</span><span class="p">)]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'times'</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">acctime</span><span class="p">),</span> - <span class="s1">'steps'</span><span class="p">:</span> <span class="s1">'</span><span class="si">{}</span><span class="s1">/to/</span><span class="si">{}</span><span class="s1">/by/</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span> - <span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">accmaxstep</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">)}</span> + <span class="bp">self</span><span class="o">.</span><span class="n">acctype</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">acctype</span> + <span class="bp">self</span><span class="o">.</span><span class="n">acctime</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">acctime</span> + <span class="bp">self</span><span class="o">.</span><span class="n">accmaxstep</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">accmaxstep</span> + <span class="bp">self</span><span class="o">.</span><span class="n">marsclass</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">marsclass</span> + <span class="bp">self</span><span class="o">.</span><span class="n">stream</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">stream</span> + <span class="bp">self</span><span class="o">.</span><span class="n">number</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">number</span> + <span class="bp">self</span><span class="o">.</span><span class="n">resol</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">resol</span> + <span class="bp">self</span><span class="o">.</span><span class="n">accuracy</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">accuracy</span> + <span class="bp">self</span><span class="o">.</span><span class="n">addpar</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">addpar</span> + <span class="bp">self</span><span class="o">.</span><span class="n">level</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">level</span> + <span class="bp">self</span><span class="o">.</span><span class="n">expver</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">expver</span> + <span class="bp">self</span><span class="o">.</span><span class="n">levelist</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">levelist</span> + <span class="bp">self</span><span class="o">.</span><span class="n">glevelist</span> <span class="o">=</span> <span class="s1">'1/to/'</span> <span class="o">+</span> <span class="n">c</span><span class="o">.</span><span class="n">level</span> <span class="c1"># in case of gaussian grid</span> + <span class="bp">self</span><span class="o">.</span><span class="n">gaussian</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">gaussian</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">grid</span> + <span class="bp">self</span><span class="o">.</span><span class="n">area</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">area</span> + <span class="bp">self</span><span class="o">.</span><span class="n">purefc</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span> + <span class="bp">self</span><span class="o">.</span><span class="n">outputfilelist</span> <span class="o">=</span> <span class="p">[]</span> + + <span class="c1"># Define the different types of field combinations (type, time, step)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">types</span> <span class="o">=</span> <span class="p">{}</span> + <span class="c1"># Define the parameters and their level types, level list and</span> + <span class="c1"># grid resolution for the retrieval job</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span> <span class="o">=</span> <span class="p">{}</span> + + <span class="k">if</span> <span class="n">fluxes</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_create_params_fluxes</span><span class="p">()</span> + <span class="k">else</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_create_params</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">gauss</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">eta</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">omega</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">cwc</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">wrf</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">fluxes</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_create_field_types_fluxes</span><span class="p">()</span> <span class="k">else</span><span class="p">:</span> - <span class="k">for</span> <span class="n">ty</span><span class="p">,</span> <span class="n">st</span><span class="p">,</span> <span class="n">ti</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">step</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">time</span><span class="p">):</span> - <span class="n">btlist</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="mi">24</span><span class="p">)</span> - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span> <span class="o">==</span> <span class="s1">'12'</span><span class="p">:</span> - <span class="n">btlist</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="mi">12</span><span class="p">]</span> - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span> <span class="o">==</span> <span class="s1">'00'</span><span class="p">:</span> - <span class="n">btlist</span> <span class="o">=</span> <span class="p">[</span><span class="mi">13</span><span class="p">,</span> <span class="mi">14</span><span class="p">,</span> <span class="mi">15</span><span class="p">,</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span class="p">,</span> <span class="mi">18</span><span class="p">,</span> <span class="mi">19</span><span class="p">,</span> <span class="mi">20</span><span class="p">,</span> <span class="mi">21</span><span class="p">,</span> <span class="mi">22</span><span class="p">,</span> <span class="mi">23</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span> - - <span class="k">if</span> <span class="p">((</span><span class="n">ty</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'AN'</span> <span class="ow">and</span> <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">time</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">%</span> <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> - <span class="p">(</span><span class="n">ty</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">!=</span> <span class="s1">'AN'</span> <span class="ow">and</span> <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">step</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">%</span> <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> - <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">step</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">%</span> <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">))</span> <span class="p">)</span> <span class="ow">and</span> \ - <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">time</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="ow">in</span> <span class="n">btlist</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">></span> <span class="mi">24</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_create_field_types</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">time</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">step</span><span class="p">)</span> + <span class="k">return</span> + + <span class="k">def</span> <span class="nf">_create_field_types</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ftype</span><span class="p">,</span> <span class="n">ftime</span><span class="p">,</span> <span class="n">fstep</span><span class="p">):</span> + <span class="sd">'''Create the combination of field type, time and forecast step.</span> + +<span class="sd"> Parameters:</span> +<span class="sd"> -----------</span> +<span class="sd"> ftype : list of str</span> +<span class="sd"> List of field types.</span> + +<span class="sd"> ftime : list of str</span> +<span class="sd"> The time in hours of the field.</span> + +<span class="sd"> fstep : str</span> +<span class="sd"> Specifies the forecast time step from forecast base time.</span> +<span class="sd"> Valid values are hours (HH) from forecast base time.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> + <span class="k">for</span> <span class="n">ty</span><span class="p">,</span> <span class="n">st</span><span class="p">,</span> <span class="n">ti</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">ftype</span><span class="p">,</span> <span class="n">fstep</span><span class="p">,</span> <span class="n">ftime</span><span class="p">):</span> + <span class="n">btlist</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="mi">24</span><span class="p">)</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">basetime</span> <span class="o">==</span> <span class="s1">'12'</span><span class="p">:</span> + <span class="n">btlist</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="mi">12</span><span class="p">]</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">basetime</span> <span class="o">==</span> <span class="s1">'00'</span><span class="p">:</span> + <span class="n">btlist</span> <span class="o">=</span> <span class="p">[</span><span class="mi">13</span><span class="p">,</span> <span class="mi">14</span><span class="p">,</span> <span class="mi">15</span><span class="p">,</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span class="p">,</span> <span class="mi">18</span><span class="p">,</span> <span class="mi">19</span><span class="p">,</span> <span class="mi">20</span><span class="p">,</span> <span class="mi">21</span><span class="p">,</span> <span class="mi">22</span><span class="p">,</span> <span class="mi">23</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span> + + <span class="c1"># if ((ty.upper() == 'AN' and (int(c.time[i]) % int(c.dtime)) == 0) or</span> + <span class="c1"># (ty.upper() != 'AN' and (int(c.step[i]) % int(c.dtime)) == 0 and</span> + <span class="c1"># (int(c.step[i]) % int(c.dtime) == 0)) ) and \</span> + <span class="c1"># (int(c.time[i]) in btlist or c.purefc):</span> + + <span class="k">if</span> <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">ti</span><span class="p">)</span> <span class="ow">in</span> <span class="n">btlist</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> + + <span class="k">if</span> <span class="p">((</span><span class="n">ty</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'AN'</span> <span class="ow">and</span> <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">ti</span><span class="p">)</span> <span class="o">%</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> + <span class="p">(</span><span class="n">ty</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">!=</span> <span class="s1">'AN'</span> <span class="ow">and</span> <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">st</span><span class="p">)</span> <span class="o">%</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)):</span> <span class="k">if</span> <span class="n">ty</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'times'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'steps'</span><span class="p">:</span> <span class="s1">''</span><span class="p">}</span> @@ -337,118 +456,153 @@ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'steps'</span><span class="p">]:</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'steps'</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/'</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'steps'</span><span class="p">]</span> <span class="o">+=</span> <span class="n">st</span> - <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span> + <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span> + <span class="k">return</span> - <span class="bp">self</span><span class="o">.</span><span class="n">marsclass</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">marsclass</span> - <span class="bp">self</span><span class="o">.</span><span class="n">stream</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">stream</span> - <span class="bp">self</span><span class="o">.</span><span class="n">number</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">number</span> - <span class="bp">self</span><span class="o">.</span><span class="n">resol</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">resol</span> - <span class="bp">self</span><span class="o">.</span><span class="n">accuracy</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">accuracy</span> - <span class="bp">self</span><span class="o">.</span><span class="n">level</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">level</span> - <span class="bp">self</span><span class="o">.</span><span class="n">expver</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">expver</span> - <span class="bp">self</span><span class="o">.</span><span class="n">levelist</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">levelist</span> - <span class="c1"># for gaussian grid retrieval</span> - <span class="bp">self</span><span class="o">.</span><span class="n">glevelist</span> <span class="o">=</span> <span class="s1">'1/to/'</span> <span class="o">+</span> <span class="n">c</span><span class="o">.</span><span class="n">level</span> - <span class="bp">self</span><span class="o">.</span><span class="n">gaussian</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">gaussian</span> + <span class="k">def</span> <span class="nf">_create_field_types_fluxes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">'''Create the combination of field type, time and forecast step</span> +<span class="sd"> for the flux data.</span> - <span class="k">if</span> <span class="s1">'N'</span> <span class="ow">in</span> <span class="n">c</span><span class="o">.</span><span class="n">grid</span><span class="p">:</span> <span class="c1"># Gaussian output grid</span> - <span class="bp">self</span><span class="o">.</span><span class="n">grid</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">grid</span> - <span class="bp">self</span><span class="o">.</span><span class="n">area</span> <span class="o">=</span> <span class="s1">'G'</span> - <span class="k">else</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">grid</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{}</span><span class="s1">/</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">grid</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">grid</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span><span class="p">)</span> - <span class="bp">self</span><span class="o">.</span><span class="n">area</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{}</span><span class="s1">/</span><span class="si">{}</span><span class="s1">/</span><span class="si">{}</span><span class="s1">/</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">upper</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span><span class="p">,</span> - <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">left</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span><span class="p">,</span> - <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">lower</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span><span class="p">,</span> - <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">right</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span><span class="p">)</span> +<span class="sd"> Parameters:</span> +<span class="sd"> -----------</span> - <span class="bp">self</span><span class="o">.</span><span class="n">outputfilelist</span> <span class="o">=</span> <span class="p">[]</span> +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> '''</span> + <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">acctype</span><span class="p">)]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'times'</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">acctime</span><span class="p">),</span> + <span class="s1">'steps'</span><span class="p">:</span> <span class="s1">'</span><span class="si">{}</span><span class="s1">/to/</span><span class="si">{}</span><span class="s1">/by/</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">dtime</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">accmaxstep</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">dtime</span><span class="p">)}</span> + <span class="k">return</span> - <span class="c1"># Now comes the nasty part that deals with the different</span> - <span class="c1"># scenarios we have:</span> - <span class="c1"># 1) Calculation of etadot on</span> - <span class="c1"># a) Gaussian grid</span> - <span class="c1"># b) Output grid</span> - <span class="c1"># c) Output grid using parameter 77 retrieved from MARS</span> - <span class="c1"># 3) Calculation/Retrieval of omega</span> - <span class="c1"># 4) Download also data for WRF</span> - - <span class="c1"># Different grids need different retrievals</span> - <span class="c1"># SH = Spherical Harmonics, GG = Gaussian Grid,</span> - <span class="c1"># OG = Output Grid, ML = MultiLevel, SL = SingleLevel</span> - <span class="bp">self</span><span class="o">.</span><span class="n">params</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'SH__ML'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'SH__SL'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> - <span class="s1">'GG__ML'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'GG__SL'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> - <span class="s1">'OG__ML'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'OG__SL'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> - <span class="s1">'OG_OROLSM_SL'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'OG_acc_SL'</span><span class="p">:</span> <span class="s1">''</span><span class="p">}</span> - <span class="c1"># the self.params dictionary stores a list of</span> - <span class="c1"># [param, levtype, levelist, grid] per key</span> - - <span class="k">if</span> <span class="n">fluxes</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'SH__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'LNSP'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="s1">'OFF'</span><span class="p">]</span> - <span class="c1"># "SD/MSL/TCC/10U/10V/2T/2D/129/172"</span> - <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"141/151/164/165/166/167/168/129/172"</span><span class="p">,</span> \ - <span class="s1">'SFC'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span> - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">addpar</span><span class="p">:</span> - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">addpar</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'/'</span><span class="p">:</span> - <span class="n">c</span><span class="o">.</span><span class="n">addpar</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">addpar</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> - <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__SL'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="s1">'/'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">addpar</span><span class="p">)</span> - - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">marsclass</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'EA'</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">marsclass</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'EP'</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG_OROLSM__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"160/27/28/244"</span><span class="p">,</span> - <span class="s1">'SFC'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span> - <span class="k">else</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG_OROLSM__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"160/27/28/173"</span><span class="p">,</span> \ - <span class="s1">'SFC'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span> - - <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'T/Q'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">levelist</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span> - - <span class="c1">#if c.gauss == '0' and c.eta == '1':</span> - <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">gauss</span> <span class="ow">and</span> <span class="n">c</span><span class="o">.</span><span class="n">eta</span><span class="p">:</span> - <span class="c1"># the simplest case</span> - <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/U/V/77'</span> - <span class="c1">#elif c.gauss == '0' and c.eta == '0':</span> - <span class="k">elif</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">gauss</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">eta</span><span class="p">:</span> - <span class="c1"># this is not recommended (inaccurate)</span> - <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/U/V'</span> - <span class="c1">#elif c.gauss == '1' and c.eta == '0':</span> - <span class="k">elif</span> <span class="n">c</span><span class="o">.</span><span class="n">gauss</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">eta</span><span class="p">:</span> - <span class="c1"># this is needed for data before 2008, or for reanalysis data</span> - <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'GG__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'Q'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> \ - <span class="s1">'</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">((</span><span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">resol</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)]</span> - <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'SH__ML'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'U/V/D'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">glevelist</span><span class="p">,</span> <span class="s1">'OFF'</span><span class="p">]</span> - <span class="k">else</span><span class="p">:</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'Warning: This is a very costly parameter combination, </span><span class="se">\</span> -<span class="s1"> use only for debugging!'</span><span class="p">)</span> - <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'GG__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'Q'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> \ - <span class="s1">'</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">((</span><span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">resol</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)]</span> - <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'GG__ML'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'U/V/D/77'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">glevelist</span><span class="p">,</span> \ - <span class="s1">'</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">((</span><span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">resol</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)]</span> + <span class="k">def</span> <span class="nf">_create_params</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gauss</span><span class="p">,</span> <span class="n">eta</span><span class="p">,</span> <span class="n">omega</span><span class="p">,</span> <span class="n">cwc</span><span class="p">,</span> <span class="n">wrf</span><span class="p">):</span> + <span class="sd">'''Define the specific parameter settings for retrievment.</span> + +<span class="sd"> The different parameters need specific grid types and level types</span> +<span class="sd"> for retrievement. We might get following combination of types</span> +<span class="sd"> (depending on selection and availability):</span> +<span class="sd"> (These are short cuts for the grib file names (leading sequence)</span> +<span class="sd"> SH__ML, OG__ML, GG__ML, SH__SL, OG__SL, GG__SL, OG_OROLSM_SL</span> +<span class="sd"> where:</span> +<span class="sd"> SH = Spherical Harmonics, GG = Gaussian Grid, OG = Output Grid,</span> +<span class="sd"> ML = Model Level, SL = Surface Level</span> + +<span class="sd"> For each of this combination there is a list of parameter names,</span> +<span class="sd"> the level type, the level list and the grid resolution.</span> + +<span class="sd"> There are different scenarios for data extraction from MARS:</span> +<span class="sd"> 1) Retrieval of etadot</span> +<span class="sd"> eta=1, gauss=0, omega=0</span> +<span class="sd"> 2) Calculation of etadot from divergence</span> +<span class="sd"> eta=0, gauss=1, omega=0</span> +<span class="sd"> 3) Calculation of etadot from omega (for makes sense for debugging)</span> +<span class="sd"> eta=0, gauss=0, omega=1</span> +<span class="sd"> 4) Retrieval and Calculation of etadot (only for debugging)</span> +<span class="sd"> eta=1, gauss=1, omega=0</span> +<span class="sd"> 5) Download also specific model and surface level data for FLEXPART-WRF</span> - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">omega</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/W'</span> +<span class="sd"> Parameters:</span> +<span class="sd"> -----------</span> +<span class="sd"> gauss : int</span> +<span class="sd"> Gaussian grid is retrieved.</span> - <span class="c1"># add cloud water content if necessary</span> - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">cwc</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/CLWC/CIWC'</span> +<span class="sd"> eta : int</span> +<span class="sd"> Etadot parameter will be directly retrieved.</span> - <span class="c1"># add vorticity and geopotential height for WRF if necessary</span> - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">wrf</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/Z/VO'</span> - <span class="k">if</span> <span class="s1">'/D'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/D'</span> - <span class="c1">#wrf_sfc = 'sp/msl/skt/2t/10u/10v/2d/z/lsm/sst/ci/sd/stl1/ /</span> - <span class="c1"># stl2/stl3/stl4/swvl1/swvl2/swvl3/swvl4'.upper()</span> - <span class="n">wrf_sfc</span> <span class="o">=</span> <span class="s1">'134/235/167/165/166/168/129/172/34/31/141/ </span><span class="se">\</span> -<span class="s1"> 139/170/183/236/39/40/41/42'</span> - <span class="n">lwrt_sfc</span> <span class="o">=</span> <span class="n">wrf_sfc</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)</span> - <span class="k">for</span> <span class="n">par</span> <span class="ow">in</span> <span class="n">lwrt_sfc</span><span class="p">:</span> - <span class="k">if</span> <span class="n">par</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__SL'</span><span class="p">][</span><span class="mi">0</span><span class="p">]:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__SL'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="n">par</span> +<span class="sd"> omega : int</span> +<span class="sd"> The omega paramterwill be retrieved.</span> + +<span class="sd"> cwc : int</span> +<span class="sd"> The cloud liquid and ice water content will be retrieved.</span> + +<span class="sd"> wrf : int</span> +<span class="sd"> Additional model level and surface level data will be retrieved for</span> +<span class="sd"> WRF/FLEXPART-WRF simulations.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> '''</span> + <span class="c1"># SURFACE FIELDS</span> + <span class="c1">#-----------------------------------------------------------------------</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'SH__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'LNSP'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="s1">'OFF'</span><span class="p">]</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'SD/MSL/TCC/10U/10V/2T/2D/Z/LSM'</span><span class="p">,</span> \ + <span class="s1">'SFC'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">addpar</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__SL'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">addpar</span> + + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">marsclass</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'EA'</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">marsclass</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'EP'</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG_OROLSM__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"SDOR/CVL/CVH/FSR"</span><span class="p">,</span> + <span class="s1">'SFC'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span> + <span class="k">else</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG_OROLSM__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"SDOR/CVL/CVH/SR"</span><span class="p">,</span> \ + <span class="s1">'SFC'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span> + + <span class="c1"># MODEL LEVEL FIELDS</span> + <span class="c1">#-----------------------------------------------------------------------</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'T/Q'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">levelist</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span> + + <span class="k">if</span> <span class="ow">not</span> <span class="n">gauss</span> <span class="ow">and</span> <span class="n">eta</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/U/V/ETADOT'</span> + <span class="k">elif</span> <span class="n">gauss</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">eta</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'GG__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'Q'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> \ + <span class="s1">'</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">((</span><span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">resol</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)]</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'SH__ML'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'U/V/D'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">glevelist</span><span class="p">,</span> <span class="s1">'OFF'</span><span class="p">]</span> + <span class="k">elif</span> <span class="ow">not</span> <span class="n">gauss</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">eta</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/U/V'</span> <span class="k">else</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG_acc_SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"LSP/CP/SSHF/EWSS/NSSS/SSR"</span><span class="p">,</span> \ - <span class="s1">'SFC'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'Warning: Collecting etadot and parameters for gaussian grid </span><span class="se">\</span> +<span class="s1"> is a very costly parameter combination, </span><span class="se">\</span> +<span class="s1"> use this combination only for debugging!'</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'GG__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'Q'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> \ + <span class="s1">'</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">((</span><span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">resol</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)]</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'GG__ML'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'U/V/D/77'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">glevelist</span><span class="p">,</span> \ + <span class="s1">'</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">((</span><span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">resol</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)]</span> + + <span class="k">if</span> <span class="n">omega</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/W'</span> + + <span class="k">if</span> <span class="n">cwc</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/CLWC/CIWC'</span> + + <span class="c1"># ADDITIONAL FIELDS FOR FLEXPART-WRF MODEL (IF QUESTIONED)</span> + <span class="c1">#-----------------------------------------------------------------------</span> + <span class="k">if</span> <span class="n">wrf</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/Z/VO'</span> + <span class="k">if</span> <span class="s1">'/D'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/D'</span> + <span class="n">wrf_sfc</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'SP'</span><span class="p">,</span><span class="s1">'SKT'</span><span class="p">,</span><span class="s1">'SST'</span><span class="p">,</span><span class="s1">'CI'</span><span class="p">,</span><span class="s1">'STL1'</span><span class="p">,</span><span class="s1">'STL2'</span><span class="p">,</span> <span class="s1">'STL3'</span><span class="p">,</span><span class="s1">'STL4'</span><span class="p">,</span> + <span class="s1">'SWVL1'</span><span class="p">,</span><span class="s1">'SWVL2'</span><span class="p">,</span><span class="s1">'SWVL3'</span><span class="p">,</span><span class="s1">'SWVL4'</span><span class="p">]</span> + <span class="k">for</span> <span class="n">par</span> <span class="ow">in</span> <span class="n">wrf_sfc</span><span class="p">:</span> + <span class="k">if</span> <span class="n">par</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__SL'</span><span class="p">][</span><span class="mi">0</span><span class="p">]:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__SL'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="n">par</span> + + <span class="k">return</span> + + + <span class="k">def</span> <span class="nf">_create_params_fluxes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">'''Define the parameter setting for flux data.</span> +<span class="sd"> Flux data are accumulated fields in time and are stored on the</span> +<span class="sd"> surface level. The leading short cut name for the grib files is:</span> +<span class="sd"> "OG_acc_SL" with OG for Regular Output Grid, SL for Surface Level, and</span> +<span class="sd"> acc for Accumulated Grid.</span> +<span class="sd"> The params dictionary stores a list of parameter names, the level type,</span> +<span class="sd"> the level list and the grid resolution.</span> + +<span class="sd"> The flux data are: LSP/CP/SSHF/EWSS/NSSS/SSR</span> + +<span class="sd"> Parameters:</span> +<span class="sd"> -----------</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG_acc_SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"LSP/CP/SSHF/EWSS/NSSS/SSR"</span><span class="p">,</span> \ + <span class="s1">'SFC'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span> <span class="k">return</span> @@ -458,19 +612,19 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> ftype : :obj:`string`</span> +<span class="sd"> ftype : str</span> <span class="sd"> Shortcut name of the type of the field. E.g. AN, FC, PF, ...</span> -<span class="sd"> param : :obj:`string`</span> +<span class="sd"> param : str</span> <span class="sd"> Shortcut of the grid type. E.g. SH__ML, SH__SL, GG__ML,</span> <span class="sd"> GG__SL, OG__ML, OG__SL, OG_OROLSM_SL, OG_acc_SL</span> -<span class="sd"> date : :obj:`string`</span> +<span class="sd"> date : str</span> <span class="sd"> The date period of the grib data to be stored in this file.</span> <span class="sd"> Return</span> <span class="sd"> ------</span> -<span class="sd"> targetname : :obj:`string`</span> +<span class="sd"> targetname : str</span> <span class="sd"> The target filename for the grib data.</span> <span class="sd"> '''</span> <span class="n">targetname</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span> <span class="o">+</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="n">ftype</span> <span class="o">+</span> <span class="n">param</span> <span class="o">+</span> <span class="s1">'.'</span> <span class="o">+</span> <span class="n">date</span> <span class="o">+</span> <span class="s1">'.'</span> <span class="o">+</span> @@ -485,13 +639,13 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> request : :obj:`integer`</span> +<span class="sd"> request : int</span> <span class="sd"> Selects the mode of retrieval.</span> <span class="sd"> 0: Retrieves the data from ECMWF.</span> <span class="sd"> 1: Prints the mars requests to an output file.</span> <span class="sd"> 2: Retrieves the data and prints the mars request.</span> -<span class="sd"> par_dict : :obj:`dictionary`</span> +<span class="sd"> par_dict : dictionary</span> <span class="sd"> Contains all parameter which have to be set for creating the</span> <span class="sd"> Mars Retrievals. The parameter are:</span> <span class="sd"> marsclass, dataset, stream, type, levtype, levelist, resol,</span> @@ -547,19 +701,19 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> keys : :obj:`dictionary`</span> +<span class="sd"> keys : dictionary</span> <span class="sd"> List of parameter names which serves as index.</span> -<span class="sd"> inputfiles : :obj:`UioFiles`</span> +<span class="sd"> inputfiles : UioFiles</span> <span class="sd"> Contains a list of files.</span> <span class="sd"> Return</span> <span class="sd"> ------</span> -<span class="sd"> iid : :obj:`grib_index`</span> +<span class="sd"> iid : codes_index</span> <span class="sd"> This is a grib specific index structure to access</span> <span class="sd"> messages in a file.</span> -<span class="sd"> index_vals : :obj:`list`</span> +<span class="sd"> index_vals : list of list of str</span> <span class="sd"> Contains the values from the keys used for a distinct selection</span> <span class="sd"> of grib messages in processing the grib files.</span> <span class="sd"> Content looks like e.g.:</span> @@ -572,23 +726,19 @@ <span class="n">indexfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">_config</span><span class="o">.</span><span class="n">FILE_GRIB_INDEX</span><span class="p">)</span> <span class="n">silent_remove</span><span class="p">(</span><span class="n">indexfile</span><span class="p">)</span> - <span class="n">grib</span> <span class="o">=</span> <span class="n">GribTools</span><span class="p">(</span><span class="n">inputfiles</span><span class="o">.</span><span class="n">files</span><span class="p">)</span> + <span class="n">grib</span> <span class="o">=</span> <span class="n">GribUtil</span><span class="p">(</span><span class="n">inputfiles</span><span class="o">.</span><span class="n">files</span><span class="p">)</span> <span class="c1"># creates new index file</span> <span class="n">iid</span> <span class="o">=</span> <span class="n">grib</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">index_keys</span><span class="o">=</span><span class="n">index_keys</span><span class="p">,</span> <span class="n">index_file</span><span class="o">=</span><span class="n">indexfile</span><span class="p">)</span> <span class="c1"># read the values of index keys</span> <span class="n">index_vals</span> <span class="o">=</span> <span class="p">[]</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">index_keys</span><span class="p">:</span> - <span class="c1">#index_vals.append(grib_index_get(iid, key))</span> - <span class="c1">#print(index_vals[-1])</span> - <span class="n">key_vals</span> <span class="o">=</span> <span class="n">grib_index_get</span><span class="p">(</span><span class="n">iid</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span> - <span class="nb">print</span><span class="p">(</span><span class="n">key_vals</span><span class="p">)</span> - <span class="c1"># have to sort the steps for disaggregation,</span> + <span class="n">key_vals</span> <span class="o">=</span> <span class="n">codes_index_get</span><span class="p">(</span><span class="n">iid</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span> + <span class="c1"># have to sort the key values for correct disaggregation,</span> <span class="c1"># therefore convert to int first</span> - <span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="s1">'step'</span><span class="p">:</span> - <span class="n">key_vals</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">key_vals</span><span class="p">]</span> - <span class="n">key_vals</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span> - <span class="n">key_vals</span> <span class="o">=</span> <span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">key_vals</span><span class="p">]</span> + <span class="n">key_vals</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">key_vals</span><span class="p">]</span> + <span class="n">key_vals</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span> + <span class="n">key_vals</span> <span class="o">=</span> <span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">key_vals</span><span class="p">]</span> <span class="n">index_vals</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">key_vals</span><span class="p">)</span> <span class="c1"># index_vals looks for example like:</span> <span class="c1"># index_vals[0]: ('20171106', '20171107', '20171108') ; date</span> @@ -605,7 +755,7 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> server : :obj:`ECMWFService` or :obj:`ECMWFDataServer`</span> +<span class="sd"> server : ECMWFService or ECMWFDataServer</span> <span class="sd"> The connection to the ECMWF server. This is different</span> <span class="sd"> for member state users which have full access and non</span> <span class="sd"> member state users which have only access to the public</span> @@ -613,17 +763,17 @@ <span class="sd"> "public"; for public access its True (ECMWFDataServer)</span> <span class="sd"> for member state users its False (ECMWFService)</span> -<span class="sd"> dates : :obj:`string`</span> +<span class="sd"> dates : str</span> <span class="sd"> Contains start and end date of the retrieval in the format</span> <span class="sd"> "YYYYMMDD/to/YYYYMMDD"</span> -<span class="sd"> request : :obj:`integer`</span> +<span class="sd"> request : int</span> <span class="sd"> Selects the mode of retrieval.</span> <span class="sd"> 0: Retrieves the data from ECMWF.</span> <span class="sd"> 1: Prints the mars requests to an output file.</span> <span class="sd"> 2: Retrieves the data and prints the mars request.</span> -<span class="sd"> inputdir : :obj:`string`, optional</span> +<span class="sd"> inputdir : str, optional</span> <span class="sd"> Path to the directory where the retrieved data is about</span> <span class="sd"> to be stored. The default is the current directory ('.').</span> @@ -692,8 +842,6 @@ <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'area'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">area</span> <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'gaussian'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">gaussian</span> - <span class="k">if</span> <span class="n">pk</span> <span class="o">==</span> <span class="s1">'OG__SL'</span><span class="p">:</span> - <span class="k">pass</span> <span class="k">if</span> <span class="n">pk</span> <span class="o">==</span> <span class="s1">'OG_OROLSM__SL'</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">oro</span><span class="p">:</span> <span class="n">oro</span> <span class="o">=</span> <span class="kc">True</span> <span class="c1"># in CERA20C (class EP) there is no stream "OPER"!</span> @@ -813,11 +961,11 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> c : :obj:`ControlFile`</span> +<span class="sd"> c : ControlFile</span> <span class="sd"> Contains all the parameters of CONTROL file and</span> <span class="sd"> command line.</span> -<span class="sd"> filename : :obj:`string`</span> +<span class="sd"> filename : str</span> <span class="sd"> Name of the namelist file.</span> <span class="sd"> Return</span> @@ -827,50 +975,72 @@ <span class="kn">from</span> <span class="nn">genshi.template.text</span> <span class="k">import</span> <span class="n">NewTextTemplate</span> <span class="kn">from</span> <span class="nn">genshi.template</span> <span class="k">import</span> <span class="n">TemplateLoader</span> - - <span class="n">loader</span> <span class="o">=</span> <span class="n">TemplateLoader</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> - <span class="n">namelist_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_NAMELIST</span><span class="p">,</span> - <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span> - - <span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">inputdir</span> - <span class="n">area</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">area</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">))</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">float</span><span class="p">)</span> - <span class="n">grid</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">))</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">float</span><span class="p">)</span> - - <span class="k">if</span> <span class="n">area</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">></span> <span class="n">area</span><span class="p">[</span><span class="mi">3</span><span class="p">]:</span> - <span class="n">area</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-=</span> <span class="mi">360</span> - <span class="n">maxl</span> <span class="o">=</span> <span class="nb">int</span><span class="p">((</span><span class="n">area</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">-</span> <span class="n">area</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o">/</span> <span class="n">grid</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o">+</span> <span class="mi">1</span> - <span class="n">maxb</span> <span class="o">=</span> <span class="nb">int</span><span class="p">((</span><span class="n">area</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">area</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> <span class="o">/</span> <span class="n">grid</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">+</span> <span class="mi">1</span> - - <span class="n">stream</span> <span class="o">=</span> <span class="n">namelist_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span> - <span class="n">maxl</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">maxl</span><span class="p">),</span> - <span class="n">maxb</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">maxb</span><span class="p">),</span> - <span class="n">mlevel</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">level</span><span class="p">),</span> - <span class="n">mlevelist</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">levelist</span><span class="p">),</span> - <span class="n">mnauf</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">resol</span><span class="p">),</span> - <span class="n">metapar</span> <span class="o">=</span> <span class="s1">'77'</span><span class="p">,</span> - <span class="n">rlo0</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">area</span><span class="p">[</span><span class="mi">1</span><span class="p">]),</span> - <span class="n">rlo1</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">area</span><span class="p">[</span><span class="mi">3</span><span class="p">]),</span> - <span class="n">rla0</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">area</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> - <span class="n">rla1</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">area</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> - <span class="n">momega</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">omega</span><span class="p">),</span> - <span class="n">momegadiff</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">omegadiff</span><span class="p">),</span> - <span class="n">mgauss</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">gauss</span><span class="p">),</span> - <span class="n">msmooth</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">smooth</span><span class="p">),</span> - <span class="n">meta</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">eta</span><span class="p">),</span> - <span class="n">metadiff</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">etadiff</span><span class="p">),</span> - <span class="n">mdpdeta</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dpdeta</span><span class="p">)</span> - <span class="p">)</span> - - <span class="n">namelistfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">_config</span><span class="o">.</span><span class="n">FILE_NAMELIST</span><span class="p">)</span> - - <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">namelistfile</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> - <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">'text'</span><span class="p">))</span> + <span class="kn">from</span> <span class="nn">genshi.template.eval</span> <span class="k">import</span> <span class="n">UndefinedError</span> + + <span class="k">try</span><span class="p">:</span> + <span class="n">loader</span> <span class="o">=</span> <span class="n">TemplateLoader</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> + <span class="n">namelist_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_NAMELIST</span><span class="p">,</span> + <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">inputdir</span> + <span class="n">area</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">area</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">))</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">float</span><span class="p">)</span> + <span class="n">grid</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">))</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">float</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">area</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">></span> <span class="n">area</span><span class="p">[</span><span class="mi">3</span><span class="p">]:</span> + <span class="n">area</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-=</span> <span class="mi">360</span> + <span class="n">maxl</span> <span class="o">=</span> <span class="nb">int</span><span class="p">((</span><span class="n">area</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">-</span> <span class="n">area</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o">/</span> <span class="n">grid</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o">+</span> <span class="mi">1</span> + <span class="n">maxb</span> <span class="o">=</span> <span class="nb">int</span><span class="p">((</span><span class="n">area</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">area</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> <span class="o">/</span> <span class="n">grid</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">+</span> <span class="mi">1</span> + + <span class="n">stream</span> <span class="o">=</span> <span class="n">namelist_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span> + <span class="n">maxl</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">maxl</span><span class="p">),</span> + <span class="n">maxb</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">maxb</span><span class="p">),</span> + <span class="n">mlevel</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">level</span><span class="p">),</span> + <span class="n">mlevelist</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">levelist</span><span class="p">),</span> + <span class="n">mnauf</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">resol</span><span class="p">),</span> + <span class="n">metapar</span> <span class="o">=</span> <span class="s1">'77'</span><span class="p">,</span> + <span class="n">rlo0</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">area</span><span class="p">[</span><span class="mi">1</span><span class="p">]),</span> + <span class="n">rlo1</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">area</span><span class="p">[</span><span class="mi">3</span><span class="p">]),</span> + <span class="n">rla0</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">area</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> + <span class="n">rla1</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">area</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> + <span class="n">momega</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">omega</span><span class="p">),</span> + <span class="n">momegadiff</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">omegadiff</span><span class="p">),</span> + <span class="n">mgauss</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">gauss</span><span class="p">),</span> + <span class="n">msmooth</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">smooth</span><span class="p">),</span> + <span class="n">meta</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">eta</span><span class="p">),</span> + <span class="n">metadiff</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">etadiff</span><span class="p">),</span> + <span class="n">mdpdeta</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dpdeta</span><span class="p">)</span> + <span class="p">)</span> + <span class="k">except</span> <span class="n">UndefinedError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate namelist '</span> <span class="o">+</span> + <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_NAMELIST</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template '</span> <span class="o">+</span> + <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_NAMELIST</span><span class="p">)</span> + + <span class="k">try</span><span class="p">:</span> + <span class="n">namelistfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">_config</span><span class="o">.</span><span class="n">FILE_NAMELIST</span><span class="p">)</span> + + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">namelistfile</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">'text'</span><span class="p">))</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to write '</span> <span class="o">+</span> + <span class="n">namelistfile</span><span class="p">)</span> <span class="k">return</span></div> <div class="viewcode-block" id="EcFlexpart.deacc_fluxes"><a class="viewcode-back" href="../api.html#EcFlexpart.EcFlexpart.deacc_fluxes">[docs]</a> <span class="k">def</span> <span class="nf">deacc_fluxes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inputfiles</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span> - <span class="sd">'''Goes through all flux fields in ordered time and de-accumulate</span> + <span class="sd">'''De-accumulate and disaggregate flux data.</span> + +<span class="sd"> Goes through all flux fields in ordered time and de-accumulate</span> <span class="sd"> the fields. Afterwards the fields are disaggregated in time.</span> <span class="sd"> Different versions of disaggregation is provided for rainfall</span> <span class="sd"> data (darain, modified linear) and the surface fluxes and</span> @@ -878,10 +1048,10 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> inputfiles : :obj:`UioFiles`</span> -<span class="sd"> Contains a list of files.</span> +<span class="sd"> inputfiles : UioFiles</span> +<span class="sd"> Contains the list of files that contain flux data.</span> -<span class="sd"> c : :obj:`ControlFile`</span> +<span class="sd"> c : ControlFile</span> <span class="sd"> Contains all the parameters of CONTROL file and</span> <span class="sd"> command line.</span> @@ -904,18 +1074,38 @@ <span class="n">index_keys</span><span class="p">)</span> <span class="c1"># index_vals looks like e.g.:</span> <span class="c1"># index_vals[0]: ('20171106', '20171107', '20171108') ; date</span> - <span class="c1"># index_vals[1]: ('0', '1200', '1800', '600') ; time</span> - <span class="c1"># index_vals[2]: ('0', '12', '3', '6', '9') ; stepRange</span> + <span class="c1"># index_vals[1]: ('0', '600', '1200', '1800') ; time</span> + <span class="c1"># index_vals[2]: ('0', '3', '6', '9', '12') ; stepRange</span> - <span class="n">valsdict</span> <span class="o">=</span> <span class="p">{}</span> - <span class="n">svalsdict</span> <span class="o">=</span> <span class="p">{}</span> -<span class="c1"># stepsdict = {}</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">rrint</span><span class="p">:</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> + <span class="n">start_date</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">start_date</span> <span class="o">+</span> <span class="s1">'00'</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> + <span class="n">end_date</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span> <span class="o">+</span> <span class="s1">'23'</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">sdate_str</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">start_date</span> <span class="o">+</span> <span class="s1">'</span><span class="si">{:0>2}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">index_vals</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> + <span class="n">start_date</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">sdate_str</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> + <span class="n">edate_str</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">end_date</span> <span class="o">+</span> <span class="s1">'</span><span class="si">{:0>2}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">index_vals</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span> + <span class="n">end_date</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">edate_str</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> + <span class="n">end_date</span> <span class="o">=</span> <span class="n">end_date</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="n">c</span><span class="o">.</span><span class="n">maxstep</span><span class="p">)</span> + + <span class="n">info</span> <span class="o">=</span> <span class="n">get_informations</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> + <span class="n">inputfiles</span><span class="o">.</span><span class="n">files</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span> + <span class="n">dims</span> <span class="o">=</span> <span class="n">get_dimensions</span><span class="p">(</span><span class="n">info</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">,</span> <span class="n">index_vals</span><span class="p">,</span> + <span class="n">start_date</span><span class="p">,</span> <span class="n">end_date</span><span class="p">)</span> + <span class="c1"># create numpy array</span> + <span class="n">lsp_np</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">dims</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">dims</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">dims</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span> + <span class="n">cp_np</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">dims</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">dims</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">dims</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span> + <span class="n">it_lsp</span> <span class="o">=</span> <span class="mi">0</span> + <span class="n">it_cp</span> <span class="o">=</span> <span class="mi">0</span> + <span class="n">date_list</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">step_list</span> <span class="o">=</span> <span class="p">[]</span> + + <span class="c1"># initialize dictionaries to store values</span> + <span class="n">orig_vals</span> <span class="o">=</span> <span class="p">{}</span> + <span class="n">deac_vals</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">pars</span><span class="p">:</span> - <span class="n">valsdict</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">p</span><span class="p">)]</span> <span class="o">=</span> <span class="p">[]</span> - <span class="n">svalsdict</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">p</span><span class="p">)]</span> <span class="o">=</span> <span class="p">[]</span> -<span class="c1"># stepsdict[str(p)] = []</span> - - <span class="nb">print</span><span class="p">(</span><span class="s1">'maxstep: '</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span><span class="p">)</span> + <span class="n">orig_vals</span><span class="p">[</span><span class="n">p</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">deac_vals</span><span class="p">[</span><span class="n">p</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span> <span class="c1"># "product" genereates each possible combination between the</span> <span class="c1"># values of the index keys</span> @@ -923,13 +1113,13 @@ <span class="c1"># e.g. prod = ('20170505', '0', '12')</span> <span class="c1"># ( date ,time, step)</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'current product: '</span><span class="p">,</span> <span class="n">prod</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'CURRENT PRODUCT: '</span><span class="p">,</span> <span class="n">prod</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">index_keys</span><span class="p">)):</span> - <span class="n">grib_index_select</span><span class="p">(</span><span class="n">iid</span><span class="p">,</span> <span class="n">index_keys</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">prod</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> + <span class="n">codes_index_select</span><span class="p">(</span><span class="n">iid</span><span class="p">,</span> <span class="n">index_keys</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">prod</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="c1"># get first id from current product</span> - <span class="n">gid</span> <span class="o">=</span> <span class="n">grib_new_from_index</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> + <span class="n">gid</span> <span class="o">=</span> <span class="n">codes_new_from_index</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> <span class="c1"># if there is no data for this specific time combination / product</span> <span class="c1"># skip the rest of the for loop and start with next timestep/product</span> @@ -937,16 +1127,19 @@ <span class="k">continue</span> <span class="c1"># create correct timestamp from the three time informations</span> - <span class="n">cdate</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">))</span> - <span class="n">ctime</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{:0>2}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">)</span><span class="o">/</span><span class="mi">100</span><span class="p">)</span> - <span class="n">cstep</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'step'</span><span class="p">))</span> + <span class="n">cdate</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">))</span> + <span class="n">time</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">)</span><span class="o">/</span><span class="mi">100</span> <span class="c1"># integer</span> + <span class="n">step</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'step'</span><span class="p">)</span> <span class="c1"># integer</span> + <span class="n">ctime</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{:0>2}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">time</span><span class="p">)</span> + <span class="n">cstep</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">step</span><span class="p">)</span> + <span class="n">t_date</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">cdate</span> <span class="o">+</span> <span class="n">ctime</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> - <span class="n">t_dt</span> <span class="o">=</span> <span class="n">t_date</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">cstep</span><span class="p">))</span> - <span class="n">t_m1dt</span> <span class="o">=</span> <span class="n">t_date</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">cstep</span><span class="p">)</span><span class="o">-</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> - <span class="n">t_m2dt</span> <span class="o">=</span> <span class="n">t_date</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">cstep</span><span class="p">)</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> + <span class="n">t_dt</span> <span class="o">=</span> <span class="n">t_date</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="n">step</span><span class="p">)</span> + <span class="n">t_m1dt</span> <span class="o">=</span> <span class="n">t_date</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="n">step</span><span class="o">-</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> + <span class="n">t_m2dt</span> <span class="o">=</span> <span class="n">t_date</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="n">step</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> <span class="n">t_enddate</span> <span class="o">=</span> <span class="kc">None</span> - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">></span> <span class="mi">12</span><span class="p">:</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> <span class="n">fnout</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="s1">'flux'</span> <span class="o">+</span> <span class="n">t_date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">.%H'</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'.</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">step</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">)))</span> @@ -965,122 +1158,323 @@ <span class="n">t_dt</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">))</span> <span class="nb">print</span><span class="p">(</span><span class="s2">"outputfile = "</span> <span class="o">+</span> <span class="n">fnout</span><span class="p">)</span> + <span class="n">f_handle</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fnout</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> + <span class="n">h_handle</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">hnout</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> + <span class="n">g_handle</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">gnout</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> - <span class="c1"># read message for message and store relevant data fields</span> + <span class="c1"># read message for message and store relevant data fields, where</span> <span class="c1"># data keywords are stored in pars</span> - <span class="k">while</span> <span class="mi">1</span><span class="p">:</span> + <span class="k">while</span> <span class="kc">True</span><span class="p">:</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">gid</span><span class="p">:</span> <span class="k">break</span> - <span class="n">cparamId</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'paramId'</span><span class="p">))</span> - <span class="n">step</span> <span class="o">=</span> <span class="n">grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'step'</span><span class="p">)</span> - <span class="n">time</span> <span class="o">=</span> <span class="n">grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">)</span> - <span class="n">ni</span> <span class="o">=</span> <span class="n">grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'Ni'</span><span class="p">)</span> - <span class="n">nj</span> <span class="o">=</span> <span class="n">grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'Nj'</span><span class="p">)</span> - <span class="k">if</span> <span class="n">cparamId</span> <span class="ow">in</span> <span class="n">valsdict</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span> - <span class="n">values</span> <span class="o">=</span> <span class="n">grib_get_values</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> - <span class="n">vdp</span> <span class="o">=</span> <span class="n">valsdict</span><span class="p">[</span><span class="n">cparamId</span><span class="p">]</span> - <span class="n">svdp</span> <span class="o">=</span> <span class="n">svalsdict</span><span class="p">[</span><span class="n">cparamId</span><span class="p">]</span> - <span class="c1"># sd = stepsdict[cparamId]</span> - - <span class="k">if</span> <span class="n">cparamId</span> <span class="o">==</span> <span class="s1">'142'</span> <span class="ow">or</span> <span class="n">cparamId</span> <span class="o">==</span> <span class="s1">'143'</span><span class="p">:</span> - <span class="n">fak</span> <span class="o">=</span> <span class="mf">1.</span> <span class="o">/</span> <span class="mf">1000.</span> - <span class="k">else</span><span class="p">:</span> - <span class="n">fak</span> <span class="o">=</span> <span class="mf">3600.</span> - - <span class="n">values</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="p">(</span><span class="n">nj</span><span class="p">,</span> <span class="n">ni</span><span class="p">)))</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span> <span class="o">/</span> <span class="n">fak</span> - <span class="n">vdp</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">values</span><span class="p">[:])</span> <span class="c1"># save the accumulated values</span> - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">marsclass</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'EA'</span> <span class="ow">or</span> \ - <span class="n">step</span> <span class="o"><=</span> <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">):</span> - <span class="n">svdp</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">values</span><span class="p">[:]</span> <span class="o">/</span> <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> - <span class="k">else</span><span class="p">:</span> <span class="c1"># deaccumulate values</span> - <span class="n">svdp</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">vdp</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">vdp</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">])</span> <span class="o">/</span> <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> - - <span class="nb">print</span><span class="p">(</span><span class="n">cparamId</span><span class="p">,</span> <span class="n">time</span><span class="p">,</span> <span class="n">step</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">values</span><span class="p">),</span> - <span class="n">values</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">np</span><span class="o">.</span><span class="n">std</span><span class="p">(</span><span class="n">values</span><span class="p">))</span> - - <span class="c1"># len(svdp) correspond to the time</span> - <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">svdp</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">3</span><span class="p">:</span> - <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">svdp</span><span class="p">)</span> <span class="o">></span> <span class="mi">3</span><span class="p">:</span> - <span class="k">if</span> <span class="n">cparamId</span> <span class="o">==</span> <span class="s1">'142'</span> <span class="ow">or</span> <span class="n">cparamId</span> <span class="o">==</span> <span class="s1">'143'</span><span class="p">:</span> - <span class="n">values</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">darain</span><span class="p">(</span><span class="n">svdp</span><span class="p">)</span> - <span class="k">else</span><span class="p">:</span> - <span class="n">values</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">dapoly</span><span class="p">(</span><span class="n">svdp</span><span class="p">)</span> + <span class="n">parId</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'paramId'</span><span class="p">)</span> <span class="c1"># integer</span> + <span class="n">step</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'step'</span><span class="p">)</span> <span class="c1"># integer</span> + <span class="n">time</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">)</span> <span class="c1"># integer</span> + <span class="n">ni</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'Ni'</span><span class="p">)</span> <span class="c1"># integer</span> + <span class="n">nj</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'Nj'</span><span class="p">)</span> <span class="c1"># integer</span> + <span class="k">if</span> <span class="n">parId</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">orig_vals</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span> + <span class="c1"># parameter is not a flux, find next one</span> + <span class="k">continue</span> - <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">step</span> <span class="o">==</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="ow">and</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">></span> <span class="mi">12</span> \ - <span class="ow">or</span> <span class="n">t_dt</span> <span class="o">==</span> <span class="n">t_enddate</span><span class="p">):</span> - <span class="n">vdp</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> - <span class="n">svdp</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> + <span class="c1"># define conversion factor</span> + <span class="k">if</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">142</span> <span class="ow">or</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">143</span><span class="p">:</span> + <span class="n">fak</span> <span class="o">=</span> <span class="mf">1.</span> <span class="o">/</span> <span class="mf">1000.</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">fak</span> <span class="o">=</span> <span class="mf">3600.</span> + + <span class="c1"># get parameter values and reshape</span> + <span class="n">values</span> <span class="o">=</span> <span class="n">codes_get_values</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> + <span class="n">values</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="p">(</span><span class="n">nj</span><span class="p">,</span> <span class="n">ni</span><span class="p">)))</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span> <span class="o">/</span> <span class="n">fak</span> + + <span class="c1"># save the original and accumulated values</span> + <span class="n">orig_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">values</span><span class="p">[:])</span> + + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">marsclass</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'EA'</span> <span class="ow">or</span> <span class="n">step</span> <span class="o"><=</span> <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">):</span> + <span class="c1"># no de-accumulation needed</span> + <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">values</span><span class="p">[:]</span> <span class="o">/</span> <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># do de-accumulation</span> + <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span> + <span class="p">(</span><span class="n">orig_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">orig_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="o">-</span><span class="mi">2</span><span class="p">])</span> <span class="o">/</span> + <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> + + <span class="c1"># store precipitation if new disaggregation method is selected</span> + <span class="c1"># only the exact days are needed</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">rrint</span><span class="p">:</span> + <span class="k">if</span> <span class="n">start_date</span> <span class="o"><=</span> <span class="n">t_dt</span> <span class="o"><=</span> <span class="n">end_date</span><span class="p">:</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> + <span class="k">if</span> <span class="n">t_dt</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">date_list</span><span class="p">:</span> + <span class="n">date_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">t_dt</span><span class="p">)</span> + <span class="n">step_list</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">else</span><span class="p">:</span> - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">></span> <span class="mi">12</span><span class="p">:</span> - <span class="n">values</span> <span class="o">=</span> <span class="n">svdp</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> - <span class="k">else</span><span class="p">:</span> - <span class="n">values</span> <span class="o">=</span> <span class="n">svdp</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> + <span class="k">if</span> <span class="n">t_date</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">date_list</span><span class="p">:</span> + <span class="n">date_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">t_date</span><span class="p">)</span> + <span class="k">if</span> <span class="n">step</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">step_list</span><span class="p">:</span> + <span class="n">step_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">step</span><span class="p">)</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">rrint</span> <span class="ow">and</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">142</span><span class="p">:</span> + <span class="n">lsp_np</span><span class="p">[:,</span><span class="n">it_lsp</span><span class="p">]</span> <span class="o">=</span> <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="o">-</span><span class="mi">1</span><span class="p">][:]</span> + <span class="n">it_lsp</span> <span class="o">+=</span> <span class="mi">1</span> + <span class="k">elif</span> <span class="n">c</span><span class="o">.</span><span class="n">rrint</span> <span class="ow">and</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">143</span><span class="p">:</span> + <span class="n">cp_np</span><span class="p">[:,</span><span class="n">it_cp</span><span class="p">]</span> <span class="o">=</span> <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="o">-</span><span class="mi">1</span><span class="p">][:]</span> + <span class="n">it_cp</span> <span class="o">+=</span> <span class="mi">1</span> + + <span class="c1"># information printout</span> + <span class="nb">print</span><span class="p">(</span><span class="n">parId</span><span class="p">,</span> <span class="n">time</span><span class="p">,</span> <span class="n">step</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">values</span><span class="p">),</span> <span class="n">values</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">np</span><span class="o">.</span><span class="n">std</span><span class="p">(</span><span class="n">values</span><span class="p">))</span> + + <span class="c1"># length of deac_vals[parId] corresponds to the</span> + <span class="c1"># number of time steps, max. 4 are needed for disaggegration</span> + <span class="c1"># with the old and original method</span> + <span class="c1"># run over all grib messages and perform</span> + <span class="c1"># shifting in time</span> + <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">])</span> <span class="o">>=</span> <span class="mi">3</span><span class="p">:</span> + <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">])</span> <span class="o">></span> <span class="mi">3</span><span class="p">:</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">rrint</span> <span class="ow">and</span> <span class="p">(</span><span class="n">parId</span> <span class="o">==</span> <span class="mi">142</span> <span class="ow">or</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">143</span><span class="p">):</span> + <span class="n">values</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">darain</span><span class="p">(</span><span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">])</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">values</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">dapoly</span><span class="p">(</span><span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">])</span> + + <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">step</span> <span class="o">==</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="ow">and</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span> \ + <span class="ow">or</span> <span class="n">t_dt</span> <span class="o">==</span> <span class="n">t_enddate</span><span class="p">):</span> + <span class="c1"># remove first time step in list to shift</span> + <span class="c1"># time line</span> + <span class="n">orig_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> + <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># if the third time step is read (per parId),</span> + <span class="c1"># write out the first one as a boundary value</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> + <span class="n">values</span> <span class="o">=</span> <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">values</span> <span class="o">=</span> <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> - <span class="n">grib_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span> + <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">rrint</span> <span class="ow">and</span> <span class="p">(</span><span class="n">parId</span> <span class="o">==</span> <span class="mi">142</span> <span class="ow">or</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">143</span><span class="p">)):</span> + <span class="n">codes_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span> - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">></span> <span class="mi">12</span><span class="p">:</span> - <span class="n">grib_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'step'</span><span class="p">,</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">step</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">)))</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'stepRange'</span><span class="p">,</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">step</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">)))</span> <span class="k">else</span><span class="p">:</span> - <span class="n">grib_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'step'</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> - <span class="n">grib_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">,</span> <span class="n">t_m2dt</span><span class="o">.</span><span class="n">hour</span><span class="o">*</span><span class="mi">100</span><span class="p">)</span> - <span class="n">grib_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">t_m2dt</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)))</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'stepRange'</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">,</span> <span class="n">t_m2dt</span><span class="o">.</span><span class="n">hour</span><span class="o">*</span><span class="mi">100</span><span class="p">)</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">t_m2dt</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)))</span> - <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">fnout</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f_handle</span><span class="p">:</span> - <span class="n">grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">f_handle</span><span class="p">)</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">f_handle</span><span class="p">)</span> <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span><span class="p">:</span> - <span class="n">t_enddate</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span> <span class="o">+</span> - <span class="n">c</span><span class="o">.</span><span class="n">basetime</span><span class="p">,</span> + <span class="n">t_enddate</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span> <span class="o">+</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">t_enddate</span> <span class="o">=</span> <span class="n">t_date</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> - <span class="c1"># squeeze out information of last two steps contained</span> - <span class="c1"># in svdp</span> - <span class="c1"># if step+int(c.dtime) == c.maxstep and c.maxstep>12</span> - <span class="c1"># or t_dt+timedelta(hours = int(c.dtime))</span> - <span class="c1"># >= t_enddate:</span> - <span class="c1"># Note that svdp[0] has not been popped in this case</span> - - <span class="k">if</span> <span class="n">step</span> <span class="o">==</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="ow">and</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">></span> <span class="mi">12</span> <span class="ow">or</span> \ - <span class="n">t_dt</span> <span class="o">==</span> <span class="n">t_enddate</span><span class="p">:</span> - - <span class="n">values</span> <span class="o">=</span> <span class="n">svdp</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> - <span class="n">grib_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span> - <span class="n">grib_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'step'</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> - <span class="n">truedatetime</span> <span class="o">=</span> <span class="n">t_m2dt</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span> - <span class="mi">2</span><span class="o">*</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> - <span class="n">grib_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">,</span> <span class="n">truedatetime</span><span class="o">.</span><span class="n">hour</span> <span class="o">*</span> <span class="mi">100</span><span class="p">)</span> - <span class="n">grib_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">,</span> <span class="n">truedatetime</span><span class="o">.</span><span class="n">year</span> <span class="o">*</span> <span class="mi">10000</span> <span class="o">+</span> - <span class="n">truedatetime</span><span class="o">.</span><span class="n">month</span> <span class="o">*</span> <span class="mi">100</span> <span class="o">+</span> - <span class="n">truedatetime</span><span class="o">.</span><span class="n">day</span><span class="p">)</span> - <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">hnout</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">h_handle</span><span class="p">:</span> - <span class="n">grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">h_handle</span><span class="p">)</span> - - <span class="c1">#values = (svdp[1]+svdp[2])/2.</span> - <span class="k">if</span> <span class="n">cparamId</span> <span class="o">==</span> <span class="s1">'142'</span> <span class="ow">or</span> <span class="n">cparamId</span> <span class="o">==</span> <span class="s1">'143'</span><span class="p">:</span> - <span class="n">values</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">darain</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">svdp</span><span class="p">)))</span> - <span class="k">else</span><span class="p">:</span> - <span class="n">values</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">dapoly</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">svdp</span><span class="p">)))</span> + <span class="c1"># squeeze out information of last two steps</span> + <span class="c1"># contained in deac_vals[parId]</span> + <span class="c1"># Note that deac_vals[parId][0] has not been popped</span> + <span class="c1"># in this case</span> + + <span class="k">if</span> <span class="n">step</span> <span class="o">==</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="ow">and</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span> <span class="ow">or</span> \ + <span class="n">t_dt</span> <span class="o">==</span> <span class="n">t_enddate</span><span class="p">:</span> + <span class="c1"># last step</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> + <span class="n">values</span> <span class="o">=</span> <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="mi">3</span><span class="p">]</span> + <span class="n">codes_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'stepRange'</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span> + <span class="c1">#truedatetime = t_m2dt + timedelta(hours=2*int(c.dtime))</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">h_handle</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">values</span> <span class="o">=</span> <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="mi">3</span><span class="p">]</span> + <span class="n">codes_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'stepRange'</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> + <span class="n">truedatetime</span> <span class="o">=</span> <span class="n">t_m2dt</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="mi">2</span><span class="o">*</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">,</span> <span class="n">truedatetime</span><span class="o">.</span><span class="n">hour</span> <span class="o">*</span> <span class="mi">100</span><span class="p">)</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">truedatetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)))</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">h_handle</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">142</span> <span class="ow">or</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">143</span><span class="p">:</span> + <span class="n">values</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">darain</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">])))</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">values</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">dapoly</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">])))</span> + + <span class="c1"># step before last step</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'stepRange'</span><span class="p">,</span> <span class="n">step</span><span class="o">-</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> + <span class="c1">#truedatetime = t_m2dt + timedelta(hours=int(c.dtime))</span> + <span class="n">codes_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">g_handle</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'stepRange'</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> + <span class="n">truedatetime</span> <span class="o">=</span> <span class="n">t_m2dt</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">,</span> <span class="n">truedatetime</span><span class="o">.</span><span class="n">hour</span> <span class="o">*</span> <span class="mi">100</span><span class="p">)</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">truedatetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)))</span> + <span class="n">codes_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">g_handle</span><span class="p">)</span> + + <span class="n">codes_release</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> + + <span class="n">gid</span> <span class="o">=</span> <span class="n">codes_new_from_index</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> + + <span class="n">f_handle</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> + <span class="n">g_handle</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> + <span class="n">h_handle</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> + + <span class="n">codes_index_release</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">rrint</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_create_rr_grib_dummy</span><span class="p">(</span><span class="n">inputfiles</span><span class="o">.</span><span class="n">files</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">_prep_new_rrint</span><span class="p">(</span><span class="n">ni</span><span class="p">,</span> <span class="n">nj</span><span class="p">,</span> <span class="n">lsp_np</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">lsp_np</span><span class="p">,</span> + <span class="n">cp_np</span><span class="p">,</span> <span class="n">date_list</span><span class="p">,</span> <span class="n">step_list</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span> - <span class="n">grib_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'step'</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> - <span class="n">truedatetime</span> <span class="o">=</span> <span class="n">t_m2dt</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> - <span class="n">grib_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">,</span> <span class="n">truedatetime</span><span class="o">.</span><span class="n">hour</span> <span class="o">*</span> <span class="mi">100</span><span class="p">)</span> - <span class="n">grib_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">,</span> <span class="n">truedatetime</span><span class="o">.</span><span class="n">year</span> <span class="o">*</span> <span class="mi">10000</span> <span class="o">+</span> - <span class="n">truedatetime</span><span class="o">.</span><span class="n">month</span> <span class="o">*</span> <span class="mi">100</span> <span class="o">+</span> - <span class="n">truedatetime</span><span class="o">.</span><span class="n">day</span><span class="p">)</span> - <span class="n">grib_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span> - <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">gnout</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">g_handle</span><span class="p">:</span> - <span class="n">grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">g_handle</span><span class="p">)</span> + <span class="k">return</span></div> - <span class="n">grib_release</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> + <span class="k">def</span> <span class="nf">_prep_new_rrint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ni</span><span class="p">,</span> <span class="n">nj</span><span class="p">,</span> <span class="n">nt</span><span class="p">,</span> <span class="n">lsp_np</span><span class="p">,</span> <span class="n">cp_np</span><span class="p">,</span> <span class="n">date_list</span><span class="p">,</span> <span class="n">step_list</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span> + <span class="sd">'''Calculates and writes out the disaggregated precipitation fields.</span> - <span class="n">gid</span> <span class="o">=</span> <span class="n">grib_new_from_index</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> +<span class="sd"> Disaggregation is done in time and original times are written to the</span> +<span class="sd"> flux files, while the additional subgrid times are written to</span> +<span class="sd"> extra files.</span> - <span class="n">grib_index_release</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> ni : int</span> +<span class="sd"> Amount of zonal grid points.</span> - <span class="k">return</span></div> +<span class="sd"> nj : int</span> +<span class="sd"> Amount of meridional grid points.</span> + +<span class="sd"> nt : int</span> +<span class="sd"> Number of time steps.</span> + +<span class="sd"> lsp_np : numpy array of float</span> +<span class="sd"> The large scale precipitation fields for each time step.</span> +<span class="sd"> Shape (ni * nj, nt).</span> + +<span class="sd"> cp_np : numpy array of float</span> +<span class="sd"> The convective precipitation fields for each time step.</span> +<span class="sd"> Shape (ni * nj, nt).</span> + +<span class="sd"> date_list : list of datetime</span> +<span class="sd"> The list of dates for which the disaggregation is to be done.</span> + +<span class="sd"> step_list : list of int</span> +<span class="sd"> The list of steps for a single forecast time.</span> +<span class="sd"> Only necessary for pure forecasts.</span> + +<span class="sd"> c : ControlFile</span> +<span class="sd"> Contains all the parameters of CONTROL file and</span> +<span class="sd"> command line.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... disaggregation or precipitation with new method.'</span><span class="p">)</span> + <span class="n">lsp_new_np</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">ni</span> <span class="o">*</span> <span class="n">nj</span><span class="p">,</span> <span class="n">nt</span> <span class="o">*</span> <span class="mi">3</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span> + <span class="n">cp_new_np</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">ni</span> <span class="o">*</span> <span class="n">nj</span><span class="p">,</span> <span class="n">nt</span> <span class="o">*</span> <span class="mi">3</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span> + + <span class="c1"># do the disaggregation, but neglect the last value of the</span> + <span class="c1"># time series. This one corresponds for example to 24 hour,</span> + <span class="c1"># which we don't need.</span> + <span class="k">for</span> <span class="n">ix</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ni</span><span class="o">*</span><span class="n">nj</span><span class="p">):</span> + <span class="n">lsp_new_np</span><span class="p">[</span><span class="n">ix</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">IA3</span><span class="p">(</span><span class="n">lsp_np</span><span class="p">[</span><span class="n">ix</span><span class="p">,:])[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> + <span class="n">cp_new_np</span><span class="p">[</span><span class="n">ix</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">IA3</span><span class="p">(</span><span class="n">cp_np</span><span class="p">[</span><span class="n">ix</span><span class="p">,:])[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> + + <span class="c1"># write to grib files (full/orig times to flux file and inbetween</span> + <span class="c1"># times into seperate end files)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... write disaggregated precipitation to files.'</span><span class="p">)</span> + <span class="n">it</span> <span class="o">=</span> <span class="mi">0</span> + <span class="k">for</span> <span class="n">date</span> <span class="ow">in</span> <span class="n">date_list</span><span class="p">:</span> + <span class="k">for</span> <span class="n">step</span> <span class="ow">in</span> <span class="n">step_list</span><span class="p">:</span> + <span class="n">tmpfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="s1">'rr_grib_dummy.grb'</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> + <span class="n">fluxfilename</span> <span class="o">=</span> <span class="s1">'flux'</span> <span class="o">+</span> <span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">.%H'</span><span class="p">)</span> <span class="o">+</span> \ + <span class="s1">'.</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">step</span><span class="p">)</span> + <span class="n">filename1</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%y%m</span><span class="si">%d</span><span class="s1">.%H'</span><span class="p">)</span> <span class="o">+</span> \ + <span class="s1">'.</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">step</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'_1'</span> + <span class="n">filename2</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%y%m</span><span class="si">%d</span><span class="s1">.%H'</span><span class="p">)</span> <span class="o">+</span> \ + <span class="s1">'.</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">step</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'_2'</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">fluxfilename</span> <span class="o">=</span> <span class="s1">'flux'</span> <span class="o">+</span> <span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> + <span class="n">filename1</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'_1'</span> + <span class="n">filename2</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'_2'</span> + + <span class="c1"># collect for final processing</span> + <span class="bp">self</span><span class="o">.</span><span class="n">outputfilelist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">fluxfilename</span><span class="p">))</span> + <span class="bp">self</span><span class="o">.</span><span class="n">outputfilelist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">filename1</span><span class="p">))</span> + <span class="bp">self</span><span class="o">.</span><span class="n">outputfilelist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">filename2</span><span class="p">))</span> + + <span class="c1"># write original time step to flux file as usual</span> + <span class="n">fluxfile</span> <span class="o">=</span> <span class="n">GribUtil</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">fluxfilename</span><span class="p">))</span> + <span class="n">fluxfile</span><span class="o">.</span><span class="n">set_keys</span><span class="p">(</span><span class="n">tmpfile</span><span class="p">,</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'a'</span><span class="p">,</span> <span class="n">strict</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> + <span class="n">wherekeynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'paramId'</span><span class="p">],</span> <span class="n">wherekeyvalues</span><span class="o">=</span><span class="p">[</span><span class="mi">142</span><span class="p">],</span> + <span class="n">keynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'date'</span><span class="p">,</span><span class="s1">'time'</span><span class="p">,</span><span class="s1">'stepRange'</span><span class="p">,</span><span class="s1">'values'</span><span class="p">],</span> + <span class="n">keyvalues</span><span class="o">=</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)),</span> + <span class="n">date</span><span class="o">.</span><span class="n">hour</span><span class="o">*</span><span class="mi">100</span><span class="p">,</span> <span class="n">step</span><span class="p">,</span> <span class="n">lsp_new_np</span><span class="p">[:,</span><span class="n">it</span><span class="p">]],</span> + <span class="p">)</span> + <span class="n">fluxfile</span><span class="o">.</span><span class="n">set_keys</span><span class="p">(</span><span class="n">tmpfile</span><span class="p">,</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'a'</span><span class="p">,</span> <span class="n">strict</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> + <span class="n">wherekeynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'paramId'</span><span class="p">],</span> <span class="n">wherekeyvalues</span><span class="o">=</span><span class="p">[</span><span class="mi">143</span><span class="p">],</span> + <span class="n">keynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'date'</span><span class="p">,</span><span class="s1">'time'</span><span class="p">,</span><span class="s1">'stepRange'</span><span class="p">,</span><span class="s1">'values'</span><span class="p">],</span> + <span class="n">keyvalues</span><span class="o">=</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)),</span> + <span class="n">date</span><span class="o">.</span><span class="n">hour</span><span class="o">*</span><span class="mi">100</span><span class="p">,</span> <span class="n">step</span><span class="p">,</span> <span class="n">cp_new_np</span><span class="p">[:,</span><span class="n">it</span><span class="p">]]</span> + <span class="p">)</span> + + <span class="c1"># write first subgrid time step</span> + <span class="n">endfile1</span> <span class="o">=</span> <span class="n">GribUtil</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">filename1</span><span class="p">))</span> + <span class="n">endfile1</span><span class="o">.</span><span class="n">set_keys</span><span class="p">(</span><span class="n">tmpfile</span><span class="p">,</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'w'</span><span class="p">,</span> <span class="n">strict</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> + <span class="n">wherekeynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'paramId'</span><span class="p">],</span> <span class="n">wherekeyvalues</span><span class="o">=</span><span class="p">[</span><span class="mi">142</span><span class="p">],</span> + <span class="n">keynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'date'</span><span class="p">,</span><span class="s1">'time'</span><span class="p">,</span><span class="s1">'stepRange'</span><span class="p">,</span><span class="s1">'values'</span><span class="p">],</span> + <span class="n">keyvalues</span><span class="o">=</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)),</span> + <span class="n">date</span><span class="o">.</span><span class="n">hour</span><span class="o">*</span><span class="mi">100</span><span class="p">,</span> <span class="n">step</span><span class="p">,</span> <span class="n">lsp_new_np</span><span class="p">[:,</span><span class="n">it</span><span class="o">+</span><span class="mi">1</span><span class="p">]]</span> + <span class="p">)</span> + <span class="n">endfile1</span><span class="o">.</span><span class="n">set_keys</span><span class="p">(</span><span class="n">tmpfile</span><span class="p">,</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'a'</span><span class="p">,</span> <span class="n">strict</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> + <span class="n">wherekeynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'paramId'</span><span class="p">],</span> <span class="n">wherekeyvalues</span><span class="o">=</span><span class="p">[</span><span class="mi">143</span><span class="p">],</span> + <span class="n">keynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'date'</span><span class="p">,</span><span class="s1">'time'</span><span class="p">,</span><span class="s1">'stepRange'</span><span class="p">,</span><span class="s1">'values'</span><span class="p">],</span> + <span class="n">keyvalues</span><span class="o">=</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)),</span> + <span class="n">date</span><span class="o">.</span><span class="n">hour</span><span class="o">*</span><span class="mi">100</span><span class="p">,</span> <span class="n">step</span><span class="p">,</span> <span class="n">cp_new_np</span><span class="p">[:,</span><span class="n">it</span><span class="o">+</span><span class="mi">1</span><span class="p">]]</span> + <span class="p">)</span> + + <span class="c1"># write second subgrid time step</span> + <span class="n">endfile2</span> <span class="o">=</span> <span class="n">GribUtil</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">filename2</span><span class="p">))</span> + <span class="n">endfile2</span><span class="o">.</span><span class="n">set_keys</span><span class="p">(</span><span class="n">tmpfile</span><span class="p">,</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'w'</span><span class="p">,</span> <span class="n">strict</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> + <span class="n">wherekeynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'paramId'</span><span class="p">],</span> <span class="n">wherekeyvalues</span><span class="o">=</span><span class="p">[</span><span class="mi">142</span><span class="p">],</span> + <span class="n">keynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'date'</span><span class="p">,</span><span class="s1">'time'</span><span class="p">,</span><span class="s1">'stepRange'</span><span class="p">,</span><span class="s1">'values'</span><span class="p">],</span> + <span class="n">keyvalues</span><span class="o">=</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)),</span> + <span class="n">date</span><span class="o">.</span><span class="n">hour</span><span class="o">*</span><span class="mi">100</span><span class="p">,</span> <span class="n">step</span><span class="p">,</span> <span class="n">lsp_new_np</span><span class="p">[:,</span><span class="n">it</span><span class="o">+</span><span class="mi">2</span><span class="p">]]</span> + <span class="p">)</span> + <span class="n">endfile2</span><span class="o">.</span><span class="n">set_keys</span><span class="p">(</span><span class="n">tmpfile</span><span class="p">,</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'a'</span><span class="p">,</span> <span class="n">strict</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> + <span class="n">wherekeynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'paramId'</span><span class="p">],</span> <span class="n">wherekeyvalues</span><span class="o">=</span><span class="p">[</span><span class="mi">143</span><span class="p">],</span> + <span class="n">keynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'date'</span><span class="p">,</span><span class="s1">'time'</span><span class="p">,</span><span class="s1">'stepRange'</span><span class="p">,</span><span class="s1">'values'</span><span class="p">],</span> + <span class="n">keyvalues</span><span class="o">=</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)),</span> + <span class="n">date</span><span class="o">.</span><span class="n">hour</span><span class="o">*</span><span class="mi">100</span><span class="p">,</span> <span class="n">step</span><span class="p">,</span> <span class="n">cp_new_np</span><span class="p">[:,</span><span class="n">it</span><span class="o">+</span><span class="mi">2</span><span class="p">]]</span> + <span class="p">)</span> + <span class="n">it</span> <span class="o">=</span> <span class="n">it</span> <span class="o">+</span> <span class="mi">3</span> <span class="c1"># jump to next original time step</span> + <span class="k">return</span> + + <span class="k">def</span> <span class="nf">_create_rr_grib_dummy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ifile</span><span class="p">,</span> <span class="n">inputdir</span><span class="p">):</span> + <span class="sd">'''Creates a grib file with a dummy message for the two precipitation</span> +<span class="sd"> types lsp and cp each.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> ifile : str</span> +<span class="sd"> Filename of the input file to read the grib messages from.</span> + +<span class="sd"> inputdir : str, optional</span> +<span class="sd"> Path to the directory where the retrieved data is stored.</span> +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="n">gribfile</span> <span class="o">=</span> <span class="n">GribUtil</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">inputdir</span><span class="p">,</span><span class="s1">'rr_grib_dummy.grb'</span><span class="p">))</span> + + <span class="n">gribfile</span><span class="o">.</span><span class="n">copy_dummy_msg</span><span class="p">(</span><span class="n">ifile</span><span class="p">,</span> <span class="n">keynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'paramId'</span><span class="p">],</span> + <span class="n">keyvalues</span><span class="o">=</span><span class="p">[</span><span class="mi">142</span><span class="p">],</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'w'</span><span class="p">)</span> + + <span class="n">gribfile</span><span class="o">.</span><span class="n">copy_dummy_msg</span><span class="p">(</span><span class="n">ifile</span><span class="p">,</span> <span class="n">keynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'paramId'</span><span class="p">],</span> + <span class="n">keyvalues</span><span class="o">=</span><span class="p">[</span><span class="mi">143</span><span class="p">],</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'a'</span><span class="p">)</span> + + <span class="k">return</span> <div class="viewcode-block" id="EcFlexpart.create"><a class="viewcode-back" href="../api.html#EcFlexpart.EcFlexpart.create">[docs]</a> <span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inputfiles</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span> <span class="sd">'''An index file will be created which depends on the combination</span> @@ -1099,10 +1493,10 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> inputfiles : :obj:`UioFiles`</span> +<span class="sd"> inputfiles : UioFiles</span> <span class="sd"> Contains a list of files.</span> -<span class="sd"> c : :obj:`ControlFile`</span> +<span class="sd"> c : ControlFile</span> <span class="sd"> Contains all the parameters of CONTROL file and</span> <span class="sd"> command line.</span> @@ -1136,7 +1530,7 @@ <span class="n">index_keys</span><span class="p">)</span> <span class="c1"># index_vals looks like e.g.:</span> <span class="c1"># index_vals[0]: ('20171106', '20171107', '20171108') ; date</span> - <span class="c1"># index_vals[1]: ('0', '1200', '1800', '600') ; time</span> + <span class="c1"># index_vals[1]: ('0', '600', '1200', '1800') ; time</span> <span class="c1"># index_vals[2]: ('0', '12', '3', '6', '9') ; stepRange</span> <span class="c1"># "product" genereates each possible combination between the</span> @@ -1148,27 +1542,27 @@ <span class="nb">print</span><span class="p">(</span><span class="s1">'current product: '</span><span class="p">,</span> <span class="n">prod</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">index_keys</span><span class="p">)):</span> - <span class="n">grib_index_select</span><span class="p">(</span><span class="n">iid</span><span class="p">,</span> <span class="n">index_keys</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">prod</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> + <span class="n">codes_index_select</span><span class="p">(</span><span class="n">iid</span><span class="p">,</span> <span class="n">index_keys</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">prod</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="c1"># get first id from current product</span> - <span class="n">gid</span> <span class="o">=</span> <span class="n">grib_new_from_index</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> + <span class="n">gid</span> <span class="o">=</span> <span class="n">codes_new_from_index</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> <span class="c1"># if there is no data for this specific time combination / product</span> <span class="c1"># skip the rest of the for loop and start with next timestep/product</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">gid</span><span class="p">:</span> <span class="k">continue</span> - +<span class="c1">#============================================================================================</span> <span class="c1"># remove old fort.* files and open new ones</span> <span class="c1"># they are just valid for a single product</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">fdict</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span> <span class="n">fortfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="s1">'fort.'</span> <span class="o">+</span> <span class="n">k</span><span class="p">)</span> <span class="n">silent_remove</span><span class="p">(</span><span class="n">fortfile</span><span class="p">)</span> <span class="n">fdict</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fortfile</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> - +<span class="c1">#============================================================================================</span> <span class="c1"># create correct timestamp from the three time informations</span> - <span class="n">cdate</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">))</span> - <span class="n">ctime</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{:0>2}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">)</span><span class="o">/</span><span class="mi">100</span><span class="p">)</span> - <span class="n">cstep</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'step'</span><span class="p">))</span> + <span class="n">cdate</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">))</span> + <span class="n">ctime</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{:0>2}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">)</span><span class="o">/</span><span class="mi">100</span><span class="p">)</span> + <span class="n">cstep</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'step'</span><span class="p">))</span> <span class="n">timestamp</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">cdate</span> <span class="o">+</span> <span class="n">ctime</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> <span class="n">timestamp</span> <span class="o">+=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">cstep</span><span class="p">))</span> <span class="n">cdate_hour</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">timestamp</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> @@ -1188,7 +1582,7 @@ <span class="n">fwrf</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">outputdir</span><span class="p">,</span> <span class="s1">'WRF'</span> <span class="o">+</span> <span class="n">cdate</span> <span class="o">+</span> <span class="s1">'.'</span> <span class="o">+</span> <span class="n">ctime</span> <span class="o">+</span> <span class="s1">'.000.grb2'</span><span class="p">),</span> <span class="s1">'w'</span><span class="p">)</span> <span class="n">olddate</span> <span class="o">=</span> <span class="n">cdate</span><span class="p">[:]</span> - +<span class="c1">#============================================================================================</span> <span class="c1"># savedfields remembers which fields were already used.</span> <span class="n">savedfields</span> <span class="o">=</span> <span class="p">[]</span> <span class="c1"># sum of cloud liquid and ice water content</span> @@ -1196,34 +1590,35 @@ <span class="k">while</span> <span class="mi">1</span><span class="p">:</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">gid</span><span class="p">:</span> <span class="k">break</span> - <span class="n">paramId</span> <span class="o">=</span> <span class="n">grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'paramId'</span><span class="p">)</span> - <span class="n">gridtype</span> <span class="o">=</span> <span class="n">grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'gridType'</span><span class="p">)</span> - <span class="n">levtype</span> <span class="o">=</span> <span class="n">grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'typeOfLevel'</span><span class="p">)</span> + <span class="n">paramId</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'paramId'</span><span class="p">)</span> + <span class="n">gridtype</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'gridType'</span><span class="p">)</span> + <span class="n">levtype</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'typeOfLevel'</span><span class="p">)</span> <span class="k">if</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">77</span><span class="p">:</span> <span class="c1"># ETADOT</span> - <span class="n">grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'21'</span><span class="p">])</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'21'</span><span class="p">])</span> <span class="k">elif</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">130</span><span class="p">:</span> <span class="c1"># T</span> - <span class="n">grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'11'</span><span class="p">])</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'11'</span><span class="p">])</span> <span class="k">elif</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">131</span> <span class="ow">or</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">132</span><span class="p">:</span> <span class="c1"># U, V wind component</span> - <span class="n">grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'10'</span><span class="p">])</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'10'</span><span class="p">])</span> <span class="k">elif</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">133</span> <span class="ow">and</span> <span class="n">gridtype</span> <span class="o">!=</span> <span class="s1">'reduced_gg'</span><span class="p">:</span> <span class="c1"># Q</span> - <span class="n">grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'17'</span><span class="p">])</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'17'</span><span class="p">])</span> <span class="k">elif</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">133</span> <span class="ow">and</span> <span class="n">gridtype</span> <span class="o">==</span> <span class="s1">'reduced_gg'</span><span class="p">:</span> <span class="c1"># Q, gaussian</span> - <span class="n">grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'18'</span><span class="p">])</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'18'</span><span class="p">])</span> <span class="k">elif</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">135</span><span class="p">:</span> <span class="c1"># W</span> - <span class="n">grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'19'</span><span class="p">])</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'19'</span><span class="p">])</span> <span class="k">elif</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">152</span><span class="p">:</span> <span class="c1"># LNSP</span> - <span class="n">grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'12'</span><span class="p">])</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'12'</span><span class="p">])</span> <span class="k">elif</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">155</span> <span class="ow">and</span> <span class="n">gridtype</span> <span class="o">==</span> <span class="s1">'sh'</span><span class="p">:</span> <span class="c1"># D</span> - <span class="n">grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'13'</span><span class="p">])</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'13'</span><span class="p">])</span> <span class="k">elif</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">246</span> <span class="ow">or</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">247</span><span class="p">:</span> <span class="c1"># CLWC, CIWC</span> <span class="c1"># sum cloud liquid water and ice</span> <span class="k">if</span> <span class="n">scwc</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> - <span class="n">scwc</span> <span class="o">=</span> <span class="n">grib_get_values</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> + <span class="n">scwc</span> <span class="o">=</span> <span class="n">codes_get_values</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> - <span class="n">scwc</span> <span class="o">+=</span> <span class="n">grib_get_values</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> - <span class="n">grib_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">scwc</span><span class="p">)</span> - <span class="n">grib_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'paramId'</span><span class="p">,</span> <span class="mi">201031</span><span class="p">)</span> - <span class="n">grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'22'</span><span class="p">])</span> + <span class="n">scwc</span> <span class="o">+=</span> <span class="n">codes_get_values</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> + <span class="n">codes_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">scwc</span><span class="p">)</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'paramId'</span><span class="p">,</span> <span class="mi">201031</span><span class="p">)</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'22'</span><span class="p">])</span> + <span class="n">scwc</span> <span class="o">=</span> <span class="kc">None</span> <span class="k">elif</span> <span class="n">c</span><span class="o">.</span><span class="n">wrf</span> <span class="ow">and</span> <span class="n">paramId</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">129</span><span class="p">,</span> <span class="mi">138</span><span class="p">,</span> <span class="mi">155</span><span class="p">]</span> <span class="ow">and</span> \ <span class="n">levtype</span> <span class="o">==</span> <span class="s1">'hybrid'</span><span class="p">:</span> <span class="c1"># Z, VO, D</span> <span class="c1"># do not do anything right now</span> @@ -1233,7 +1628,7 @@ <span class="k">if</span> <span class="n">paramId</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">savedfields</span><span class="p">:</span> <span class="c1"># SD/MSL/TCC/10U/10V/2T/2D/Z/LSM/SDOR/CVL/CVH/SR</span> <span class="c1"># and all ADDPAR parameter</span> - <span class="n">grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'16'</span><span class="p">])</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'16'</span><span class="p">])</span> <span class="n">savedfields</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">paramId</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="nb">print</span><span class="p">(</span><span class="s1">'duplicate '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">paramId</span><span class="p">)</span> <span class="o">+</span> <span class="s1">' not written'</span><span class="p">)</span> @@ -1243,19 +1638,19 @@ <span class="c1"># model layer</span> <span class="k">if</span> <span class="n">levtype</span> <span class="o">==</span> <span class="s1">'hybrid'</span> <span class="ow">and</span> \ <span class="n">paramId</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">129</span><span class="p">,</span> <span class="mi">130</span><span class="p">,</span> <span class="mi">131</span><span class="p">,</span> <span class="mi">132</span><span class="p">,</span> <span class="mi">133</span><span class="p">,</span> <span class="mi">138</span><span class="p">,</span> <span class="mi">155</span><span class="p">]:</span> - <span class="n">grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fwrf</span><span class="p">)</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fwrf</span><span class="p">)</span> <span class="c1"># sfc layer</span> <span class="k">elif</span> <span class="n">paramId</span> <span class="ow">in</span> <span class="n">wrfpars</span><span class="p">:</span> - <span class="n">grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fwrf</span><span class="p">)</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fwrf</span><span class="p">)</span> <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span> <span class="k">pass</span> - <span class="n">grib_release</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> - <span class="n">gid</span> <span class="o">=</span> <span class="n">grib_new_from_index</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> - + <span class="n">codes_release</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> + <span class="n">gid</span> <span class="o">=</span> <span class="n">codes_new_from_index</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> +<span class="c1">#============================================================================================</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">fdict</span><span class="o">.</span><span class="n">values</span><span class="p">():</span> <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> - +<span class="c1">#============================================================================================</span> <span class="c1"># call for Fortran program to convert e.g. reduced_gg grids to</span> <span class="c1"># regular_ll and calculate detadot/dp</span> <span class="n">pwd</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getcwd</span><span class="p">()</span> @@ -1266,14 +1661,19 @@ <span class="nb">print</span><span class="p">(</span><span class="s1">'Check parameters CLASS, TYPE, STREAM, START_DATE</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> <span class="n">my_error</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">mailfail</span><span class="p">,</span> <span class="s1">'fort.21 is empty while parameter eta </span><span class="se">\</span> <span class="s1"> is set to 1 in CONTROL file'</span><span class="p">)</span> +<span class="c1">#============================================================================================</span> + <span class="c1"># write out all output to log file before starting fortran programm</span> + <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span> <span class="c1"># Fortran program creates file fort.15 (with u,v,etadot,t,sp,q)</span> - <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span> - <span class="n">c</span><span class="o">.</span><span class="n">exedir</span><span class="p">,</span> <span class="n">_config</span><span class="o">.</span><span class="n">FORTRAN_EXECUTABLE</span><span class="p">)],</span> <span class="n">shell</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> - <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">pwd</span><span class="p">)</span> + <span class="n">execute_subprocess</span><span class="p">([</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">exedir</span><span class="p">,</span> + <span class="n">_config</span><span class="o">.</span><span class="n">FORTRAN_EXECUTABLE</span><span class="p">)],</span> + <span class="n">error_msg</span><span class="o">=</span><span class="s1">'FORTRAN PROGRAM FAILED!'</span><span class="p">)</span><span class="c1">#shell=True)</span> + <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">pwd</span><span class="p">)</span> +<span class="c1">#============================================================================================</span> <span class="c1"># create name of final output file, e.g. EN13040500 (ENYYMMDDHH)</span> - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">></span> <span class="mi">12</span><span class="p">:</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> <span class="n">suffix</span> <span class="o">=</span> <span class="n">cdate</span><span class="p">[</span><span class="mi">2</span><span class="p">:</span><span class="mi">8</span><span class="p">]</span> <span class="o">+</span> <span class="s1">'.'</span> <span class="o">+</span> <span class="n">ctime</span> <span class="o">+</span> <span class="s1">'.'</span> <span class="o">+</span> <span class="n">cstep</span> <span class="k">else</span><span class="p">:</span> <span class="n">suffix</span> <span class="o">=</span> <span class="n">cdate_hour</span><span class="p">[</span><span class="mi">2</span><span class="p">:</span><span class="mi">10</span><span class="p">]</span> @@ -1281,7 +1681,7 @@ <span class="nb">print</span><span class="p">(</span><span class="s2">"outputfile = "</span> <span class="o">+</span> <span class="n">fnout</span><span class="p">)</span> <span class="c1"># collect for final processing</span> <span class="bp">self</span><span class="o">.</span><span class="n">outputfilelist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">fnout</span><span class="p">))</span> - +<span class="c1">#============================================================================================</span> <span class="c1"># create outputfile and copy all data from intermediate files</span> <span class="c1"># to the outputfile (final GRIB input files for FLEXPART)</span> <span class="n">orolsm</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">glob</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span> <span class="o">+</span> @@ -1301,17 +1701,19 @@ <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">outputdir</span><span class="p">,</span> <span class="s1">'OMEGA'</span><span class="p">),</span> <span class="s1">'wb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">fout</span><span class="p">:</span> <span class="n">shutil</span><span class="o">.</span><span class="n">copyfileobj</span><span class="p">(</span><span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="s1">'fort.25'</span><span class="p">),</span> <span class="s1">'rb'</span><span class="p">),</span> <span class="n">fout</span><span class="p">)</span> - +<span class="c1">#============================================================================================</span> <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">wrf</span><span class="p">:</span> <span class="n">fwrf</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> - <span class="n">grib_index_release</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> + <span class="n">codes_index_release</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> <span class="k">return</span></div> <div class="viewcode-block" id="EcFlexpart.process_output"><a class="viewcode-back" href="../api.html#EcFlexpart.EcFlexpart.process_output">[docs]</a> <span class="k">def</span> <span class="nf">process_output</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span> - <span class="sd">'''The grib files are postprocessed depending on the selection in</span> + <span class="sd">'''Postprocessing of FLEXPART input files.</span> + +<span class="sd"> The grib files are postprocessed depending on the selection in</span> <span class="sd"> CONTROL file. The resulting files are moved to the output</span> <span class="sd"> directory if its not equal to the input directory.</span> <span class="sd"> The following modifications might be done if</span> @@ -1322,7 +1724,7 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> c : :obj:`ControlFile`</span> +<span class="sd"> c : ControlFile</span> <span class="sd"> Contains all the parameters of CONTROL file and</span> <span class="sd"> command line.</span> @@ -1346,24 +1748,32 @@ <span class="n">ofile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">ofile</span><span class="p">)</span> <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">format</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'grib2'</span><span class="p">:</span> - <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span><span class="s1">'grib_set'</span><span class="p">,</span> <span class="s1">'-s'</span><span class="p">,</span> <span class="s1">'edition=2, </span><span class="se">\</span> -<span class="s1"> productDefinitionTemplateNumber=8'</span><span class="p">,</span> - <span class="n">ofile</span><span class="p">,</span> <span class="n">ofile</span> <span class="o">+</span> <span class="s1">'_2'</span><span class="p">])</span> - <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span><span class="s1">'mv'</span><span class="p">,</span> <span class="n">ofile</span> <span class="o">+</span> <span class="s1">'_2'</span><span class="p">,</span> <span class="n">ofile</span><span class="p">])</span> + <span class="n">execute_subprocess</span><span class="p">([</span><span class="s1">'grib_set'</span><span class="p">,</span> <span class="s1">'-s'</span><span class="p">,</span> <span class="s1">'edition=2,'</span> <span class="o">+</span> + <span class="s1">'productDefinitionTemplateNumber=8'</span><span class="p">,</span> + <span class="n">ofile</span><span class="p">,</span> <span class="n">ofile</span> <span class="o">+</span> <span class="s1">'_2'</span><span class="p">],</span> + <span class="n">error_msg</span><span class="o">=</span><span class="s1">'GRIB2 CONVERSION FAILED!'</span><span class="p">)</span> + + <span class="n">execute_subprocess</span><span class="p">([</span><span class="s1">'mv'</span><span class="p">,</span> <span class="n">ofile</span> <span class="o">+</span> <span class="s1">'_2'</span><span class="p">,</span> <span class="n">ofile</span><span class="p">],</span> + <span class="n">error_msg</span><span class="o">=</span><span class="s1">'RENAMING FOR NEW GRIB2 FORMAT '</span> + <span class="s1">'FILES FAILED!'</span><span class="p">)</span> <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">ectrans</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">ecapi</span><span class="p">:</span> - <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span><span class="s1">'ectrans'</span><span class="p">,</span> <span class="s1">'-overwrite'</span><span class="p">,</span> <span class="s1">'-gateway'</span><span class="p">,</span> - <span class="n">c</span><span class="o">.</span><span class="n">gateway</span><span class="p">,</span> <span class="s1">'-remote'</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">destination</span><span class="p">,</span> - <span class="s1">'-source'</span><span class="p">,</span> <span class="n">ofile</span><span class="p">])</span> + <span class="n">execute_subprocess</span><span class="p">([</span><span class="s1">'ectrans'</span><span class="p">,</span> <span class="s1">'-overwrite'</span><span class="p">,</span> <span class="s1">'-gateway'</span><span class="p">,</span> + <span class="n">c</span><span class="o">.</span><span class="n">gateway</span><span class="p">,</span> <span class="s1">'-remote'</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">destination</span><span class="p">,</span> + <span class="s1">'-source'</span><span class="p">,</span> <span class="n">ofile</span><span class="p">],</span> + <span class="n">error_msg</span><span class="o">=</span><span class="s1">'TRANSFER TO LOCAL SERVER FAILED!'</span><span class="p">)</span> <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">ecstorage</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">ecapi</span><span class="p">:</span> - <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span><span class="s1">'ecp'</span><span class="p">,</span> <span class="s1">'-o'</span><span class="p">,</span> <span class="n">ofile</span><span class="p">,</span> - <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ecfsdir</span><span class="p">)])</span> + <span class="n">execute_subprocess</span><span class="p">([</span><span class="s1">'ecp'</span><span class="p">,</span> <span class="s1">'-o'</span><span class="p">,</span> <span class="n">ofile</span><span class="p">,</span> + <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ecfsdir</span><span class="p">)],</span> + <span class="n">error_msg</span><span class="o">=</span><span class="s1">'COPY OF FILES TO ECSTORAGE '</span> + <span class="s1">'AREA FAILED!'</span><span class="p">)</span> <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">outputdir</span> <span class="o">!=</span> <span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">:</span> - <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span><span class="s1">'mv'</span><span class="p">,</span> - <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">ofile</span><span class="p">),</span> - <span class="n">c</span><span class="o">.</span><span class="n">outputdir</span><span class="p">])</span> + <span class="n">execute_subprocess</span><span class="p">([</span><span class="s1">'mv'</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">ofile</span><span class="p">),</span> + <span class="n">c</span><span class="o">.</span><span class="n">outputdir</span><span class="p">],</span> + <span class="n">error_msg</span><span class="o">=</span><span class="s1">'RELOCATION OF OUTPUT FILES '</span> + <span class="s1">'TO OUTPUTDIR FAILED!'</span><span class="p">)</span> <span class="k">return</span></div> @@ -1373,7 +1783,7 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> c : :obj:`ControlFile`</span> +<span class="sd"> c : ControlFile</span> <span class="sd"> Contains all the parameters of CONTROL file and</span> <span class="sd"> command line.</span> @@ -1418,7 +1828,7 @@ <span class="c1"># read template COMMAND file</span> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span> - <span class="n">c</span><span class="o">.</span><span class="n">flexpart_root_scripts</span><span class="p">))</span> <span class="o">+</span> <span class="s1">'/../Options/COMMAND'</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">))</span> <span class="o">+</span> <span class="s1">'/../Options/COMMAND'</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> <span class="n">lflist</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> <span class="c1"># find index of list where to put in the</span> @@ -1443,9 +1853,9 @@ <span class="c1"># change to outputdir and start the grib2flexpart run</span> <span class="c1"># afterwards switch back to the working dir</span> <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">outputdir</span><span class="p">)</span> - <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span> - <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">flexpart_root_scripts</span><span class="p">))</span> - <span class="o">+</span> <span class="s1">'/../FLEXPART_PROGRAM/grib2flexpart'</span><span class="p">,</span> <span class="s1">'useAvailable'</span><span class="p">,</span> <span class="s1">'.'</span><span class="p">])</span> + <span class="n">cmd</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">))</span> <span class="o">+</span> + <span class="s1">'/../FLEXPART_PROGRAM/grib2flexpart'</span><span class="p">,</span> <span class="s1">'useAvailable'</span><span class="p">,</span> <span class="s1">'.'</span><span class="p">]</span> + <span class="n">execute_subprocess</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span> <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">pwd</span><span class="p">)</span> <span class="k">return</span></div></div> @@ -1461,7 +1871,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -1480,21 +1890,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/_modules/GribUtil.html b/documentation/Sphinx/build/html/_modules/GribUtil.html new file mode 100644 index 0000000..5a703fe --- /dev/null +++ b/documentation/Sphinx/build/html/_modules/GribUtil.html @@ -0,0 +1,529 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>GribUtil — flex_extract 7.1 alpha documentation</title> + + + + + + + + + + + + + + + + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <link rel="index" title="Index" href="../genindex.html" /> + <link rel="search" title="Search" href="../search.html" /> + + + <script src="../_static/js/modernizr.min.js"></script> + +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search"> + + + + <a href="../index.html" class="icon icon-home"> flex_extract + + + + </a> + + + + + <div class="version"> + 7.1 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Table of Contents:</span></p> +<ul> +<li class="toctree-l1"><a class="reference internal" href="../downloads.html">Downloads</a></li> +<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../program_structure.html">Program Structure</a></li> +<li class="toctree-l1"><a class="reference internal" href="../user_guide.html">User Guide</a></li> +<li class="toctree-l1"><a class="reference internal" href="../api.html">Auto Generated Documentation</a></li> +<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../index.html">flex_extract</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../index.html">Docs</a> »</li> + + <li><a href="index.html">Module code</a> »</li> + + <li>GribUtil</li> + + + <li class="wy-breadcrumbs-aside"> + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for GribUtil</h1><div class="highlight"><pre> +<span></span><span class="ch">#!/usr/bin/env python</span> +<span class="c1"># -*- coding: utf-8 -*-</span> +<span class="c1">#*******************************************************************************</span> +<span class="c1"># @Author: Anne Fouilloux (University of Oslo)</span> +<span class="c1">#</span> +<span class="c1"># @Date: July 2014</span> +<span class="c1">#</span> +<span class="c1"># @Change History:</span> +<span class="c1"># February 2018 - Anne Philipp (University of Vienna):</span> +<span class="c1"># - applied PEP8 style guide</span> +<span class="c1"># - added documentation</span> +<span class="c1"># - changed some naming</span> +<span class="c1">#</span> +<span class="c1"># @License:</span> +<span class="c1"># (C) Copyright 2014-2018.</span> +<span class="c1">#</span> +<span class="c1"># This software is licensed under the terms of the Apache Licence Version 2.0</span> +<span class="c1"># which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.</span> +<span class="c1">#</span> +<span class="c1"># @Class Description:</span> +<span class="c1"># The GRIB API provides all necessary tools to work directly with the</span> +<span class="c1"># grib files. Nevertheless, the GRIB API tools are very basic and are in</span> +<span class="c1"># direct connection with the grib files. This class provides some higher</span> +<span class="c1"># functions which apply a set of GRIB API tools together in the respective</span> +<span class="c1"># context. So, the class initially contains a list of grib files (their</span> +<span class="c1"># names) and the using program then applies the methods directly on the</span> +<span class="c1"># class objects without having to think about how the actual GRIB API</span> +<span class="c1"># tools have to be arranged.</span> +<span class="c1">#</span> +<span class="c1"># @Class Content:</span> +<span class="c1"># - __init__</span> +<span class="c1"># - get_keys</span> +<span class="c1"># - set_keys</span> +<span class="c1"># - copy_dummy_msg</span> +<span class="c1"># - index</span> +<span class="c1">#</span> +<span class="c1"># @Class Attributes:</span> +<span class="c1"># - filenames</span> +<span class="c1">#</span> +<span class="c1">#*******************************************************************************</span> + +<span class="c1"># ------------------------------------------------------------------------------</span> +<span class="c1"># MODULES</span> +<span class="c1"># ------------------------------------------------------------------------------</span> +<span class="kn">import</span> <span class="nn">os</span> + +<span class="kn">from</span> <span class="nn">eccodes</span> <span class="k">import</span> <span class="p">(</span><span class="n">codes_grib_new_from_file</span><span class="p">,</span> <span class="n">codes_is_defined</span><span class="p">,</span> <span class="n">codes_get</span><span class="p">,</span> + <span class="n">codes_release</span><span class="p">,</span> <span class="n">codes_set</span><span class="p">,</span> <span class="n">codes_write</span><span class="p">,</span> <span class="n">codes_index_read</span><span class="p">,</span> + <span class="n">codes_index_new_from_file</span><span class="p">,</span> <span class="n">codes_index_add_file</span><span class="p">,</span> + <span class="n">codes_index_write</span><span class="p">,</span> <span class="n">codes_set_values</span><span class="p">)</span> + +<span class="c1"># ------------------------------------------------------------------------------</span> +<span class="c1"># CLASS</span> +<span class="c1"># ------------------------------------------------------------------------------</span> +<div class="viewcode-block" id="GribUtil"><a class="viewcode-back" href="../api.html#GribUtil.GribUtil">[docs]</a><span class="k">class</span> <span class="nc">GribUtil</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="sd">'''</span> +<span class="sd"> Class for GRIB utilities (new methods) based on GRIB API</span> +<span class="sd"> '''</span> + <span class="c1"># --------------------------------------------------------------------------</span> + <span class="c1"># CLASS FUNCTIONS</span> + <span class="c1"># --------------------------------------------------------------------------</span> + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filenames</span><span class="p">):</span> + <span class="sd">'''Initialise an object of GribUtil and assign a list of filenames.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> filenames : :obj:`list` of :obj:`strings`</span> +<span class="sd"> A list of filenames.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">filenames</span> <span class="o">=</span> <span class="n">filenames</span> + + <span class="k">return</span> + + +<div class="viewcode-block" id="GribUtil.get_keys"><a class="viewcode-back" href="../api.html#GribUtil.GribUtil.get_keys">[docs]</a> <span class="k">def</span> <span class="nf">get_keys</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">keynames</span><span class="p">,</span> <span class="n">wherekeynames</span><span class="o">=</span><span class="p">[],</span> <span class="n">wherekeyvalues</span><span class="o">=</span><span class="p">[]):</span> + <span class="sd">'''Get keyvalues for a given list of keynames a where statement</span> +<span class="sd"> can be given (list of key and list of values)</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> keynames : :obj:`list` of :obj:`string`</span> +<span class="sd"> List of keynames.</span> + +<span class="sd"> wherekeynames : :obj:`list` of :obj:`string`, optional</span> +<span class="sd"> Default value is an empty list.</span> + +<span class="sd"> wherekeyvalues : :obj:`list` of :obj:`string`, optional</span> +<span class="sd"> Default value is an empty list.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> return_list : :obj:`list` of :obj:`string`</span> +<span class="sd"> List of keyvalues for given keynames.</span> +<span class="sd"> '''</span> + + <span class="n">fileid</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">filenames</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">)</span> + + <span class="n">return_list</span> <span class="o">=</span> <span class="p">[]</span> + + <span class="k">while</span> <span class="mi">1</span><span class="p">:</span> + <span class="n">gid</span> <span class="o">=</span> <span class="n">codes_new_from_file</span><span class="p">(</span><span class="n">fileid</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">gid</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> + <span class="k">break</span> + + <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">wherekeynames</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">wherekeyvalues</span><span class="p">):</span> + <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"Number of key values and key names must be </span><span class="se">\</span> +<span class="s2"> the same. Give a value for each keyname!"</span><span class="p">)</span> + + <span class="n">select</span> <span class="o">=</span> <span class="kc">True</span> + <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> + <span class="k">for</span> <span class="n">wherekey</span> <span class="ow">in</span> <span class="n">wherekeynames</span><span class="p">:</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">codes_is_defined</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">wherekey</span><span class="p">):</span> + <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"where key was not defined"</span><span class="p">)</span> + + <span class="n">select</span> <span class="o">=</span> <span class="p">(</span><span class="n">select</span> <span class="ow">and</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">wherekeyvalues</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">==</span> + <span class="nb">str</span><span class="p">(</span><span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">wherekey</span><span class="p">))))</span> + <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span> + + <span class="k">if</span> <span class="n">select</span><span class="p">:</span> + <span class="n">llist</span> <span class="o">=</span> <span class="p">[]</span> + <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">keynames</span><span class="p">:</span> + <span class="n">llist</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">key</span><span class="p">))])</span> + <span class="n">return_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">llist</span><span class="p">)</span> + + <span class="n">codes_release</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> + + <span class="n">fileid</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> + + <span class="k">return</span> <span class="n">return_list</span></div> + + +<div class="viewcode-block" id="GribUtil.set_keys"><a class="viewcode-back" href="../api.html#GribUtil.GribUtil.set_keys">[docs]</a> <span class="k">def</span> <span class="nf">set_keys</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fromfile</span><span class="p">,</span> <span class="n">keynames</span><span class="p">,</span> <span class="n">keyvalues</span><span class="p">,</span> <span class="n">wherekeynames</span><span class="o">=</span><span class="p">[],</span> + <span class="n">wherekeyvalues</span><span class="o">=</span><span class="p">[],</span> <span class="n">strict</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'w'</span><span class="p">):</span> + <span class="sd">'''Opens the file to read the grib messages and then write</span> +<span class="sd"> the selected messages (with wherekeys) to a new output file.</span> +<span class="sd"> Also, the keyvalues of the passed list of keynames are set.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> fromfile : :obj:`string`</span> +<span class="sd"> Filename of the input file to read the grib messages from.</span> + +<span class="sd"> keynames : :obj:`list` of :obj:`string`</span> +<span class="sd"> List of keynames to set in the selected messages.</span> +<span class="sd"> Default is an empty list.</span> + +<span class="sd"> keyvalues : :obj:`list` of :obj:`string`</span> +<span class="sd"> List of keyvalues to set in the selected messages.</span> +<span class="sd"> Default is an empty list.</span> + +<span class="sd"> wherekeynames : :obj:`list` of :obj:`string`, optional</span> +<span class="sd"> List of keynames to select correct message.</span> +<span class="sd"> Default value is an empty list.</span> + +<span class="sd"> wherekeyvalues : :obj:`list` of :obj:`string`, optional</span> +<span class="sd"> List of keyvalues for keynames to select correct message.</span> +<span class="sd"> Default value is an empty list.</span> + +<span class="sd"> strict : :obj:`boolean`, optional</span> +<span class="sd"> Decides if everything from keynames and keyvalues</span> +<span class="sd"> is written out the grib file (False) or only those</span> +<span class="sd"> meeting the where statement (True). Default is False.</span> + +<span class="sd"> filemode : :obj:`string`, optional</span> +<span class="sd"> Sets the mode for the output file. Default is "w".</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">wherekeynames</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">wherekeyvalues</span><span class="p">):</span> + <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"Give a value for each keyname!"</span><span class="p">)</span> + + <span class="n">fout</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">filenames</span><span class="p">,</span> <span class="n">filemode</span><span class="p">)</span> + <span class="n">fin</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fromfile</span><span class="p">)</span> + + <span class="k">while</span> <span class="mi">1</span><span class="p">:</span> + <span class="n">gid</span> <span class="o">=</span> <span class="n">codes_grib_new_from_file</span><span class="p">(</span><span class="n">fin</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">gid</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> + <span class="k">break</span> + + <span class="n">select</span> <span class="o">=</span> <span class="kc">True</span> + <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> + <span class="k">for</span> <span class="n">wherekey</span> <span class="ow">in</span> <span class="n">wherekeynames</span><span class="p">:</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">codes_is_defined</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">wherekey</span><span class="p">):</span> + <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"wherekey was not defined"</span><span class="p">)</span> + + <span class="n">select</span> <span class="o">=</span> <span class="p">(</span><span class="n">select</span> <span class="ow">and</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">wherekeyvalues</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">==</span> + <span class="nb">str</span><span class="p">(</span><span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">wherekey</span><span class="p">))))</span> + <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span> + + <span class="k">if</span> <span class="n">select</span><span class="p">:</span> + <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> + <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">keynames</span><span class="p">:</span> + <span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="s1">'values'</span><span class="p">:</span> + <span class="n">codes_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">keyvalues</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">keyvalues</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> + <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span> + + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fout</span><span class="p">)</span> + + <span class="n">codes_release</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> + + <span class="n">fin</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> + <span class="n">fout</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="GribUtil.copy_dummy_msg"><a class="viewcode-back" href="../api.html#GribUtil.GribUtil.copy_dummy_msg">[docs]</a> <span class="k">def</span> <span class="nf">copy_dummy_msg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename_in</span><span class="p">,</span> <span class="n">selectWhere</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> + <span class="n">keynames</span><span class="o">=</span><span class="p">[],</span> <span class="n">keyvalues</span><span class="o">=</span><span class="p">[],</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'w'</span><span class="p">):</span> + <span class="sd">'''Add the content of another input grib file to the objects file but</span> +<span class="sd"> only messages corresponding to keys/values passed to the function.</span> +<span class="sd"> The selectWhere switch decides if to copy the keys equal to (True) or</span> +<span class="sd"> different to (False) the keynames/keyvalues list passed to the function.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> filename_in : :obj:`string`</span> +<span class="sd"> Filename of the input file to read the grib messages from.</span> + +<span class="sd"> selectWhere : :obj:`boolean`, optional</span> +<span class="sd"> Decides if to copy the keynames and values equal to (True) or</span> +<span class="sd"> different to (False) the keynames/keyvalues list passed to the</span> +<span class="sd"> function. Default is True.</span> + +<span class="sd"> keynames : :obj:`list` of :obj:`string`, optional</span> +<span class="sd"> List of keynames. Default is an empty list.</span> + +<span class="sd"> keyvalues : :obj:`list` of :obj:`string`, optional</span> +<span class="sd"> List of keyvalues. Default is an empty list.</span> + +<span class="sd"> filemode : :obj:`string`, optional</span> +<span class="sd"> Sets the mode for the output file. Default is "w".</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">keynames</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">keyvalues</span><span class="p">):</span> + <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"Give a value for each keyname!"</span><span class="p">)</span> + + <span class="n">fin</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename_in</span><span class="p">)</span> + <span class="n">fout</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">filenames</span><span class="p">,</span> <span class="n">filemode</span><span class="p">)</span> + + <span class="n">fields</span> <span class="o">=</span> <span class="mi">0</span> + + <span class="k">while</span> <span class="n">fields</span> <span class="o"><</span> <span class="mi">1</span><span class="p">:</span> + <span class="n">gid</span> <span class="o">=</span> <span class="n">codes_grib_new_from_file</span><span class="p">(</span><span class="n">fin</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">gid</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> + <span class="k">break</span> + + <span class="n">select</span> <span class="o">=</span> <span class="kc">True</span> + <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> + <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">keynames</span><span class="p">:</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">codes_is_defined</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span> + <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"Key was not defined"</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">selectWhere</span><span class="p">:</span> + <span class="n">select</span> <span class="o">=</span> <span class="p">(</span><span class="n">select</span> <span class="ow">and</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">keyvalues</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">==</span> + <span class="nb">str</span><span class="p">(</span><span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">key</span><span class="p">))))</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">select</span> <span class="o">=</span> <span class="p">(</span><span class="n">select</span> <span class="ow">and</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">keyvalues</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">!=</span> + <span class="nb">str</span><span class="p">(</span><span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">key</span><span class="p">))))</span> + <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span> + + <span class="k">if</span> <span class="n">select</span><span class="p">:</span> + <span class="n">fields</span> <span class="o">=</span> <span class="n">fields</span> <span class="o">+</span> <span class="mi">1</span> + <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fout</span><span class="p">)</span> + + <span class="n">codes_release</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> + + <span class="n">fin</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> + <span class="n">fout</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="GribUtil.index"><a class="viewcode-back" href="../api.html#GribUtil.GribUtil.index">[docs]</a> <span class="k">def</span> <span class="nf">index</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index_keys</span><span class="o">=</span><span class="p">[</span><span class="s2">"mars"</span><span class="p">],</span> <span class="n">index_file</span><span class="o">=</span><span class="s2">"my.idx"</span><span class="p">):</span> + <span class="sd">'''Create index file from a list of files if it does not exist or</span> +<span class="sd"> read an index file.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> index_keys: :obj:`list` of :obj:`string`, optional</span> +<span class="sd"> Contains the list of key parameter names from</span> +<span class="sd"> which the index is to be created.</span> +<span class="sd"> Default is a list with a single entry string "mars".</span> + +<span class="sd"> index_file: :obj:`string`, optional</span> +<span class="sd"> Filename where the indices are stored.</span> +<span class="sd"> Default is "my.idx".</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> iid: :obj:`integer`</span> +<span class="sd"> Grib index id.</span> +<span class="sd"> '''</span> + <span class="nb">print</span><span class="p">(</span><span class="s2">"... index will be done"</span><span class="p">)</span> + <span class="n">iid</span> <span class="o">=</span> <span class="kc">None</span> + + <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">index_file</span><span class="p">):</span> + <span class="n">iid</span> <span class="o">=</span> <span class="n">codes_index_read</span><span class="p">(</span><span class="n">index_file</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s2">"Use existing index file: </span><span class="si">%s</span><span class="s2"> "</span> <span class="o">%</span> <span class="p">(</span><span class="n">index_file</span><span class="p">))</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">for</span> <span class="n">filename</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">filenames</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s2">"Inputfile: </span><span class="si">%s</span><span class="s2"> "</span> <span class="o">%</span> <span class="p">(</span><span class="n">filename</span><span class="p">))</span> + <span class="k">if</span> <span class="n">iid</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> + <span class="n">iid</span> <span class="o">=</span> <span class="n">codes_index_new_from_file</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">index_keys</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">codes_index_add_file</span><span class="p">(</span><span class="n">iid</span><span class="p">,</span> <span class="n">filename</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">iid</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> + <span class="n">codes_index_write</span><span class="p">(</span><span class="n">iid</span><span class="p">,</span> <span class="n">index_file</span><span class="p">)</span> + + <span class="nb">print</span><span class="p">(</span><span class="s1">'... index done'</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">iid</span></div></div> +</pre></div> + + </div> + + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2018, Anne Philipp and Leopold Haimberger + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + + + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + + + + + <script type="text/javascript" src="../_static/js/theme.js"></script> + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + +</body> +</html> \ No newline at end of file diff --git a/documentation/Sphinx/build/html/_modules/MarsRetrieval.html b/documentation/Sphinx/build/html/_modules/MarsRetrieval.html index 028e163..4011537 100644 --- a/documentation/Sphinx/build/html/_modules/MarsRetrieval.html +++ b/documentation/Sphinx/build/html/_modules/MarsRetrieval.html @@ -169,46 +169,16 @@ <span class="c1"># - applied PEP8 style guide</span> <span class="c1"># - added documentation</span> <span class="c1"># - applied some minor modifications in programming style/structure</span> +<span class="c1"># - added writing of mars request attributes to a csv file</span> <span class="c1">#</span> <span class="c1"># @License:</span> -<span class="c1"># (C) Copyright 2015-2018.</span> -<span class="c1">#</span> -<span class="c1"># This software is licensed under the terms of the Apache Licence Version 2.0</span> -<span class="c1"># which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.</span> -<span class="c1">#</span> -<span class="c1"># @Class Description:</span> -<span class="c1"># A MARS revtrieval has a specific syntax with a selection of keywords and</span> -<span class="c1"># their corresponding values. This class provides the necessary functions</span> -<span class="c1"># by displaying the selected parameters and their values and the actual</span> -<span class="c1"># retrievement of the data through a mars request or a Python web api</span> -<span class="c1"># interface. The initialization already expects all the keyword values.</span> -<span class="c1">#</span> -<span class="c1"># @Class Content:</span> -<span class="c1"># - __init__</span> -<span class="c1"># - display_info</span> -<span class="c1"># - data_retrieve</span> -<span class="c1">#</span> -<span class="c1"># @Class Attributes:</span> -<span class="c1"># - server</span> -<span class="c1"># - marsclass</span> -<span class="c1"># - dtype</span> -<span class="c1"># - levtype</span> -<span class="c1"># - levelist</span> -<span class="c1"># - repres</span> -<span class="c1"># - date</span> -<span class="c1"># - resol</span> -<span class="c1"># - stream</span> -<span class="c1"># - area</span> -<span class="c1"># - time</span> -<span class="c1"># - step</span> -<span class="c1"># - expver</span> -<span class="c1"># - number</span> -<span class="c1"># - accuracy</span> -<span class="c1"># - grid</span> -<span class="c1"># - gaussian</span> -<span class="c1"># - target</span> -<span class="c1"># - param</span> +<span class="c1"># (C) Copyright 2014-2019.</span> +<span class="c1"># Anne Philipp, Leopold Haimberger</span> <span class="c1">#</span> +<span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> +<span class="c1"># International License. To view a copy of this license, visit</span> +<span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> +<span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> <span class="c1">#*******************************************************************************</span> <span class="c1"># ------------------------------------------------------------------------------</span> @@ -225,12 +195,91 @@ <span class="c1"># CLASS</span> <span class="c1"># ------------------------------------------------------------------------------</span> <div class="viewcode-block" id="MarsRetrieval"><a class="viewcode-back" href="../api.html#MarsRetrieval.MarsRetrieval">[docs]</a><span class="k">class</span> <span class="nc">MarsRetrieval</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> - <span class="sd">'''Class for submitting MARS retrievals.</span> + <span class="sd">'''Specific syntax and content for submission of MARS retrievals.</span> + +<span class="sd"> A MARS revtrieval has a specific syntax with a selection of keywords and</span> +<span class="sd"> their corresponding values. This class provides the necessary functions</span> +<span class="sd"> by displaying the selected parameters and their values and the actual</span> +<span class="sd"> retrievement of the data through a mars request or a Python web api</span> +<span class="sd"> interface. The initialization already expects all the keyword values.</span> <span class="sd"> A description of MARS keywords/arguments and examples of their</span> <span class="sd"> values can be found here:</span> <span class="sd"> https://software.ecmwf.int/wiki/display/UDOC/\</span> <span class="sd"> Identification+keywords#Identificationkeywords-class</span> + +<span class="sd"> Attributes</span> +<span class="sd"> ----------</span> +<span class="sd"> server : ECMWFService or ECMWFDataServer</span> +<span class="sd"> This is the connection to the ECMWF data servers.</span> + +<span class="sd"> public : int</span> +<span class="sd"> Decides which Web API Server version is used.</span> + +<span class="sd"> marsclass : str, optional</span> +<span class="sd"> Characterisation of dataset.</span> + +<span class="sd"> dataset : str, optional</span> +<span class="sd"> For public datasets there is the specific naming and parameter</span> +<span class="sd"> dataset which has to be used to characterize the type of</span> +<span class="sd"> data.</span> + +<span class="sd"> type : str, optional</span> +<span class="sd"> Determines the type of fields to be retrieved.</span> + +<span class="sd"> levtype : str, optional</span> +<span class="sd"> Denotes type of level.</span> + +<span class="sd"> levelist : str, optional</span> +<span class="sd"> Specifies the required levels.</span> + +<span class="sd"> repres : str, optional</span> +<span class="sd"> Selects the representation of the archived data.</span> + +<span class="sd"> date : str, optional</span> +<span class="sd"> Specifies the Analysis date, the Forecast base date or</span> +<span class="sd"> Observations date.</span> + +<span class="sd"> resol : str, optional</span> +<span class="sd"> Specifies the desired triangular truncation of retrieved data,</span> +<span class="sd"> before carrying out any other selected post-processing.</span> + +<span class="sd"> stream : str, optional</span> +<span class="sd"> Identifies the forecasting system used to generate the data.</span> + +<span class="sd"> area : str, optional</span> +<span class="sd"> Specifies the desired sub-area of data to be extracted.</span> + +<span class="sd"> time : str, optional</span> +<span class="sd"> Specifies the time of the data in hours and minutes.</span> + +<span class="sd"> step : str, optional</span> +<span class="sd"> Specifies the forecast time step from forecast base time.</span> + +<span class="sd"> expver : str, optional</span> +<span class="sd"> The version of the dataset.</span> + +<span class="sd"> number : str, optional</span> +<span class="sd"> Selects the member in ensemble forecast run.</span> + +<span class="sd"> accuracy : str, optional</span> +<span class="sd"> Specifies the number of bits per value to be used in the</span> +<span class="sd"> generated GRIB coded fields.</span> + +<span class="sd"> grid : str, optional</span> +<span class="sd"> Specifies the output grid which can be either a Gaussian grid</span> +<span class="sd"> or a Latitude/Longitude grid.</span> + +<span class="sd"> gaussian : str, optional</span> +<span class="sd"> This parameter is deprecated and should no longer be used.</span> +<span class="sd"> Specifies the desired type of Gaussian grid for the output.</span> + +<span class="sd"> target : str, optional</span> +<span class="sd"> Specifies a file into which data is to be written after</span> +<span class="sd"> retrieval or manipulation.</span> + +<span class="sd"> param : str, optional</span> +<span class="sd"> Specifies the meteorological parameter.</span> <span class="sd"> '''</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">public</span><span class="p">,</span> <span class="n">marsclass</span><span class="o">=</span><span class="s2">"ei"</span><span class="p">,</span> <span class="n">dataset</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> @@ -248,37 +297,37 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> server : :obj:`ECMWFService`</span> +<span class="sd"> server : ECMWFService or ECMWFDataServer</span> <span class="sd"> This is the connection to the ECMWF data servers.</span> <span class="sd"> It is needed for the pythonic access of ECMWF data.</span> -<span class="sd"> public : :obj:`integer`</span> +<span class="sd"> public : int</span> <span class="sd"> Decides which Web API version is used:</span> <span class="sd"> 0: member-state users and full archive access</span> <span class="sd"> 1: public access and limited access to the public server and</span> <span class="sd"> datasets. Needs the parameter dataset.</span> <span class="sd"> Default is "0" and for member-state users.</span> -<span class="sd"> marsclass : :obj:`string`, optional</span> +<span class="sd"> marsclass : str, optional</span> <span class="sd"> Characterisation of dataset. E.g. EI (ERA-Interim),</span> <span class="sd"> E4 (ERA40), OD (Operational archive), ea (ERA5).</span> <span class="sd"> Default is the ERA-Interim dataset "ei".</span> -<span class="sd"> dataset : :obj:`string`, optional</span> +<span class="sd"> dataset : str, optional</span> <span class="sd"> For public datasets there is the specific naming and parameter</span> <span class="sd"> dataset which has to be used to characterize the type of</span> <span class="sd"> data. Usually there is less data available, either in times,</span> <span class="sd"> domain or parameter.</span> <span class="sd"> Default is an empty string.</span> -<span class="sd"> type : :obj:`string`, optional</span> +<span class="sd"> type : str, optional</span> <span class="sd"> Determines the type of fields to be retrieved.</span> <span class="sd"> Selects between observations, images or fields.</span> <span class="sd"> Examples for fields: Analysis (an), Forecast (fc),</span> <span class="sd"> Perturbed Forecast (pf), Control Forecast (cf) and so on.</span> <span class="sd"> Default is an empty string.</span> -<span class="sd"> levtype : :obj:`string`, optional</span> +<span class="sd"> levtype : str, optional</span> <span class="sd"> Denotes type of level. Has a direct implication on valid</span> <span class="sd"> levelist values!</span> <span class="sd"> E.g. model level (ml), pressure level (pl), surface (sfc),</span> @@ -286,25 +335,25 @@ <span class="sd"> and depth (dp).</span> <span class="sd"> Default is an empty string.</span> -<span class="sd"> levelist : :obj:`string`, optional</span> +<span class="sd"> levelist : str, optional</span> <span class="sd"> Specifies the required levels. It has to have a valid</span> <span class="sd"> correspondence to the selected levtype.</span> <span class="sd"> Examples: model level: 1/to/137, pressure levels: 500/to/1000</span> <span class="sd"> Default is an empty string.</span> -<span class="sd"> repres : :obj:`string`, optional</span> +<span class="sd"> repres : str, optional</span> <span class="sd"> Selects the representation of the archived data.</span> <span class="sd"> E.g. sh - spherical harmonics, gg - Gaussian grid,</span> <span class="sd"> ll - latitude/longitude, ...</span> <span class="sd"> Default is an empty string.</span> -<span class="sd"> date : :obj:`string`, optional</span> +<span class="sd"> date : str, optional</span> <span class="sd"> Specifies the Analysis date, the Forecast base date or</span> <span class="sd"> Observations date. Valid formats are:</span> <span class="sd"> Absolute as YYYY-MM-DD or YYYYMMDD.</span> <span class="sd"> Default is an empty string.</span> -<span class="sd"> resol : :obj:`string`, optional</span> +<span class="sd"> resol : str, optional</span> <span class="sd"> Specifies the desired triangular truncation of retrieved data,</span> <span class="sd"> before carrying out any other selected post-processing.</span> <span class="sd"> The default is automatic truncation (auto), by which the lowest</span> @@ -321,12 +370,12 @@ <span class="sd"> Retrieve#Retrieve-Truncationbeforeinterpolation</span> <span class="sd"> Default is an empty string.</span> -<span class="sd"> stream : :obj:`string`, optional</span> +<span class="sd"> stream : str, optional</span> <span class="sd"> Identifies the forecasting system used to generate the data.</span> <span class="sd"> E.g. oper (Atmospheric model), enfo (Ensemble forecats), ...</span> <span class="sd"> Default is an empty string.</span> -<span class="sd"> area : :obj:`string`, optional</span> +<span class="sd"> area : str, optional</span> <span class="sd"> Specifies the desired sub-area of data to be extracted.</span> <span class="sd"> Areas can be defined to wrap around the globe.</span> @@ -344,7 +393,7 @@ <span class="sd"> E.g.: North/West/South/East</span> <span class="sd"> Default is an empty string.</span> -<span class="sd"> time : :obj:`string`, optional</span> +<span class="sd"> time : str, optional</span> <span class="sd"> Specifies the time of the data in hours and minutes.</span> <span class="sd"> Valid values depend on the type of data: Analysis time,</span> <span class="sd"> Forecast base time or First guess verification time</span> @@ -354,7 +403,7 @@ <span class="sd"> The syntax is HHMM or HH:MM. If MM is omitted it defaults to 00.</span> <span class="sd"> Default is an empty string.</span> -<span class="sd"> step : :obj:`string`, optional</span> +<span class="sd"> step : str, optional</span> <span class="sd"> Specifies the forecast time step from forecast base time.</span> <span class="sd"> Valid values are hours (HH) from forecast base time. It also</span> <span class="sd"> specifies the length of the forecast which verifies at</span> @@ -362,7 +411,7 @@ <span class="sd"> E.g. 1/3/6-hourly</span> <span class="sd"> Default is an empty string.</span> -<span class="sd"> expver : :obj:`string`, optional</span> +<span class="sd"> expver : str, optional</span> <span class="sd"> The version of the dataset. Each experiment is assigned a</span> <span class="sd"> unique code (version). Production data is assigned 1 or 2,</span> <span class="sd"> and experimental data in Operations 11, 12 ,...</span> @@ -370,14 +419,14 @@ <span class="sd"> experiment identifier.</span> <span class="sd"> Default is "1".</span> -<span class="sd"> number : :obj:`string`, optional</span> +<span class="sd"> number : str, optional</span> <span class="sd"> Selects the member in ensemble forecast run. (Only then it</span> <span class="sd"> is necessary.) It has a different meaning depending on</span> <span class="sd"> the type of data.</span> <span class="sd"> E.g. Perturbed Forecasts: specifies the Ensemble forecast member</span> <span class="sd"> Default is an empty string.</span> -<span class="sd"> accuracy : :obj:`string`, optional</span> +<span class="sd"> accuracy : str, optional</span> <span class="sd"> Specifies the number of bits per value to be used in the</span> <span class="sd"> generated GRIB coded fields.</span> <span class="sd"> A positive integer may be given to specify the preferred number</span> @@ -388,7 +437,7 @@ <span class="sd"> can be passed to the result field by specifying accuracy=av.</span> <span class="sd"> Default is an empty string.</span> -<span class="sd"> grid : :obj:`string`, optional</span> +<span class="sd"> grid : str, optional</span> <span class="sd"> Specifies the output grid which can be either a Gaussian grid</span> <span class="sd"> or a Latitude/Longitude grid. MARS requests specifying</span> <span class="sd"> grid=av will return the archived model grid.</span> @@ -409,7 +458,7 @@ <span class="sd"> 640 latitude lines between the pole and equator</span> <span class="sd"> Default is an empty string.</span> -<span class="sd"> gaussian : :obj:`string`, optional</span> +<span class="sd"> gaussian : str, optional</span> <span class="sd"> This parameter is deprecated and should no longer be used.</span> <span class="sd"> Specifies the desired type of Gaussian grid for the output.</span> <span class="sd"> Valid Gaussian grids are quasi-regular (reduced) or regular.</span> @@ -417,7 +466,7 @@ <span class="sd"> keyword grid. Gaussian without grid has no effect.</span> <span class="sd"> Default is an empty string.</span> -<span class="sd"> target : :obj:`string`, optional</span> +<span class="sd"> target : str, optional</span> <span class="sd"> Specifies a file into which data is to be written after</span> <span class="sd"> retrieval or manipulation. Path names should always be</span> <span class="sd"> enclosed in double quotes. The MARS client supports automatic</span> @@ -431,7 +480,7 @@ <span class="sd"> rather than 600, 1 and 129.</span> <span class="sd"> Default is an empty string.</span> -<span class="sd"> param : :obj:`string`, optional</span> +<span class="sd"> param : str, optional</span> <span class="sd"> Specifies the meteorological parameter.</span> <span class="sd"> The list of meteorological parameters in MARS is extensive.</span> <span class="sd"> Their availability is directly related to their meteorological</span> @@ -499,50 +548,15 @@ <span class="k">return</span></div> -<div class="viewcode-block" id="MarsRetrieval.print_info"><a class="viewcode-back" href="../api.html#MarsRetrieval.MarsRetrieval.print_info">[docs]</a> <span class="k">def</span> <span class="nf">print_info</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inputdir</span><span class="p">,</span> <span class="n">request_number</span><span class="p">):</span> - <span class="sd">'''Prints all mars requests to an extra file for debugging and</span> -<span class="sd"> information.</span> - -<span class="sd"> Parameters</span> -<span class="sd"> ----------</span> -<span class="sd"> inputdir : :obj:`string`</span> -<span class="sd"> The path where all data from the retrievals are stored.</span> - -<span class="sd"> request_number : :obj:`integer`</span> -<span class="sd"> Number of mars requests for flux and non-flux data.</span> - -<span class="sd"> Return</span> -<span class="sd"> ------</span> - -<span class="sd"> '''</span> - <span class="c1"># Get all class attributes and their values as a dictionary</span> - <span class="n">attrs</span> <span class="o">=</span> <span class="nb">vars</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> - - <span class="c1"># open a file to store all requests to</span> - <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">inputdir</span><span class="p">,</span> - <span class="n">_config</span><span class="o">.</span><span class="n">FILE_MARS_REQUESTS</span><span class="p">),</span> <span class="s1">'a'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> - <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'mars_request #'</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">request_number</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> - <span class="c1"># iterate through all attributes and print them</span> - <span class="c1"># with their corresponding values</span> - <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">attrs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> - <span class="k">if</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'server'</span><span class="p">,</span> <span class="s1">'public'</span><span class="p">]:</span> - <span class="k">pass</span> - <span class="k">else</span><span class="p">:</span> - <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s1">': '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> - <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n\n</span><span class="s1">'</span><span class="p">)</span> - - <span class="k">return</span></div> - - <div class="viewcode-block" id="MarsRetrieval.print_infodata_csv"><a class="viewcode-back" href="../api.html#MarsRetrieval.MarsRetrieval.print_infodata_csv">[docs]</a> <span class="k">def</span> <span class="nf">print_infodata_csv</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inputdir</span><span class="p">,</span> <span class="n">request_number</span><span class="p">):</span> <span class="sd">'''Write all request parameter in alpabetical order into a "csv" file.</span> <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> inputdir : :obj:`string`</span> +<span class="sd"> inputdir : str</span> <span class="sd"> The path where all data from the retrievals are stored.</span> -<span class="sd"> request_number : :obj:`integer`</span> +<span class="sd"> request_number : int</span> <span class="sd"> Number of mars requests for flux and non-flux data.</span> <span class="sd"> Return</span> @@ -667,7 +681,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -686,21 +700,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/_modules/UioFiles.html b/documentation/Sphinx/build/html/_modules/UioFiles.html index 7ec9366..4c3dbec 100644 --- a/documentation/Sphinx/build/html/_modules/UioFiles.html +++ b/documentation/Sphinx/build/html/_modules/UioFiles.html @@ -164,7 +164,7 @@ <span class="c1"># - modified method list_files to work with glob instead of listdir</span> <span class="c1"># - added pattern search in method list_files</span> <span class="c1">#</span> -<span class="c1"># February 2018 - Anne Philipp (University of Vienna):</span> +<span class="c1"># February - December 2018 - Anne Philipp (University of Vienna):</span> <span class="c1"># - applied PEP8 style guide</span> <span class="c1"># - added documentation</span> <span class="c1"># - optimisation of method list_files since it didn't work correctly</span> @@ -172,28 +172,16 @@ <span class="c1"># - additional speed up of method list_files</span> <span class="c1"># - modified the class so that it is initiated with a pattern instead</span> <span class="c1"># of suffixes. Gives more precision in selection of files.</span> +<span class="c1"># - added delete method</span> <span class="c1">#</span> <span class="c1"># @License:</span> -<span class="c1"># (C) Copyright 2014-2018.</span> -<span class="c1">#</span> -<span class="c1"># This software is licensed under the terms of the Apache Licence Version 2.0</span> -<span class="c1"># which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.</span> -<span class="c1">#</span> -<span class="c1"># @Class Decription:</span> -<span class="c1"># The class is for file manipulation. It is initiated with a regular</span> -<span class="c1"># expression pattern for this instance and can produce a list of Files</span> -<span class="c1"># from the given file pattern. These files can be deleted.</span> -<span class="c1">#</span> -<span class="c1"># @Class Content:</span> -<span class="c1"># - __init__</span> -<span class="c1"># - __str__</span> -<span class="c1"># - __list_files__</span> -<span class="c1"># - delete_files</span> -<span class="c1">#</span> -<span class="c1"># @Class Attributes:</span> -<span class="c1"># - pattern</span> -<span class="c1"># - files</span> +<span class="c1"># (C) Copyright 2014-2019.</span> +<span class="c1"># Anne Philipp, Leopold Haimberger</span> <span class="c1">#</span> +<span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> +<span class="c1"># International License. To view a copy of this license, visit</span> +<span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> +<span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> <span class="c1">#*******************************************************************************</span> <span class="c1"># ------------------------------------------------------------------------------</span> @@ -203,9 +191,8 @@ <span class="kn">import</span> <span class="nn">sys</span> <span class="kn">import</span> <span class="nn">fnmatch</span> -<span class="c1"># software specific module from flex_extract</span> +<span class="c1"># software specific modules from flex_extract</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'../'</span><span class="p">)</span> -<span class="c1">#import profiling</span> <span class="kn">from</span> <span class="nn">mods.tools</span> <span class="k">import</span> <span class="n">silent_remove</span><span class="p">,</span> <span class="n">get_list_as_string</span> <span class="c1"># ------------------------------------------------------------------------------</span> @@ -213,22 +200,35 @@ <span class="c1"># ------------------------------------------------------------------------------</span> <div class="viewcode-block" id="UioFiles"><a class="viewcode-back" href="../api.html#UioFiles.UioFiles">[docs]</a><span class="k">class</span> <span class="nc">UioFiles</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> - <span class="sd">'''Class to manipulate files. At initialisation it has the pattern</span> -<span class="sd"> which stores a regular expression pattern for the files, the path</span> -<span class="sd"> to the files and the files already.</span> + <span class="sd">'''Collection of files matching a specific pattern.</span> + +<span class="sd"> The pattern can contain regular expressions for the files.</span> +<span class="sd"> The files are listed and can be transformed to a single string or</span> +<span class="sd"> they can be deleted.</span> + +<span class="sd"> Attributes</span> +<span class="sd"> ----------</span> +<span class="sd"> path : str</span> +<span class="sd"> Directory where to list the files.</span> + +<span class="sd"> pattern : str</span> +<span class="sd"> Regular expression pattern. For example: '\*.grb'</span> + +<span class="sd"> files : list of str</span> +<span class="sd"> List of files matching the pattern in the path.</span> <span class="sd"> '''</span> <span class="c1"># --------------------------------------------------------------------------</span> - <span class="c1"># CLASS FUNCTIONS</span> + <span class="c1"># CLASS METHODS</span> <span class="c1"># --------------------------------------------------------------------------</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">pattern</span><span class="p">):</span> <span class="sd">'''Assignes a specific pattern for these files.</span> <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> path : :obj:`string`</span> +<span class="sd"> path : str</span> <span class="sd"> Directory where to list the files.</span> -<span class="sd"> pattern : :obj:`string`</span> +<span class="sd"> pattern : str</span> <span class="sd"> Regular expression pattern. For example: '\*.grb'</span> <span class="sd"> Return</span> @@ -240,18 +240,18 @@ <span class="bp">self</span><span class="o">.</span><span class="n">pattern</span> <span class="o">=</span> <span class="n">pattern</span> <span class="bp">self</span><span class="o">.</span><span class="n">files</span> <span class="o">=</span> <span class="p">[]</span> - <span class="bp">self</span><span class="o">.</span><span class="n">__list_files__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_list_files</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">)</span> <span class="k">return</span> - <span class="c1">#@profiling.timefn</span> - <span class="k">def</span> <span class="nf">__list_files__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span> + + <span class="k">def</span> <span class="nf">_list_files</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span> <span class="sd">'''Lists all files in the directory with the matching</span> <span class="sd"> regular expression pattern.</span> <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> path : :obj:`string`</span> +<span class="sd"> path : str</span> <span class="sd"> Path to the files.</span> <span class="sd"> Return</span> @@ -268,6 +268,7 @@ <span class="k">return</span> + <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">'''Converts the list of files into a single string.</span> <span class="sd"> The entries are sepereated by "," sign.</span> @@ -277,7 +278,7 @@ <span class="sd"> Return</span> <span class="sd"> ------</span> -<span class="sd"> files_string : :obj:`string`</span> +<span class="sd"> files_string : str</span> <span class="sd"> The content of the list as a single string.</span> <span class="sd"> '''</span> @@ -286,6 +287,7 @@ <span class="k">return</span> <span class="n">files_string</span> + <div class="viewcode-block" id="UioFiles.delete_files"><a class="viewcode-back" href="../api.html#UioFiles.UioFiles.delete_files">[docs]</a> <span class="k">def</span> <span class="nf">delete_files</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">'''Deletes the files.</span> @@ -313,7 +315,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -332,21 +334,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/_modules/disaggregation.html b/documentation/Sphinx/build/html/_modules/disaggregation.html index c52faca..3fefed5 100644 --- a/documentation/Sphinx/build/html/_modules/disaggregation.html +++ b/documentation/Sphinx/build/html/_modules/disaggregation.html @@ -169,32 +169,36 @@ <span class="c1"># - added structured documentation</span> <span class="c1"># - outsourced the disaggregation functions dapoly and darain</span> <span class="c1"># to a new module named disaggregation</span> +<span class="c1"># - added the new disaggregation method for precipitation</span> <span class="c1">#</span> <span class="c1"># @License:</span> -<span class="c1"># (C) Copyright 2015-2018.</span> +<span class="c1"># (C) Copyright 2014-2019.</span> +<span class="c1"># Anne Philipp, Leopold Haimberger</span> <span class="c1">#</span> -<span class="c1"># This software is licensed under the terms of the Apache Licence Version 2.0</span> -<span class="c1"># which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.</span> +<span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> +<span class="c1"># International License. To view a copy of this license, visit</span> +<span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> +<span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> <span class="c1">#</span> -<span class="c1"># @Module Description:</span> -<span class="c1"># disaggregation of deaccumulated flux data from an ECMWF model FG field.</span> -<span class="c1"># Initially the flux data to be concerned are:</span> -<span class="c1"># - large-scale precipitation</span> -<span class="c1"># - convective precipitation</span> -<span class="c1"># - surface sensible heat flux</span> -<span class="c1"># - surface solar radiation</span> -<span class="c1"># - u stress</span> -<span class="c1"># - v stress</span> -<span class="c1"># Different versions of disaggregation is provided for rainfall</span> -<span class="c1"># data (darain, modified linear) and the surface fluxes and</span> -<span class="c1"># stress data (dapoly, cubic polynomial).</span> -<span class="c1">#</span> -<span class="c1"># @Module Content:</span> +<span class="c1"># @Methods:</span> <span class="c1"># - dapoly</span> <span class="c1"># - darain</span> <span class="c1"># - IA3</span> -<span class="c1">#</span> <span class="c1">#*******************************************************************************</span> +<span class="sd">'''Disaggregation of deaccumulated flux data from an ECMWF model FG field.</span> + +<span class="sd">Initially the flux data to be concerned are:</span> +<span class="sd"> - large-scale precipitation</span> +<span class="sd"> - convective precipitation</span> +<span class="sd"> - surface sensible heat flux</span> +<span class="sd"> - surface solar radiation</span> +<span class="sd"> - u stress</span> +<span class="sd"> - v stress</span> + +<span class="sd">Different versions of disaggregation is provided for rainfall</span> +<span class="sd">data (darain, modified linear) and the surface fluxes and</span> +<span class="sd">stress data (dapoly, cubic polynomial).</span> +<span class="sd">'''</span> <span class="c1"># ------------------------------------------------------------------------------</span> <span class="c1"># MODULES</span> @@ -217,13 +221,13 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> alist : :obj:`list` of :obj:`array` of :obj:`float`</span> +<span class="sd"> alist : list of array of float</span> <span class="sd"> List of 4 timespans as 2-dimensional, horizontal fields.</span> <span class="sd"> E.g. [[array_t1], [array_t2], [array_t3], [array_t4]]</span> <span class="sd"> Return</span> <span class="sd"> ------</span> -<span class="sd"> nfield : :obj:`array` of :obj:`float`</span> +<span class="sd"> nfield : array of float</span> <span class="sd"> Interpolated flux at central point of accumulation timespan.</span> <span class="sd"> Note</span> @@ -261,13 +265,13 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> alist : :obj:`list` of :obj:`array` of :obj:`float`</span> +<span class="sd"> alist : list of array of float</span> <span class="sd"> List of 4 timespans as 2-dimensional, horizontal fields.</span> <span class="sd"> E.g. [[array_t1], [array_t2], [array_t3], [array_t4]]</span> <span class="sd"> Return</span> <span class="sd"> ------</span> -<span class="sd"> nfield : :obj:`array` of :obj:`float`</span> +<span class="sd"> nfield : array of float</span> <span class="sd"> Interpolated flux at central point of accumulation timespan.</span> <span class="sd"> Note</span> @@ -312,7 +316,7 @@ <span class="sd"> Note</span> <span class="sd"> ----</span> -<span class="sd"> Copyright 2017</span> +<span class="sd"> (C) Copyright 2017-2019</span> <span class="sd"> Sabine Hittmeir, Anne Philipp, Petra Seibert</span> <span class="sd"> This work is licensed under the Creative Commons Attribution 4.0</span> @@ -322,13 +326,13 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> g : :obj:`list` of :obj:`float`</span> +<span class="sd"> g : list of float</span> <span class="sd"> Complete data series that will be interpolated having</span> <span class="sd"> the dimension of the original raw series.</span> <span class="sd"> Return</span> <span class="sd"> ------</span> -<span class="sd"> f : :obj:`list` of :obj:`float`</span> +<span class="sd"> f : list of float</span> <span class="sd"> The interpolated data series with additional subgrid points.</span> <span class="sd"> Its dimension is equal to the length of the input data series</span> <span class="sd"> times three.</span> @@ -362,27 +366,27 @@ <span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> <span class="c1"># time step</span> - <span class="n">dt</span><span class="o">=</span><span class="mf">1.0</span> + <span class="n">dt</span> <span class="o">=</span> <span class="mf">1.0</span> <span class="c1">############### Non-negative Geometric Mean Based Algorithm ###############</span> <span class="c1"># for the left boundary the following boundary condition is valid:</span> <span class="c1"># the value at t=0 of the interpolation algorithm coincides with the</span> <span class="c1"># first data value according to the persistence hypothesis</span> - <span class="n">f</span><span class="o">=</span><span class="p">[</span><span class="n">g</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> + <span class="n">f</span> <span class="o">=</span> <span class="p">[</span><span class="n">g</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="c1"># compute two first sub-grid intervals without monotonicity check</span> <span class="c1"># go through the data series and extend each interval by two sub-grid</span> <span class="c1"># points and interpolate the corresponding data values</span> <span class="c1"># except for the last interval due to boundary conditions</span> - <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">2</span><span class="p">):</span> + <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span> <span class="c1"># as a requirement:</span> <span class="c1"># if there is a zero data value such that g[i]=0, then the whole</span> <span class="c1"># interval in f has to be zero to such that f[i+1]=f[i+2]=f[i+3]=0</span> <span class="c1"># according to Eq. (6)</span> - <span class="k">if</span> <span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">==</span><span class="mf">0.</span><span class="p">:</span> - <span class="n">f</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="mf">0.</span><span class="p">,</span><span class="mf">0.</span><span class="p">,</span><span class="mf">0.</span><span class="p">])</span> + <span class="k">if</span> <span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="mf">0.</span><span class="p">:</span> + <span class="n">f</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="mf">0.</span><span class="p">,</span> <span class="mf">0.</span><span class="p">,</span> <span class="mf">0.</span><span class="p">])</span> <span class="c1"># otherwise the sub-grid values are calculated and added to the list</span> <span class="k">else</span><span class="p">:</span> @@ -397,11 +401,11 @@ <span class="c1"># the function value at the first sub-grid point (fi1) is determined</span> <span class="c1"># according to the equal area condition with Eq. (19)</span> - <span class="n">fi1</span><span class="o">=</span><span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fip1</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fi</span> + <span class="n">fi1</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fip1</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fi</span> <span class="c1"># the function value at the second sub-grid point (fi2) is determined</span> <span class="c1"># according Eq. (18)</span> - <span class="n">fi2</span><span class="o">=</span><span class="n">fi1</span><span class="o">+</span><span class="mf">1.</span><span class="o">/</span><span class="mf">3.</span><span class="o">*</span><span class="p">(</span><span class="n">fip1</span><span class="o">-</span><span class="n">fi</span><span class="p">)</span> + <span class="n">fi2</span> <span class="o">=</span> <span class="n">fi1</span><span class="o">+</span><span class="mf">1.</span><span class="o">/</span><span class="mf">3.</span><span class="o">*</span><span class="p">(</span><span class="n">fip1</span><span class="o">-</span><span class="n">fi</span><span class="p">)</span> <span class="c1"># add next interval of interpolated (sub-)grid values</span> <span class="n">f</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fi1</span><span class="p">)</span> @@ -412,18 +416,18 @@ <span class="c1"># go through the data series and extend each interval by two sub-grid</span> <span class="c1"># points and interpolate the corresponding data values</span> <span class="c1"># except for the last interval due to boundary conditions</span> - <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="nb">len</span><span class="p">(</span><span class="n">g</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span> + <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">g</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span> <span class="c1"># as a requirement:</span> <span class="c1"># if there is a zero data value such that g[i]=0, then the whole</span> <span class="c1"># interval in f has to be zero to such that f[i+1]=f[i+2]=f[i+3]=0</span> <span class="c1"># according to Eq. (6)</span> - <span class="k">if</span> <span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">==</span><span class="mf">0.</span><span class="p">:</span> + <span class="k">if</span> <span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="mf">0.</span><span class="p">:</span> <span class="c1"># apply monotonicity filter for interval before</span> <span class="c1"># check if there is "M" or "W" shape</span> - <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span><span class="o">==-</span><span class="mi">1</span> \ - <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span><span class="o">==-</span><span class="mi">1</span> \ - <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">])</span><span class="o">==-</span><span class="mi">1</span><span class="p">:</span> + <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> \ + <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> \ + <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span> <span class="c1"># the monotonicity filter corrects the value at (fim1) by</span> <span class="c1"># substituting (fim1) with (fmon), see Eq. (27), (28) and (29)</span> @@ -435,11 +439,11 @@ <span class="c1"># recomputation of the sub-grid interval values while the</span> <span class="c1"># interval boundaries (fi) and (fip2) remains unchanged</span> <span class="c1"># see Eq. (18) and (19)</span> - <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">=</span><span class="n">fmon</span> - <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span><span class="o">=</span><span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">]</span> - <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span><span class="o">=</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">fmon</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">])</span><span class="o">/</span><span class="mf">3.</span> - <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">=</span><span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span> - <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">=</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">fmon</span><span class="p">)</span><span class="o">/</span><span class="mf">3.</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">=</span> <span class="n">fmon</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">]</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">fmon</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">])</span><span class="o">/</span><span class="mf">3.</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">fmon</span><span class="p">)</span><span class="o">/</span><span class="mf">3.</span> <span class="n">f</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="mf">0.</span><span class="p">,</span><span class="mf">0.</span><span class="p">,</span><span class="mf">0.</span><span class="p">])</span> @@ -452,21 +456,21 @@ <span class="c1"># the value at the end of the interval (fip1) is prescribed by the</span> <span class="c1"># geometric mean, restricted such that non-negativity is guaranteed</span> <span class="c1"># according to Eq. (25)</span> - <span class="n">fip1</span><span class="o">=</span><span class="nb">min</span><span class="p">(</span> <span class="mf">3.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="p">,</span> <span class="mf">3.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="p">)</span> + <span class="n">fip1</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span> <span class="mf">3.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="p">,</span> <span class="mf">3.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="p">)</span> <span class="c1"># the function value at the first sub-grid point (fi1) is determined</span> <span class="c1"># according to the equal area condition with Eq. (19)</span> - <span class="n">fi1</span><span class="o">=</span><span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fip1</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fi</span> + <span class="n">fi1</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fip1</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fi</span> <span class="c1"># the function value at the second sub-grid point (fi2) is determined</span> <span class="c1"># according Eq. (18)</span> - <span class="n">fi2</span><span class="o">=</span><span class="n">fi1</span><span class="o">+</span><span class="mf">1.</span><span class="o">/</span><span class="mf">3.</span><span class="o">*</span><span class="p">(</span><span class="n">fip1</span><span class="o">-</span><span class="n">fi</span><span class="p">)</span> + <span class="n">fi2</span> <span class="o">=</span> <span class="n">fi1</span><span class="o">+</span><span class="mf">1.</span><span class="o">/</span><span class="mf">3.</span><span class="o">*</span><span class="p">(</span><span class="n">fip1</span><span class="o">-</span><span class="n">fi</span><span class="p">)</span> <span class="c1"># apply monotonicity filter for interval before</span> <span class="c1"># check if there is "M" or "W" shape</span> - <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span><span class="o">==-</span><span class="mi">1</span> \ - <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span><span class="o">==-</span><span class="mi">1</span> \ - <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">])</span><span class="o">==-</span><span class="mi">1</span><span class="p">:</span> + <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> \ + <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> \ + <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span> <span class="c1"># the monotonicity filter corrects the value at (fim1) by</span> <span class="c1"># substituting (fim1) with fmon, see Eq. (27), (28) and (29)</span> @@ -478,11 +482,11 @@ <span class="c1"># recomputation of the sub-grid interval values while the</span> <span class="c1"># interval boundaries (fi) and (fip2) remains unchanged</span> <span class="c1"># see Eq. (18) and (19)</span> - <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">=</span><span class="n">fmon</span> - <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span><span class="o">=</span><span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">]</span> - <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span><span class="o">=</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">fmon</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">])</span><span class="o">/</span><span class="mf">3.</span> - <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">=</span><span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span> - <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">=</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">fmon</span><span class="p">)</span><span class="o">/</span><span class="mf">3.</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">=</span> <span class="n">fmon</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">]</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">fmon</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">])</span><span class="o">/</span><span class="mf">3.</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">fmon</span><span class="p">)</span><span class="o">/</span><span class="mf">3.</span> <span class="c1"># add next interval of interpolated (sub-)grid values</span> <span class="n">f</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fi1</span><span class="p">)</span> @@ -495,12 +499,12 @@ <span class="c1"># if there is a zero data value such that g[i]=0, then the whole</span> <span class="c1"># interval in f has to be zero to such that f[i+1]=f[i+2]=f[i+3]=0</span> <span class="c1"># according to Eq. (6)</span> - <span class="k">if</span> <span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">==</span><span class="mf">0.</span><span class="p">:</span> + <span class="k">if</span> <span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="mf">0.</span><span class="p">:</span> <span class="c1"># apply monotonicity filter for interval before</span> <span class="c1"># check if there is "M" or "W" shape</span> - <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span><span class="o">==-</span><span class="mi">1</span> \ - <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span><span class="o">==-</span><span class="mi">1</span> \ - <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">])</span><span class="o">==-</span><span class="mi">1</span><span class="p">:</span> + <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> \ + <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> \ + <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span> <span class="c1"># the monotonicity filter corrects the value at (fim1) by</span> <span class="c1"># substituting (fim1) with (fmon), see Eq. (27), (28) and (29)</span> @@ -512,11 +516,11 @@ <span class="c1"># recomputation of the sub-grid interval values while the</span> <span class="c1"># interval boundaries (fi) and (fip2) remains unchanged</span> <span class="c1"># see Eq. (18) and (19)</span> - <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">=</span><span class="n">fmon</span> - <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span><span class="o">=</span><span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">]</span> - <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span><span class="o">=</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">fmon</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">])</span><span class="o">/</span><span class="mf">3.</span> - <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">=</span><span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span> - <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">=</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">fmon</span><span class="p">)</span><span class="o">/</span><span class="mf">3.</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">=</span> <span class="n">fmon</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">]</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">fmon</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">])</span><span class="o">/</span><span class="mf">3.</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">fmon</span><span class="p">)</span><span class="o">/</span><span class="mf">3.</span> <span class="n">f</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="mf">0.</span><span class="p">,</span><span class="mf">0.</span><span class="p">,</span><span class="mf">0.</span><span class="p">])</span> @@ -537,9 +541,9 @@ <span class="c1"># apply monotonicity filter for interval before</span> <span class="c1"># check if there is "M" or "W" shape</span> - <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span><span class="o">==-</span><span class="mi">1</span> \ - <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span><span class="o">==-</span><span class="mi">1</span> \ - <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">])</span><span class="o">==-</span><span class="mi">1</span><span class="p">:</span> + <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> \ + <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> \ + <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span> <span class="c1"># the monotonicity filter corrects the value at (fim1) by</span> <span class="c1"># substituting (fim1) with (fmon), see Eq. (27), (28) and (29)</span> @@ -551,11 +555,11 @@ <span class="c1"># recomputation of the sub-grid interval values while the</span> <span class="c1"># interval boundaries (fi) and (fip2) remains unchanged</span> <span class="c1"># see Eq. (18) and (19)</span> - <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">=</span><span class="n">fmon</span> - <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span><span class="o">=</span><span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">]</span> - <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span><span class="o">=</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">fmon</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">])</span><span class="o">/</span><span class="mf">3.</span> - <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">=</span><span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span> - <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">=</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">fmon</span><span class="p">)</span><span class="o">/</span><span class="mf">3.</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">=</span> <span class="n">fmon</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">]</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">fmon</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">])</span><span class="o">/</span><span class="mf">3.</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span> + <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">fmon</span><span class="p">)</span><span class="o">/</span><span class="mf">3.</span> <span class="c1"># add next interval of interpolated (sub-)grid values</span> <span class="n">f</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fi1</span><span class="p">)</span> @@ -575,7 +579,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -594,21 +598,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/_modules/get_mars_data.html b/documentation/Sphinx/build/html/_modules/get_mars_data.html index 1256f0b..b137cb8 100644 --- a/documentation/Sphinx/build/html/_modules/get_mars_data.html +++ b/documentation/Sphinx/build/html/_modules/get_mars_data.html @@ -174,27 +174,38 @@ <span class="c1"># (necessary for better documentation with docstrings for later</span> <span class="c1"># online documentation)</span> <span class="c1"># - use of UIFiles class for file selection and deletion</span> -<span class="c1">#</span> +<span class="c1"># - seperated get_mars_data function into several smaller pieces:</span> +<span class="c1"># write_reqheader, mk_server, mk_dates, remove_old, do_retrievment</span> <span class="c1">#</span> <span class="c1"># @License:</span> -<span class="c1"># (C) Copyright 2014-2018.</span> -<span class="c1">#</span> -<span class="c1"># This software is licensed under the terms of the Apache Licence Version 2.0</span> -<span class="c1"># which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.</span> -<span class="c1">#</span> -<span class="c1"># @Program Functionality:</span> -<span class="c1"># This program can be used as a module in the whole flex_extract process</span> -<span class="c1"># or can be run by itself to just extract MARS data from ECMWF. To do so,</span> -<span class="c1"># a couple of necessary parameters has to be passed with the program call.</span> -<span class="c1"># See documentation for more details.</span> -<span class="c1">#</span> -<span class="c1"># @Program Content:</span> -<span class="c1"># - main</span> -<span class="c1"># - get_mars_data</span> -<span class="c1"># - do_retrievement</span> +<span class="c1"># (C) Copyright 2014-2019.</span> +<span class="c1"># Anne Philipp, Leopold Haimberger</span> <span class="c1">#</span> +<span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> +<span class="c1"># International License. To view a copy of this license, visit</span> +<span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> +<span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> <span class="c1">#*******************************************************************************</span> - +<span class="sd">'''This script extracts MARS data from ECMWF servers.</span> + +<span class="sd">At first, the necessary parameters from command line and CONTROL files are</span> +<span class="sd">extracted. They define the data set to be extracted from MARS.</span> + +<span class="sd">This file can also be imported as a module and contains the following</span> +<span class="sd">functions:</span> + +<span class="sd"> * main - the main function of the script</span> +<span class="sd"> * get_mars_data - overall control of ECMWF data retrievment</span> +<span class="sd"> * write_reqheader - writes the header into the mars_request file</span> +<span class="sd"> * mk_server - creates the server connection to ECMWF servers</span> +<span class="sd"> * mk_dates - defines the start and end date</span> +<span class="sd"> * remove_old - deletes old retrieved grib files</span> +<span class="sd"> * do_retrievement - creates individual retrievals</span> + +<span class="sd">Type: get_mars_data.py --help</span> +<span class="sd">to get information about command line parameters.</span> +<span class="sd">Read the documentation for usage instructions.</span> +<span class="sd">'''</span> <span class="c1"># ------------------------------------------------------------------------------</span> <span class="c1"># MODULES</span> <span class="c1"># ------------------------------------------------------------------------------</span> @@ -204,13 +215,15 @@ <span class="kn">from</span> <span class="nn">datetime</span> <span class="k">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</span> <span class="c1"># software specific classes and modules from flex_extract</span> +<span class="c1"># add path to local main python path for flex_extract to get full access</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span> <span class="n">inspect</span><span class="o">.</span><span class="n">getfile</span><span class="p">(</span><span class="n">inspect</span><span class="o">.</span><span class="n">currentframe</span><span class="p">())))</span> <span class="o">+</span> <span class="s1">'/../'</span><span class="p">)</span> <span class="kn">import</span> <span class="nn">_config</span> -<span class="kn">from</span> <span class="nn">tools</span> <span class="k">import</span> <span class="p">(</span><span class="n">my_error</span><span class="p">,</span> <span class="n">normal_exit</span><span class="p">,</span> <span class="n">get_cmdline_arguments</span><span class="p">,</span> +<span class="kn">from</span> <span class="nn">tools</span> <span class="k">import</span> <span class="p">(</span><span class="n">my_error</span><span class="p">,</span> <span class="n">normal_exit</span><span class="p">,</span> <span class="n">get_cmdline_args</span><span class="p">,</span> <span class="n">read_ecenv</span><span class="p">,</span> <span class="n">make_dir</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">classes.EcFlexpart</span> <span class="k">import</span> <span class="n">EcFlexpart</span> <span class="kn">from</span> <span class="nn">classes.UioFiles</span> <span class="k">import</span> <span class="n">UioFiles</span> +<span class="kn">from</span> <span class="nn">classes.MarsRetrieval</span> <span class="k">import</span> <span class="n">MarsRetrieval</span> <span class="k">try</span><span class="p">:</span> <span class="n">ecapi</span> <span class="o">=</span> <span class="kc">True</span> @@ -234,7 +247,7 @@ <span class="sd"> '''</span> - <span class="n">args</span> <span class="o">=</span> <span class="n">get_cmdline_arguments</span><span class="p">()</span> + <span class="n">args</span> <span class="o">=</span> <span class="n">get_cmdline_args</span><span class="p">()</span> <span class="n">c</span> <span class="o">=</span> <span class="n">ControlFile</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">controlfile</span><span class="p">)</span> <span class="n">env_parameter</span> <span class="o">=</span> <span class="n">read_ecenv</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_ECMWF_ENV</span><span class="p">)</span> @@ -243,7 +256,7 @@ <span class="n">c</span><span class="o">.</span><span class="n">check_conditions</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">queue</span><span class="p">)</span> <span class="n">get_mars_data</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> - <span class="n">normal_exit</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">mailfail</span><span class="p">,</span> <span class="s1">'Done!'</span><span class="p">)</span> + <span class="n">normal_exit</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">mailops</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">queue</span><span class="p">,</span> <span class="s1">'Done!'</span><span class="p">)</span> <span class="k">return</span></div> @@ -256,7 +269,7 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> c : :obj:`ControlFile`</span> +<span class="sd"> c : ControlFile</span> <span class="sd"> Contains all the parameters of CONTROL file and</span> <span class="sd"> command line.</span> @@ -264,19 +277,78 @@ <span class="sd"> ------</span> <span class="sd"> '''</span> + <span class="n">c</span><span class="o">.</span><span class="n">ecapi</span> <span class="o">=</span> <span class="n">ecapi</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">):</span> <span class="n">make_dir</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">)</span> - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="nb">print</span><span class="p">(</span><span class="s2">"Retrieving EC data!"</span><span class="p">)</span> - <span class="k">elif</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> - <span class="nb">print</span><span class="p">(</span><span class="s2">"Printing mars requests!"</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s2">"Printing mars requests!"</span><span class="p">)</span> + <span class="k">elif</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s2">"Retrieving EC data and printing mars request!"</span><span class="p">)</span> + <span class="n">write_reqheader</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">_config</span><span class="o">.</span><span class="n">FILE_MARS_REQUESTS</span><span class="p">))</span> <span class="nb">print</span><span class="p">(</span><span class="s2">"start date </span><span class="si">%s</span><span class="s2"> "</span> <span class="o">%</span> <span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">start_date</span><span class="p">))</span> <span class="nb">print</span><span class="p">(</span><span class="s2">"end date </span><span class="si">%s</span><span class="s2"> "</span> <span class="o">%</span> <span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span><span class="p">))</span> - <span class="k">if</span> <span class="n">ecapi</span><span class="p">:</span> + <span class="n">server</span> <span class="o">=</span> <span class="n">mk_server</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> + + <span class="c1"># if data are to be retrieved, clean up any old grib files</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> + <span class="n">remove_old</span><span class="p">(</span><span class="s1">'*grb'</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">)</span> + + <span class="c1"># -------------- flux data ------------------------------------------------</span> + <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">datechunk</span> <span class="o">=</span> <span class="n">mk_dates</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">fluxes</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> + <span class="n">do_retrievement</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">datechunk</span><span class="p">,</span> <span class="n">fluxes</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> + + <span class="c1"># -------------- non flux data --------------------------------------------</span> + <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">datechunk</span> <span class="o">=</span> <span class="n">mk_dates</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">fluxes</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> + <span class="n">do_retrievement</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">datechunk</span><span class="p">,</span> <span class="n">fluxes</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="write_reqheader"><a class="viewcode-back" href="../api.html#get_mars_data.write_reqheader">[docs]</a><span class="k">def</span> <span class="nf">write_reqheader</span><span class="p">(</span><span class="n">marsfile</span><span class="p">):</span> + <span class="sd">'''Writes header with column names into mars request file.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> marsfile : str</span> +<span class="sd"> Path to the mars request file.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="n">MR</span> <span class="o">=</span> <span class="n">MarsRetrieval</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> + <span class="n">attrs</span> <span class="o">=</span> <span class="nb">vars</span><span class="p">(</span><span class="n">MR</span><span class="p">)</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> + <span class="k">del</span> <span class="n">attrs</span><span class="p">[</span><span class="s1">'server'</span><span class="p">]</span> + <span class="k">del</span> <span class="n">attrs</span><span class="p">[</span><span class="s1">'public'</span><span class="p">]</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">marsfile</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'request_number'</span> <span class="o">+</span> <span class="s1">', '</span><span class="p">)</span> + <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">attrs</span><span class="o">.</span><span class="n">iterkeys</span><span class="p">())))</span> + <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> + + <span class="k">return</span></div> + +<div class="viewcode-block" id="mk_server"><a class="viewcode-back" href="../api.html#get_mars_data.mk_server">[docs]</a><span class="k">def</span> <span class="nf">mk_server</span><span class="p">(</span><span class="n">c</span><span class="p">):</span> + <span class="sd">'''Creates server connection if ECMWF WebAPI is available.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> c : ControlFile</span> +<span class="sd"> Contains all the parameters of CONTROL file and</span> +<span class="sd"> command line.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> server : ECMWFDataServer or ECMWFService</span> +<span class="sd"> Connection to ECMWF server via python interface ECMWF WebAPI.</span> + +<span class="sd"> '''</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">ecapi</span><span class="p">:</span> <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">public</span><span class="p">:</span> <span class="n">server</span> <span class="o">=</span> <span class="n">ecmwfapi</span><span class="o">.</span><span class="n">ECMWFDataServer</span><span class="p">()</span> <span class="k">else</span><span class="p">:</span> @@ -284,101 +356,112 @@ <span class="k">else</span><span class="p">:</span> <span class="n">server</span> <span class="o">=</span> <span class="kc">False</span> - <span class="n">c</span><span class="o">.</span><span class="n">ecapi</span> <span class="o">=</span> <span class="n">ecapi</span> <span class="nb">print</span><span class="p">(</span><span class="s1">'Using ECMWF WebAPI: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ecapi</span><span class="p">))</span> - <span class="c1"># basetime geht rückwärts</span> + <span class="k">return</span> <span class="n">server</span></div> + + +<div class="viewcode-block" id="mk_dates"><a class="viewcode-back" href="../api.html#get_mars_data.mk_dates">[docs]</a><span class="k">def</span> <span class="nf">mk_dates</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">fluxes</span><span class="p">):</span> + <span class="sd">'''Prepares start and end date depending on flux or non flux data.</span> + +<span class="sd"> If forecast for maximum one day (upto 24h) are to be retrieved, then</span> +<span class="sd"> collect accumulation data (flux data) with additional days in the</span> +<span class="sd"> beginning and at the end (used for complete disaggregation of</span> +<span class="sd"> original period)</span> - <span class="c1"># if basetime 00</span> - <span class="c1"># dann wird von 12 am vortag bis 00 am start tag geholt</span> - <span class="c1"># aber ohne 12 selbst sondern 12 + step</span> +<span class="sd"> If forecast data longer than 24h are to be retrieved, then</span> +<span class="sd"> collect accumulation data (flux data) with the exact start and end date</span> +<span class="sd"> (disaggregation will be done for the exact time period with</span> +<span class="sd"> boundary conditions)</span> - <span class="c1"># if basetime 12</span> - <span class="c1"># dann wird von 00 + step bis 12 am start tag geholt</span> +<span class="sd"> Since for basetime the extraction contains the 12 hours upfront,</span> +<span class="sd"> if basetime is 0, the starting date has to be the day before and</span> - <span class="c1"># purer forecast wird vorwärts bestimmt.</span> - <span class="c1"># purer forecast mode ist dann wenn größer 24 stunden</span> - <span class="c1"># wie kann das noch festgestellt werden ????</span> - <span class="c1"># nur FC und steps mehr als 24 ?</span> - <span class="c1"># die einzige problematik beim reinen forecast ist die benennung der files!</span> - <span class="c1"># also sobald es Tagesüberschneidungen gibt</span> - <span class="c1"># allerdings ist das relevant und ersichtlich an den NICHT FLUSS DATEN</span> +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> c : ControlFile</span> +<span class="sd"> Contains all the parameters of CONTROL file and</span> +<span class="sd"> command line.</span> +<span class="sd"> fluxes : boolean, optional</span> +<span class="sd"> Decides if the flux parameter settings are stored or</span> +<span class="sd"> the rest of the parameter list.</span> +<span class="sd"> Default value is False.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> start : datetime</span> +<span class="sd"> The start date of the retrieving data set.</span> + +<span class="sd"> end : datetime</span> +<span class="sd"> The end date of the retrieving data set.</span> + +<span class="sd"> chunk : datetime</span> +<span class="sd"> Time period in days for one single mars retrieval.</span> + +<span class="sd"> '''</span> <span class="n">start</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">start_date</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)</span> <span class="n">end</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)</span> - <span class="c1"># time period for one single retrieval</span> - <span class="n">datechunk</span> <span class="o">=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">date_chunk</span><span class="p">))</span> + <span class="n">chunk</span> <span class="o">=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">date_chunk</span><span class="p">))</span> + + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span><span class="p">:</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span> <span class="o">==</span> <span class="s1">'00'</span><span class="p">:</span> + <span class="n">start</span> <span class="o">=</span> <span class="n">start</span> <span class="o">-</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span> <span class="o">==</span> <span class="s1">'00'</span><span class="p">:</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span> <span class="ow">and</span> <span class="n">fluxes</span><span class="p">:</span> <span class="n">start</span> <span class="o">=</span> <span class="n">start</span> <span class="o">-</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> + <span class="n">end</span> <span class="o">=</span> <span class="n">end</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o"><=</span> <span class="mi">24</span><span class="p">:</span> - <span class="n">startm1</span> <span class="o">=</span> <span class="n">start</span> <span class="o">-</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> + <span class="k">return</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">chunk</span></div> - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span> <span class="o">==</span> <span class="s1">'00'</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span> <span class="o">==</span> <span class="s1">'12'</span><span class="p">:</span> - <span class="c1"># endp1 = end + timedelta(days=1)</span> - <span class="n">endp1</span> <span class="o">=</span> <span class="n">end</span> - <span class="k">else</span><span class="p">:</span> - <span class="c1"># endp1 = end + timedelta(days=2)</span> - <span class="n">endp1</span> <span class="o">=</span> <span class="n">end</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> +<div class="viewcode-block" id="remove_old"><a class="viewcode-back" href="../api.html#get_mars_data.remove_old">[docs]</a><span class="k">def</span> <span class="nf">remove_old</span><span class="p">(</span><span class="n">pattern</span><span class="p">,</span> <span class="n">inputdir</span><span class="p">):</span> + <span class="sd">'''Deletes old retrieval files from current input directory</span> +<span class="sd"> matching the pattern.</span> - <span class="c1"># -------------- flux data ------------------------------------------------</span> - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'... removing old flux content of '</span> <span class="o">+</span> <span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">)</span> - <span class="n">tobecleaned</span> <span class="o">=</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> - <span class="s1">'*_acc_*.'</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">getppid</span><span class="p">())</span> <span class="o">+</span> <span class="s1">'.*.grb'</span><span class="p">)</span> - <span class="n">tobecleaned</span><span class="o">.</span><span class="n">delete_files</span><span class="p">()</span> - - <span class="c1"># if forecast for maximum one day (upto 24h) are to be retrieved,</span> - <span class="c1"># collect accumulation data (flux data)</span> - <span class="c1"># with additional days in the beginning and at the end</span> - <span class="c1"># (used for complete disaggregation of original period)</span> - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o"><=</span> <span class="mi">24</span><span class="p">:</span> - <span class="n">do_retrievement</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">startm1</span><span class="p">,</span> <span class="n">endp1</span><span class="p">,</span> <span class="n">datechunk</span><span class="p">,</span> <span class="n">fluxes</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> - - <span class="c1"># if forecast data longer than 24h are to be retrieved,</span> - <span class="c1"># collect accumulation data (flux data)</span> - <span class="c1"># with the exact start and end date</span> - <span class="c1"># (disaggregation will be done for the</span> - <span class="c1"># exact time period with boundary conditions)</span> - <span class="k">else</span><span class="p">:</span> - <span class="n">do_retrievement</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">datechunk</span><span class="p">,</span> <span class="n">fluxes</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> pattern : str</span> +<span class="sd"> The sub string pattern which identifies the files to be deleted.</span> - <span class="c1"># -------------- non flux data --------------------------------------------</span> - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'... removing old non flux content of '</span> <span class="o">+</span> <span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">)</span> - <span class="n">tobecleaned</span> <span class="o">=</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> - <span class="s1">'*__*.'</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">getppid</span><span class="p">())</span> <span class="o">+</span> <span class="s1">'.*.grb'</span><span class="p">)</span> - <span class="n">tobecleaned</span><span class="o">.</span><span class="n">delete_files</span><span class="p">()</span> +<span class="sd"> inputdir : str, optional</span> +<span class="sd"> Path to the directory where the retrieved data is stored.</span> - <span class="n">do_retrievement</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">datechunk</span><span class="p">,</span> <span class="n">fluxes</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... removing old content of '</span> <span class="o">+</span> <span class="n">inputdir</span><span class="p">)</span> + + <span class="n">tobecleaned</span> <span class="o">=</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">pattern</span><span class="p">)</span> + <span class="n">tobecleaned</span><span class="o">.</span><span class="n">delete_files</span><span class="p">()</span> <span class="k">return</span></div> + <div class="viewcode-block" id="do_retrievement"><a class="viewcode-back" href="../api.html#get_mars_data.do_retrievement">[docs]</a><span class="k">def</span> <span class="nf">do_retrievement</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">delta_t</span><span class="p">,</span> <span class="n">fluxes</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> <span class="sd">'''Divides the complete retrieval period in smaller chunks and</span> <span class="sd"> retrieves the data from MARS.</span> <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> c : :obj:`ControlFile`</span> +<span class="sd"> c : ControlFile</span> <span class="sd"> Contains all the parameters of CONTROL file and</span> <span class="sd"> command line.</span> -<span class="sd"> server : :obj:`ECMWFService`</span> +<span class="sd"> server : ECMWFService or ECMWFDataServer</span> <span class="sd"> The server connection to ECMWF.</span> -<span class="sd"> start : :obj:`datetime`</span> +<span class="sd"> start : datetime</span> <span class="sd"> The start date of the retrieval.</span> -<span class="sd"> end : :obj:`datetime`</span> +<span class="sd"> end : datetime</span> <span class="sd"> The end date of the retrieval.</span> -<span class="sd"> delta_t : :obj:`datetime`</span> +<span class="sd"> delta_t : datetime</span> <span class="sd"> Delta_t + 1 is the maximal time period of a single</span> <span class="sd"> retrieval.</span> -<span class="sd"> fluxes : :obj:`boolean`, optional</span> +<span class="sd"> fluxes : boolean, optional</span> <span class="sd"> Decides if the flux parameters are to be retrieved or</span> <span class="sd"> the rest of the parameter list.</span> <span class="sd"> Default value is False.</span> @@ -429,7 +512,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -448,21 +531,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/_modules/index.html b/documentation/Sphinx/build/html/_modules/index.html index 5dc4643..bbc7f47 100644 --- a/documentation/Sphinx/build/html/_modules/index.html +++ b/documentation/Sphinx/build/html/_modules/index.html @@ -151,7 +151,7 @@ <h1>All modules for which code is available</h1> <ul><li><a href="ControlFile.html">ControlFile</a></li> <li><a href="EcFlexpart.html">EcFlexpart</a></li> -<li><a href="GribTools.html">GribTools</a></li> +<li><a href="GribUtil.html">GribUtil</a></li> <li><a href="MarsRetrieval.html">MarsRetrieval</a></li> <li><a href="UioFiles.html">UioFiles</a></li> <li><a href="disaggregation.html">disaggregation</a></li> @@ -172,7 +172,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -191,21 +191,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/_modules/install.html b/documentation/Sphinx/build/html/_modules/install.html index bbb3df0..dc453e7 100644 --- a/documentation/Sphinx/build/html/_modules/install.html +++ b/documentation/Sphinx/build/html/_modules/install.html @@ -166,37 +166,50 @@ <span class="c1"># - moved install_args_and_control in here</span> <span class="c1"># - splitted code in smaller functions</span> <span class="c1"># - delete convert build files in here instead of compile job script</span> -<span class="c1"># - changed static path names to Variables from config file</span> +<span class="c1"># - changed static path names to variables from config file</span> +<span class="c1"># - splitted install function into several smaller pieces</span> +<span class="c1"># - use of tarfile package in python</span> <span class="c1">#</span> <span class="c1"># @License:</span> -<span class="c1"># (C) Copyright 2015-2018.</span> +<span class="c1"># (C) Copyright 2014-2019.</span> +<span class="c1"># Anne Philipp, Leopold Haimberger</span> <span class="c1">#</span> -<span class="c1"># This software is licensed under the terms of the Apache Licence Version 2.0</span> -<span class="c1"># which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.</span> +<span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> +<span class="c1"># International License. To view a copy of this license, visit</span> +<span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> +<span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> <span class="c1">#</span> -<span class="c1"># @Program Functionality:</span> -<span class="c1"># Depending on the selected installation environment (locally or on the</span> -<span class="c1"># ECMWF server ecgate or cca) the program extracts the commandline</span> -<span class="c1"># arguments and the CONTROL file parameter and prepares the corresponding</span> -<span class="c1"># environment. The necessary files are collected in a tar-ball and placed</span> -<span class="c1"># at the target location. There its untared, the environment variables will</span> -<span class="c1"># be set and the Fortran code will be compiled. If the ECMWF environment is</span> -<span class="c1"># selected a job script is prepared and submitted for the remaining</span> -<span class="c1"># configurations after putting the tar-ball to the target ECMWF server.</span> -<span class="c1">#</span> -<span class="c1"># @Program Content:</span> -<span class="c1"># - main</span> -<span class="c1"># - get_install_cmdline_arguments</span> -<span class="c1"># - install_via_gateway</span> -<span class="c1"># - mk_tarball</span> -<span class="c1"># - un_tarball</span> -<span class="c1"># - mk_env_vars</span> -<span class="c1"># - mk_compilejob</span> -<span class="c1"># - mk_job_template</span> -<span class="c1"># - delete_convert_build</span> -<span class="c1"># - make_convert_build</span> +<span class="c1"># @Methods:</span> +<span class="c1"># main</span> +<span class="c1"># get_install_cmdline_args</span> +<span class="c1"># install_via_gateway</span> +<span class="c1"># check_install_conditions</span> +<span class="c1"># mk_tarball</span> +<span class="c1"># un_tarball</span> +<span class="c1"># mk_env_vars</span> +<span class="c1"># mk_compilejob</span> +<span class="c1"># mk_job_template</span> +<span class="c1"># del_convert_build</span> +<span class="c1"># mk_convert_build</span> <span class="c1">#</span> <span class="c1">#*******************************************************************************</span> +<span class="sd">'''This script installs the flex_extract program.</span> + +<span class="sd">Depending on the selected installation environment (locally or on the</span> +<span class="sd">ECMWF server ecgate or cca) the program extracts the commandline</span> +<span class="sd">arguments and the CONTROL file parameter and prepares the corresponding</span> +<span class="sd">environment.</span> +<span class="sd">The necessary files are collected in a tar-ball and placed</span> +<span class="sd">at the target location. There its untared, the environment variables will</span> +<span class="sd">be set and the Fortran code will be compiled.</span> +<span class="sd">If the ECMWF environment is selected a job script is prepared and submitted</span> +<span class="sd">for the remaining configurations after putting the tar-ball to the</span> +<span class="sd">target ECMWF server.</span> + +<span class="sd">Type: install.py --help</span> +<span class="sd">to get information about command line parameters.</span> +<span class="sd">Read the documentation for usage instructions.</span> +<span class="sd">'''</span> <span class="c1"># ------------------------------------------------------------------------------</span> <span class="c1"># MODULES</span> @@ -206,13 +219,15 @@ <span class="kn">import</span> <span class="nn">glob</span> <span class="kn">import</span> <span class="nn">subprocess</span> <span class="kn">import</span> <span class="nn">inspect</span> +<span class="kn">import</span> <span class="nn">tarfile</span> <span class="kn">from</span> <span class="nn">argparse</span> <span class="k">import</span> <span class="n">ArgumentParser</span><span class="p">,</span> <span class="n">ArgumentDefaultsHelpFormatter</span> <span class="c1"># software specific classes and modules from flex_extract</span> <span class="kn">import</span> <span class="nn">_config</span> <span class="kn">from</span> <span class="nn">classes.ControlFile</span> <span class="k">import</span> <span class="n">ControlFile</span> <span class="kn">from</span> <span class="nn">classes.UioFiles</span> <span class="k">import</span> <span class="n">UioFiles</span> -<span class="kn">from</span> <span class="nn">mods.tools</span> <span class="k">import</span> <span class="n">make_dir</span><span class="p">,</span> <span class="n">put_file_to_ecserver</span><span class="p">,</span> <span class="n">submit_job_to_ecserver</span> +<span class="kn">from</span> <span class="nn">mods.tools</span> <span class="k">import</span> <span class="p">(</span><span class="n">make_dir</span><span class="p">,</span> <span class="n">put_file_to_ecserver</span><span class="p">,</span> <span class="n">submit_job_to_ecserver</span><span class="p">,</span> + <span class="n">silent_remove</span><span class="p">,</span> <span class="n">execute_subprocess</span><span class="p">)</span> <span class="c1"># ------------------------------------------------------------------------------</span> <span class="c1"># FUNCTIONS</span> @@ -228,16 +243,16 @@ <span class="sd"> ------</span> <span class="sd"> '''</span> - <span class="n">args</span> <span class="o">=</span> <span class="n">get_install_cmdline_arguments</span><span class="p">()</span> + <span class="n">args</span> <span class="o">=</span> <span class="n">get_install_cmdline_args</span><span class="p">()</span> <span class="n">c</span> <span class="o">=</span> <span class="n">ControlFile</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">controlfile</span><span class="p">)</span> <span class="n">c</span><span class="o">.</span><span class="n">assign_args_to_control</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> - <span class="n">c</span><span class="o">.</span><span class="n">check_install_conditions</span><span class="p">()</span> + <span class="n">check_install_conditions</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="n">install_via_gateway</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="k">return</span></div> -<div class="viewcode-block" id="get_install_cmdline_arguments"><a class="viewcode-back" href="../api.html#install.get_install_cmdline_arguments">[docs]</a><span class="k">def</span> <span class="nf">get_install_cmdline_arguments</span><span class="p">():</span> +<div class="viewcode-block" id="get_install_cmdline_args"><a class="viewcode-back" href="../api.html#install.get_install_cmdline_args">[docs]</a><span class="k">def</span> <span class="nf">get_install_cmdline_args</span><span class="p">():</span> <span class="sd">'''Decomposes the command line arguments and assigns them to variables.</span> <span class="sd"> Apply default values for non mentioned arguments.</span> @@ -246,7 +261,7 @@ <span class="sd"> Return</span> <span class="sd"> ------</span> -<span class="sd"> args : :obj:`Namespace`</span> +<span class="sd"> args : Namespace</span> <span class="sd"> Contains the commandline arguments from script/program call.</span> <span class="sd"> '''</span> <span class="n">parser</span> <span class="o">=</span> <span class="n">ArgumentParser</span><span class="p">(</span><span class="n">description</span><span class="o">=</span><span class="s1">'Install flex_extract software locally or </span><span class="se">\</span> @@ -267,7 +282,7 @@ <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--destination"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"destination"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s1">'ecaccess destination, e.g. leo@genericSftp'</span><span class="p">)</span> - <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--flexpart_root_scripts"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"flexpart_root_scripts"</span><span class="p">,</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--flexpartdir"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"flexpartdir"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"FLEXPART root directory on ECMWF </span><span class="se">\</span> <span class="s2"> servers (to find grib2flexpart and COMMAND file)</span><span class="se">\n\</span> <span class="s2"> Normally flex_extract resides in the scripts directory </span><span class="se">\</span> @@ -294,7 +309,7 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> c : :obj:`ControlFile`</span> +<span class="sd"> c : ControlFile</span> <span class="sd"> Contains all the parameters of CONTROL file and</span> <span class="sd"> command line.</span> @@ -314,10 +329,10 @@ <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">!=</span> <span class="s1">'local'</span><span class="p">:</span> <span class="c1"># ecgate or cca</span> <span class="n">mk_compilejob</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">makefile</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">ecuid</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">ecgid</span><span class="p">,</span> - <span class="n">c</span><span class="o">.</span><span class="n">flexpart_root_scripts</span><span class="p">)</span> + <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">)</span> <span class="n">mk_job_template</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ecuid</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">ecgid</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">gateway</span><span class="p">,</span> - <span class="n">c</span><span class="o">.</span><span class="n">destination</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">flexpart_root_scripts</span><span class="p">)</span> + <span class="n">c</span><span class="o">.</span><span class="n">destination</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">)</span> <span class="n">mk_env_vars</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ecuid</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">ecgid</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">gateway</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">destination</span><span class="p">)</span> @@ -330,39 +345,41 @@ <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_JOBSCRIPTS</span><span class="p">,</span> <span class="n">_config</span><span class="o">.</span><span class="n">FILE_INSTALL_COMPILEJOB</span><span class="p">))</span> + <span class="n">silent_remove</span><span class="p">(</span><span class="n">tar_file</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'job compilation script has been submitted to ecgate for '</span> <span class="o">+</span> - <span class="s1">'installation in '</span> <span class="o">+</span> <span class="n">c</span><span class="o">.</span><span class="n">flexpart_root_scripts</span> <span class="o">+</span> + <span class="s1">'installation in '</span> <span class="o">+</span> <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span> <span class="o">+</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="n">target_dirname</span><span class="p">)</span> <span class="nb">print</span><span class="p">(</span><span class="s1">'You should get an email with subject "flexcompile" within '</span> <span class="o">+</span> <span class="s1">'the next few minutes!'</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="c1">#local</span> - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">flexpart_root_scripts</span> <span class="o">==</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span> <span class="p">:</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'WARNING: FLEXPART_ROOT_SCRIPTS has not been specified'</span><span class="p">)</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span> <span class="o">==</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span> <span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'WARNING: FLEXPARTDIR has not been specified'</span><span class="p">)</span> <span class="nb">print</span><span class="p">(</span><span class="s1">'flex_extract will be installed in here by compiling the '</span> <span class="o">+</span> <span class="s1">'Fortran source in '</span> <span class="o">+</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_FORTRAN_SRC</span><span class="p">)</span> <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_FORTRAN_SRC</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="c1"># creates the target working directory for flex_extract</span> - <span class="n">c</span><span class="o">.</span><span class="n">flexpart_root_scripts</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span> - <span class="n">c</span><span class="o">.</span><span class="n">flexpart_root_scripts</span><span class="p">))</span> - <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">ecd</span><span class="p">)</span> <span class="o">!=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">flexpart_root_scripts</span><span class="p">):</span> + <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span> + <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">))</span> + <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">ecd</span><span class="p">)</span> <span class="o">!=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">):</span> <span class="n">mk_tarball</span><span class="p">(</span><span class="n">tar_file</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span><span class="p">)</span> - <span class="n">make_dir</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">flexpart_root_scripts</span><span class="p">,</span> + <span class="n">make_dir</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">,</span> <span class="n">target_dirname</span><span class="p">))</span> - <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">flexpart_root_scripts</span><span class="p">,</span> + <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">,</span> <span class="n">target_dirname</span><span class="p">))</span> <span class="n">un_tarball</span><span class="p">(</span><span class="n">tar_file</span><span class="p">)</span> - <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">flexpart_root_scripts</span><span class="p">,</span> + <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">,</span> <span class="n">target_dirname</span><span class="p">,</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_FORTRAN_SRC</span><span class="p">))</span> <span class="c1"># Create Fortran executable - CONVERT2</span> <span class="nb">print</span><span class="p">(</span><span class="s1">'Install '</span> <span class="o">+</span> <span class="n">target_dirname</span> <span class="o">+</span> <span class="s1">' software at '</span> <span class="o">+</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="o">+</span> <span class="s1">' in directory '</span> <span class="o">+</span> - <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">flexpart_root_scripts</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> + <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> - <span class="n">delete_convert_build</span><span class="p">(</span><span class="s1">'.'</span><span class="p">)</span> - <span class="n">make_convert_build</span><span class="p">(</span><span class="s1">'.'</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">makefile</span><span class="p">)</span> + <span class="n">del_convert_build</span><span class="p">(</span><span class="s1">'.'</span><span class="p">)</span> + <span class="n">mk_convert_build</span><span class="p">(</span><span class="s1">'.'</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">makefile</span><span class="p">)</span> <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">ecd</span><span class="p">)</span> <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">tar_file</span><span class="p">):</span> @@ -370,6 +387,57 @@ <span class="k">return</span></div> +<div class="viewcode-block" id="check_install_conditions"><a class="viewcode-back" href="../api.html#install.check_install_conditions">[docs]</a><span class="k">def</span> <span class="nf">check_install_conditions</span><span class="p">(</span><span class="n">c</span><span class="p">):</span> + <span class="sd">'''Checks a couple of necessary attributes and conditions</span> +<span class="sd"> for the installation such as if they exist and contain values.</span> +<span class="sd"> Otherwise set default values.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> c : ControlFile</span> +<span class="sd"> Contains all the parameters of CONTROL file and</span> +<span class="sd"> command line.</span> + + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="ow">and</span> \ + <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">_config</span><span class="o">.</span><span class="n">INSTALL_TARGETS</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'ERROR: unknown or missing installation target '</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'target: '</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'please specify correct installation target '</span> <span class="o">+</span> + <span class="nb">str</span><span class="p">(</span><span class="n">INSTALL_TARGETS</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'use -h or --help for help'</span><span class="p">)</span> + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="ow">and</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="o">!=</span> <span class="s1">'local'</span><span class="p">:</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">ecgid</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">ecuid</span> <span class="ow">or</span> \ + <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">gateway</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">destination</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'Please enter your ECMWF user id and group id as well '</span> <span class="o">+</span> + <span class="s1">'as the </span><span class="se">\n</span><span class="s1">name of the local gateway and the ectrans '</span> <span class="o">+</span> + <span class="s1">'destination '</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'with command line options --ecuid --ecgid </span><span class="se">\</span> +<span class="s1"> --gateway --destination'</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'Try "'</span> <span class="o">+</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> \ + <span class="s1">' -h" to print usage information'</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'Please consult ecaccess documentation or ECMWF user </span><span class="se">\</span> +<span class="s1"> support for further details'</span><span class="p">)</span> + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> + + <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">:</span> + <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span> <span class="o">=</span> <span class="s1">'$</span><span class="si">{HOME}</span><span class="s1">'</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span> + <span class="k">else</span><span class="p">:</span> <span class="c1"># local</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">:</span> + <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span> + + <span class="k">return</span></div> + + <div class="viewcode-block" id="mk_tarball"><a class="viewcode-back" href="../api.html#install.mk_tarball">[docs]</a><span class="k">def</span> <span class="nf">mk_tarball</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span> <span class="sd">'''Creates a tarball with all necessary files which need to be sent to the</span> <span class="sd"> installation directory.</span> @@ -380,18 +448,17 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> tarball_path : :obj:`string`</span> +<span class="sd"> tarball_path : str</span> <span class="sd"> The complete path to the tar file which will contain all</span> <span class="sd"> relevant data for flex_extract.</span> -<span class="sd"> target : :obj:`string`</span> +<span class="sd"> target : str</span> <span class="sd"> The queue where the job is submitted to.</span> <span class="sd"> Return</span> <span class="sd"> ------</span> <span class="sd"> '''</span> - <span class="kn">import</span> <span class="nn">tarfile</span> <span class="kn">from</span> <span class="nn">glob</span> <span class="k">import</span> <span class="n">glob</span> <span class="nb">print</span><span class="p">(</span><span class="s1">'Create tarball ...'</span><span class="p">)</span> @@ -404,38 +471,65 @@ <span class="c1"># get lists of the files to be added to the tar file</span> <span class="k">if</span> <span class="n">target</span> <span class="o">==</span> <span class="s1">'local'</span><span class="p">:</span> <span class="n">ECMWF_ENV_FILE</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">runfile</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_RUN_DIR</span><span class="p">,</span> + <span class="s1">'run_local.sh'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> <span class="k">else</span><span class="p">:</span> <span class="n">ECMWF_ENV_FILE</span> <span class="o">=</span> <span class="p">[</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_ECMWF_ENV</span><span class="p">]</span> + <span class="n">runfile</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_RUN_DIR</span><span class="p">,</span> + <span class="s1">'run.sh'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> <span class="n">pyfiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> - <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_LOCAL_PYTHON</span><span class="p">,</span> <span class="s1">'*py'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_PYTHON_SRC</span><span class="p">,</span> <span class="s1">'*py'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> + <span class="n">pytestfiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_PYTHONTEST_SRC</span><span class="p">,</span> <span class="s1">'*py'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> <span class="n">controlfiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> - <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_CONTROLFILES</span><span class="p">,</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_CONTROLFILES</span><span class="p">,</span> <span class="s1">'CONTROL*'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> + <span class="n">testfiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_TEST</span> <span class="p">,</span> <span class="s1">'*'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> <span class="n">tempfiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> - <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span> <span class="p">,</span> <span class="s1">'*'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_TEMPLATES</span> <span class="p">,</span> <span class="s1">'*.temp'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> + <span class="n">nlfiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_TEMPLATES</span> <span class="p">,</span> <span class="s1">'*.nl'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> + <span class="n">gribtable</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_TEMPLATES</span> <span class="p">,</span> <span class="s1">'*grib*'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> <span class="n">ffiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> - <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_FORTRAN_SRC</span><span class="p">,</span> <span class="s1">'*.f*'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_FORTRAN_SRC</span><span class="p">,</span> <span class="s1">'*.f*'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> <span class="n">hfiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> - <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_FORTRAN_SRC</span><span class="p">,</span> <span class="s1">'*.h'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_FORTRAN_SRC</span><span class="p">,</span> <span class="s1">'*.h'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> <span class="n">makefiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> - <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_FORTRAN_SRC</span><span class="p">,</span> <span class="s1">'Makefile*'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_FORTRAN_SRC</span><span class="p">,</span> <span class="s1">'Makefile*'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> + <span class="n">jobdir</span> <span class="o">=</span> <span class="p">[</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_JOBSCRIPTS</span><span class="p">]</span> <span class="c1"># concatenate single lists to one for a better looping</span> - <span class="n">filelist</span> <span class="o">=</span> <span class="n">pyfiles</span> <span class="o">+</span> <span class="n">controlfiles</span> <span class="o">+</span> <span class="n">tempfiles</span> <span class="o">+</span> <span class="n">ffiles</span> <span class="o">+</span> <span class="n">hfiles</span> <span class="o">+</span> \ - <span class="n">makefiles</span> <span class="o">+</span> <span class="n">ECMWF_ENV_FILE</span> + <span class="n">filelist</span> <span class="o">=</span> <span class="n">pyfiles</span> <span class="o">+</span> <span class="n">pytestfiles</span> <span class="o">+</span> <span class="n">controlfiles</span> <span class="o">+</span> <span class="n">tempfiles</span> <span class="o">+</span> <span class="n">nlfiles</span> <span class="o">+</span> \ + <span class="n">ffiles</span> <span class="o">+</span> <span class="n">gribtable</span> <span class="o">+</span> <span class="n">hfiles</span> <span class="o">+</span> <span class="n">makefiles</span> <span class="o">+</span> <span class="n">ECMWF_ENV_FILE</span> <span class="o">+</span> \ + <span class="n">runfile</span> <span class="o">+</span> <span class="n">jobdir</span> <span class="o">+</span> <span class="n">testfiles</span> <span class="o">+</span>\ + <span class="p">[</span><span class="s1">'CODE_OF_CONDUCT.md'</span><span class="p">,</span> <span class="s1">'LICENSE.md'</span><span class="p">,</span> <span class="s1">'README.md'</span><span class="p">]</span> <span class="c1"># create installation tar-file</span> + <span class="n">exclude_files</span> <span class="o">=</span> <span class="p">[</span><span class="s2">".ksh"</span><span class="p">]</span> <span class="k">try</span><span class="p">:</span> <span class="k">with</span> <span class="n">tarfile</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">,</span> <span class="s2">"w:gz"</span><span class="p">)</span> <span class="k">as</span> <span class="n">tar_handle</span><span class="p">:</span> <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">filelist</span><span class="p">:</span> - <span class="n">tar_handle</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">file</span><span class="p">)</span> - + <span class="n">tar_handle</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="n">recursive</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> + <span class="nb">filter</span><span class="o">=</span><span class="k">lambda</span> <span class="n">tarinfo</span><span class="p">:</span> <span class="kc">None</span> + <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">tarinfo</span><span class="o">.</span><span class="n">name</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span> + <span class="ow">in</span> <span class="n">exclude_files</span> + <span class="k">else</span> <span class="n">tarinfo</span><span class="p">)</span> <span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE:</span><span class="se">\n</span><span class="s1"> ... '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">returncode</span><span class="p">))</span> <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> ... '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> - <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... could not make installation tar ball!'</span><span class="p">)</span> + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... could not make installation tar ball!'</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to read tar-file '</span> <span class="o">+</span> + <span class="nb">str</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">))</span> <span class="k">return</span></div> @@ -445,7 +539,7 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> tarball_path : :obj:`string`</span> +<span class="sd"> tarball_path : str</span> <span class="sd"> The complete path to the tar file which will contain all</span> <span class="sd"> relevant data for flex_extract.</span> @@ -453,12 +547,21 @@ <span class="sd"> ------</span> <span class="sd"> '''</span> - <span class="kn">import</span> <span class="nn">tarfile</span> <span class="nb">print</span><span class="p">(</span><span class="s1">'Untar ...'</span><span class="p">)</span> - <span class="k">with</span> <span class="n">tarfile</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">)</span> <span class="k">as</span> <span class="n">tar_handle</span><span class="p">:</span> - <span class="n">tar_handle</span><span class="o">.</span><span class="n">extractall</span><span class="p">()</span> + <span class="k">try</span><span class="p">:</span> + <span class="k">with</span> <span class="n">tarfile</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">)</span> <span class="k">as</span> <span class="n">tar_handle</span><span class="p">:</span> + <span class="n">tar_handle</span><span class="o">.</span><span class="n">extractall</span><span class="p">()</span> + <span class="k">except</span> <span class="n">tarfile</span><span class="o">.</span><span class="n">TarError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to read tar-file '</span> <span class="o">+</span> + <span class="nb">str</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">))</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to read tar-file '</span> <span class="o">+</span> + <span class="nb">str</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">))</span> <span class="k">return</span></div> @@ -469,16 +572,16 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> ecuid : :obj:`string`</span> +<span class="sd"> ecuid : str</span> <span class="sd"> The user id on ECMWF server.</span> -<span class="sd"> ecgid : :obj:`string`</span> +<span class="sd"> ecgid : str</span> <span class="sd"> The group id on ECMWF server.</span> -<span class="sd"> gateway : :obj:`string`</span> +<span class="sd"> gateway : str</span> <span class="sd"> The gateway server the user is using.</span> -<span class="sd"> destination : :obj:`string`</span> +<span class="sd"> destination : str</span> <span class="sd"> The remote destination which is used to transfer files</span> <span class="sd"> from ECMWF server to local gateway server.</span> @@ -488,19 +591,39 @@ <span class="sd"> '''</span> <span class="kn">from</span> <span class="nn">genshi.template.text</span> <span class="k">import</span> <span class="n">NewTextTemplate</span> <span class="kn">from</span> <span class="nn">genshi.template</span> <span class="k">import</span> <span class="n">TemplateLoader</span> + <span class="kn">from</span> <span class="nn">genshi.template.eval</span> <span class="k">import</span> <span class="n">UndefinedError</span> - <span class="n">loader</span> <span class="o">=</span> <span class="n">TemplateLoader</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> - <span class="n">ecmwfvars_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_USER_ENVVARS</span><span class="p">,</span> - <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">loader</span> <span class="o">=</span> <span class="n">TemplateLoader</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> + <span class="n">ecmwfvars_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_USER_ENVVARS</span><span class="p">,</span> + <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span> + + <span class="n">stream</span> <span class="o">=</span> <span class="n">ecmwfvars_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">user_name</span> <span class="o">=</span> <span class="n">ecuid</span><span class="p">,</span> + <span class="n">user_group</span> <span class="o">=</span> <span class="n">ecgid</span><span class="p">,</span> + <span class="n">gateway_name</span> <span class="o">=</span> <span class="n">gateway</span><span class="p">,</span> + <span class="n">destination_name</span> <span class="o">=</span> <span class="n">destination</span> + <span class="p">)</span> + <span class="k">except</span> <span class="n">UndefinedError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template '</span> <span class="o">+</span> + <span class="n">_config</span><span class="o">.</span><span class="n">PATH_ECMWF_ENV</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template '</span> <span class="o">+</span> + <span class="n">_config</span><span class="o">.</span><span class="n">PATH_ECMWF_ENV</span><span class="p">)</span> - <span class="n">stream</span> <span class="o">=</span> <span class="n">ecmwfvars_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">user_name</span> <span class="o">=</span> <span class="n">ecuid</span><span class="p">,</span> - <span class="n">user_group</span> <span class="o">=</span> <span class="n">ecgid</span><span class="p">,</span> - <span class="n">gateway_name</span> <span class="o">=</span> <span class="n">gateway</span><span class="p">,</span> - <span class="n">destination_name</span> <span class="o">=</span> <span class="n">destination</span> - <span class="p">)</span> + <span class="k">try</span><span class="p">:</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_ECMWF_ENV</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">'text'</span><span class="p">))</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> - <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_ECMWF_ENV</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> - <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">'text'</span><span class="p">))</span> + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to write '</span> <span class="o">+</span> + <span class="n">_config</span><span class="o">.</span><span class="n">PATH_ECMWF_ENV</span><span class="p">)</span> <span class="k">return</span></div> @@ -511,20 +634,20 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> makefile : :obj:`string`</span> +<span class="sd"> makefile : str</span> <span class="sd"> Name of the makefile which should be used to compile FORTRAN</span> <span class="sd"> CONVERT2 program.</span> -<span class="sd"> target : :obj:`string`</span> +<span class="sd"> target : str</span> <span class="sd"> The target where the installation should be done, e.g. the queue.</span> -<span class="sd"> ecuid : :obj:`string`</span> +<span class="sd"> ecuid : str</span> <span class="sd"> The user id on ECMWF server.</span> -<span class="sd"> ecgid : :obj:`string`</span> +<span class="sd"> ecgid : str</span> <span class="sd"> The group id on ECMWF server.</span> -<span class="sd"> fp_root : :obj:`string`</span> +<span class="sd"> fp_root : str</span> <span class="sd"> Path to the root directory of FLEXPART environment or flex_extract</span> <span class="sd"> environment.</span> @@ -534,28 +657,48 @@ <span class="sd"> '''</span> <span class="kn">from</span> <span class="nn">genshi.template.text</span> <span class="k">import</span> <span class="n">NewTextTemplate</span> <span class="kn">from</span> <span class="nn">genshi.template</span> <span class="k">import</span> <span class="n">TemplateLoader</span> - - <span class="n">loader</span> <span class="o">=</span> <span class="n">TemplateLoader</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> - <span class="n">compile_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_COMPILEJOB</span><span class="p">,</span> - <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span> + <span class="kn">from</span> <span class="nn">genshi.template.eval</span> <span class="k">import</span> <span class="n">UndefinedError</span> <span class="k">if</span> <span class="n">fp_root</span> <span class="o">==</span> <span class="s1">'../'</span><span class="p">:</span> <span class="n">fp_root</span> <span class="o">=</span> <span class="s1">'$HOME'</span> - <span class="n">stream</span> <span class="o">=</span> <span class="n">compile_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span> - <span class="n">usergroup</span> <span class="o">=</span> <span class="n">ecgid</span><span class="p">,</span> - <span class="n">username</span> <span class="o">=</span> <span class="n">ecuid</span><span class="p">,</span> - <span class="n">version_number</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">_VERSION_STR</span><span class="p">,</span> - <span class="n">fp_root_scripts</span> <span class="o">=</span> <span class="n">fp_root</span><span class="p">,</span> - <span class="n">makefile</span> <span class="o">=</span> <span class="n">makefile</span><span class="p">,</span> - <span class="n">fortran_program</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">FORTRAN_EXECUTABLE</span> - <span class="p">)</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">loader</span> <span class="o">=</span> <span class="n">TemplateLoader</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> + <span class="n">compile_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_COMPILEJOB</span><span class="p">,</span> + <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span> + + <span class="n">stream</span> <span class="o">=</span> <span class="n">compile_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span> + <span class="n">usergroup</span> <span class="o">=</span> <span class="n">ecgid</span><span class="p">,</span> + <span class="n">username</span> <span class="o">=</span> <span class="n">ecuid</span><span class="p">,</span> + <span class="n">version_number</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">_VERSION_STR</span><span class="p">,</span> + <span class="n">fp_root_scripts</span> <span class="o">=</span> <span class="n">fp_root</span><span class="p">,</span> + <span class="n">makefile</span> <span class="o">=</span> <span class="n">makefile</span><span class="p">,</span> + <span class="n">fortran_program</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">FORTRAN_EXECUTABLE</span> + <span class="p">)</span> + <span class="k">except</span> <span class="n">UndefinedError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template '</span> <span class="o">+</span> + <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_COMPILEJOB</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template '</span> <span class="o">+</span> + <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_COMPILEJOB</span><span class="p">)</span> - <span class="n">compilejob</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_JOBSCRIPTS</span><span class="p">,</span> - <span class="n">_config</span><span class="o">.</span><span class="n">FILE_INSTALL_COMPILEJOB</span><span class="p">)</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">compilejob</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_JOBSCRIPTS</span><span class="p">,</span> + <span class="n">_config</span><span class="o">.</span><span class="n">FILE_INSTALL_COMPILEJOB</span><span class="p">)</span> - <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">compilejob</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> - <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">'text'</span><span class="p">))</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">compilejob</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">'text'</span><span class="p">))</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to write '</span> <span class="o">+</span> + <span class="n">compilejob</span><span class="p">)</span> <span class="k">return</span></div> @@ -566,20 +709,20 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> ecuid : :obj:`string`</span> +<span class="sd"> ecuid : str</span> <span class="sd"> The user id on ECMWF server.</span> -<span class="sd"> ecgid : :obj:`string`</span> +<span class="sd"> ecgid : str</span> <span class="sd"> The group id on ECMWF server.</span> -<span class="sd"> gateway : :obj:`string`</span> +<span class="sd"> gateway : str</span> <span class="sd"> The gateway server the user is using.</span> -<span class="sd"> destination : :obj:`string`</span> +<span class="sd"> destination : str</span> <span class="sd"> The remote destination which is used to transfer files</span> <span class="sd"> from ECMWF server to local gateway server.</span> -<span class="sd"> fp_root : :obj:`string`</span> +<span class="sd"> fp_root : str</span> <span class="sd"> Path to the root directory of FLEXPART environment or flex_extract</span> <span class="sd"> environment.</span> @@ -589,37 +732,62 @@ <span class="sd"> '''</span> <span class="kn">from</span> <span class="nn">genshi.template.text</span> <span class="k">import</span> <span class="n">NewTextTemplate</span> <span class="kn">from</span> <span class="nn">genshi.template</span> <span class="k">import</span> <span class="n">TemplateLoader</span> - - <span class="n">loader</span> <span class="o">=</span> <span class="n">TemplateLoader</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> - <span class="n">compile_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_JOB</span><span class="p">,</span> - <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span> + <span class="kn">from</span> <span class="nn">genshi.template.eval</span> <span class="k">import</span> <span class="n">UndefinedError</span> <span class="n">fp_root_path_to_python</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">fp_root</span><span class="p">,</span> <span class="n">_config</span><span class="o">.</span><span class="n">FLEXEXTRACT_DIRNAME</span><span class="p">,</span> - <span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_PYTHON</span><span class="p">)</span> + <span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_PYTHON_SRC</span><span class="p">)</span> + <span class="k">if</span> <span class="s1">'$'</span> <span class="ow">in</span> <span class="n">fp_root_path_to_python</span><span class="p">:</span> + <span class="n">ind</span> <span class="o">=</span> <span class="n">fp_root_path_to_python</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s1">'$'</span><span class="p">)</span> + <span class="n">fp_root_path_to_python</span> <span class="o">=</span> <span class="n">fp_root_path_to_python</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="n">ind</span><span class="p">]</span> <span class="o">+</span> <span class="s1">'$'</span> <span class="o">+</span> \ + <span class="n">fp_root_path_to_python</span><span class="p">[</span><span class="n">ind</span><span class="p">:]</span> + + <span class="k">try</span><span class="p">:</span> + <span class="n">loader</span> <span class="o">=</span> <span class="n">TemplateLoader</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> + <span class="n">compile_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_JOB</span><span class="p">,</span> + <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span> + + <span class="n">stream</span> <span class="o">=</span> <span class="n">compile_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span> + <span class="n">usergroup</span> <span class="o">=</span> <span class="n">ecgid</span><span class="p">,</span> + <span class="n">username</span> <span class="o">=</span> <span class="n">ecuid</span><span class="p">,</span> + <span class="n">version_number</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">_VERSION_STR</span><span class="p">,</span> + <span class="n">fp_root_path</span> <span class="o">=</span> <span class="n">fp_root_path_to_python</span><span class="p">,</span> + <span class="p">)</span> + <span class="k">except</span> <span class="n">UndefinedError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template '</span> <span class="o">+</span> + <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_JOB</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template '</span> <span class="o">+</span> + <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_JOB</span><span class="p">)</span> - <span class="n">stream</span> <span class="o">=</span> <span class="n">compile_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span> - <span class="n">usergroup</span> <span class="o">=</span> <span class="n">ecgid</span><span class="p">,</span> - <span class="n">username</span> <span class="o">=</span> <span class="n">ecuid</span><span class="p">,</span> - <span class="n">version_number</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">_VERSION_STR</span><span class="p">,</span> - <span class="n">fp_root_path</span> <span class="o">=</span> <span class="n">fp_root_path_to_python</span><span class="p">,</span> - <span class="p">)</span> - <span class="n">tempjobfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> - <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_JOB</span><span class="p">)</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">tempjobfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> + <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_JOB</span><span class="p">)</span> + + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">tempjobfile</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">'text'</span><span class="p">))</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> - <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">tempjobfile</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> - <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">'text'</span><span class="p">))</span> + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to write '</span> <span class="o">+</span> + <span class="n">tempjobfile</span><span class="p">)</span> <span class="k">return</span></div> -<div class="viewcode-block" id="delete_convert_build"><a class="viewcode-back" href="../api.html#install.delete_convert_build">[docs]</a><span class="k">def</span> <span class="nf">delete_convert_build</span><span class="p">(</span><span class="n">src_path</span><span class="p">):</span> +<div class="viewcode-block" id="del_convert_build"><a class="viewcode-back" href="../api.html#install.del_convert_build">[docs]</a><span class="k">def</span> <span class="nf">del_convert_build</span><span class="p">(</span><span class="n">src_path</span><span class="p">):</span> <span class="sd">'''Clean up the Fortran source directory and remove all</span> <span class="sd"> build files (e.g. \*.o, \*.mod and CONVERT2)</span> <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> src_path : :obj:`string`</span> +<span class="sd"> src_path : str</span> <span class="sd"> Path to the fortran source directory.</span> <span class="sd"> Return</span> @@ -637,15 +805,15 @@ <span class="k">return</span></div> -<div class="viewcode-block" id="make_convert_build"><a class="viewcode-back" href="../api.html#install.make_convert_build">[docs]</a><span class="k">def</span> <span class="nf">make_convert_build</span><span class="p">(</span><span class="n">src_path</span><span class="p">,</span> <span class="n">makefile</span><span class="p">):</span> +<div class="viewcode-block" id="mk_convert_build"><a class="viewcode-back" href="../api.html#install.mk_convert_build">[docs]</a><span class="k">def</span> <span class="nf">mk_convert_build</span><span class="p">(</span><span class="n">src_path</span><span class="p">,</span> <span class="n">makefile</span><span class="p">):</span> <span class="sd">'''Compiles the Fortran code and generates the executable.</span> <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> src_path : :obj:`string`</span> +<span class="sd"> src_path : str</span> <span class="sd"> Path to the fortran source directory.</span> -<span class="sd"> makefile : :obj:`string`</span> +<span class="sd"> makefile : str</span> <span class="sd"> The name of the makefile which should be used.</span> <span class="sd"> Return</span> @@ -676,9 +844,9 @@ <span class="nb">print</span><span class="p">(</span><span class="s1">'ERROR: Makefile call failed:'</span><span class="p">)</span> <span class="nb">print</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> - <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span><span class="s1">'ls'</span><span class="p">,</span> <span class="s1">'-l'</span><span class="p">,</span> - <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">src_path</span><span class="p">,</span> - <span class="n">_config</span><span class="o">.</span><span class="n">FORTRAN_EXECUTABLE</span><span class="p">)])</span> + <span class="n">execute_subprocess</span><span class="p">([</span><span class="s1">'ls'</span><span class="p">,</span> <span class="s1">'-l'</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">src_path</span><span class="p">,</span> + <span class="n">_config</span><span class="o">.</span><span class="n">FORTRAN_EXECUTABLE</span><span class="p">)],</span> <span class="n">error_msg</span><span class="o">=</span> + <span class="s1">'FORTRAN EXECUTABLE COULD NOT BE FOUND!'</span><span class="p">)</span> <span class="k">return</span></div> @@ -697,7 +865,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -716,21 +884,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/_modules/prepare_flexpart.html b/documentation/Sphinx/build/html/_modules/prepare_flexpart.html index 8367caf..ec53a2e 100644 --- a/documentation/Sphinx/build/html/_modules/prepare_flexpart.html +++ b/documentation/Sphinx/build/html/_modules/prepare_flexpart.html @@ -174,32 +174,40 @@ <span class="c1"># - applied PEP8 style guide</span> <span class="c1"># - added documentation</span> <span class="c1"># - minor changes in programming style for consistence</span> -<span class="c1"># - BUG: removed call of clean_up-Function after call of</span> +<span class="c1"># - BUGFIX: removed call of clean_up-Function after call of</span> <span class="c1"># prepareFlexpart in main since it is already called in</span> <span class="c1"># prepareFlexpart at the end!</span> <span class="c1"># - created function main and moved the two function calls for</span> <span class="c1"># arguments and prepare_flexpart into it</span> <span class="c1">#</span> <span class="c1"># @License:</span> -<span class="c1"># (C) Copyright 2014-2018.</span> -<span class="c1">#</span> -<span class="c1"># This software is licensed under the terms of the Apache Licence Version 2.0</span> -<span class="c1"># which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.</span> -<span class="c1">#</span> -<span class="c1"># @Program Functionality:</span> -<span class="c1"># This program prepares the final version of the grib files which are</span> -<span class="c1"># then used by FLEXPART. It converts the bunch of grib files extracted</span> -<span class="c1"># via get_mars_data by doing for example the necessary conversion to get</span> -<span class="c1"># consistent grids or the disaggregation of flux data. Finally, the</span> -<span class="c1"># program combines the data fields in files per available hour with the</span> -<span class="c1"># naming convention xxYYMMDDHH, where xx should be 2 arbitrary letters</span> -<span class="c1"># (mostly xx is chosen to be "EN").</span> -<span class="c1">#</span> -<span class="c1"># @Program Content:</span> -<span class="c1"># - main</span> -<span class="c1"># - prepare_flexpart</span> +<span class="c1"># (C) Copyright 2014-2019.</span> +<span class="c1"># Anne Philipp, Leopold Haimberger</span> <span class="c1">#</span> +<span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> +<span class="c1"># International License. To view a copy of this license, visit</span> +<span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> +<span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> <span class="c1">#*******************************************************************************</span> +<span class="sd">'''This script prepares the final version of the grib files which are</span> +<span class="sd">then used by FLEXPART.</span> + +<span class="sd">It converts the bunch of grib files extracted via get_mars_data before,</span> +<span class="sd">by doing the necessary conversion to get consistent grids or the</span> +<span class="sd">disaggregation of flux data. Finally, the data fields are combined</span> +<span class="sd">in files per available hour with the naming convention xxYYMMDDHH,</span> +<span class="sd">where xx should be 2 arbitrary letters (mostly xx is chosen to be "EN").</span> + +<span class="sd">This file can also be imported as a module which then contains the following</span> +<span class="sd">functions:</span> + +<span class="sd"> * main</span> +<span class="sd"> * prepare_flexpart</span> + +<span class="sd">Type: prepare_flexpart.py --help</span> +<span class="sd">to get information about command line parameters.</span> +<span class="sd">Read the documentation for usage instructions.</span> +<span class="sd">'''</span> <span class="c1"># ------------------------------------------------------------------------------</span> <span class="c1"># MODULES</span> @@ -211,13 +219,14 @@ <span class="kn">import</span> <span class="nn">socket</span> <span class="c1"># software specific classes and modules from flex_extract</span> - +<span class="c1"># add path to local main python path for flex_extract to get full access</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span> <span class="n">inspect</span><span class="o">.</span><span class="n">getfile</span><span class="p">(</span><span class="n">inspect</span><span class="o">.</span><span class="n">currentframe</span><span class="p">())))</span> <span class="o">+</span> <span class="s1">'/../'</span><span class="p">)</span> <span class="kn">import</span> <span class="nn">_config</span> +<span class="kn">from</span> <span class="nn">checks</span> <span class="k">import</span> <span class="n">check_ppid</span> <span class="kn">from</span> <span class="nn">classes.UioFiles</span> <span class="k">import</span> <span class="n">UioFiles</span> <span class="kn">from</span> <span class="nn">classes.ControlFile</span> <span class="k">import</span> <span class="n">ControlFile</span> -<span class="kn">from</span> <span class="nn">tools</span> <span class="k">import</span> <span class="n">clean_up</span><span class="p">,</span> <span class="n">get_cmdline_arguments</span><span class="p">,</span> <span class="n">read_ecenv</span><span class="p">,</span> <span class="n">make_dir</span> +<span class="kn">from</span> <span class="nn">tools</span> <span class="k">import</span> <span class="n">clean_up</span><span class="p">,</span> <span class="n">get_cmdline_args</span><span class="p">,</span> <span class="n">read_ecenv</span><span class="p">,</span> <span class="n">make_dir</span> <span class="kn">from</span> <span class="nn">classes.EcFlexpart</span> <span class="k">import</span> <span class="n">EcFlexpart</span> <span class="n">ecapi</span> <span class="o">=</span> <span class="s1">'ecmwf'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">socket</span><span class="o">.</span><span class="n">gethostname</span><span class="p">()</span> @@ -244,7 +253,7 @@ <span class="sd"> '''</span> - <span class="n">args</span> <span class="o">=</span> <span class="n">get_cmdline_arguments</span><span class="p">()</span> + <span class="n">args</span> <span class="o">=</span> <span class="n">get_cmdline_args</span><span class="p">()</span> <span class="n">c</span> <span class="o">=</span> <span class="n">ControlFile</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">controlfile</span><span class="p">)</span> <span class="n">env_parameter</span> <span class="o">=</span> <span class="n">read_ecenv</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_ECMWF_ENV</span><span class="p">)</span> @@ -266,11 +275,11 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> ppid : :obj:`int`</span> +<span class="sd"> ppid : int</span> <span class="sd"> Contains the ppid number of the current ECMWF job. It will be None if</span> <span class="sd"> the method was called within this module.</span> -<span class="sd"> c : :obj:`ControlFile`</span> +<span class="sd"> c : ControlFile</span> <span class="sd"> Contains all the parameters of CONTROL file and</span> <span class="sd"> command line.</span> @@ -278,11 +287,7 @@ <span class="sd"> ------</span> <span class="sd"> '''</span> - - <span class="k">if</span> <span class="ow">not</span> <span class="n">ppid</span><span class="p">:</span> - <span class="n">c</span><span class="o">.</span><span class="n">ppid</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">getppid</span><span class="p">())</span> - <span class="k">else</span><span class="p">:</span> - <span class="n">c</span><span class="o">.</span><span class="n">ppid</span> <span class="o">=</span> <span class="n">ppid</span> + <span class="n">check_ppid</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">ppid</span><span class="p">)</span> <span class="n">c</span><span class="o">.</span><span class="n">ecapi</span> <span class="o">=</span> <span class="n">ecapi</span> @@ -295,8 +300,9 @@ <span class="n">month</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span><span class="p">[</span><span class="mi">4</span><span class="p">:</span><span class="mi">6</span><span class="p">]),</span> <span class="n">day</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span><span class="p">[</span><span class="mi">6</span><span class="p">:]))</span> + <span class="c1"># if basetime is 00</span> <span class="c1"># assign starting date minus 1 day</span> - <span class="c1"># since for basetime 00 we need the 12 hours upfront</span> + <span class="c1"># since we need the 12 hours upfront</span> <span class="c1"># (the day before from 12 UTC to current day 00 UTC)</span> <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span> <span class="o">==</span> <span class="s1">'00'</span><span class="p">:</span> <span class="n">start</span> <span class="o">=</span> <span class="n">start</span> <span class="o">-</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> @@ -316,7 +322,7 @@ <span class="n">flexpart</span><span class="o">.</span><span class="n">write_namelist</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="n">flexpart</span><span class="o">.</span><span class="n">deacc_fluxes</span><span class="p">(</span><span class="n">inputfiles</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span> - <span class="c1"># get a list of all files from the root inputdir</span> + <span class="c1"># get a list of all other files</span> <span class="n">inputfiles</span> <span class="o">=</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="s1">'????__??.*'</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ppid</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'.*'</span><span class="p">)</span> <span class="c1"># produce FLEXPART-ready GRIB files and process them -</span> @@ -324,9 +330,10 @@ <span class="n">flexpart</span> <span class="o">=</span> <span class="n">EcFlexpart</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">fluxes</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="n">flexpart</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">inputfiles</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span> <span class="n">flexpart</span><span class="o">.</span><span class="n">process_output</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> + + <span class="c1"># make use of a possible conversion to a</span> + <span class="c1"># specific flexpart binary format</span> <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">grib2flexpart</span><span class="p">:</span> - <span class="c1"># prepare environment for a FLEXPART run</span> - <span class="c1"># to convert grib to flexpart binary format</span> <span class="n">flexpart</span><span class="o">.</span><span class="n">prepare_fp_files</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="c1"># check if in debugging mode, then store all files</span> @@ -352,7 +359,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -371,21 +378,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/_modules/submit.html b/documentation/Sphinx/build/html/_modules/submit.html index 1c09c65..698b355 100644 --- a/documentation/Sphinx/build/html/_modules/submit.html +++ b/documentation/Sphinx/build/html/_modules/submit.html @@ -170,27 +170,42 @@ <span class="c1"># - minor changes in programming style (for consistence)</span> <span class="c1"># - changed path names to variables from config file</span> <span class="c1"># - added option for writing mars requests to extra file</span> -<span class="c1"># additionally,as option without submitting the mars jobs</span> +<span class="c1"># additionally, as option without submitting the mars jobs</span> +<span class="c1"># - splitted submit function to use genshi templates for the</span> +<span class="c1"># job script and avoid code duplication</span> <span class="c1">#</span> <span class="c1"># @License:</span> -<span class="c1"># (C) Copyright 2014-2018.</span> -<span class="c1">#</span> -<span class="c1"># This software is licensed under the terms of the Apache Licence Version 2.0</span> -<span class="c1"># which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.</span> -<span class="c1">#</span> -<span class="c1"># @Program Functionality:</span> -<span class="c1"># This program is the main program of flex_extract and controls the</span> -<span class="c1"># program flow.</span> -<span class="c1"># If it is supposed to work locally then it works through the necessary</span> -<span class="c1"># functions get_mars_data and prepareFlexpart. Otherwise it prepares</span> -<span class="c1"># a shell job script which will do the necessary work on the</span> -<span class="c1"># ECMWF server and is submitted via ecaccess-job-submit.</span> -<span class="c1">#</span> -<span class="c1"># @Program Content:</span> -<span class="c1"># - main</span> -<span class="c1"># - submit</span> +<span class="c1"># (C) Copyright 2014-2019.</span> +<span class="c1"># Anne Philipp, Leopold Haimberger</span> <span class="c1">#</span> +<span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> +<span class="c1"># International License. To view a copy of this license, visit</span> +<span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> +<span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> <span class="c1">#*******************************************************************************</span> +<span class="sd">'''This script allows the user to extract meteorological fields from the ECMWF.</span> + +<span class="sd">It prepares the settings for retrieving the data from ECMWF servers and</span> +<span class="sd">process the resulting files to prepare them for the use with FLEXPART or</span> +<span class="sd">FLEXTRA.</span> + +<span class="sd">If it is supposed to work locally then it works through the necessary</span> +<span class="sd">functions get_mars_data and prepare_flexpart. Otherwise it prepares</span> +<span class="sd">a job script (korn shell) which will do the necessary work on the</span> +<span class="sd">ECMWF server. This script will de submitted via the ecaccess command</span> +<span class="sd">ecaccess-job-submit.</span> + +<span class="sd">This file can also be imported as a module which then contains the following</span> +<span class="sd">functions:</span> + +<span class="sd"> * main - the main function of the script</span> +<span class="sd"> * submit - calls mk_jobscript depending on operation mode and submits its</span> +<span class="sd"> * mk_jobscript - creates the job script from a template</span> + +<span class="sd">Type: submit.py --help</span> +<span class="sd">to get information about command line parameters.</span> +<span class="sd">Read the documentation for usage instructions.</span> +<span class="sd">'''</span> <span class="c1"># ------------------------------------------------------------------------------</span> <span class="c1"># MODULES</span> @@ -200,17 +215,18 @@ <span class="kn">import</span> <span class="nn">subprocess</span> <span class="kn">import</span> <span class="nn">inspect</span> <span class="kn">import</span> <span class="nn">collections</span> +<span class="kn">from</span> <span class="nn">datetime</span> <span class="k">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</span> <span class="c1"># software specific classes and modules from flex_extract</span> <span class="kn">import</span> <span class="nn">_config</span> -<span class="kn">from</span> <span class="nn">mods.tools</span> <span class="k">import</span> <span class="p">(</span><span class="n">normal_exit</span><span class="p">,</span> <span class="n">get_cmdline_arguments</span><span class="p">,</span> +<span class="kn">from</span> <span class="nn">mods.tools</span> <span class="k">import</span> <span class="p">(</span><span class="n">normal_exit</span><span class="p">,</span> <span class="n">get_cmdline_args</span><span class="p">,</span> <span class="n">submit_job_to_ecserver</span><span class="p">,</span> <span class="n">read_ecenv</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">mods.get_mars_data</span> <span class="k">import</span> <span class="n">get_mars_data</span> <span class="kn">from</span> <span class="nn">mods.prepare_flexpart</span> <span class="k">import</span> <span class="n">prepare_flexpart</span> <span class="kn">from</span> <span class="nn">classes.ControlFile</span> <span class="k">import</span> <span class="n">ControlFile</span> <span class="c1"># ------------------------------------------------------------------------------</span> -<span class="c1"># FUNCTIONS</span> +<span class="c1"># METHODS</span> <span class="c1"># ------------------------------------------------------------------------------</span> <div class="viewcode-block" id="main"><a class="viewcode-back" href="../api.html#submit.main">[docs]</a><span class="k">def</span> <span class="nf">main</span><span class="p">():</span> @@ -227,7 +243,7 @@ <span class="sd"> '''</span> - <span class="n">args</span> <span class="o">=</span> <span class="n">get_cmdline_arguments</span><span class="p">()</span> + <span class="n">args</span> <span class="o">=</span> <span class="n">get_cmdline_args</span><span class="p">()</span> <span class="n">c</span> <span class="o">=</span> <span class="n">ControlFile</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">controlfile</span><span class="p">)</span> <span class="n">env_parameter</span> <span class="o">=</span> <span class="n">read_ecenv</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_ECMWF_ENV</span><span class="p">)</span> @@ -246,32 +262,35 @@ <span class="n">get_mars_data</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> <span class="n">prepare_flexpart</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">ppid</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span> - <span class="n">normal_exit</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">mailfail</span><span class="p">,</span> <span class="s1">'FLEX_EXTRACT IS DONE!'</span><span class="p">)</span> + <span class="n">exit_message</span> <span class="o">=</span> <span class="s1">'FLEX_EXTRACT IS DONE!'</span> <span class="k">else</span><span class="p">:</span> - <span class="n">normal_exit</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">mailfail</span><span class="p">,</span> <span class="s1">'PRINTING MARS_REQUESTS DONE!'</span><span class="p">)</span> - <span class="c1"># send files to ECMWF server and install there</span> + <span class="n">exit_message</span> <span class="o">=</span> <span class="s1">'PRINTING MARS_REQUESTS DONE!'</span> + <span class="c1"># send files to ECMWF server</span> <span class="k">else</span><span class="p">:</span> <span class="n">submit</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">job_template</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">queue</span><span class="p">)</span> + <span class="n">exit_message</span> <span class="o">=</span> <span class="s1">'FLEX_EXTRACT JOB SCRIPT IS SUBMITED!'</span> + + <span class="n">normal_exit</span><span class="p">(</span><span class="n">exit_message</span><span class="p">)</span> <span class="k">return</span></div> <div class="viewcode-block" id="submit"><a class="viewcode-back" href="../api.html#submit.submit">[docs]</a><span class="k">def</span> <span class="nf">submit</span><span class="p">(</span><span class="n">jtemplate</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">queue</span><span class="p">):</span> - <span class="sd">'''Prepares the job script and submit it to the specified queue.</span> + <span class="sd">'''Prepares the job script and submits it to the specified queue.</span> <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> jtemplate : :obj:`string`</span> +<span class="sd"> jtemplate : str</span> <span class="sd"> Job template file from sub-directory "_templates" for</span> <span class="sd"> submission to ECMWF. It contains all necessary</span> <span class="sd"> module and variable settings for the ECMWF environment as well as</span> <span class="sd"> the job call and mail report instructions.</span> <span class="sd"> Default is "job.temp".</span> -<span class="sd"> c : :obj:`ControlFile`</span> +<span class="sd"> c : ControlFile</span> <span class="sd"> Contains all the parameters of CONTROL file and</span> <span class="sd"> command line.</span> -<span class="sd"> queue : :obj:`string`</span> +<span class="sd"> queue : str</span> <span class="sd"> Name of queue for submission to ECMWF (e.g. ecgate or cca )</span> <span class="sd"> Return</span> @@ -279,59 +298,127 @@ <span class="sd"> '''</span> - <span class="c1"># read template file and get index for CONTROL input</span> - <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> <span class="n">jtemplate</span><span class="p">))</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> - <span class="n">lftext</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> - <span class="n">insert_point</span> <span class="o">=</span> <span class="n">lftext</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s1">'EOF'</span><span class="p">)</span> - <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span><span class="p">:</span> <span class="c1"># --------- create on demand job script ------------------------------------</span> - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">></span> <span class="mi">24</span><span class="p">:</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> <span class="nb">print</span><span class="p">(</span><span class="s1">'---- Pure forecast mode! ----'</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="nb">print</span><span class="p">(</span><span class="s1">'---- On-demand mode! ----'</span><span class="p">)</span> + <span class="n">job_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_JOBSCRIPTS</span><span class="p">,</span> - <span class="n">jtemplate</span><span class="p">[:</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">+</span> <span class="s1">'ksh'</span><span class="p">)</span> - <span class="n">clist</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">to_list</span><span class="p">()</span> + <span class="n">jtemplate</span><span class="p">[:</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span> <span class="o">+</span> <span class="s1">'.ksh'</span><span class="p">)</span> - <span class="n">lftextondemand</span> <span class="o">=</span> <span class="n">lftext</span><span class="p">[:</span><span class="n">insert_point</span><span class="p">]</span> <span class="o">+</span> <span class="n">clist</span> <span class="o">+</span> <span class="n">lftext</span><span class="p">[</span><span class="n">insert_point</span><span class="p">:]</span> + <span class="c1"># divide time periode into specified number of job chunks</span> + <span class="c1"># to have multiple job scripts</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">job_chunk</span><span class="p">:</span> + <span class="n">start</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">start_date</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)</span> + <span class="n">end</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)</span> + <span class="n">chunk</span> <span class="o">=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="n">c</span><span class="o">.</span><span class="n">job_chunk</span><span class="p">)</span> - <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">job_file</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> - <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lftextondemand</span><span class="p">))</span> + <span class="k">while</span> <span class="n">start</span> <span class="o"><=</span> <span class="n">end</span><span class="p">:</span> + <span class="k">if</span> <span class="p">(</span><span class="n">start</span> <span class="o">+</span> <span class="n">chunk</span><span class="p">)</span> <span class="o"><=</span> <span class="n">end</span><span class="p">:</span> + <span class="n">c</span><span class="o">.</span><span class="n">end_date</span> <span class="o">=</span> <span class="p">(</span><span class="n">start</span> <span class="o">+</span> <span class="n">chunk</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"%Y%m</span><span class="si">%d</span><span class="s2">"</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">c</span><span class="o">.</span><span class="n">end_date</span> <span class="o">=</span> <span class="n">end</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"%Y%m</span><span class="si">%d</span><span class="s2">"</span><span class="p">)</span> - <span class="n">submit_job_to_ecserver</span><span class="p">(</span><span class="n">queue</span><span class="p">,</span> <span class="n">job_file</span><span class="p">)</span> + <span class="n">clist</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">to_list</span><span class="p">()</span> + + <span class="n">mk_jobscript</span><span class="p">(</span><span class="n">jtemplate</span><span class="p">,</span> <span class="n">job_file</span><span class="p">,</span> <span class="n">clist</span><span class="p">)</span> + + <span class="n">job_id</span> <span class="o">=</span> <span class="n">submit_job_to_ecserver</span><span class="p">(</span><span class="n">queue</span><span class="p">,</span> <span class="n">job_file</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'The job id is: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">job_id</span><span class="o">.</span><span class="n">strip</span><span class="p">()))</span> + + <span class="n">start</span> <span class="o">=</span> <span class="n">start</span> <span class="o">+</span> <span class="n">chunk</span> + <span class="n">c</span><span class="o">.</span><span class="n">start_date</span> <span class="o">=</span> <span class="n">start</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"%Y%m</span><span class="si">%d</span><span class="s2">"</span><span class="p">)</span> + <span class="c1"># submit a single job script</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">clist</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">to_list</span><span class="p">()</span> + + <span class="n">mk_jobscript</span><span class="p">(</span><span class="n">jtemplate</span><span class="p">,</span> <span class="n">job_file</span><span class="p">,</span> <span class="n">clist</span><span class="p">)</span> + + <span class="n">job_id</span> <span class="o">=</span> <span class="n">submit_job_to_ecserver</span><span class="p">(</span><span class="n">queue</span><span class="p">,</span> <span class="n">job_file</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'The job id is: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">job_id</span><span class="o">.</span><span class="n">strip</span><span class="p">()))</span> <span class="k">else</span><span class="p">:</span> <span class="c1"># --------- create operational job script ----------------------------------</span> <span class="nb">print</span><span class="p">(</span><span class="s1">'---- Operational mode! ----'</span><span class="p">)</span> + <span class="n">job_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_JOBSCRIPTS</span><span class="p">,</span> <span class="n">jtemplate</span><span class="p">[:</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span> <span class="o">+</span> <span class="s1">'oper.ksh'</span><span class="p">)</span> - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span><span class="p">:</span> - <span class="n">mt</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">maxstep</span><span class="p">)</span> - <span class="k">else</span><span class="p">:</span> - <span class="n">mt</span> <span class="o">=</span> <span class="mi">0</span> - <span class="n">c</span><span class="o">.</span><span class="n">start_date</span> <span class="o">=</span> <span class="s1">'$</span><span class="si">{MSJ_YEAR}</span><span class="s1">$</span><span class="si">{MSJ_MONTH}</span><span class="s1">$</span><span class="si">{MSJ_DAY}</span><span class="s1">'</span> <span class="n">c</span><span class="o">.</span><span class="n">end_date</span> <span class="o">=</span> <span class="s1">'$</span><span class="si">{MSJ_YEAR}</span><span class="s1">$</span><span class="si">{MSJ_MONTH}</span><span class="s1">$</span><span class="si">{MSJ_DAY}</span><span class="s1">'</span> <span class="n">c</span><span class="o">.</span><span class="n">base_time</span> <span class="o">=</span> <span class="s1">'$</span><span class="si">{MSJ_BASETIME}</span><span class="s1">'</span> - <span class="k">if</span> <span class="n">mt</span> <span class="o">></span> <span class="mi">24</span><span class="p">:</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">></span> <span class="mi">24</span><span class="p">:</span> <span class="n">c</span><span class="o">.</span><span class="n">time</span> <span class="o">=</span> <span class="s1">'$</span><span class="si">{MSJ_BASETIME}</span><span class="s1"> </span><span class="si">{MSJ_BASETIME}</span><span class="s1">'</span> - <span class="n">colist</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">to_list</span><span class="p">()</span> + <span class="n">clist</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">to_list</span><span class="p">()</span> - <span class="n">lftextoper</span> <span class="o">=</span> <span class="n">lftext</span><span class="p">[:</span><span class="n">insert_point</span><span class="p">]</span> <span class="o">+</span> <span class="n">colist</span> <span class="o">+</span> <span class="n">lftext</span><span class="p">[</span><span class="n">insert_point</span> <span class="o">+</span> <span class="mi">2</span><span class="p">:]</span> + <span class="n">mk_jobscript</span><span class="p">(</span><span class="n">jtemplate</span><span class="p">,</span> <span class="n">job_file</span><span class="p">,</span> <span class="n">clist</span><span class="p">)</span> - <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">job_file</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> - <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lftextoper</span><span class="p">))</span> + <span class="n">job_id</span> <span class="o">=</span> <span class="n">submit_job_to_ecserver</span><span class="p">(</span><span class="n">queue</span><span class="p">,</span> <span class="n">job_file</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'The job id is: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">job_id</span><span class="o">.</span><span class="n">strip</span><span class="p">()))</span> + + <span class="nb">print</span><span class="p">(</span><span class="s1">'You should get an email per job with subject flex.hostname.pid'</span><span class="p">)</span> - <span class="n">submit_job_to_ecserver</span><span class="p">(</span><span class="n">queue</span><span class="p">,</span> <span class="n">job_file</span><span class="p">)</span> + <span class="k">return</span></div> + +<div class="viewcode-block" id="mk_jobscript"><a class="viewcode-back" href="../api.html#submit.mk_jobscript">[docs]</a><span class="k">def</span> <span class="nf">mk_jobscript</span><span class="p">(</span><span class="n">jtemplate</span><span class="p">,</span> <span class="n">job_file</span><span class="p">,</span> <span class="n">clist</span><span class="p">):</span> + <span class="sd">'''Creates the job script from template.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> jtemplate : str</span> +<span class="sd"> Job template file from sub-directory "_templates" for</span> +<span class="sd"> submission to ECMWF. It contains all necessary</span> +<span class="sd"> module and variable settings for the ECMWF environment as well as</span> +<span class="sd"> the job call and mail report instructions.</span> +<span class="sd"> Default is "job.temp".</span> + +<span class="sd"> job_file : str</span> +<span class="sd"> Path to the job script file.</span> - <span class="c1"># --------------------------------------------------------------------------</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'You should get an email with subject flex.hostname.pid'</span><span class="p">)</span> +<span class="sd"> clist : list of str</span> +<span class="sd"> Contains all necessary parameters for ECMWF CONTROL file.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + <span class="kn">from</span> <span class="nn">genshi.template.text</span> <span class="k">import</span> <span class="n">NewTextTemplate</span> + <span class="kn">from</span> <span class="nn">genshi.template</span> <span class="k">import</span> <span class="n">TemplateLoader</span> + <span class="kn">from</span> <span class="nn">genshi.template.eval</span> <span class="k">import</span> <span class="n">UndefinedError</span> + + <span class="c1"># load template and insert control content as list</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">loader</span> <span class="o">=</span> <span class="n">TemplateLoader</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> + <span class="n">control_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">jtemplate</span><span class="p">,</span> + <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span> + + <span class="n">stream</span> <span class="o">=</span> <span class="n">control_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">control_content</span><span class="o">=</span><span class="n">clist</span><span class="p">)</span> + <span class="k">except</span> <span class="n">UndefinedError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate jobscript'</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate jobscript'</span><span class="p">)</span> + + <span class="c1"># create jobscript file</span> + <span class="k">try</span><span class="p">:</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">job_file</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">'text'</span><span class="p">))</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to write '</span> <span class="o">+</span> <span class="n">job_file</span><span class="p">)</span> <span class="k">return</span></div> + <span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span> <span class="n">main</span><span class="p">()</span> </pre></div> @@ -346,7 +433,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -365,21 +452,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/_modules/tools.html b/documentation/Sphinx/build/html/_modules/tools.html index cc69bc1..e32aec1 100644 --- a/documentation/Sphinx/build/html/_modules/tools.html +++ b/documentation/Sphinx/build/html/_modules/tools.html @@ -166,36 +166,47 @@ <span class="c1"># - created functions: interpret_args_and_control, clean_up</span> <span class="c1"># my_error, normal_exit, init128, to_param_id</span> <span class="c1">#</span> -<span class="c1"># April 2018 - Anne Philipp (University of Vienna):</span> +<span class="c1"># April - December 2018 - Anne Philipp (University of Vienna):</span> <span class="c1"># - applied PEP8 style guide</span> <span class="c1"># - added documentation</span> -<span class="c1"># - moved all functions from file Flexparttools to this file tools</span> -<span class="c1"># - added function get_list_as_string</span> +<span class="c1"># - moved all non class methods from former file Flexparttools in here</span> <span class="c1"># - seperated args and control interpretation</span> +<span class="c1"># - added functions get_list_as_string, read_ecenv, send_mail, make_dir,</span> +<span class="c1"># put_file_to_ecserver, submit_job_to_ecserver, get_informations,</span> +<span class="c1"># get_dimensions, execute_subprocess, none_or_int, none_or_str</span> <span class="c1">#</span> <span class="c1"># @License:</span> -<span class="c1"># (C) Copyright 2014-2018.</span> +<span class="c1"># (C) Copyright 2014-2019.</span> +<span class="c1"># Anne Philipp, Leopold Haimberger</span> <span class="c1">#</span> -<span class="c1"># This software is licensed under the terms of the Apache Licence Version 2.0</span> -<span class="c1"># which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.</span> -<span class="c1">#</span> -<span class="c1"># @Modul Description:</span> -<span class="c1"># This module contains a couple of helpful functions which are</span> -<span class="c1"># used in different places in flex_extract.</span> -<span class="c1">#</span> -<span class="c1"># @Module Content:</span> -<span class="c1"># - get_cmdline_arguments</span> -<span class="c1"># - clean_up</span> -<span class="c1"># - my_error</span> -<span class="c1"># - normal_exit</span> -<span class="c1"># - product</span> -<span class="c1"># - silent_remove</span> -<span class="c1"># - init128</span> -<span class="c1"># - to_param_id</span> -<span class="c1"># - get_list_as_string</span> -<span class="c1"># - make_dir</span> +<span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> +<span class="c1"># International License. To view a copy of this license, visit</span> +<span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> +<span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> <span class="c1">#</span> +<span class="c1"># @Methods:</span> +<span class="c1"># none_or_str</span> +<span class="c1"># none_or_int</span> +<span class="c1"># get_cmdline_args</span> +<span class="c1"># read_ecenv</span> +<span class="c1"># clean_up</span> +<span class="c1"># my_error</span> +<span class="c1"># send_mail</span> +<span class="c1"># normal_exit</span> +<span class="c1"># product</span> +<span class="c1"># silent_remove</span> +<span class="c1"># init128</span> +<span class="c1"># to_param_id</span> +<span class="c1"># get_list_as_string</span> +<span class="c1"># make_dir</span> +<span class="c1"># put_file_to_ecserver</span> +<span class="c1"># submit_job_to_ecserver</span> +<span class="c1"># get_informations</span> +<span class="c1"># get_dimensions</span> +<span class="c1"># execute_subprocess</span> <span class="c1">#*******************************************************************************</span> +<span class="sd">'''This module contains a collection of diverse tasks within flex_extract.</span> +<span class="sd">'''</span> <span class="c1"># ------------------------------------------------------------------------------</span> <span class="c1"># MODULES</span> @@ -206,10 +217,12 @@ <span class="kn">import</span> <span class="nn">glob</span> <span class="kn">import</span> <span class="nn">subprocess</span> <span class="kn">import</span> <span class="nn">traceback</span> +<span class="kn">import</span> <span class="nn">exceptions</span> +<span class="kn">from</span> <span class="nn">datetime</span> <span class="k">import</span> <span class="n">datetime</span> <span class="kn">from</span> <span class="nn">argparse</span> <span class="k">import</span> <span class="n">ArgumentParser</span><span class="p">,</span> <span class="n">ArgumentDefaultsHelpFormatter</span> <span class="c1"># ------------------------------------------------------------------------------</span> -<span class="c1"># FUNCTIONS</span> +<span class="c1"># METHODS</span> <span class="c1"># ------------------------------------------------------------------------------</span> <div class="viewcode-block" id="none_or_str"><a class="viewcode-back" href="../api.html#tools.none_or_str">[docs]</a><span class="k">def</span> <span class="nf">none_or_str</span><span class="p">(</span><span class="n">value</span><span class="p">):</span> @@ -218,7 +231,7 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> value : :obj:`string`</span> +<span class="sd"> value : str</span> <span class="sd"> String to be checked for the "None" word.</span> <span class="sd"> Return</span> @@ -237,7 +250,7 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> value : :obj:`string`</span> +<span class="sd"> value : str</span> <span class="sd"> String to be checked for the "None" word.</span> <span class="sd"> Return</span> @@ -251,7 +264,7 @@ <span class="k">return</span> <span class="kc">None</span> <span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">)</span></div> -<div class="viewcode-block" id="get_cmdline_arguments"><a class="viewcode-back" href="../api.html#tools.get_cmdline_arguments">[docs]</a><span class="k">def</span> <span class="nf">get_cmdline_arguments</span><span class="p">():</span> +<div class="viewcode-block" id="get_cmdline_args"><a class="viewcode-back" href="../api.html#tools.get_cmdline_args">[docs]</a><span class="k">def</span> <span class="nf">get_cmdline_args</span><span class="p">():</span> <span class="sd">'''Decomposes the command line arguments and assigns them to variables.</span> <span class="sd"> Apply default values for non mentioned arguments.</span> @@ -260,7 +273,7 @@ <span class="sd"> Return</span> <span class="sd"> ------</span> -<span class="sd"> args : :obj:`Namespace`</span> +<span class="sd"> args : Namespace</span> <span class="sd"> Contains the commandline arguments from script/program call.</span> <span class="sd"> '''</span> @@ -268,7 +281,7 @@ <span class="s1"> ECMWF MARS archive'</span><span class="p">,</span> <span class="n">formatter_class</span><span class="o">=</span><span class="n">ArgumentDefaultsHelpFormatter</span><span class="p">)</span> - <span class="c1"># the most important arguments</span> + <span class="c1"># control parameters that override control file values</span> <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--start_date"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"start_date"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"start date YYYYMMDD"</span><span class="p">)</span> @@ -278,23 +291,12 @@ <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--date_chunk"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"date_chunk"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"# of days to be retrieved at once"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--job_chunk"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"job_chunk"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"# of days to be retrieved within a single job"</span><span class="p">)</span> <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--controlfile"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"controlfile"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s1">'CONTROL.temp'</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"file with CONTROL parameters"</span><span class="p">)</span> - - <span class="c1"># parameter for extra output information</span> - <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--debug"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"debug"</span><span class="p">,</span> - <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> - <span class="n">help</span><span class="o">=</span><span class="s2">"debug mode - leave temporary files intact"</span><span class="p">)</span> - <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--request"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"request"</span><span class="p">,</span> - <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> - <span class="n">help</span><span class="o">=</span><span class="s2">"list all mars request in file mars_requests.dat </span><span class="se">\</span> -<span class="s2"> and skip submission to mars"</span><span class="p">)</span> - <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--public"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"public"</span><span class="p">,</span> - <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> - <span class="n">help</span><span class="o">=</span><span class="s2">"public mode - retrieves the public datasets"</span><span class="p">)</span> - - <span class="c1"># some arguments that override the default in the CONTROL file</span> <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--basetime"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"basetime"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"base such as 00 or 12 (for half day retrievals)"</span><span class="p">)</span> @@ -308,14 +310,30 @@ <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"area defined as north/west/south/east"</span><span class="p">)</span> - <span class="c1"># set the working directories</span> + <span class="c1"># some switches</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--debug"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"debug"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"debug mode - leave temporary files intact"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--request"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"request"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"list all mars requests in file mars_requests.dat"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--public"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"public"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"public mode - retrieves the public datasets"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--rrint"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"rrint"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"select old or new precipitation interpolation </span><span class="se">\</span> +<span class="s2"> 0 - old method</span><span class="se">\</span> +<span class="s2"> 1 - new method (additional subgrid points)"</span><span class="p">)</span> + + <span class="c1"># set directories</span> <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--inputdir"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"inputdir"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"root directory for storing intermediate files"</span><span class="p">)</span> <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--outputdir"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"outputdir"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"root directory for storing output files"</span><span class="p">)</span> - <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--flexpart_root_scripts"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"flexpart_root_scripts"</span><span class="p">,</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--flexpartdir"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"flexpartdir"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"FLEXPART root directory (to find grib2flexpart </span><span class="se">\</span> <span class="s2"> and COMMAND file)</span><span class="se">\n</span><span class="s2"> Normally flex_extract resides in </span><span class="se">\</span> @@ -323,7 +341,7 @@ <span class="c1"># this is only used by prepare_flexpart.py to rerun a postprocessing step</span> <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--ppid"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"ppid"</span><span class="p">,</span> - <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"specify parent process id for </span><span class="se">\</span> <span class="s2"> rerun of prepare_flexpart"</span><span class="p">)</span> @@ -340,36 +358,45 @@ <span class="k">return</span> <span class="n">args</span></div> -<div class="viewcode-block" id="read_ecenv"><a class="viewcode-back" href="../api.html#tools.read_ecenv">[docs]</a><span class="k">def</span> <span class="nf">read_ecenv</span><span class="p">(</span><span class="n">filename</span><span class="p">):</span> +<div class="viewcode-block" id="read_ecenv"><a class="viewcode-back" href="../api.html#tools.read_ecenv">[docs]</a><span class="k">def</span> <span class="nf">read_ecenv</span><span class="p">(</span><span class="n">filepath</span><span class="p">):</span> <span class="sd">'''Reads the file into a dictionary where the key values are the parameter</span> <span class="sd"> names.</span> <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> filename : :obj:`string`</span> +<span class="sd"> filepath : str</span> <span class="sd"> Path to file where the ECMWF environment parameters are stored.</span> <span class="sd"> Return</span> <span class="sd"> ------</span> -<span class="sd"> envs : :obj:`dictionary`</span> +<span class="sd"> envs : dict</span> <span class="sd"> Contains the environment parameter ecuid, ecgid, gateway</span> <span class="sd"> and destination for ECMWF server environments.</span> <span class="sd"> '''</span> <span class="n">envs</span><span class="o">=</span> <span class="p">{}</span> + <span class="k">try</span><span class="p">:</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filepath</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">f</span><span class="p">:</span> + <span class="n">data</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">()</span> + <span class="n">envs</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">])]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> - <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> - <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">f</span><span class="p">:</span> - <span class="n">data</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">()</span> - <span class="n">envs</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">])]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... Error occured while trying to read ECMWF_ENV '</span> + <span class="s1">'file: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">filepath</span><span class="p">))</span> <span class="k">return</span> <span class="n">envs</span></div> <div class="viewcode-block" id="clean_up"><a class="viewcode-back" href="../api.html#tools.clean_up">[docs]</a><span class="k">def</span> <span class="nf">clean_up</span><span class="p">(</span><span class="n">c</span><span class="p">):</span> - <span class="sd">'''Remove all files from intermediate directory (inputdir).</span> + <span class="sd">'''Remove files from the intermediate directory (inputdir).</span> + +<span class="sd"> It keeps the final FLEXPART input files if program runs without</span> +<span class="sd"> ECMWF Api and keywords "ectrans" or "ecstorage" are set to "1".</span> <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> c : :obj:`ControlFile`</span> +<span class="sd"> c : ControlFile</span> <span class="sd"> Contains all the parameters of CONTROL file and</span> <span class="sd"> command line.</span> @@ -378,16 +405,19 @@ <span class="sd"> '''</span> - <span class="nb">print</span><span class="p">(</span><span class="s2">"clean_up"</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s2">"... clean inputdir!"</span><span class="p">)</span> - <span class="n">cleanlist</span> <span class="o">=</span> <span class="n">glob</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span> <span class="o">+</span> <span class="s2">"/*"</span><span class="p">)</span> - <span class="k">for</span> <span class="n">clist</span> <span class="ow">in</span> <span class="n">cleanlist</span><span class="p">:</span> - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">prefix</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">clist</span><span class="p">:</span> - <span class="n">silent_remove</span><span class="p">(</span><span class="n">clist</span><span class="p">)</span> - <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">ecapi</span> <span class="ow">is</span> <span class="kc">False</span> <span class="ow">and</span> <span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ectrans</span> <span class="o">==</span> <span class="s1">'1'</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">ecstorage</span> <span class="o">==</span> <span class="s1">'1'</span><span class="p">):</span> - <span class="n">silent_remove</span><span class="p">(</span><span class="n">clist</span><span class="p">)</span> + <span class="n">cleanlist</span> <span class="o">=</span> <span class="n">glob</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="s2">"*"</span><span class="p">))</span> - <span class="nb">print</span><span class="p">(</span><span class="s2">"Done"</span><span class="p">)</span> + <span class="k">if</span> <span class="n">cleanlist</span><span class="p">:</span> + <span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">cleanlist</span><span class="p">:</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">prefix</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">element</span><span class="p">:</span> + <span class="n">silent_remove</span><span class="p">(</span><span class="n">element</span><span class="p">)</span> + <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">ecapi</span> <span class="ow">is</span> <span class="kc">False</span> <span class="ow">and</span> <span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ectrans</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">ecstorage</span> <span class="o">==</span> <span class="mi">1</span><span class="p">):</span> + <span class="n">silent_remove</span><span class="p">(</span><span class="n">element</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s2">"... done!"</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s2">"... nothing to clean!"</span><span class="p">)</span> <span class="k">return</span></div> @@ -398,12 +428,12 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> user : :obj:`list` of :obj:`string`</span> +<span class="sd"> user : list of str</span> <span class="sd"> Contains all email addresses which should be notified.</span> <span class="sd"> It might also contain just the ecmwf user name which wil trigger</span> <span class="sd"> mailing to the associated email address for this user.</span> -<span class="sd"> message : :obj:`string`, optional</span> +<span class="sd"> message : str, optional</span> <span class="sd"> Error message. Default value is "ERROR".</span> <span class="sd"> Return</span> @@ -411,76 +441,86 @@ <span class="sd"> '''</span> - <span class="nb">print</span><span class="p">(</span><span class="n">message</span><span class="p">)</span> + <span class="n">trace</span> <span class="o">=</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_stack</span><span class="p">())</span> + <span class="n">full_message</span> <span class="o">=</span> <span class="n">message</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\n\n</span><span class="s1">'</span> <span class="o">+</span> <span class="n">trace</span> - <span class="c1"># comment if user does not want email notification directly from python</span> - <span class="k">for</span> <span class="n">user</span> <span class="ow">in</span> <span class="n">users</span><span class="p">:</span> - <span class="k">if</span> <span class="s1">'$</span><span class="si">{USER}</span><span class="s1">'</span> <span class="ow">in</span> <span class="n">user</span><span class="p">:</span> - <span class="n">user</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s1">'USER'</span><span class="p">)</span> - <span class="k">try</span><span class="p">:</span> - <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">'mail'</span><span class="p">,</span> <span class="s1">'-s flex_extract_v7.1 ERROR'</span><span class="p">,</span> - <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">user</span><span class="p">)],</span> - <span class="n">stdin</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> - <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> - <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> - <span class="n">bufsize</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> - <span class="n">trace</span> <span class="o">=</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_stack</span><span class="p">())</span> - <span class="n">pout</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">communicate</span><span class="p">(</span><span class="nb">input</span><span class="o">=</span><span class="n">message</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\n\n</span><span class="s1">'</span> <span class="o">+</span> <span class="n">trace</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> - <span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'ERROR: '</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span> - <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'Email could not be sent!'</span><span class="p">)</span> - <span class="k">else</span><span class="p">:</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'Email sent to '</span> <span class="o">+</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">user</span><span class="p">)</span> <span class="o">+</span> <span class="s1">' '</span> <span class="o">+</span> - <span class="n">pout</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span> + <span class="nb">print</span><span class="p">(</span><span class="n">full_message</span><span class="p">)</span> + + <span class="n">send_mail</span><span class="p">(</span><span class="n">users</span><span class="p">,</span> <span class="s1">'ERROR'</span><span class="p">,</span> <span class="n">full_message</span><span class="p">)</span> <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="k">return</span></div> -<div class="viewcode-block" id="normal_exit"><a class="viewcode-back" href="../api.html#tools.normal_exit">[docs]</a><span class="k">def</span> <span class="nf">normal_exit</span><span class="p">(</span><span class="n">users</span><span class="p">,</span> <span class="n">message</span><span class="o">=</span><span class="s1">'Done!'</span><span class="p">):</span> +<div class="viewcode-block" id="send_mail"><a class="viewcode-back" href="../api.html#tools.send_mail">[docs]</a><span class="k">def</span> <span class="nf">send_mail</span><span class="p">(</span><span class="n">users</span><span class="p">,</span> <span class="n">success_mode</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span> <span class="sd">'''Prints a specific exit message which can be passed to the function.</span> <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> user : :obj:`list` of :obj:`string`</span> +<span class="sd"> users : list of str</span> <span class="sd"> Contains all email addresses which should be notified.</span> <span class="sd"> It might also contain just the ecmwf user name which wil trigger</span> <span class="sd"> mailing to the associated email address for this user.</span> -<span class="sd"> message : :obj:`string`, optional</span> +<span class="sd"> success_mode : str</span> +<span class="sd"> States the exit mode of the program to put into</span> +<span class="sd"> the mail subject line.</span> + +<span class="sd"> message : str, optional</span> <span class="sd"> Message for exiting program. Default value is "Done!".</span> <span class="sd"> Return</span> <span class="sd"> ------</span> <span class="sd"> '''</span> - <span class="nb">print</span><span class="p">(</span><span class="n">message</span><span class="p">)</span> - <span class="c1"># comment if user does not want notification directly from python</span> <span class="k">for</span> <span class="n">user</span> <span class="ow">in</span> <span class="n">users</span><span class="p">:</span> <span class="k">if</span> <span class="s1">'$</span><span class="si">{USER}</span><span class="s1">'</span> <span class="ow">in</span> <span class="n">user</span><span class="p">:</span> <span class="n">user</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s1">'USER'</span><span class="p">)</span> <span class="k">try</span><span class="p">:</span> - <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">'mail'</span><span class="p">,</span> <span class="s1">'-s flex_extract_v7.1 normal exit'</span><span class="p">,</span> - <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">user</span><span class="p">)],</span> + <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">'mail'</span><span class="p">,</span> <span class="s1">'-s flex_extract_v7.1 '</span> <span class="o">+</span> + <span class="n">success_mode</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">user</span><span class="p">)],</span> <span class="n">stdin</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> <span class="n">bufsize</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> - <span class="n">pout</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">communicate</span><span class="p">(</span><span class="nb">input</span><span class="o">=</span><span class="n">message</span><span class="o">+</span><span class="s1">'</span><span class="se">\n\n</span><span class="s1">'</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> + <span class="n">pout</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">communicate</span><span class="p">(</span><span class="nb">input</span><span class="o">=</span><span class="n">message</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\n\n</span><span class="s1">'</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'ERROR: '</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'Email could not be sent!'</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... Email could not be sent!'</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... Email could not be sent!'</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'Email sent to '</span> <span class="o">+</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">user</span><span class="p">)</span> <span class="o">+</span> <span class="s1">' '</span> <span class="o">+</span> - <span class="n">pout</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'Email sent to '</span> <span class="o">+</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">user</span><span class="p">))</span> + + <span class="k">return</span></div> + + +<div class="viewcode-block" id="normal_exit"><a class="viewcode-back" href="../api.html#tools.normal_exit">[docs]</a><span class="k">def</span> <span class="nf">normal_exit</span><span class="p">(</span><span class="n">message</span><span class="o">=</span><span class="s1">'Done!'</span><span class="p">):</span> + <span class="sd">'''Prints a specific exit message which can be passed to the function.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> message : str, optional</span> +<span class="sd"> Message for exiting program. Default value is "Done!".</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> + +<span class="sd"> '''</span> + + <span class="nb">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">message</span><span class="p">))</span> <span class="k">return</span></div> <div class="viewcode-block" id="product"><a class="viewcode-back" href="../api.html#tools.product">[docs]</a><span class="k">def</span> <span class="nf">product</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">):</span> - <span class="sd">'''This method combines the single characters of the passed arguments</span> + <span class="sd">'''Creates combinations of all passed arguments.</span> + +<span class="sd"> This method combines the single characters of the passed arguments</span> <span class="sd"> with each other. So that each character of each argument value</span> <span class="sd"> will be combined with each character of the other arguments as a tuple.</span> @@ -497,10 +537,10 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> \*args : :obj:`tuple`</span> +<span class="sd"> \*args : list or str</span> <span class="sd"> Positional arguments (arbitrary number).</span> -<span class="sd"> \*\*kwds : :obj:`dictionary`</span> +<span class="sd"> \*\*kwds : dict</span> <span class="sd"> Contains all the keyword arguments from \*args.</span> <span class="sd"> Return</span> @@ -509,12 +549,15 @@ <span class="sd"> Return will be done with "yield". A tuple of combined arguments.</span> <span class="sd"> See example in description above.</span> <span class="sd"> '''</span> - <span class="n">pools</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">tuple</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span> <span class="o">*</span> <span class="n">kwds</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'repeat'</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> - <span class="n">result</span> <span class="o">=</span> <span class="p">[[]]</span> - <span class="k">for</span> <span class="n">pool</span> <span class="ow">in</span> <span class="n">pools</span><span class="p">:</span> - <span class="n">result</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="o">+</span> <span class="p">[</span><span class="n">y</span><span class="p">]</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">result</span> <span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">pool</span><span class="p">]</span> - <span class="k">for</span> <span class="n">prod</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span> - <span class="k">yield</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">prod</span><span class="p">)</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">pools</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">tuple</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span> <span class="o">*</span> <span class="n">kwds</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'repeat'</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> + <span class="n">result</span> <span class="o">=</span> <span class="p">[[]]</span> + <span class="k">for</span> <span class="n">pool</span> <span class="ow">in</span> <span class="n">pools</span><span class="p">:</span> + <span class="n">result</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="o">+</span> <span class="p">[</span><span class="n">y</span><span class="p">]</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">result</span> <span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">pool</span><span class="p">]</span> + <span class="k">for</span> <span class="n">prod</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span> + <span class="k">yield</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">prod</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">TypeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... PRODUCT GENERATION FAILED!'</span><span class="p">)</span> <span class="k">return</span></div> @@ -525,7 +568,7 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> filename : :obj:`string`</span> +<span class="sd"> filename : str</span> <span class="sd"> The name of the file to be removed without notification.</span> <span class="sd"> Return</span> @@ -535,8 +578,10 @@ <span class="k">try</span><span class="p">:</span> <span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span> <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> - <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">errno</span> <span class="o">!=</span> <span class="n">errno</span><span class="o">.</span><span class="n">ENOENT</span><span class="p">:</span> - <span class="c1"># errno.ENOENT = no such file or directory</span> + <span class="c1"># errno.ENOENT = no such file or directory</span> + <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">errno</span> <span class="o">==</span> <span class="n">errno</span><span class="o">.</span><span class="n">ENOENT</span><span class="p">:</span> + <span class="k">pass</span> + <span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="c1"># re-raise exception if a different error occured</span> <span class="k">return</span></div> @@ -547,22 +592,30 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> filepath : :obj:`string`</span> +<span class="sd"> filepath : str</span> <span class="sd"> Path to file of ECMWF grib table number 128.</span> <span class="sd"> Return</span> <span class="sd"> ------</span> -<span class="sd"> table128 : :obj:`dictionary`</span> +<span class="sd"> table128 : dict</span> <span class="sd"> Contains the ECMWF grib table 128 information.</span> <span class="sd"> The key is the parameter number and the value is the</span> <span class="sd"> short name of the parameter.</span> <span class="sd"> '''</span> <span class="n">table128</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span> - <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filepath</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> - <span class="n">fdata</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> - <span class="k">for</span> <span class="n">data</span> <span class="ow">in</span> <span class="n">fdata</span><span class="p">:</span> - <span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">'!'</span><span class="p">:</span> - <span class="n">table128</span><span class="p">[</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">3</span><span class="p">]]</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">59</span><span class="p">:</span><span class="mi">64</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> + <span class="k">try</span><span class="p">:</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filepath</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="n">fdata</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... Error occured while trying to read parameter '</span> + <span class="s1">'table file: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">filepath</span><span class="p">))</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">for</span> <span class="n">data</span> <span class="ow">in</span> <span class="n">fdata</span><span class="p">:</span> + <span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">'!'</span><span class="p">:</span> + <span class="n">table128</span><span class="p">[</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">3</span><span class="p">]]</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">59</span><span class="p">:</span><span class="mi">64</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">return</span> <span class="n">table128</span></div> @@ -572,23 +625,28 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> pars : :obj:`string`</span> +<span class="sd"> pars : str</span> <span class="sd"> Addpar argument from CONTROL file in the format of</span> <span class="sd"> parameter names instead of ids. The parameter short</span> <span class="sd"> names are sepearted with "/" and they are passed as</span> <span class="sd"> one single string.</span> -<span class="sd"> table : :obj:`dictionary`</span> +<span class="sd"> table : dict</span> <span class="sd"> Contains the ECMWF grib table 128 information.</span> <span class="sd"> The key is the parameter number and the value is the</span> <span class="sd"> short name of the parameter.</span> <span class="sd"> Return</span> <span class="sd"> ------</span> -<span class="sd"> ipar : :obj:`list` of :obj:`integer`</span> +<span class="sd"> ipar : list of int</span> <span class="sd"> List of addpar parameters from CONTROL file transformed to</span> <span class="sd"> parameter ids in the format of integer.</span> <span class="sd"> '''</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">pars</span><span class="p">:</span> + <span class="k">return</span> <span class="p">[]</span> + <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">pars</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span> + <span class="n">pars</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">pars</span><span class="p">)</span> + <span class="n">cpar</span> <span class="o">=</span> <span class="n">pars</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)</span> <span class="n">ipar</span> <span class="o">=</span> <span class="p">[]</span> <span class="k">for</span> <span class="n">par</span> <span class="ow">in</span> <span class="n">cpar</span><span class="p">:</span> @@ -606,31 +664,35 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> list_obj : :obj:`list`</span> +<span class="sd"> list_obj : list of *</span> <span class="sd"> A list with arbitrary content.</span> -<span class="sd"> concatenate_sign : :obj:`string`, optional</span> +<span class="sd"> concatenate_sign : str, optional</span> <span class="sd"> A string which is used to concatenate the single</span> <span class="sd"> list elements. Default value is ", ".</span> <span class="sd"> Return</span> <span class="sd"> ------</span> -<span class="sd"> str_of_list : :obj:`string`</span> +<span class="sd"> str_of_list : str</span> <span class="sd"> The content of the list as a single string.</span> <span class="sd"> '''</span> + <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">list_obj</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> + <span class="n">list_obj</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">list_obj</span><span class="p">)</span> <span class="n">str_of_list</span> <span class="o">=</span> <span class="n">concatenate_sign</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">l</span><span class="p">)</span> <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">list_obj</span><span class="p">)</span> <span class="k">return</span> <span class="n">str_of_list</span></div> <div class="viewcode-block" id="make_dir"><a class="viewcode-back" href="../api.html#tools.make_dir">[docs]</a><span class="k">def</span> <span class="nf">make_dir</span><span class="p">(</span><span class="n">directory</span><span class="p">):</span> - <span class="sd">'''Creates a directory and gives a warning if the directory</span> -<span class="sd"> already exists. The program stops only if there is another problem.</span> + <span class="sd">'''Creates a directory.</span> + +<span class="sd"> It gives a warning if the directory already exists and skips process.</span> +<span class="sd"> The program stops only if there is another problem.</span> <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> directory : :obj:`string`</span> -<span class="sd"> The directory name including the path which should be created.</span> +<span class="sd"> directory : str</span> +<span class="sd"> The path to directory which should be created.</span> <span class="sd"> Return</span> <span class="sd"> ------</span> @@ -639,11 +701,11 @@ <span class="k">try</span><span class="p">:</span> <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">directory</span><span class="p">)</span> <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> - <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">errno</span> <span class="o">!=</span> <span class="n">errno</span><span class="o">.</span><span class="n">EEXIST</span><span class="p">:</span> - <span class="c1"># errno.EEXIST = directory already exists</span> - <span class="k">raise</span> <span class="c1"># re-raise exception if a different error occured</span> - <span class="k">else</span><span class="p">:</span> + <span class="c1"># errno.EEXIST = directory already exists</span> + <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">errno</span> <span class="o">==</span> <span class="n">errno</span><span class="o">.</span><span class="n">EEXIST</span><span class="p">:</span> <span class="nb">print</span><span class="p">(</span><span class="s1">'WARNING: Directory </span><span class="si">{0}</span><span class="s1"> already exists!'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">directory</span><span class="p">))</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">raise</span> <span class="c1"># re-raise exception if a different error occured</span> <span class="k">return</span></div> @@ -658,43 +720,47 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> ecd : :obj:`string`</span> +<span class="sd"> ecd : str</span> <span class="sd"> The path were the file is stored.</span> -<span class="sd"> filename : :obj:`string`</span> +<span class="sd"> filename : str</span> <span class="sd"> The name of the file to send to the ECMWF server.</span> -<span class="sd"> target : :obj:`string`</span> +<span class="sd"> target : str</span> <span class="sd"> The target queue where the file should be sent to.</span> -<span class="sd"> ecuid : :obj:`string`</span> +<span class="sd"> ecuid : str</span> <span class="sd"> The user id on ECMWF server.</span> -<span class="sd"> ecgid : :obj:`string`</span> +<span class="sd"> ecgid : str</span> <span class="sd"> The group id on ECMWF server.</span> <span class="sd"> Return</span> <span class="sd"> ------</span> -<span class="sd"> rcode : :obj:`string`</span> -<span class="sd"> Resulting code of command execution. If successful the string</span> -<span class="sd"> will be empty.</span> + <span class="sd"> '''</span> <span class="k">try</span><span class="p">:</span> - <span class="n">rcode</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_output</span><span class="p">([</span><span class="s1">'ecaccess-file-put'</span><span class="p">,</span> - <span class="n">ecd</span> <span class="o">+</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="n">filename</span><span class="p">,</span> - <span class="n">target</span> <span class="o">+</span> <span class="s1">':/home/ms/'</span> <span class="o">+</span> - <span class="n">ecgid</span> <span class="o">+</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="n">ecuid</span> <span class="o">+</span> - <span class="s1">'/'</span> <span class="o">+</span> <span class="n">filename</span><span class="p">],</span> - <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">)</span> + <span class="n">subprocess</span><span class="o">.</span><span class="n">check_output</span><span class="p">([</span><span class="s1">'ecaccess-file-put'</span><span class="p">,</span> + <span class="n">ecd</span> <span class="o">+</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="n">filename</span><span class="p">,</span> + <span class="n">target</span> <span class="o">+</span> <span class="s1">':/home/ms/'</span> <span class="o">+</span> + <span class="n">ecgid</span> <span class="o">+</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="n">ecuid</span> <span class="o">+</span> + <span class="s1">'/'</span> <span class="o">+</span> <span class="n">filename</span><span class="p">],</span> + <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">)</span> <span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE:</span><span class="se">\n</span><span class="s1"> ... '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">returncode</span><span class="p">))</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> ... '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">returncode</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... Do you have a valid ecaccess certification key?'</span><span class="p">)</span> <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... ECACCESS-FILE-PUT FAILED!'</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> - <span class="k">return</span> <span class="n">rcode</span></div> + <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... Most likely the ECACCESS library is not available!'</span><span class="p">)</span> + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... ECACCESS-FILE-PUT FAILED!'</span><span class="p">)</span> + + <span class="k">return</span></div> <div class="viewcode-block" id="submit_job_to_ecserver"><a class="viewcode-back" href="../api.html#tools.submit_job_to_ecserver">[docs]</a><span class="k">def</span> <span class="nf">submit_job_to_ecserver</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">jobname</span><span class="p">):</span> <span class="sd">'''Uses ecaccess-job-submit command to submit a job to the ECMWF server.</span> @@ -707,33 +773,178 @@ <span class="sd"> Parameters</span> <span class="sd"> ----------</span> -<span class="sd"> target : :obj:`string`</span> +<span class="sd"> target : str</span> <span class="sd"> The target where the file should be sent to, e.g. the queue.</span> -<span class="sd"> jobname : :obj:`string`</span> +<span class="sd"> jobname : str</span> <span class="sd"> The name of the jobfile to be submitted to the ECMWF server.</span> <span class="sd"> Return</span> <span class="sd"> ------</span> -<span class="sd"> rcode : :obj:`string`</span> -<span class="sd"> Resulting code of command execution. If successful the string</span> -<span class="sd"> will contain an integer number, representing the id of the job</span> -<span class="sd"> at the ecmwf server.</span> +<span class="sd"> job_id : int</span> +<span class="sd"> The id number of the job as a reference at the ecmwf server.</span> <span class="sd"> '''</span> <span class="k">try</span><span class="p">:</span> - <span class="n">rcode</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_output</span><span class="p">([</span><span class="s1">'ecaccess-job-submit'</span><span class="p">,</span> - <span class="s1">'-queueName'</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> - <span class="n">jobname</span><span class="p">])</span> - <span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE:</span><span class="se">\n</span><span class="s1"> ... '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">returncode</span><span class="p">))</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> ... '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> + <span class="n">job_id</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_output</span><span class="p">([</span><span class="s1">'ecaccess-job-submit'</span><span class="p">,</span> <span class="s1">'-queueName'</span><span class="p">,</span> + <span class="n">target</span><span class="p">,</span> <span class="n">jobname</span><span class="p">])</span> + <span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">returncode</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... Do you have a valid ecaccess certification key?'</span><span class="p">)</span> <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... ECACCESS-JOB-SUBMIT FAILED!'</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... Most likely the ECACCESS library is not available!'</span><span class="p">)</span> + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... ECACCESS-JOB-SUBMIT FAILED!'</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">job_id</span></div> + + +<div class="viewcode-block" id="get_informations"><a class="viewcode-back" href="../api.html#tools.get_informations">[docs]</a><span class="k">def</span> <span class="nf">get_informations</span><span class="p">(</span><span class="n">filename</span><span class="p">):</span> + <span class="sd">'''Gets basic information from an example grib file.</span> + +<span class="sd"> These information are important for later use and the</span> +<span class="sd"> initialization of numpy arrays for data storing.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> filename : str</span> +<span class="sd"> Name of the file which will be opened to extract basic information.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> data : dict</span> +<span class="sd"> Contains basic informations of the ECMWF grib files, e.g.</span> +<span class="sd"> 'Ni', 'Nj', 'latitudeOfFirstGridPointInDegrees',</span> +<span class="sd"> 'longitudeOfFirstGridPointInDegrees', 'latitudeOfLastGridPointInDegrees',</span> +<span class="sd"> 'longitudeOfLastGridPointInDegrees', 'jDirectionIncrementInDegrees',</span> +<span class="sd"> 'iDirectionIncrementInDegrees', 'missingValue'</span> +<span class="sd"> '''</span> + <span class="kn">from</span> <span class="nn">eccodes</span> <span class="k">import</span> <span class="n">codes_grib_new_from_file</span><span class="p">,</span> <span class="n">codes_get</span><span class="p">,</span> <span class="n">codes_release</span> + + <span class="n">data</span> <span class="o">=</span> <span class="p">{}</span> + + <span class="c1"># --- open file ---</span> + <span class="nb">print</span><span class="p">(</span><span class="s2">"Opening file for getting information data --- </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">filename</span><span class="p">)</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="c1"># load first message from file</span> + <span class="n">gid</span> <span class="o">=</span> <span class="n">codes_grib_new_from_file</span><span class="p">(</span><span class="n">f</span><span class="p">)</span> + + <span class="c1"># information needed from grib message</span> + <span class="n">keys</span> <span class="o">=</span> <span class="p">[</span> + <span class="s1">'Ni'</span><span class="p">,</span> + <span class="s1">'Nj'</span><span class="p">,</span> + <span class="s1">'latitudeOfFirstGridPointInDegrees'</span><span class="p">,</span> + <span class="s1">'longitudeOfFirstGridPointInDegrees'</span><span class="p">,</span> + <span class="s1">'latitudeOfLastGridPointInDegrees'</span><span class="p">,</span> + <span class="s1">'longitudeOfLastGridPointInDegrees'</span><span class="p">,</span> + <span class="s1">'jDirectionIncrementInDegrees'</span><span class="p">,</span> + <span class="s1">'iDirectionIncrementInDegrees'</span><span class="p">,</span> + <span class="s1">'missingValue'</span><span class="p">,</span> + <span class="p">]</span> + + <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">Informations are: '</span><span class="p">)</span> + <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">keys</span><span class="p">:</span> + <span class="c1"># Get the value of the key in a grib message.</span> + <span class="n">data</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span><span class="n">key</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> = </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span><span class="n">data</span><span class="p">[</span><span class="n">key</span><span class="p">]))</span> + + <span class="c1"># Free the memory for the message referred as gribid.</span> + <span class="n">codes_release</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">data</span></div> + + +<div class="viewcode-block" id="get_dimensions"><a class="viewcode-back" href="../api.html#tools.get_dimensions">[docs]</a><span class="k">def</span> <span class="nf">get_dimensions</span><span class="p">(</span><span class="n">info</span><span class="p">,</span> <span class="n">purefc</span><span class="p">,</span> <span class="n">dtime</span><span class="p">,</span> <span class="n">index_vals</span><span class="p">,</span> <span class="n">start_date</span><span class="p">,</span> <span class="n">end_date</span><span class="p">):</span> + <span class="sd">'''This function specifies the correct dimensions for x, y and t.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> info : dict</span> +<span class="sd"> Contains basic informations of the ECMWF grib files, e.g.</span> +<span class="sd"> 'Ni', 'Nj', 'latitudeOfFirstGridPointInDegrees',</span> +<span class="sd"> 'longitudeOfFirstGridPointInDegrees', 'latitudeOfLastGridPointInDegrees',</span> +<span class="sd"> 'longitudeOfLastGridPointInDegrees', 'jDirectionIncrementInDegrees',</span> +<span class="sd"> 'iDirectionIncrementInDegrees', 'missingValue'</span> - <span class="k">return</span> <span class="n">rcode</span></div> +<span class="sd"> purefc : int</span> +<span class="sd"> Switch for definition of pure forecast mode or not.</span> + +<span class="sd"> dtime : str</span> +<span class="sd"> Time step in hours.</span> + +<span class="sd"> index_vals : list of list of str</span> +<span class="sd"> Contains the values from the keys used for a distinct selection</span> +<span class="sd"> of grib messages in processing the grib files.</span> +<span class="sd"> Content looks like e.g.:</span> +<span class="sd"> index_vals[0]: ('20171106', '20171107', '20171108') ; date</span> +<span class="sd"> index_vals[1]: ('0', '1200', '1800', '600') ; time</span> +<span class="sd"> index_vals[2]: ('0', '12', '3', '6', '9') ; stepRange</span> + +<span class="sd"> start_date : str</span> +<span class="sd"> The start date of the retrieval job.</span> + +<span class="sd"> end_date : str</span> +<span class="sd"> The end date of the retrieval job.</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> (ix, jy, it) : tuple of int</span> +<span class="sd"> Dimension in x-direction, y-direction and in time.</span> +<span class="sd"> '''</span> + + <span class="n">ix</span> <span class="o">=</span> <span class="n">info</span><span class="p">[</span><span class="s1">'Ni'</span><span class="p">]</span> + + <span class="n">jy</span> <span class="o">=</span> <span class="n">info</span><span class="p">[</span><span class="s1">'Nj'</span><span class="p">]</span> + + <span class="k">if</span> <span class="ow">not</span> <span class="n">purefc</span><span class="p">:</span> + <span class="n">it</span> <span class="o">=</span> <span class="p">((</span><span class="n">end_date</span> <span class="o">-</span> <span class="n">start_date</span><span class="p">)</span><span class="o">.</span><span class="n">days</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="mi">24</span><span class="o">/</span><span class="nb">int</span><span class="p">(</span><span class="n">dtime</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># #no of step * #no of times * #no of days</span> + <span class="n">it</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">index_vals</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">index_vals</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">index_vals</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> + + <span class="k">return</span> <span class="p">(</span><span class="n">ix</span><span class="p">,</span> <span class="n">jy</span><span class="p">,</span> <span class="n">it</span><span class="p">)</span></div> + + +<div class="viewcode-block" id="execute_subprocess"><a class="viewcode-back" href="../api.html#tools.execute_subprocess">[docs]</a><span class="k">def</span> <span class="nf">execute_subprocess</span><span class="p">(</span><span class="n">cmd_list</span><span class="p">,</span> <span class="n">error_msg</span><span class="o">=</span><span class="s1">'SUBPROCESS FAILED!'</span><span class="p">):</span> + <span class="sd">'''Executes a command line instruction via a subprocess.</span> + +<span class="sd"> Error handling is done if an error occures.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> cmd_list : list of str</span> +<span class="sd"> A list of the components for the command line execution. Each</span> +<span class="sd"> list entry is a single part of the command which is seperated from</span> +<span class="sd"> the rest by a blank space.</span> +<span class="sd"> E.g. ['mv', file1, file2]</span> + +<span class="sd"> Return</span> +<span class="sd"> ------</span> +<span class="sd"> error_msg : str, optional</span> +<span class="sd"> The possible error message if the subprocess failed.</span> +<span class="sd"> By default it will just tell "SUBPROCESS FAILED!".</span> +<span class="sd"> '''</span> + + <span class="k">try</span><span class="p">:</span> + <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">(</span><span class="n">cmd_list</span><span class="p">)</span> + <span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">returncode</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... '</span> <span class="o">+</span> <span class="n">error_msg</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> + + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... '</span> <span class="o">+</span> <span class="n">error_msg</span><span class="p">)</span> + + <span class="k">return</span></div> </pre></div> </div> @@ -746,7 +957,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -765,21 +976,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/_sources/api.rst.txt b/documentation/Sphinx/build/html/_sources/api.rst.txt index 5b4acb2..90f99f7 100644 --- a/documentation/Sphinx/build/html/_sources/api.rst.txt +++ b/documentation/Sphinx/build/html/_sources/api.rst.txt @@ -34,10 +34,10 @@ EcFlexpart .. automodule:: EcFlexpart :members: -GribTools +GribUtil ********* -.. automodule:: GribTools +.. automodule:: GribUtil :members: MarsRetrieval diff --git a/documentation/Sphinx/build/html/_sources/index.rst.txt b/documentation/Sphinx/build/html/_sources/index.rst.txt index 1f8cded..2d9417f 100644 --- a/documentation/Sphinx/build/html/_sources/index.rst.txt +++ b/documentation/Sphinx/build/html/_sources/index.rst.txt @@ -13,8 +13,7 @@ flex_extract is a software to retrieve meteorological fields from the European C .. state gateway server or HPC facility using the ecaccess software package. As another option the scripts can 3) .. also be triggered using ecflow scheduling software used by ECMWF for data dissemination. -All required second party software and libraries used within flex_extract is open source and free of charge. - +All third-party software and libraries required by flex_extract are open source and free of charge. .. raw:: html @@ -94,7 +93,11 @@ All required second party software and libraries used within flex_extract is ope .. note:: - License text put in here! Which one? + ![][/documentation/Sphinx/source/_static/cc-by-40.png] + This work is licensed under the Creative Commons Attribution 4.0 + International License. To view a copy of this license, visit + http://creativecommons.org/licenses/by/4.0/ or send a letter to + Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. .. toctree:: :maxdepth: 3 diff --git a/documentation/Sphinx/build/html/_static/basic.css b/documentation/Sphinx/build/html/_static/basic.css index 19ced10..104f076 100644 --- a/documentation/Sphinx/build/html/_static/basic.css +++ b/documentation/Sphinx/build/html/_static/basic.css @@ -81,6 +81,10 @@ div.sphinxsidebar input { font-size: 1em; } +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + div.sphinxsidebar #searchbox input[type="text"] { float: left; width: 80%; @@ -427,6 +431,13 @@ table.field-list td, table.field-list th { hyphens: manual; } +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist td { + vertical-align: top; +} + + /* -- other body styles ----------------------------------------------------- */ ol.arabic { diff --git a/documentation/Sphinx/build/html/_static/cc-by-40.png b/documentation/Sphinx/build/html/_static/cc-by-40.png new file mode 100644 index 0000000000000000000000000000000000000000..c8473a24786ab016d9c3e717a380910f7cbb0fff GIT binary patch literal 12588 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 literal 0 HcmV?d00001 diff --git a/documentation/Sphinx/build/html/_static/css/theme.css b/documentation/Sphinx/build/html/_static/css/theme.css index 03a13df..b19dbfe 100644 --- a/documentation/Sphinx/build/html/_static/css/theme.css +++ b/documentation/Sphinx/build/html/_static/css/theme.css @@ -1,6 +1,6 @@ -/* sphinx_rtd_theme version 0.4.1 | MIT license */ -/* Built 20180727 10:07 */ +/* sphinx_rtd_theme version 0.4.2 | MIT license */ +/* Built 20181005 13:10 */ *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}[hidden]{display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:hover,a:active{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;color:#000;text-decoration:none}mark{background:#ff0;color:#000;font-style:italic;font-weight:bold}pre,code,.rst-content tt,.rst-content code,kbd,samp{font-family:monospace,serif;_font-family:"courier new",monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:before,q:after{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}ul,ol,dl{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:0;margin:0;padding:0}label{cursor:pointer}legend{border:0;*margin-left:-7px;padding:0;white-space:normal}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;*width:13px;*height:13px}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top;resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none !important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{html,body,section{background:none !important}*{box-shadow:none !important;text-shadow:none !important;filter:none !important;-ms-filter:none !important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:.5cm}p,h2,.rst-content .toctree-wrapper p.caption,h3{orphans:3;widows:3}h2,.rst-content .toctree-wrapper p.caption,h3{page-break-after:avoid}}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.rst-content .admonition,.btn,input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"],select,textarea,.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a,.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a,.wy-nav-top a{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}/*! * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url("../fonts/fontawesome-webfont.eot?v=4.7.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"),url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857em;text-align:center}.fa-ul{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.fa-li.fa-lg{left:-1.8571428571em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.wy-menu-vertical li span.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-left.toctree-expand,.wy-menu-vertical li.current>a span.fa-pull-left.toctree-expand,.rst-content .fa-pull-left.admonition-title,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content dl dt .fa-pull-left.headerlink,.rst-content p.caption .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.rst-content code.download span.fa-pull-left:first-child,.fa-pull-left.icon{margin-right:.3em}.fa.fa-pull-right,.wy-menu-vertical li span.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-right.toctree-expand,.wy-menu-vertical li.current>a span.fa-pull-right.toctree-expand,.rst-content .fa-pull-right.admonition-title,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content dl dt .fa-pull-right.headerlink,.rst-content p.caption .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.rst-content code.download span.fa-pull-right:first-child,.fa-pull-right.icon{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.wy-menu-vertical li span.pull-left.toctree-expand,.wy-menu-vertical li.on a span.pull-left.toctree-expand,.wy-menu-vertical li.current>a span.pull-left.toctree-expand,.rst-content .pull-left.admonition-title,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content dl dt .pull-left.headerlink,.rst-content p.caption .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.rst-content code.download span.pull-left:first-child,.pull-left.icon{margin-right:.3em}.fa.pull-right,.wy-menu-vertical li span.pull-right.toctree-expand,.wy-menu-vertical li.on a span.pull-right.toctree-expand,.wy-menu-vertical li.current>a span.pull-right.toctree-expand,.rst-content .pull-right.admonition-title,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content dl dt .pull-right.headerlink,.rst-content p.caption .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.rst-content code.download span.pull-right:first-child,.pull-right.icon{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.rst-content .admonition-title:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.wy-dropdown .caret:before,.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li span.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-tv:before,.fa-television:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:""}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-signing:before,.fa-sign-language:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-vcard:before,.fa-address-card:before{content:""}.fa-vcard-o:before,.fa-address-card-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context{font-family:inherit}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before{font-family:"FontAwesome";display:inline-block;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa,a .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,a .rst-content .admonition-title,.rst-content a .admonition-title,a .rst-content h1 .headerlink,.rst-content h1 a .headerlink,a .rst-content h2 .headerlink,.rst-content h2 a .headerlink,a .rst-content h3 .headerlink,.rst-content h3 a .headerlink,a .rst-content h4 .headerlink,.rst-content h4 a .headerlink,a .rst-content h5 .headerlink,.rst-content h5 a .headerlink,a .rst-content h6 .headerlink,.rst-content h6 a .headerlink,a .rst-content dl dt .headerlink,.rst-content dl dt a .headerlink,a .rst-content p.caption .headerlink,.rst-content p.caption a .headerlink,a .rst-content table>caption .headerlink,.rst-content table>caption a .headerlink,a .rst-content tt.download span:first-child,.rst-content tt.download a span:first-child,a .rst-content code.download span:first-child,.rst-content code.download a span:first-child,a .icon{display:inline-block;text-decoration:inherit}.btn .fa,.btn .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .btn span.toctree-expand,.btn .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .btn span.toctree-expand,.btn .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .btn span.toctree-expand,.btn .rst-content .admonition-title,.rst-content .btn .admonition-title,.btn .rst-content h1 .headerlink,.rst-content h1 .btn .headerlink,.btn .rst-content h2 .headerlink,.rst-content h2 .btn .headerlink,.btn .rst-content h3 .headerlink,.rst-content h3 .btn .headerlink,.btn .rst-content h4 .headerlink,.rst-content h4 .btn .headerlink,.btn .rst-content h5 .headerlink,.rst-content h5 .btn .headerlink,.btn .rst-content h6 .headerlink,.rst-content h6 .btn .headerlink,.btn .rst-content dl dt .headerlink,.rst-content dl dt .btn .headerlink,.btn .rst-content p.caption .headerlink,.rst-content p.caption .btn .headerlink,.btn .rst-content table>caption .headerlink,.rst-content table>caption .btn .headerlink,.btn .rst-content tt.download span:first-child,.rst-content tt.download .btn span:first-child,.btn .rst-content code.download span:first-child,.rst-content code.download .btn span:first-child,.btn .icon,.nav .fa,.nav .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .nav span.toctree-expand,.nav .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .nav span.toctree-expand,.nav .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .nav span.toctree-expand,.nav .rst-content .admonition-title,.rst-content .nav .admonition-title,.nav .rst-content h1 .headerlink,.rst-content h1 .nav .headerlink,.nav .rst-content h2 .headerlink,.rst-content h2 .nav .headerlink,.nav .rst-content h3 .headerlink,.rst-content h3 .nav .headerlink,.nav .rst-content h4 .headerlink,.rst-content h4 .nav .headerlink,.nav .rst-content h5 .headerlink,.rst-content h5 .nav .headerlink,.nav .rst-content h6 .headerlink,.rst-content h6 .nav .headerlink,.nav .rst-content dl dt .headerlink,.rst-content dl dt .nav .headerlink,.nav .rst-content p.caption .headerlink,.rst-content p.caption .nav .headerlink,.nav .rst-content table>caption .headerlink,.rst-content table>caption .nav .headerlink,.nav .rst-content tt.download span:first-child,.rst-content tt.download .nav span:first-child,.nav .rst-content code.download span:first-child,.rst-content code.download .nav span:first-child,.nav .icon{display:inline}.btn .fa.fa-large,.btn .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .btn span.fa-large.toctree-expand,.btn .rst-content .fa-large.admonition-title,.rst-content .btn .fa-large.admonition-title,.btn .rst-content h1 .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.btn .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .btn .fa-large.headerlink,.btn .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .btn .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .btn span.fa-large:first-child,.btn .rst-content code.download span.fa-large:first-child,.rst-content code.download .btn span.fa-large:first-child,.btn .fa-large.icon,.nav .fa.fa-large,.nav .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .nav span.fa-large.toctree-expand,.nav .rst-content .fa-large.admonition-title,.rst-content .nav .fa-large.admonition-title,.nav .rst-content h1 .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.nav .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.nav .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .nav .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.nav .rst-content code.download span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.nav .fa-large.icon{line-height:.9em}.btn .fa.fa-spin,.btn .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .btn span.fa-spin.toctree-expand,.btn .rst-content .fa-spin.admonition-title,.rst-content .btn .fa-spin.admonition-title,.btn .rst-content h1 .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.btn .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .btn .fa-spin.headerlink,.btn .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .btn .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .btn span.fa-spin:first-child,.btn .rst-content code.download span.fa-spin:first-child,.rst-content code.download .btn span.fa-spin:first-child,.btn .fa-spin.icon,.nav .fa.fa-spin,.nav .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .nav span.fa-spin.toctree-expand,.nav .rst-content .fa-spin.admonition-title,.rst-content .nav .fa-spin.admonition-title,.nav .rst-content h1 .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.nav .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.nav .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .nav .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.nav .rst-content code.download span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.nav .fa-spin.icon{display:inline-block}.btn.fa:before,.wy-menu-vertical li span.btn.toctree-expand:before,.rst-content .btn.admonition-title:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content dl dt .btn.headerlink:before,.rst-content p.caption .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.rst-content code.download span.btn:first-child:before,.btn.icon:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.wy-menu-vertical li span.btn.toctree-expand:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content p.caption .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.rst-content code.download span.btn:first-child:hover:before,.btn.icon:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li .btn-mini span.toctree-expand:before,.btn-mini .rst-content .admonition-title:before,.rst-content .btn-mini .admonition-title:before,.btn-mini .rst-content h1 .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.btn-mini .rst-content dl dt .headerlink:before,.rst-content dl dt .btn-mini .headerlink:before,.btn-mini .rst-content p.caption .headerlink:before,.rst-content p.caption .btn-mini .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.rst-content tt.download .btn-mini span:first-child:before,.btn-mini .rst-content code.download span:first-child:before,.rst-content code.download .btn-mini span:first-child:before,.btn-mini .icon:before{font-size:14px;vertical-align:-15%}.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.rst-content .admonition{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.wy-alert-title,.rst-content .admonition-title{color:#fff;font-weight:bold;display:block;color:#fff;background:#6ab0de;margin:-12px;padding:6px 12px;margin-bottom:12px}.wy-alert.wy-alert-danger,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.admonition{background:#fdf3f2}.wy-alert.wy-alert-danger .wy-alert-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .danger .wy-alert-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .danger .admonition-title,.rst-content .error .admonition-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition .admonition-title{background:#f29f97}.wy-alert.wy-alert-warning,.rst-content .wy-alert-warning.note,.rst-content .attention,.rst-content .caution,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.tip,.rst-content .warning,.rst-content .wy-alert-warning.seealso,.rst-content .admonition-todo,.rst-content .wy-alert-warning.admonition{background:#ffedcc}.wy-alert.wy-alert-warning .wy-alert-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .attention .wy-alert-title,.rst-content .caution .wy-alert-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .attention .admonition-title,.rst-content .caution .admonition-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .warning .admonition-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .admonition-todo .admonition-title,.rst-content .wy-alert-warning.admonition .admonition-title{background:#f0b37e}.wy-alert.wy-alert-info,.rst-content .note,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.rst-content .seealso,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.admonition{background:#e7f2fa}.wy-alert.wy-alert-info .wy-alert-title,.rst-content .note .wy-alert-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.rst-content .note .admonition-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .seealso .admonition-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition .admonition-title{background:#6ab0de}.wy-alert.wy-alert-success,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.warning,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.admonition{background:#dbfaf4}.wy-alert.wy-alert-success .wy-alert-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .hint .wy-alert-title,.rst-content .important .wy-alert-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .hint .admonition-title,.rst-content .important .admonition-title,.rst-content .tip .admonition-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition .admonition-title{background:#1abc9c}.wy-alert.wy-alert-neutral,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.admonition{background:#f3f6f6}.wy-alert.wy-alert-neutral .wy-alert-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition .admonition-title{color:#404040;background:#e1e4e5}.wy-alert.wy-alert-neutral a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a{color:#2980B9}.wy-alert p:last-child,.rst-content .note p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.rst-content .seealso p:last-child,.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0px;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,0.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27AE60}.wy-tray-container li.wy-tray-item-info{background:#2980B9}.wy-tray-container li.wy-tray-item-warning{background:#E67E22}.wy-tray-container li.wy-tray-item-danger{background:#E74C3C}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width: 768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px 12px;color:#fff;border:1px solid rgba(0,0,0,0.1);background-color:#27AE60;text-decoration:none;font-weight:normal;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:0px 1px 2px -1px rgba(255,255,255,0.5) inset,0px -2px 0px 0px rgba(0,0,0,0.1) inset;outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:0px -1px 0px 0px rgba(0,0,0,0.05) inset,0px 2px 0px 0px rgba(0,0,0,0.1) inset;padding:8px 12px 6px 12px}.btn:visited{color:#fff}.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn-disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn-disabled:hover,.btn-disabled:focus,.btn-disabled:active{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980B9 !important}.btn-info:hover{background-color:#2e8ece !important}.btn-neutral{background-color:#f3f6f6 !important;color:#404040 !important}.btn-neutral:hover{background-color:#e5ebeb !important;color:#404040}.btn-neutral:visited{color:#404040 !important}.btn-success{background-color:#27AE60 !important}.btn-success:hover{background-color:#295 !important}.btn-danger{background-color:#E74C3C !important}.btn-danger:hover{background-color:#ea6153 !important}.btn-warning{background-color:#E67E22 !important}.btn-warning:hover{background-color:#e98b39 !important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f !important}.btn-link{background-color:transparent !important;color:#2980B9;box-shadow:none;border-color:transparent !important}.btn-link:hover{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:active{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:visited{color:#9B59B6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:before,.wy-btn-group:after{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:solid 1px #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,0.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980B9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:solid 1px #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type="search"]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980B9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned input,.wy-form-aligned textarea,.wy-form-aligned select,.wy-form-aligned .wy-help-inline,.wy-form-aligned label{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{border:0;margin:0;padding:0}legend{display:block;width:100%;border:0;padding:0;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label{display:block;margin:0 0 .3125em 0;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;*zoom:1;max-width:68em;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#E74C3C}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full input[type="text"],.wy-control-group .wy-form-full input[type="password"],.wy-control-group .wy-form-full input[type="email"],.wy-control-group .wy-form-full input[type="url"],.wy-control-group .wy-form-full input[type="date"],.wy-control-group .wy-form-full input[type="month"],.wy-control-group .wy-form-full input[type="time"],.wy-control-group .wy-form-full input[type="datetime"],.wy-control-group .wy-form-full input[type="datetime-local"],.wy-control-group .wy-form-full input[type="week"],.wy-control-group .wy-form-full input[type="number"],.wy-control-group .wy-form-full input[type="search"],.wy-control-group .wy-form-full input[type="tel"],.wy-control-group .wy-form-full input[type="color"],.wy-control-group .wy-form-halves input[type="text"],.wy-control-group .wy-form-halves input[type="password"],.wy-control-group .wy-form-halves input[type="email"],.wy-control-group .wy-form-halves input[type="url"],.wy-control-group .wy-form-halves input[type="date"],.wy-control-group .wy-form-halves input[type="month"],.wy-control-group .wy-form-halves input[type="time"],.wy-control-group .wy-form-halves input[type="datetime"],.wy-control-group .wy-form-halves input[type="datetime-local"],.wy-control-group .wy-form-halves input[type="week"],.wy-control-group .wy-form-halves input[type="number"],.wy-control-group .wy-form-halves input[type="search"],.wy-control-group .wy-form-halves input[type="tel"],.wy-control-group .wy-form-halves input[type="color"],.wy-control-group .wy-form-thirds input[type="text"],.wy-control-group .wy-form-thirds input[type="password"],.wy-control-group .wy-form-thirds input[type="email"],.wy-control-group .wy-form-thirds input[type="url"],.wy-control-group .wy-form-thirds input[type="date"],.wy-control-group .wy-form-thirds input[type="month"],.wy-control-group .wy-form-thirds input[type="time"],.wy-control-group .wy-form-thirds input[type="datetime"],.wy-control-group .wy-form-thirds input[type="datetime-local"],.wy-control-group .wy-form-thirds input[type="week"],.wy-control-group .wy-form-thirds input[type="number"],.wy-control-group .wy-form-thirds input[type="search"],.wy-control-group .wy-form-thirds input[type="tel"],.wy-control-group .wy-form-thirds input[type="color"]{width:100%}.wy-control-group .wy-form-full{float:left;display:block;margin-right:2.3576515979%;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.3576515979%;width:48.821174201%}.wy-control-group .wy-form-halves:last-child{margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n+1){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.3576515979%;width:31.7615656014%}.wy-control-group .wy-form-thirds:last-child{margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control{margin:6px 0 0 0;font-size:90%}.wy-control-no-input{display:inline-block;margin:6px 0 0 0;font-size:90%}.wy-control-group.fluid-input input[type="text"],.wy-control-group.fluid-input input[type="password"],.wy-control-group.fluid-input input[type="email"],.wy-control-group.fluid-input input[type="url"],.wy-control-group.fluid-input input[type="date"],.wy-control-group.fluid-input input[type="month"],.wy-control-group.fluid-input input[type="time"],.wy-control-group.fluid-input input[type="datetime"],.wy-control-group.fluid-input input[type="datetime-local"],.wy-control-group.fluid-input input[type="week"],.wy-control-group.fluid-input input[type="number"],.wy-control-group.fluid-input input[type="search"],.wy-control-group.fluid-input input[type="tel"],.wy-control-group.fluid-input input[type="color"]{width:100%}.wy-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;*overflow:visible}input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type="datetime-local"]{padding:.34375em .625em}input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}input[type="text"]:focus,input[type="password"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus{outline:0;outline:thin dotted \9;border-color:#333}input.no-focus:focus{border-color:#ccc !important}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:1px auto #129FEA}input[type="text"][disabled],input[type="password"][disabled],input[type="email"][disabled],input[type="url"][disabled],input[type="date"][disabled],input[type="month"][disabled],input[type="time"][disabled],input[type="datetime"][disabled],input[type="datetime-local"][disabled],input[type="week"][disabled],input[type="number"][disabled],input[type="search"][disabled],input[type="tel"][disabled],input[type="color"][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#E74C3C;border:1px solid #E74C3C}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#E74C3C}input[type="file"]:focus:invalid:focus,input[type="radio"]:focus:invalid:focus,input[type="checkbox"]:focus:invalid:focus{outline-color:#E74C3C}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type="radio"][disabled],input[type="checkbox"][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:solid 1px #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{position:absolute;content:"";display:block;left:0;top:0;width:36px;height:12px;border-radius:4px;background:#ccc;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{position:absolute;content:"";display:block;width:18px;height:18px;border-radius:4px;background:#999;left:-3px;top:-3px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27AE60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#E74C3C}.wy-control-group.wy-control-group-error input[type="text"],.wy-control-group.wy-control-group-error input[type="password"],.wy-control-group.wy-control-group-error input[type="email"],.wy-control-group.wy-control-group-error input[type="url"],.wy-control-group.wy-control-group-error input[type="date"],.wy-control-group.wy-control-group-error input[type="month"],.wy-control-group.wy-control-group-error input[type="time"],.wy-control-group.wy-control-group-error input[type="datetime"],.wy-control-group.wy-control-group-error input[type="datetime-local"],.wy-control-group.wy-control-group-error input[type="week"],.wy-control-group.wy-control-group-error input[type="number"],.wy-control-group.wy-control-group-error input[type="search"],.wy-control-group.wy-control-group-error input[type="tel"],.wy-control-group.wy-control-group-error input[type="color"]{border:solid 1px #E74C3C}.wy-control-group.wy-control-group-error textarea{border:solid 1px #E74C3C}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27AE60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#E74C3C}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#E67E22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980B9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width: 480px){.wy-form button[type="submit"]{margin:.7em 0 0}.wy-form input[type="text"],.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:.3em;display:block}.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0 0}.wy-form .wy-help-inline,.wy-form-message-inline,.wy-form-message{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width: 768px){.tablet-hide{display:none}}@media screen and (max-width: 480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.wy-table,.rst-content table.docutils,.rst-content table.field-list{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.wy-table caption,.rst-content table.docutils caption,.rst-content table.field-list caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td,.wy-table th,.rst-content table.docutils th,.rst-content table.field-list th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.wy-table td:first-child,.rst-content table.docutils td:first-child,.rst-content table.field-list td:first-child,.wy-table th:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list th:first-child{border-left-width:0}.wy-table thead,.rst-content table.docutils thead,.rst-content table.field-list thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.wy-table thead th,.rst-content table.docutils thead th,.rst-content table.field-list thead th{font-weight:bold;border-bottom:solid 2px #e1e4e5}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td{background-color:transparent;vertical-align:middle}.wy-table td p,.rst-content table.docutils td p,.rst-content table.field-list td p{line-height:18px}.wy-table td p:last-child,.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child{margin-bottom:0}.wy-table .wy-table-cell-min,.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min{width:1%;padding-right:0}.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:gray;font-size:90%}.wy-table-tertiary{color:gray;font-size:80%}.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td,.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td{background-color:#f3f6f6}.wy-table-backed{background-color:#f3f6f6}.wy-table-bordered-all,.rst-content table.docutils{border:1px solid #e1e4e5}.wy-table-bordered-all td,.rst-content table.docutils td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.wy-table-bordered-all tbody>tr:last-child td,.rst-content table.docutils tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px 0;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0 !important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980B9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9B59B6}html{height:100%;overflow-x:hidden}body{font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;font-weight:normal;color:#404040;min-height:100%;overflow-x:hidden;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#E67E22 !important}a.wy-text-warning:hover{color:#eb9950 !important}.wy-text-info{color:#2980B9 !important}a.wy-text-info:hover{color:#409ad5 !important}.wy-text-success{color:#27AE60 !important}a.wy-text-success:hover{color:#36d278 !important}.wy-text-danger{color:#E74C3C !important}a.wy-text-danger:hover{color:#ed7669 !important}.wy-text-neutral{color:#404040 !important}a.wy-text-neutral:hover{color:#595959 !important}h1,h2,.rst-content .toctree-wrapper p.caption,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif}p{line-height:24px;margin:0;font-size:16px;margin-bottom:24px}h1{font-size:175%}h2,.rst-content .toctree-wrapper p.caption{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}code,.rst-content tt,.rst-content code{white-space:nowrap;max-width:100%;background:#fff;border:solid 1px #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;color:#E74C3C;overflow-x:auto}code.code-large,.rst-content tt.code-large{font-size:90%}.wy-plain-list-disc,.rst-content .section ul,.rst-content .toctree-wrapper ul,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.wy-plain-list-disc li,.rst-content .section ul li,.rst-content .toctree-wrapper ul li,article ul li{list-style:disc;margin-left:24px}.wy-plain-list-disc li p:last-child,.rst-content .section ul li p:last-child,.rst-content .toctree-wrapper ul li p:last-child,article ul li p:last-child{margin-bottom:0}.wy-plain-list-disc li ul,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li ul,article ul li ul{margin-bottom:0}.wy-plain-list-disc li li,.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,article ul li li{list-style:circle}.wy-plain-list-disc li li li,.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,article ul li li li{list-style:square}.wy-plain-list-disc li ol li,.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,article ul li ol li{list-style:decimal}.wy-plain-list-decimal,.rst-content .section ol,.rst-content ol.arabic,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.wy-plain-list-decimal li,.rst-content .section ol li,.rst-content ol.arabic li,article ol li{list-style:decimal;margin-left:24px}.wy-plain-list-decimal li p:last-child,.rst-content .section ol li p:last-child,.rst-content ol.arabic li p:last-child,article ol li p:last-child{margin-bottom:0}.wy-plain-list-decimal li ul,.rst-content .section ol li ul,.rst-content ol.arabic li ul,article ol li ul{margin-bottom:0}.wy-plain-list-decimal li ul li,.rst-content .section ol li ul li,.rst-content ol.arabic li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:before,.wy-breadcrumbs:after{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.wy-breadcrumbs li code,.wy-breadcrumbs li .rst-content tt,.rst-content .wy-breadcrumbs li tt{padding:5px;border:none;background:none}.wy-breadcrumbs li code.literal,.wy-breadcrumbs li .rst-content tt.literal,.rst-content .wy-breadcrumbs li tt.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width: 480px){.wy-breadcrumbs-extra{display:none}.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:before,.wy-menu-horiz:after{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz ul,.wy-menu-horiz li{display:inline-block}.wy-menu-horiz li:hover{background:rgba(255,255,255,0.1)}.wy-menu-horiz li.divide-left{border-left:solid 1px #404040}.wy-menu-horiz li.divide-right{border-right:solid 1px #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{height:32px;display:inline-block;line-height:32px;padding:0 1.618em;margin-bottom:0;display:block;font-weight:bold;text-transform:uppercase;font-size:80%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:solid 1px #404040}.wy-menu-vertical li.divide-bottom{border-bottom:solid 1px #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:gray;border-right:solid 1px #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.wy-menu-vertical li code,.wy-menu-vertical li .rst-content tt,.rst-content .wy-menu-vertical li tt{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li span.toctree-expand{display:block;float:left;margin-left:-1.2em;font-size:.8em;line-height:1.6em;color:#4d4d4d}.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a{color:#404040;padding:.4045em 1.618em;font-weight:bold;position:relative;background:#fcfcfc;border:none;padding-left:1.618em -4px}.wy-menu-vertical li.on a:hover,.wy-menu-vertical li.current>a:hover{background:#fcfcfc}.wy-menu-vertical li.on a:hover span.toctree-expand,.wy-menu-vertical li.current>a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand{display:block;font-size:.8em;line-height:1.6em;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:solid 1px #c9c9c9;border-top:solid 1px #c9c9c9}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a{color:#404040}.wy-menu-vertical li.toctree-l1.current li.toctree-l2>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>ul{display:none}.wy-menu-vertical li.toctree-l1.current li.toctree-l2.current>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3.current>ul{display:block}.wy-menu-vertical li.toctree-l2.current>a{background:#c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{display:block;background:#c9c9c9;padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l2 span.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3{font-size:.9em}.wy-menu-vertical li.toctree-l3.current>a{background:#bdbdbd;padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{display:block;background:#bdbdbd;padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l3 span.toctree-expand{color:#969696}.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:normal}.wy-menu-vertical a{display:inline-block;line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover span.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980B9;cursor:pointer;color:#fff}.wy-menu-vertical a:active span.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980B9;text-align:center;padding:.809em;display:block;color:#fcfcfc;margin-bottom:.809em}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em auto;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a{color:#fcfcfc;font-size:100%;font-weight:bold;display:inline-block;padding:4px 6px;margin-bottom:.809em}.wy-side-nav-search>a:hover,.wy-side-nav-search .wy-dropdown>a:hover{background:rgba(255,255,255,0.1)}.wy-side-nav-search>a img.logo,.wy-side-nav-search .wy-dropdown>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search>a.icon img.logo,.wy-side-nav-search .wy-dropdown>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:normal;color:rgba(255,255,255,0.3)}.wy-nav .wy-menu-vertical header{color:#2980B9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980B9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980B9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:before,.wy-nav-top:after{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:bold}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,0.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:gray}footer p{margin-bottom:12px}footer span.commit code,footer span.commit .rst-content tt,.rst-content footer span.commit tt{padding:0px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;font-size:1em;background:none;border:none;color:gray}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:before,.rst-footer-buttons:after{width:100%}.rst-footer-buttons:before,.rst-footer-buttons:after{display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:before,.rst-breadcrumbs-buttons:after{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:solid 1px #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:solid 1px #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:gray;font-size:90%}@media screen and (max-width: 768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-side-scroll{width:auto}.wy-side-nav-search{width:auto}.wy-menu.wy-menu-vertical{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width: 1100px){.wy-nav-content-wrap{background:rgba(0,0,0,0.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,footer,.wy-nav-side{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content p.caption .headerlink,.rst-content p.caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .icon{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up{height:auto;max-height:100%}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content img{max-width:100%;height:auto}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure p.caption{font-style:italic}.rst-content div.figure p:last-child.caption{margin-bottom:0px}.rst-content div.figure.align-center{text-align:center}.rst-content .section>img,.rst-content .section>a>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px 12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;display:block;overflow:auto}.rst-content pre.literal-block,.rst-content div[class^='highlight']{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px 0}.rst-content pre.literal-block div[class^='highlight'],.rst-content div[class^='highlight'] div[class^='highlight']{padding:0px;border:none;margin:0}.rst-content div[class^='highlight'] td.code{width:100%}.rst-content .linenodiv pre{border-right:solid 1px #e6e9ea;margin:0;padding:12px 12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^='highlight'] pre{white-space:pre;margin:0;padding:12px 12px;display:block;overflow:auto}.rst-content div[class^='highlight'] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content pre.literal-block,.rst-content div[class^='highlight'] pre,.rst-content .linenodiv pre{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;font-size:12px;line-height:1.4}@media print{.rst-content .codeblock,.rst-content div[class^='highlight'],.rst-content div[class^='highlight'] pre{white-space:pre-wrap}}.rst-content .note .last,.rst-content .attention .last,.rst-content .caution .last,.rst-content .danger .last,.rst-content .error .last,.rst-content .hint .last,.rst-content .important .last,.rst-content .tip .last,.rst-content .warning .last,.rst-content .seealso .last,.rst-content .admonition-todo .last,.rst-content .admonition .last{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,0.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent !important;border-color:rgba(0,0,0,0.1) !important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha li{list-style:upper-alpha}.rst-content .section ol p,.rst-content .section ul p{margin-bottom:12px}.rst-content .section ol p:last-child,.rst-content .section ul p:last-child{margin-bottom:24px}.rst-content .line-block{margin-left:0px;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0px}.rst-content .topic-title{font-weight:bold;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0px 0px 24px 24px}.rst-content .align-left{float:left;margin:0px 24px 24px 0px}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content .toctree-wrapper p.caption .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink{visibility:hidden;font-size:14px}.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content .toctree-wrapper p.caption .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content dl dt .headerlink:after,.rst-content p.caption .headerlink:after,.rst-content table>caption .headerlink:after{content:"";font-family:FontAwesome}.rst-content h1:hover .headerlink:after,.rst-content h2:hover .headerlink:after,.rst-content .toctree-wrapper p.caption:hover .headerlink:after,.rst-content h3:hover .headerlink:after,.rst-content h4:hover .headerlink:after,.rst-content h5:hover .headerlink:after,.rst-content h6:hover .headerlink:after,.rst-content dl dt:hover .headerlink:after,.rst-content p.caption:hover .headerlink:after,.rst-content table>caption:hover .headerlink:after{visibility:visible}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:solid 1px #e1e4e5}.rst-content .sidebar p,.rst-content .sidebar ul,.rst-content .sidebar dl{font-size:90%}.rst-content .sidebar .last{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif;font-weight:bold;background:#e1e4e5;padding:6px 12px;margin:-24px;margin-bottom:24px;font-size:100%}.rst-content .highlighted{background:#F1C40F;display:inline-block;font-weight:bold;padding:0 6px}.rst-content .footnote-reference,.rst-content .citation-reference{vertical-align:baseline;position:relative;top:-0.4em;line-height:0;font-size:90%}.rst-content table.docutils.citation,.rst-content table.docutils.footnote{background:none;border:none;color:gray}.rst-content table.docutils.citation td,.rst-content table.docutils.citation tr,.rst-content table.docutils.footnote td,.rst-content table.docutils.footnote tr{border:none;background-color:transparent !important;white-space:normal}.rst-content table.docutils.citation td.label,.rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}.rst-content table.docutils.citation tt,.rst-content table.docutils.citation code,.rst-content table.docutils.footnote tt,.rst-content table.docutils.footnote code{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}.rst-content table.docutils td .last,.rst-content table.docutils td .last :last-child{margin-bottom:0}.rst-content table.field-list{border:none}.rst-content table.field-list td{border:none}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content tt,.rst-content tt,.rst-content code{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;padding:2px 5px}.rst-content tt big,.rst-content tt em,.rst-content tt big,.rst-content code big,.rst-content tt em,.rst-content code em{font-size:100% !important;line-height:normal}.rst-content tt.literal,.rst-content tt.literal,.rst-content code.literal{color:#E74C3C}.rst-content tt.xref,a .rst-content tt,.rst-content tt.xref,.rst-content code.xref,a .rst-content tt,a .rst-content code{font-weight:bold;color:#404040}.rst-content pre,.rst-content kbd,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace}.rst-content a tt,.rst-content a tt,.rst-content a code{color:#2980B9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:bold;margin-bottom:12px}.rst-content dl p,.rst-content dl table,.rst-content dl ul,.rst-content dl ol{margin-bottom:12px !important}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl:not(.docutils){margin-bottom:24px}.rst-content dl:not(.docutils) dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980B9;border-top:solid 3px #6ab0de;padding:6px;position:relative}.rst-content dl:not(.docutils) dt:before{color:#6ab0de}.rst-content dl:not(.docutils) dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dl dt{margin-bottom:6px;border:none;border-left:solid 3px #ccc;background:#f0f0f0;color:#555}.rst-content dl:not(.docutils) dl dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dt:first-child{margin-top:0}.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) code{font-weight:bold}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) code.descclassname{background-color:transparent;border:none;padding:0;font-size:100% !important}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname{font-weight:bold}.rst-content dl:not(.docutils) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:bold}.rst-content dl:not(.docutils) .property{display:inline-block;padding-right:8px}.rst-content .viewcode-link,.rst-content .viewcode-back{display:inline-block;color:#27AE60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:bold}.rst-content tt.download,.rst-content code.download{background:inherit;padding:inherit;font-weight:normal;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content tt.download span:first-child,.rst-content code.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width: 480px){.rst-content .sidebar{width:100%}}span[id*='MathJax-Span']{color:#404040}.math{text-align:center}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-regular.eot");src:url("../fonts/Lato/lato-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-regular.woff2") format("woff2"),url("../fonts/Lato/lato-regular.woff") format("woff"),url("../fonts/Lato/lato-regular.ttf") format("truetype");font-weight:400;font-style:normal}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-bold.eot");src:url("../fonts/Lato/lato-bold.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-bold.woff2") format("woff2"),url("../fonts/Lato/lato-bold.woff") format("woff"),url("../fonts/Lato/lato-bold.ttf") format("truetype");font-weight:700;font-style:normal}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-bolditalic.eot");src:url("../fonts/Lato/lato-bolditalic.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-bolditalic.woff2") format("woff2"),url("../fonts/Lato/lato-bolditalic.woff") format("woff"),url("../fonts/Lato/lato-bolditalic.ttf") format("truetype");font-weight:700;font-style:italic}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-italic.eot");src:url("../fonts/Lato/lato-italic.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-italic.woff2") format("woff2"),url("../fonts/Lato/lato-italic.woff") format("woff"),url("../fonts/Lato/lato-italic.ttf") format("truetype");font-weight:400;font-style:italic}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:400;src:url("../fonts/RobotoSlab/roboto-slab.eot");src:url("../fonts/RobotoSlab/roboto-slab-v7-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/RobotoSlab/roboto-slab-v7-regular.woff2") format("woff2"),url("../fonts/RobotoSlab/roboto-slab-v7-regular.woff") format("woff"),url("../fonts/RobotoSlab/roboto-slab-v7-regular.ttf") format("truetype")}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:700;src:url("../fonts/RobotoSlab/roboto-slab-v7-bold.eot");src:url("../fonts/RobotoSlab/roboto-slab-v7-bold.eot?#iefix") format("embedded-opentype"),url("../fonts/RobotoSlab/roboto-slab-v7-bold.woff2") format("woff2"),url("../fonts/RobotoSlab/roboto-slab-v7-bold.woff") format("woff"),url("../fonts/RobotoSlab/roboto-slab-v7-bold.ttf") format("truetype")} + */@font-face{font-family:'FontAwesome';src:url("../fonts/fontawesome-webfont.eot?v=4.7.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"),url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857em;text-align:center}.fa-ul{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.fa-li.fa-lg{left:-1.8571428571em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.wy-menu-vertical li span.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-left.toctree-expand,.wy-menu-vertical li.current>a span.fa-pull-left.toctree-expand,.rst-content .fa-pull-left.admonition-title,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content dl dt .fa-pull-left.headerlink,.rst-content p.caption .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.rst-content code.download span.fa-pull-left:first-child,.fa-pull-left.icon{margin-right:.3em}.fa.fa-pull-right,.wy-menu-vertical li span.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-right.toctree-expand,.wy-menu-vertical li.current>a span.fa-pull-right.toctree-expand,.rst-content .fa-pull-right.admonition-title,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content dl dt .fa-pull-right.headerlink,.rst-content p.caption .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.rst-content code.download span.fa-pull-right:first-child,.fa-pull-right.icon{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.wy-menu-vertical li span.pull-left.toctree-expand,.wy-menu-vertical li.on a span.pull-left.toctree-expand,.wy-menu-vertical li.current>a span.pull-left.toctree-expand,.rst-content .pull-left.admonition-title,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content dl dt .pull-left.headerlink,.rst-content p.caption .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.rst-content code.download span.pull-left:first-child,.pull-left.icon{margin-right:.3em}.fa.pull-right,.wy-menu-vertical li span.pull-right.toctree-expand,.wy-menu-vertical li.on a span.pull-right.toctree-expand,.wy-menu-vertical li.current>a span.pull-right.toctree-expand,.rst-content .pull-right.admonition-title,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content dl dt .pull-right.headerlink,.rst-content p.caption .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.rst-content code.download span.pull-right:first-child,.pull-right.icon{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.rst-content .admonition-title:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.wy-dropdown .caret:before,.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li span.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-tv:before,.fa-television:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:""}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-signing:before,.fa-sign-language:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-vcard:before,.fa-address-card:before{content:""}.fa-vcard-o:before,.fa-address-card-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context{font-family:inherit}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before{font-family:"FontAwesome";display:inline-block;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa,a .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,a .rst-content .admonition-title,.rst-content a .admonition-title,a .rst-content h1 .headerlink,.rst-content h1 a .headerlink,a .rst-content h2 .headerlink,.rst-content h2 a .headerlink,a .rst-content h3 .headerlink,.rst-content h3 a .headerlink,a .rst-content h4 .headerlink,.rst-content h4 a .headerlink,a .rst-content h5 .headerlink,.rst-content h5 a .headerlink,a .rst-content h6 .headerlink,.rst-content h6 a .headerlink,a .rst-content dl dt .headerlink,.rst-content dl dt a .headerlink,a .rst-content p.caption .headerlink,.rst-content p.caption a .headerlink,a .rst-content table>caption .headerlink,.rst-content table>caption a .headerlink,a .rst-content tt.download span:first-child,.rst-content tt.download a span:first-child,a .rst-content code.download span:first-child,.rst-content code.download a span:first-child,a .icon{display:inline-block;text-decoration:inherit}.btn .fa,.btn .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .btn span.toctree-expand,.btn .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .btn span.toctree-expand,.btn .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .btn span.toctree-expand,.btn .rst-content .admonition-title,.rst-content .btn .admonition-title,.btn .rst-content h1 .headerlink,.rst-content h1 .btn .headerlink,.btn .rst-content h2 .headerlink,.rst-content h2 .btn .headerlink,.btn .rst-content h3 .headerlink,.rst-content h3 .btn .headerlink,.btn .rst-content h4 .headerlink,.rst-content h4 .btn .headerlink,.btn .rst-content h5 .headerlink,.rst-content h5 .btn .headerlink,.btn .rst-content h6 .headerlink,.rst-content h6 .btn .headerlink,.btn .rst-content dl dt .headerlink,.rst-content dl dt .btn .headerlink,.btn .rst-content p.caption .headerlink,.rst-content p.caption .btn .headerlink,.btn .rst-content table>caption .headerlink,.rst-content table>caption .btn .headerlink,.btn .rst-content tt.download span:first-child,.rst-content tt.download .btn span:first-child,.btn .rst-content code.download span:first-child,.rst-content code.download .btn span:first-child,.btn .icon,.nav .fa,.nav .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .nav span.toctree-expand,.nav .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .nav span.toctree-expand,.nav .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .nav span.toctree-expand,.nav .rst-content .admonition-title,.rst-content .nav .admonition-title,.nav .rst-content h1 .headerlink,.rst-content h1 .nav .headerlink,.nav .rst-content h2 .headerlink,.rst-content h2 .nav .headerlink,.nav .rst-content h3 .headerlink,.rst-content h3 .nav .headerlink,.nav .rst-content h4 .headerlink,.rst-content h4 .nav .headerlink,.nav .rst-content h5 .headerlink,.rst-content h5 .nav .headerlink,.nav .rst-content h6 .headerlink,.rst-content h6 .nav .headerlink,.nav .rst-content dl dt .headerlink,.rst-content dl dt .nav .headerlink,.nav .rst-content p.caption .headerlink,.rst-content p.caption .nav .headerlink,.nav .rst-content table>caption .headerlink,.rst-content table>caption .nav .headerlink,.nav .rst-content tt.download span:first-child,.rst-content tt.download .nav span:first-child,.nav .rst-content code.download span:first-child,.rst-content code.download .nav span:first-child,.nav .icon{display:inline}.btn .fa.fa-large,.btn .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .btn span.fa-large.toctree-expand,.btn .rst-content .fa-large.admonition-title,.rst-content .btn .fa-large.admonition-title,.btn .rst-content h1 .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.btn .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .btn .fa-large.headerlink,.btn .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .btn .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .btn span.fa-large:first-child,.btn .rst-content code.download span.fa-large:first-child,.rst-content code.download .btn span.fa-large:first-child,.btn .fa-large.icon,.nav .fa.fa-large,.nav .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .nav span.fa-large.toctree-expand,.nav .rst-content .fa-large.admonition-title,.rst-content .nav .fa-large.admonition-title,.nav .rst-content h1 .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.nav .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.nav .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .nav .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.nav .rst-content code.download span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.nav .fa-large.icon{line-height:.9em}.btn .fa.fa-spin,.btn .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .btn span.fa-spin.toctree-expand,.btn .rst-content .fa-spin.admonition-title,.rst-content .btn .fa-spin.admonition-title,.btn .rst-content h1 .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.btn .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .btn .fa-spin.headerlink,.btn .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .btn .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .btn span.fa-spin:first-child,.btn .rst-content code.download span.fa-spin:first-child,.rst-content code.download .btn span.fa-spin:first-child,.btn .fa-spin.icon,.nav .fa.fa-spin,.nav .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .nav span.fa-spin.toctree-expand,.nav .rst-content .fa-spin.admonition-title,.rst-content .nav .fa-spin.admonition-title,.nav .rst-content h1 .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.nav .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.nav .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .nav .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.nav .rst-content code.download span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.nav .fa-spin.icon{display:inline-block}.btn.fa:before,.wy-menu-vertical li span.btn.toctree-expand:before,.rst-content .btn.admonition-title:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content dl dt .btn.headerlink:before,.rst-content p.caption .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.rst-content code.download span.btn:first-child:before,.btn.icon:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.wy-menu-vertical li span.btn.toctree-expand:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content p.caption .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.rst-content code.download span.btn:first-child:hover:before,.btn.icon:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li .btn-mini span.toctree-expand:before,.btn-mini .rst-content .admonition-title:before,.rst-content .btn-mini .admonition-title:before,.btn-mini .rst-content h1 .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.btn-mini .rst-content dl dt .headerlink:before,.rst-content dl dt .btn-mini .headerlink:before,.btn-mini .rst-content p.caption .headerlink:before,.rst-content p.caption .btn-mini .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.rst-content tt.download .btn-mini span:first-child:before,.btn-mini .rst-content code.download span:first-child:before,.rst-content code.download .btn-mini span:first-child:before,.btn-mini .icon:before{font-size:14px;vertical-align:-15%}.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.rst-content .admonition{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.wy-alert-title,.rst-content .admonition-title{color:#fff;font-weight:bold;display:block;color:#fff;background:#6ab0de;margin:-12px;padding:6px 12px;margin-bottom:12px}.wy-alert.wy-alert-danger,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.admonition{background:#fdf3f2}.wy-alert.wy-alert-danger .wy-alert-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .danger .wy-alert-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .danger .admonition-title,.rst-content .error .admonition-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition .admonition-title{background:#f29f97}.wy-alert.wy-alert-warning,.rst-content .wy-alert-warning.note,.rst-content .attention,.rst-content .caution,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.tip,.rst-content .warning,.rst-content .wy-alert-warning.seealso,.rst-content .admonition-todo,.rst-content .wy-alert-warning.admonition{background:#ffedcc}.wy-alert.wy-alert-warning .wy-alert-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .attention .wy-alert-title,.rst-content .caution .wy-alert-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .attention .admonition-title,.rst-content .caution .admonition-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .warning .admonition-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .admonition-todo .admonition-title,.rst-content .wy-alert-warning.admonition .admonition-title{background:#f0b37e}.wy-alert.wy-alert-info,.rst-content .note,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.rst-content .seealso,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.admonition{background:#e7f2fa}.wy-alert.wy-alert-info .wy-alert-title,.rst-content .note .wy-alert-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.rst-content .note .admonition-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .seealso .admonition-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition .admonition-title{background:#6ab0de}.wy-alert.wy-alert-success,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.warning,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.admonition{background:#dbfaf4}.wy-alert.wy-alert-success .wy-alert-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .hint .wy-alert-title,.rst-content .important .wy-alert-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .hint .admonition-title,.rst-content .important .admonition-title,.rst-content .tip .admonition-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition .admonition-title{background:#1abc9c}.wy-alert.wy-alert-neutral,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.admonition{background:#f3f6f6}.wy-alert.wy-alert-neutral .wy-alert-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition .admonition-title{color:#404040;background:#e1e4e5}.wy-alert.wy-alert-neutral a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a{color:#2980B9}.wy-alert p:last-child,.rst-content .note p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.rst-content .seealso p:last-child,.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0px;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,0.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27AE60}.wy-tray-container li.wy-tray-item-info{background:#2980B9}.wy-tray-container li.wy-tray-item-warning{background:#E67E22}.wy-tray-container li.wy-tray-item-danger{background:#E74C3C}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width: 768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px 12px;color:#fff;border:1px solid rgba(0,0,0,0.1);background-color:#27AE60;text-decoration:none;font-weight:normal;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:0px 1px 2px -1px rgba(255,255,255,0.5) inset,0px -2px 0px 0px rgba(0,0,0,0.1) inset;outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:0px -1px 0px 0px rgba(0,0,0,0.05) inset,0px 2px 0px 0px rgba(0,0,0,0.1) inset;padding:8px 12px 6px 12px}.btn:visited{color:#fff}.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn-disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn-disabled:hover,.btn-disabled:focus,.btn-disabled:active{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980B9 !important}.btn-info:hover{background-color:#2e8ece !important}.btn-neutral{background-color:#f3f6f6 !important;color:#404040 !important}.btn-neutral:hover{background-color:#e5ebeb !important;color:#404040}.btn-neutral:visited{color:#404040 !important}.btn-success{background-color:#27AE60 !important}.btn-success:hover{background-color:#295 !important}.btn-danger{background-color:#E74C3C !important}.btn-danger:hover{background-color:#ea6153 !important}.btn-warning{background-color:#E67E22 !important}.btn-warning:hover{background-color:#e98b39 !important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f !important}.btn-link{background-color:transparent !important;color:#2980B9;box-shadow:none;border-color:transparent !important}.btn-link:hover{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:active{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:visited{color:#9B59B6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:before,.wy-btn-group:after{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:solid 1px #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,0.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980B9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:solid 1px #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type="search"]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980B9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned input,.wy-form-aligned textarea,.wy-form-aligned select,.wy-form-aligned .wy-help-inline,.wy-form-aligned label{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{border:0;margin:0;padding:0}legend{display:block;width:100%;border:0;padding:0;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label{display:block;margin:0 0 .3125em 0;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;*zoom:1;max-width:68em;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#E74C3C}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full input[type="text"],.wy-control-group .wy-form-full input[type="password"],.wy-control-group .wy-form-full input[type="email"],.wy-control-group .wy-form-full input[type="url"],.wy-control-group .wy-form-full input[type="date"],.wy-control-group .wy-form-full input[type="month"],.wy-control-group .wy-form-full input[type="time"],.wy-control-group .wy-form-full input[type="datetime"],.wy-control-group .wy-form-full input[type="datetime-local"],.wy-control-group .wy-form-full input[type="week"],.wy-control-group .wy-form-full input[type="number"],.wy-control-group .wy-form-full input[type="search"],.wy-control-group .wy-form-full input[type="tel"],.wy-control-group .wy-form-full input[type="color"],.wy-control-group .wy-form-halves input[type="text"],.wy-control-group .wy-form-halves input[type="password"],.wy-control-group .wy-form-halves input[type="email"],.wy-control-group .wy-form-halves input[type="url"],.wy-control-group .wy-form-halves input[type="date"],.wy-control-group .wy-form-halves input[type="month"],.wy-control-group .wy-form-halves input[type="time"],.wy-control-group .wy-form-halves input[type="datetime"],.wy-control-group .wy-form-halves input[type="datetime-local"],.wy-control-group .wy-form-halves input[type="week"],.wy-control-group .wy-form-halves input[type="number"],.wy-control-group .wy-form-halves input[type="search"],.wy-control-group .wy-form-halves input[type="tel"],.wy-control-group .wy-form-halves input[type="color"],.wy-control-group .wy-form-thirds input[type="text"],.wy-control-group .wy-form-thirds input[type="password"],.wy-control-group .wy-form-thirds input[type="email"],.wy-control-group .wy-form-thirds input[type="url"],.wy-control-group .wy-form-thirds input[type="date"],.wy-control-group .wy-form-thirds input[type="month"],.wy-control-group .wy-form-thirds input[type="time"],.wy-control-group .wy-form-thirds input[type="datetime"],.wy-control-group .wy-form-thirds input[type="datetime-local"],.wy-control-group .wy-form-thirds input[type="week"],.wy-control-group .wy-form-thirds input[type="number"],.wy-control-group .wy-form-thirds input[type="search"],.wy-control-group .wy-form-thirds input[type="tel"],.wy-control-group .wy-form-thirds input[type="color"]{width:100%}.wy-control-group .wy-form-full{float:left;display:block;margin-right:2.3576515979%;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.3576515979%;width:48.821174201%}.wy-control-group .wy-form-halves:last-child{margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n+1){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.3576515979%;width:31.7615656014%}.wy-control-group .wy-form-thirds:last-child{margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control{margin:6px 0 0 0;font-size:90%}.wy-control-no-input{display:inline-block;margin:6px 0 0 0;font-size:90%}.wy-control-group.fluid-input input[type="text"],.wy-control-group.fluid-input input[type="password"],.wy-control-group.fluid-input input[type="email"],.wy-control-group.fluid-input input[type="url"],.wy-control-group.fluid-input input[type="date"],.wy-control-group.fluid-input input[type="month"],.wy-control-group.fluid-input input[type="time"],.wy-control-group.fluid-input input[type="datetime"],.wy-control-group.fluid-input input[type="datetime-local"],.wy-control-group.fluid-input input[type="week"],.wy-control-group.fluid-input input[type="number"],.wy-control-group.fluid-input input[type="search"],.wy-control-group.fluid-input input[type="tel"],.wy-control-group.fluid-input input[type="color"]{width:100%}.wy-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;*overflow:visible}input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type="datetime-local"]{padding:.34375em .625em}input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}input[type="text"]:focus,input[type="password"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus{outline:0;outline:thin dotted \9;border-color:#333}input.no-focus:focus{border-color:#ccc !important}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:1px auto #129FEA}input[type="text"][disabled],input[type="password"][disabled],input[type="email"][disabled],input[type="url"][disabled],input[type="date"][disabled],input[type="month"][disabled],input[type="time"][disabled],input[type="datetime"][disabled],input[type="datetime-local"][disabled],input[type="week"][disabled],input[type="number"][disabled],input[type="search"][disabled],input[type="tel"][disabled],input[type="color"][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#E74C3C;border:1px solid #E74C3C}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#E74C3C}input[type="file"]:focus:invalid:focus,input[type="radio"]:focus:invalid:focus,input[type="checkbox"]:focus:invalid:focus{outline-color:#E74C3C}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type="radio"][disabled],input[type="checkbox"][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:solid 1px #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{position:absolute;content:"";display:block;left:0;top:0;width:36px;height:12px;border-radius:4px;background:#ccc;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{position:absolute;content:"";display:block;width:18px;height:18px;border-radius:4px;background:#999;left:-3px;top:-3px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27AE60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#E74C3C}.wy-control-group.wy-control-group-error input[type="text"],.wy-control-group.wy-control-group-error input[type="password"],.wy-control-group.wy-control-group-error input[type="email"],.wy-control-group.wy-control-group-error input[type="url"],.wy-control-group.wy-control-group-error input[type="date"],.wy-control-group.wy-control-group-error input[type="month"],.wy-control-group.wy-control-group-error input[type="time"],.wy-control-group.wy-control-group-error input[type="datetime"],.wy-control-group.wy-control-group-error input[type="datetime-local"],.wy-control-group.wy-control-group-error input[type="week"],.wy-control-group.wy-control-group-error input[type="number"],.wy-control-group.wy-control-group-error input[type="search"],.wy-control-group.wy-control-group-error input[type="tel"],.wy-control-group.wy-control-group-error input[type="color"]{border:solid 1px #E74C3C}.wy-control-group.wy-control-group-error textarea{border:solid 1px #E74C3C}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27AE60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#E74C3C}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#E67E22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980B9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width: 480px){.wy-form button[type="submit"]{margin:.7em 0 0}.wy-form input[type="text"],.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:.3em;display:block}.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0 0}.wy-form .wy-help-inline,.wy-form-message-inline,.wy-form-message{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width: 768px){.tablet-hide{display:none}}@media screen and (max-width: 480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.wy-table,.rst-content table.docutils,.rst-content table.field-list{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.wy-table caption,.rst-content table.docutils caption,.rst-content table.field-list caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td,.wy-table th,.rst-content table.docutils th,.rst-content table.field-list th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.wy-table td:first-child,.rst-content table.docutils td:first-child,.rst-content table.field-list td:first-child,.wy-table th:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list th:first-child{border-left-width:0}.wy-table thead,.rst-content table.docutils thead,.rst-content table.field-list thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.wy-table thead th,.rst-content table.docutils thead th,.rst-content table.field-list thead th{font-weight:bold;border-bottom:solid 2px #e1e4e5}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td{background-color:transparent;vertical-align:middle}.wy-table td p,.rst-content table.docutils td p,.rst-content table.field-list td p{line-height:18px}.wy-table td p:last-child,.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child{margin-bottom:0}.wy-table .wy-table-cell-min,.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min{width:1%;padding-right:0}.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:gray;font-size:90%}.wy-table-tertiary{color:gray;font-size:80%}.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td,.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td{background-color:#f3f6f6}.wy-table-backed{background-color:#f3f6f6}.wy-table-bordered-all,.rst-content table.docutils{border:1px solid #e1e4e5}.wy-table-bordered-all td,.rst-content table.docutils td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.wy-table-bordered-all tbody>tr:last-child td,.rst-content table.docutils tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px 0;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0 !important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980B9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9B59B6}html{height:100%;overflow-x:hidden}body{font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;font-weight:normal;color:#404040;min-height:100%;overflow-x:hidden;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#E67E22 !important}a.wy-text-warning:hover{color:#eb9950 !important}.wy-text-info{color:#2980B9 !important}a.wy-text-info:hover{color:#409ad5 !important}.wy-text-success{color:#27AE60 !important}a.wy-text-success:hover{color:#36d278 !important}.wy-text-danger{color:#E74C3C !important}a.wy-text-danger:hover{color:#ed7669 !important}.wy-text-neutral{color:#404040 !important}a.wy-text-neutral:hover{color:#595959 !important}h1,h2,.rst-content .toctree-wrapper p.caption,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif}p{line-height:24px;margin:0;font-size:16px;margin-bottom:24px}h1{font-size:175%}h2,.rst-content .toctree-wrapper p.caption{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}code,.rst-content tt,.rst-content code{white-space:nowrap;max-width:100%;background:#fff;border:solid 1px #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;color:#E74C3C;overflow-x:auto}code.code-large,.rst-content tt.code-large{font-size:90%}.wy-plain-list-disc,.rst-content .section ul,.rst-content .toctree-wrapper ul,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.wy-plain-list-disc li,.rst-content .section ul li,.rst-content .toctree-wrapper ul li,article ul li{list-style:disc;margin-left:24px}.wy-plain-list-disc li p:last-child,.rst-content .section ul li p:last-child,.rst-content .toctree-wrapper ul li p:last-child,article ul li p:last-child{margin-bottom:0}.wy-plain-list-disc li ul,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li ul,article ul li ul{margin-bottom:0}.wy-plain-list-disc li li,.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,article ul li li{list-style:circle}.wy-plain-list-disc li li li,.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,article ul li li li{list-style:square}.wy-plain-list-disc li ol li,.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,article ul li ol li{list-style:decimal}.wy-plain-list-decimal,.rst-content .section ol,.rst-content ol.arabic,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.wy-plain-list-decimal li,.rst-content .section ol li,.rst-content ol.arabic li,article ol li{list-style:decimal;margin-left:24px}.wy-plain-list-decimal li p:last-child,.rst-content .section ol li p:last-child,.rst-content ol.arabic li p:last-child,article ol li p:last-child{margin-bottom:0}.wy-plain-list-decimal li ul,.rst-content .section ol li ul,.rst-content ol.arabic li ul,article ol li ul{margin-bottom:0}.wy-plain-list-decimal li ul li,.rst-content .section ol li ul li,.rst-content ol.arabic li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:before,.wy-breadcrumbs:after{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.wy-breadcrumbs li code,.wy-breadcrumbs li .rst-content tt,.rst-content .wy-breadcrumbs li tt{padding:5px;border:none;background:none}.wy-breadcrumbs li code.literal,.wy-breadcrumbs li .rst-content tt.literal,.rst-content .wy-breadcrumbs li tt.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width: 480px){.wy-breadcrumbs-extra{display:none}.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:before,.wy-menu-horiz:after{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz ul,.wy-menu-horiz li{display:inline-block}.wy-menu-horiz li:hover{background:rgba(255,255,255,0.1)}.wy-menu-horiz li.divide-left{border-left:solid 1px #404040}.wy-menu-horiz li.divide-right{border-right:solid 1px #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{height:32px;display:inline-block;line-height:32px;padding:0 1.618em;margin-bottom:0;display:block;font-weight:bold;text-transform:uppercase;font-size:80%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:solid 1px #404040}.wy-menu-vertical li.divide-bottom{border-bottom:solid 1px #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:gray;border-right:solid 1px #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.wy-menu-vertical li code,.wy-menu-vertical li .rst-content tt,.rst-content .wy-menu-vertical li tt{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li span.toctree-expand{display:block;float:left;margin-left:-1.2em;font-size:.8em;line-height:1.6em;color:#4d4d4d}.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a{color:#404040;padding:.4045em 1.618em;font-weight:bold;position:relative;background:#fcfcfc;border:none;padding-left:1.618em -4px}.wy-menu-vertical li.on a:hover,.wy-menu-vertical li.current>a:hover{background:#fcfcfc}.wy-menu-vertical li.on a:hover span.toctree-expand,.wy-menu-vertical li.current>a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand{display:block;font-size:.8em;line-height:1.6em;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:solid 1px #c9c9c9;border-top:solid 1px #c9c9c9}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a{color:#404040}.wy-menu-vertical li.toctree-l1.current li.toctree-l2>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>ul{display:none}.wy-menu-vertical li.toctree-l1.current li.toctree-l2.current>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3.current>ul{display:block}.wy-menu-vertical li.toctree-l2.current>a{background:#c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{display:block;background:#c9c9c9;padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l2 span.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3{font-size:.9em}.wy-menu-vertical li.toctree-l3.current>a{background:#bdbdbd;padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{display:block;background:#bdbdbd;padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l3 span.toctree-expand{color:#969696}.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:normal}.wy-menu-vertical a{display:inline-block;line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover span.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980B9;cursor:pointer;color:#fff}.wy-menu-vertical a:active span.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980B9;text-align:center;padding:.809em;display:block;color:#fcfcfc;margin-bottom:.809em}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em auto;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a{color:#fcfcfc;font-size:100%;font-weight:bold;display:inline-block;padding:4px 6px;margin-bottom:.809em}.wy-side-nav-search>a:hover,.wy-side-nav-search .wy-dropdown>a:hover{background:rgba(255,255,255,0.1)}.wy-side-nav-search>a img.logo,.wy-side-nav-search .wy-dropdown>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search>a.icon img.logo,.wy-side-nav-search .wy-dropdown>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:normal;color:rgba(255,255,255,0.3)}.wy-nav .wy-menu-vertical header{color:#2980B9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980B9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980B9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:before,.wy-nav-top:after{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:bold}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,0.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:gray}footer p{margin-bottom:12px}footer span.commit code,footer span.commit .rst-content tt,.rst-content footer span.commit tt{padding:0px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;font-size:1em;background:none;border:none;color:gray}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:before,.rst-footer-buttons:after{width:100%}.rst-footer-buttons:before,.rst-footer-buttons:after{display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:before,.rst-breadcrumbs-buttons:after{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:solid 1px #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:solid 1px #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:gray;font-size:90%}@media screen and (max-width: 768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-side-scroll{width:auto}.wy-side-nav-search{width:auto}.wy-menu.wy-menu-vertical{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width: 1100px){.wy-nav-content-wrap{background:rgba(0,0,0,0.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,footer,.wy-nav-side{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content p.caption .headerlink,.rst-content p.caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .icon{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up{height:auto;max-height:100%}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content img{max-width:100%;height:auto}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure p.caption{font-style:italic}.rst-content div.figure p:last-child.caption{margin-bottom:0px}.rst-content div.figure.align-center{text-align:center}.rst-content .section>img,.rst-content .section>a>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px 12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;display:block;overflow:auto}.rst-content pre.literal-block,.rst-content div[class^='highlight']{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px 0}.rst-content pre.literal-block div[class^='highlight'],.rst-content div[class^='highlight'] div[class^='highlight']{padding:0px;border:none;margin:0}.rst-content div[class^='highlight'] td.code{width:100%}.rst-content .linenodiv pre{border-right:solid 1px #e6e9ea;margin:0;padding:12px 12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^='highlight'] pre{white-space:pre;margin:0;padding:12px 12px;display:block;overflow:auto}.rst-content div[class^='highlight'] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content pre.literal-block,.rst-content div[class^='highlight'] pre,.rst-content .linenodiv pre{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;font-size:12px;line-height:1.4}@media print{.rst-content .codeblock,.rst-content div[class^='highlight'],.rst-content div[class^='highlight'] pre{white-space:pre-wrap}}.rst-content .note .last,.rst-content .attention .last,.rst-content .caution .last,.rst-content .danger .last,.rst-content .error .last,.rst-content .hint .last,.rst-content .important .last,.rst-content .tip .last,.rst-content .warning .last,.rst-content .seealso .last,.rst-content .admonition-todo .last,.rst-content .admonition .last{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,0.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent !important;border-color:rgba(0,0,0,0.1) !important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha li{list-style:upper-alpha}.rst-content .section ol p,.rst-content .section ul p{margin-bottom:12px}.rst-content .section ol p:last-child,.rst-content .section ul p:last-child{margin-bottom:24px}.rst-content .line-block{margin-left:0px;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0px}.rst-content .topic-title{font-weight:bold;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0px 0px 24px 24px}.rst-content .align-left{float:left;margin:0px 24px 24px 0px}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content .toctree-wrapper p.caption .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink{visibility:hidden;font-size:14px}.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content .toctree-wrapper p.caption .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content dl dt .headerlink:after,.rst-content p.caption .headerlink:after,.rst-content table>caption .headerlink:after{content:"";font-family:FontAwesome}.rst-content h1:hover .headerlink:after,.rst-content h2:hover .headerlink:after,.rst-content .toctree-wrapper p.caption:hover .headerlink:after,.rst-content h3:hover .headerlink:after,.rst-content h4:hover .headerlink:after,.rst-content h5:hover .headerlink:after,.rst-content h6:hover .headerlink:after,.rst-content dl dt:hover .headerlink:after,.rst-content p.caption:hover .headerlink:after,.rst-content table>caption:hover .headerlink:after{visibility:visible}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:solid 1px #e1e4e5}.rst-content .sidebar p,.rst-content .sidebar ul,.rst-content .sidebar dl{font-size:90%}.rst-content .sidebar .last{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif;font-weight:bold;background:#e1e4e5;padding:6px 12px;margin:-24px;margin-bottom:24px;font-size:100%}.rst-content .highlighted{background:#F1C40F;display:inline-block;font-weight:bold;padding:0 6px}.rst-content .footnote-reference,.rst-content .citation-reference{vertical-align:baseline;position:relative;top:-0.4em;line-height:0;font-size:90%}.rst-content table.docutils.citation,.rst-content table.docutils.footnote{background:none;border:none;color:gray}.rst-content table.docutils.citation td,.rst-content table.docutils.citation tr,.rst-content table.docutils.footnote td,.rst-content table.docutils.footnote tr{border:none;background-color:transparent !important;white-space:normal}.rst-content table.docutils.citation td.label,.rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}.rst-content table.docutils.citation tt,.rst-content table.docutils.citation code,.rst-content table.docutils.footnote tt,.rst-content table.docutils.footnote code{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}.rst-content table.docutils td .last,.rst-content table.docutils td .last :last-child{margin-bottom:0}.rst-content table.field-list{border:none}.rst-content table.field-list td{border:none}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content tt,.rst-content tt,.rst-content code{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;padding:2px 5px}.rst-content tt big,.rst-content tt em,.rst-content tt big,.rst-content code big,.rst-content tt em,.rst-content code em{font-size:100% !important;line-height:normal}.rst-content tt.literal,.rst-content tt.literal,.rst-content code.literal{color:#E74C3C}.rst-content tt.xref,a .rst-content tt,.rst-content tt.xref,.rst-content code.xref,a .rst-content tt,a .rst-content code{font-weight:bold;color:#404040}.rst-content pre,.rst-content kbd,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace}.rst-content a tt,.rst-content a tt,.rst-content a code{color:#2980B9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:bold;margin-bottom:12px}.rst-content dl p,.rst-content dl table,.rst-content dl ul,.rst-content dl ol{margin-bottom:12px !important}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl:not(.docutils){margin-bottom:24px}.rst-content dl:not(.docutils) dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980B9;border-top:solid 3px #6ab0de;padding:6px;position:relative}.rst-content dl:not(.docutils) dt:before{color:#6ab0de}.rst-content dl:not(.docutils) dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dl dt{margin-bottom:6px;border:none;border-left:solid 3px #ccc;background:#f0f0f0;color:#555}.rst-content dl:not(.docutils) dl dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dt:first-child{margin-top:0}.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) code{font-weight:bold}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) code.descclassname{background-color:transparent;border:none;padding:0;font-size:100% !important}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname{font-weight:bold}.rst-content dl:not(.docutils) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:bold}.rst-content dl:not(.docutils) .property{display:inline-block;padding-right:8px}.rst-content .viewcode-link,.rst-content .viewcode-back{display:inline-block;color:#27AE60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:bold}.rst-content tt.download,.rst-content code.download{background:inherit;padding:inherit;font-weight:normal;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content tt.download span:first-child,.rst-content code.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width: 480px){.rst-content .sidebar{width:100%}}span[id*='MathJax-Span']{color:#404040}.math{text-align:center}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-regular.eot");src:url("../fonts/Lato/lato-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-regular.woff2") format("woff2"),url("../fonts/Lato/lato-regular.woff") format("woff"),url("../fonts/Lato/lato-regular.ttf") format("truetype");font-weight:400;font-style:normal}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-bold.eot");src:url("../fonts/Lato/lato-bold.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-bold.woff2") format("woff2"),url("../fonts/Lato/lato-bold.woff") format("woff"),url("../fonts/Lato/lato-bold.ttf") format("truetype");font-weight:700;font-style:normal}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-bolditalic.eot");src:url("../fonts/Lato/lato-bolditalic.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-bolditalic.woff2") format("woff2"),url("../fonts/Lato/lato-bolditalic.woff") format("woff"),url("../fonts/Lato/lato-bolditalic.ttf") format("truetype");font-weight:700;font-style:italic}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-italic.eot");src:url("../fonts/Lato/lato-italic.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-italic.woff2") format("woff2"),url("../fonts/Lato/lato-italic.woff") format("woff"),url("../fonts/Lato/lato-italic.ttf") format("truetype");font-weight:400;font-style:italic}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:400;src:url("../fonts/RobotoSlab/roboto-slab.eot");src:url("../fonts/RobotoSlab/roboto-slab-v7-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/RobotoSlab/roboto-slab-v7-regular.woff2") format("woff2"),url("../fonts/RobotoSlab/roboto-slab-v7-regular.woff") format("woff"),url("../fonts/RobotoSlab/roboto-slab-v7-regular.ttf") format("truetype")}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:700;src:url("../fonts/RobotoSlab/roboto-slab-v7-bold.eot");src:url("../fonts/RobotoSlab/roboto-slab-v7-bold.eot?#iefix") format("embedded-opentype"),url("../fonts/RobotoSlab/roboto-slab-v7-bold.woff2") format("woff2"),url("../fonts/RobotoSlab/roboto-slab-v7-bold.woff") format("woff"),url("../fonts/RobotoSlab/roboto-slab-v7-bold.ttf") format("truetype")} diff --git a/documentation/Sphinx/build/html/_static/doctools.js b/documentation/Sphinx/build/html/_static/doctools.js index d892892..ffadbec 100644 --- a/documentation/Sphinx/build/html/_static/doctools.js +++ b/documentation/Sphinx/build/html/_static/doctools.js @@ -150,7 +150,9 @@ var Documentation = { this.fixFirefoxAnchorBug(); this.highlightSearchWords(); this.initIndexTable(); - + if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { + this.initOnKeyListeners(); + } }, /** @@ -310,4 +312,4 @@ _ = Documentation.gettext; $(document).ready(function() { Documentation.init(); -}); \ No newline at end of file +}); diff --git a/documentation/Sphinx/build/html/_static/documentation_options.js b/documentation/Sphinx/build/html/_static/documentation_options.js index bb18adc..18de603 100644 --- a/documentation/Sphinx/build/html/_static/documentation_options.js +++ b/documentation/Sphinx/build/html/_static/documentation_options.js @@ -5,5 +5,292 @@ var DOCUMENTATION_OPTIONS = { COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' -}; \ No newline at end of file + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SEARCH_LANGUAGE_STOP_WORDS: ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"] +}; + + + +/* Non-minified version JS is _stemmer.js if file is provided */ +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + + + + + +var splitChars = (function() { + var result = {}; + var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648, + 1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702, + 2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971, + 2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345, + 3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761, + 3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823, + 4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125, + 8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695, + 11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587, + 43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141]; + var i, j, start, end; + for (i = 0; i < singles.length; i++) { + result[singles[i]] = true; + } + var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709], + [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161], + [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568], + [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807], + [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047], + [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383], + [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450], + [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547], + [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673], + [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820], + [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946], + [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023], + [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173], + [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332], + [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481], + [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718], + [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791], + [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095], + [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205], + [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687], + [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968], + [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869], + [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102], + [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271], + [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592], + [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822], + [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167], + [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959], + [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143], + [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318], + [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483], + [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101], + [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567], + [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292], + [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444], + [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783], + [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311], + [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511], + [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774], + [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071], + [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263], + [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519], + [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647], + [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967], + [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295], + [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274], + [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007], + [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381], + [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]]; + for (i = 0; i < ranges.length; i++) { + start = ranges[i][0]; + end = ranges[i][1]; + for (j = start; j <= end; j++) { + result[j] = true; + } + } + return result; +})(); + +function splitQuery(query) { + var result = []; + var start = -1; + for (var i = 0; i < query.length; i++) { + if (splitChars[query.charCodeAt(i)]) { + if (start !== -1) { + result.push(query.slice(start, i)); + start = -1; + } + } else if (start === -1) { + start = i; + } + } + if (start !== -1) { + result.push(query.slice(start)); + } + return result; +} + + diff --git a/documentation/Sphinx/build/html/_static/js/theme.js b/documentation/Sphinx/build/html/_static/js/theme.js index 62bc0b7..96672c6 100644 --- a/documentation/Sphinx/build/html/_static/js/theme.js +++ b/documentation/Sphinx/build/html/_static/js/theme.js @@ -1,3 +1,3 @@ -/* sphinx_rtd_theme version 0.4.1 | MIT license */ -/* Built 20180727 10:07 */ -require=function n(e,i,t){function o(s,a){if(!i[s]){if(!e[s]){var l="function"==typeof require&&require;if(!a&&l)return l(s,!0);if(r)return r(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var u=i[s]={exports:{}};e[s][0].call(u.exports,function(n){var i=e[s][1][n];return o(i||n)},u,u.exports,n,e,i,t)}return i[s].exports}for(var r="function"==typeof require&&require,s=0;s<t.length;s++)o(t[s]);return o}({"sphinx-rtd-theme":[function(n,e,i){var jQuery="undefined"!=typeof window?window.jQuery:n("jquery");e.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var e=this;void 0===n&&(n=!0),e.isRunning||(e.isRunning=!0,jQuery(function(i){e.init(i),e.reset(),e.win.on("hashchange",e.reset),n&&e.win.on("scroll",function(){e.linkScroll||e.winScroll||(e.winScroll=!0,requestAnimationFrame(function(){e.onScroll()}))}),e.win.on("resize",function(){e.winResize||(e.winResize=!0,requestAnimationFrame(function(){e.onResize()}))}),e.onResize()}))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")}).on("click",".wy-menu-vertical .current ul li a",function(){var i=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(i),e.hashChange()}).on("click","[data-toggle='rst-current-version']",function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")}),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("<div class='wy-table-responsive'></div>"),n("table.docutils.footnote").wrap("<div class='wy-table-responsive footnote'></div>"),n("table.docutils.citation").wrap("<div class='wy-table-responsive citation'></div>"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each(function(){var i=n(this);expand=n('<span class="toctree-expand"></span>'),expand.on("click",function(n){return e.toggleCurrent(i),n.stopPropagation(),!1}),i.prepend(expand)})},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),i=e.find('[href="'+n+'"]');if(0===i.length){var t=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(i=e.find('[href="#'+t.attr("id")+'"]')).length&&(i=e.find('[href="#"]'))}i.length>0&&($(".wy-menu-vertical .current").removeClass("current"),i.addClass("current"),i.closest("li.toctree-l1").addClass("current"),i.closest("li.toctree-l1").parent().addClass("current"),i.closest("li.toctree-l1").addClass("current"),i.closest("li.toctree-l2").addClass("current"),i.closest("li.toctree-l3").addClass("current"),i.closest("li.toctree-l4").addClass("current"))}catch(o){console.log("Error expanding nav for anchor",o)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,i=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(i),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",function(){this.linkScroll=!1})},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current"),e.siblings().find("li.current").removeClass("current"),e.find("> ul li.current").removeClass("current"),e.toggleClass("current")}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:e.exports.ThemeNav,StickyNav:e.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],i=0;i<e.length&&!window.requestAnimationFrame;++i)window.requestAnimationFrame=window[e[i]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[e[i]+"CancelAnimationFrame"]||window[e[i]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(e,i){var t=(new Date).getTime(),o=Math.max(0,16-(t-n)),r=window.setTimeout(function(){e(t+o)},o);return n=t+o,r}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(n){clearTimeout(n)})}()},{jquery:"jquery"}]},{},["sphinx-rtd-theme"]); \ No newline at end of file +/* sphinx_rtd_theme version 0.4.2 | MIT license */ +/* Built 20181005 13:10 */ +require=function r(s,a,l){function c(e,n){if(!a[e]){if(!s[e]){var i="function"==typeof require&&require;if(!n&&i)return i(e,!0);if(u)return u(e,!0);var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}var o=a[e]={exports:{}};s[e][0].call(o.exports,function(n){return c(s[e][1][n]||n)},o,o.exports,r,s,a,l)}return a[e].exports}for(var u="function"==typeof require&&require,n=0;n<l.length;n++)c(l[n]);return c}({"sphinx-rtd-theme":[function(n,e,i){var jQuery="undefined"!=typeof window?window.jQuery:n("jquery");e.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(e){var i=this;void 0===e&&(e=!0),i.isRunning||(i.isRunning=!0,jQuery(function(n){i.init(n),i.reset(),i.win.on("hashchange",i.reset),e&&i.win.on("scroll",function(){i.linkScroll||i.winScroll||(i.winScroll=!0,requestAnimationFrame(function(){i.onScroll()}))}),i.win.on("resize",function(){i.winResize||(i.winResize=!0,requestAnimationFrame(function(){i.onResize()}))}),i.onResize()}))},enableSticky:function(){this.enable(!0)},init:function(i){i(document);var t=this;this.navBar=i("div.wy-side-scroll:first"),this.win=i(window),i(document).on("click","[data-toggle='wy-nav-top']",function(){i("[data-toggle='wy-nav-shift']").toggleClass("shift"),i("[data-toggle='rst-versions']").toggleClass("shift")}).on("click",".wy-menu-vertical .current ul li a",function(){var n=i(this);i("[data-toggle='wy-nav-shift']").removeClass("shift"),i("[data-toggle='rst-versions']").toggleClass("shift"),t.toggleCurrent(n),t.hashChange()}).on("click","[data-toggle='rst-current-version']",function(){i("[data-toggle='rst-versions']").toggleClass("shift-up")}),i("table.docutils:not(.field-list,.footnote,.citation)").wrap("<div class='wy-table-responsive'></div>"),i("table.docutils.footnote").wrap("<div class='wy-table-responsive footnote'></div>"),i("table.docutils.citation").wrap("<div class='wy-table-responsive citation'></div>"),i(".wy-menu-vertical ul").not(".simple").siblings("a").each(function(){var e=i(this);expand=i('<span class="toctree-expand"></span>'),expand.on("click",function(n){return t.toggleCurrent(e),n.stopPropagation(),!1}),e.prepend(expand)})},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),i=e.find('[href="'+n+'"]');if(0===i.length){var t=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(i=e.find('[href="#'+t.attr("id")+'"]')).length&&(i=e.find('[href="#"]'))}0<i.length&&($(".wy-menu-vertical .current").removeClass("current"),i.addClass("current"),i.closest("li.toctree-l1").addClass("current"),i.closest("li.toctree-l1").parent().addClass("current"),i.closest("li.toctree-l1").addClass("current"),i.closest("li.toctree-l2").addClass("current"),i.closest("li.toctree-l3").addClass("current"),i.closest("li.toctree-l4").addClass("current"))}catch(o){console.log("Error expanding nav for anchor",o)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,i=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(i),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",function(){this.linkScroll=!1})},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current"),e.siblings().find("li.current").removeClass("current"),e.find("> ul li.current").removeClass("current"),e.toggleClass("current")}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:e.exports.ThemeNav,StickyNav:e.exports.ThemeNav}),function(){for(var r=0,n=["ms","moz","webkit","o"],e=0;e<n.length&&!window.requestAnimationFrame;++e)window.requestAnimationFrame=window[n[e]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[n[e]+"CancelAnimationFrame"]||window[n[e]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(n,e){var i=(new Date).getTime(),t=Math.max(0,16-(i-r)),o=window.setTimeout(function(){n(i+t)},t);return r=i+t,o}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(n){clearTimeout(n)})}()},{jquery:"jquery"}]},{},["sphinx-rtd-theme"]); \ No newline at end of file diff --git a/documentation/Sphinx/build/html/_static/searchtools.js b/documentation/Sphinx/build/html/_static/searchtools.js index 41b8336..7473859 100644 --- a/documentation/Sphinx/build/html/_static/searchtools.js +++ b/documentation/Sphinx/build/html/_static/searchtools.js @@ -1,5 +1,5 @@ /* - * searchtools.js_t + * searchtools.js * ~~~~~~~~~~~~~~~~ * * Sphinx JavaScript utilities for the full-text search. @@ -9,323 +9,44 @@ * */ - -/* Non-minified version JS is _stemmer.js if file is provided */ -/** - * Porter Stemmer - */ -var Stemmer = function() { - - var step2list = { - ational: 'ate', - tional: 'tion', - enci: 'ence', - anci: 'ance', - izer: 'ize', - bli: 'ble', - alli: 'al', - entli: 'ent', - eli: 'e', - ousli: 'ous', - ization: 'ize', - ation: 'ate', - ator: 'ate', - alism: 'al', - iveness: 'ive', - fulness: 'ful', - ousness: 'ous', - aliti: 'al', - iviti: 'ive', - biliti: 'ble', - logi: 'log' - }; - - var step3list = { - icate: 'ic', - ative: '', - alize: 'al', - iciti: 'ic', - ical: 'ic', - ful: '', - ness: '' +if (!Scorer) { + /** + * Simple result scoring code. + */ + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [filename, title, anchor, descr, score] + // and returns the new score. + /* + score: function(result) { + return result[4]; + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: {0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5}, // used to be unimportantResults + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + // query found in terms + term: 5 }; - - var c = "[^aeiou]"; // consonant - var v = "[aeiouy]"; // vowel - var C = c + "[^aeiouy]*"; // consonant sequence - var V = v + "[aeiou]*"; // vowel sequence - - var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 - var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 - var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 - var s_v = "^(" + C + ")?" + v; // vowel in stem - - this.stemWord = function (w) { - var stem; - var suffix; - var firstch; - var origword = w; - - if (w.length < 3) - return w; - - var re; - var re2; - var re3; - var re4; - - firstch = w.substr(0,1); - if (firstch == "y") - w = firstch.toUpperCase() + w.substr(1); - - // Step 1a - re = /^(.+?)(ss|i)es$/; - re2 = /^(.+?)([^s])s$/; - - if (re.test(w)) - w = w.replace(re,"$1$2"); - else if (re2.test(w)) - w = w.replace(re2,"$1$2"); - - // Step 1b - re = /^(.+?)eed$/; - re2 = /^(.+?)(ed|ing)$/; - if (re.test(w)) { - var fp = re.exec(w); - re = new RegExp(mgr0); - if (re.test(fp[1])) { - re = /.$/; - w = w.replace(re,""); - } - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1]; - re2 = new RegExp(s_v); - if (re2.test(stem)) { - w = stem; - re2 = /(at|bl|iz)$/; - re3 = new RegExp("([^aeiouylsz])\\1$"); - re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re2.test(w)) - w = w + "e"; - else if (re3.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - else if (re4.test(w)) - w = w + "e"; - } - } - - // Step 1c - re = /^(.+?)y$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(s_v); - if (re.test(stem)) - w = stem + "i"; - } - - // Step 2 - re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step2list[suffix]; - } - - // Step 3 - re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step3list[suffix]; - } - - // Step 4 - re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; - re2 = /^(.+?)(s|t)(ion)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - if (re.test(stem)) - w = stem; - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1] + fp[2]; - re2 = new RegExp(mgr1); - if (re2.test(stem)) - w = stem; - } - - // Step 5 - re = /^(.+?)e$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - re2 = new RegExp(meq1); - re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) - w = stem; - } - re = /ll$/; - re2 = new RegExp(mgr1); - if (re.test(w) && re2.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - - // and turn initial Y back to y - if (firstch == "y") - w = firstch.toLowerCase() + w.substr(1); - return w; - } } - - -/** - * Simple result scoring code. - */ -var Scorer = { - // Implement the following function to further tweak the score for each result - // The function takes a result array [filename, title, anchor, descr, score] - // and returns the new score. - /* - score: function(result) { - return result[4]; - }, - */ - - // query matches the full name of an object - objNameMatch: 11, - // or matches in the last dotted part of the object name - objPartialMatch: 6, - // Additive scores depending on the priority of the object - objPrio: {0: 15, // used to be importantResults - 1: 5, // used to be objectResults - 2: -5}, // used to be unimportantResults - // Used when the priority is not in the mapping. - objPrioDefault: 0, - - // query found in title - title: 15, - // query found in terms - term: 5 -}; - - - - - -var splitChars = (function() { - var result = {}; - var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648, - 1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702, - 2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971, - 2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345, - 3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761, - 3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823, - 4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125, - 8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695, - 11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587, - 43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141]; - var i, j, start, end; - for (i = 0; i < singles.length; i++) { - result[singles[i]] = true; - } - var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709], - [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161], - [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568], - [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807], - [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047], - [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383], - [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450], - [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547], - [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673], - [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820], - [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946], - [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023], - [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173], - [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332], - [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481], - [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718], - [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791], - [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095], - [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205], - [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687], - [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968], - [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869], - [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102], - [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271], - [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592], - [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822], - [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167], - [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959], - [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143], - [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318], - [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483], - [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101], - [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567], - [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292], - [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444], - [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783], - [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311], - [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511], - [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774], - [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071], - [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263], - [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519], - [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647], - [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967], - [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295], - [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274], - [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007], - [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381], - [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]]; - for (i = 0; i < ranges.length; i++) { - start = ranges[i][0]; - end = ranges[i][1]; - for (j = start; j <= end; j++) { - result[j] = true; - } - } - return result; -})(); - -function splitQuery(query) { - var result = []; - var start = -1; - for (var i = 0; i < query.length; i++) { - if (splitChars[query.charCodeAt(i)]) { - if (start !== -1) { - result.push(query.slice(start, i)); - start = -1; - } - } else if (start === -1) { - start = i; - } - } - if (start !== -1) { - result.push(query.slice(start)); - } - return result; +if (!splitQuery) { + function splitQuery(query) { + return query.split(/\s+/); + } } - - - /** * Search Module */ @@ -417,7 +138,7 @@ var Search = { */ query : function(query) { var i; - var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"]; + var stopwords = DOCUMENTATION_OPTIONS.SEARCH_LANGUAGE_STOP_WORDS; // stem the searchterms and add them to the correct list var stemmer = new Stemmer(); @@ -758,4 +479,4 @@ var Search = { $(document).ready(function() { Search.init(); -}); \ No newline at end of file +}); diff --git a/documentation/Sphinx/build/html/api.html b/documentation/Sphinx/build/html/api.html index e52216b..f656bae 100644 --- a/documentation/Sphinx/build/html/api.html +++ b/documentation/Sphinx/build/html/api.html @@ -97,7 +97,7 @@ <li class="toctree-l2"><a class="reference internal" href="#classes">Classes</a><ul> <li class="toctree-l3"><a class="reference internal" href="#module-ControlFile">ControlFile</a></li> <li class="toctree-l3"><a class="reference internal" href="#module-EcFlexpart">EcFlexpart</a></li> -<li class="toctree-l3"><a class="reference internal" href="#module-GribTools">GribTools</a></li> +<li class="toctree-l3"><a class="reference internal" href="#module-GribUtil">GribUtil</a></li> <li class="toctree-l3"><a class="reference internal" href="#module-MarsRetrieval">MarsRetrieval</a></li> <li class="toctree-l3"><a class="reference internal" href="#module-UioFiles">UioFiles</a></li> </ul> @@ -188,7 +188,7 @@ <li><a class="reference internal" href="#classes" id="id4">Classes</a><ul> <li><a class="reference internal" href="#module-ControlFile" id="id5">ControlFile</a></li> <li><a class="reference internal" href="#module-EcFlexpart" id="id6">EcFlexpart</a></li> -<li><a class="reference internal" href="#module-GribTools" id="id7">GribTools</a></li> +<li><a class="reference internal" href="#module-GribUtil" id="id7">GribUtil</a></li> <li><a class="reference internal" href="#module-MarsRetrieval" id="id8">MarsRetrieval</a></li> <li><a class="reference internal" href="#module-UioFiles" id="id9">UioFiles</a></li> </ul> @@ -206,24 +206,55 @@ <h2><a class="toc-backref" href="#id1">Porgrams</a><a class="headerlink" href="#porgrams" title="Permalink to this headline">¶</a></h2> <div class="section" id="module-install"> <span id="install"></span><h3><a class="toc-backref" href="#id2">install</a><a class="headerlink" href="#module-install" title="Permalink to this headline">¶</a></h3> +<p>This script installs the flex_extract program.</p> +<p>Depending on the selected installation environment (locally or on the +ECMWF server ecgate or cca) the program extracts the commandline +arguments and the CONTROL file parameter and prepares the corresponding +environment. +The necessary files are collected in a tar-ball and placed +at the target location. There its untared, the environment variables will +be set and the Fortran code will be compiled. +If the ECMWF environment is selected a job script is prepared and submitted +for the remaining configurations after putting the tar-ball to the +target ECMWF server.</p> +<p>Type: install.py –help +to get information about command line parameters. +Read the documentation for usage instructions.</p> <dl class="function"> -<dt id="install.delete_convert_build"> -<code class="descclassname">install.</code><code class="descname">delete_convert_build</code><span class="sig-paren">(</span><em>src_path</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/install.html#delete_convert_build"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.delete_convert_build" title="Permalink to this definition">¶</a></dt> +<dt id="install.check_install_conditions"> +<code class="descclassname">install.</code><code class="descname">check_install_conditions</code><span class="sig-paren">(</span><em>c</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/install.html#check_install_conditions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.check_install_conditions" title="Permalink to this definition">¶</a></dt> +<dd><p>Checks a couple of necessary attributes and conditions +for the installation such as if they exist and contain values. +Otherwise set default values.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and +command line.</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="function"> +<dt id="install.del_convert_build"> +<code class="descclassname">install.</code><code class="descname">del_convert_build</code><span class="sig-paren">(</span><em>src_path</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/install.html#del_convert_build"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.del_convert_build" title="Permalink to this definition">¶</a></dt> <dd><p>Clean up the Fortran source directory and remove all build files (e.g. *.o, *.mod and CONVERT2)</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>src_path</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – Path to the fortran source directory.</td> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>src_path</strong> (<em>str</em>) – Path to the fortran source directory.</td> </tr> </tbody> </table> </dd></dl> <dl class="function"> -<dt id="install.get_install_cmdline_arguments"> -<code class="descclassname">install.</code><code class="descname">get_install_cmdline_arguments</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/install.html#get_install_cmdline_arguments"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.get_install_cmdline_arguments" title="Permalink to this definition">¶</a></dt> +<dt id="install.get_install_cmdline_args"> +<code class="descclassname">install.</code><code class="descname">get_install_cmdline_args</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/install.html#get_install_cmdline_args"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.get_install_cmdline_args" title="Permalink to this definition">¶</a></dt> <dd><p>Decomposes the command line arguments and assigns them to variables. Apply default values for non mentioned arguments.</p> <table class="docutils field-list" frame="void" rules="none"> @@ -232,7 +263,7 @@ Apply default values for non mentioned arguments.</p> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><strong>args</strong> – Contains the commandline arguments from script/program call.</td> </tr> -<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Namespace</span></code></td> +<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">Namespace</td> </tr> </tbody> </table> @@ -248,7 +279,7 @@ install everything on the remote gate.</p> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>c</strong> (<a class="reference internal" href="#module-ControlFile" title="ControlFile"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ControlFile</span></code></a>) – Contains all the parameters of CONTROL file and +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and command line.</td> </tr> </tbody> @@ -263,16 +294,23 @@ if target is specified.</p> </dd></dl> <dl class="function"> -<dt id="install.make_convert_build"> -<code class="descclassname">install.</code><code class="descname">make_convert_build</code><span class="sig-paren">(</span><em>src_path</em>, <em>makefile</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/install.html#make_convert_build"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.make_convert_build" title="Permalink to this definition">¶</a></dt> -<dd><p>Compiles the Fortran code and generates the executable.</p> +<dt id="install.mk_compilejob"> +<code class="descclassname">install.</code><code class="descname">mk_compilejob</code><span class="sig-paren">(</span><em>makefile</em>, <em>target</em>, <em>ecuid</em>, <em>ecgid</em>, <em>fp_root</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/install.html#mk_compilejob"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.mk_compilejob" title="Permalink to this definition">¶</a></dt> +<dd><p>Modifies the original job template file so that it is specified +for the user and the environment were it will be applied. Result +is stored in a new file “job.temp” in the python directory.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>src_path</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – Path to the fortran source directory.</li> -<li><strong>makefile</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The name of the makefile which should be used.</li> +<li><strong>makefile</strong> (<em>str</em>) – Name of the makefile which should be used to compile FORTRAN +CONVERT2 program.</li> +<li><strong>target</strong> (<em>str</em>) – The target where the installation should be done, e.g. the queue.</li> +<li><strong>ecuid</strong> (<em>str</em>) – The user id on ECMWF server.</li> +<li><strong>ecgid</strong> (<em>str</em>) – The group id on ECMWF server.</li> +<li><strong>fp_root</strong> (<em>str</em>) – Path to the root directory of FLEXPART environment or flex_extract +environment.</li> </ul> </td> </tr> @@ -281,23 +319,16 @@ if target is specified.</p> </dd></dl> <dl class="function"> -<dt id="install.mk_compilejob"> -<code class="descclassname">install.</code><code class="descname">mk_compilejob</code><span class="sig-paren">(</span><em>makefile</em>, <em>target</em>, <em>ecuid</em>, <em>ecgid</em>, <em>fp_root</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/install.html#mk_compilejob"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.mk_compilejob" title="Permalink to this definition">¶</a></dt> -<dd><p>Modifies the original job template file so that it is specified -for the user and the environment were it will be applied. Result -is stored in a new file “job.temp” in the python directory.</p> +<dt id="install.mk_convert_build"> +<code class="descclassname">install.</code><code class="descname">mk_convert_build</code><span class="sig-paren">(</span><em>src_path</em>, <em>makefile</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/install.html#mk_convert_build"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.mk_convert_build" title="Permalink to this definition">¶</a></dt> +<dd><p>Compiles the Fortran code and generates the executable.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>makefile</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – Name of the makefile which should be used to compile FORTRAN -CONVERT2 program.</li> -<li><strong>target</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The target where the installation should be done, e.g. the queue.</li> -<li><strong>ecuid</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The user id on ECMWF server.</li> -<li><strong>ecgid</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The group id on ECMWF server.</li> -<li><strong>fp_root</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – Path to the root directory of FLEXPART environment or flex_extract -environment.</li> +<li><strong>src_path</strong> (<em>str</em>) – Path to the fortran source directory.</li> +<li><strong>makefile</strong> (<em>str</em>) – The name of the makefile which should be used.</li> </ul> </td> </tr> @@ -316,10 +347,10 @@ It is based on the template ECMWF_ENV.template.</p> <col class="field-body" /> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>ecuid</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The user id on ECMWF server.</li> -<li><strong>ecgid</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The group id on ECMWF server.</li> -<li><strong>gateway</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The gateway server the user is using.</li> -<li><strong>destination</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The remote destination which is used to transfer files +<li><strong>ecuid</strong> (<em>str</em>) – The user id on ECMWF server.</li> +<li><strong>ecgid</strong> (<em>str</em>) – The group id on ECMWF server.</li> +<li><strong>gateway</strong> (<em>str</em>) – The gateway server the user is using.</li> +<li><strong>destination</strong> (<em>str</em>) – The remote destination which is used to transfer files from ECMWF server to local gateway server.</li> </ul> </td> @@ -339,12 +370,12 @@ is stored in a new file.</p> <col class="field-body" /> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>ecuid</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The user id on ECMWF server.</li> -<li><strong>ecgid</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The group id on ECMWF server.</li> -<li><strong>gateway</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The gateway server the user is using.</li> -<li><strong>destination</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The remote destination which is used to transfer files +<li><strong>ecuid</strong> (<em>str</em>) – The user id on ECMWF server.</li> +<li><strong>ecgid</strong> (<em>str</em>) – The group id on ECMWF server.</li> +<li><strong>gateway</strong> (<em>str</em>) – The gateway server the user is using.</li> +<li><strong>destination</strong> (<em>str</em>) – The remote destination which is used to transfer files from ECMWF server to local gateway server.</li> -<li><strong>fp_root</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – Path to the root directory of FLEXPART environment or flex_extract +<li><strong>fp_root</strong> (<em>str</em>) – Path to the root directory of FLEXPART environment or flex_extract environment.</li> </ul> </td> @@ -367,9 +398,9 @@ template files.</p> <col class="field-body" /> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>tarball_path</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The complete path to the tar file which will contain all +<li><strong>tarball_path</strong> (<em>str</em>) – The complete path to the tar file which will contain all relevant data for flex_extract.</li> -<li><strong>target</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The queue where the job is submitted to.</li> +<li><strong>target</strong> (<em>str</em>) – The queue where the job is submitted to.</li> </ul> </td> </tr> @@ -385,7 +416,7 @@ relevant data for flex_extract.</li> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>tarball_path</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The complete path to the tar file which will contain all +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>tarball_path</strong> (<em>str</em>) – The complete path to the tar file which will contain all relevant data for flex_extract.</td> </tr> </tbody> @@ -395,6 +426,27 @@ relevant data for flex_extract.</td> </div> <div class="section" id="module-submit"> <span id="submit"></span><h3><a class="toc-backref" href="#id3">submit</a><a class="headerlink" href="#module-submit" title="Permalink to this headline">¶</a></h3> +<p>This script allows the user to extract meteorological fields from the ECMWF.</p> +<p>It prepares the settings for retrieving the data from ECMWF servers and +process the resulting files to prepare them for the use with FLEXPART or +FLEXTRA.</p> +<p>If it is supposed to work locally then it works through the necessary +functions get_mars_data and prepare_flexpart. Otherwise it prepares +a job script (korn shell) which will do the necessary work on the +ECMWF server. This script will de submitted via the ecaccess command +ecaccess-job-submit.</p> +<p>This file can also be imported as a module which then contains the following +functions:</p> +<blockquote> +<div><ul class="simple"> +<li>main - the main function of the script</li> +<li>submit - calls mk_jobscript depending on operation mode and submits its</li> +<li>mk_jobscript - creates the job script from a template</li> +</ul> +</div></blockquote> +<p>Type: submit.py –help +to get information about command line parameters. +Read the documentation for usage instructions.</p> <dl class="function"> <dt id="submit.main"> <code class="descclassname">submit.</code><code class="descname">main</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/submit.html#main"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submit.main" title="Permalink to this definition">¶</a></dt> @@ -404,23 +456,46 @@ is done “queue=None” or the gateway version with “queue=ecgate” or “queue=cca”.</p> </dd></dl> +<dl class="function"> +<dt id="submit.mk_jobscript"> +<code class="descclassname">submit.</code><code class="descname">mk_jobscript</code><span class="sig-paren">(</span><em>jtemplate</em>, <em>job_file</em>, <em>clist</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/submit.html#mk_jobscript"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submit.mk_jobscript" title="Permalink to this definition">¶</a></dt> +<dd><p>Creates the job script from template.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>jtemplate</strong> (<em>str</em>) – Job template file from sub-directory “_templates” for +submission to ECMWF. It contains all necessary +module and variable settings for the ECMWF environment as well as +the job call and mail report instructions. +Default is “job.temp”.</li> +<li><strong>job_file</strong> (<em>str</em>) – Path to the job script file.</li> +<li><strong>clist</strong> (<em>list of str</em>) – Contains all necessary parameters for ECMWF CONTROL file.</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + <dl class="function"> <dt id="submit.submit"> <code class="descclassname">submit.</code><code class="descname">submit</code><span class="sig-paren">(</span><em>jtemplate</em>, <em>c</em>, <em>queue</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/submit.html#submit"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submit.submit" title="Permalink to this definition">¶</a></dt> -<dd><p>Prepares the job script and submit it to the specified queue.</p> +<dd><p>Prepares the job script and submits it to the specified queue.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>jtemplate</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – Job template file from sub-directory “_templates” for +<li><strong>jtemplate</strong> (<em>str</em>) – Job template file from sub-directory “_templates” for submission to ECMWF. It contains all necessary module and variable settings for the ECMWF environment as well as the job call and mail report instructions. Default is “job.temp”.</li> -<li><strong>c</strong> (<a class="reference internal" href="#module-ControlFile" title="ControlFile"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ControlFile</span></code></a>) – Contains all the parameters of CONTROL file and +<li><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and command line.</li> -<li><strong>queue</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – Name of queue for submission to ECMWF (e.g. ecgate or cca )</li> +<li><strong>queue</strong> (<em>str</em>) – Name of queue for submission to ECMWF (e.g. ecgate or cca )</li> </ul> </td> </tr> @@ -438,367 +513,2064 @@ command line.</li> <dt id="ControlFile.ControlFile"> <em class="property">class </em><code class="descclassname">ControlFile.</code><code class="descname">ControlFile</code><span class="sig-paren">(</span><em>filename</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ControlFile.html#ControlFile"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#ControlFile.ControlFile" title="Permalink to this definition">¶</a></dt> <dd><p>Contains the information which are stored in the CONTROL files.</p> -<dl class="method"> -<dt id="ControlFile.ControlFile.assign_args_to_control"> -<code class="descname">assign_args_to_control</code><span class="sig-paren">(</span><em>args</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ControlFile.html#ControlFile.assign_args_to_control"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#ControlFile.ControlFile.assign_args_to_control" title="Permalink to this definition">¶</a></dt> -<dd><p>Overwrites the existing ControlFile instance attributes with -the command line arguments.</p> +<p>The CONTROL file is the steering part of the FLEXPART extraction +software. All necessary parameters needed to retrieve the data fields +from the MARS archive for driving FLEXPART are set in a CONTROL file. +Some specific parameters like the start and end dates can be overwritten +by the command line parameters, but in generel all parameters needed +for a complete set of fields for FLEXPART can be set in the CONTROL file.</p> +<dl class="attribute"> +<dt id="ControlFile.ControlFile.controlfile"> +<code class="descname">controlfile</code><a class="headerlink" href="#ControlFile.ControlFile.controlfile" title="Permalink to this definition">¶</a></dt> +<dd><p>The name of the control file to be processed. Default value is the +filename passed to the init function when initialised.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>args</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">Namespace</span></code>) – Contains the commandline arguments from script/program call.</td> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> </tr> </tbody> </table> </dd></dl> -<dl class="method"> -<dt id="ControlFile.ControlFile.assign_envs_to_control"> -<code class="descname">assign_envs_to_control</code><span class="sig-paren">(</span><em>envs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ControlFile.html#ControlFile.assign_envs_to_control"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#ControlFile.ControlFile.assign_envs_to_control" title="Permalink to this definition">¶</a></dt> -<dd><p>Assigns the ECMWF environment parameter.</p> +<dl class="attribute"> +<dt id="ControlFile.ControlFile.start_date"> +<code class="descname">start_date</code><a class="headerlink" href="#ControlFile.ControlFile.start_date" title="Permalink to this definition">¶</a></dt> +<dd><p>The first day of the retrieval period. Default value is None.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>envs</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">dictionary</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">strings</span></code>) – Contains the ECMWF environment parameternames “ECUID”, “ECGID”, -“DESTINATION” and “GATEWAY” with its corresponding values. -They were read from the file “ECMWF_ENV”.</td> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> </tr> </tbody> </table> </dd></dl> -<dl class="method"> -<dt id="ControlFile.ControlFile.check_conditions"> -<code class="descname">check_conditions</code><span class="sig-paren">(</span><em>queue</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ControlFile.html#ControlFile.check_conditions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#ControlFile.ControlFile.check_conditions" title="Permalink to this definition">¶</a></dt> -<dd><p>Checks a couple of necessary attributes and conditions, -such as if they exist and contain values. -Otherwise set default values.</p> +<dl class="attribute"> +<dt id="ControlFile.ControlFile.end_date"> +<code class="descname">end_date</code><a class="headerlink" href="#ControlFile.ControlFile.end_date" title="Permalink to this definition">¶</a></dt> +<dd><p>The last day of the retrieval period. Default value is None.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>queue</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – Name of the queue if submitted to the ECMWF servers. -Used to check if ecuid, ecgid, gateway and destination -are set correctly and are not empty.</td> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> </tr> </tbody> </table> </dd></dl> -<dl class="method"> -<dt id="ControlFile.ControlFile.check_install_conditions"> -<code class="descname">check_install_conditions</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/ControlFile.html#ControlFile.check_install_conditions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#ControlFile.ControlFile.check_install_conditions" title="Permalink to this definition">¶</a></dt> -<dd><p>Checks a couple of necessary attributes and conditions -for the installation such as if they exist and contain values. -Otherwise set default values.</p> +<dl class="attribute"> +<dt id="ControlFile.ControlFile.date_chunk"> +<code class="descname">date_chunk</code><a class="headerlink" href="#ControlFile.ControlFile.date_chunk" title="Permalink to this definition">¶</a></dt> +<dd><p>Length of period for a single mars retrieval. Default value is 3.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> +</tr> +</tbody> +</table> </dd></dl> -<dl class="method"> -<dt id="ControlFile.ControlFile.to_list"> -<code class="descname">to_list</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/ControlFile.html#ControlFile.to_list"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#ControlFile.ControlFile.to_list" title="Permalink to this definition">¶</a></dt> -<dd><p>Just generates a list of strings containing the attributes and -assigned values except the attributes “_expanded”, “exedir”, -“ecmwfdatadir” and “flexpart_root_scripts”.</p> +<dl class="attribute"> +<dt id="ControlFile.ControlFile.dtime"> +<code class="descname">dtime</code><a class="headerlink" href="#ControlFile.ControlFile.dtime" title="Permalink to this definition">¶</a></dt> +<dd><p>The time step in hours. Default value is None.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><strong>l</strong> – A sorted list of the all ControlFile class attributes with -their values except the attributes “_expanded”, “exedir”, -“ecmwfdatadir” and “flexpart_root_scripts”.</td> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> </tr> -<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code></td> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.basetime"> +<code class="descname">basetime</code><a class="headerlink" href="#ControlFile.ControlFile.basetime" title="Permalink to this definition">¶</a></dt> +<dd><p>The time for a half day retrieval. The 12 hours upfront are to be +retrieved. Default value is None.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> </tr> </tbody> </table> </dd></dl> +<dl class="attribute"> +<dt id="ControlFile.ControlFile.maxstep"> +<code class="descname">maxstep</code><a class="headerlink" href="#ControlFile.ControlFile.maxstep" title="Permalink to this definition">¶</a></dt> +<dd><p>The maximum forecast step for non flux data. Default value is None.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> +</tr> +</tbody> +</table> </dd></dl> -</div> -<div class="section" id="module-EcFlexpart"> -<span id="ecflexpart"></span><h3><a class="toc-backref" href="#id6">EcFlexpart</a><a class="headerlink" href="#module-EcFlexpart" title="Permalink to this headline">¶</a></h3> -<dl class="class"> -<dt id="EcFlexpart.EcFlexpart"> -<em class="property">class </em><code class="descclassname">EcFlexpart.</code><code class="descname">EcFlexpart</code><span class="sig-paren">(</span><em>c</em>, <em>fluxes=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/EcFlexpart.html#EcFlexpart"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart" title="Permalink to this definition">¶</a></dt> -<dd><p>Class to retrieve FLEXPART specific ECMWF data.</p> -<dl class="method"> -<dt id="EcFlexpart.EcFlexpart.create"> -<code class="descname">create</code><span class="sig-paren">(</span><em>inputfiles</em>, <em>c</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/EcFlexpart.html#EcFlexpart.create"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart.create" title="Permalink to this definition">¶</a></dt> -<dd><p>An index file will be created which depends on the combination -of “date”, “time” and “stepRange” values. This is used to iterate -over all messages in each grib file which were passed through the -parameter “inputfiles” to seperate specific parameters into fort.* -files. Afterwards the FORTRAN program is called to convert -the data fields all to the same grid and put them in one file -per unique time step (combination of “date”, “time” and -“stepRange”).</p> -<div class="admonition note"> -<p class="first admonition-title">Note</p> -<p class="last">This method is based on the ECMWF example index.py -<a class="reference external" href="https://software.ecmwf.int/wiki/display/GRIB/index.py">https://software.ecmwf.int/wiki/display/GRIB/index.py</a></p> -</div> +<dl class="attribute"> +<dt id="ControlFile.ControlFile.type"> +<code class="descname">type</code><a class="headerlink" href="#ControlFile.ControlFile.type" title="Permalink to this definition">¶</a></dt> +<dd><p>List of field type per retrieving hour. Default value is None.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>inputfiles</strong> (<a class="reference internal" href="#module-UioFiles" title="UioFiles"><code class="xref py py-obj docutils literal notranslate"><span class="pre">UioFiles</span></code></a>) – Contains a list of files.</li> -<li><strong>c</strong> (<a class="reference internal" href="#module-ControlFile" title="ControlFile"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ControlFile</span></code></a>) – Contains all the parameters of CONTROL file and -command line.</li> -</ul> -</td> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">list of str</td> </tr> </tbody> </table> </dd></dl> -<dl class="method"> -<dt id="EcFlexpart.EcFlexpart.deacc_fluxes"> -<code class="descname">deacc_fluxes</code><span class="sig-paren">(</span><em>inputfiles</em>, <em>c</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/EcFlexpart.html#EcFlexpart.deacc_fluxes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart.deacc_fluxes" title="Permalink to this definition">¶</a></dt> -<dd><p>Goes through all flux fields in ordered time and de-accumulate -the fields. Afterwards the fields are disaggregated in time. -Different versions of disaggregation is provided for rainfall -data (darain, modified linear) and the surface fluxes and -stress data (dapoly, cubic polynomial).</p> +<dl class="attribute"> +<dt id="ControlFile.ControlFile.time"> +<code class="descname">time</code><a class="headerlink" href="#ControlFile.ControlFile.time" title="Permalink to this definition">¶</a></dt> +<dd><p>List of retrieving times in hours. Default valuer is None.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>inputfiles</strong> (<a class="reference internal" href="#module-UioFiles" title="UioFiles"><code class="xref py py-obj docutils literal notranslate"><span class="pre">UioFiles</span></code></a>) – Contains a list of files.</li> -<li><strong>c</strong> (<a class="reference internal" href="#module-ControlFile" title="ControlFile"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ControlFile</span></code></a>) – Contains all the parameters of CONTROL file and -command line.</li> -</ul> -</td> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">list of str</td> </tr> </tbody> </table> </dd></dl> -<dl class="method"> -<dt id="EcFlexpart.EcFlexpart.prepare_fp_files"> -<code class="descname">prepare_fp_files</code><span class="sig-paren">(</span><em>c</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/EcFlexpart.html#EcFlexpart.prepare_fp_files"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart.prepare_fp_files" title="Permalink to this definition">¶</a></dt> -<dd><p>Conversion of GRIB files to FLEXPART binary format.</p> +<dl class="attribute"> +<dt id="ControlFile.ControlFile.step"> +<code class="descname">step</code><a class="headerlink" href="#ControlFile.ControlFile.step" title="Permalink to this definition">¶</a></dt> +<dd><p>List of forecast time steps in hours for non flux data. +Default value is None.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>c</strong> (<a class="reference internal" href="#module-ControlFile" title="ControlFile"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ControlFile</span></code></a>) – Contains all the parameters of CONTROL file and -command line.</td> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">list of str or str</td> </tr> </tbody> </table> </dd></dl> -<dl class="method"> -<dt id="EcFlexpart.EcFlexpart.process_output"> -<code class="descname">process_output</code><span class="sig-paren">(</span><em>c</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/EcFlexpart.html#EcFlexpart.process_output"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart.process_output" title="Permalink to this definition">¶</a></dt> -<dd><p>The grib files are postprocessed depending on the selection in -CONTROL file. The resulting files are moved to the output -directory if its not equal to the input directory. -The following modifications might be done if -properly switched in CONTROL file: -GRIB2 - Conversion to GRIB2 -ECTRANS - Transfer of files to gateway server -ECSTORAGE - Storage at ECMWF server</p> +<dl class="attribute"> +<dt id="ControlFile.ControlFile.acctype"> +<code class="descname">acctype</code><a class="headerlink" href="#ControlFile.ControlFile.acctype" title="Permalink to this definition">¶</a></dt> +<dd><p>The field type for the accumulated forecast fields. +Default value is None.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>c</strong> (<a class="reference internal" href="#module-ControlFile" title="ControlFile"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ControlFile</span></code></a>) – Contains all the parameters of CONTROL file and -command line.</td> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> </tr> </tbody> </table> </dd></dl> -<dl class="method"> -<dt id="EcFlexpart.EcFlexpart.retrieve"> -<code class="descname">retrieve</code><span class="sig-paren">(</span><em>server</em>, <em>dates</em>, <em>public</em>, <em>request</em>, <em>inputdir='.'</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/EcFlexpart.html#EcFlexpart.retrieve"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart.retrieve" title="Permalink to this definition">¶</a></dt> -<dd><p>Finalizing the retrieval information by setting final details -depending on grid type. -Prepares MARS retrievals per grid type and submits them.</p> +<dl class="attribute"> +<dt id="ControlFile.ControlFile.acctime"> +<code class="descname">acctime</code><a class="headerlink" href="#ControlFile.ControlFile.acctime" title="Permalink to this definition">¶</a></dt> +<dd><p>The starting time of the accumulated forecasts. Default value is None.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>server</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">ECMWFService</span></code> or <code class="xref py py-obj docutils literal notranslate"><span class="pre">ECMWFDataServer</span></code>) – The connection to the ECMWF server. This is different -for member state users which have full access and non -member state users which have only access to the public -data sets. The decision is made from command line argument -“public”; for public access its True (ECMWFDataServer) -for member state users its False (ECMWFService)</li> -<li><strong>dates</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – Contains start and end date of the retrieval in the format -“YYYYMMDD/to/YYYYMMDD”</li> -<li><strong>request</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">integer</span></code>) – Selects the mode of retrieval. -0: Retrieves the data from ECMWF. -1: Prints the mars requests to an output file. -2: Retrieves the data and prints the mars request.</li> -<li><strong>inputdir</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – Path to the directory where the retrieved data is about -to be stored. The default is the current directory (‘.’).</li> -</ul> -</td> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> </tr> </tbody> </table> </dd></dl> -<dl class="method"> -<dt id="EcFlexpart.EcFlexpart.write_namelist"> -<code class="descname">write_namelist</code><span class="sig-paren">(</span><em>c</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/EcFlexpart.html#EcFlexpart.write_namelist"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart.write_namelist" title="Permalink to this definition">¶</a></dt> -<dd><p>Creates a namelist file in the temporary directory and writes -the following values to it: maxl, maxb, mlevel, -mlevelist, mnauf, metapar, rlo0, rlo1, rla0, rla1, -momega, momegadiff, mgauss, msmooth, meta, metadiff, mdpdeta</p> +<dl class="attribute"> +<dt id="ControlFile.ControlFile.accmaxstep"> +<code class="descname">accmaxstep</code><a class="headerlink" href="#ControlFile.ControlFile.accmaxstep" title="Permalink to this definition">¶</a></dt> +<dd><p>The maximum forecast step for the accumulated forecast fields +(flux data). Default value is None.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.marsclass"> +<code class="descname">marsclass</code><a class="headerlink" href="#ControlFile.ControlFile.marsclass" title="Permalink to this definition">¶</a></dt> +<dd><p>Characterisation of dataset. Default value is None.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.dataset"> +<code class="descname">dataset</code><a class="headerlink" href="#ControlFile.ControlFile.dataset" title="Permalink to this definition">¶</a></dt> +<dd><p>For public datasets there is the specific naming and parameter +dataset which has to be used to characterize the type of +data. Default value is None.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.stream"> +<code class="descname">stream</code><a class="headerlink" href="#ControlFile.ControlFile.stream" title="Permalink to this definition">¶</a></dt> +<dd><p>Identifies the forecasting system used to generate the data. +Default value is None.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.number"> +<code class="descname">number</code><a class="headerlink" href="#ControlFile.ControlFile.number" title="Permalink to this definition">¶</a></dt> +<dd><p>Selects the member in ensemble forecast run. Default value is ‘OFF’.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.expver"> +<code class="descname">expver</code><a class="headerlink" href="#ControlFile.ControlFile.expver" title="Permalink to this definition">¶</a></dt> +<dd><p>The version number of the dataset. Default value is ‘1’.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.gaussian"> +<code class="descname">gaussian</code><a class="headerlink" href="#ControlFile.ControlFile.gaussian" title="Permalink to this definition">¶</a></dt> +<dd><p>This parameter is deprecated and should no longer be used. +Specifies the desired type of Gaussian grid for the output. +Default value is an empty string ‘’.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.grid"> +<code class="descname">grid</code><a class="headerlink" href="#ControlFile.ControlFile.grid" title="Permalink to this definition">¶</a></dt> +<dd><p>Specifies the output grid which can be either a Gaussian grid +or a Latitude/Longitude grid. Default value is None.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.area"> +<code class="descname">area</code><a class="headerlink" href="#ControlFile.ControlFile.area" title="Permalink to this definition">¶</a></dt> +<dd><p>Specifies the desired sub-area of data to be extracted. +Default value is None.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.left"> +<code class="descname">left</code><a class="headerlink" href="#ControlFile.ControlFile.left" title="Permalink to this definition">¶</a></dt> +<dd><p>The western most longitude of the area to be extracted. +Default value is None.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.lower"> +<code class="descname">lower</code><a class="headerlink" href="#ControlFile.ControlFile.lower" title="Permalink to this definition">¶</a></dt> +<dd><p>The southern most latitude of the area to be extracted. +Default value is None.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.upper"> +<code class="descname">upper</code><a class="headerlink" href="#ControlFile.ControlFile.upper" title="Permalink to this definition">¶</a></dt> +<dd><p>The northern most latitued of the area to be extracted. +Default value is None.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.right"> +<code class="descname">right</code><a class="headerlink" href="#ControlFile.ControlFile.right" title="Permalink to this definition">¶</a></dt> +<dd><p>The eastern most longitude of the area to be extracted. +Default value is None.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.level"> +<code class="descname">level</code><a class="headerlink" href="#ControlFile.ControlFile.level" title="Permalink to this definition">¶</a></dt> +<dd><p>Specifies the maximum level. Default value is None.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.levelist"> +<code class="descname">levelist</code><a class="headerlink" href="#ControlFile.ControlFile.levelist" title="Permalink to this definition">¶</a></dt> +<dd><p>Specifies the required level list. Default value is None.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.resol"> +<code class="descname">resol</code><a class="headerlink" href="#ControlFile.ControlFile.resol" title="Permalink to this definition">¶</a></dt> +<dd><p>Specifies the desired triangular truncation of retrieved data, +before carrying out any other selected post-processing. +Default value is None.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.gauss"> +<code class="descname">gauss</code><a class="headerlink" href="#ControlFile.ControlFile.gauss" title="Permalink to this definition">¶</a></dt> +<dd><p>Switch to select gaussian fields (1) or regular lat/lon (0). +Default value is 0.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.accuracy"> +<code class="descname">accuracy</code><a class="headerlink" href="#ControlFile.ControlFile.accuracy" title="Permalink to this definition">¶</a></dt> +<dd><p>Specifies the number of bits per value to be used in the +generated GRIB coded fields. Default value is 24.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.omega"> +<code class="descname">omega</code><a class="headerlink" href="#ControlFile.ControlFile.omega" title="Permalink to this definition">¶</a></dt> +<dd><p>Switch to select omega retrieval (1) or not (0). Default value is 0.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.omegadiff"> +<code class="descname">omegadiff</code><a class="headerlink" href="#ControlFile.ControlFile.omegadiff" title="Permalink to this definition">¶</a></dt> +<dd><p>Switch to decide to calculate Omega and Dps/Dt from continuity +equation for diagnostic purposes (1) or not (0). Default value is 0.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.eta"> +<code class="descname">eta</code><a class="headerlink" href="#ControlFile.ControlFile.eta" title="Permalink to this definition">¶</a></dt> +<dd><p>Switch to select direct retrieval of etadot from MARS (1) or +wether it has to be calculated (0). Then Default value is 0.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.etadiff"> +<code class="descname">etadiff</code><a class="headerlink" href="#ControlFile.ControlFile.etadiff" title="Permalink to this definition">¶</a></dt> +<dd><p>Switch to select calculation of etadot and Dps/Dt from continuity +equation for diagnostic purposes (1) or not (0). Default value is 0.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.etapar"> +<code class="descname">etapar</code><a class="headerlink" href="#ControlFile.ControlFile.etapar" title="Permalink to this definition">¶</a></dt> +<dd><p>GRIB parameter Id for etadot fields. Default value is 77.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.dpdeta"> +<code class="descname">dpdeta</code><a class="headerlink" href="#ControlFile.ControlFile.dpdeta" title="Permalink to this definition">¶</a></dt> +<dd><p>Switch to select multiplication of etadot with dpdeta. +Default value is 1.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.smooth"> +<code class="descname">smooth</code><a class="headerlink" href="#ControlFile.ControlFile.smooth" title="Permalink to this definition">¶</a></dt> +<dd><p>Spectral truncation of ETADOT after calculation on Gaussian grid. +Default value is 0.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.format"> +<code class="descname">format</code><a class="headerlink" href="#ControlFile.ControlFile.format" title="Permalink to this definition">¶</a></dt> +<dd><p>The format of the GRIB data. Default value is ‘GRIB1’.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.addpar"> +<code class="descname">addpar</code><a class="headerlink" href="#ControlFile.ControlFile.addpar" title="Permalink to this definition">¶</a></dt> +<dd><p>List of additional surface level ECMWF parameter to be retrieved. +Default value is None.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.prefix"> +<code class="descname">prefix</code><a class="headerlink" href="#ControlFile.ControlFile.prefix" title="Permalink to this definition">¶</a></dt> +<dd><p>Prefix string for the final FLEXPART/FLEXTRA ready input files. +Default value is ‘EN’.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.cwc"> +<code class="descname">cwc</code><a class="headerlink" href="#ControlFile.ControlFile.cwc" title="Permalink to this definition">¶</a></dt> +<dd><p>Switch to select wether the sum of cloud liquid water content and +cloud ice water content should be retrieved. Default value is 0.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.wrf"> +<code class="descname">wrf</code><a class="headerlink" href="#ControlFile.ControlFile.wrf" title="Permalink to this definition">¶</a></dt> +<dd><p>Switch to select further parameters for retrievment to support +WRF simulations. Default value is 0.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.ecfsdir"> +<code class="descname">ecfsdir</code><a class="headerlink" href="#ControlFile.ControlFile.ecfsdir" title="Permalink to this definition">¶</a></dt> +<dd><p>Path to the ECMWF storage ‘ectmp:/${USER}/econdemand/’</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.mailfail"> +<code class="descname">mailfail</code><a class="headerlink" href="#ControlFile.ControlFile.mailfail" title="Permalink to this definition">¶</a></dt> +<dd><p>Email list for sending error log files from ECMWF servers. +The email addresses should be seperated by a comma. +Default value is [‘${USER}’].</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">list of str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.mailops"> +<code class="descname">mailops</code><a class="headerlink" href="#ControlFile.ControlFile.mailops" title="Permalink to this definition">¶</a></dt> +<dd><p>Email list for sending operational log files from ECMWF servers. +The email addresses should be seperated by a comma. +Default value is [‘${USER}’].</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">list of str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.grib2flexpart"> +<code class="descname">grib2flexpart</code><a class="headerlink" href="#ControlFile.ControlFile.grib2flexpart" title="Permalink to this definition">¶</a></dt> +<dd><p>Switch to select generation of preprocessed FLEXPART files “.fp”. +If it is selected, the program grib2flexpart will try +to convert the flex_extract output files into “.fp” format.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int 0</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.ecstorage"> +<code class="descname">ecstorage</code><a class="headerlink" href="#ControlFile.ControlFile.ecstorage" title="Permalink to this definition">¶</a></dt> +<dd><p>Switch to select storage of FLEXPART ready output files +in the ECFS file system. Default value is 0.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.ectrans"> +<code class="descname">ectrans</code><a class="headerlink" href="#ControlFile.ControlFile.ectrans" title="Permalink to this definition">¶</a></dt> +<dd><p>Switch to select the transfer of FLEXPART ready output files +to the gateway server. Default value is 0.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.inputdir"> +<code class="descname">inputdir</code><a class="headerlink" href="#ControlFile.ControlFile.inputdir" title="Permalink to this definition">¶</a></dt> +<dd><p>Path to the temporary directory for the retrieval grib files and +other processing files. Default value is _config.PATH_INPUT_DIR.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.outputdir"> +<code class="descname">outputdir</code><a class="headerlink" href="#ControlFile.ControlFile.outputdir" title="Permalink to this definition">¶</a></dt> +<dd><p>Path to the final directory where the final FLEXPART ready input +files are stored. Default value is None.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.flexextractdir"> +<code class="descname">flexextractdir</code><a class="headerlink" href="#ControlFile.ControlFile.flexextractdir" title="Permalink to this definition">¶</a></dt> +<dd><p>Path to the flex_extract root directory. Default value is +_config.PATH_FLEXEXTRACT_DIR.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.exedir"> +<code class="descname">exedir</code><a class="headerlink" href="#ControlFile.ControlFile.exedir" title="Permalink to this definition">¶</a></dt> +<dd><p>Path to the FORTRAN executable file. Default value is +_config.PATH_FORTRAN_SRC.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.flexpartdir"> +<code class="descname">flexpartdir</code><a class="headerlink" href="#ControlFile.ControlFile.flexpartdir" title="Permalink to this definition">¶</a></dt> +<dd><p>Path to a FLEXPART root directory. Default value is None.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.makefile"> +<code class="descname">makefile</code><a class="headerlink" href="#ControlFile.ControlFile.makefile" title="Permalink to this definition">¶</a></dt> +<dd><p>Name of the makefile to be used for the Fortran program. +Default value is ‘Makefile.gfortran’.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.destination"> +<code class="descname">destination</code><a class="headerlink" href="#ControlFile.ControlFile.destination" title="Permalink to this definition">¶</a></dt> +<dd><p>The remote destination which is used to transfer files +from ECMWF server to local gateway server. Default value is None.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.gateway"> +<code class="descname">gateway</code><a class="headerlink" href="#ControlFile.ControlFile.gateway" title="Permalink to this definition">¶</a></dt> +<dd><p>The gateway server the user is using. Default value is None.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.ecuid"> +<code class="descname">ecuid</code><a class="headerlink" href="#ControlFile.ControlFile.ecuid" title="Permalink to this definition">¶</a></dt> +<dd><p>The user id on ECMWF server. Default value is None.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.ecgid"> +<code class="descname">ecgid</code><a class="headerlink" href="#ControlFile.ControlFile.ecgid" title="Permalink to this definition">¶</a></dt> +<dd><p>The group id on ECMWF server. Default value is None.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.install_target"> +<code class="descname">install_target</code><a class="headerlink" href="#ControlFile.ControlFile.install_target" title="Permalink to this definition">¶</a></dt> +<dd><p>Defines the location where the installation is to be done. +Default value is None.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.debug"> +<code class="descname">debug</code><a class="headerlink" href="#ControlFile.ControlFile.debug" title="Permalink to this definition">¶</a></dt> +<dd><p>Switch to keep temporary files at the end of postprocessing (1) or +to delete all temporary files except the final output files (0). +Default value is 0.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.request"> +<code class="descname">request</code><a class="headerlink" href="#ControlFile.ControlFile.request" title="Permalink to this definition">¶</a></dt> +<dd><p>Switch to select between just retrieving the data (0), writing the mars +parameter values to a csv file (1) or doing both (2). +Default value is 0.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.public"> +<code class="descname">public</code><a class="headerlink" href="#ControlFile.ControlFile.public" title="Permalink to this definition">¶</a></dt> +<dd><p>Switch to select kind of ECMWF Web Api access and the +possible data sets. Public data sets (1) and Memberstate data sets (0). +Default value is 0.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.ecapi"> +<code class="descname">ecapi</code><a class="headerlink" href="#ControlFile.ControlFile.ecapi" title="Permalink to this definition">¶</a></dt> +<dd><p>Tells wether the ECMWF Web APi was able to load or not. +Default value is None.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">boolean</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.purefc"> +<code class="descname">purefc</code><a class="headerlink" href="#ControlFile.ControlFile.purefc" title="Permalink to this definition">¶</a></dt> +<dd><p>Switch to decide wether the job is a pure forecast retrieval or +coupled with analysis data. Default value is 0.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.rrint"> +<code class="descname">rrint</code><a class="headerlink" href="#ControlFile.ControlFile.rrint" title="Permalink to this definition">¶</a></dt> +<dd><p>Switch to select between old precipitation disaggregation method (0) +or the new IA3 disaggegration method (1). Default value is 0.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="ControlFile.ControlFile.logicals"> +<code class="descname">logicals</code><a class="headerlink" href="#ControlFile.ControlFile.logicals" title="Permalink to this definition">¶</a></dt> +<dd><p>List of the names of logical switches which controls the flow +of the program. Default list is [‘gauss’, ‘omega’, ‘omegadiff’, ‘eta’, +‘etadiff’, ‘dpdeta’, ‘cwc’, ‘wrf’, ‘grib2flexpart’, ‘ecstorage’, +‘ectrans’, ‘debug’, ‘request’, ‘public’, ‘purefc’, ‘rrint’]</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">list of str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="ControlFile.ControlFile.assign_args_to_control"> +<code class="descname">assign_args_to_control</code><span class="sig-paren">(</span><em>args</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ControlFile.html#ControlFile.assign_args_to_control"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#ControlFile.ControlFile.assign_args_to_control" title="Permalink to this definition">¶</a></dt> +<dd><p>Overwrites the existing ControlFile instance attributes with +the command line arguments.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>args</strong> (<em>Namespace</em>) – Contains the commandline arguments from script/program call.</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="ControlFile.ControlFile.assign_envs_to_control"> +<code class="descname">assign_envs_to_control</code><span class="sig-paren">(</span><em>envs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ControlFile.html#ControlFile.assign_envs_to_control"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#ControlFile.ControlFile.assign_envs_to_control" title="Permalink to this definition">¶</a></dt> +<dd><p>Assigns the ECMWF environment parameter.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>envs</strong> (<em>dict of str</em>) – Contains the ECMWF environment parameternames “ECUID”, “ECGID”, +“DESTINATION” and “GATEWAY” with its corresponding values. +They were read from the file “ECMWF_ENV”.</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="ControlFile.ControlFile.check_conditions"> +<code class="descname">check_conditions</code><span class="sig-paren">(</span><em>queue</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ControlFile.html#ControlFile.check_conditions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#ControlFile.ControlFile.check_conditions" title="Permalink to this definition">¶</a></dt> +<dd><p>Checks a couple of necessary attributes and conditions, +such as if they exist and contain values. +Otherwise set default values.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>queue</strong> (<em>str</em>) – Name of the queue if submitted to the ECMWF servers. +Used to check if ecuid, ecgid, gateway and destination +are set correctly and are not empty.</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="ControlFile.ControlFile.to_list"> +<code class="descname">to_list</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/ControlFile.html#ControlFile.to_list"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#ControlFile.ControlFile.to_list" title="Permalink to this definition">¶</a></dt> +<dd><p>Just generates a list of strings containing the attributes and +assigned values except the attributes “_expanded”, “exedir”, +“flexextractdir” and “flexpartdir”.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><strong>l</strong> – A sorted list of the all ControlFile class attributes with +their values except the attributes “_expanded”, “exedir”, +“flexextractdir” and “flexpartdir”.</td> +</tr> +<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">list of *</td> +</tr> +</tbody> +</table> +</dd></dl> + +</dd></dl> + +</div> +<div class="section" id="module-EcFlexpart"> +<span id="ecflexpart"></span><h3><a class="toc-backref" href="#id6">EcFlexpart</a><a class="headerlink" href="#module-EcFlexpart" title="Permalink to this headline">¶</a></h3> +<dl class="class"> +<dt id="EcFlexpart.EcFlexpart"> +<em class="property">class </em><code class="descclassname">EcFlexpart.</code><code class="descname">EcFlexpart</code><span class="sig-paren">(</span><em>c</em>, <em>fluxes=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/EcFlexpart.html#EcFlexpart"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart" title="Permalink to this definition">¶</a></dt> +<dd><p>Class to represent FLEXPART specific ECMWF data.</p> +<p>FLEXPART needs grib files in a specifc format. All necessary data fields +for one time step are stored in a single file. The class represents an +instance with all the parameter and settings necessary for retrieving +MARS data and modifing them so they are fitting FLEXPART needs. The class +is able to disaggregate the fluxes and convert grid types to the one needed +by FLEXPART, therefore using the FORTRAN program.</p> +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.mreq_count"> +<code class="descname">mreq_count</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.mreq_count" title="Permalink to this definition">¶</a></dt> +<dd><p>Counter for the number of generated mars requests.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.inputdir"> +<code class="descname">inputdir</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.inputdir" title="Permalink to this definition">¶</a></dt> +<dd><p>Path to the directory where the retrieved data is stored.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.dataset"> +<code class="descname">dataset</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.dataset" title="Permalink to this definition">¶</a></dt> +<dd><p>For public datasets there is the specific naming and parameter +dataset which has to be used to characterize the type of +data.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.basetime"> +<code class="descname">basetime</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.basetime" title="Permalink to this definition">¶</a></dt> +<dd><p>The time for a half day retrieval. The 12 hours upfront are to be +retrieved.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.dtime"> +<code class="descname">dtime</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.dtime" title="Permalink to this definition">¶</a></dt> +<dd><p>Time step in hours.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.acctype"> +<code class="descname">acctype</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.acctype" title="Permalink to this definition">¶</a></dt> +<dd><p>The field type for the accumulated forecast fields.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.acctime"> +<code class="descname">acctime</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.acctime" title="Permalink to this definition">¶</a></dt> +<dd><p>The starting time from the accumulated forecasts.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.accmaxstep"> +<code class="descname">accmaxstep</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.accmaxstep" title="Permalink to this definition">¶</a></dt> +<dd><p>The maximum forecast step for the accumulated forecast fields.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.marsclass"> +<code class="descname">marsclass</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.marsclass" title="Permalink to this definition">¶</a></dt> +<dd><p>Characterisation of dataset.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.stream"> +<code class="descname">stream</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.stream" title="Permalink to this definition">¶</a></dt> +<dd><p>Identifies the forecasting system used to generate the data.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.number"> +<code class="descname">number</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.number" title="Permalink to this definition">¶</a></dt> +<dd><p>Selects the member in ensemble forecast run.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.resol"> +<code class="descname">resol</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.resol" title="Permalink to this definition">¶</a></dt> +<dd><p>Specifies the desired triangular truncation of retrieved data, +before carrying out any other selected post-processing.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.accuracy"> +<code class="descname">accuracy</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.accuracy" title="Permalink to this definition">¶</a></dt> +<dd><p>Specifies the number of bits per value to be used in the +generated GRIB coded fields.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.addpar"> +<code class="descname">addpar</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.addpar" title="Permalink to this definition">¶</a></dt> +<dd><p>List of additional parameters to be retrieved.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.level"> +<code class="descname">level</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.level" title="Permalink to this definition">¶</a></dt> +<dd><p>Specifies the maximum level.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.expver"> +<code class="descname">expver</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.expver" title="Permalink to this definition">¶</a></dt> +<dd><p>The version of the dataset.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.levelist"> +<code class="descname">levelist</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.levelist" title="Permalink to this definition">¶</a></dt> +<dd><p>Specifies the required levels.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.glevelist"> +<code class="descname">glevelist</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.glevelist" title="Permalink to this definition">¶</a></dt> +<dd><p>Specifies the required levels for gaussian grids.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.gaussian"> +<code class="descname">gaussian</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.gaussian" title="Permalink to this definition">¶</a></dt> +<dd><p>This parameter is deprecated and should no longer be used. +Specifies the desired type of Gaussian grid for the output.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.grid"> +<code class="descname">grid</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.grid" title="Permalink to this definition">¶</a></dt> +<dd><p>Specifies the output grid which can be either a Gaussian grid +or a Latitude/Longitude grid.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.area"> +<code class="descname">area</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.area" title="Permalink to this definition">¶</a></dt> +<dd><p>Specifies the desired sub-area of data to be extracted.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.purefc"> +<code class="descname">purefc</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.purefc" title="Permalink to this definition">¶</a></dt> +<dd><p>Switch for definition of pure forecast mode or not.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.outputfilelist"> +<code class="descname">outputfilelist</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.outputfilelist" title="Permalink to this definition">¶</a></dt> +<dd><p>The final list of FLEXPART ready input files.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">list of str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.types"> +<code class="descname">types</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.types" title="Permalink to this definition">¶</a></dt> +<dd><p>Determines the combination of type of fields, time and forecast step +to be retrieved.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">dictionary</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.params"> +<code class="descname">params</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.params" title="Permalink to this definition">¶</a></dt> +<dd><p>Collection of grid types and their corresponding parameters, +levels, level types and the grid definition.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">dictionary</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.server"> +<code class="descname">server</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.server" title="Permalink to this definition">¶</a></dt> +<dd><p>This is the connection to the ECMWF data servers.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">ECMWFService or ECMWFDataServer</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.public"> +<code class="descname">public</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.public" title="Permalink to this definition">¶</a></dt> +<dd><p>Decides which Web API Server version is used.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="EcFlexpart.EcFlexpart.dates"> +<code class="descname">dates</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.dates" title="Permalink to this definition">¶</a></dt> +<dd><p>Contains start and end date of the retrieval in the format +“YYYYMMDD/to/YYYYMMDD”</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="EcFlexpart.EcFlexpart.create"> +<code class="descname">create</code><span class="sig-paren">(</span><em>inputfiles</em>, <em>c</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/EcFlexpart.html#EcFlexpart.create"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart.create" title="Permalink to this definition">¶</a></dt> +<dd><p>An index file will be created which depends on the combination +of “date”, “time” and “stepRange” values. This is used to iterate +over all messages in each grib file which were passed through the +parameter “inputfiles” to seperate specific parameters into fort.* +files. Afterwards the FORTRAN program is called to convert +the data fields all to the same grid and put them in one file +per unique time step (combination of “date”, “time” and +“stepRange”).</p> +<div class="admonition note"> +<p class="first admonition-title">Note</p> +<p class="last">This method is based on the ECMWF example index.py +<a class="reference external" href="https://software.ecmwf.int/wiki/display/GRIB/index.py">https://software.ecmwf.int/wiki/display/GRIB/index.py</a></p> +</div> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>inputfiles</strong> (<a class="reference internal" href="#UioFiles.UioFiles" title="UioFiles.UioFiles"><em>UioFiles</em></a>) – Contains a list of files.</li> +<li><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and +command line.</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="EcFlexpart.EcFlexpart.deacc_fluxes"> +<code class="descname">deacc_fluxes</code><span class="sig-paren">(</span><em>inputfiles</em>, <em>c</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/EcFlexpart.html#EcFlexpart.deacc_fluxes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart.deacc_fluxes" title="Permalink to this definition">¶</a></dt> +<dd><p>De-accumulate and disaggregate flux data.</p> +<p>Goes through all flux fields in ordered time and de-accumulate +the fields. Afterwards the fields are disaggregated in time. +Different versions of disaggregation is provided for rainfall +data (darain, modified linear) and the surface fluxes and +stress data (dapoly, cubic polynomial).</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>inputfiles</strong> (<a class="reference internal" href="#UioFiles.UioFiles" title="UioFiles.UioFiles"><em>UioFiles</em></a>) – Contains the list of files that contain flux data.</li> +<li><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and +command line.</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="EcFlexpart.EcFlexpart.prepare_fp_files"> +<code class="descname">prepare_fp_files</code><span class="sig-paren">(</span><em>c</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/EcFlexpart.html#EcFlexpart.prepare_fp_files"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart.prepare_fp_files" title="Permalink to this definition">¶</a></dt> +<dd><p>Conversion of GRIB files to FLEXPART binary format.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and +command line.</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="EcFlexpart.EcFlexpart.process_output"> +<code class="descname">process_output</code><span class="sig-paren">(</span><em>c</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/EcFlexpart.html#EcFlexpart.process_output"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart.process_output" title="Permalink to this definition">¶</a></dt> +<dd><p>Postprocessing of FLEXPART input files.</p> +<p>The grib files are postprocessed depending on the selection in +CONTROL file. The resulting files are moved to the output +directory if its not equal to the input directory. +The following modifications might be done if +properly switched in CONTROL file: +GRIB2 - Conversion to GRIB2 +ECTRANS - Transfer of files to gateway server +ECSTORAGE - Storage at ECMWF server</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and +command line.</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="EcFlexpart.EcFlexpart.retrieve"> +<code class="descname">retrieve</code><span class="sig-paren">(</span><em>server</em>, <em>dates</em>, <em>public</em>, <em>request</em>, <em>inputdir='.'</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/EcFlexpart.html#EcFlexpart.retrieve"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart.retrieve" title="Permalink to this definition">¶</a></dt> +<dd><p>Finalizing the retrieval information by setting final details +depending on grid type. +Prepares MARS retrievals per grid type and submits them.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>server</strong> (<em>ECMWFService</em><em> or </em><em>ECMWFDataServer</em>) – The connection to the ECMWF server. This is different +for member state users which have full access and non +member state users which have only access to the public +data sets. The decision is made from command line argument +“public”; for public access its True (ECMWFDataServer) +for member state users its False (ECMWFService)</li> +<li><strong>dates</strong> (<em>str</em>) – Contains start and end date of the retrieval in the format +“YYYYMMDD/to/YYYYMMDD”</li> +<li><strong>request</strong> (<em>int</em>) – Selects the mode of retrieval. +0: Retrieves the data from ECMWF. +1: Prints the mars requests to an output file. +2: Retrieves the data and prints the mars request.</li> +<li><strong>inputdir</strong> (<em>str</em><em>, </em><em>optional</em>) – Path to the directory where the retrieved data is about +to be stored. The default is the current directory (‘.’).</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="EcFlexpart.EcFlexpart.write_namelist"> +<code class="descname">write_namelist</code><span class="sig-paren">(</span><em>c</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/EcFlexpart.html#EcFlexpart.write_namelist"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart.write_namelist" title="Permalink to this definition">¶</a></dt> +<dd><p>Creates a namelist file in the temporary directory and writes +the following values to it: maxl, maxb, mlevel, +mlevelist, mnauf, metapar, rlo0, rlo1, rla0, rla1, +momega, momegadiff, mgauss, msmooth, meta, metadiff, mdpdeta</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and +command line.</li> +<li><strong>filename</strong> (<em>str</em>) – Name of the namelist file.</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +</dd></dl> + +</div> +<div class="section" id="module-GribUtil"> +<span id="gributil"></span><h3><a class="toc-backref" href="#id7">GribUtil</a><a class="headerlink" href="#module-GribUtil" title="Permalink to this headline">¶</a></h3> +<dl class="class"> +<dt id="GribUtil.GribUtil"> +<em class="property">class </em><code class="descclassname">GribUtil.</code><code class="descname">GribUtil</code><span class="sig-paren">(</span><em>filenames</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/GribUtil.html#GribUtil"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#GribUtil.GribUtil" title="Permalink to this definition">¶</a></dt> +<dd><p>Class for GRIB utilities (new methods) based on GRIB API</p> +<dl class="method"> +<dt id="GribUtil.GribUtil.copy_dummy_msg"> +<code class="descname">copy_dummy_msg</code><span class="sig-paren">(</span><em>filename_in</em>, <em>selectWhere=True</em>, <em>keynames=[]</em>, <em>keyvalues=[]</em>, <em>filemode='w'</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/GribUtil.html#GribUtil.copy_dummy_msg"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#GribUtil.GribUtil.copy_dummy_msg" title="Permalink to this definition">¶</a></dt> +<dd><p>Add the content of another input grib file to the objects file but +only messages corresponding to keys/values passed to the function. +The selectWhere switch decides if to copy the keys equal to (True) or +different to (False) the keynames/keyvalues list passed to the function.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>filename_in</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – Filename of the input file to read the grib messages from.</li> +<li><strong>selectWhere</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">boolean</span></code>, optional) – Decides if to copy the keynames and values equal to (True) or +different to (False) the keynames/keyvalues list passed to the +function. Default is True.</li> +<li><strong>keynames</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – List of keynames. Default is an empty list.</li> +<li><strong>keyvalues</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – List of keyvalues. Default is an empty list.</li> +<li><strong>filemode</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – Sets the mode for the output file. Default is “w”.</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="GribUtil.GribUtil.get_keys"> +<code class="descname">get_keys</code><span class="sig-paren">(</span><em>keynames</em>, <em>wherekeynames=[]</em>, <em>wherekeyvalues=[]</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/GribUtil.html#GribUtil.get_keys"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#GribUtil.GribUtil.get_keys" title="Permalink to this definition">¶</a></dt> +<dd><p>Get keyvalues for a given list of keynames a where statement +can be given (list of key and list of values)</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> +<li><strong>keynames</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – List of keynames.</li> +<li><strong>wherekeynames</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – Default value is an empty list.</li> +<li><strong>wherekeyvalues</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – Default value is an empty list.</li> +</ul> +</td> +</tr> +<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><strong>return_list</strong> – List of keyvalues for given keynames.</p> +</td> +</tr> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code></p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="GribUtil.GribUtil.index"> +<code class="descname">index</code><span class="sig-paren">(</span><em>index_keys=['mars'], index_file='my.idx'</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/GribUtil.html#GribUtil.index"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#GribUtil.GribUtil.index" title="Permalink to this definition">¶</a></dt> +<dd><p>Create index file from a list of files if it does not exist or +read an index file.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> +<li><strong>index_keys</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – Contains the list of key parameter names from +which the index is to be created. +Default is a list with a single entry string “mars”.</li> +<li><strong>index_file</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – Filename where the indices are stored. +Default is “my.idx”.</li> +</ul> +</td> +</tr> +<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><strong>iid</strong> – Grib index id.</p> +</td> +</tr> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><code class="xref py py-obj docutils literal notranslate"><span class="pre">integer</span></code></p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="GribUtil.GribUtil.set_keys"> +<code class="descname">set_keys</code><span class="sig-paren">(</span><em>fromfile</em>, <em>keynames</em>, <em>keyvalues</em>, <em>wherekeynames=[]</em>, <em>wherekeyvalues=[]</em>, <em>strict=False</em>, <em>filemode='w'</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/GribUtil.html#GribUtil.set_keys"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#GribUtil.GribUtil.set_keys" title="Permalink to this definition">¶</a></dt> +<dd><p>Opens the file to read the grib messages and then write +the selected messages (with wherekeys) to a new output file. +Also, the keyvalues of the passed list of keynames are set.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>fromfile</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – Filename of the input file to read the grib messages from.</li> +<li><strong>keynames</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – List of keynames to set in the selected messages. +Default is an empty list.</li> +<li><strong>keyvalues</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – List of keyvalues to set in the selected messages. +Default is an empty list.</li> +<li><strong>wherekeynames</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – List of keynames to select correct message. +Default value is an empty list.</li> +<li><strong>wherekeyvalues</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – List of keyvalues for keynames to select correct message. +Default value is an empty list.</li> +<li><strong>strict</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">boolean</span></code>, optional) – Decides if everything from keynames and keyvalues +is written out the grib file (False) or only those +meeting the where statement (True). Default is False.</li> +<li><strong>filemode</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – Sets the mode for the output file. Default is “w”.</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +</dd></dl> + +</div> +<div class="section" id="module-MarsRetrieval"> +<span id="marsretrieval"></span><h3><a class="toc-backref" href="#id8">MarsRetrieval</a><a class="headerlink" href="#module-MarsRetrieval" title="Permalink to this headline">¶</a></h3> +<dl class="class"> +<dt id="MarsRetrieval.MarsRetrieval"> +<em class="property">class </em><code class="descclassname">MarsRetrieval.</code><code class="descname">MarsRetrieval</code><span class="sig-paren">(</span><em>server</em>, <em>public</em>, <em>marsclass='ei'</em>, <em>dataset=''</em>, <em>type=''</em>, <em>levtype=''</em>, <em>levelist=''</em>, <em>repres=''</em>, <em>date=''</em>, <em>resol=''</em>, <em>stream=''</em>, <em>area=''</em>, <em>time=''</em>, <em>step=''</em>, <em>expver='1'</em>, <em>number=''</em>, <em>accuracy=''</em>, <em>grid=''</em>, <em>gaussian=''</em>, <em>target=''</em>, <em>param=''</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/MarsRetrieval.html#MarsRetrieval"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#MarsRetrieval.MarsRetrieval" title="Permalink to this definition">¶</a></dt> +<dd><p>Specific syntax and content for submission of MARS retrievals.</p> +<p>A MARS revtrieval has a specific syntax with a selection of keywords and +their corresponding values. This class provides the necessary functions +by displaying the selected parameters and their values and the actual +retrievement of the data through a mars request or a Python web api +interface. The initialization already expects all the keyword values.</p> +<p>A description of MARS keywords/arguments and examples of their +values can be found here: +<a class="reference external" href="https://software.ecmwf.int/wiki/display/UDOC/">https://software.ecmwf.int/wiki/display/UDOC/</a> Identification+keywords#Identificationkeywords-class</p> +<dl class="attribute"> +<dt id="MarsRetrieval.MarsRetrieval.server"> +<code class="descname">server</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.server" title="Permalink to this definition">¶</a></dt> +<dd><p>This is the connection to the ECMWF data servers.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">ECMWFService or ECMWFDataServer</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="MarsRetrieval.MarsRetrieval.public"> +<code class="descname">public</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.public" title="Permalink to this definition">¶</a></dt> +<dd><p>Decides which Web API Server version is used.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="MarsRetrieval.MarsRetrieval.marsclass"> +<code class="descname">marsclass</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.marsclass" title="Permalink to this definition">¶</a></dt> +<dd><p>Characterisation of dataset.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="MarsRetrieval.MarsRetrieval.dataset"> +<code class="descname">dataset</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.dataset" title="Permalink to this definition">¶</a></dt> +<dd><p>For public datasets there is the specific naming and parameter +dataset which has to be used to characterize the type of +data.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="MarsRetrieval.MarsRetrieval.type"> +<code class="descname">type</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.type" title="Permalink to this definition">¶</a></dt> +<dd><p>Determines the type of fields to be retrieved.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="MarsRetrieval.MarsRetrieval.levtype"> +<code class="descname">levtype</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.levtype" title="Permalink to this definition">¶</a></dt> +<dd><p>Denotes type of level.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="MarsRetrieval.MarsRetrieval.levelist"> +<code class="descname">levelist</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.levelist" title="Permalink to this definition">¶</a></dt> +<dd><p>Specifies the required levels.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="MarsRetrieval.MarsRetrieval.repres"> +<code class="descname">repres</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.repres" title="Permalink to this definition">¶</a></dt> +<dd><p>Selects the representation of the archived data.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="MarsRetrieval.MarsRetrieval.date"> +<code class="descname">date</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.date" title="Permalink to this definition">¶</a></dt> +<dd><p>Specifies the Analysis date, the Forecast base date or +Observations date.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="MarsRetrieval.MarsRetrieval.resol"> +<code class="descname">resol</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.resol" title="Permalink to this definition">¶</a></dt> +<dd><p>Specifies the desired triangular truncation of retrieved data, +before carrying out any other selected post-processing.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="MarsRetrieval.MarsRetrieval.stream"> +<code class="descname">stream</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.stream" title="Permalink to this definition">¶</a></dt> +<dd><p>Identifies the forecasting system used to generate the data.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="MarsRetrieval.MarsRetrieval.area"> +<code class="descname">area</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.area" title="Permalink to this definition">¶</a></dt> +<dd><p>Specifies the desired sub-area of data to be extracted.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="MarsRetrieval.MarsRetrieval.time"> +<code class="descname">time</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.time" title="Permalink to this definition">¶</a></dt> +<dd><p>Specifies the time of the data in hours and minutes.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="MarsRetrieval.MarsRetrieval.step"> +<code class="descname">step</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.step" title="Permalink to this definition">¶</a></dt> +<dd><p>Specifies the forecast time step from forecast base time.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="MarsRetrieval.MarsRetrieval.expver"> +<code class="descname">expver</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.expver" title="Permalink to this definition">¶</a></dt> +<dd><p>The version of the dataset.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="MarsRetrieval.MarsRetrieval.number"> +<code class="descname">number</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.number" title="Permalink to this definition">¶</a></dt> +<dd><p>Selects the member in ensemble forecast run.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>c</strong> (<a class="reference internal" href="#module-ControlFile" title="ControlFile"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ControlFile</span></code></a>) – Contains all the parameters of CONTROL file and -command line.</li> -<li><strong>filename</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – Name of the namelist file.</li> -</ul> -</td> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> </tr> </tbody> </table> </dd></dl> -</dd></dl> - -</div> -<div class="section" id="module-GribTools"> -<span id="gribtools"></span><h3><a class="toc-backref" href="#id7">GribTools</a><a class="headerlink" href="#module-GribTools" title="Permalink to this headline">¶</a></h3> -<dl class="class"> -<dt id="GribTools.GribTools"> -<em class="property">class </em><code class="descclassname">GribTools.</code><code class="descname">GribTools</code><span class="sig-paren">(</span><em>filenames</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/GribTools.html#GribTools"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#GribTools.GribTools" title="Permalink to this definition">¶</a></dt> -<dd><p>Class for GRIB utilities (new methods) based on GRIB API</p> -<dl class="method"> -<dt id="GribTools.GribTools.copy"> -<code class="descname">copy</code><span class="sig-paren">(</span><em>filename_in</em>, <em>selectWhere=True</em>, <em>keynames=[]</em>, <em>keyvalues=[]</em>, <em>filemode='w'</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/GribTools.html#GribTools.copy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#GribTools.GribTools.copy" title="Permalink to this definition">¶</a></dt> -<dd><p>Add the content of another input grib file to the objects file but -only messages corresponding to keys/values passed to the function. -The selectWhere switch decides if to copy the keys equal to (True) or -different to (False) the keynames/keyvalues list passed to the function.</p> +<dl class="attribute"> +<dt id="MarsRetrieval.MarsRetrieval.accuracy"> +<code class="descname">accuracy</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.accuracy" title="Permalink to this definition">¶</a></dt> +<dd><p>Specifies the number of bits per value to be used in the +generated GRIB coded fields.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>filename_in</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – Filename of the input file to read the grib messages from.</li> -<li><strong>selectWhere</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">boolean</span></code>, optional) – Decides if to copy the keynames and values equal to (True) or -different to (False) the keynames/keyvalues list passed to the -function. Default is True.</li> -<li><strong>keynames</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – List of keynames. Default is an empty list.</li> -<li><strong>keyvalues</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – List of keynames. Default is an empty list.</li> -<li><strong>filemode</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – Sets the mode for the output file. Default is “w”.</li> -</ul> -</td> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> </tr> </tbody> </table> </dd></dl> -<dl class="method"> -<dt id="GribTools.GribTools.get_keys"> -<code class="descname">get_keys</code><span class="sig-paren">(</span><em>keynames</em>, <em>wherekeynames=[]</em>, <em>wherekeyvalues=[]</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/GribTools.html#GribTools.get_keys"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#GribTools.GribTools.get_keys" title="Permalink to this definition">¶</a></dt> -<dd><p>Get keyvalues for a given list of keynames a where statement -can be given (list of key and list of values)</p> +<dl class="attribute"> +<dt id="MarsRetrieval.MarsRetrieval.grid"> +<code class="descname">grid</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.grid" title="Permalink to this definition">¶</a></dt> +<dd><p>Specifies the output grid which can be either a Gaussian grid +or a Latitude/Longitude grid.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>keynames</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – List of keynames.</li> -<li><strong>wherekeynames</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – Default value is an empty list.</li> -<li><strong>wherekeyvalues</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – Default value is an empty list.</li> -</ul> -</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><strong>return_list</strong> – List of keyvalues for given keynames.</p> -</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code></p> -</td> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> </tr> </tbody> </table> </dd></dl> -<dl class="method"> -<dt id="GribTools.GribTools.index"> -<code class="descname">index</code><span class="sig-paren">(</span><em>index_keys=['mars'], index_file='my.idx'</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/GribTools.html#GribTools.index"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#GribTools.GribTools.index" title="Permalink to this definition">¶</a></dt> -<dd><p>Create index file from a list of files if it does not exist or -read an index file.</p> +<dl class="attribute"> +<dt id="MarsRetrieval.MarsRetrieval.gaussian"> +<code class="descname">gaussian</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.gaussian" title="Permalink to this definition">¶</a></dt> +<dd><p>This parameter is deprecated and should no longer be used. +Specifies the desired type of Gaussian grid for the output.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>index_keys</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – Contains the list of key parameter names from -which the index is to be created. -Default is a list with a single entry string “mars”.</li> -<li><strong>index_file</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – Filename where the indices are stored. -Default is “my.idx”.</li> -</ul> -</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><strong>iid</strong> – Grib index id.</p> -</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><code class="xref py py-obj docutils literal notranslate"><span class="pre">integer</span></code></p> -</td> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> </tr> </tbody> </table> </dd></dl> -<dl class="method"> -<dt id="GribTools.GribTools.set_keys"> -<code class="descname">set_keys</code><span class="sig-paren">(</span><em>fromfile</em>, <em>keynames</em>, <em>keyvalues</em>, <em>wherekeynames=[]</em>, <em>wherekeyvalues=[]</em>, <em>strict=False</em>, <em>filemode='w'</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/GribTools.html#GribTools.set_keys"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#GribTools.GribTools.set_keys" title="Permalink to this definition">¶</a></dt> -<dd><p>Opens the file to read the grib messages and then write -them to a new output file. By default all messages are -written out. Also, the keyvalues of the passed list of -keynames are set or only those meeting the where statement. -(list of key and list of values).</p> +<dl class="attribute"> +<dt id="MarsRetrieval.MarsRetrieval.target"> +<code class="descname">target</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.target" title="Permalink to this definition">¶</a></dt> +<dd><p>Specifies a file into which data is to be written after +retrieval or manipulation.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>fromfile</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – Filename of the input file to read the grib messages from.</li> -<li><strong>keynames</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – List of keynames. Default is an empty list.</li> -<li><strong>keyvalues</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – List of keynames. Default is an empty list.</li> -<li><strong>wherekeynames</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – Default value is an empty list.</li> -<li><strong>wherekeyvalues</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – Default value is an empty list.</li> -<li><strong>strict</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">boolean</span></code>, optional) – Decides if everything from keynames and keyvalues -is written out the grib file (False) or only those -meeting the where statement (True). Default is False.</li> -<li><strong>filemode</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – Sets the mode for the output file. Default is “w”.</li> -</ul> -</td> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> </tr> </tbody> </table> </dd></dl> +<dl class="attribute"> +<dt id="MarsRetrieval.MarsRetrieval.param"> +<code class="descname">param</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.param" title="Permalink to this definition">¶</a></dt> +<dd><p>Specifies the meteorological parameter.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> +</tr> +</tbody> +</table> </dd></dl> -</div> -<div class="section" id="module-MarsRetrieval"> -<span id="marsretrieval"></span><h3><a class="toc-backref" href="#id8">MarsRetrieval</a><a class="headerlink" href="#module-MarsRetrieval" title="Permalink to this headline">¶</a></h3> -<dl class="class"> -<dt id="MarsRetrieval.MarsRetrieval"> -<em class="property">class </em><code class="descclassname">MarsRetrieval.</code><code class="descname">MarsRetrieval</code><span class="sig-paren">(</span><em>server</em>, <em>public</em>, <em>marsclass='ei'</em>, <em>dataset=''</em>, <em>type=''</em>, <em>levtype=''</em>, <em>levelist=''</em>, <em>repres=''</em>, <em>date=''</em>, <em>resol=''</em>, <em>stream=''</em>, <em>area=''</em>, <em>time=''</em>, <em>step=''</em>, <em>expver='1'</em>, <em>number=''</em>, <em>accuracy=''</em>, <em>grid=''</em>, <em>gaussian=''</em>, <em>target=''</em>, <em>param=''</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/MarsRetrieval.html#MarsRetrieval"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#MarsRetrieval.MarsRetrieval" title="Permalink to this definition">¶</a></dt> -<dd><p>Class for submitting MARS retrievals.</p> -<p>A description of MARS keywords/arguments and examples of their -values can be found here: -<a class="reference external" href="https://software.ecmwf.int/wiki/display/UDOC/">https://software.ecmwf.int/wiki/display/UDOC/</a> Identification+keywords#Identificationkeywords-class</p> <dl class="method"> <dt id="MarsRetrieval.MarsRetrieval.data_retrieve"> <code class="descname">data_retrieve</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/MarsRetrieval.html#MarsRetrieval.data_retrieve"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.data_retrieve" title="Permalink to this definition">¶</a></dt> @@ -815,25 +2587,6 @@ are taken from the defined class attributes.</p> standard output.</p> </dd></dl> -<dl class="method"> -<dt id="MarsRetrieval.MarsRetrieval.print_info"> -<code class="descname">print_info</code><span class="sig-paren">(</span><em>inputdir</em>, <em>request_number</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/MarsRetrieval.html#MarsRetrieval.print_info"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.print_info" title="Permalink to this definition">¶</a></dt> -<dd><p>Prints all mars requests to an extra file for debugging and -information.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>inputdir</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The path where all data from the retrievals are stored.</li> -<li><strong>request_number</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">integer</span></code>) – Number of mars requests for flux and non-flux data.</li> -</ul> -</td> -</tr> -</tbody> -</table> -</dd></dl> - <dl class="method"> <dt id="MarsRetrieval.MarsRetrieval.print_infodata_csv"> <code class="descname">print_infodata_csv</code><span class="sig-paren">(</span><em>inputdir</em>, <em>request_number</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/MarsRetrieval.html#MarsRetrieval.print_infodata_csv"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.print_infodata_csv" title="Permalink to this definition">¶</a></dt> @@ -843,8 +2596,8 @@ information.</p> <col class="field-body" /> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>inputdir</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The path where all data from the retrievals are stored.</li> -<li><strong>request_number</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">integer</span></code>) – Number of mars requests for flux and non-flux data.</li> +<li><strong>inputdir</strong> (<em>str</em>) – The path where all data from the retrievals are stored.</li> +<li><strong>request_number</strong> (<em>int</em>) – Number of mars requests for flux and non-flux data.</li> </ul> </td> </tr> @@ -860,9 +2613,52 @@ information.</p> <dl class="class"> <dt id="UioFiles.UioFiles"> <em class="property">class </em><code class="descclassname">UioFiles.</code><code class="descname">UioFiles</code><span class="sig-paren">(</span><em>path</em>, <em>pattern</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/UioFiles.html#UioFiles"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#UioFiles.UioFiles" title="Permalink to this definition">¶</a></dt> -<dd><p>Class to manipulate files. At initialisation it has the pattern -which stores a regular expression pattern for the files, the path -to the files and the files already.</p> +<dd><p>Collection of files matching a specific pattern.</p> +<p>The pattern can contain regular expressions for the files. +The files are listed and can be transformed to a single string or +they can be deleted.</p> +<dl class="attribute"> +<dt id="UioFiles.UioFiles.path"> +<code class="descname">path</code><a class="headerlink" href="#UioFiles.UioFiles.path" title="Permalink to this definition">¶</a></dt> +<dd><p>Directory where to list the files.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="UioFiles.UioFiles.pattern"> +<code class="descname">pattern</code><a class="headerlink" href="#UioFiles.UioFiles.pattern" title="Permalink to this definition">¶</a></dt> +<dd><p>Regular expression pattern. For example: ‘*.grb’</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="UioFiles.UioFiles.files"> +<code class="descname">files</code><a class="headerlink" href="#UioFiles.UioFiles.files" title="Permalink to this definition">¶</a></dt> +<dd><p>List of files matching the pattern in the path.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">list of str</td> +</tr> +</tbody> +</table> +</dd></dl> + <dl class="method"> <dt id="UioFiles.UioFiles.delete_files"> <code class="descname">delete_files</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/UioFiles.html#UioFiles.delete_files"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#UioFiles.UioFiles.delete_files" title="Permalink to this definition">¶</a></dt> @@ -877,6 +2673,25 @@ to the files and the files already.</p> <h2><a class="toc-backref" href="#id10">Modules</a><a class="headerlink" href="#modules" title="Permalink to this headline">¶</a></h2> <div class="section" id="module-get_mars_data"> <span id="get-mars-data"></span><h3><a class="toc-backref" href="#id11">get_mars_data</a><a class="headerlink" href="#module-get_mars_data" title="Permalink to this headline">¶</a></h3> +<p>This script extracts MARS data from ECMWF servers.</p> +<p>At first, the necessary parameters from command line and CONTROL files are +extracted. They define the data set to be extracted from MARS.</p> +<p>This file can also be imported as a module and contains the following +functions:</p> +<blockquote> +<div><ul class="simple"> +<li>main - the main function of the script</li> +<li>get_mars_data - overall control of ECMWF data retrievment</li> +<li>write_reqheader - writes the header into the mars_request file</li> +<li>mk_server - creates the server connection to ECMWF servers</li> +<li>mk_dates - defines the start and end date</li> +<li>remove_old - deletes old retrieved grib files</li> +<li>do_retrievement - creates individual retrievals</li> +</ul> +</div></blockquote> +<p>Type: get_mars_data.py –help +to get information about command line parameters. +Read the documentation for usage instructions.</p> <dl class="function"> <dt id="get_mars_data.do_retrievement"> <code class="descclassname">get_mars_data.</code><code class="descname">do_retrievement</code><span class="sig-paren">(</span><em>c</em>, <em>server</em>, <em>start</em>, <em>end</em>, <em>delta_t</em>, <em>fluxes=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/get_mars_data.html#do_retrievement"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#get_mars_data.do_retrievement" title="Permalink to this definition">¶</a></dt> @@ -887,14 +2702,14 @@ retrieves the data from MARS.</p> <col class="field-body" /> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>c</strong> (<a class="reference internal" href="#module-ControlFile" title="ControlFile"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ControlFile</span></code></a>) – Contains all the parameters of CONTROL file and +<li><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and command line.</li> -<li><strong>server</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">ECMWFService</span></code>) – The server connection to ECMWF.</li> -<li><strong>start</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">datetime</span></code>) – The start date of the retrieval.</li> -<li><strong>end</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">datetime</span></code>) – The end date of the retrieval.</li> -<li><strong>delta_t</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">datetime</span></code>) – Delta_t + 1 is the maximal time period of a single +<li><strong>server</strong> (<em>ECMWFService</em><em> or </em><em>ECMWFDataServer</em>) – The server connection to ECMWF.</li> +<li><strong>start</strong> (<em>datetime</em>) – The start date of the retrieval.</li> +<li><strong>end</strong> (<em>datetime</em>) – The end date of the retrieval.</li> +<li><strong>delta_t</strong> (<em>datetime</em>) – Delta_t + 1 is the maximal time period of a single retrieval.</li> -<li><strong>fluxes</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">boolean</span></code>, optional) – Decides if the flux parameters are to be retrieved or +<li><strong>fluxes</strong> (<em>boolean</em><em>, </em><em>optional</em>) – Decides if the flux parameters are to be retrieved or the rest of the parameter list. Default value is False.</li> </ul> @@ -915,7 +2730,7 @@ is set.</p> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>c</strong> (<a class="reference internal" href="#module-ControlFile" title="ControlFile"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ControlFile</span></code></a>) – Contains all the parameters of CONTROL file and +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and command line.</td> </tr> </tbody> @@ -930,9 +2745,118 @@ command line.</td> Then it also takes program call arguments and control file input.</p> </dd></dl> +<dl class="function"> +<dt id="get_mars_data.mk_dates"> +<code class="descclassname">get_mars_data.</code><code class="descname">mk_dates</code><span class="sig-paren">(</span><em>c</em>, <em>fluxes</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/get_mars_data.html#mk_dates"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#get_mars_data.mk_dates" title="Permalink to this definition">¶</a></dt> +<dd><p>Prepares start and end date depending on flux or non flux data.</p> +<p>If forecast for maximum one day (upto 24h) are to be retrieved, then +collect accumulation data (flux data) with additional days in the +beginning and at the end (used for complete disaggregation of +original period)</p> +<p>If forecast data longer than 24h are to be retrieved, then +collect accumulation data (flux data) with the exact start and end date +(disaggregation will be done for the exact time period with +boundary conditions)</p> +<p>Since for basetime the extraction contains the 12 hours upfront, +if basetime is 0, the starting date has to be the day before and</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> +<li><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and +command line.</li> +<li><strong>fluxes</strong> (<em>boolean</em><em>, </em><em>optional</em>) – Decides if the flux parameter settings are stored or +the rest of the parameter list. +Default value is False.</li> +</ul> +</td> +</tr> +<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last"><ul class="simple"> +<li><strong>start</strong> (<em>datetime</em>) – The start date of the retrieving data set.</li> +<li><strong>end</strong> (<em>datetime</em>) – The end date of the retrieving data set.</li> +<li><strong>chunk</strong> (<em>datetime</em>) – Time period in days for one single mars retrieval.</li> +</ul> +</p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="function"> +<dt id="get_mars_data.mk_server"> +<code class="descclassname">get_mars_data.</code><code class="descname">mk_server</code><span class="sig-paren">(</span><em>c</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/get_mars_data.html#mk_server"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#get_mars_data.mk_server" title="Permalink to this definition">¶</a></dt> +<dd><p>Creates server connection if ECMWF WebAPI is available.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and +command line.</td> +</tr> +<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><strong>server</strong> – Connection to ECMWF server via python interface ECMWF WebAPI.</td> +</tr> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">ECMWFDataServer or ECMWFService</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="function"> +<dt id="get_mars_data.remove_old"> +<code class="descclassname">get_mars_data.</code><code class="descname">remove_old</code><span class="sig-paren">(</span><em>pattern</em>, <em>inputdir</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/get_mars_data.html#remove_old"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#get_mars_data.remove_old" title="Permalink to this definition">¶</a></dt> +<dd><p>Deletes old retrieval files from current input directory +matching the pattern.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>pattern</strong> (<em>str</em>) – The sub string pattern which identifies the files to be deleted.</li> +<li><strong>inputdir</strong> (<em>str</em><em>, </em><em>optional</em>) – Path to the directory where the retrieved data is stored.</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="function"> +<dt id="get_mars_data.write_reqheader"> +<code class="descclassname">get_mars_data.</code><code class="descname">write_reqheader</code><span class="sig-paren">(</span><em>marsfile</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/get_mars_data.html#write_reqheader"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#get_mars_data.write_reqheader" title="Permalink to this definition">¶</a></dt> +<dd><p>Writes header with column names into mars request file.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>marsfile</strong> (<em>str</em>) – Path to the mars request file.</td> +</tr> +</tbody> +</table> +</dd></dl> + </div> <div class="section" id="module-prepare_flexpart"> <span id="prepare-flexpart"></span><h3><a class="toc-backref" href="#id12">prepare_flexpart</a><a class="headerlink" href="#module-prepare_flexpart" title="Permalink to this headline">¶</a></h3> +<p>This script prepares the final version of the grib files which are +then used by FLEXPART.</p> +<p>It converts the bunch of grib files extracted via get_mars_data before, +by doing the necessary conversion to get consistent grids or the +disaggregation of flux data. Finally, the data fields are combined +in files per available hour with the naming convention xxYYMMDDHH, +where xx should be 2 arbitrary letters (mostly xx is chosen to be “EN”).</p> +<p>This file can also be imported as a module which then contains the following +functions:</p> +<blockquote> +<div><ul class="simple"> +<li>main</li> +<li>prepare_flexpart</li> +</ul> +</div></blockquote> +<p>Type: prepare_flexpart.py –help +to get information about command line parameters. +Read the documentation for usage instructions.</p> <dl class="function"> <dt id="prepare_flexpart.main"> <code class="descclassname">prepare_flexpart.</code><code class="descname">main</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/prepare_flexpart.html#main"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#prepare_flexpart.main" title="Permalink to this definition">¶</a></dt> @@ -954,9 +2878,9 @@ convention.</p> <col class="field-body" /> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>ppid</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">int</span></code>) – Contains the ppid number of the current ECMWF job. It will be None if +<li><strong>ppid</strong> (<em>int</em>) – Contains the ppid number of the current ECMWF job. It will be None if the method was called within this module.</li> -<li><strong>c</strong> (<a class="reference internal" href="#module-ControlFile" title="ControlFile"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ControlFile</span></code></a>) – Contains all the parameters of CONTROL file and +<li><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and command line.</li> </ul> </td> @@ -968,15 +2892,18 @@ command line.</li> </div> <div class="section" id="module-tools"> <span id="tools"></span><h3><a class="toc-backref" href="#id13">tools</a><a class="headerlink" href="#module-tools" title="Permalink to this headline">¶</a></h3> +<p>This module contains a collection of diverse tasks within flex_extract.</p> <dl class="function"> <dt id="tools.clean_up"> <code class="descclassname">tools.</code><code class="descname">clean_up</code><span class="sig-paren">(</span><em>c</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/tools.html#clean_up"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.clean_up" title="Permalink to this definition">¶</a></dt> -<dd><p>Remove all files from intermediate directory (inputdir).</p> +<dd><p>Remove files from the intermediate directory (inputdir).</p> +<p>It keeps the final FLEXPART input files if program runs without +ECMWF Api and keywords “ectrans” or “ecstorage” are set to “1”.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>c</strong> (<a class="reference internal" href="#module-ControlFile" title="ControlFile"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ControlFile</span></code></a>) – Contains all the parameters of CONTROL file and +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and command line.</td> </tr> </tbody> @@ -984,8 +2911,31 @@ command line.</td> </dd></dl> <dl class="function"> -<dt id="tools.get_cmdline_arguments"> -<code class="descclassname">tools.</code><code class="descname">get_cmdline_arguments</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/tools.html#get_cmdline_arguments"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.get_cmdline_arguments" title="Permalink to this definition">¶</a></dt> +<dt id="tools.execute_subprocess"> +<code class="descclassname">tools.</code><code class="descname">execute_subprocess</code><span class="sig-paren">(</span><em>cmd_list</em>, <em>error_msg='SUBPROCESS FAILED!'</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/tools.html#execute_subprocess"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.execute_subprocess" title="Permalink to this definition">¶</a></dt> +<dd><p>Executes a command line instruction via a subprocess.</p> +<p>Error handling is done if an error occures.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>cmd_list</strong> (<em>list of str</em>) – A list of the components for the command line execution. Each +list entry is a single part of the command which is seperated from +the rest by a blank space. +E.g. [‘mv’, file1, file2]</td> +</tr> +<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><strong>error_msg</strong> – The possible error message if the subprocess failed. +By default it will just tell “SUBPROCESS FAILED!”.</td> +</tr> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">str, optional</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="function"> +<dt id="tools.get_cmdline_args"> +<code class="descclassname">tools.</code><code class="descname">get_cmdline_args</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/tools.html#get_cmdline_args"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.get_cmdline_args" title="Permalink to this definition">¶</a></dt> <dd><p>Decomposes the command line arguments and assigns them to variables. Apply default values for non mentioned arguments.</p> <table class="docutils field-list" frame="void" rules="none"> @@ -994,7 +2944,68 @@ Apply default values for non mentioned arguments.</p> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><strong>args</strong> – Contains the commandline arguments from script/program call.</td> </tr> -<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Namespace</span></code></td> +<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">Namespace</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="function"> +<dt id="tools.get_dimensions"> +<code class="descclassname">tools.</code><code class="descname">get_dimensions</code><span class="sig-paren">(</span><em>info</em>, <em>purefc</em>, <em>dtime</em>, <em>index_vals</em>, <em>start_date</em>, <em>end_date</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/tools.html#get_dimensions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.get_dimensions" title="Permalink to this definition">¶</a></dt> +<dd><p>This function specifies the correct dimensions for x, y and t.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> +<li><strong>info</strong> (<em>dict</em>) – Contains basic informations of the ECMWF grib files, e.g. +‘Ni’, ‘Nj’, ‘latitudeOfFirstGridPointInDegrees’, +‘longitudeOfFirstGridPointInDegrees’, ‘latitudeOfLastGridPointInDegrees’, +‘longitudeOfLastGridPointInDegrees’, ‘jDirectionIncrementInDegrees’, +‘iDirectionIncrementInDegrees’, ‘missingValue’</li> +<li><strong>purefc</strong> (<em>int</em>) – Switch for definition of pure forecast mode or not.</li> +<li><strong>dtime</strong> (<em>str</em>) – Time step in hours.</li> +<li><strong>index_vals</strong> (<em>list of list of str</em>) – Contains the values from the keys used for a distinct selection +of grib messages in processing the grib files. +Content looks like e.g.: +index_vals[0]: (‘20171106’, ‘20171107’, ‘20171108’) ; date +index_vals[1]: (‘0’, ‘1200’, ‘1800’, ‘600’) ; time +index_vals[2]: (‘0’, ‘12’, ‘3’, ‘6’, ‘9’) ; stepRange</li> +<li><strong>start_date</strong> (<em>str</em>) – The start date of the retrieval job.</li> +<li><strong>end_date</strong> (<em>str</em>) – The end date of the retrieval job.</li> +</ul> +</td> +</tr> +<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><strong>(ix, jy, it)</strong> – Dimension in x-direction, y-direction and in time.</p> +</td> +</tr> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">tuple of int</p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="function"> +<dt id="tools.get_informations"> +<code class="descclassname">tools.</code><code class="descname">get_informations</code><span class="sig-paren">(</span><em>filename</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/tools.html#get_informations"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.get_informations" title="Permalink to this definition">¶</a></dt> +<dd><p>Gets basic information from an example grib file.</p> +<p>These information are important for later use and the +initialization of numpy arrays for data storing.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>filename</strong> (<em>str</em>) – Name of the file which will be opened to extract basic information.</td> +</tr> +<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><strong>data</strong> – Contains basic informations of the ECMWF grib files, e.g. +‘Ni’, ‘Nj’, ‘latitudeOfFirstGridPointInDegrees’, +‘longitudeOfFirstGridPointInDegrees’, ‘latitudeOfLastGridPointInDegrees’, +‘longitudeOfLastGridPointInDegrees’, ‘jDirectionIncrementInDegrees’, +‘iDirectionIncrementInDegrees’, ‘missingValue’</td> +</tr> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">dict</td> </tr> </tbody> </table> @@ -1009,8 +3020,8 @@ Apply default values for non mentioned arguments.</p> <col class="field-body" /> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>list_obj</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code>) – A list with arbitrary content.</li> -<li><strong>concatenate_sign</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – A string which is used to concatenate the single +<li><strong>list_obj</strong> (<em>list of *</em>) – A list with arbitrary content.</li> +<li><strong>concatenate_sign</strong> (<em>str</em><em>, </em><em>optional</em>) – A string which is used to concatenate the single list elements. Default value is “, “.</li> </ul> </td> @@ -1018,7 +3029,7 @@ list elements. Default value is “, “.</li> <tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><strong>str_of_list</strong> – The content of the list as a single string.</p> </td> </tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code></p> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">str</p> </td> </tr> </tbody> @@ -1033,13 +3044,13 @@ list elements. Default value is “, “.</li> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>filepath</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – Path to file of ECMWF grib table number 128.</td> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>filepath</strong> (<em>str</em>) – Path to file of ECMWF grib table number 128.</td> </tr> <tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><strong>table128</strong> – Contains the ECMWF grib table 128 information. The key is the parameter number and the value is the short name of the parameter.</td> </tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><code class="xref py py-obj docutils literal notranslate"><span class="pre">dictionary</span></code></td> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">dict</td> </tr> </tbody> </table> @@ -1048,13 +3059,14 @@ short name of the parameter.</td> <dl class="function"> <dt id="tools.make_dir"> <code class="descclassname">tools.</code><code class="descname">make_dir</code><span class="sig-paren">(</span><em>directory</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/tools.html#make_dir"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.make_dir" title="Permalink to this definition">¶</a></dt> -<dd><p>Creates a directory and gives a warning if the directory -already exists. The program stops only if there is another problem.</p> +<dd><p>Creates a directory.</p> +<p>It gives a warning if the directory already exists and skips process. +The program stops only if there is another problem.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>directory</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The directory name including the path which should be created.</td> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>directory</strong> (<em>str</em>) – The path to directory which should be created.</td> </tr> </tbody> </table> @@ -1070,10 +3082,10 @@ before exiting the program.</p> <col class="field-body" /> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>user</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – Contains all email addresses which should be notified. +<li><strong>user</strong> (<em>list of str</em>) – Contains all email addresses which should be notified. It might also contain just the ecmwf user name which wil trigger mailing to the associated email address for this user.</li> -<li><strong>message</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – Error message. Default value is “ERROR”.</li> +<li><strong>message</strong> (<em>str</em><em>, </em><em>optional</em>) – Error message. Default value is “ERROR”.</li> </ul> </td> </tr> @@ -1090,7 +3102,7 @@ contains string “None”. Otherwise it is converted to an integer value.</p> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>value</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – String to be checked for the “None” word.</td> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>value</strong> (<em>str</em>) – String to be checked for the “None” word.</td> </tr> <tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">Return depends on the content of the input value. If it was “None”, then the python type None is returned. Otherwise the string is @@ -1111,7 +3123,7 @@ contains string “None”.</p> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>value</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – String to be checked for the “None” word.</td> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>value</strong> (<em>str</em>) – String to be checked for the “None” word.</td> </tr> <tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">Return depends on the content of the input value. If it was “None”, then the python type None is returned. Otherwise the string itself.</td> @@ -1124,19 +3136,13 @@ then the python type None is returned. Otherwise the string itself.</td> <dl class="function"> <dt id="tools.normal_exit"> -<code class="descclassname">tools.</code><code class="descname">normal_exit</code><span class="sig-paren">(</span><em>users</em>, <em>message='Done!'</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/tools.html#normal_exit"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.normal_exit" title="Permalink to this definition">¶</a></dt> +<code class="descclassname">tools.</code><code class="descname">normal_exit</code><span class="sig-paren">(</span><em>message='Done!'</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/tools.html#normal_exit"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.normal_exit" title="Permalink to this definition">¶</a></dt> <dd><p>Prints a specific exit message which can be passed to the function.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>user</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – Contains all email addresses which should be notified. -It might also contain just the ecmwf user name which wil trigger -mailing to the associated email address for this user.</li> -<li><strong>message</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – Message for exiting program. Default value is “Done!”.</li> -</ul> -</td> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>message</strong> (<em>str</em><em>, </em><em>optional</em>) – Message for exiting program. Default value is “Done!”.</td> </tr> </tbody> </table> @@ -1145,7 +3151,8 @@ mailing to the associated email address for this user.</li> <dl class="function"> <dt id="tools.product"> <code class="descclassname">tools.</code><code class="descname">product</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwds</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/tools.html#product"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.product" title="Permalink to this definition">¶</a></dt> -<dd><p>This method combines the single characters of the passed arguments +<dd><p>Creates combinations of all passed arguments.</p> +<p>This method combines the single characters of the passed arguments with each other. So that each character of each argument value will be combined with each character of the other arguments as a tuple.</p> <div class="admonition note"> @@ -1161,8 +3168,8 @@ will be combined with each character of the other arguments as a tuple.</p> <col class="field-body" /> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>*args</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">tuple</span></code>) – Positional arguments (arbitrary number).</li> -<li><strong>**kwds</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">dictionary</span></code>) – Contains all the keyword arguments from *args.</li> +<li><strong>*args</strong> (<em>list</em><em> or </em><em>str</em>) – Positional arguments (arbitrary number).</li> +<li><strong>**kwds</strong> (<em>dict</em>) – Contains all the keyword arguments from *args.</li> </ul> </td> </tr> @@ -1191,41 +3198,56 @@ is done in here.</p> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>ecd</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The path were the file is stored.</li> -<li><strong>filename</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The name of the file to send to the ECMWF server.</li> -<li><strong>target</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The target queue where the file should be sent to.</li> -<li><strong>ecuid</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The user id on ECMWF server.</li> -<li><strong>ecgid</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The group id on ECMWF server.</li> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>ecd</strong> (<em>str</em>) – The path were the file is stored.</li> +<li><strong>filename</strong> (<em>str</em>) – The name of the file to send to the ECMWF server.</li> +<li><strong>target</strong> (<em>str</em>) – The target queue where the file should be sent to.</li> +<li><strong>ecuid</strong> (<em>str</em>) – The user id on ECMWF server.</li> +<li><strong>ecgid</strong> (<em>str</em>) – The group id on ECMWF server.</li> </ul> </td> </tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><strong>rcode</strong> – Resulting code of command execution. If successful the string -will be empty.</p> -</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code></p> -</td> -</tr> </tbody> </table> </dd></dl> <dl class="function"> <dt id="tools.read_ecenv"> -<code class="descclassname">tools.</code><code class="descname">read_ecenv</code><span class="sig-paren">(</span><em>filename</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/tools.html#read_ecenv"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.read_ecenv" title="Permalink to this definition">¶</a></dt> +<code class="descclassname">tools.</code><code class="descname">read_ecenv</code><span class="sig-paren">(</span><em>filepath</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/tools.html#read_ecenv"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.read_ecenv" title="Permalink to this definition">¶</a></dt> <dd><p>Reads the file into a dictionary where the key values are the parameter names.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>filename</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – Path to file where the ECMWF environment parameters are stored.</td> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>filepath</strong> (<em>str</em>) – Path to file where the ECMWF environment parameters are stored.</td> </tr> <tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><strong>envs</strong> – Contains the environment parameter ecuid, ecgid, gateway and destination for ECMWF server environments.</td> </tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><code class="xref py py-obj docutils literal notranslate"><span class="pre">dictionary</span></code></td> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">dict</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="function"> +<dt id="tools.send_mail"> +<code class="descclassname">tools.</code><code class="descname">send_mail</code><span class="sig-paren">(</span><em>users</em>, <em>success_mode</em>, <em>message</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/tools.html#send_mail"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.send_mail" title="Permalink to this definition">¶</a></dt> +<dd><p>Prints a specific exit message which can be passed to the function.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>users</strong> (<em>list of str</em>) – Contains all email addresses which should be notified. +It might also contain just the ecmwf user name which wil trigger +mailing to the associated email address for this user.</li> +<li><strong>success_mode</strong> (<em>str</em>) – States the exit mode of the program to put into +the mail subject line.</li> +<li><strong>message</strong> (<em>str</em><em>, </em><em>optional</em>) – Message for exiting program. Default value is “Done!”.</li> +</ul> +</td> </tr> </tbody> </table> @@ -1240,7 +3262,7 @@ The function does not fail if the file does not exist.</p> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>filename</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The name of the file to be removed without notification.</td> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>filename</strong> (<em>str</em>) – The name of the file to be removed without notification.</td> </tr> </tbody> </table> @@ -1261,17 +3283,15 @@ is done in here.</p> <col class="field-body" /> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>target</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The target where the file should be sent to, e.g. the queue.</li> -<li><strong>jobname</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – The name of the jobfile to be submitted to the ECMWF server.</li> +<li><strong>target</strong> (<em>str</em>) – The target where the file should be sent to, e.g. the queue.</li> +<li><strong>jobname</strong> (<em>str</em>) – The name of the jobfile to be submitted to the ECMWF server.</li> </ul> </td> </tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><strong>rcode</strong> – Resulting code of command execution. If successful the string -will contain an integer number, representing the id of the job -at the ecmwf server.</p> +<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><strong>job_id</strong> – The id number of the job as a reference at the ecmwf server.</p> </td> </tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code></p> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">int</p> </td> </tr> </tbody> @@ -1287,11 +3307,11 @@ at the ecmwf server.</p> <col class="field-body" /> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>pars</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – Addpar argument from CONTROL file in the format of +<li><strong>pars</strong> (<em>str</em>) – Addpar argument from CONTROL file in the format of parameter names instead of ids. The parameter short names are sepearted with “/” and they are passed as one single string.</li> -<li><strong>table</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">dictionary</span></code>) – Contains the ECMWF grib table 128 information. +<li><strong>table</strong> (<em>dict</em>) – Contains the ECMWF grib table 128 information. The key is the parameter number and the value is the short name of the parameter.</li> </ul> @@ -1301,7 +3321,7 @@ short name of the parameter.</li> parameter ids in the format of integer.</p> </td> </tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">integer</span></code></p> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">list of int</p> </td> </tr> </tbody> @@ -1311,6 +3331,22 @@ parameter ids in the format of integer.</p> </div> <div class="section" id="module-disaggregation"> <span id="disaggregation"></span><h3><a class="toc-backref" href="#id14">disaggregation</a><a class="headerlink" href="#module-disaggregation" title="Permalink to this headline">¶</a></h3> +<p>Disaggregation of deaccumulated flux data from an ECMWF model FG field.</p> +<dl class="docutils"> +<dt>Initially the flux data to be concerned are:</dt> +<dd><ul class="first last simple"> +<li>large-scale precipitation</li> +<li>convective precipitation</li> +<li>surface sensible heat flux</li> +<li>surface solar radiation</li> +<li>u stress</li> +<li>v stress</li> +</ul> +</dd> +</dl> +<p>Different versions of disaggregation is provided for rainfall +data (darain, modified linear) and the surface fluxes and +stress data (dapoly, cubic polynomial).</p> <dl class="function"> <dt id="disaggregation.IA3"> <code class="descclassname">disaggregation.</code><code class="descname">IA3</code><span class="sig-paren">(</span><em>g</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/disaggregation.html#IA3"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#disaggregation.IA3" title="Permalink to this definition">¶</a></dt> @@ -1322,7 +3358,7 @@ monotonicity filter is applied to improve the monotonicity properties of the series.</p> <div class="admonition note"> <p class="first admonition-title">Note</p> -<p>Copyright 2017 +<p>(C) Copyright 2017-2019 Sabine Hittmeir, Anne Philipp, Petra Seibert</p> <p class="last">This work is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this license, visit @@ -1333,14 +3369,14 @@ Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</p> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>g</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code>) – Complete data series that will be interpolated having +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>g</strong> (<em>list of float</em>) – Complete data series that will be interpolated having the dimension of the original raw series.</td> </tr> <tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><strong>f</strong> – The interpolated data series with additional subgrid points. Its dimension is equal to the length of the input data series times three.</td> </tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code></td> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">list of float</td> </tr> </tbody> </table> @@ -1368,12 +3404,12 @@ timeseries afterwards.</p> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>alist</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">array</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code>) – List of 4 timespans as 2-dimensional, horizontal fields. +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>alist</strong> (<em>list of array of float</em>) – List of 4 timespans as 2-dimensional, horizontal fields. E.g. [[array_t1], [array_t2], [array_t3], [array_t4]]</td> </tr> <tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><strong>nfield</strong> – Interpolated flux at central point of accumulation timespan.</td> </tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><code class="xref py py-obj docutils literal notranslate"><span class="pre">array</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code></td> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">array of float</td> </tr> </tbody> </table> @@ -1405,12 +3441,12 @@ interpolation of the complete timeseries afterwards.</p> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>alist</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">array</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code>) – List of 4 timespans as 2-dimensional, horizontal fields. +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>alist</strong> (<em>list of array of float</em>) – List of 4 timespans as 2-dimensional, horizontal fields. E.g. [[array_t1], [array_t2], [array_t3], [array_t4]]</td> </tr> <tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><strong>nfield</strong> – Interpolated flux at central point of accumulation timespan.</td> </tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><code class="xref py py-obj docutils literal notranslate"><span class="pre">array</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code></td> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">array of float</td> </tr> </tbody> </table> @@ -1451,7 +3487,7 @@ E.g. [[array_t1], [array_t2], [array_t3], [array_t4]]</td> <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -1470,21 +3506,13 @@ E.g. [[array_t1], [array_t2], [array_t3], [array_t4]]</td> - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'./', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> + <script type="text/javascript" src="_static/jquery.js"></script> + <script type="text/javascript" src="_static/underscore.js"></script> + <script type="text/javascript" src="_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/downloads.html b/documentation/Sphinx/build/html/downloads.html index 2cbcfda..f306954 100644 --- a/documentation/Sphinx/build/html/downloads.html +++ b/documentation/Sphinx/build/html/downloads.html @@ -188,7 +188,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -207,21 +207,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'./', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> + <script type="text/javascript" src="_static/jquery.js"></script> + <script type="text/javascript" src="_static/underscore.js"></script> + <script type="text/javascript" src="_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/downloads/git_repo.html b/documentation/Sphinx/build/html/downloads/git_repo.html index c46a986..f6e2bd4 100644 --- a/documentation/Sphinx/build/html/downloads/git_repo.html +++ b/documentation/Sphinx/build/html/downloads/git_repo.html @@ -187,7 +187,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -206,21 +206,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/downloads/history_changes.html b/documentation/Sphinx/build/html/downloads/history_changes.html index d63eb3b..bda31d1 100644 --- a/documentation/Sphinx/build/html/downloads/history_changes.html +++ b/documentation/Sphinx/build/html/downloads/history_changes.html @@ -187,7 +187,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -206,21 +206,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/downloads/tar_balls.html b/documentation/Sphinx/build/html/downloads/tar_balls.html index fb3cb36..2981558 100644 --- a/documentation/Sphinx/build/html/downloads/tar_balls.html +++ b/documentation/Sphinx/build/html/downloads/tar_balls.html @@ -187,7 +187,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -206,21 +206,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/genindex.html b/documentation/Sphinx/build/html/genindex.html index 562e1d4..361d068 100644 --- a/documentation/Sphinx/build/html/genindex.html +++ b/documentation/Sphinx/build/html/genindex.html @@ -156,13 +156,17 @@ <div class="genindex-jumpbox"> <a href="#A"><strong>A</strong></a> + | <a href="#B"><strong>B</strong></a> | <a href="#C"><strong>C</strong></a> | <a href="#D"><strong>D</strong></a> | <a href="#E"><strong>E</strong></a> + | <a href="#F"><strong>F</strong></a> | <a href="#G"><strong>G</strong></a> | <a href="#I"><strong>I</strong></a> + | <a href="#L"><strong>L</strong></a> | <a href="#M"><strong>M</strong></a> | <a href="#N"><strong>N</strong></a> + | <a href="#O"><strong>O</strong></a> | <a href="#P"><strong>P</strong></a> | <a href="#R"><strong>R</strong></a> | <a href="#S"><strong>S</strong></a> @@ -174,35 +178,89 @@ <h2 id="A">A</h2> <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%; vertical-align: top;"><ul> - <li><a href="api.html#ControlFile.ControlFile.assign_args_to_control">assign_args_to_control() (ControlFile.ControlFile method)</a> + <li><a href="api.html#ControlFile.ControlFile.accmaxstep">accmaxstep (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="api.html#EcFlexpart.EcFlexpart.accmaxstep">(EcFlexpart.EcFlexpart attribute)</a> +</li> + </ul></li> + <li><a href="api.html#ControlFile.ControlFile.acctime">acctime (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="api.html#EcFlexpart.EcFlexpart.acctime">(EcFlexpart.EcFlexpart attribute)</a> +</li> + </ul></li> + <li><a href="api.html#ControlFile.ControlFile.acctype">acctype (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="api.html#EcFlexpart.EcFlexpart.acctype">(EcFlexpart.EcFlexpart attribute)</a> +</li> + </ul></li> + <li><a href="api.html#ControlFile.ControlFile.accuracy">accuracy (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="api.html#EcFlexpart.EcFlexpart.accuracy">(EcFlexpart.EcFlexpart attribute)</a> </li> + <li><a href="api.html#MarsRetrieval.MarsRetrieval.accuracy">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> </ul></td> <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="api.html#ControlFile.ControlFile.addpar">addpar (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="api.html#EcFlexpart.EcFlexpart.addpar">(EcFlexpart.EcFlexpart attribute)</a> +</li> + </ul></li> + <li><a href="api.html#ControlFile.ControlFile.area">area (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="api.html#EcFlexpart.EcFlexpart.area">(EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="api.html#MarsRetrieval.MarsRetrieval.area">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> + <li><a href="api.html#ControlFile.ControlFile.assign_args_to_control">assign_args_to_control() (ControlFile.ControlFile method)</a> +</li> <li><a href="api.html#ControlFile.ControlFile.assign_envs_to_control">assign_envs_to_control() (ControlFile.ControlFile method)</a> </li> </ul></td> </tr></table> +<h2 id="B">B</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="api.html#ControlFile.ControlFile.basetime">basetime (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="api.html#EcFlexpart.EcFlexpart.basetime">(EcFlexpart.EcFlexpart attribute)</a> +</li> + </ul></li> + </ul></td> +</tr></table> + <h2 id="C">C</h2> <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%; vertical-align: top;"><ul> <li><a href="api.html#ControlFile.ControlFile.check_conditions">check_conditions() (ControlFile.ControlFile method)</a> </li> - <li><a href="api.html#ControlFile.ControlFile.check_install_conditions">check_install_conditions() (ControlFile.ControlFile method)</a> + <li><a href="api.html#install.check_install_conditions">check_install_conditions() (in module install)</a> </li> <li><a href="api.html#tools.clean_up">clean_up() (in module tools)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile">ControlFile (class in ControlFile)</a> </li> </ul></td> <td style="width: 33%; vertical-align: top;"><ul> - <li><a href="api.html#ControlFile.ControlFile">ControlFile (class in ControlFile)</a> - - <ul> - <li><a href="api.html#module-ControlFile">(module)</a> + <li><a href="api.html#ControlFile.ControlFile.controlfile">controlfile (ControlFile.ControlFile attribute)</a> </li> - </ul></li> - <li><a href="api.html#GribTools.GribTools.copy">copy() (GribTools.GribTools method)</a> + <li><a href="api.html#module-ControlFile">ControlFile (module)</a> +</li> + <li><a href="api.html#GribUtil.GribUtil.copy_dummy_msg">copy_dummy_msg() (GribUtil.GribUtil method)</a> </li> <li><a href="api.html#EcFlexpart.EcFlexpart.create">create() (EcFlexpart.EcFlexpart method)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.cwc">cwc (ControlFile.ControlFile attribute)</a> </li> </ul></td> </tr></table> @@ -215,14 +273,32 @@ <li><a href="api.html#disaggregation.darain">darain() (in module disaggregation)</a> </li> <li><a href="api.html#MarsRetrieval.MarsRetrieval.data_retrieve">data_retrieve() (MarsRetrieval.MarsRetrieval method)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.dataset">dataset (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="api.html#EcFlexpart.EcFlexpart.dataset">(EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="api.html#MarsRetrieval.MarsRetrieval.dataset">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> + <li><a href="api.html#MarsRetrieval.MarsRetrieval.date">date (MarsRetrieval.MarsRetrieval attribute)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.date_chunk">date_chunk (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="api.html#EcFlexpart.EcFlexpart.dates">dates (EcFlexpart.EcFlexpart attribute)</a> </li> <li><a href="api.html#EcFlexpart.EcFlexpart.deacc_fluxes">deacc_fluxes() (EcFlexpart.EcFlexpart method)</a> </li> </ul></td> <td style="width: 33%; vertical-align: top;"><ul> - <li><a href="api.html#install.delete_convert_build">delete_convert_build() (in module install)</a> + <li><a href="api.html#ControlFile.ControlFile.debug">debug (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="api.html#install.del_convert_build">del_convert_build() (in module install)</a> </li> <li><a href="api.html#UioFiles.UioFiles.delete_files">delete_files() (UioFiles.UioFiles method)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.destination">destination (ControlFile.ControlFile attribute)</a> </li> <li><a href="api.html#module-disaggregation">disaggregation (module)</a> </li> @@ -230,42 +306,128 @@ </li> <li><a href="api.html#get_mars_data.do_retrievement">do_retrievement() (in module get_mars_data)</a> </li> + <li><a href="api.html#ControlFile.ControlFile.dpdeta">dpdeta (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.dtime">dtime (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="api.html#EcFlexpart.EcFlexpart.dtime">(EcFlexpart.EcFlexpart attribute)</a> +</li> + </ul></li> </ul></td> </tr></table> <h2 id="E">E</h2> <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="api.html#ControlFile.ControlFile.ecapi">ecapi (ControlFile.ControlFile attribute)</a> +</li> <li><a href="api.html#EcFlexpart.EcFlexpart">EcFlexpart (class in EcFlexpart)</a> <ul> <li><a href="api.html#module-EcFlexpart">(module)</a> +</li> + </ul></li> + <li><a href="api.html#ControlFile.ControlFile.ecfsdir">ecfsdir (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.ecgid">ecgid (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.ecstorage">ecstorage (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.ectrans">ectrans (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.ecuid">ecuid (ControlFile.ControlFile attribute)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="api.html#ControlFile.ControlFile.end_date">end_date (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.eta">eta (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.etadiff">etadiff (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.etapar">etapar (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="api.html#tools.execute_subprocess">execute_subprocess() (in module tools)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.exedir">exedir (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.expver">expver (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="api.html#EcFlexpart.EcFlexpart.expver">(EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="api.html#MarsRetrieval.MarsRetrieval.expver">(MarsRetrieval.MarsRetrieval attribute)</a> </li> </ul></li> </ul></td> </tr></table> +<h2 id="F">F</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="api.html#UioFiles.UioFiles.files">files (UioFiles.UioFiles attribute)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.flexextractdir">flexextractdir (ControlFile.ControlFile attribute)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="api.html#ControlFile.ControlFile.flexpartdir">flexpartdir (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.format">format (ControlFile.ControlFile attribute)</a> +</li> + </ul></td> +</tr></table> + <h2 id="G">G</h2> <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%; vertical-align: top;"><ul> - <li><a href="api.html#tools.get_cmdline_arguments">get_cmdline_arguments() (in module tools)</a> + <li><a href="api.html#ControlFile.ControlFile.gateway">gateway (ControlFile.ControlFile attribute)</a> </li> - <li><a href="api.html#install.get_install_cmdline_arguments">get_install_cmdline_arguments() (in module install)</a> + <li><a href="api.html#ControlFile.ControlFile.gauss">gauss (ControlFile.ControlFile attribute)</a> </li> - <li><a href="api.html#GribTools.GribTools.get_keys">get_keys() (GribTools.GribTools method)</a> + <li><a href="api.html#ControlFile.ControlFile.gaussian">gaussian (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="api.html#EcFlexpart.EcFlexpart.gaussian">(EcFlexpart.EcFlexpart attribute)</a> </li> - <li><a href="api.html#tools.get_list_as_string">get_list_as_string() (in module tools)</a> + <li><a href="api.html#MarsRetrieval.MarsRetrieval.gaussian">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> + <li><a href="api.html#tools.get_cmdline_args">get_cmdline_args() (in module tools)</a> +</li> + <li><a href="api.html#tools.get_dimensions">get_dimensions() (in module tools)</a> +</li> + <li><a href="api.html#tools.get_informations">get_informations() (in module tools)</a> +</li> + <li><a href="api.html#install.get_install_cmdline_args">get_install_cmdline_args() (in module install)</a> +</li> + <li><a href="api.html#GribUtil.GribUtil.get_keys">get_keys() (GribUtil.GribUtil method)</a> </li> </ul></td> <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="api.html#tools.get_list_as_string">get_list_as_string() (in module tools)</a> +</li> <li><a href="api.html#module-get_mars_data">get_mars_data (module)</a> </li> <li><a href="api.html#get_mars_data.get_mars_data">get_mars_data() (in module get_mars_data)</a> </li> - <li><a href="api.html#GribTools.GribTools">GribTools (class in GribTools)</a> + <li><a href="api.html#EcFlexpart.EcFlexpart.glevelist">glevelist (EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.grib2flexpart">grib2flexpart (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="api.html#GribUtil.GribUtil">GribUtil (class in GribUtil)</a> <ul> - <li><a href="api.html#module-GribTools">(module)</a> + <li><a href="api.html#module-GribUtil">(module)</a> +</li> + </ul></li> + <li><a href="api.html#ControlFile.ControlFile.grid">grid (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="api.html#EcFlexpart.EcFlexpart.grid">(EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="api.html#MarsRetrieval.MarsRetrieval.grid">(MarsRetrieval.MarsRetrieval attribute)</a> </li> </ul></li> </ul></td> @@ -276,22 +438,64 @@ <td style="width: 33%; vertical-align: top;"><ul> <li><a href="api.html#disaggregation.IA3">IA3() (in module disaggregation)</a> </li> - <li><a href="api.html#GribTools.GribTools.index">index() (GribTools.GribTools method)</a> + <li><a href="api.html#GribUtil.GribUtil.index">index() (GribUtil.GribUtil method)</a> </li> - </ul></td> - <td style="width: 33%; vertical-align: top;"><ul> <li><a href="api.html#tools.init128">init128() (in module tools)</a> </li> + <li><a href="api.html#ControlFile.ControlFile.inputdir">inputdir (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="api.html#EcFlexpart.EcFlexpart.inputdir">(EcFlexpart.EcFlexpart attribute)</a> +</li> + </ul></li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> <li><a href="api.html#module-install">install (module)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.install_target">install_target (ControlFile.ControlFile attribute)</a> </li> <li><a href="api.html#install.install_via_gateway">install_via_gateway() (in module install)</a> </li> </ul></td> </tr></table> +<h2 id="L">L</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="api.html#ControlFile.ControlFile.left">left (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.level">level (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="api.html#EcFlexpart.EcFlexpart.level">(EcFlexpart.EcFlexpart attribute)</a> +</li> + </ul></li> + <li><a href="api.html#ControlFile.ControlFile.levelist">levelist (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="api.html#EcFlexpart.EcFlexpart.levelist">(EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="api.html#MarsRetrieval.MarsRetrieval.levelist">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="api.html#MarsRetrieval.MarsRetrieval.levtype">levtype (MarsRetrieval.MarsRetrieval attribute)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.logicals">logicals (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.lower">lower (ControlFile.ControlFile attribute)</a> +</li> + </ul></td> +</tr></table> + <h2 id="M">M</h2> <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="api.html#ControlFile.ControlFile.mailfail">mailfail (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.mailops">mailops (ControlFile.ControlFile attribute)</a> +</li> <li><a href="api.html#get_mars_data.main">main() (in module get_mars_data)</a> <ul> @@ -302,25 +506,45 @@ <li><a href="api.html#submit.main">(in module submit)</a> </li> </ul></li> - <li><a href="api.html#install.make_convert_build">make_convert_build() (in module install)</a> -</li> <li><a href="api.html#tools.make_dir">make_dir() (in module tools)</a> </li> - </ul></td> - <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="api.html#ControlFile.ControlFile.makefile">makefile (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.marsclass">marsclass (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="api.html#EcFlexpart.EcFlexpart.marsclass">(EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="api.html#MarsRetrieval.MarsRetrieval.marsclass">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> <li><a href="api.html#MarsRetrieval.MarsRetrieval">MarsRetrieval (class in MarsRetrieval)</a> <ul> <li><a href="api.html#module-MarsRetrieval">(module)</a> </li> </ul></li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="api.html#ControlFile.ControlFile.maxstep">maxstep (ControlFile.ControlFile attribute)</a> +</li> <li><a href="api.html#install.mk_compilejob">mk_compilejob() (in module install)</a> +</li> + <li><a href="api.html#install.mk_convert_build">mk_convert_build() (in module install)</a> +</li> + <li><a href="api.html#get_mars_data.mk_dates">mk_dates() (in module get_mars_data)</a> </li> <li><a href="api.html#install.mk_env_vars">mk_env_vars() (in module install)</a> </li> <li><a href="api.html#install.mk_job_template">mk_job_template() (in module install)</a> +</li> + <li><a href="api.html#submit.mk_jobscript">mk_jobscript() (in module submit)</a> +</li> + <li><a href="api.html#get_mars_data.mk_server">mk_server() (in module get_mars_data)</a> </li> <li><a href="api.html#install.mk_tarball">mk_tarball() (in module install)</a> +</li> + <li><a href="api.html#EcFlexpart.EcFlexpart.mreq_count">mreq_count (EcFlexpart.EcFlexpart attribute)</a> </li> <li><a href="api.html#tools.my_error">my_error() (in module tools)</a> </li> @@ -332,11 +556,35 @@ <td style="width: 33%; vertical-align: top;"><ul> <li><a href="api.html#tools.none_or_int">none_or_int() (in module tools)</a> </li> - </ul></td> - <td style="width: 33%; vertical-align: top;"><ul> <li><a href="api.html#tools.none_or_str">none_or_str() (in module tools)</a> </li> <li><a href="api.html#tools.normal_exit">normal_exit() (in module tools)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="api.html#ControlFile.ControlFile.number">number (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="api.html#EcFlexpart.EcFlexpart.number">(EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="api.html#MarsRetrieval.MarsRetrieval.number">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> + </ul></td> +</tr></table> + +<h2 id="O">O</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="api.html#ControlFile.ControlFile.omega">omega (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.omegadiff">omegadiff (ControlFile.ControlFile attribute)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="api.html#ControlFile.ControlFile.outputdir">outputdir (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="api.html#EcFlexpart.EcFlexpart.outputfilelist">outputfilelist (EcFlexpart.EcFlexpart attribute)</a> </li> </ul></td> </tr></table> @@ -344,13 +592,21 @@ <h2 id="P">P</h2> <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="api.html#MarsRetrieval.MarsRetrieval.param">param (MarsRetrieval.MarsRetrieval attribute)</a> +</li> + <li><a href="api.html#EcFlexpart.EcFlexpart.params">params (EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="api.html#UioFiles.UioFiles.path">path (UioFiles.UioFiles attribute)</a> +</li> + <li><a href="api.html#UioFiles.UioFiles.pattern">pattern (UioFiles.UioFiles attribute)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.prefix">prefix (ControlFile.ControlFile attribute)</a> +</li> <li><a href="api.html#module-prepare_flexpart">prepare_flexpart (module)</a> </li> <li><a href="api.html#prepare_flexpart.prepare_flexpart">prepare_flexpart() (in module prepare_flexpart)</a> </li> <li><a href="api.html#EcFlexpart.EcFlexpart.prepare_fp_files">prepare_fp_files() (EcFlexpart.EcFlexpart method)</a> -</li> - <li><a href="api.html#MarsRetrieval.MarsRetrieval.print_info">print_info() (MarsRetrieval.MarsRetrieval method)</a> </li> </ul></td> <td style="width: 33%; vertical-align: top;"><ul> @@ -360,6 +616,20 @@ </li> <li><a href="api.html#tools.product">product() (in module tools)</a> </li> + <li><a href="api.html#ControlFile.ControlFile.public">public (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="api.html#EcFlexpart.EcFlexpart.public">(EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="api.html#MarsRetrieval.MarsRetrieval.public">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> + <li><a href="api.html#ControlFile.ControlFile.purefc">purefc (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="api.html#EcFlexpart.EcFlexpart.purefc">(EcFlexpart.EcFlexpart attribute)</a> +</li> + </ul></li> <li><a href="api.html#tools.put_file_to_ecserver">put_file_to_ecserver() (in module tools)</a> </li> </ul></td> @@ -370,9 +640,27 @@ <td style="width: 33%; vertical-align: top;"><ul> <li><a href="api.html#tools.read_ecenv">read_ecenv() (in module tools)</a> </li> + <li><a href="api.html#get_mars_data.remove_old">remove_old() (in module get_mars_data)</a> +</li> + <li><a href="api.html#MarsRetrieval.MarsRetrieval.repres">repres (MarsRetrieval.MarsRetrieval attribute)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.request">request (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.resol">resol (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="api.html#EcFlexpart.EcFlexpart.resol">(EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="api.html#MarsRetrieval.MarsRetrieval.resol">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> </ul></td> <td style="width: 33%; vertical-align: top;"><ul> <li><a href="api.html#EcFlexpart.EcFlexpart.retrieve">retrieve() (EcFlexpart.EcFlexpart method)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.right">right (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.rrint">rrint (ControlFile.ControlFile attribute)</a> </li> </ul></td> </tr></table> @@ -380,12 +668,38 @@ <h2 id="S">S</h2> <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%; vertical-align: top;"><ul> - <li><a href="api.html#GribTools.GribTools.set_keys">set_keys() (GribTools.GribTools method)</a> + <li><a href="api.html#tools.send_mail">send_mail() (in module tools)</a> +</li> + <li><a href="api.html#EcFlexpart.EcFlexpart.server">server (EcFlexpart.EcFlexpart attribute)</a> + + <ul> + <li><a href="api.html#MarsRetrieval.MarsRetrieval.server">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> + <li><a href="api.html#GribUtil.GribUtil.set_keys">set_keys() (GribUtil.GribUtil method)</a> </li> <li><a href="api.html#tools.silent_remove">silent_remove() (in module tools)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.smooth">smooth (ControlFile.ControlFile attribute)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.start_date">start_date (ControlFile.ControlFile attribute)</a> </li> </ul></td> <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="api.html#ControlFile.ControlFile.step">step (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="api.html#MarsRetrieval.MarsRetrieval.step">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> + <li><a href="api.html#ControlFile.ControlFile.stream">stream (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="api.html#EcFlexpart.EcFlexpart.stream">(EcFlexpart.EcFlexpart attribute)</a> +</li> + <li><a href="api.html#MarsRetrieval.MarsRetrieval.stream">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> <li><a href="api.html#module-submit">submit (module)</a> </li> <li><a href="api.html#submit.submit">submit() (in module submit)</a> @@ -398,6 +712,14 @@ <h2 id="T">T</h2> <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="api.html#MarsRetrieval.MarsRetrieval.target">target (MarsRetrieval.MarsRetrieval attribute)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.time">time (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="api.html#MarsRetrieval.MarsRetrieval.time">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> <li><a href="api.html#ControlFile.ControlFile.to_list">to_list() (ControlFile.ControlFile method)</a> </li> </ul></td> @@ -405,6 +727,14 @@ <li><a href="api.html#tools.to_param_id">to_param_id() (in module tools)</a> </li> <li><a href="api.html#module-tools">tools (module)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.type">type (ControlFile.ControlFile attribute)</a> + + <ul> + <li><a href="api.html#MarsRetrieval.MarsRetrieval.type">(MarsRetrieval.MarsRetrieval attribute)</a> +</li> + </ul></li> + <li><a href="api.html#EcFlexpart.EcFlexpart.types">types (EcFlexpart.EcFlexpart attribute)</a> </li> </ul></td> </tr></table> @@ -421,14 +751,22 @@ </ul></td> <td style="width: 33%; vertical-align: top;"><ul> <li><a href="api.html#install.un_tarball">un_tarball() (in module install)</a> +</li> + <li><a href="api.html#ControlFile.ControlFile.upper">upper (ControlFile.ControlFile attribute)</a> </li> </ul></td> </tr></table> <h2 id="W">W</h2> <table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="api.html#ControlFile.ControlFile.wrf">wrf (ControlFile.ControlFile attribute)</a> +</li> + </ul></td> <td style="width: 33%; vertical-align: top;"><ul> <li><a href="api.html#EcFlexpart.EcFlexpart.write_namelist">write_namelist() (EcFlexpart.EcFlexpart method)</a> +</li> + <li><a href="api.html#get_mars_data.write_reqheader">write_reqheader() (in module get_mars_data)</a> </li> </ul></td> </tr></table> @@ -445,7 +783,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -464,21 +802,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'./', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> + <script type="text/javascript" src="_static/jquery.js"></script> + <script type="text/javascript" src="_static/underscore.js"></script> + <script type="text/javascript" src="_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/index.html b/documentation/Sphinx/build/html/index.html index 16bd866..229bd46 100644 --- a/documentation/Sphinx/build/html/index.html +++ b/documentation/Sphinx/build/html/index.html @@ -156,7 +156,7 @@ <div class="section" id="welcome-to-flex-extract-s-user-documentation"> <h1>Welcome to flex_extract’s user documentation!<a class="headerlink" href="#welcome-to-flex-extract-s-user-documentation" title="Permalink to this headline">¶</a></h1> <p>flex_extract is a software to retrieve meteorological fields from the European Centre for Medium-Range Weather Forecasts (ECMWF) Mars archive to server as input files for the FLEXTRA/FLEXPART Atmospheric Transport Modelling system.</p> -<p>All required second party software and libraries used within flex_extract is open source and free of charge.</p> +<p>All third-party software and libraries required by flex_extract are open source and free of charge.</p> <table style="width:100%;"> <tr> <td style="width:200px;height:150px;"> @@ -231,7 +231,11 @@ </table> <p></p><div class="admonition note"> <p class="first admonition-title">Note</p> -<p class="last">License text put in here! Which one?</p> +<p class="last">![][/documentation/Sphinx/source/_static/cc-by-40.png] +This work is licensed under the Creative Commons Attribution 4.0 +International License. To view a copy of this license, visit +<a class="reference external" href="http://creativecommons.org/licenses/by/4.0/">http://creativecommons.org/licenses/by/4.0/</a> or send a letter to +Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</p> </div> <div class="toctree-wrapper compound"> <p class="caption"><span class="caption-text">Table of Contents:</span></p> @@ -249,7 +253,7 @@ <li class="toctree-l2"><a class="reference internal" href="api.html#classes">Classes</a><ul> <li class="toctree-l3"><a class="reference internal" href="api.html#module-ControlFile">ControlFile</a></li> <li class="toctree-l3"><a class="reference internal" href="api.html#module-EcFlexpart">EcFlexpart</a></li> -<li class="toctree-l3"><a class="reference internal" href="api.html#module-GribTools">GribTools</a></li> +<li class="toctree-l3"><a class="reference internal" href="api.html#module-GribUtil">GribUtil</a></li> <li class="toctree-l3"><a class="reference internal" href="api.html#module-MarsRetrieval">MarsRetrieval</a></li> <li class="toctree-l3"><a class="reference internal" href="api.html#module-UioFiles">UioFiles</a></li> </ul> @@ -294,7 +298,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -313,21 +317,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'./', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> + <script type="text/javascript" src="_static/jquery.js"></script> + <script type="text/javascript" src="_static/underscore.js"></script> + <script type="text/javascript" src="_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/installation.html b/documentation/Sphinx/build/html/installation.html index f2c7f32..bcd6ecd 100644 --- a/documentation/Sphinx/build/html/installation.html +++ b/documentation/Sphinx/build/html/installation.html @@ -29,7 +29,7 @@ <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="Requirements" href="installation/requirements.html" /> - <link rel="prev" title="Downloads" href="downloads.html" /> + <link rel="prev" title="History of Changes" href="downloads/history_changes.html" /> <script src="_static/js/modernizr.min.js"></script> @@ -178,7 +178,7 @@ <a href="installation/requirements.html" class="btn btn-neutral float-right" title="Requirements" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> - <a href="downloads.html" class="btn btn-neutral" title="Downloads" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + <a href="downloads/history_changes.html" class="btn btn-neutral" title="History of Changes" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> </div> @@ -187,7 +187,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -206,21 +206,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'./', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> + <script type="text/javascript" src="_static/jquery.js"></script> + <script type="text/javascript" src="_static/underscore.js"></script> + <script type="text/javascript" src="_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/installation/oper_modes.html b/documentation/Sphinx/build/html/installation/oper_modes.html index b111f0d..87d479b 100644 --- a/documentation/Sphinx/build/html/installation/oper_modes.html +++ b/documentation/Sphinx/build/html/installation/oper_modes.html @@ -187,7 +187,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -206,21 +206,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/installation/requirements.html b/documentation/Sphinx/build/html/installation/requirements.html index 7bb2491..c3f3599 100644 --- a/documentation/Sphinx/build/html/installation/requirements.html +++ b/documentation/Sphinx/build/html/installation/requirements.html @@ -187,7 +187,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -206,21 +206,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/installation/test_install.html b/documentation/Sphinx/build/html/installation/test_install.html index c399553..fcfa052 100644 --- a/documentation/Sphinx/build/html/installation/test_install.html +++ b/documentation/Sphinx/build/html/installation/test_install.html @@ -187,7 +187,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -206,21 +206,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/objects.inv b/documentation/Sphinx/build/html/objects.inv index 7f7fb49daf2cebaeb599ad3e7ed2ad1bee74e74a..16345ec8d071988afc8636f6f6c4a5ad11737814 100644 GIT binary patch delta 2381 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 Y|7~9Shh`lssZ1%#4*Oq!eE0J<0Ppy_GXMYp delta 1693 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 Ye)|h|p_#UC|7R6thW?jNNLYFc0Mv>}5C8xG diff --git a/documentation/Sphinx/build/html/program_structure.html b/documentation/Sphinx/build/html/program_structure.html index dc40043..cb73aae 100644 --- a/documentation/Sphinx/build/html/program_structure.html +++ b/documentation/Sphinx/build/html/program_structure.html @@ -188,7 +188,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -207,21 +207,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'./', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> + <script type="text/javascript" src="_static/jquery.js"></script> + <script type="text/javascript" src="_static/underscore.js"></script> + <script type="text/javascript" src="_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/program_structure/prog_components.html b/documentation/Sphinx/build/html/program_structure/prog_components.html index 52ecea2..61eda39 100644 --- a/documentation/Sphinx/build/html/program_structure/prog_components.html +++ b/documentation/Sphinx/build/html/program_structure/prog_components.html @@ -187,7 +187,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -206,21 +206,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/program_structure/prog_flow.html b/documentation/Sphinx/build/html/program_structure/prog_flow.html index 04ccdef..93b08c7 100644 --- a/documentation/Sphinx/build/html/program_structure/prog_flow.html +++ b/documentation/Sphinx/build/html/program_structure/prog_flow.html @@ -187,7 +187,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -206,21 +206,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/program_structure/prog_overview.html b/documentation/Sphinx/build/html/program_structure/prog_overview.html index 8631b1c..1027617 100644 --- a/documentation/Sphinx/build/html/program_structure/prog_overview.html +++ b/documentation/Sphinx/build/html/program_structure/prog_overview.html @@ -187,7 +187,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -206,21 +206,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/py-modindex.html b/documentation/Sphinx/build/html/py-modindex.html index cad8060..bec7bf0 100644 --- a/documentation/Sphinx/build/html/py-modindex.html +++ b/documentation/Sphinx/build/html/py-modindex.html @@ -207,7 +207,7 @@ <tr> <td></td> <td> - <a href="api.html#module-GribTools"><code class="xref">GribTools</code></a></td><td> + <a href="api.html#module-GribUtil"><code class="xref">GribUtil</code></a></td><td> <em></em></td></tr> <tr class="pcap"><td></td><td> </td><td></td></tr> <tr class="cap" id="cap-i"><td></td><td> @@ -270,7 +270,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -289,21 +289,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'./', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> + <script type="text/javascript" src="_static/jquery.js"></script> + <script type="text/javascript" src="_static/underscore.js"></script> + <script type="text/javascript" src="_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/search.html b/documentation/Sphinx/build/html/search.html index a59385d..f7c356e 100644 --- a/documentation/Sphinx/build/html/search.html +++ b/documentation/Sphinx/build/html/search.html @@ -174,7 +174,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -193,22 +193,14 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'./', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> - <script type="text/javascript" src="_static/searchtools.js"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> + <script type="text/javascript" src="_static/jquery.js"></script> + <script type="text/javascript" src="_static/underscore.js"></script> + <script type="text/javascript" src="_static/doctools.js"></script> + <script type="text/javascript" src="_static/searchtools.js"></script> + diff --git a/documentation/Sphinx/build/html/searchindex.js b/documentation/Sphinx/build/html/searchindex.js index 20080a1..147bc69 100644 --- a/documentation/Sphinx/build/html/searchindex.js +++ b/documentation/Sphinx/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["api","downloads","downloads/git_repo","downloads/history_changes","downloads/tar_balls","index","installation","installation/oper_modes","installation/requirements","installation/test_install","program_structure","program_structure/prog_components","program_structure/prog_flow","program_structure/prog_overview","support","support/faq","support/known_bugs_issues","support/mailing_list","support/ticket_system","user_guide","user_guide/control_templates","user_guide/how_to"],envversion:54,filenames:["api.rst","downloads.rst","downloads/git_repo.rst","downloads/history_changes.rst","downloads/tar_balls.rst","index.rst","installation.rst","installation/oper_modes.rst","installation/requirements.rst","installation/test_install.rst","program_structure.rst","program_structure/prog_components.rst","program_structure/prog_flow.rst","program_structure/prog_overview.rst","support.rst","support/faq.rst","support/known_bugs_issues.rst","support/mailing_list.rst","support/ticket_system.rst","user_guide.rst","user_guide/control_templates.rst","user_guide/how_to.rst"],objects:{"":{ControlFile:[0,0,0,"-"],EcFlexpart:[0,0,0,"-"],GribTools:[0,0,0,"-"],MarsRetrieval:[0,0,0,"-"],UioFiles:[0,0,0,"-"],disaggregation:[0,0,0,"-"],get_mars_data:[0,0,0,"-"],install:[0,0,0,"-"],prepare_flexpart:[0,0,0,"-"],submit:[0,0,0,"-"],tools:[0,0,0,"-"]},"ControlFile.ControlFile":{assign_args_to_control:[0,2,1,""],assign_envs_to_control:[0,2,1,""],check_conditions:[0,2,1,""],check_install_conditions:[0,2,1,""],to_list:[0,2,1,""]},"EcFlexpart.EcFlexpart":{create:[0,2,1,""],deacc_fluxes:[0,2,1,""],prepare_fp_files:[0,2,1,""],process_output:[0,2,1,""],retrieve:[0,2,1,""],write_namelist:[0,2,1,""]},"GribTools.GribTools":{copy:[0,2,1,""],get_keys:[0,2,1,""],index:[0,2,1,""],set_keys:[0,2,1,""]},"MarsRetrieval.MarsRetrieval":{data_retrieve:[0,2,1,""],display_info:[0,2,1,""],print_info:[0,2,1,""],print_infodata_csv:[0,2,1,""]},"UioFiles.UioFiles":{delete_files:[0,2,1,""]},ControlFile:{ControlFile:[0,1,1,""]},EcFlexpart:{EcFlexpart:[0,1,1,""]},GribTools:{GribTools:[0,1,1,""]},MarsRetrieval:{MarsRetrieval:[0,1,1,""]},UioFiles:{UioFiles:[0,1,1,""]},disaggregation:{IA3:[0,3,1,""],dapoly:[0,3,1,""],darain:[0,3,1,""]},get_mars_data:{do_retrievement:[0,3,1,""],get_mars_data:[0,3,1,""],main:[0,3,1,""]},install:{delete_convert_build:[0,3,1,""],get_install_cmdline_arguments:[0,3,1,""],install_via_gateway:[0,3,1,""],main:[0,3,1,""],make_convert_build:[0,3,1,""],mk_compilejob:[0,3,1,""],mk_env_vars:[0,3,1,""],mk_job_template:[0,3,1,""],mk_tarball:[0,3,1,""],un_tarball:[0,3,1,""]},prepare_flexpart:{main:[0,3,1,""],prepare_flexpart:[0,3,1,""]},submit:{main:[0,3,1,""],submit:[0,3,1,""]},tools:{clean_up:[0,3,1,""],get_cmdline_arguments:[0,3,1,""],get_list_as_string:[0,3,1,""],init128:[0,3,1,""],make_dir:[0,3,1,""],my_error:[0,3,1,""],none_or_int:[0,3,1,""],none_or_str:[0,3,1,""],normal_exit:[0,3,1,""],product:[0,3,1,""],put_file_to_ecserver:[0,3,1,""],read_ecenv:[0,3,1,""],silent_remove:[0,3,1,""],submit_job_to_ecserver:[0,3,1,""],to_param_id:[0,3,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:function"},terms:{"boolean":0,"class":5,"default":0,"final":0,"float":0,"function":0,"int":0,"new":0,"public":0,"return":0,"short":0,"switch":0,"true":0,For:0,Its:0,The:0,Then:0,Used:0,Uses:0,_expand:0,_templat:0,abcd:0,about:0,abov:0,access:0,accumlu:0,accumul:0,accuraci:0,actual:0,adapt:0,adaptaion:[],add:0,adding:0,addit:0,addition:0,addpar:0,address:0,advanc:0,afterward:0,algorithm:0,alist:0,all:[0,5],alpabet:0,alreadi:0,also:0,ann:0,anoth:0,api:[0,5],appli:0,applic:0,arbitrari:0,arcad:[],archiv:5,area:0,arg:0,argument:0,argumentpars:[],arrai:0,array_t1:0,array_t2:0,array_t3:0,array_t4:0,articl:0,assign:0,assign_args_to_control:0,assign_envs_to_control:0,associ:0,asteroid:[],atmospher:5,attribut:0,author:0,auto:5,ball:5,base:0,beck:0,befor:0,binari:0,book:[],box:0,bug:5,build:0,call:0,can:0,cca:0,centr:5,central:0,chang:5,changehistori:[],charact:0,charg:5,check:0,check_condit:0,check_install_condit:0,chunk:0,clean:0,clean_up:0,code:0,coin:[],collect:0,combin:0,command:0,commandlin:0,common:0,compil:0,complet:0,compon:5,concaten:0,concatenate_sign:0,condit:0,connect:0,conserv:0,construct:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],contain:0,content:[0,5],control:[0,5],controlfil:5,convent:0,convers:0,convert2:0,convert:0,copi:0,copyright:0,correctli:0,correspond:0,coupl:0,creat:0,creativ:0,creativecommon:0,csv:0,cubic:0,current:0,dapoli:0,darain:0,data:0,data_retriev:0,dataset:0,date:0,datechunk:0,datetim:0,deacc_flux:0,deaccumul:0,debug:0,decid:0,decis:0,decompos:0,defin:0,delet:0,delete_convert_build:0,delete_fil:0,delta_t:0,depend:0,describ:[1,10],descript:0,destin:0,detail:0,develop:0,dict:[],dictionari:0,differ:[0,5],dimens:0,dimension:0,directli:0,directori:0,disaggreg:5,disaggregationreg:[],dispers:0,displai:0,display_info:0,divid:0,do_retriev:0,doc:[],doe:0,done:0,download:5,draw:[],dure:0,each:0,ecaccess:0,ecd:0,ecflexpart:5,ecgat:0,ecgid:0,ecmwf:[0,5],ecmwf_env:0,ecmwfdatadir:0,ecmwfdataserv:0,ecmwfservic:0,ecmwv:[],ecstorag:0,ectran:0,ecuid:0,element:0,email:0,empti:0,end:0,entri:0,env:0,environ:0,environment:0,equal:0,error:0,european:5,everyth:0,exampl:0,except:0,execut:0,exedir:0,exist:0,exit:0,express:0,expver:0,extens:0,extra:0,extract:0,fail:0,fals:0,faq:5,field:[0,5],file:[0,5],filemod:0,filenam:0,filename_in:0,filepath:0,filter:0,flex_extract:[0,1,10],flexpart:[0,5],flexpart_root_script:0,flextra:5,flow:5,flux:0,follow:0,forecast:5,format:0,fort:0,fortran:0,found:0,fp_root:0,free:5,from:[0,5],fromfil:0,full:0,gate:0,gatewai:0,gaussian:0,gener:5,geometr:0,geoscientif:0,get:0,get_cmdline_argu:0,get_install_cmdline_argu:0,get_kei:0,get_list_as_str:0,get_mars_data:5,git:5,github:[],give:0,given:0,goe:0,going:0,grib2:0,grib:0,gribtool:5,grid:0,group:0,guid:5,haimberg:0,handl:0,has:0,have:0,help:[],here:[0,5],histori:5,hittmeir:0,horizont:0,hour:0,how:5,http:0,ia3:0,identif:0,identificationkeyword:0,ids:0,idx:0,iid:0,improv:0,includ:0,index:[0,5],index_fil:0,index_kei:0,indic:0,inform:0,init128:0,initialis:0,input:[0,5],inputdir:0,inputfil:0,instal:5,install_via_gatewai:0,instanc:0,instead:0,instruct:0,integ:0,integr:0,intermedi:0,intern:0,interpol:0,interv:0,ipar:0,issu:5,iter:0,its:0,itself:0,jame:0,job:0,jobfil:0,jobnam:0,jtemplat:0,june:0,just:0,keep:0,kei:0,keynam:0,keyvalu:0,keyword:0,known:5,kwd:0,lagrangian:0,learn:[],length:0,leopold:0,letter:0,levelist:0,levtyp:0,librari:5,licens:[0,5],line:0,linear:0,linux:[],list:[0,5],list_obj:0,local:0,mac:[],machin:0,made:0,mail:[0,5],main:0,make_convert_build:0,make_dir:0,makefil:0,manipul:0,mar:[0,5],march:0,marsclass:0,marsretriev:5,matter:0,maxb:0,maxim:0,maxl:0,mdpdeta:0,mean:0,medium:5,meet:0,member:0,mention:0,messag:0,meta:0,metadiff:0,metapar:0,meteorolog:5,method:0,mgauss:0,might:0,migrat:0,mk_compilejob:0,mk_env_var:0,mk_job_templ:0,mk_tarbal:0,mlevel:0,mlevelist:0,mnauf:0,mod:0,mode:[0,5],model:[0,5],modif:0,modifi:0,modul:5,momega:0,momegadiff:0,monoton:0,more:0,mountain:0,move:0,msmooth:0,my_error:0,name:0,namelist:0,namespac:0,necessari:0,need:0,neg:0,nfield:0,non:0,none:0,none_or_int:0,none_or_str:0,normal_exit:0,note:[],noth:[],notif:0,notifi:0,novemb:0,number:0,obj:[],object:0,one:[0,5],onli:0,open:[0,5],oper:5,option:[0,1],order:0,org:0,origin:0,originla:[],other:0,otherwis:0,out:0,output:0,over:0,overview:5,overwrit:0,page:5,par:0,param:0,paramet:0,parameternam:0,parti:5,particl:0,pass:0,path:0,pattern:0,per:0,perform:0,period:0,petra:0,philipp:0,point:0,polynomi:0,porgram:5,posit:0,postprocess:0,ppid:0,prepar:0,prepare_flexpart:5,prepare_fp_fil:0,primit:[],print:0,print_info:0,print_infodata_csv:0,problem:0,process:0,process_output:0,prod:0,product:0,program:[0,5],properli:0,properti:0,provid:0,pure:[],put:[0,5],put_file_to_ecserv:0,python:0,quantiti:0,queue:0,quick:[],rainfal:0,rang:[0,5],raw:0,rcode:0,read:0,read_ecenv:0,readi:0,reason:0,reconstruct:0,refer:0,regular:0,releas:[],relev:0,remot:0,remov:0,repeat:0,replac:[],report:0,repositori:5,repr:0,repres:0,request:0,request_numb:0,requir:5,resol:0,rest:0,result:0,retriev:[0,5],return_list:0,rla0:0,rla1:0,rlo0:0,rlo1:0,root:0,sabin:0,same:0,sampl:0,scheme:0,script:0,search:5,second:5,see:0,seibert:0,select:0,selectwher:0,send:0,sent:0,sepeart:0,seper:0,seri:0,server:[0,5],set:0,set_kei:0,shell:0,should:0,silent_remov:0,simul:0,sinc:0,singl:0,size:[],smaller:0,smasher:[],softwar:[0,5],solut:0,some:[],sort:0,sourc:[0,5],specif:0,specifi:0,sprite:[],src_path:0,standard:0,start:0,state:0,statement:0,step:0,steprang:0,stop:0,storag:0,store:0,str_of_list:0,stream:0,stress:0,strict:0,string:0,structur:5,sub:0,subgrid:0,submiss:0,submit:5,submit_job_to_ecserv:0,subprocess:0,success:0,support:5,surfac:0,system:5,tabl:0,table128:0,take:0,taken:0,tar:[0,5],tarbal:0,tarball_path:0,target:0,temp:0,templat:[0,5],temporari:0,test:[0,5],text:5,thei:0,them:0,thi:0,those:0,three:0,through:0,ticket:5,time:0,timeseri:0,timespan:0,to_list:0,to_param_id:0,tool:5,transfer:0,transform:0,transport:5,trigger:0,tupl:0,two:0,type:0,udoc:0,uiofil:5,un_tarbal:0,under:[0,1,2,3,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],uniqu:0,univers:0,usa:0,usag:[],use:5,used:[0,5],user:0,using:0,util:0,valu:0,variabl:0,version:0,via:0,vienna:0,view:0,visit:0,warn:0,weather:5,web:0,websit:0,well:0,were:0,what:[],where:0,wherekeynam:0,wherekeyvalu:0,which:[0,5],whole:0,wiki:0,wil:0,window:[],within:[0,5],without:0,word:0,work:0,write:0,write_namelist:0,written:0,yield:0,yyyymmdd:0},titles:["Auto Generated Documentation","Downloads","Git Repository","History of Changes","Download tar-balls","Welcome to flex_extract\u2019s user documentation!","Installation","Operating modes","Requirements","Installation test","Program Structure","Program Components","Program Flow","Program Overview","Support","FAQ - Frequently asked questions","Known Bugs and Issues","Mailing Lists","Ticket System","User Guide","CONTROL-file templates","How to use flex_extract"],titleterms:{"class":0,ask:15,auto:0,ball:4,bug:16,chang:3,compon:11,content:[],control:20,controlfil:0,disaggreg:0,document:[0,5],download:[1,4],ecflexpart:0,faq:15,file:20,flex_extract:[5,21],flow:12,frequent:15,gener:0,get_mars_data:0,git:2,gribtool:0,guid:19,histori:3,how:21,indic:5,instal:[0,6,9],issu:16,known:16,list:17,mail:17,marsretriev:0,mode:7,modul:0,oper:7,overview:13,porgram:0,prepare_flexpart:0,program:[10,11,12,13],pure:[],question:15,repositori:2,requir:8,rest:[],structur:10,submit:0,support:14,system:18,tabl:5,tar:4,templat:20,test:9,ticket:18,tool:0,uiofil:0,usag:[],use:21,user:[5,19],welcom:5}}) \ No newline at end of file +Search.setIndex({docnames:["api","downloads","downloads/git_repo","downloads/history_changes","downloads/tar_balls","index","installation","installation/oper_modes","installation/requirements","installation/test_install","program_structure","program_structure/prog_components","program_structure/prog_flow","program_structure/prog_overview","support","support/faq","support/known_bugs_issues","support/mailing_list","support/ticket_system","user_guide","user_guide/control_templates","user_guide/how_to"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.todo":1,"sphinx.ext.viewcode":1,sphinx:54},filenames:["api.rst","downloads.rst","downloads/git_repo.rst","downloads/history_changes.rst","downloads/tar_balls.rst","index.rst","installation.rst","installation/oper_modes.rst","installation/requirements.rst","installation/test_install.rst","program_structure.rst","program_structure/prog_components.rst","program_structure/prog_flow.rst","program_structure/prog_overview.rst","support.rst","support/faq.rst","support/known_bugs_issues.rst","support/mailing_list.rst","support/ticket_system.rst","user_guide.rst","user_guide/control_templates.rst","user_guide/how_to.rst"],objects:{"":{ControlFile:[0,0,0,"-"],EcFlexpart:[0,0,0,"-"],GribUtil:[0,0,0,"-"],MarsRetrieval:[0,0,0,"-"],UioFiles:[0,0,0,"-"],disaggregation:[0,0,0,"-"],get_mars_data:[0,0,0,"-"],install:[0,0,0,"-"],prepare_flexpart:[0,0,0,"-"],submit:[0,0,0,"-"],tools:[0,0,0,"-"]},"ControlFile.ControlFile":{"public":[0,2,1,""],accmaxstep:[0,2,1,""],acctime:[0,2,1,""],acctype:[0,2,1,""],accuracy:[0,2,1,""],addpar:[0,2,1,""],area:[0,2,1,""],assign_args_to_control:[0,3,1,""],assign_envs_to_control:[0,3,1,""],basetime:[0,2,1,""],check_conditions:[0,3,1,""],controlfile:[0,2,1,""],cwc:[0,2,1,""],dataset:[0,2,1,""],date_chunk:[0,2,1,""],debug:[0,2,1,""],destination:[0,2,1,""],dpdeta:[0,2,1,""],dtime:[0,2,1,""],ecapi:[0,2,1,""],ecfsdir:[0,2,1,""],ecgid:[0,2,1,""],ecstorage:[0,2,1,""],ectrans:[0,2,1,""],ecuid:[0,2,1,""],end_date:[0,2,1,""],eta:[0,2,1,""],etadiff:[0,2,1,""],etapar:[0,2,1,""],exedir:[0,2,1,""],expver:[0,2,1,""],flexextractdir:[0,2,1,""],flexpartdir:[0,2,1,""],format:[0,2,1,""],gateway:[0,2,1,""],gauss:[0,2,1,""],gaussian:[0,2,1,""],grib2flexpart:[0,2,1,""],grid:[0,2,1,""],inputdir:[0,2,1,""],install_target:[0,2,1,""],left:[0,2,1,""],level:[0,2,1,""],levelist:[0,2,1,""],logicals:[0,2,1,""],lower:[0,2,1,""],mailfail:[0,2,1,""],mailops:[0,2,1,""],makefile:[0,2,1,""],marsclass:[0,2,1,""],maxstep:[0,2,1,""],number:[0,2,1,""],omega:[0,2,1,""],omegadiff:[0,2,1,""],outputdir:[0,2,1,""],prefix:[0,2,1,""],purefc:[0,2,1,""],request:[0,2,1,""],resol:[0,2,1,""],right:[0,2,1,""],rrint:[0,2,1,""],smooth:[0,2,1,""],start_date:[0,2,1,""],step:[0,2,1,""],stream:[0,2,1,""],time:[0,2,1,""],to_list:[0,3,1,""],type:[0,2,1,""],upper:[0,2,1,""],wrf:[0,2,1,""]},"EcFlexpart.EcFlexpart":{"public":[0,2,1,""],accmaxstep:[0,2,1,""],acctime:[0,2,1,""],acctype:[0,2,1,""],accuracy:[0,2,1,""],addpar:[0,2,1,""],area:[0,2,1,""],basetime:[0,2,1,""],create:[0,3,1,""],dataset:[0,2,1,""],dates:[0,2,1,""],deacc_fluxes:[0,3,1,""],dtime:[0,2,1,""],expver:[0,2,1,""],gaussian:[0,2,1,""],glevelist:[0,2,1,""],grid:[0,2,1,""],inputdir:[0,2,1,""],level:[0,2,1,""],levelist:[0,2,1,""],marsclass:[0,2,1,""],mreq_count:[0,2,1,""],number:[0,2,1,""],outputfilelist:[0,2,1,""],params:[0,2,1,""],prepare_fp_files:[0,3,1,""],process_output:[0,3,1,""],purefc:[0,2,1,""],resol:[0,2,1,""],retrieve:[0,3,1,""],server:[0,2,1,""],stream:[0,2,1,""],types:[0,2,1,""],write_namelist:[0,3,1,""]},"GribUtil.GribUtil":{copy_dummy_msg:[0,3,1,""],get_keys:[0,3,1,""],index:[0,3,1,""],set_keys:[0,3,1,""]},"MarsRetrieval.MarsRetrieval":{"public":[0,2,1,""],accuracy:[0,2,1,""],area:[0,2,1,""],data_retrieve:[0,3,1,""],dataset:[0,2,1,""],date:[0,2,1,""],display_info:[0,3,1,""],expver:[0,2,1,""],gaussian:[0,2,1,""],grid:[0,2,1,""],levelist:[0,2,1,""],levtype:[0,2,1,""],marsclass:[0,2,1,""],number:[0,2,1,""],param:[0,2,1,""],print_infodata_csv:[0,3,1,""],repres:[0,2,1,""],resol:[0,2,1,""],server:[0,2,1,""],step:[0,2,1,""],stream:[0,2,1,""],target:[0,2,1,""],time:[0,2,1,""],type:[0,2,1,""]},"UioFiles.UioFiles":{delete_files:[0,3,1,""],files:[0,2,1,""],path:[0,2,1,""],pattern:[0,2,1,""]},ControlFile:{ControlFile:[0,1,1,""]},EcFlexpart:{EcFlexpart:[0,1,1,""]},GribUtil:{GribUtil:[0,1,1,""]},MarsRetrieval:{MarsRetrieval:[0,1,1,""]},UioFiles:{UioFiles:[0,1,1,""]},disaggregation:{IA3:[0,4,1,""],dapoly:[0,4,1,""],darain:[0,4,1,""]},get_mars_data:{do_retrievement:[0,4,1,""],get_mars_data:[0,4,1,""],main:[0,4,1,""],mk_dates:[0,4,1,""],mk_server:[0,4,1,""],remove_old:[0,4,1,""],write_reqheader:[0,4,1,""]},install:{check_install_conditions:[0,4,1,""],del_convert_build:[0,4,1,""],get_install_cmdline_args:[0,4,1,""],install_via_gateway:[0,4,1,""],main:[0,4,1,""],mk_compilejob:[0,4,1,""],mk_convert_build:[0,4,1,""],mk_env_vars:[0,4,1,""],mk_job_template:[0,4,1,""],mk_tarball:[0,4,1,""],un_tarball:[0,4,1,""]},prepare_flexpart:{main:[0,4,1,""],prepare_flexpart:[0,4,1,""]},submit:{main:[0,4,1,""],mk_jobscript:[0,4,1,""],submit:[0,4,1,""]},tools:{clean_up:[0,4,1,""],execute_subprocess:[0,4,1,""],get_cmdline_args:[0,4,1,""],get_dimensions:[0,4,1,""],get_informations:[0,4,1,""],get_list_as_string:[0,4,1,""],init128:[0,4,1,""],make_dir:[0,4,1,""],my_error:[0,4,1,""],none_or_int:[0,4,1,""],none_or_str:[0,4,1,""],normal_exit:[0,4,1,""],product:[0,4,1,""],put_file_to_ecserver:[0,4,1,""],read_ecenv:[0,4,1,""],send_mail:[0,4,1,""],silent_remove:[0,4,1,""],submit_job_to_ecserver:[0,4,1,""],to_param_id:[0,4,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","attribute","Python attribute"],"3":["py","method","Python method"],"4":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:class","2":"py:attribute","3":"py:method","4":"py:function"},terms:{"24h":0,"boolean":0,"class":5,"default":0,"final":0,"float":0,"function":0,"import":0,"int":0,"new":0,"public":0,"return":0,"short":0,"switch":0,"true":0,"try":0,Dps:0,For:0,Its:0,The:0,Then:0,There:0,These:0,Used:0,Uses:0,__init__:[],__str__:[],_config:0,_expand:0,_list_fil:[],_static:5,_templat:0,abcd:0,abl:0,about:0,abov:0,access:0,accmaxstep:0,acctim:0,acctyp:0,accumlu:0,accumul:0,accuraci:0,actual:0,adapt:0,add:0,adding:0,addit:0,addition:0,addpar:0,address:0,advanc:0,after:0,afterward:0,algorithm:0,alist:0,all:[0,5],allow:0,alpabet:0,alreadi:0,also:0,analysi:0,ani:0,ann:0,anoth:0,api:[0,5],appli:0,applic:0,arbitrari:0,archiv:[0,5],area:0,arg:0,argument:0,arrai:0,array_t1:0,array_t2:0,array_t3:0,array_t4:0,articl:0,assign:0,assign_args_to_control:0,assign_envs_to_control:0,associ:0,atmospher:5,attribut:[0,5],author:0,auto:5,avail:0,ball:[0,5],base:0,basetim:0,basic:0,beck:0,befor:0,begin:0,between:0,binari:0,bit:0,blank:0,both:0,boundari:0,box:[0,5],bug:5,build:0,bunch:0,calcul:0,call:0,can:0,carri:0,cca:0,centr:5,central:0,chang:5,charact:0,character:0,characteris:0,charg:5,check:0,check_condit:0,check_install_condit:0,chosen:0,chunk:0,clean:0,clean_up:0,clist:0,cloud:0,cmd_list:0,code:0,collect:0,column:0,combin:0,comma:0,command:0,commandlin:0,common:[0,5],compil:0,complet:0,compon:[0,5],concaten:0,concatenate_sign:0,concern:0,condit:0,configur:0,connect:0,conserv:0,consist:0,construct:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],contain:0,content:[0,5],continu:0,control:[0,5],controlfil:5,convect:0,convent:0,convers:0,convert2:0,convert:0,copi:[0,5],copy_dummy_msg:0,copyright:0,correct:0,correctli:0,correspond:0,counter:0,coupl:0,creat:0,creativ:[0,5],creativecommon:[0,5],csv:0,cubic:0,current:0,cwc:0,dai:0,dapoli:0,darain:0,data:0,data_retriev:0,dataset:0,date:0,date_chunk:0,datechunk:0,datetim:0,deacc_flux:0,deaccumul:0,debug:0,decid:0,decis:0,decompos:0,defin:0,definit:0,del_convert_build:0,delet:0,delete_fil:0,delta_t:0,denot:0,depend:0,deprec:0,desccript:[],describ:[1,10],descript:0,desir:0,destin:0,detail:0,determin:0,develop:0,diagnost:0,dict:0,dictionari:0,differ:[0,5],dimens:0,dimension:0,direct:0,directli:0,directori:0,disaggegr:0,disaggreg:5,dispers:0,displai:0,display_info:0,distinct:0,divers:0,divid:0,do_retriev:0,doe:0,doing:0,done:0,download:5,dpdeta:0,drive:0,dtime:0,dure:0,each:0,eastern:0,ecaccess:0,ecapi:0,ecd:0,ecf:0,ecflexpart:5,ecfsdir:0,ecgat:0,ecgid:0,ecmwf:[0,5],ecmwf_env:0,ecmwfdataserv:0,ecmwfservic:0,econdemand:0,ecstorag:0,ectmp:0,ectran:0,ecuid:0,either:0,element:0,email:0,empti:0,end:0,end_dat:0,ensembl:0,entri:0,env:0,environ:0,environment:0,equal:0,equat:0,error:0,error_msg:0,eta:0,etadiff:0,etadot:0,etapar:0,european:5,everyth:0,exact:0,exampl:0,except:0,execut:0,execute_subprocess:0,exedir:0,exist:0,exit:0,expect:0,express:0,expver:0,extens:0,extract:0,fail:0,fals:0,faq:5,field:[0,5],file1:0,file2:0,file:[0,5],filemod:0,filenam:0,filename_in:0,filepath:0,filter:0,first:0,fit:0,flex_extract:[0,1,10],flexextractdir:0,flexpart:[0,5],flexpartdir:0,flextra:[0,5],flow:[0,5],flux:0,follow:0,forecast:[0,5],format:0,fort:0,fortran:0,found:0,fp_root:0,free:5,from:[0,5],fromfil:0,full:0,further:0,gate:0,gatewai:0,gauss:0,gaussian:0,gener:5,generel:0,geometr:0,geoscientif:0,get:0,get_cmdline_arg:0,get_dimens:0,get_inform:0,get_install_cmdline_arg:0,get_kei:0,get_list_as_str:0,get_mars_data:5,gfortran:0,git:5,give:0,given:0,glevelist:0,goe:0,going:0,grb:0,grib1:0,grib2:0,grib2flexpart:0,grib:0,gribtool:[],gributil:5,grid:0,group:0,guid:5,haimberg:0,half:0,handl:0,has:0,have:0,header:0,heat:0,help:0,helper:[],here:0,histori:5,hittmeir:0,horizont:0,hour:0,how:5,http:[0,5],ia3:0,ice:0,identif:0,identifi:0,identificationkeyword:0,idirectionincrementindegre:0,ids:0,idx:0,iid:0,improv:0,index:[0,5],index_fil:0,index_kei:0,index_v:0,indic:0,individu:0,info:0,inform:0,init128:0,init:0,initi:0,initialis:0,input:[0,5],inputdir:0,inputfil:0,instal:5,install_target:0,install_via_gatewai:0,instanc:0,instead:0,instruct:0,integ:0,integr:0,interfac:0,intermedi:0,intern:[0,5],interpol:0,interv:0,ipar:0,issu:5,iter:0,its:0,itself:0,jame:0,jdirectionincrementindegre:0,job:0,job_fil:0,job_id:0,jobfil:0,jobnam:0,jtemplat:0,june:0,just:0,keep:0,kei:0,keynam:0,keyvalu:0,keyword:0,kind:0,known:5,korn:0,kwd:0,lagrangian:0,larg:0,last:0,lat:0,later:0,latitu:0,latitud:0,latitudeoffirstgridpointindegre:0,latitudeoflastgridpointindegre:0,left:0,length:0,leopold:0,letter:[0,5],level:0,levelist:0,levtyp:0,librari:5,licens:[0,5],like:0,line:0,linear:0,liquid:0,list:[0,5],list_obj:0,litt:[],load:0,local:0,locat:0,log:0,logic:0,lon:0,longer:0,longitud:0,longitudeoffirstgridpointindegre:0,longitudeoflastgridpointindegre:0,look:0,lower:0,machin:0,made:0,mail:[0,5],mailfail:0,mailop:0,main:0,make_dir:0,makefil:0,manipul:0,mar:[0,5],march:0,mars_request:0,marsclass:0,marsfil:0,marsretriev:5,match:0,matter:0,maxb:0,maxim:0,maximum:0,maxl:0,maxstep:0,mdpdeta:0,mean:0,medium:5,meet:0,member:0,memberst:0,mention:0,messag:0,meta:0,metadiff:0,metapar:0,meteorolog:[0,5],method:0,mgauss:0,might:0,migrat:0,minut:0,missingvalu:0,mk_compilejob:0,mk_convert_build:0,mk_date:0,mk_env_var:0,mk_job_templ:0,mk_jobscript:0,mk_server:0,mk_tarbal:0,mlevel:0,mlevelist:0,mnauf:0,mod:0,mode:[0,5],model:[0,5],modif:0,modifi:0,modul:5,momega:0,momegadiff:0,monoton:0,more:0,most:0,mostli:0,mountain:[0,5],move:0,mreq_count:0,msmooth:0,multipl:0,my_error:0,name:0,namelist:0,namespac:0,necessari:0,need:0,neg:0,nfield:0,non:0,none:0,none_or_int:0,none_or_str:0,normal_exit:0,northern:0,notif:0,notifi:0,novemb:0,number:0,numpi:0,obj:[],object:0,observ:0,occur:0,off:0,old:0,omega:0,omegadiff:0,one:0,onli:0,open:[0,5],oper:[0,5],option:[0,1],order:0,org:[0,5],origin:0,other:0,otherwis:0,out:0,output:0,outputdir:0,outputfilelist:0,over:0,overal:0,overview:5,overwrit:0,overwritten:0,page:5,par:0,param:0,paramet:0,parameternam:0,part:0,parti:5,particl:0,pass:0,path:0,path_flexextract_dir:0,path_fortran_src:0,path_input_dir:0,pattern:0,per:0,perform:0,period:0,petra:0,philipp:0,place:0,png:5,point:0,polynomi:0,porgram:5,posit:0,possibl:0,post:0,postprocess:0,ppid:0,precipit:0,prefix:0,prepar:0,prepare_flexpart:5,prepare_fp_fil:0,preprocess:0,print:0,print_infodata_csv:0,problem:0,process:0,process_output:0,prod:0,product:0,program:[0,5],properli:0,properti:0,provid:0,pure:0,purefc:0,purpos:0,put:0,put_file_to_ecserv:0,python:0,quantiti:0,queue:0,radiat:0,rainfal:0,rang:[0,5],raw:0,read:0,read_ecenv:0,readi:0,reason:0,reconstruct:0,refer:0,regular:0,relev:0,remain:0,remot:0,remov:0,remove_old:0,repeat:0,report:0,repositori:5,repr:0,repres:0,represent:0,request:0,request_numb:0,requir:[0,5],resol:0,rest:0,result:0,retriev:[0,5],return_list:0,revtriev:0,right:0,rla0:0,rla1:0,rlo0:0,rlo1:0,root:0,rrint:0,run:0,sabin:0,same:0,sampl:0,scale:0,scheme:0,script:0,search:5,see:0,seibert:0,select:0,selectwher:0,send:[0,5],send_mail:0,sensibl:0,sent:0,sepeart:0,seper:0,seri:0,server:[0,5],set:0,set_kei:0,shell:0,should:0,silent_remov:0,simpl:[],simul:0,sinc:0,singl:0,skip:0,smaller:0,smooth:0,softwar:[0,5],solar:0,solut:0,some:0,sort:0,sourc:[0,5],southern:0,space:0,specif:0,specifc:0,specifi:0,spectral:0,sphinx:5,src_path:0,standard:0,start:0,start_dat:0,state:0,statement:0,steer:0,step:0,steprang:0,stop:0,storag:0,store:0,str:0,str_of_list:0,stream:0,stress:0,strict:0,string:0,structur:5,sub:0,subgrid:0,subject:0,submiss:0,submit:5,submit_job_to_ecserv:0,subprocess:0,success_mod:0,sum:0,support:[0,5],suppos:0,surfac:0,syntax:0,system:[0,5],tabl:0,table128:0,take:0,taken:0,tar:[0,5],tarbal:0,tarball_path:0,target:0,task:0,tell:0,temp:0,templat:[0,5],temporari:0,test:[0,5],than:0,thei:0,them:0,therefor:0,thi:[0,5],third:5,those:0,three:0,through:0,ticket:5,time:0,timeseri:0,timespan:0,to_list:0,to_param_id:0,todo:[],tool:5,transfer:0,transform:0,transport:5,triangular:0,trigger:0,truncat:0,tupl:0,two:0,type:0,udoc:0,uiofil:5,un_tarbal:0,under:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],uniqu:0,univers:0,untar:0,upfront:0,upper:0,upto:0,usa:[0,5],usag:0,use:[0,5],used:0,user:0,using:0,util:0,valu:0,valuer:0,variabl:0,version:0,via:0,vienna:0,view:[0,5],visit:[0,5],warn:0,water:0,weather:5,web:0,webapi:0,websit:0,well:0,were:0,western:0,wether:0,when:0,where:0,wherekei:0,wherekeynam:0,wherekeyvalu:0,which:0,whole:0,wiki:0,wil:0,within:0,without:0,word:0,work:[0,5],wrf:0,write:0,write_namelist:0,write_reqhead:0,written:0,xxyymmddhh:0,yield:0,you:[],yyyymmdd:0},titles:["Auto Generated Documentation","Downloads","Git Repository","History of Changes","Download tar-balls","Welcome to flex_extract\u2019s user documentation!","Installation","Operating modes","Requirements","Installation test","Program Structure","Program Components","Program Flow","Program Overview","Support","FAQ - Frequently asked questions","Known Bugs and Issues","Mailing Lists","Ticket System","User Guide","CONTROL-file templates","How to use flex_extract"],titleterms:{"class":0,ask:15,auto:0,ball:4,bug:16,chang:3,compon:11,control:20,controlfil:0,disaggreg:0,document:[0,5],download:[1,4],ecflexpart:0,faq:15,file:20,flex_extract:[5,21],flow:12,frequent:15,gener:0,get_mars_data:0,git:2,gribtool:[],gributil:0,guid:19,histori:3,how:21,indic:5,instal:[0,6,9],issu:16,known:16,list:17,mail:17,marsretriev:0,mode:7,modul:0,oper:7,overview:13,porgram:0,prepare_flexpart:0,program:[10,11,12,13],question:15,repositori:2,requir:8,structur:10,submit:0,support:14,system:18,tabl:5,tar:4,templat:20,test:9,ticket:18,tool:0,uiofil:0,use:21,user:[5,19],welcom:5}}) \ No newline at end of file diff --git a/documentation/Sphinx/build/html/support.html b/documentation/Sphinx/build/html/support.html index b08af70..55103a8 100644 --- a/documentation/Sphinx/build/html/support.html +++ b/documentation/Sphinx/build/html/support.html @@ -188,7 +188,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -207,21 +207,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'./', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> + <script type="text/javascript" src="_static/jquery.js"></script> + <script type="text/javascript" src="_static/underscore.js"></script> + <script type="text/javascript" src="_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/support/faq.html b/documentation/Sphinx/build/html/support/faq.html index a6b7efb..cd6950b 100644 --- a/documentation/Sphinx/build/html/support/faq.html +++ b/documentation/Sphinx/build/html/support/faq.html @@ -185,7 +185,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -204,21 +204,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/support/known_bugs_issues.html b/documentation/Sphinx/build/html/support/known_bugs_issues.html index 204adcc..8725978 100644 --- a/documentation/Sphinx/build/html/support/known_bugs_issues.html +++ b/documentation/Sphinx/build/html/support/known_bugs_issues.html @@ -188,7 +188,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -207,21 +207,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/support/mailing_list.html b/documentation/Sphinx/build/html/support/mailing_list.html index b3b2790..bf9ba50 100644 --- a/documentation/Sphinx/build/html/support/mailing_list.html +++ b/documentation/Sphinx/build/html/support/mailing_list.html @@ -188,7 +188,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -207,21 +207,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/support/ticket_system.html b/documentation/Sphinx/build/html/support/ticket_system.html index e0cdb95..2a4fee9 100644 --- a/documentation/Sphinx/build/html/support/ticket_system.html +++ b/documentation/Sphinx/build/html/support/ticket_system.html @@ -188,7 +188,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -207,21 +207,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/user_guide.html b/documentation/Sphinx/build/html/user_guide.html index 36e084e..a0b6374 100644 --- a/documentation/Sphinx/build/html/user_guide.html +++ b/documentation/Sphinx/build/html/user_guide.html @@ -186,7 +186,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -205,21 +205,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'./', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> + <script type="text/javascript" src="_static/jquery.js"></script> + <script type="text/javascript" src="_static/underscore.js"></script> + <script type="text/javascript" src="_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/user_guide/control_templates.html b/documentation/Sphinx/build/html/user_guide/control_templates.html index 59849f6..ad582b8 100644 --- a/documentation/Sphinx/build/html/user_guide/control_templates.html +++ b/documentation/Sphinx/build/html/user_guide/control_templates.html @@ -186,7 +186,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -205,21 +205,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/build/html/user_guide/how_to.html b/documentation/Sphinx/build/html/user_guide/how_to.html index fa977d4..354e690 100644 --- a/documentation/Sphinx/build/html/user_guide/how_to.html +++ b/documentation/Sphinx/build/html/user_guide/how_to.html @@ -186,7 +186,7 @@ <div role="contentinfo"> <p> - © Copyright 2018, Anne Philipp and Leopold Haimberger. + © Copyright 2018, Anne Philipp and Leopold Haimberger </p> </div> @@ -205,21 +205,13 @@ - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'../', - VERSION:'7.1 alpha', - LANGUAGE:'None', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + diff --git a/documentation/Sphinx/source/api.rst b/documentation/Sphinx/source/api.rst index 5b4acb2..90f99f7 100644 --- a/documentation/Sphinx/source/api.rst +++ b/documentation/Sphinx/source/api.rst @@ -34,10 +34,10 @@ EcFlexpart .. automodule:: EcFlexpart :members: -GribTools +GribUtil ********* -.. automodule:: GribTools +.. automodule:: GribUtil :members: MarsRetrieval -- GitLab