From 3fa95bc33951b08fbf2852c7290264dd7a758198 Mon Sep 17 00:00:00 2001 From: Radonirinaunimi Date: Wed, 30 Oct 2024 10:04:09 +0100 Subject: [PATCH 01/10] Bump matplotlib version to `^3.9` --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 3b659e35a5..d4f135d44c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -61,7 +61,7 @@ vp-deltachi2 = "validphys.scripts.vp_deltachi2:main" [tool.poetry.dependencies] # Generic dependencies (i.e., validphys) python = "^3.9" -matplotlib = ">=3.3.0,<3.8" +matplotlib = "^3.9" pineappl = "^0.8.2" pandas = "*" numpy = "*" From 2fb62b5fb1218595396ea0ec9103a70eecc5ccd0 Mon Sep 17 00:00:00 2001 From: Radonirinaunimi Date: Wed, 30 Oct 2024 15:14:42 +0100 Subject: [PATCH 02/10] Fixes the issue related to offset --- validphys2/src/validphys/plotutils.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/validphys2/src/validphys/plotutils.py b/validphys2/src/validphys/plotutils.py index 959f0fb5d1..f6cb991d36 100644 --- a/validphys2/src/validphys/plotutils.py +++ b/validphys2/src/validphys/plotutils.py @@ -1,6 +1,7 @@ """ Basic utilities for plotting functions. """ + from collections import namedtuple import functools import itertools @@ -287,13 +288,18 @@ def offset_xcentered(n, ax, *, offset_prop=0.05): ``n`` transofrmed x values are centered around the middle. The offset between to consecutive points is ``offset_prop`` in units of the figure dpi scale.""" - first_offset = +(n // 2) + first_offset = +((n - 1) // 2) # http://matplotlib.org/users/transforms_tutorial.html for i in range(n): - dx = offset_prop * (i - first_offset) - offset = transforms.ScaledTranslation(dx, 0, ax.figure.dpi_scale_trans) - offset_transform = ax.transData + offset - yield offset_transform + if i == 0: + # Hack to fake axes relim before triggering transform. Fix the issue + # related to matplotlib >=3.8 (https://github.com/NNPDF/nnpdf/pull/1809) + yield None + else: + dx = offset_prop * (i - first_offset) + offset = transforms.ScaledTranslation(dx, 0, ax.figure.dpi_scale_trans) + offset_transform = ax.transData + offset + yield offset_transform def centered_range(n, value=0, distance=1): From 721932babf3a895c4c45a2b776bc86d9b37767bc Mon Sep 17 00:00:00 2001 From: Radonirinaunimi Date: Wed, 30 Oct 2024 17:10:28 +0100 Subject: [PATCH 03/10] Push forgotten commit on bumping matplotlib for conda --- conda-recipe/meta.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conda-recipe/meta.yaml b/conda-recipe/meta.yaml index cb93a7be0b..62a07ce62f 100644 --- a/conda-recipe/meta.yaml +++ b/conda-recipe/meta.yaml @@ -29,7 +29,7 @@ requirements: - numpy - pkg-config - reportengine - - matplotlib >=3.3.0,<3.8 # see https://github.com/NNPDF/nnpdf/pull/1809 + - matplotlib >=3.9 - blessings >=1.7 - scipy >=0.19.1 - pandas From 3625d3c75f89ec2c849a45f18ec6893be36c0a85 Mon Sep 17 00:00:00 2001 From: Radonirinaunimi Date: Thu, 31 Oct 2024 14:01:37 +0100 Subject: [PATCH 04/10] Compute manually `y`-ranges for plotting ratios --- validphys2/src/validphys/dataplots.py | 13 +++++++++++++ validphys2/src/validphys/plotutils.py | 12 ++++++++++++ 2 files changed, 25 insertions(+) diff --git a/validphys2/src/validphys/dataplots.py b/validphys2/src/validphys/dataplots.py index a9a45fffb7..aeb4e36ec1 100644 --- a/validphys2/src/validphys/dataplots.py +++ b/validphys2/src/validphys/dataplots.py @@ -335,6 +335,12 @@ def _plot_fancy_impl( # the rest. next_color = itertools.chain(['#262626'], plotutils.color_iter()) + # Extract the y-limits for this particular plot. This is needed in order + # to define the y-range because `ScaledTranslation` acts at the level of + # display coordinates, so there is no way the ranges of the offset data + # can be known a priori. + ymin, ymax = plotutils.extract_ylims(line_data, len(results)) + for i, (res, lb, color) in enumerate(zip(results, labellist, next_color)): if labels: if lb: @@ -343,6 +349,7 @@ def _plot_fancy_impl( label = res.label else: label = None + cv = line_data[('cv', i)].values err = line_data[('err', i)].values ax.errorbar( @@ -360,6 +367,12 @@ def _plot_fancy_impl( transform=next(offset_iter), ) + # This has to be called before instantiating the drawing + if normalize_to is not None: + margin_fraction = 0.05 # 5% margin + margin = (ymax - ymin) * margin_fraction + ax.set_ylim([ymin - margin, ymax + margin]) + # We 'plot' the empty lines to get the labels. But # if everything is rmpty we skip the plot. if np.any(np.isfinite(cv)): diff --git a/validphys2/src/validphys/plotutils.py b/validphys2/src/validphys/plotutils.py index f6cb991d36..07bf81b29d 100644 --- a/validphys2/src/validphys/plotutils.py +++ b/validphys2/src/validphys/plotutils.py @@ -302,6 +302,18 @@ def offset_xcentered(n, ax, *, offset_prop=0.05): yield offset_transform +def extract_ylims(line_data, ndata): + """Extract the lowest and maximum values of all the data and predictions + by accounting for the error bars. + """ + min_vals = [] + max_vals = [] + for i in range(ndata): + min_vals.append(line_data[('cv', i)].values - line_data[('err', i)].values) + max_vals.append(line_data[('cv', i)].values + line_data[('err', i)].values) + return np.nanmin(min_vals), np.nanmax(max_vals) + + def centered_range(n, value=0, distance=1): """Generte a range of ``n`` points centered around ``value``, unifirmely sampled at From f38f1ca6726df700958c3f9ad23972018de5c2be Mon Sep 17 00:00:00 2001 From: Radonirinaunimi Date: Fri, 1 Nov 2024 22:43:23 +0100 Subject: [PATCH 05/10] Skip instances where values of `ylims` are all `NaN`s --- validphys2/src/validphys/dataplots.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/validphys2/src/validphys/dataplots.py b/validphys2/src/validphys/dataplots.py index aeb4e36ec1..b785a2fe26 100644 --- a/validphys2/src/validphys/dataplots.py +++ b/validphys2/src/validphys/dataplots.py @@ -368,7 +368,7 @@ def _plot_fancy_impl( ) # This has to be called before instantiating the drawing - if normalize_to is not None: + if normalize_to is not None and not np.isnan([ymin, ymax]).any(): margin_fraction = 0.05 # 5% margin margin = (ymax - ymin) * margin_fraction ax.set_ylim([ymin - margin, ymax + margin]) From c5aab133a39bf0f8c94462879f4bfd510478c10e Mon Sep 17 00:00:00 2001 From: Radonirinaunimi Date: Wed, 6 Nov 2024 22:40:09 +0100 Subject: [PATCH 06/10] Add test for data vs theory plot --- .../validphys/tests/baseline/test_plotfancy.png | Bin 0 -> 35844 bytes validphys2/src/validphys/tests/test_plots.py | 15 +++++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 validphys2/src/validphys/tests/baseline/test_plotfancy.png diff --git a/validphys2/src/validphys/tests/baseline/test_plotfancy.png b/validphys2/src/validphys/tests/baseline/test_plotfancy.png new file mode 100644 index 0000000000000000000000000000000000000000..75aecd6a16818d44e5107fc4fc46d2941e71dfe4 GIT binary patch literal 35844 zcmeFa2UL~kwl=!3VT>hK>=409i&Uv%0~S)GNe7jpNK>kGqDhQ`f+!$ORFGa21cXJg z)5Jm*X%>1_ib%iD#GSqOIrp4>&KdXq|G4*#n~`j{X0g_{zVChKeA;|-;gG7rq6KRg zFc^$QOvU{g4909O24j}){CW73Fz2(U@XHUU6!jb!j3r0uAGY}2ah42*Zx(a^9<4JG zJ&o=jFNdd#zO-i!Mm%r3FJZknJflrSqD5IL-Y+0BLF;gy~j_Fha- zl-SSBW546%;-I51LU&p_pP8QeTpv`HS^nJFCaY-DnPqF(|7v`w&dI30-6?+wr|-_^ z^KlW3^$)jaOVR(i`JRixhF{5c?WxtXexhF&?_$Rrlv0X`>P47$;tWft?~^F4D2bDkdWw1E1Xiwo~lVPFc^Fp zE-u*UG5)o;^8KT8+AL=qS6A1P@^Td~FR!kugsW{YLZg5C?YDZ_qMj_PS^@0@jRViG zOSv_a3KmY>9vy7A8tQnn!|=hWFxSQFcimjdEg$bSIX3Y1Yj9FhQeJ+3^@G!ok4tXVBLB`qnvIQ^8mlFH_^(yhTHwpDgLF)-lmGG;FXL`I+_m z`SVtv-#^OjFBsQK*4?Scw`#bva_bYJX!%PT^;tIBxAx9;b#p7NuQwR(s;*pTmv<}U z_$$fycE$p}*^E&?o^I2M7^Y?0myr?iK;>h{ZmUReaBy&!_^lD%Qf|+_c>UcHahJXZ zk-_{g&(}RKDJfADQVA2;d5(RF7%p$8+V08w35Gf8SIpLmoH$j~9%dwedA;ReM)CIE z`fPDyW8=2cAYSJp4GoPK-D!oklR4FCCe0JwCeuQuMVCeCUHA>ML~Lzs!6Hn~HG0tGcwq&itoxIA55 zUEOVRxVE*cD-r8P_0l?VRpI7+OJriSlMb6Fm`Jo%s_m}6swNxysh1X`(DROaMH@4u zzK%3|clTyD2Zx7;A5Jw)uqY3^qo>eWaYyv@$Nl*e17*%dS+eEw`y_ZLN>NFKDuYZFN@Gf(3 z{tZu?_m^LOskA!9Q}W~qclppp88^ki#T%us^Lx(rxsMW4oIP*R+L#^Mi6?53_4IOY zc2y^ZEZ`8Z&VGAlbf8tzsq5PCEHQq3hBg*;u2XmHyG*O&Z!fc0?y=+7G-((5_%L#E za$3(ASkL;<{~Y+ ztCW{b(Rr*b+>VFo)Lm2FdV^8?%Fs4)E~8I1H8nL%+BH4br9TyGx3f&J@P$^+?E}7v z$6wtD6Suo@J33msz{8bUTews3aPoDxp^jS@mT!&KbFPe435?0IskbPT@c3GHe5^Ar z>b_mGtml_!9Aj9jPD35)8)V$Hf_7+E7}(_p-LWgM6LaY^yu`VCDtPqv?b|~&26hRj zK0Mxm-ISM?hYfRAnO!|Z(4?lXk)@3?BEk`6*OaFhSQV=ho*e0u%C0^=R$I8@r=MhL*Q98kU%WxYvExwpu>p-cN}V6hbJl!(=9_uu%Q2bZDowHBJD2?yuHW@b z`Pa3gCwZ7-Uy3+|8;dL}V>=)J{$uD%&h_h)&vSb1svNbeb??uQd+=b_v**uGqTar{ zZ+W$=CMD@jv_kutdd30)w3Si)6DQ)sL@aNo6^to`i`i%lwv`KO+dlMR3llzmS$681 zY5v!DR+1jy?iNf>xyy|AWbDAs&22q)>=;kU+WQR`4u%MHW;c6P4s}+pT)jFTckd)t z5lUD9YJW?Ae;OWGyh)+gni_|`28l=+_rt&b`m0zczG7fnnq6+?X$?H$1HJDuD=)6( z)xyS|oE&Lh@WT)4ii&^gXWK?5I7m46To1f@wY9rDyzR^Kt*VNFDxU*(?ATFin|%-W z#p>0 zR>1Y^t35{=U3M7d-p_UJ4YM%G&&zB1@ZqR%qCGDbLFI=h=Y=B+?V1Y~|0qY*#@n8xa}=2Rusj};OnRH{=(W&;p18;YD|rL$DWCt`TSlaPUFs2C#%|Jo0ZIRl@sIR zx3Qe0(SK_gW@W+rfiYN89U&%O_jtX#sbu0Z?BERhZ~^|#l9M|3$Jcf>xzr=s_1wVt(|5plcIZX z?{IhRtJWsA;xuad?&x9aSVNDWJQ;q*VG@%wUy^_JyoIj=e%?o0ygX7$XVF@bL-}sQ zLVTaPyOWBG6*r(aUmkCaSLdeMW{_>G?ctFp>DY0^VdC?LC)p9RP%ilMr>Djf(GCGL zEH?bS%WWtg&Al?8qv(>-wQaXhoU0Qw6_&_;yNT_4CBf1_d|+tkT8v|VnMRhi-T`^} zcl@hEVh*S1>-FypymrluV|C0t@uNqNuKD`mxw}h@z%QJ_7Jl@2@C=JrM@u-g6(76T zAoM!VZ8&i_V&I&Rd1=QLg^lWyW5X*~tcckf<)MMrRNiaLRvd?~y<+~=Eh-i1=4B!l zFILM86my5}7<{^1?L<|)IyUsw9kij&%vxiXc_{93H@4$z)Xkw6!mk?Cqcr1A+q}KI z2TLhkF9M6*yZhUhPhAyv4*ub^OG+wf|Al2#fGu8JzxBiNEsBA%V;$W2Llp-@yA*s^ z@elQ}`cIAxb&C1#IXBOI%up#rfS=jf)RL-~VR7-#KW9E>s8a2Cu5stswQbCcmo8~z zxd<7hVhg(UX4Vd&rkw;#dH3LS^wiY2U8ZHFJZ`s2wxN>JMFGPH0d2E}hgzydxx@!Y zMs&)Iyqffv z->#TZ>ku%`JE6iUZfh7e!Y1L^5pdecNfb@24d3?F-KZ~LzJy9fE#4q`-L^5eE@rZQ z_w>%d7k?~TC#0=lW)`zuJMmf$o`Zzf#F7+ zsg#~-kMdrNUG%A~&0^}?Cx6Forn0g~pkHBOp{UL4n|tH~^{{7x$ISe8Hs(4B2fpAi z@i^-Cwa1bt^wsWZ=_f*fJLiFVJcr&WXI~xjD(i{Hw%3#8FjbE2pB;Dwk7XURts%!D z+lZZE_M6QawiT<>^1p^%$ML=I;?@1?Yc9lp; zr;4w=^_4HOPgd`c`TTHpcCz61?abYiLs!c^ccQ8d7fw&A;Z+)Vwn9!DtCMtefK2Zn zc{B_6{@^RwaqHO9-~agIopp(RioU1}z9Ke-eQar5x-Q?zH@AO(86gq9dwQa>?+m)q zP$_R(2b#0n`(N3y2zKAmQ`3*0FPQiFtf7&SsK>Wc8+M&~*!K;U=>F+X&qcZqMxGQk zFJ0j|T&=T1FTI6dp;)7Kskt*-furZ5KXbeWo0Vm3jUA&Rsl{W*v4*Z)TR{LPPBl^k zWzxV-v$k{N>%y6fQNT1m(FKNhaJ zjr}K7$q@n+o)Nmh5%tUy{W(m`MnCvna10iaC6JRonn##sgt2?C=o-_RR*XGC1#j=( zy{Ks^KXM3c+p$B5APP_T!z2LXF)Wy2+$f+Eec+4evuDpynW<@>Prap_AyYWRs*NtsfHOW^pG8}SQW)klJO;bQ`^ecAzmS$Vm9cye%GAjvm z>(3ua9xWX2le)AB_mcoTV<_p`S=M!qb`|p(b&rm{m`>}N?c?$I z*ge7l7cXDVk_rw8AS`C!vRO%4`F>NCK(xKMdux!62zm$VYHgqFvV=|C+@hw>7arKZ zzXPZo)GNf_-~a5nb1T=bO#};QuwUw`t9yNmN>~i|g%+<)Y89S-OJ`?-c+(l~vgSkU zOshbcJjZ*pLz^sy>6u^~I<}UsME_(GasfSv3kV3{%j7rWybuo%I&0Rf`#@ZdgT2j# zCc?*GYVF_u8?cY#=z#f3etj);7Ik2VVN}DIoPCuyWZXrt#OV5-URVy^c6VZ8q6)}a z=IdM2&L&f{$G`pHhVR6~1VGWuJXu}QYhZ1iTpG-ugd5cC_9m*H_7cnJu`R%aUB-{K zP5JJk4sFUd@9s0-ym^y*>cd$SoaCD~xtzMHnEU=%cqKbKd$!x+n-5EWw=`M&GIu)-GAHWcjjX$ADq3 zTDXU%EN7(O){Ik)#XmWXm#l?>&bdo^8ghiQS@s4~ll|W7m=;(oIgKkB53E|tmIicm zoS=HT%J%>p8=IKH4}DGf2Gk-itrZnH^f z7!f@68g1pk{d(K*f{)i}mYl_%n3!U4PH@CG@#@j`EUCIpva-h2iQ1Z|Xv5{=%`MI@ z=`C0&i5hnZF~E4)CyAvYwXG$>bHNZNi(r) zOx?-FB}d&Fwe<$2(QBHA?HsrUUl@Y_0UqoOuut87YceWEFP){P`QMZEI}m(hn&3 zZ!EWuWCZA;-)dyrHu4ymteylSZnO7KS3}Jd@tXL?+VL$Q1~8^$xYk5RPEO9&1uWp? z=*c-ephh6Zhrx@q<5V}WK0&Tf2P0{GDU4>cVDaLbR3lchCCj;214Ob>B}Ie7n4Z_l z9a_a2^r3XmukSRqXRTu}%vc_xvxKnnHpqJD+T{-)4l6PR2xb-(6gU@oczQZbd^;VU z*V%g2tUNqO5^|2uS%Ky`T;LqlR%!XMIwqc?jlG-GjPrLeEp6R9fi`8pM)EzxYl8m% za^**~7pPdFGRB1$RaRkAqQ_F7_0ne!ae5A20pG9?ZrzS`1CV_2;zh!c$(1o0aVm}5 zwrr6Hsjq3r7m;-C(G45r(Hpe5^D;ceIA0%6s^rCXs7_p*x_6KKO5#96pL}X52V3zy z)1qsEfwzC&_s5CifS;XS|=>~{BB{lMystLv9sjw5+fbJwMLKYC`hB(|~rDkFvp{kIS2dn+{i=h}a|2Sh-G z;ACC;o#E70%~)l1w2mrp2de_8DM>((YXLh|BPH)7YA1DJcd2V>U4!6dTB&N$O_JY& zT#t+&4_n}4O{h=B#l`)xgfrD&c1-b=^q?OwcJF`}Xz5xp>+5Z=qSA2lx9!}i4rSsH z_JS=-6>o8qtBix2t5dJg%QLJKeWw-()K0JI$&-D6zYBi+k!9ZWqDJo!pa56-5XvU| z2z_u)!oy2GTrRY>&oAM8*=yVK10Z{8uK*XvmoW}&d~c34nSfUcase(4(iM-2*}Z>T zAo=$P!@inrM!%Hv^I=IOXWh@Tq??|GS=gbj}=!9YAU5NEx#J7cU0#0Lqnzk*bvQ z;Pc@*r$+AT@`=4_Y-k{vP&@w69xx&u6sM|N``9I_FXu1+RGVs4iOQ=54U~OkA)~JWL|`)$${=+$ujxq_Dy|M~FVuk- zGEaTj8+(@Rp~`%@fKL!dTKf8K)HgETb6wsz`l9?w4GCldy)7kI*Giwc8_cJ7+qw6h zCB6YTu47jAB8Ceu*uGqr{ZR37<8_w&nz4Se(-RJnvYz_gwQ05J&7wB%M7qC#n{|+4 zH8$K$atCp9RKr6d0!9Qb<3Ubp@}SjK044A+L5}EKCKurw#XtjsHf0D&vuOv`Rl4PKH#iP~on-my^i`&)6j5K`e;ACUO_%h~T zb-d1Vb;x<}paT~`1rlhDhe`F{dwSf2HMff%1NsPoEwpl_z+~T-A^1>ITFMV}0FAsU zxw5G0RJ{$%C z#XFxXrZ;AZqXbmOsp(+Rwf6S%A3uH^(lv?hP)Deu2iK1R1y$!b93LGUE3K~91~|dr z%^ri7mMvT6i27qKwUzNe)6a*isPVyamBW|WiVM+N(rw(|<&C-Xplh_hjJ(PNhEWt$E2MS_k%R4Y-AMMiP^l1iHYF}+OGM0Ov(-m7zI47 z3QHixFsH)8>OCk({&*it?<6;NDBd!cpkkzyOKELwZQD1jgT8Ol3@+AEA1(zv&9~N` zp_1+4>m1ld!@sXLEAZSc%GbG=U5%`4(MgcNYdlV!70>z#c)%_y(MEf_l#G&ZL_}D- zP@AQ#2zIE>de1E&pep6kmzS}e&1bzFV^+)~+)5zUKpqkN!4ueDbpM`T-e4sY{4NevhWrUJbI7&VEIegpWdmctRo-skg^oo<6q|P&F7m*| z6;~WRBTFFq>y5KVzb!_{vK^@idJ2buQfF^96vmsJ2^Gp zPvRnWU~E9ZPyB`t4grJQZ?mh4zk-Du3+F~dC0tA!3)E?#g^4Gr0r+|~Dk{oo9bw~J zdw&-}^&xQ(enAk=qK(qJFg(@@nf*yy7z%Vex*;iNn>KB7gp5eSF+iuplmo*j8Qz)g z6X=dwfOy^4&ZE0pV*d?{jHn6c>!cZX26t8`)$-S~PS?N0x1miT^!#m4^6ZCSn$CP$ z#H>Ac1KMzDbF+z>>}U+h+f<)RN}My8*hy3@NXaVzk(-3xemKXzl^&~OzrOM9{Xg&< z`NK5^#2-mv0t+oED?12LyOxxKFQ1CqCzh}=(&3)W zl}BX{f;<&cU|zNg=F+>E$lcz?5X=J5`kTDQZLq#d+t3z@v{MZwx(5eZ%eoPa|LTT}0WpX{>0m*VR6N?{9*mrAPVSBMAAlv-2wTLs^5wgSIrh9& z#~M){ybgdS@3;CE+_SeEPz!J1`dwH?bA8tDVaz&z5TqR}E2wGV?S~J$2Q%%AZ-!n0 zH7!sy#!S2B zCflxkhvnro+K<*I>uG|&)&L#b$n$_nTHCH#wP8aF`4{0g)I*0R@Q7-#Zuyw+^4+rm zHRG`+NiR#(&+Ov&-Xdo!1s^D;``5us_9t!rh_0W_XxKRGrHCtoWxzYlQY!4EKt=!)Q1j<#`z2uDH~HUa^yS>d{hv;FEOt zy`vz)%e5eUlHrM#tOJA&x%XLpBCn8;#%%V**Wjx}L_~-ZfRzF(!9W=o>DCgww1g6@3(#t#ZrCw6u;nMXo z0}mD184Vi%Dg>3oM3@!BMo0U!pzUP3^f!t4H$G4$0UhF`uhEU63Sr6M>({RzjoRqe zam%0$i0{F=U5%1I;&C#}mi*15ezJmZ*V9X^%Jskk8gi*$!A=-C=NNMqx55kf?YBA1 z&W1Vr$EHm?ZQkGqeOPO-4n96_wA`VSnk?h~)%+CqV>t-TjeBHf<6m7Gg{)$u?O}2dED#75=MY1AyE6L<=jgoWR`vC z_{v~ppI-|1+=mZMJ@DDFH;}o5>W$d?B&j8vU3qql{)Srk@zbZu7t4S8i3^f(pO90j^)@ zEsq6}CE5>aQ&~O&mb;CIXFnC?kdP3o9T+%*FuqrVdwNXge3;?S_^C*80@}C z^Fa;)!$VMQz_w1qWYiQ85XkmW+b=JFa^l;Uu6LP9I}RtG@Z@ZqaD7k*Vh2S>XYQOi z#X$IY=c;o{WaFVg+%af_gm%b(ql{LrqowPaGx7N7wY$CY$om}SoS*KuU6;XVh$XQL zwR^3M+x>lImpOME2a*Ja&TUzjZcd6a5bH4NdtCT#uxVV`Yi!z7^5G#Tke;_n!0<$d z!G}vI&x!BfA7Kso`1m-EXG74-A8iXK-1YI}$BJ@s2ntYL4j@2K3-{8o_noLGJQHdx zQ-e{{9lvuJ7r&45X}D`$Cj@y(W#h(;Zaw#khzr{ljLJVbzl4ZPrdi3d@CouVpZr?CR@^p1B{an#I}uF^Qkxd+47gl3IlaE^!Dq+P?!hIMG&W9(c_}^Ee9kb# zv}iG8pttw9vstqk+1Kit^}wr9>}6_-LQIUk8?Mtvv6-}Ybbr43KQPGQ(#QuI)w}46 zrR;7*YZG1N`%IT_l|#pC>?`r-*RfZx!!m?$wfFZ0Z2K)KmpBx*rT^+)I<>PV`Dq3M2%+KtHrDjgWGAnQX+WiI8!xSv~k_d`HU2{zOvZ zp%B$UqI|ac>QwvBfPl4rSl3@ZfBuE|lEhb3-_cI!aWbp(G=iP-h!^7zj)Kprc;6F{wcw{@ z@}f$R<84&np(mI>6o}op4PRJ0MPIu=Z}76;&QROk&{QDfYv6rB)wB||w#$rlM8AV% zViW04Y*Gbyy%sxlo42<&aRKOiWPzfiRPqf1B_!ZsESNw4Zm5^I_1j-IZ`opzv*g2v z50ai^_hDWn0ATA^%1BEO0oNbQm0fl^n&39{Y2;vDI!ci?2r;9zvokbd0?=I(iYl~i zEjS3_rl8b^pmw1QoD^Q0ee}sZm}Q9|Q&i+d8%s)tm4;)0=}1W0k%nfQtBwI;6zFk?HT906FZlk9i*-(?8ciMtyDw3J$v?$Zw{BO zKcd%TPf*e)!MYRuP5E2E0cgaX!aZlMIoziIk;hrHL8w>#F7LlE|==h zGX)FtW3gBu1eZs9GG0|!Pot>+0vD}tJL=hX=(wPd{u00he|TDKTl}z*C!;XqYfqhN zjEuZcr*x{CZ>hj#+gI1SHN&yCj{EJjK)I9;bZxn!U_D?aa;ZzTGLYZ> zT=S`Q072_!f=d%HCu@eP3PZ49MG*zdc8}QY-4uHRM#^>2jqA7_*Fnd^C2eomF6ZDl z&J()nz{QxlIIL|{F2~M_HD6_95_%6K>9bze<89cD>(@`fzLe!Iv2M(*j#ch@HSsI^ z#=EMMJD*>NE3y{2`BQ7FIS`wLikjVm!_dzBcn0w(>tm3bsDnAW&d$!x0gHhzN)wi` z1WaM0vEP5>P=+F*d|}yU>oFNTUhWbP1ah3sUq(tDhr^c9a2_jUEz<%|-*RJ`c2e*a zv+qt}@rxD7;f*I31n+##XPo!;K~7F6Dqk49rV77}GVi3nJY62Ecx6*8)_fbh0&DhR~zB;TLuxy#i=DBVmCaP!J(mFN4H? zD`V6NmfZr7t)8y+=sLu1*k;cIRg~99b#xo);|KhJXQDp{qaX>p5>jRb#F>>G9C28g zY7nsBpyai*wFNtDUCeN~)sv@w#J1V-7ZDLH)b2M>neU*9CAbc@Nf>{H2ovHsxo#Xu zs%~V)f_G9I4T01UJl5aWCxFElDebBerxtY>kly;TAeKM$mJHqzpqYd-Uq05fLp`rS z&$$o0V{rL#jOwpS-FE$#IspTUABVnmhgV0Dgl-3{7qC;cb>g;FxV#lGP;}awr>C;Z ztDRfcsM2Oj*vJ2We86vsOVK>9UH$uDmn4!>|Fe*PVnrXm}A(kD_5~SYZMx(TJ8LHsZ;#&-G%^+eZJNoHn7sy)6_f|2M2|2r|nSXB~?h)Da(7q1B zMyy65uFkSC2$$ALHB<+~YiVuWjJgKWUu+vSfTu$dvPAXhKUCbhPT6#2uZQqii4IUP z5xkj)=V=&NP9gR>6EQb(6HqSO?xwq(1QdkZt^oujl$WjGMk+f5^Alhd_VE64^gf`j zZDImq0~w@ z?Lzp-xd@Rk$Bx%OLzvs;vBDYvme4jzPOr1E11?haAnPo&@5*lzCvILvoYa_X)f zY&@KWKg+I;YtTSoia9;UDWP^n0+cHrCNA)meWUl(XdH!^@@7w>GYRo^gH+;yP#IjX zaA6ghuGmcpSP6Pv`;f`I59uFYv($D@E5LOX!jM(B5BzxEWH9FPM1-uTB&}}o)DoM@ z*h^40Z{qt{zPP?qY!nG9JJ>vOU>mL{m5zD^_Rk79`s9!8=oLl&oV5_bf}nB^+8_>e z)p~$(qkt?#hTt=$_?DrXhPAPSRz7i?c)}H2CEKyobD-I8;`=> zoY`yMg0xd5R@iM=U}k5Q`1J_5OOelo;P4(&Gmr_PC|iAE92kxBI#!HZS3;cQ=l6S{ zcR%hsHbR@494-8K2khM}0l&)^FIG@V1U#;vyT#QAQPk=JPj^q?L0W(mj+V)C>OM@= z9ESG(+D$VUSJJlv**&9J6 zE1aHUkz9`Mx*ZAwV3`)sT}FPRAJkMWZh61gz;$W34?FP0$!kIfy+svtHJlpyBl+l<1cw{C%KOu)TW%L!&3(NEF1bbp5CfC}717sQZ z|Nh%=6fO;ua!G}y7^AS!bw5@+fNTY&a&TiTkq(6>6P&4vzC~d~C@d6Lq);-D3rN2z z_^=Lcf{4er&wSH<0TQDEj2u0@WF~D*fvLXh35blee)?o;^xIaWDA|=um;P+(r}92f zvbFTpt5;$D&xh7Md-@b1jq%`UPCVZ1@Fnly;neGM&0`cBA(Qe3GXN`Au55jszJ}Q- zT83cLvKUw?f?Z!qu?J}6KPE|+Ue_kOInqp`m}Ic zGd;(hNx2vUoCY>?L+w>Yvj>Oygp6EtePTAC427eKAW}yS0CYhNYQ@r}x3FsJ1sJZ- zUbMk|q3KpjZcg?X9dN^+45QpyxU$-`@Hp>M=f`$D0lbY|kq$^D=|EO6`z^id)@|IF zif>vUGh^UPgARu?cmxDq=6ZF=i`%A+lOE=0{W4To0Z~?1YlF0YC{u(&pa~y96ruX? z`mHhOANMHmf(*4WLRIAAQ)sx>*j)urxFEWYmrOwtBq}NlJ{xnj_Sq=fH-Xw!*il$I%DYT zV?$BsAL6=hrQgml35QtfrKscjl`NPD)DB?*)=*Ze6V0y+oy0kE6V%XCwPoU(cWHGQ z<(*N-?KuR}>-h2M59FJGq*PwpuBjEHxb(n*0~pD0BV_FK))pft^t9=-oqFF@>zkk+ z!o2zA_uqdf+yzf^X2~O-ck;vI-)q8uQmTLsO?nxbCHu}V#*|A0f<16aB3ZU<8yIFG z`R-}c?t_t~4u2`(H$0a6NF$du6a9v6MurR)sy2xE&`YU)T^F%!@LHk%{!CSPtmUfO zwTOshY_F35#gu|>T>lm>C`DLFAb=PZ_wb<{eEf&DNsqx8Pr&V1yYtv@^8Oq7VSQ0x z3mJ){BfN~c#z$WE`-CU;{@jkpf}m#iF=W_mYL>N_qwtcq9hs1q5I)~58y(aNwpjKH zoxC%rVR`T=jQN}`Ii@Vuq`Fcs9ipS?iPv&8`;#K`i0$E(Z;`(@RNw*)n!5J}j(zP- z0x@d!IG_FqD^f`2;HEf%YKoV2&zp;lslLFntfybz>--dVb20@QMk`@LnEU0lezN^R zHl~}k%e*bZe!%@Bu17|*cew}IjCi2`?E$UPHu>KejG{mN{9g15Ak^@v|7kKeMIMw; zw+U3!yb&piu1c`Pw9?H=8v33aK|E&!Y{z=iLN*pa@+#zOAL%=Yp1>SDX6y1P6{ZcN z_&#v>fWj)qDFxl%7UQD+w~dMY_rE_$?*A0k_}@6)2Kq;pp*r8)1xA`4ghUP8@@l{+ z&%ttWXIF0Iimuq%xWCkg71Hv6=aNb*6Ql2GkV|q>myZBQvzx%boig5+H$6$RZI9_3{)S zJ}togLEpGSLFn0_zp=hOApUn_$@E+zGZY|tC?EzYlkMBKDPpuDE0*Ll$l%mSQY;ZL zcqKCufl&ugz+k@GAMk!F9I3bd$8-p7Uz7kN5b?X9A7QG2*CfAk>3w$xQ!PmVSI(mv z{>L+CZu`wLaVt3uGTN!k@ZeT35s`{_TA;10?8j4rBtU9JT3Q+epg2gn0Fb=UW6evi z!RonJwv`F+`wE#t219O7$bSThlYtwUfgn6c>dl)CAE8DXu3wF}aA`>OU%@_=M~N7h z1NDw0fJXr=lvhcYK0Z@FG>y$n*n-ZjcsQF&!jR$jDG;BKy$lo;N3VpED>pl0@m1F~UfQKq-E?mvCH-xI(dmV#8$xDF}oRt5iPa4b=RTrj7rfp?NEpRX>DkkABN(F8Y5>7+0%R&d8a`TXLH zSF%Z1Go(Ai_=`}D*mVm!9_jyKLgp6{5#Pi_oIIIwOmJVU;EPap51trJ*8mXdb@Q4O z}@t5m80VE~ezb0Q?#h-}9 z-Vy22qz(-rd6e89G?Nog|6EE&7&Ln_v0+y|vrTyp`-PAa@bN*4bsaf!lY}bl&H9!y zrSHqg0t#kB-~K&8k{qY7gJzmXana1?(L+!N@yULw^Z$>V@cn;7>HhCEje!FUIC_O- zBOU_7(0Xv{sCKfhI@ronb!vtH=DTj4-*MRl6xvGsUs3WL40}@TPA^@p$K1xI!>-HRQK&56kA@Q z5zylV<9@P51_GFyVXmx(J&F?G@9We_T(^}h-jGq->bqUnQt!d3TbLP(#q3{YSQ`e; z;0x*jHR^z(lSTu)-U0kZ0ms&l_LD_RmoJZoxrgbmw^g0p-Mmancl;a0h?17v?Gz1d zuo*CCq@&$Jt5bvor;d7+(g`Coy`(ndxEg&w$YBeXEXfuSC82fm zGsF6)j0(cfIsxkw_C-Ku=C!NTW~zHjOAJW@mFOQq0Rcxs#3}R*gDvlS&BL;U~VL$)w3fbT)DaC-lcEyaj+7`h)OXrbYDA`nNh zCQ<%>G!hjV#49s5hQvT@|9i*Dr%9bQRuE*%M3n2$(wPt9M^nKBJOPas4gY~)4>%_X z75K}1y^cwk+mIdNnOC_(=HY6lPv$dWBC0mtLRS#p2(F{19VW6s-b#4!w zvBU7TM67D~XaW^OBKk<;!z!}5ng%WH-QA<-$gjjuFX;-PuNB~rZzri@J-F~}HHH_K z&(-cSe29&HcitSdBF;~_{hXu67SX-&Va@)(^AHIE3B6G?MhaF?0?d1II0P|+*0#1- zgl0-!y;4JyB?3wjvWOl!ki$oMlftY3iiScO*G6@yj$tkb4N?FYqA?X1cuq)O(F7uN z8jMyB3u3qnkc${YcBwtP(I14QoPHLfPegG6B8e3J<=wGReC45i9{& zE~%@NkYdfnk8$}I*DzXAvYRSsJ_BpxIF4ViZxwMJFq;IFAlxsCDa@XpRo}1EV0HlT zd9(T`dDSBg4r*e<^bO>Up9mmH175QQuK>F0LV2Na8&MmS2eDVQ09F{*t@81}m>ofL z0*%C(u|)!7AQL6RDXptsh?n`WbhGAikqSFtFFkh8Oh=er(RU1=h)4+$b#nG!-jLyiwTM+haWV{G{^JvE zp5V@!P`HmgE{u;M@y3ebxm}<<)ch#oNa%BG7(J1I zBJ=ST$zZxCAW4TwIwiuVT>_cQj-cHz4r;K(=AZ_P8HlaS3N!|c|D2f|ZI7yJTtpw` zdML}^=LJ+g8nA@Ko??lLiiBY#`C_;@Ug(cB;6zjmbrZ_48p%A!1zqXE#1t(@o_Ynj ziOETuv;ON4BqHQVgEq9oU|JxUW<*{UXU*0hB}Et)lZHjo*V{pVh{s{jH-*A3cm(z?F0cAh>0OIW(`6Wlw}z0eg<2aM-kuP5gXFUB1z_6| z`xey>0Bu+(88~!c9Y(62^_@Yoi`XtD{wA4U=Bl3&Z)u#7=v;7 z;U-7=b@A0tY{htTv9Rj9Fr{B}9~OJNV+Q@Zft%}>$dNpbNx%&_tRrj{#_UtlxQ|Av%R~Me zWGk8-P~bV92y{yMJ`6Rc0x&0`&Vd`^ppuecG1^d=Zhp~rY#QgGXrgUV-KCMAKuX?H zwhAiVA$0Z4%%6Y$nRWoliNNwofdud1v!B3tH+=`51n=o7iohDXb#8X*Z!&uM@}*uP zaZR7uu}5fLnZyC~A(W+En1D#cZOlcO!l|zz$J#O)2*R0r5!x!*1eh;NvHZ)dUbKRT zOt=LL7F571OR)r|)x-%XH@v4@t-=r`rO{YCWbCQUWit=r)Wi9Tq?N)>(Tf5U*Cz!U zpfe~sdiL|x&Tp^ ztD|wcL-!yhPXV^Z;H0DgTes=5fCQlk7Y%_6FazmKj+t>pS5J&1BKHKlSa&cOlN7cW zbx+n+%^m(OBKgdo6@cXT2|PWDH;M9Z+O!w#Rw8RdKc1S%iPv1BmK9Iko;*QwQVMKn zZ0sF~69`Z%cK}dQZZESY&dXT;%UntyLs-saVr`C7E*buibbY5spm7V<#rf}d}| z;p^_^rlb+Zy$oGP%oXTXI8yNY!YzKzFazHpgSTz1)9E+V-C09_{y86#^;p*UPmnR# zH=dEB&?&~}TH&|K1WT&yaC%pD3EveY!Dd6r=iy;(Ocna=6sx?eQ5IW+*-K#|jJo4c zsk#_k@Ij2R<(li^id*<$C8V>w4Xv%M1%|iumt-+`Hg7(FV_7PA)ADX(M_D9TBUVIH z0Z@_OXVs$@{yP|aU&0tUdsi4QAUT_+<&TkDTS1aS!|)9DF5lZ%`HJYIi^z z6VQplPQzhW*(LS1w3yM@^t*I(Us6UWR~MRw1)+cM*zfS|PO9Ml&kXA$J8Dpg3cEu` zMW{*%#wBX%ai$;B$~7<-MH1A5V1FiD#Q z7y_b+bA3=X!m(60?1I<+0N#3TCadk?*InSwEY5Tfw{*R7_r6r6{T zXT1#nA`e)+Z8ga?XhDjccKcB}&i+c*@Xb?>ZWdS2lm86bwWuv#Bu7Vzk=y{yRTB^; z6U%~G+rP>fSV+Nnrl|{@I>A^5&kXmc6KVkk6o=_35419*M=))4eG!4l7MI2OT}ZqB zpP`*a{pA^yIgo0-L=G-ftYE>ny;pC1x!G!CvooUrZJL+c#taHh*KYf~Js44RUCTNMCU)Q)EKj_0!%u;)lds;jR zjIskxe-y=NP}jGi-m}695}e{F`MNZK2I{b|gLcYS4EylF=tiv)tDNbzE2Qf-`k?!s9a0_CHSs;HogLWMzTPeOaf zp(qz9#)3ja2j$c?O4Bt;^WjT?(InAP5(rK4l&p?!_8P~>*;L?_q7W6yhiw?8Z?w$^ zXv`J6+4_b7->OEmhg@WosGc$_n!Tq}Kz=$fsa(=WqZ5plqquf6dB~&MIriq5i4qe3 zj*jcsPNx_eXNp`cz>M`LEvs*-v2oSjO7n7#Rre|A6vyxquh4r@T>B zsPU4A0NT(AwY4nO0&m4=c$Uu37)8`8d74%kAvP1Q(F0J-DiA7-GAgGRJ@9QU7SN^9 zVLZ`ca*#oiG>{@v6``l{Uf?Q#AB1Uy9FdS%@~7{?)Sj;(_+V5e_ln;GnbDaL6hK0( zjTdMTLI)k?gS{F3@ZrOVlWXx>xs5@+Y{fLRP3Pu-WYf?#ga~aopAdBE5z^=#5<69Q z4ssCl#k|~YGpOEw?OK9jiVHj(1M9o(3xj=w6_ph?83klCDUj~2NTYizu{rc z+{%FS=I#s)m^qh_@64UoVgZ)|dFa=O+H!k)Pxsh<2e!cg;21iI9en=$xrNIhedNGh zYm?c~C8DVzAq7t(p0sgR3K;4FZzutwfgDo6kyLWN{q*1#T*p?0UJ(s_%@V#m=@WoT zMmK;ox-b?(R((3lmEPV}_p8F6@<+Qbm zKiLm024MMBIfH(CB&gT-b;dC~^PD{~@M6K4M81<02Z;&?o1N)1Uk(&_*R3#NHnP zz9?JD>XzS-sozo#F+rdi(F#JSi&p<4M_xOQeyU=**x~bsd+I8~1SKW);p9^?W{YY> zJg6d8ru(~$PZuv=9(@QXHz^3k>mhy`Bi*ZP;4M2E;_lVr4Hd#I*A3}=WWdS-+t5eKUk}v z^p~ZVNr$SG)2`s+RC!d&hkHP$9KvfXz~tI}oQ_m}edj(zB$IIS1vx^xcL!pkE@-=^ zJVs+u^LS>M6oNM4gEypHRN<}>2`;ImhuF7Zt^gxc#4@ma5Oiz@+(@)3P4H2t)1yEN zl?&HOOG_sg*-eZbcKtyPKj1S<5+o9)Z3tv+a3(92L5yGR-Fw!k2}iGWe_1zOu1qq^ z&6~WZxVbF9;9xQI7K)Rr4E{6Pj58b^9n~9byzUi^YsJ!RwjVP6_W6TzJ!9l=z%ze2 zu23#j@BWD^jrpIzK^zjqU6-)^8S|frssGNEQ^jhg^P_sZ8nbM|MNQ=CcsRhZ<~k;> zk4sIl+qVU3W+F&%PE~Z?9XXXpi0ag$s`gYg|6j|hERG~a<|g(aijpzz^Zbe#)YNCiDCwi$cNCie9^}Lk-x6 z*UzHc1o)qB9P#&9>C<3yh8qua#X`f8$!NKhnFB8ZSU3v~fBi2%iueCJM&1ADhFwP> z3GsYOntQ~eLb;*Cd@&3nGANI!CA62Bqc-#N>A0y5;A(^fFb4}@jcFjIfzO{0!41g7 z@sCn7dcd~g83(TwE`}QxGHEY_()3~7g^ePqKzR`GMvC~uZmy)$Gcl5S0z$35gF{B! zhJQ7&(RBE`75pC;c#DF6U9t}aVm5mx%|}8%sF+DXdu}yvK>1$WQJbvtC8CiNXjzs4nKxj!eFQf5srcimK}>Wh0`t^uybpG z3Daj7AfgC}>;G!{#ihf+oN-H z7SgY3OeKf?IMAwTi+^0)@z_E0@5vfOJXlA}<-0@@sw_3dFJ8Dn$9g&OJOTTIT8aUF zjF7S=wV^dxhOba*QP!e1FPMG_#ZTS z0~ni$dKs~zo`3OonZNP(3}+#HpW>?(W1C#T*ATneBQU(pZu=q4yF8@F{7d?cw)P~< z!tV{%9F6dk=K5VMnrl?BmJKI0=Ynk?X}r}1YN8Hm#$$;i9%$<4KTGdzpb)vf&cC#! zDE?RK_iY|PDses3$2g?QfP&6}w-ikU-HS^;ALg;B4P#5vU2 zaJd74sF*xPQKdvn-{;N}pGzJrdd|#!fLhgsan0A%M<^RlrWD+iIDkba4nIyaas>*; ztkIh>=`CBfG~TOa6sUA&H;gC9 z3qf}r@FsG71}L|Xip;LATDLCzV19}Fe7UJ+=pOvI>lCackKvyVh8r~e4-ba>UVXEL zASct|YvZaUi{)(jcgX?V>27NGmc$t7%#-hDwvf_5hlEo=3kX|pkPgs7*b?DumMA}r zC%A7I#P(0N1cR6v8W6WlMliXh=LfoPE>~t@fhrG>OygnZC1NCj1@qkj9GKvA3WT8i*&^a~^ ztN+|zhr1}^`8%6s<6~EyI>3J3!NK7wQc}aN;9bX#O(j+NmMU=O=gi>^#mq=;jX$aFmn(``gR1D%SGDBngWV&8giEJX|zi?vxI0z&Y&X9iYz`m4LTjH+IV2 zzO=>>1L^f~zSAy)Cr~aPj4$&*U_^;lCtd^70B!EAcTswVAy|6aJ}K_tri!06%SAU0pg!k6|V} z>!)1}!@oc6+|4fJ{CQPTMg48upq9CFxK7a+mR0%MdLut7&I+8Zx0hwNwY6>Wp8kN7 z&r_#yP^n$+apjw&HA_X}%|coc>Fa`pgAI$#JG z_&!e9p#7iCn#~nXrxGGutcAF;iW|=Fq#s6;S&8#@ps7}&+0C4{lZ*fGNUphuhldu9 z07tNA(-W_!MMX(C_XIw66vDa5=h%hyVX_z7g2R#3Q2g`3U_Pp>Mq@yObbu83gRox_ zGrbDvbJZ4S_y|40*--dGS9vg5r@|p<{Nn36lUX<&)YWck7NcbkWm<4iMq_~1I9WH; zA{23;j@{Fv{zhZ}^57tD ziGw;2UAPhvF|~%L3Bz!~UD7yVfRZ9OqPM3nbpt17lt^u8Om!TMETicfT^{*?;WGpn zwe2&xIw+Gfr-~s%fqP=N+(S{1lkJBkOVk|3f_O;HP!QzVjy6v+q&SWd>KrAn5lu`t z@IDR#r-2o8z-p9UI{D18jExacsXKet&4+_uzNo{t@*3|I$E`Yun(ORJCO9G`^)f{s=trD~`08*eLIkkW&lCvN|+qc00C?!e; z6)2K`5+s8W$tY2YuL@|9RG_3K)$GID-}>gq%&b{6YyPxNs;cLC?mhRMefHkxI^#?%Etliu6TeR~~>WrX$#X7WYWUvbwBk9>Z5 z+(4vLId561HAC3`*q9*L?>q{tNeuqN$F*JAowk!Q8Zytd91+KkT@3|6r z=LY%Mzn{AHALM~VF~{kVLK%SBl95NyRRYQ+m)!b|1wyMf9@(>Lv&QkO@%LEUph3I_ zqsc$Et=tI5LuO|uU#4DE&xhs08xsrr2PX$}=a7YYzw@;h8_d;j_vb$}^5m6vIIX-U zR+E`)xMP>Ag^qglPB4>>Ahb(~!!Bs!t*~><`dzH6DrzhXQL#ziE19hL#F#B?vlo>r ztjf?OI-L3@o6fy*)76>vvDuZUPt;xgc@7TI^o3PjhepCfd|v2#EMdEvl!dJwaBs#A zFbI`!*ZJ+KQidbWBEt~1`X`tCZM5q3^L)%b4XlzmESq|wO@hZ8d2AS29&s-z++yE? z9+nC%MJ1FJ@TAOEbq1Fh6(*R%HVv}ZK8}=t9!-o5n}fi-DqNr0OMoD zBME{<=O;9bw`j4edAyR$@(RxQ*w^IPWWl!gyKe3J>x$(iL=Mu506Wf7T{3T8uqZf! zfFNdpx~GEx3T8kLC;up`-dJ+H#nh_F0giAh3i?+D40Z7eo<23H8nkQAVKdwAxc0jx zd^HhB3s|}8^P9VZLF*f16k_s+JKyHo7j=4vwkRbIb`%08=z4RXPgOs%2gib)~I)0a{EpeG;}b<6WIh}`sR=Dr%@Ik|Dq|lE#_s%rwS28XG0ID~JOmzPKN8wnAS3_KRq zf|AQTgwDdaaUst$;q4vn7Rq&NKep#Lr|1mcBrO?aN?8Tb%#5h$>lJ33hk13ioau?& ziY9KT&7h&>^A|a~`yLzl=Nc~Ey|)z3W`ePT-@iw*T+~?8zSCn$3v`bkmtP^cx7srB z+D_Fi$Gde^=h*bg_Fmm#+?QGv8g0KRR#dZYie+Y3?y=v|v17%0o@R-4%lnWhFYPN= zc$1qoRDRvaVa3nR&p)NGw69|VPTQk~x2v8wLd<;+Wl~nD$9EO|3xOeN2QEkZxj|_WZyqF>#aNYgJaNavDzxT&hZ@5J=oi&Dzr&`xQ#U z#2FPU|K(;KX6&h6%~eu_HKEmQ_^+}=smtpG?B<8E%7kJQH0(|+CEIwWLscpxCmshUjyT<$>o>m8-Od(`?G^x1t!Cj4l zQ*|+e5~{-MPQVjvyoK%>B3 z{%EuEo+cz@=y5clK(06XhYv*47lm;UGaun8jslwh=me`v_nXu+C!cvh|KPUY zp@t$fL9%foa0g4lZ=*&%@wXc(m`}GuLv*9&L7peLV7!+VLU;RA^AbFtVdTy)G$0lvKE|N^dqN!)FA!}OC$Lg47!h#_Y55Gf1c?B#Fi{tldxoA;MaS_xyN~iHs$I#@3cN^S z!|igF>jhm+89bkobfbJ?DW`&0=jKr|_05pD=>_PR5c$Kp09tZ#h(XzEN@QAQIDiu( zh|oboQWLaOKYiG!>e1@IZ9pe={@LG3#z zWMx~m8{I^ZXpZ3KlTkm4=d;f3(AZnfDI=poJW*;?Q@4oRkRXiI24w0gcL*p2vR4i{ zS0m+y`Kmn!4cG=yLr7LjEqPhn*|6urlBWC>l}8So&jKMjht=K*D)Y-lu9NE_E;}@* z7#Bo#iR8wCmq>F>2wmJ>BQ;X8c+nz4uNooth#UoMRSu6LVltyQ!HmX33572Yo*S$J zL;!k_)gX-@po6r#TNGR@G7u#MjimT1R=^Z_1HK6)#$bd#oY}*2wENMpCGQEFR!3)N zE#hNMxtE`A5+)$7W+6OcFg&AS1qKw*06mw_ogD*RrAk^ob+JnJU}gTUc6*x@(isbU z`cv@R2!2+4$SvLmM;Tl?+xZj@yX7_1O$XxH*^7pw zW81S&Gk7_6gC)Hp7+WXdJE{)NtU7j8=IA(5_Axd{sBEO*GX`1slV0p~IV2O(An&-5 zZyOUHa~R;0m+!)1C1Y#|uH>4`6hx0QAZa|DH-EkqppS=}N3d?ffYpTonvVp@Q498G zTJXzTj^Twu=LdFL3j*%%h2&}{Zm%4oMK97uIou1GSnqG)9$1%5+};{6DFSwu1;9(B zI##I*HmWtPiP);(0@a2+fBsy$VdT=@sR5uF9T*-{0f9u>iXBF8z`}g#1y?9>ghl`J zL3?k(pbX*A0ztq69Pq#wW;?~yLL|}BjMXpk%9k+(t%d%l=5#+YowBB;rb!Ufdl6$W zaR{N@3Ilm)`Xi#sPMDs^VHrsyv49Ul$xiHTSu7PxI0jkbUa;|iEJ08xL!d>6OTau} zGfbSJpJ9FHwwMOO8Uj#!0L?N2yF@m&lpG=Hg7EReu%;rA#9>;Bwza2*uZ{p;g(W!; z-rixHf~VF84E7Z$Ok8-?kocw*JO#f~uxiHTZX~x9PZ+~ej|@ew7GCq`y@BogL)|&p zts!W>XOM{o4{jYzSmkIX=>Z<7a?oAVz0Q4jyz30&Ck-h3!8pr^!78wMaKS643ji(*Z_f%@_;jLSV40Z1Wz2_n1S2<_p?X^kb^vLy>cWfaU#Hp>M-lX3aby*N#mB)Wov~xhFiHEnnL~UR)IPNP z$!;3)T?^Vizs2h?9mOH?SUA$(eiRgsb~s6ZIPDrd5qPc3UcGL~P}WJ!~++p<#;OBM}Wj!y;!J@}I;>qJw>hET0orclMFLG=Dq55hfruW-F-Ev_?HJ zgmTxm3Ea-rs+Q2eH)kWS2nR7F5~8pk72jZQEQKz>YT)ocI&#wjCwAzd_rY(4H(Qjn z@d2#Blk-44#S&E#5q1x5^PZAG155FH_wo<;NI1F9U?SVeu|nZ2a8%78Td;*%LI`cv zvDJvu7y)NJ^EC!ML>7^M`@DqK3y=ci2U9b_zm(8F7FO?vq z;7N9GXt?Ha7RQty!E@5I&dtUdKI1%dDp;<)qCb`_$*|)y=+MW8+)-F~d96!f1`kK? zD4=Yho(Ey&s7nr@IOQQOF?0`8>)1`TApFQ)BTOMRBEwdaYBsxyBXg!XV|bPuRGS6) zL8+Svs;$9t#cw}U#F0{rkTm1Li8pQ@MIi`9$orty0>O@o(>$yz>cZotZ0kWv2S09l zU_gAjE81q|G9)QzLK#%~AOaIDIHwk83Z<(BpzeWnPRRQi+)J|R<-+{34=8-5-4{tB zIUxk#g2)G)2K$hJ0+?F}dMY&2uD_!Vl;2U9diKGUD$A!tjDy?V47GT+Wz8BKx1`W& z0#}GoAmAn(GB6_lFzB9$G}fB$oJhN#yqV$JUiTz+IBh3?6<@&4Js!i|+dq5eqel*K zvdiwZ8KzXyeFPxUZ6OytOKPGuQ4Ay&;9vaHcFFEp_lu^XFt10flEx$k8kWFUtgKO0 z-TxU}LVPL{x(qO1V8g^DJd@N#(1{V*8E1{oF#)F zattRGG9kQR?Z->6%Afe_uQ%}>c}J%#(L^{3>sN5)SHM3KHybIwF$p$EPX;0E8T6az z1Ag4N!L&M{5hA_S65=Pr2~K4`D7Tn6#; zgUu7I))^e4T!OEOx`mDPWsQ7;NwEexlruV9SH9Sm4xi6_m;* z*lCfz5ADO7i15f>XaEEmm*Fm=`TTlUoqQa2GYt@0)}Go=;W5H*eTq_5sZ;ojT}=1!={l)^gdgn^+Bn90iX@4)BdHbC7aGGz1SR6~fV!L}bnm$rw zH)1>v;wMaFVPx5JR3dnJ=5TA54QeKOP0S4!@%QwPx_t{)o6}R2zWoFGl!m$chV1mG zIwUI8W8~k87o$T>pU|l2-0RiO3VPw_uL)of#g)sK^FFNmX_w&r_@6`KsdwnQs64HY zDWOnW(f4^8;=2fcA#^*Ev(;n_CAaAZ`K_%IE863mKa@n5{0ok(i~b8 zn{gsoS5^3({%;c-!=hKrGDk*|F}c zz8IroKiopu5L3^Xje~ZQTU|F-WjeU2W%>{}F=cISZKzHRCFC94EBgAoz`||7j*XQ5 z;YMN0;N(!K#Tat{CMag2;V5;xPv{2MWRACLMo3rC0yZjesSqzlI#h-#PE=gH7e9YS ztp}u57657MYqV};Oz6#GDT5rzeLQQ)Cmc!0jkVdmb?C)x5f?App&+wesV=le)9z!A zCJiNW{q$--8ogwPHSlOqxihq>g-0V+QPtAeWcX(3uScaoEpi%6h$uFPE9BnirpQb7 zfW52vP10qk)+5)-Dvc|5%N=R01NW4S;ow|nQ(x%9xrY$86(ffIJ+DQrgi9be@?y`p zh5X+Ot}{gEP*VxnEvd|P?(5w}$g@l_qSgbVDj?*@QJlM^NrZ5$^2*Q#!Hywo30109 zkq(Cd{Xkw?1yj;F=dVUN?9Jc-#SxwHuc6YzdoAS3mUq*V%ZKa+H`oby(o5@vq9HyA5s)XaxP2xP+RCaz*#7uGw*yGfF znOx?u4hMOyg}kto$~i$F*8fw@X`{KDvRPWXfb8)r%=uadbKemtqWz9eS8imq))Q^G-oAeP_yTr~VuwoulZ|Z+EN55R4FCQ%8BR<0g+quH@rHwL!2oS#u{y-K7jJBow z=$|)!3}QMxmYt1pAPmNT@ux=1wY9Y?tE)+bA=9CJ<)|S>h}q>IgcE9m!V1P^54^(T zcoYz4;A2Ty&ifB(JcEVLULnJDfv&BJ<5J0SA;knW6!+}elb%wF(r9`&kvxs{h=6WXG`Y0Ylr*uXrm;Ae!X4X^GBR{QDG>7_p*!BlF4quJ z6Kzk=f}SW4X_MG&@%KR$w=knh2bqwUqG==Jr@6B!KzkH-I=ls5k)D#Wh0r?S0Z|UI zxFeSiKVS&^@n70MV>*W92tih0@p@LbQ$Cy(b%@nkfZ!HpyV~z=P|#v*68*~5loWc+ zrk0k&|5&2x^y^wrfF7+1}1h=g=WP)J{$>K5$?mhL0Q9+^j?6ziEiHl$6v76O(k59R_`# z#U_9L_6w;-ZV&%1nM5sjlqN(QS!;-KJ$cT240Q!8=;ujgWrr}W`Y=8~OPK3#cW;O$ z=jOUs?}?6%X2nD7En_4rDS3xfU8shyCi%iWgUjXqsRZ--cjnYb1(3!?ZFCk;P0IcI zCxn;Yc=_QqQkFBxhFAxqqb}dQ6pxVJvt)X5M6>FHt_U!MM4)z#)%m!5A-eoV@c7B{ zx*t&c%8FoTk#Q7jkNo`n%Dm$j zG9+`b&6i&C^Y?FRZYH120K?B{dO@1~{vSedGe>}GJr25+j`!2kHMVcxP6u^DQEsj- z1Pdf-+s-E@BO_BZ*Jsr8dT`-d5%>MXpuibsgf)u~vCR9r%_J0X3`y@dAh?yiJ!Ij~ zssw0Js?v4iPzGw^+0nq8m$ufT&sY1MoHv(DW5|q@Mt4`%)J(nHnZRamK@E>yYS5cw z*77D9y5wtn_^`j1Vl4G00Lbq>Yy3>o<>fkeBgZyut?RV4ek6-F7#F?c?^|7bt&)ivx9>ek2b{qP<5DyRn z3L9Hn*SKEX!+0!&sDAk*9^g@P^SIX5){x-fyPcgTXt=)Os_Lmn z)IqdPflG1HR7+zc5pwVhn_yHWkW)(}qOl2_2rqENg&o3&+NWo2oqE>Vy6MfEq}o~y z8ENTHF!CCIIYJu;=~Z${iW>M&vH>n;*b_4DLq;?>8KW4YhTbvushh*-N4WZ(LsD|G zDn1&b8Ch?qe=0(%O0sWEw^KVOm&y}El%TMVC!2VF6JzN}9thlXCjh+N3JpyplL#7g z2Y%vfj?hnxf13Wk<5ZqhGXI@p^?z|9|L1?o;}f|*9g!hzU`L0#>OqYI>A(H{$G-uZ C?$zM{ literal 0 HcmV?d00001 diff --git a/validphys2/src/validphys/tests/test_plots.py b/validphys2/src/validphys/tests/test_plots.py index 45a40a6616..4421c70eaf 100644 --- a/validphys2/src/validphys/tests/test_plots.py +++ b/validphys2/src/validphys/tests/test_plots.py @@ -41,6 +41,21 @@ def test_dataspecschi2(): ) +@pytest.mark.linux +@pytest.mark.mpl_image_compare(tolerance=TOLERANCE_VALUE) +def test_plotfancy(): + return next( + iter( + API.plot_fancy( + dataset_input={'dataset': 'NMC_NC_NOTFIXED_P_EM-SIGMARED', 'variant': 'legacy'}, + theoryid=THEORYID, + pdfs=[PDF], + use_cuts='internal', + ) + ) + ) + + @pytest.mark.linux @pytest.mark.mpl_image_compare(tolerance=TOLERANCE_VALUE) def test_plot_smpdf(single_data_internal_cuts_config): From 0a586eade94620beffbf9a491fd98a1797b0cb8f Mon Sep 17 00:00:00 2001 From: Radonirinaunimi Date: Wed, 13 Nov 2024 11:30:27 +0100 Subject: [PATCH 07/10] Use dataset from the test configuration --- validphys2/src/validphys/tests/test_plots.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/validphys2/src/validphys/tests/test_plots.py b/validphys2/src/validphys/tests/test_plots.py index 4421c70eaf..dadb659749 100644 --- a/validphys2/src/validphys/tests/test_plots.py +++ b/validphys2/src/validphys/tests/test_plots.py @@ -6,7 +6,7 @@ import pytest from validphys.api import API -from validphys.tests.conftest import DATA, PDF, THEORYID +from validphys.tests.conftest import DATA, PDF, SINGLE_DATASET, THEORYID TOLERANCE_VALUE = 18 @@ -47,10 +47,7 @@ def test_plotfancy(): return next( iter( API.plot_fancy( - dataset_input={'dataset': 'NMC_NC_NOTFIXED_P_EM-SIGMARED', 'variant': 'legacy'}, - theoryid=THEORYID, - pdfs=[PDF], - use_cuts='internal', + dataset_input=SINGLE_DATASET, theoryid=THEORYID, pdfs=[PDF], use_cuts='internal' ) ) ) From 2885f3d89c53df69b6b559ed70b8ccfc4790e1af Mon Sep 17 00:00:00 2001 From: juacrumar Date: Fri, 22 Nov 2024 05:52:43 +0100 Subject: [PATCH 08/10] more changes for mpl --- validphys2/src/validphys/dataplots.py | 29 ++++++++++++--------------- validphys2/src/validphys/plotutils.py | 12 ----------- 2 files changed, 13 insertions(+), 28 deletions(-) diff --git a/validphys2/src/validphys/dataplots.py b/validphys2/src/validphys/dataplots.py index b785a2fe26..37800b8be3 100644 --- a/validphys2/src/validphys/dataplots.py +++ b/validphys2/src/validphys/dataplots.py @@ -335,12 +335,6 @@ def _plot_fancy_impl( # the rest. next_color = itertools.chain(['#262626'], plotutils.color_iter()) - # Extract the y-limits for this particular plot. This is needed in order - # to define the y-range because `ScaledTranslation` acts at the level of - # display coordinates, so there is no way the ranges of the offset data - # can be known a priori. - ymin, ymax = plotutils.extract_ylims(line_data, len(results)) - for i, (res, lb, color) in enumerate(zip(results, labellist, next_color)): if labels: if lb: @@ -367,14 +361,8 @@ def _plot_fancy_impl( transform=next(offset_iter), ) - # This has to be called before instantiating the drawing - if normalize_to is not None and not np.isnan([ymin, ymax]).any(): - margin_fraction = 0.05 # 5% margin - margin = (ymax - ymin) * margin_fraction - ax.set_ylim([ymin - margin, ymax + margin]) - # We 'plot' the empty lines to get the labels. But - # if everything is rmpty we skip the plot. + # if everything is empty we skip the plot. if np.any(np.isfinite(cv)): max_vals.append(np.nanmax(cv + err)) min_vals.append(np.nanmin(cv - err)) @@ -401,13 +389,22 @@ def _plot_fancy_impl( if info.x_scale: ax.set_xscale(info.x_scale) - if info.y_scale: - ax.set_yscale(info.y_scale) - if normalize_to is None: if info.y_label: ax.set_ylabel(info.y_label) + if info.y_scale: + ax.set_yscale(info.y_scale) else: + # Rebuild the limits of the plot looking at the max and min values + margin_fraction = 0.05 + ymax = max(max_vals) + ymin = min(min_vals) + margin = (ymax - ymin) * margin_fraction + ax.set_ylim((ymin - margin, ymax + margin)) + + # Normalized plots should always be linear in the y axis + ax.set_yscale("linear") + lb = labellist[normalize_to] ax.set_ylabel(f"Ratio to {lb if lb else norm_result.label}") diff --git a/validphys2/src/validphys/plotutils.py b/validphys2/src/validphys/plotutils.py index 07bf81b29d..f6cb991d36 100644 --- a/validphys2/src/validphys/plotutils.py +++ b/validphys2/src/validphys/plotutils.py @@ -302,18 +302,6 @@ def offset_xcentered(n, ax, *, offset_prop=0.05): yield offset_transform -def extract_ylims(line_data, ndata): - """Extract the lowest and maximum values of all the data and predictions - by accounting for the error bars. - """ - min_vals = [] - max_vals = [] - for i in range(ndata): - min_vals.append(line_data[('cv', i)].values - line_data[('err', i)].values) - max_vals.append(line_data[('cv', i)].values + line_data[('err', i)].values) - return np.nanmin(min_vals), np.nanmax(max_vals) - - def centered_range(n, value=0, distance=1): """Generte a range of ``n`` points centered around ``value``, unifirmely sampled at From a0a980184bf04c3627e726945500da245005815f Mon Sep 17 00:00:00 2001 From: juacrumar Date: Fri, 22 Nov 2024 18:13:20 +0100 Subject: [PATCH 09/10] try with another dataset: --- .../tests/baseline/test_plotfancy.png | Bin 35844 -> 45393 bytes validphys2/src/validphys/tests/test_plots.py | 12 +++++------- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/validphys2/src/validphys/tests/baseline/test_plotfancy.png b/validphys2/src/validphys/tests/baseline/test_plotfancy.png index 75aecd6a16818d44e5107fc4fc46d2941e71dfe4..5fb10a97deba3c32d7d471957e47b6cc2591e3ba 100644 GIT binary patch literal 45393 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 literal 35844 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 C?$zM{ diff --git a/validphys2/src/validphys/tests/test_plots.py b/validphys2/src/validphys/tests/test_plots.py index dadb659749..08d21c7878 100644 --- a/validphys2/src/validphys/tests/test_plots.py +++ b/validphys2/src/validphys/tests/test_plots.py @@ -44,13 +44,11 @@ def test_dataspecschi2(): @pytest.mark.linux @pytest.mark.mpl_image_compare(tolerance=TOLERANCE_VALUE) def test_plotfancy(): - return next( - iter( - API.plot_fancy( - dataset_input=SINGLE_DATASET, theoryid=THEORYID, pdfs=[PDF], use_cuts='internal' - ) - ) - ) + fig = API.plot_fancy(dataset_input=DATA[2], theoryid=THEORYID, pdfs=[PDF], use_cuts='internal')[ + 0 + ] + fig.tight_layout() + return fig @pytest.mark.linux From 5c6126b9f52206ca75fa2f1f6a80478d8ab027f8 Mon Sep 17 00:00:00 2001 From: juacrumar Date: Fri, 22 Nov 2024 19:07:58 +0100 Subject: [PATCH 10/10] different tolerance per systme --- .github/workflows/python_installation.yml | 2 +- conda-recipe/run_test.sh | 5 +++-- validphys2/src/validphys/tests/test_plots.py | 16 ++++++++-------- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/.github/workflows/python_installation.yml b/.github/workflows/python_installation.yml index 8597c5a218..a7591d41b8 100644 --- a/.github/workflows/python_installation.yml +++ b/.github/workflows/python_installation.yml @@ -43,4 +43,4 @@ jobs: shell: bash -l {0} run: | conda activate test - pytest --pyargs --mpl validphys n3fit + pytest --pyargs --mpl validphys n3fit --mpl-default-tolerance 18 diff --git a/conda-recipe/run_test.sh b/conda-recipe/run_test.sh index 5be3fb78d7..bc909ec879 100644 --- a/conda-recipe/run_test.sh +++ b/conda-recipe/run_test.sh @@ -3,8 +3,9 @@ set -u set -v set -e -#Python tests for the installed validphys package -pytest --pyargs --mpl validphys +# Python tests for the installed validphys package +# Note that the default tolerance in the conda test is higher than the pip test +pytest --pyargs --mpl validphys --mpl-default-tolerance 22 platformstr=`uname` diff --git a/validphys2/src/validphys/tests/test_plots.py b/validphys2/src/validphys/tests/test_plots.py index 08d21c7878..12c7c8523e 100644 --- a/validphys2/src/validphys/tests/test_plots.py +++ b/validphys2/src/validphys/tests/test_plots.py @@ -12,7 +12,7 @@ @pytest.mark.linux -@pytest.mark.mpl_image_compare(tolerance=TOLERANCE_VALUE) +@pytest.mark.mpl_image_compare() def test_plotpdfs(): pdfs = [PDF] Q = 10 @@ -22,7 +22,7 @@ def test_plotpdfs(): @pytest.mark.linux -@pytest.mark.mpl_image_compare(tolerance=TOLERANCE_VALUE) +@pytest.mark.mpl_image_compare() def test_dataspecschi2(): dsinpts = [ {'dataset': 'NMC_NC_NOTFIXED_P_EM-SIGMARED', 'variant': 'legacy'}, @@ -42,7 +42,7 @@ def test_dataspecschi2(): @pytest.mark.linux -@pytest.mark.mpl_image_compare(tolerance=TOLERANCE_VALUE) +@pytest.mark.mpl_image_compare() def test_plotfancy(): fig = API.plot_fancy(dataset_input=DATA[2], theoryid=THEORYID, pdfs=[PDF], use_cuts='internal')[ 0 @@ -52,26 +52,26 @@ def test_plotfancy(): @pytest.mark.linux -@pytest.mark.mpl_image_compare(tolerance=TOLERANCE_VALUE) +@pytest.mark.mpl_image_compare() def test_plot_smpdf(single_data_internal_cuts_config): return next(iter(API.plot_smpdf(**single_data_internal_cuts_config))) @pytest.mark.linux -@pytest.mark.mpl_image_compare(tolerance=TOLERANCE_VALUE) +@pytest.mark.mpl_image_compare() def test_plot_smpdf_categorical(single_data_categorical_internal_cuts_config): return next(iter(API.plot_smpdf(**single_data_categorical_internal_cuts_config))) @pytest.mark.linux -@pytest.mark.mpl_image_compare(tolerance=TOLERANCE_VALUE) +@pytest.mark.mpl_image_compare() def test_plot_obscorrs(single_data_internal_cuts_config): corrpair = [{"corrpair": (i["dataset"],)} for i in DATA[:2]] return API.plot_obscorrs(**single_data_internal_cuts_config, corrpair=corrpair) @pytest.mark.linux -@pytest.mark.mpl_image_compare(tolerance=TOLERANCE_VALUE) +@pytest.mark.mpl_image_compare() def test_plot_xq2(): theoryid = THEORYID use_cuts = "nocuts" @@ -95,7 +95,7 @@ def test_plot_xq2(): @pytest.mark.linux -@pytest.mark.mpl_image_compare(tolerance=TOLERANCE_VALUE) +@pytest.mark.mpl_image_compare() def test_plot_xq2_custom(): theoryid = THEORYID use_cuts = "nocuts"