From 7802e4da12184f69887148c14e1bec817842dedd Mon Sep 17 00:00:00 2001 From: Stef Smeets Date: Mon, 14 Oct 2024 10:55:50 +0200 Subject: [PATCH 1/9] Add boilerplate to matplotlib function [wip] --- .../matplotlib/_vibrational_amplitudes.py | 38 +++++++++++++++++-- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/src/gemdat/plots/matplotlib/_vibrational_amplitudes.py b/src/gemdat/plots/matplotlib/_vibrational_amplitudes.py index da1df8b..8251a7e 100644 --- a/src/gemdat/plots/matplotlib/_vibrational_amplitudes.py +++ b/src/gemdat/plots/matplotlib/_vibrational_amplitudes.py @@ -10,26 +10,56 @@ from gemdat.trajectory import Trajectory -def vibrational_amplitudes(*, trajectory: Trajectory) -> plt.Figure: +def vibrational_amplitudes( + *, trajectory: Trajectory, bins: int = 50, n_parts: int = 1 +) -> plt.Figure: """Plot histogram of vibrational amplitudes with fitted Gaussian. Parameters ---------- trajectory : Trajectory Input trajectory, i.e. for the diffusing atom + bins : int + Number of bins for the histogram + n_parts : int + Number of parts for error analysis Returns ------- fig : matplotlib.figure.Figure Output figure """ - metrics = trajectory.metrics() + trajectories = trajectory.split(n_parts) + single_metrics = trajectory.metrics() + metrics = [trajectory.metrics().amplitudes() for trajectory in trajectories] + + max_amp = max(max(metric) for metric in metrics) + min_amp = min(min(metric) for metric in metrics) + + max_amp = max(abs(min_amp), max_amp) + min_amp = -max_amp + + data = [] + + for metric in metrics: + data.append(np.histogram(metric, bins=bins, range=(min_amp, max_amp), density=True)[0]) + + # offset to middle of bar + offset = (max_amp - min_amp) / (bins * 2) + + columns = np.linspace(min_amp + offset, max_amp + offset, bins, endpoint=False) + + mean = [col.mean() for col in columns] + std = [col.std() for col in columns] fig, ax = plt.subplots() - ax.hist(metrics.amplitudes(), bins=100, density=True) + # hist goes here + # ax.hist(metrics.amplitudes(), bins=bins, density=True) + + plt.hist(columns, columns, weights=mean) x = np.linspace(-2, 2, 100) - y_gauss = stats.norm.pdf(x, 0, metrics.vibration_amplitude()) + y_gauss = stats.norm.pdf(x, 0, single_metrics.vibration_amplitude()) ax.plot(x, y_gauss, 'r') ax.set( From 0eb7ae1c23893f79b56d551662af627f4f20aca5 Mon Sep 17 00:00:00 2001 From: Stef Smeets Date: Mon, 14 Oct 2024 14:05:07 +0200 Subject: [PATCH 2/9] Update matplotlib plot to match plotly version --- .../matplotlib/_vibrational_amplitudes.py | 15 ++++++--------- .../plot_mpl_test/vibrational_amplitudes.png | Bin 19743 -> 21256 bytes 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/gemdat/plots/matplotlib/_vibrational_amplitudes.py b/src/gemdat/plots/matplotlib/_vibrational_amplitudes.py index 8251a7e..c932653 100644 --- a/src/gemdat/plots/matplotlib/_vibrational_amplitudes.py +++ b/src/gemdat/plots/matplotlib/_vibrational_amplitudes.py @@ -7,12 +7,14 @@ from scipy import stats if TYPE_CHECKING: + import matplotlib.figure + from gemdat.trajectory import Trajectory def vibrational_amplitudes( *, trajectory: Trajectory, bins: int = 50, n_parts: int = 1 -) -> plt.Figure: +) -> matplotlib.figure.Figure: """Plot histogram of vibrational amplitudes with fitted Gaussian. Parameters @@ -44,17 +46,12 @@ def vibrational_amplitudes( for metric in metrics: data.append(np.histogram(metric, bins=bins, range=(min_amp, max_amp), density=True)[0]) - # offset to middle of bar - offset = (max_amp - min_amp) / (bins * 2) - - columns = np.linspace(min_amp + offset, max_amp + offset, bins, endpoint=False) + columns = np.linspace(min_amp, max_amp, bins, endpoint=False) - mean = [col.mean() for col in columns] - std = [col.std() for col in columns] + mean = np.mean(data, axis=0) + std = np.std(data, axis=0) fig, ax = plt.subplots() - # hist goes here - # ax.hist(metrics.amplitudes(), bins=bins, density=True) plt.hist(columns, columns, weights=mean) diff --git a/tests/integration/baseline_images/plot_mpl_test/vibrational_amplitudes.png b/tests/integration/baseline_images/plot_mpl_test/vibrational_amplitudes.png index 1571ca6f2cc59f564d0be37e03dc0b09abbe2495..9c1f48ab3869e5f0baba985fdc7360a927a5fa2f 100644 GIT binary patch literal 21256 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 literal 19743 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 Date: Mon, 14 Oct 2024 14:43:32 +0200 Subject: [PATCH 3/9] Refactor shared plotting code --- src/gemdat/plots/_shared.py | 22 +++++++++++ .../matplotlib/_vibrational_amplitudes.py | 33 +++++++---------- .../plots/plotly/_vibrational_amplitudes.py | 35 +++++++----------- .../plot_mpl_test/vibrational_amplitudes.png | Bin 21256 -> 21194 bytes .../vibrational_amplitudes.png | Bin 42564 -> 42415 bytes 5 files changed, 48 insertions(+), 42 deletions(-) diff --git a/src/gemdat/plots/_shared.py b/src/gemdat/plots/_shared.py index 13ccbd1..829dff1 100644 --- a/src/gemdat/plots/_shared.py +++ b/src/gemdat/plots/_shared.py @@ -84,3 +84,25 @@ def hex2rgba(hex_color: str, *, opacity: float = 1) -> str: b = int(hex_color[5:7], 16) return f'rgba({r},{g},{b},{opacity})' + + +def _get_vibrational_amplitudes_hist(*, trajectories: list[Trajectory], bins: int) -> tuple: + metrics = [trajectory.metrics().amplitudes() for trajectory in trajectories] + + max_amp = max(max(metric) for metric in metrics) + min_amp = min(min(metric) for metric in metrics) + + max_amp = max(abs(min_amp), max_amp) + min_amp = -max_amp + + data = [] + + for metric in metrics: + data.append(np.histogram(metric, bins=bins, range=(min_amp, max_amp), density=True)[0]) + + columns = np.linspace(min_amp, max_amp, bins, endpoint=False) + + mean = np.mean(data, axis=0) + std = np.std(data, axis=0) + + return columns, mean, std diff --git a/src/gemdat/plots/matplotlib/_vibrational_amplitudes.py b/src/gemdat/plots/matplotlib/_vibrational_amplitudes.py index c932653..29a89d8 100644 --- a/src/gemdat/plots/matplotlib/_vibrational_amplitudes.py +++ b/src/gemdat/plots/matplotlib/_vibrational_amplitudes.py @@ -6,6 +6,8 @@ import numpy as np from scipy import stats +from .._shared import _get_vibrational_amplitudes_hist + if TYPE_CHECKING: import matplotlib.figure @@ -31,32 +33,23 @@ def vibrational_amplitudes( fig : matplotlib.figure.Figure Output figure """ - trajectories = trajectory.split(n_parts) - single_metrics = trajectory.metrics() - metrics = [trajectory.metrics().amplitudes() for trajectory in trajectories] - - max_amp = max(max(metric) for metric in metrics) - min_amp = min(min(metric) for metric in metrics) - - max_amp = max(abs(min_amp), max_amp) - min_amp = -max_amp - - data = [] + metrics = trajectory.metrics() - for metric in metrics: - data.append(np.histogram(metric, bins=bins, range=(min_amp, max_amp), density=True)[0]) - - columns = np.linspace(min_amp, max_amp, bins, endpoint=False) + trajectories = trajectory.split(n_parts) - mean = np.mean(data, axis=0) - std = np.std(data, axis=0) + amplitudes, mean, std = _get_vibrational_amplitudes_hist( + trajectories=trajectories, bins=bins + ) fig, ax = plt.subplots() - plt.hist(columns, columns, weights=mean) + plt.hist(amplitudes, amplitudes, weights=mean) + + min_amp = amplitudes.min() + max_amp = amplitudes.max() - x = np.linspace(-2, 2, 100) - y_gauss = stats.norm.pdf(x, 0, single_metrics.vibration_amplitude()) + x = np.linspace(min_amp, max_amp, 100) + y_gauss = stats.norm.pdf(x, 0, metrics.vibration_amplitude()) ax.plot(x, y_gauss, 'r') ax.set( diff --git a/src/gemdat/plots/plotly/_vibrational_amplitudes.py b/src/gemdat/plots/plotly/_vibrational_amplitudes.py index dc7d765..e54d0c0 100644 --- a/src/gemdat/plots/plotly/_vibrational_amplitudes.py +++ b/src/gemdat/plots/plotly/_vibrational_amplitudes.py @@ -8,6 +8,8 @@ import plotly.graph_objects as go from scipy import stats +from .._shared import _get_vibrational_amplitudes_hist + if TYPE_CHECKING: from gemdat.trajectory import Trajectory @@ -29,41 +31,30 @@ def vibrational_amplitudes( fig : plotly.graph_objects.Figure Output figure """ + metrics = trajectory.metrics() trajectories = trajectory.split(n_parts) - single_metrics = trajectory.metrics() - metrics = [trajectory.metrics().amplitudes() for trajectory in trajectories] - - max_amp = max(max(metric) for metric in metrics) - min_amp = min(min(metric) for metric in metrics) - - max_amp = max(abs(min_amp), max_amp) - min_amp = -max_amp - - data = [] - for metric in metrics: - data.append(np.histogram(metric, bins=bins, range=(min_amp, max_amp), density=True)[0]) + amplitudes, mean, std = _get_vibrational_amplitudes_hist( + trajectories=trajectories, bins=bins + ) - df = pd.DataFrame(data=data) + min_amp = amplitudes.min() + max_amp = amplitudes.max() - # offset to middle of bar + # offset to middle of bar for plotly offset = (max_amp - min_amp) / (bins * 2) + amplitudes += offset - columns = np.linspace(min_amp + offset, max_amp + offset, bins, endpoint=False) - - mean = [df[col].mean() for col in df.columns] - std = [df[col].std() for col in df.columns] - - df = pd.DataFrame(data=zip(columns, mean, std), columns=['amplitude', 'count', 'std']) + df = pd.DataFrame(data=zip(amplitudes, mean, std), columns=['amplitude', 'count', 'std']) if n_parts == 1: fig = px.bar(df, x='amplitude', y='count') else: fig = px.bar(df, x='amplitude', y='count', error_y='std') - x = np.linspace(min_amp, max_amp, 100) - y_gauss = stats.norm.pdf(x, 0, single_metrics.vibration_amplitude()) + x = np.linspace(min_amp, max_amp, 100) + offset + y_gauss = stats.norm.pdf(x, 0, metrics.vibration_amplitude()) fig.add_trace(go.Scatter(x=x, y=y_gauss, name='Fitted Gaussian')) fig.update_layout( diff --git a/tests/integration/baseline_images/plot_mpl_test/vibrational_amplitudes.png b/tests/integration/baseline_images/plot_mpl_test/vibrational_amplitudes.png index 9c1f48ab3869e5f0baba985fdc7360a927a5fa2f..4bc424c7622ca6fb23e1f3f70fb667c85fa34faa 100644 GIT binary patch literal 21194 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 C#$b^E literal 21256 zcmeFZXHZn@)-Eb4B6*1fQNmJapvjVHl4QEc4I)UCj3PN_R6v4+CP_|>fC&*L2m*qL zlt=>gDWY{kM;uho_UP zi>RQqpfLa6j$U4Fo+u%qyZ?2ApsR<2kl1OBDj0;^O~b_V#0lD4#1BcSLW$Ff6IgGw zilU)k_Rn!&zm)6EksC5ze?7eRSJ{=Av!!AThB0F2&XIIpQ8lltTjpI|ep&bI4?;jNyo^8>l{ z3-t^52TBEh;W*LQxD*Oh7$+J>mla_Ee_ypDq`sAWE z`gLocmCwk54J5Mog6O>Y?ctZKTh1|YmXe4p_B}KVHK?}k$tGezi@`m^^O|cU^fTp*veqShbJs>NNXn7n&Q!kK5lMl*;IG#$4=d-I=Oc z5_c(rpDQo_@5^x+UE^RPC+THAzSxzO6{UpEt}gyGSsZ;YD2G?r^XL4TVon&Ho}v6A z4Xn~DH_QMD*q7au?tg?bgtq3{V;mYA1PX->&pi2pQu@b{G3ORFbPRPb z%sfTR_G4rHUwm&ALU3Zv&)#N%zXOx$Hmf-4tBxb~P#~#f~1KJmJ5B1!d zZv1n>$??Y@=`PamS8O?9B)Rl+-fB&;U`^NupW_V2h@1C#APjvN^Lho(m%JbS?VLiJ zZ}v4`u7NQAi4t!0slqKBT@-8+P0P7iVUp5MT<=6O_~WH#7cx8Bx2@_dfi#K`wbU zY4W6Jk)FhErkXli3GJ>hj`2R(*4@i(H%j%QNhw7Ha&Q>_s4s}6zfx>ugxtjQ1|Nog zoZ3HD5=uMK+y8)Gp3I(cT_QU>`-QE8L)+gGoT^a{QgHWS5}9;v#G83}k6O{?-o{6p zW|UfXB*Pn|y>7~1ER}IFv2YtwiF-plbXJjVT4!Eg!M;41MpjdSjX<;fTFk!u-!|`T zinU~~C-r3iW3qjlF3U9cFWk1UBAc^03b<6- zT<#w;5jPj~>C@paP9!7jvZ0FI=!ZPNFv&eqQK_O43tzEdbP30!qOx$@!=PTp;4}8X2-p7@YCDIu)qGKLJ7+?oJcXSk@lb_7aIzL);Kjr^u z#^fWSp1IOl^}KxNzWhS}BeYgwV3R**nIkL@r{?3cllxkl#W5g}WAeV7@(s znkR{;<8@~f%1x4mP397J+Fg-o7jX6XD-~`SjFNWv5LxYUsPb~-6t&Kj%o*WAV;qBE zP?{(I`=u`WCvLWV;hbf97Gj)evW-heA5Om$jg?STA9Y}PzZa8Sn-O}3RTUTW5xfkk zV|&oI4W#bIkNhH*zax&<`2s{E-#w>7#c?taeJN>8ZW4bHjg7RzB9DK4$KM{MO<&_^ zP%;0yx?f5~H65HgbJHiiX=yd9wBs4o^i4H=)S@uX@GP9ooXuZ)(JZ+OnfXQZi%u^2 zY|j=My#7M-!am_P&$^!yj-=r)vgo@-Ar@s6gzBuDm|ZZ)H=ul9dWq| zo(w{pGdcb6H7FIjg2^Ry!90W_&#apEL7J1H@22S`3`-?pHTDXix zB*1!hE;OAT!akyPJm;12@WqdB44Bk=l9N=#hi^e#cS4EE>a?rpIT_8V9;JxU;Mt_U zBC`6Oo3JP(Eo>FZ-Tf3b{(12;XISU@s9DbD1)Yp#BFj<1?SPDOTK!#K5r?wvySm5| zwR(>-AB*t&^D94DV<2SObxZ?HsaV|}sq6a1Q|-lGeeN`9dwZ@E)G}WA)3HLh(IWMR zw&LRA{(Qyz);iqCQE+jH_dQw!N25F<-#o|y`=qH+Uw)78DONWs8cVWs$_ z*Z^DMp<#|4xb*o>kfx3O02jR7N-mL-ip*Xlm-%@y@2MKP$No*<-8?+1a5*`wUXEz= zCs7dUoBkd(iAl2UFRo!=Hp&M1;xggYi@hhfHn}YxZtbG6h3ix$c)SnWT2hCan(*I? zJo;M~Pf4e-JGRBaLDCt+4C_eZthip7G({__M`t>DSs}fdn;!n>Vr7hTG1JVR(4YJ9 zbk}QB=BYzIwAQOq)DnYX$`bsnH_iFdj}mJALNKyqOvsm8q$L~vu+{C&NTmO-IoA39 zxCk*C6y{5CSH^R$M-BDoz39>4<1jkKqpGf-)@g!a;PbU9_Ehf$vT>NxFecuMkzN1( zTXIt=l8FK#?TlV>evk}2rvo7+CFS=fjb_=UlGyi5-74=YBQV>yyx?sJX?Tv4zEEgQ zI8*)s-QIUA8U|)v+NiGxQbG5|K@65ehaeL_7xjQmXYvQ@?}2z`mhKo>BE}k|99<%0 zV4};rWPemvG$Z7^zcWy(w*lo`(nhBC$Q z_sL}G9Bo5t6sBT7DYEMcA~@qBYzrC`1L>49@hY6AX_2$Wc=1}%Qj33(N=E*D4Gbn^ zEs1{j_3PK4dwK-7YhG}uW6xYrKd^4Ujsr7()cighLU%M8S=d}_-+gf+^f*{VM8x=w z<2lF+3NWd>UtXGL`TYFW|31)HM}B{Hq&O9S%GS=VACEQwp<)bJ(Y$uuiur8}!W1nM zJM%yZ!9vBg$^k8d5Dc$pb8L)AIopi zz@Q>}2#3GQL$#k7z1V}7_^nj5Jyr;n|1tE!W_7GqD^EVhq|&~^ww=zX+@kw)5{L9^ z%}mXF<{hb@Zw8GUg8Vn?nQ$rw`QG8K0?5{W=lMVRHfI)td+-Q7pRZ4eXDkwtOBj0} zD47?$!~DXuT7J=8{Pvf8-8}j2rNJoiJ45RuHVGBCzw$1BDLda?kMq*#nURygh9`U` zM`5hE`r^m0eN9k^^h|az;X!}kd*dd*)g^jP!RgUOaliEsWVGVRoT}!!6ApCT6|q7f zB#+;+v^z9Kv)8ee;HT$aYvAZC#D_rQ>UCrDi%zcw=P$=Gzw&e-O6@t2+6Tiq(J5T% zyV8h7p720+p7(Z?L7Qme)ud8}p1IC+gDPi}j&vdR7bPk9(#7_Jpl&pOky@YrNy+mg zCND15=XIs)qIq5P`Lf~Wk~_mMy_NPt0wDMEIjnQac#hW5gMJDYB+f*n_bj3!OD4|p6L-7wzhVu)crjBy{d5;VU96g{M z(G?ZuGCbEQsSiIp2fQI|J#44}L>S<=(e)b5|5j#0?RKRB;Xc&=Y`CI{u+;TgEU zIag-cD8G;wDlc&J%|m;67>uIU%TDBY{u2x)%om2GVw3fo6zDza&~SvhYY{5f+t0vj zX#L@ymSzdQg;Ad%JC|bMw^W>Novwx}%x9=9`*2g}LWj*i9x3yra1yy$XU-QwaGK|r z-v6FXM+p=*Ge5Yj9GRH;?l^HIjO5e>z!a=9I8&V=!nco~GWd3ewfMnpiZ^GblrNs} z9Z0=iKOInvqp|+@@Lb%5tJaO*C7eg}@NH@@+*T*vXOU7ep6GjSQt2ospews^8k9Hw z+ZGxVG@hY>${9h|!fO2PXxK2mSnN@;AZ+H(Xz+g6lp#po8RGx;#>rsOrpPDtx30pU zk7(|kkI0g2I-(9eyl!>rXU3{qz-g|592c#VN<^cbU+5EAdHd^AqF~_hc$FWJJ6Sty zoMRYS{hf90v5I6!FNfI7rG^53h;9)1pqU^U>+3DF>OYn^mlC}kuJB1^`ZJbX$+6lfKF*(w8f zS6jLf=yN}sqf)NS9(F4WC#}kM<-D;uGq`xciv>;2Re1T=qf3$lFH9weUYNEG>MCg8 zym_(l&retX&310-AI~c_w6*6(9r7NT-$bJx3I=@+%6ygm4#EH#PsjF~Px~{F#Jvdv zWiC=ru!retJr)kXQ~o{;{7L^ya~YS0eS7dSHM2O)P5!gI=+olnU!UDjmn`OF zC=|6kA)HzXu|)Ngz6@};TK~A))1Vl#8z0X@W?|i#CU7F#{S&k7@!?iio7Ui(Qp$URJ`888NQe{1neWg3ikAjozYOb#GkW5`HLsO}V%VW7aQ$BO zXudnk;KfaGi=YkFqrEl-TxRCQe-A-$`+bW-Kc+1EE+K{9`|uMIYZIy`J#bNySQQokhjrALuV82876vGkkq%UPrTE zfipBT50lPrLOms8MXYu&s2I74neP>zRoBG!)8CZ({>G_g@@Pl$AARGdicqRQSgp(U z`Q{X~GwRU)nFmcu8L>#EMfj4R%=wW1NuU4Z^b+G@sFPEAZNoJobcm7LKGQK8KLy0%pmH{ z%i73GE;ZrryvJ|qU{|gm9eVnl8eC@@bIee3z$9x%5yPYls_z_2&1yZ&{O3}MpXV0u zGnWQSDjoZ;5Ov_3I*a1ZZ*QHxR|#}yipK_9qkm`cS_Xa4vf{XYFCHh%=+2^9s_I|_ zX&d(5!#&<#nc{Z_$}Jm5@JV=$2TF$f)08(J#l3^Xk2i;z2?8$iD}@o0h%%K7g}m1g zO5Ey`rt6E!#%ShyofEo{ioXv@WQ?W3lfQV)GZXIhB!xY3yI367A?iSU!ASst;9|+^ zVt-HHkI~`$x3}ch!YSp?7gufd499? z$Ae#(z4_)W3f+t$!zx{VEFl06dwT3LL(j%c zn;k34O=#@?KtEGr&ZXrse!khb6qxc9E=>}h$lYzn`A`)nbF?yO&pE#$B3;S znYG#atsa}5l~L#Mcc}=?w3Ry7rGetHkb|H7Jv``x@1mi}mAy3ZBmCJ7TDHGMMQ>Zbh@gVTma%=TuNGCYH!W;wKkpn@=xZ)(rn}YcG*gNsA zj8iY$kW0cUhEm+RxuAC5H8b%to9~YyRzuKJR0QpBI?g5I>jwr443UnL@~}s)o>>x! zS(Jk%WUvt|v88VFv$J|{Z+{IwhERQU?a2GbP!bNO1XC_b*Td1I(m?A*9QbL z4FDzGuyLA`i*<6G`b=!mqy^`wYRqwxzTLg*(cuKjyPU}#EVApV??r?r)1#H3c5E} zt|(6fM`OQixH!nYNZ)R^Cac2~mhScNN@hz2L|R1&@*QKfo?Gva$9*S>wk*a-0{zX> z$jFbTWJ@yEvP5Tnf8mv#W*?ffwcsJe0x0kP4EwPLXx!HOP_V;hfj{4_jMa+X+~-^h z-LXLaJnWtxE<3;SjWjQa4kAN$p6Q&(c+yt)a~RaA-a1oM-^dwpGb=VfQDZ!J_Lp2kr{4c^D$PO{2?M`p!6 zq;LQ?24~yf5HU%+eRQy9@XpJLX#ZaX;pnTZNrQHCB1AQEP#+xf6m@inE69Kq5KjbL zXYj$!94!8u?*Z7@3n(uh-!XTx;NRN?nVqQ`F;z~3&7r7JQ7KlL=AEB}*eFiqNl*ar zl^Z+XT`Pn3Jy1~RAzB~^+e!_~=x&&MGjM0So$QrAa9$a}U@VxK3BUeMkVh?Yw*Qz- zzAP?&SdoZ7t5Q$1VB(PTkG{OR)dG%0Xr$g>6hylatg2biMr(?oIZ6VJKvc)YtusrI zmUuaVN*q?~4d&g`;XuZ-3^cD1L;kAoF0mmO(H*_t-md=|c02f~$gSTN?=~4sK;Sx9 z1`;5Bo;{D=i<$~hy9HcTM zGNGQmHybJRYCYUOF%uHnT|+N9eglfwbD*;~UYfOEZDX++O)(6T-#_iMwnOnN%+}t1zV^jt zzq)7hJMW;a`K(zn7piM;jMNv!&i-A1_xnqq;0(1kNIuwMBa5-cm-i=IiU z&jEikU7+b2Tf2KnbU&NX3xAONJu*4DG8JkA`O2ES1y@il8M(PS0RgDVkOKjA_Fyrv zP~DzSL=lJx2sKn?O7ONR$*1x{C_)cRVJ^myR-D}vd> zW}ehUVXv*N{qn*zT{}zSXPpo|g*)uLx=az?RxHrRuXj}^=bldCN!z}p$U}`_qtjr; z$(i&C*;j4O2sP|oA%2#YmbQNkyEY!w`L5|088Px1?RBdU-0JuohDpu$p5Vh@7ttz_ zJHh&x6_5*rnFogJoHe?WdJlp<|Z=&QSf4>t@4?_Cu2`e zVBgHAxrrHa)5`P zvxnqw;?ak!HRak_`7?`u!@{{gk+CYn?E4b~z}lJA`(3pR{>4D_CVm9cr$#T9Eq>r= zI_Gs2icyIl*tb?Zl6QX|<9=3P&}8Pc>s6smAi8=iDX4aWKEJ7oOSs?eIfHbD&q% ztG|y4;;_24h94~2=!)bdMIJ;%!u_6tD_LrMm{X~{W_rA6vY1l0D#!kN0CZH|{a!VK zz@?0dh>Z9&lRKY9Ma8VhTwFh|=RfqEIOhVGvs~cLEVw?xW~Yz?$SY_!(qB94)4b7( zdpZRV@re}<-X!P_T@_C$hpxvTz^d(S59%^Yy08GYQyB1T`G7SUB8Gr~fH$5P%o)w} z=H1E4{m4sGzlQJY6rHs_!PJ{Y_Pt6`^#)Von?`Ug5L-x3Kjc^(DArt|Lt`ukpOCy7 zrKFqb5z7aGBSIHDqX3*5HiOB6wA71BC;LL37!GHuc1Fyp`Q=4%P=K@Dq(0ZnlrrL| zAkvcskGucvPI>>c8$v#76RdSAINb0Xr@jiCKBU)Kk8lA2(^VNw0ki@rirG6a_YeE?Pu(~Q}F7<|SosU3Cj?YEAjudcU-ihj1GG!Rc&o9LF+Vl+;QKQVaxkJ$}rzJ3Z7HFcjSVzTUPi*+>pi z6&<*v{jWDH-CL+7X9F!edPDR8GiMkbdI2$xu$xsMnqC0jUfHX}Gb?ls_xHf%Uw{_@ zuOmj*6=FwmBBb+c`KwLy1M&(@KIBH%<8u}~WBXarMKe2>qsqv zG}qsy{Q5J-?kvd?@JC}_gWBN6)I^K$Drre1U!N+%v2yFb$#z%Uqxcm^<@il(Q4EI( zE42{&0>CaKzj2e~WYGEUlGK#XA|lP-P0}_metMu^O!3C$XM{3tCwkd;Z>`}VJ|%^| zBbASdcwec{N|>&^yG*AFglT>xe!lo*`lZC*pbU?tJ?;O2r*xpmLBwC$SbbUA*h7QF zL@^k{yigix>7Gd~6yLi2QMU#Whd6DKJ@xNn=84{WM zoQT(PRHbI4q|N8`4|WKAUqnS9(YeBx{quV@(Wtfm7j^~F%0qhzbhIGHsU8$%hsyQ~ zjST?tr1odm+xF5Mso-G3RJYCL#l=&JbR5A)_}Pj(OhMb{4hgidKhM2Z&Z>^^t6-;N z_X-QDCjw&OyyYhk5ciR&bYNnY|h*MHh5`tC4(`~O(JrW%mfkn=k)c1{A_!1}_VVgiMi3#wpAHxff zpLFjY_2kG@g8ewz8-^K>2WLv!+?fssZCz|6Ahn?aiv5{l0o)P??S93QB(DoVhxh>5`A*&4 zmPl&V0B2A?-?a(DQoV3Z!P*D6S|a-)$_(BuE-CQ@SlH#uR+3rSe$asHqNifTV+Jxlx!klPjKsLO6VGkTP65fBX#ZXB0( zCSZA@5Cdz#d%;vvf*D_kV6u34D3_RG28oSbrBXzGGSATM;mA*q07k}{eeAqq?nj6q z`W&c1j);$V{pYus(vg4Puq4mUgh^aNnAY_+w7)~1}s3|Y`|#Czp$6GZ?dA41OY z5aQiv*9lqUx}p87cDw<%->S6nTZ+w$V48jdh9>2Ed|&qPpC+|aT<&y&OGqARKJL5>fgLZV^jhcT-j`+#SxDK zeofWPu)ySrq6BF+5xIb|X9Gha`rQL0Y#)jog{ivOE94Q)#Vv&G*}<~p2m_2YfWl^# z_S6tA3#}hPMsgxCC+BCYGH&zt{H4!5Rc>6RU0q!#*PexRT@?e+DXk|%`F)x|tav(p z3jBM5{BOsGgH@R-m+{QCc;!m_?kflcVp5fWh~D<%F*wsBD+)6El;Ilk3@w}4)H&)f z_VCHviL^$6!}v4Q7wPXPp+CepYP@&o&7GZ}_xO7KMg_!`e^yN)cpE@qSMk~i7vDhO<{;*U&^L4ps?P6+yuz^dGL~!M* z3_fC#7$@$oju+*rVW%;=Q3J&wBOeExl#%%mEgel?Mr0`SW}8+yUxw0y$6SZ|7kzd8 zcV0`2+{r1%Pqe}fbR&4LgAjxrUSkb8%^SL*3UwKV$}6;G3$wFC^mh;h8sa%jk=mnD z05_qWPz)OgDCy-YG@`X!kEgyxZ=na)mXCdW(h#s9bcu$8RJwqv8q6vKs$A-<-t_MS zcjp01vtQ`R;Ww*E1bj1*{5+T2R=4C9l-54Uzs2w2GMIB4mvn5=YsypUlOdFMhMIEU zW+4y_R~ULIh3XU8Ll2Vx@6Y9XS#zcLuit>G)chJU-3OG8m_L060OBtIC#UK>cX-inx>Q!*qTPK)#f4#onGc3DYTIBch?eOB) zXH2xR>(`#Y#>Ct(cv2Jk?u0SL?3ZUuN7;!fViW?|5SV`{x6BLq^PAzfE!bPW&U7J% z{zBFM4sPVc+&n7O;9xXpxr|W<*$&tv#EhC?xnj3%L7BM$%>h|)v`tPq+i-Mo=;d3t z+j-h0xfI~Xa)tHb#S75M>kE;1yq+UL_F$!Q2@r~5%TPH`EuQaHcRM}13RPnl$Ll0vwPS&6?<+cZ zkrOKu)XdC+QTY0IUhZrqDJn5<_yu0=J)mzu~Y@Q za7Kox!)xy!Mkk1ncZ7mEe>S$6_z>As zwkXn@BwCD*vff%P%U6ii+B>=pd9zbP@qJGppU~0A~?%8QkE=-n#N)A4$jI+IKC; z=d?4$5Zn%T^7{>y49jT*Oq*xhL1aEa8D4d=>aK7w3P8jVNr(RwmC5|??S|D^vl$?+ zRlBTr@cl&*(d&c3Xh7Maf45)#Rd8U9*6cH6-|xS5rxF7O7Kf;hcByEDa*i<~&?&w#@I=F+9ftMzzj7*S@3tT*~G+pfr+ zM6XO7{jHBcS2nqM-I*Mfjlw%O9;3wTeV*YT*aF~hZt&!R&uD!!8 zBF0Co^)6=0GGCO8JVOmO#jpPfHU0_exgbLLpDSYRm02-b86pJpsCqXIj4|;wTQdpk z+VJ+m~C;Sjg8=5EXsc;As)E(Hsy zpY28WrEKQayOe9h8JN4c>`|4pEX6!YNmGMbn}y^wp!iw=?L*-P!3 z{?6G1a6#2@m|6i$?Wtk7XwO+xG@W*}3qdp|aN(?G%pKwsR`1j1YclbeN-T0>#Kdnm zIh8~xv~jk|!Eq~Bx^o0=MsG6 zY71lcNMHF?bY4d81nfLu7Pacm1W80u!Q_%INz(8dp0z9xY#s1lh>*Mh#4P$@BC{IH za#2#yOoHz^1uA-4@4u6*`<`Ck^K_YNdhC!)e~CE8=qnOnwKpEiL1ZEGuc~s5hWfv0 zkxqTjm<|sn3D?hc?Ad6>sMC~b#&kU(C$JyB4}kf*JN%2@#JKq%YGlj)LR7kX=2ebG z-)jSxH*ct-lb9uGbWr5+(oh14F$E@`s>0!$!F>Df^#zNAoeC;0q?&9CvTV`Alkk35 zwytdY`cuQb+rKJoK&qDh0;|C=zL3|l{FQK7r%Wm*RK6>R(!>NL#Oo{^Y>dm8RH+g5 zx3`q2Xk54S!ULfTuyD{X8aP;N|0C8*7Axa?5!c7C1}$5X5RFdb6vR0hx;N*910@bu zef?KEIyxvUwap$DzHH=~`*FBM=naj0VQPNLC`J@^M|Eo=kPs_LGtwghgkT7Mamkh9 zuN*OS?*k%22^k`-l*4!_V4N9>*|aq?J6r>_VLUr0=Y5GY&1B_R_lJ72F^0j%7%T0} zYei~=URBBx`WrB9it1n)txS5h9)3OjAtNsh^Qg-RpexAVrhlMB2-S?C1S(>g8yIBM zsu~vDJ>R4KSGMFq`*uW$1;bJ1wpM?tjg^dO0#({y8kDRv{8$4{79IK=QAcaW>uzm3 zE`A@rtVLRGR=a-KtzUExRP-b)h-`PM&Ug`13dX1LQrUQk`F0@t zYOdCAs1cPMXfp#xFeo}XAF`%ojR;LNdFaddi*v8u8Que-{ptFpblvT@Didf4Z>Htp z$)R#up(M^S6|mLcCPR-Y9rCE(-u~xevd+CH+AVo?I1G`CcWm+=6|@ln7K}SE>Z^J} zWOg?A*$$va4;c6G^ogwy@>!yOuCQn<<@do*3qGZ-FW2n zQuv@61IL4sO*f;tBuz=spVCGlmdm>CK zr(*a((pB5$(p$*bn>rvNNqPfYhw%|=q!PbC~{_W0xuG-i6Mn$oa zQJw82q|hn;TJEd!-AhNJ5%=Ip`(*Bx7zUaWz6~>XQYdIz1`}CN8?V;u@D~F1=hoB0 zRE^)i+@nJ7MYR)M@nW)l489+ z^+6T&PALMzZ=AT_IABu6PsMT}S7ftKS??3OFE)_{n~wWx>Z+(iLv<0LJtX^&a5F0@ z;mX8n0uZJVGBSb3B{hd0drRDp#gL`GN&{?19o&d#>6Vd#=J_Fih+^AM?-=Yzdw2X| zrZ{Ej%e+9BH}}yoVGdHow%aoa!ro7rD3KM#_y-DY>W}U{x^!QM10fFE85c<##StGC z@&~rFbtqpE!Z5!BBXl@qKkZzSOcp`s1RE~!-hkkg-qia?v-Cm}r4XDM<~D?Sqgt7# zCqrq6E!n;3%KXfHS%WsogZ_B;q49ViPU5;ndz;$1mFs+9`(xDCCIHbO^ai8DLE+kM z_dPDip@Mt{-%6(PL-zixoJQzmBNQQ>@OX&JaP6@|O8c97A6wrPKXCu~me5TDyeANO zET~nx^{xv50~dr(U=3gy4COZQ;kj~P^G{mCldXFjiK%m~N*Ie_OCUPXRN8~`VNft# z6WKpvZ*G&8^5Dpj8U5}{+5aMvF#o?g5 zu4nE8-WpaxH=gAhIXrpT?Mg%V0IoEGWhU_*CbCdxt@L}N!dnPQA(hfhf4qQ$&7w2q zIh~+DBNuQD;Kq_9YgeM$gyi(dIh z_}CR4l6Fpq1FN*%HQkoRL(=))sPnq~PqML_9wwZ~B)KEMy)OIRRpJ4Dm_Ytb7D&l7 z;4K&MVE0DoW;@iy(8S>GscU1zRU4>R)(b14u9cce*DP^ekf4frb(oHC0iQ|tb@G@7 za3+5wCvwRwGjF0-xsWn^4Srxpi6TuL8|P&nGadbF=wv+{a9@g4r2xYJ4S+0}Jj z-PB;?UJ-BbUqXQ5?EQ3wNTW4MW;LwVvxR9C9YYTCuK|E+6x+R{Kjx--yiem<3kD$#I1}ur^$Q@~w8dn$Gv##Sh0kX}fZ%ZQ8&p6SEei{>lgmt^C<^vyRAEsJ+YG7|ZMC4|H$_sjctvUn z4>n?>Op{4!ORLudb5#%8qi}^*dv3<{7bg6)w4Bxc`{8Cd1`>by5yg zf>H{>qqkOSXEigCQ(rv&;wI~MAJj?)_&-yCnTO|`0HY(Zl8Cq#3NwC3&D2%c3x z$4pk*@hTvy)1#9|XMPMvr7QEkz8Bhel%Twfu}2=JUGB2}TXWK%>{}HzDv^G-9%CMJ zqciOTAk~SNrxNq%uUig0NDu$kD|?Cv7pcbt!uDH?douy8>>ms{iEbb-e89B2+430h z1Y!$evEMc%M|b&;H<>iFiIR|*M#4u%8wnA)D>L6xBJqy%6d%??$beS?Y%K_O3SQJt zQn za?fQv-**jeY9}l|D^R7ZIr_b>Mv1!u8Q64t@a_j)g%5+e$`}k-xLL3$vIqPiOvk@( zz~42*ooP+CY_>^=DA!R~ts#yww>?Psbg9Kty7D#90$N#_Lei%{td0{1_2+e|EQP(o z3RjX=j}`}R1x%4#kQR}BVYlt5&Wt|`rpb?pATO0b2A;xKJ!!t0B*>8b^g1E$_(81T zJ^iAoX3G0IoUPQ9C58h6mNdQ-%>yZ+)L z7(7836~|9c!PJdOogze0O4q!S8(_tz)0jeT+FW4Y4cb4ozd#(8ROliO^SUJWUWE-I zf@$hA2bgH`{E%S3&Gz--x$mx^)G?HdI%W7wNui+dK5a?Gatp9p+nzVf8FD-Qf4+SM z9W73HI_ULGRgsnkMylU_kvbc(x^oKL*YNyvLvq1J*?Qaq{7LC31K#MPb+Wx3)4dhZ zQsb*oUfDEwkE-9K@cP;DPT@GCHQfx0kNS6)$K$qS3>|URK({&kvqq4%29hb%w8#c) zMTu0k4qAmSZ}@awk;VVZRXZ&iV%;^&dC`nQkst08oqgv^sLwYvPE*XEaK$EH)H-R; zHhWhJEI;LVsUk)Uy74eE-B|^?>>An;gqDJoMq13q--cEEOeB`CVykQNR<&%I?C!@S zQhAP4k}>zj#?~XqVwqa%)|4JyROH6dha;LI4j+l`KW_BY>~qJ{wTWf}A$u}-y+?*n zJ>OmM@StdhZ3!E_aqdM;Qs@@T@CHN4I+f&URy6NbuyuVCA(vL)GqL&oU2m6rP^9Vp z!~f+ReZzF#m=>3Id%i(m5}pohHYt+hlwcjz?_Jup^al0*UG+A(f#M6i9cP=v+r~c4 z0C!fcKS2jCnx1U)STBYaw2j9yh-4v;)*+ijIVzF~*HiTBPrrMD7m~~9MDYb#Kevww zW2z>C(|3W-8SPbaYS36?<}p5HIwHb=qPgCmP@Iq{83iFdlnlV)J zPogqv_>UWMZU6M2U1E1Vz)NFLg8N=4 z=~?Am?7)-$bs>-4>k7J+C)qx`y-h3sJUht`aF;_7)L%8DTP}Mehal#I;m7Kw9ilu; zy4RI+f(-OUE*qoXmC`_l8;w9D?->vkuZo>GIz9$>tw-EIi0#BdKnA z*7*o}b0R97pZ1gP?TpxzdG|>3@3*iU4_3Q|x0MwCt5vC+rxoJWm7dV`2sma+qopnTC?CEvDQ%3 z&+4mZ|MO-@(4o78*Yau4dB4kv_~0LbtF}^-eJQ$r>BsBBFQn39{U5NG9#qZi`z#~dFNqgM| zTsJ8vrmwinP72bMKLGG@Kx*CD_EwCTFRx_!rSPcz^LI+yrQ;l|!=J54;{}nSKgvEK z>RVgu+Z$_>Tpd3NP!Yc7-$&~cpBxF4c=@(;h zn9DS(mHOB=J%wdrn(m2*#PO6Q)q-FMxuMysCUF^tUH)v0lB!9XBQdnPPqt9I;5S8( z^AvM9$#inC<~)BEuJG@yOe)*cAP#ADsW;cgDpDC?pYBG&0@VQ>}N9v?qSD1a2(!~G*%a1oj%@^ zsZLZ@b&E{JKQ`$VRFds>vnZBtbhse7W$9u^)*_XsUK_V2b>{J>ouAe2A?K>Q9@*aQ zb+mLWo3$ej>1<)&Urr~~rXzUb<=k*~O9}sz%hj8lLLLm?OX*WraE4;qqbhffwA9%M z?k-bKE_3LY1lEbUlesf~pOQOQ&(4=H+1>4ZZ01-7nSkNFho5|sF6+$Sc{z&^obewB zOBnrh&0-Fk(_9+OI7yv3%4D0@_GPNwn9JQbj_p~BOwLf*hzPl(D4om}x9II+^daf` z$aM3a#(RosUAf_ z*12V-$#<0StTxtiiz{>%(J)J|=5e`bv28e;3V*ngL~8k$$*aOcB_Y=A2!kjh--_yj z@ZVg$tUvrS)GIRu>oH97c(R$YHW8!bPjzNZuKsZw+g41jE6n#2Zg7N+1O?$gGUQoG zR!XO3g-u?~wcsydFRFReR-4}V>Y*C6Ma$zUfg7J0B>0fucsA=g{TydgLC>$axn9=R zTzDgAn&n=9cDhN-I9Obr1<`Mtyg$S3vniW~vp;5;H9P(m&e!|5a#6(tDx(EVjQln{Aol z7h}&}nufwH2C^6t!=uK@M2?Jf=0Zk={uC`8>(z#8#vrs^RiY-vR%xet(;wNUD6?+f zP0L;#-1N9k$JJa<=Eeo4l>q(%O7?+>g{4mkV;|+3%S}b@krK+n?Jj73i~QxE!RMDD(&UBB=qOvk3*>oFSh`CX)W$m? zI|WZj=%uO}+FXA1IP}#60~3r~8aBc1i=DVQL@*Gki6vo-}YNI@wv;xobFUGXWPE4bD2-L@7KyfTlRN*k)F)3_1&@p8%R29**eo>I zc%pAniyODmKeQ`j83rHei+2t`U3f7=6XF~tcb~iR+na)wT%iq-Yol_mb0Iqp`*OQ; zCm)3+oj8>5^<2e^WtDwC!&@0`mUd!mr2FQ@iZsUOh}5@+cCZO(Z;93KYMUHZf{ACG z$16u?yG~A&B)A4;J>XBK1rQ|w<}^P4s*wyXVXb#Cx@FHr*7xJsx6qT2tK%^ z$}*HNyTH{neTCg%;6PjdXRyM~PSri)ug>UQwTt=uti0hO;WahvAsMj}b z3PWHG0doAm`?VUt@&4a0VZ(EScT9Su7g$0LzE8dejwv)u#Snk}2HP+ZylbB8H%;zR zJI9zNWZ9E=S@~W(CsGG~1}BWO3}C^#7aI@fgqENXOk@E8A&eY_!%NLE>!1-vP`T?> zIF<#9JOzq^$h2{Ca_WMPnaR6Qw3LSb2&N5BHU!JS*Z*)bmbZXLk!+wVms+44HD9|1 ze6(5U-m~6b?1y)R!k0Au@g_iLBNC^8cc$NsKvux&Q;mtG*kOx60q7{Pf^vDd{U{6z z)!|!EQa*6`UgORIwbt*uYj5uidqA;w6X=nue|{+!{6)M6F6jqPl;j4)0JEXLG4xn= z7wXRmz{44+cC}QCXK6pLE1R?c436dgT2BXPGmS5u$E6qptc=0KDn#I?L~d5QX#4m` z0Ee6sg=OPVkGGxg$~ZX60aiSWGtv+om|q(MKj337yZM=eNOL!QZhW=(573L}fXn{` z2m-)+PmYU=3(8vn>ZLspDuaG6m9!?_#L9ZmKySQL*W;_uK_luht3hO1!=P%gb-OZL z+}u&XX@QzLCA1@a2A>T~xI2p@6&ygGA_Ml49W-aiIFGyvXOj!)d!n87C)Z{GkN)!X zdMq?f#3ym6zxLa(z9{L^1&kXF=tiK)bcd~VhE66LR@5t}K`t(>$0wTV{kMoT(Gx^k zI`KoKH4!@$)9;jnyi@?q8007WkIOMI=b7aK#AJL{05uZK4%%!doi~1EMRJ}?%L;1y zETM-R+dsccPM-A7hb~R%*YE(ANy^$E;+8?@(?1PF&^%-fJl5^yuYA4kC3ztzAeYJZ z%5G5sw^Lx-8`!ytoT=BC%-j?gfmTI5H$NW!umj1m4HZL zSPG381<*1O5!MH6GUiMvck5DMbrje@1<4SWtOtZNN9bWbkW+tg^Q}_4nFo6DBjmnc z%M7@^fZYUK608!)$8ASg!9n~b@!N)H&vxg^1y0^23jAAOztdAhC~YnD(n6D!%;^X5 zaLRf>EL8^PHnkkY*9Ce!^vl5DDTSEOf1>x2YyDM2;D-Eh2|V~&tqiOe+Urok{PNna zQ!j#oLCJSA*!S#NIp~ZzU=3Wz@r{ID0fwjgMQWw6*#$852x4c#Z`fW#V2R-0+x|Lk?6o7H20QD@)p0nRyN#b_=XSdR837aNp z-f_2joU#8P7c5@t4U2ZClAKSl_{VaA5|oVmpLc^pfidd0SnxjzIn$t~t|*Q}Ev2H8 zQHvC`WK>cYa6^$Qixm(Xl^~)83j)(vQ_-pgSz;g*sZxhcQ;Jq43_^|C777SRApvCq zA!N~($|iYiN=Lw0ViGU}`oEoi>X&}YWHR&e-o59X`|kbyP6jcl4_3w4L5^df-_?^R z5q#(~i(Y^7yC`TFR=LtB!C0>cRGPxsW=(TaK%3*5^&L9zX&}2C#De0Q$GRKF(0#Gw z?C8t$G`b29UhQZ_o5crE508TL2WHV`oJhl_S0yLN0{ml3RYznSLIo&BpJb^9)C}Ro zFG60!mj>R{qn&i6*+?~LDe)Qo05HJAn60Km&ij{Wl68R)8e~Wq+ac^)VC&4145pAx zPk9xr+B)LOpD|G(IF9V$V*Kxol-9{)vgp4Cq*f9Z2y}dC2j@kZ;Od~ATAYJd(s~PQ zwb`sFOpZ;Xr;F7P)^7MEl`$B2$thXD!G*7bWx0Op!EDosI@}d`gv3n}4u)67R8bA^ zz6-Qt@z2{W`w&UpS_5p)0zB#$iQyTx?-5^Qj{VxK2fY2KBI(vb12ptXU`Sh#dB)E5uBO715)6)@uO~Ty!Ft6@XY=e(lQ&}N+6^Am%kUuQ) zTXo>hJIHA2kP;%3qD0H1uxBREyP&BlLx9>Rh2utw#~txmomg9fok;WaA$T1mgb;TI z9-XELgZK%2%}>NCuszzVcKb|zF+ab$%zyd`xj@Lxxda!|Z9qQS+LS>XPP2CE4DFjd z=+MhcI4Iz&aKgoC#_Yt_R0jaUIhgcHouMq%ocWzg==gnWy1zbN6nHJ4vvOjrhPnx= zY7-`yOdV3>YqhfPCz72AMA!-RRni0CPYxu};8_YgX%wacD7m3lT^zxQLqsg1b(+@r z&@bS}ZX6X-cUx;~f3}CF54BNgWdGCr0I~Xhkg%Q_L^1Qjlh?U=GMJ>`Iuv8lf*;(r(VmD8>j8^$2zTGFn@m5bHno0W$^Zqk8A3`M@qajsT&`vLEwXyYt@a@o^bblkY&nfOBD(nFIHsS(RJDKyE< zsb2+xOb`?MOx*rG0pR{bsP|cp?yJ>?t2@AuE^^#_TtXF-)0F03PW%2-nZaK zc)@7M(X~`9hDx|XTd%X_fNF2AWbRsmEzi7mC!A(n^*G7GO{C{6W6mahfzWSo{6B3A h|F4hZzboSzT8c;}e>P}WiLR6u%pENMQs3yae*?P1EB*ig diff --git a/tests/integration/baseline_images/plot_plotly_test/vibrational_amplitudes.png b/tests/integration/baseline_images/plot_plotly_test/vibrational_amplitudes.png index e2c773d64a033bc69230345645cc09aaa73aeeaf..c55ebd45dd10e86643490e740cdab519bca84237 100644 GIT binary patch literal 42415 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�#dH+e` zWGJ+|{M0zUIUiE#m&^Lrh#g-bn2E>^%KGg4$ySNjklscmNe8gJ`O>zdJ;p z9#JZpkc1xmNZe=8iA%sFMV~ov7broT(qVP)*qC*cy3oF^>E6i^%&(tVCsWO;CB6$@WTi zj|speFpbKZo%uHJ&EC7`@i1R^OVBM?#IXS{bX=FWOD>X7Gysp1e5gZnm`i-|tu zT8P4W(r{YF)lioT+&N`o$hmqo+d~51zs-L~<|woOMYGS(aHyw3Gf`IPX>G|HkIYCg z5mBN?$0U5g(H{QB=Mux_+e@tDAEOUIV;XnFbUtgxKtNd#jkhau1dbgQM;=>Cl#>1|9rXegkf zC@77iM9}5fVTKh8UCX<@Uba+!Vfi@cEq{G5zc5JD=kwpD3TTt_XU}Un{-blg6(o#tu0+zKOQ-rE%=45-aWc zf~6xliqZDZLNN|`N*7J!(~_pIZ1FaxxpXT;ed zS+gIlG}?&!QdvvBJhSCE%omti`CcadO5Q7)XYHF_#s!!&c?gd;61i$?;Z@f)3m<34 z&vQI$sMqRd%#C!3oV4q0UwkUGv9kI+{OG50iS~~wQoLgfw3BSH_Jui85H#Rl_gLTS z|44p4A~uPw_anESky;xhcoKWa98*P2O6yez?*8_zyoYXR@|T1G2k{>F{dciwhH3kw z8whzHaV#TPd)*s7`qw9k`jY95s?jCf#(mAq;A{_Xaef_LAy2D_Is3le4;r>;7CK*^ z5mj=T_6$Gnb&o+FZr{pxMO!Y(MnAm#7NC+To_cTX8Tv?0dKL8jyFKV0mytrxmMmH} ze}aCOZEq`&x%=r3KmSvaI8&B0|8UlyOn0jnUqWNoWpYBxMzmAKK zx=MYzqi&xqd8Mf#8j6lKuQfSZuK?<{r#=Di_-ga_d#gllNVDEF>6F)aXN7F=eWzcG z{zcSZ2(iSkV%ph$v}Uoew(^BT5AMbeXi~VV2le-Qala@$c;~SHc++t$VcU+@}hu~i}M{2$UbDcZYe;Cz`H_D_5@Z{T5qkXEk38-RoKp9QW2rP`ra{&- zI|u5ZEA^c$lLL(pQ~34%BRGvVx+XbLva-2D`k~Bo;sN<=sGVj;JiVkXbI{ByXe=Aw zir?AKz}xGBm}hlEs_**W8BDS{-QY-E4;!GmoO{n4us|Hp>cm4B*${hgmgSDI`TTn? z4A?|5y^q6~FmBudH+tk90*jdz;<_GsONZGBhoy$dY4IuKtuWRcd9;cBdgishuva7o zrw{q7MA(uZp_`5;J#vrJejcogw*%KVw?2t9d%U}Mb&u;AzeaVO2X(pCR(Y;arH^!Y ztwYlINyC9}MaRUwAG5+-PGWZd)B>ziOcBnt$-m=wn`w1_eXC}!RW^97d z7b39vv?0E4yxX0aI@V1}Fq-#rrA0C|-?!f&PZN;0R;+1vX}hF92`0WKc|Z0*F3W72 z7Ow%6mTl2;rn%>Wg;k6Ps@@jgnTd+#xlgJ}ri%YvF|){P?47gd(I|gJG|#lN((IG% z&yBbTlie$kp1QBh$|p{r2FM`pJbZ5?b)SzCl1PHVvyX<}#6wLg{GOy>yU{WScB`M^ zJ~U7p8t?dB>1yS=QD%6@m$%I%Hss9;=wDFDnq6zpam;|b(A4sx?mC+sE&LIrUkuxp zrY<_(oav+sk@guHsOe#N^nf9FFxL?NQ&#G{X7uEA#gKOHe#`6dXk0RF!}S!?&bgLY zvp{>5V_~xtM`)_BYV3e!LKJk9i+4u-i3lDx)yzb`@wVWfbl`eNCeBx-tx6F)6!ai;}E6d5c?(t%LABy`fL5fdnr&0I^k|2tV=`? zG5vteSl5s2-r`IluS4aeGrsoB8=GcD#2tTxe%kHxAeFAPvXOdDM>9|P%cDUq4OOj9 z87qiiA=w-|S|SMc{V-X1+?4)ZpV&X^3mMa_P;PK%sB*a**%Giv0%|P+b)i>=eAmnB z>Vqw6+s_fS8pa+)hPSHB$j4C4L^RAi8lgZ=Tpqb-e}7&IJ{`)kr6GV0FXIYNzz+js z-(MM{<$JFRjz0i z+;|`8nBe59PS|I8v(!l2GaPGK@#$LCLR9e#5q^aWzRO2bf6{6s2KdNohcW}(as{}* zODXr(C70aSh=V}W1la=Q>B_sR(OpcP2iOWQPwc9To=(VngBS}gSSvT|&ZfN5`tlU1 zlUSF|60YQfG|Ju-ERA+*P^S~<_7FW^7g$ks-K^dO#vs+MNiJN{doYcl+waXWbmjGD z>>VCJ1HB*5R8iux@!AXCu*|8Ysa{NC5&6Be6*ccya&!a><~W~mNK$b~QI`n%A;4-* z)N=#Xpz>MGT7hM*$)UdYn^c(llH3k+c^aT6Qm5X|2_Y?Wr)>A}D|Cqoq*u|=I)8cz zIz75(k}6fXPqU(g35YK<#N<^q9kX_EC!|%%YU#YaaMy;J94QLI4s*KX_Kiec+?^>i zdF!Fi-LHhJ1zxv4WF=cLlV^aB;pHMa?*~rKLd*e)&??5Vomc|SW+@bkVB?ilhZ~gT zXj@W3mZ%_~oYdBn43bpIzB|w{N7=bL=om+12B1nt)74ljPrp*Y=iJ&=VE0yN2-l~^ zxff0b>#UY4)T^w1a^>dhA`TjvEu&1Cm=>F{CXj~ATL*4~G=$9jDsGYDEfBt}c{$hs zKhXfdBs4~S+edGtccrcTTXFnr(@kj~TxUTuN6~wQpKwcCkHe92)9)&7eYDl4^3pm2 zM#eM9gFI;NvT^iNG4gaisZyDrbZlo9bLDi@qT(J#m5Yu$GfO$HJv7iK(vS>tvG`Q5 z{1WqUpq6aTr*v>-Ae3#H2gpgQFnP!{NiON)ErFws&Cx~OJwy$#wr>KL+$3O*A*1nN zr)!bn^zI?SLIJn-aoQpZ=kCqqJe!Tc#dj&v39cAL;velWc^aKH1g6R_ZtgWyGvOWM z11Mh+r?Py|3Ci8?R0usj)1n84d;KLcCcb%h^)R>64S|_U2maM45uWr*^bja_C>M*G z@m7Y=i@_m@&aF8S*nmRh&`r#RS!;e5(Y3whk4$(4pf}!yR)Kh&BLI{lmMuMR)Nbuc zNnBJuDUM~QjpLzNy9|kmFWa&kJ~_LBVW7F>cq+2=W`q2$(r2x_*g! zhl6SSJtb0bi5hZIPiHwV!B|I2WVs;qW=wtq4X1unW zHrsgCMip0yoH!>?lp4 zjc?zK)y1s{eVAsueSB%SeU1=6=%yIRgF)XqT+qHVZ;lz&12VQfR%v|~H(I2Z9o4Zo0fF1#+^-LJe~!M7?{sk1J`0%|EET@2a{%H)9Nv4tuih~j7apy zcYJZMaOIF5{UQJi(uMoX`P&IfNPMRXViGqA;h@!iyNIVNGg*-274G}5zbF@<;bD%a zV6VRH+9DH--@=o$wnJGp+!6bq6Sq%hZs0Y5iv2Bgw(FWyK$<>OUQqx2keUL_6~E}c zi_%CE${}5|`g%~Bg&@kJfv~^VS@BnddE-?n%Z0YsMBE+}5mP~bg!0W})=us~i)ep^ z!Ar=PIw#_S_uk^IMo?%54&Ol#@ghW>%+Naz^()056FANVIi%S;MPt?gr}HGQ7YvS| z_5e#!Z7BWXfoWqL$Q*)P<{t{PSG=YFDbE?-#R9Jax_euPu@y~HouMnBa@?b_>$OIE zEciW0INdjWk4QsnbTEkm-3I!abSzsYE=f01c_5A8dw)q*`9=W}I}Lg3IhE8cLg0U1 zsRv=dckRF3FDj<=&&ql2p)Id4C?NuH+erpi3sX6Y(+g>fr!#0%Vu4vx+6W>Uu>51f z$Q`kcFEt{i!_B_DxkhAoP>>XzHnA}lu!o9%2ecKdLZp9ou*JuYeP=q{Dxqi^Nk(@> zF&9ji6t~8V_N%V0j6Y#fMi|qo0QRpl0$7ftQ!vP^fFoe~pQ45DXF`JC#3#f2rmyjhEJgW|QKAa+}qM@g?@k_0Kp<>6b#w46G~G=;)XL7zW(g zx= z4+;j{O=o(BH9L(Pft&xWELne9i^5JY+iDi<|4(3EduanTu7pAfa<5N#y`Fd!Gz2a6ZiZH9U`iYE0} zC{V3yG(SbrPj|#S8=M({{wi2^v;9(MnDSQ$mIjk7%3_B3 zxz=bRCM8Dx`2_RCV&ublqQdQMSrx*2%Ml`};gom|+DMrz9qS*h*-3p8>K z5)kd~zhSufR1YeeAo52XB7&i3*gCAzic=dFIgNPk8j+N9c}VO!WRHMbGFHcGmWGgn zQ816Zjkg;_F*C8gbC)pN4zB7sSCZltpzP42Wa3spn9=rT{k9{rciWMx zN;kaA^cf#MU@-DHc!R`lMc!((FqOeNT{>(Ze=F^D2X1uS^2o{iC&O&OX5U~>t6h71YL{DjWd@7ASC)|ZXbcjJ~actI(Ah_2g^ zsM*i5()9nfm3+)Do;9+)PoxTC%yy^P^_xY=(|V+u>T{H9X*mn+Y*_2#&)2rcll(Zi zX`iP&hgMBE_$H&0n)kawPNm>~sR>ZhT~L4ylr)iCkUtmi;*!3y^)vC5cSW4CqbT0vFio~sO<-yO(hcj&v z3hFLhlf1ne_meMc*R+E?WN7K zBKii9+sqLR()M9+WyJh{WIjCjuf^xSjbT+>7F8vo37;NvAV zwM7}qMZ-CqbmXl$$yYs|Ay6LtDwjJUEvEX3-&lB<|FLXhs1#)U3FvzP63xJDVR|C8 zf7TjV7DQ+CwqbOGNAG>;N1NnNg)dYPd_1h{;ncxFy-#k`^G3Gl@pT>2 z?IfGpu(Q310QyBB+oSg%r@>ElkI{f`3N5sId*4zNzkpc>m zL(jY?s51Q$^X9PZ#fa$W^10kD)sABN(hDJO8!Y-p_*_HcdzcvQ(Vv z^D5=9gh9;{x+P$F`+*BRyrCn4qd1U45Bwrp_Ag`C^pxZX4F%BLjk1=yDc67>86HrvGjv?-+>CYDrQUf2pkm7=Y?02}K&jE`P$6=%seuVF7q>6xmrdf(`4CXwj zp!Le7VKoIU>0a>o2hb7+XNmV+1(-WS5#R>^R{Z{ci)o99a@sajP9!OwS&yh*NWW%G5EE(i*^s0nmgqlou0EV5Q^tmT`y#`Jfc*a2M zLmP=P_g(R7M{VoJXS7Y6%lku{3kV}trrb)SdF*j?)W$__AwiYW(mecx^9+^R=bz>-&&Hffv zw3NlA64Tde>m@Iiv6ANSV(pljqmnoQacTLsN22UC&e*2$l$DRUU3XfoB~_vRJ~(@; zZjjy=vM=Rnh)xo7nPFc@lwKH`4Tu2CsY}|I!hFL1DCcpQ7ba)O8>&V5gzSzP8pI6k zr6RnKgh8C7_Je^!vt2^Pl#CZYI!5nM2U1-6Eu?G!Pl&`S>-;vsi0M~j|BPUZAj~b3 zvTLzer!*xY^CxCcb~nB7%y~5*0nQo=pPIDN(s3Ljn?KkV1UcQI3iW-3rEMj$lwpl6=IWVFAvb*~1)Lqmz5-TcVO1CwpS zjc#SPRuqQMmC$_+_mM_glf&oUz7KDzRn0O8lEkG>pOFDCeA6K<$BtH%-~ z#brHVx7JyP>oWHpo!?wPNK!)$>VFMuPl7rK2XV1wIAc$Yv3ETlqzF4&`8+10MqlP@&Isx-e8NfPVOxB!I6JJEF{>}< z?@o=w@8BwcFp@gJB$S?Ruk@a^ z=)c*gl_8qU;R}`*`oU8S5?NJ0<}jeG zT9V%elBpJ!PDtrZCe`zsCh3jzpuQo6RA{zlg-~(Ys+}Orvj$QznugqK$+-UFrvtlMWYRaydwjy>9~v z;8hg3g~qw)VBFDJeh0zmZk{N_&_PMT$5mVjUfcnxxox$Sxn___3Bh-H5^jhJe~{Bm zT|MnGL3jl+5%UAm06~2QsHZ5B*4mVr^fMUO_~zw+Yos{4()m0ErVhoK66}=3%0Dsk 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 From 2489c448403a88ce7c7cdf195587cb6625ede2f4 Mon Sep 17 00:00:00 2001 From: Stef Smeets Date: Mon, 14 Oct 2024 15:04:35 +0200 Subject: [PATCH 4/9] Add error bars to mpl histogram --- .../plots/matplotlib/_vibrational_amplitudes.py | 15 ++++++++++----- .../plots/plotly/_vibrational_amplitudes.py | 4 ++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/gemdat/plots/matplotlib/_vibrational_amplitudes.py b/src/gemdat/plots/matplotlib/_vibrational_amplitudes.py index 29a89d8..1c4b29b 100644 --- a/src/gemdat/plots/matplotlib/_vibrational_amplitudes.py +++ b/src/gemdat/plots/matplotlib/_vibrational_amplitudes.py @@ -37,18 +37,23 @@ def vibrational_amplitudes( trajectories = trajectory.split(n_parts) - amplitudes, mean, std = _get_vibrational_amplitudes_hist( + amplitudes, counts, std = _get_vibrational_amplitudes_hist( trajectories=trajectories, bins=bins ) + min_amp = amplitudes.min() + max_amp = amplitudes.max() fig, ax = plt.subplots() - plt.hist(amplitudes, amplitudes, weights=mean) + # offset to middle of bar for plotly + offset = (max_amp - min_amp) / (bins * 2) + amplitudes += offset - min_amp = amplitudes.min() - max_amp = amplitudes.max() + width = offset * 2 + + plt.bar(amplitudes, counts, width=width, yerr=std) - x = np.linspace(min_amp, max_amp, 100) + x = np.linspace(min_amp, max_amp, 100) + offset y_gauss = stats.norm.pdf(x, 0, metrics.vibration_amplitude()) ax.plot(x, y_gauss, 'r') diff --git a/src/gemdat/plots/plotly/_vibrational_amplitudes.py b/src/gemdat/plots/plotly/_vibrational_amplitudes.py index e54d0c0..1240015 100644 --- a/src/gemdat/plots/plotly/_vibrational_amplitudes.py +++ b/src/gemdat/plots/plotly/_vibrational_amplitudes.py @@ -35,7 +35,7 @@ def vibrational_amplitudes( trajectories = trajectory.split(n_parts) - amplitudes, mean, std = _get_vibrational_amplitudes_hist( + amplitudes, counts, std = _get_vibrational_amplitudes_hist( trajectories=trajectories, bins=bins ) @@ -46,7 +46,7 @@ def vibrational_amplitudes( offset = (max_amp - min_amp) / (bins * 2) amplitudes += offset - df = pd.DataFrame(data=zip(amplitudes, mean, std), columns=['amplitude', 'count', 'std']) + df = pd.DataFrame(data=zip(amplitudes, counts, std), columns=['amplitude', 'count', 'std']) if n_parts == 1: fig = px.bar(df, x='amplitude', y='count') From e78d8274a7b3f8414c28880c8802a5894a532368 Mon Sep 17 00:00:00 2001 From: Stef Smeets Date: Mon, 14 Oct 2024 15:21:34 +0200 Subject: [PATCH 5/9] Refactor more shared code --- src/gemdat/plots/_shared.py | 43 ++++++++++++++++-- .../matplotlib/_vibrational_amplitudes.py | 17 ++----- .../plots/plotly/_vibrational_amplitudes.py | 20 ++------ .../plot_mpl_test/vibrational_amplitudes.png | Bin 21194 -> 21324 bytes 4 files changed, 47 insertions(+), 33 deletions(-) diff --git a/src/gemdat/plots/_shared.py b/src/gemdat/plots/_shared.py index 829dff1..3862602 100644 --- a/src/gemdat/plots/_shared.py +++ b/src/gemdat/plots/_shared.py @@ -1,6 +1,7 @@ from __future__ import annotations from collections import defaultdict +from dataclasses import dataclass from typing import TYPE_CHECKING import numpy as np @@ -86,7 +87,43 @@ def hex2rgba(hex_color: str, *, opacity: float = 1) -> str: return f'rgba({r},{g},{b},{opacity})' -def _get_vibrational_amplitudes_hist(*, trajectories: list[Trajectory], bins: int) -> tuple: +@dataclass +class VibrationalAmplitudeHist: + amplitudes: np.ndarray + counts: np.ndarray + std: np.ndarray + + @property + def min_amp(self): + return self.amplitudes.min() + + @property + def max_amp(self): + return self.amplitudes.max() + + @property + def width(self): + bins = len(self.amplitudes) + return (self.max_amp - self.min_amp) / bins + + @property + def offset(self): + return self.width / 2 + + @property + def centers(self): + return self.amplitudes + self.offset + + @property + def dataframe(self): + return pd.DataFrame( + data=zip(self.centers, self.counts, self.std), columns=['center', 'count', 'std'] + ) + + +def _get_vibrational_amplitudes_hist( + *, trajectories: list[Trajectory], bins: int +) -> VibrationalAmplitudeHist: metrics = [trajectory.metrics().amplitudes() for trajectory in trajectories] max_amp = max(max(metric) for metric in metrics) @@ -100,9 +137,9 @@ def _get_vibrational_amplitudes_hist(*, trajectories: list[Trajectory], bins: in for metric in metrics: data.append(np.histogram(metric, bins=bins, range=(min_amp, max_amp), density=True)[0]) - columns = np.linspace(min_amp, max_amp, bins, endpoint=False) + amplitudes = np.linspace(min_amp, max_amp, bins, endpoint=False) mean = np.mean(data, axis=0) std = np.std(data, axis=0) - return columns, mean, std + return VibrationalAmplitudeHist(amplitudes=amplitudes, counts=mean, std=std) diff --git a/src/gemdat/plots/matplotlib/_vibrational_amplitudes.py b/src/gemdat/plots/matplotlib/_vibrational_amplitudes.py index 1c4b29b..86d2a12 100644 --- a/src/gemdat/plots/matplotlib/_vibrational_amplitudes.py +++ b/src/gemdat/plots/matplotlib/_vibrational_amplitudes.py @@ -37,23 +37,12 @@ def vibrational_amplitudes( trajectories = trajectory.split(n_parts) - amplitudes, counts, std = _get_vibrational_amplitudes_hist( - trajectories=trajectories, bins=bins - ) - min_amp = amplitudes.min() - max_amp = amplitudes.max() - + hist = _get_vibrational_amplitudes_hist(trajectories=trajectories, bins=bins) fig, ax = plt.subplots() - # offset to middle of bar for plotly - offset = (max_amp - min_amp) / (bins * 2) - amplitudes += offset - - width = offset * 2 - - plt.bar(amplitudes, counts, width=width, yerr=std) + plt.bar(hist.amplitudes + hist.offset, hist.counts, width=hist.width, yerr=hist.std) - x = np.linspace(min_amp, max_amp, 100) + offset + x = np.linspace(hist.min_amp, hist.max_amp, 100) y_gauss = stats.norm.pdf(x, 0, metrics.vibration_amplitude()) ax.plot(x, y_gauss, 'r') diff --git a/src/gemdat/plots/plotly/_vibrational_amplitudes.py b/src/gemdat/plots/plotly/_vibrational_amplitudes.py index 1240015..9fd2a21 100644 --- a/src/gemdat/plots/plotly/_vibrational_amplitudes.py +++ b/src/gemdat/plots/plotly/_vibrational_amplitudes.py @@ -3,7 +3,6 @@ from typing import TYPE_CHECKING import numpy as np -import pandas as pd import plotly.express as px import plotly.graph_objects as go from scipy import stats @@ -35,25 +34,14 @@ def vibrational_amplitudes( trajectories = trajectory.split(n_parts) - amplitudes, counts, std = _get_vibrational_amplitudes_hist( - trajectories=trajectories, bins=bins - ) - - min_amp = amplitudes.min() - max_amp = amplitudes.max() - - # offset to middle of bar for plotly - offset = (max_amp - min_amp) / (bins * 2) - amplitudes += offset - - df = pd.DataFrame(data=zip(amplitudes, counts, std), columns=['amplitude', 'count', 'std']) + hist = _get_vibrational_amplitudes_hist(trajectories=trajectories, bins=bins) if n_parts == 1: - fig = px.bar(df, x='amplitude', y='count') + fig = px.bar(hist.dataframe, x='center', y='count') else: - fig = px.bar(df, x='amplitude', y='count', error_y='std') + fig = px.bar(hist.dataframe, x='center', y='count', error_y='std') - x = np.linspace(min_amp, max_amp, 100) + offset + x = np.linspace(hist.min_amp, hist.max_amp, 100) + hist.offset y_gauss = stats.norm.pdf(x, 0, metrics.vibration_amplitude()) fig.add_trace(go.Scatter(x=x, y=y_gauss, name='Fitted Gaussian')) diff --git a/tests/integration/baseline_images/plot_mpl_test/vibrational_amplitudes.png b/tests/integration/baseline_images/plot_mpl_test/vibrational_amplitudes.png index 4bc424c7622ca6fb23e1f3f70fb667c85fa34faa..b61407f5aa1f5eb6b697001961701b8cc31c5d25 100644 GIT binary patch literal 21324 zcmdqJc{r8r`!^~=hEm4JP%LR7gv>)^T8q%4B2$qmGA_{;mewru#9G*;CBtLJEib-(XoNpj;p*2&%xYj10Q{;{QttF5Dh zn2@xPh~Rk}EY`_YMp*dKf4?B)=wdA_eq7@VbVB8%VdzRiLU*6|JC?1OWlKVWDMhI$ z>3bwC4tsh;Z>DdpIx6>*t2}Swf17*zjIOiNmg@1><|e0ywli-HKGfMvyJhwVb6NgN zBl&0l;PIQ^PU=5CkzI0HxBFG_z5WXeM&}XhhgYsqQ6b30JTHokcDl9ucgTsk1_};& zri|j~sr{8Ta0t{D92=Gdg+uU4&}1P{IP;cTBnpR*FLXlV5Xg6eN$^TA@_&1Trje<6 zHaR&da=-TY8;M8gpYLzI2;+f92lk^?$@Q;Udb4!6dU|{5JdB5!JE#~giacnFNV9;! za*k)Hg_^I7eWUb|bD**AeRt#jHf2|t+n=-v8%6hFHuWk5pPE`2m5@+cZXZU9{yQc0TG!?T^s>Fq5V&6z` z#_aa6t#DmO@rM=t;6>pW^_aCmEcMa;dVvqR(v+0cyOefzBe`d`Z}_aQ>s1*_xoPY- zghLPbrrjqDqx<{Oj{n_)C|65DGy;XuGL-t?JNtk0Q6@RZH5~57?c2A58u3|Ky?9iV zXfqG0z={x!7cC;yuxyIBz{_cviN4A#*i?u`qffw$`NhsXCB4Vk_4jQ8_fIv+r|8UDY*Z?js*&lh9DlS&kuj{V@K1JUYr%T(Y==d z2OZZw+nvEG?}bg@lW-U^ct6wdgupIge|B;3E1gULY&J$<>7|*K)kO{&?4{LGQ%v0d za|NhB(7ujie7Ue-@8aTumJ<>X_@K3>f$=2j<-r4M>)t|3I~Uil8Hvafbky|k#n3!!+Odm<1qL8p<7y2r9LIGOsHu;)Qh zL7{^qc?>%>J|e=!mGPLGm<7_uE);_~Eeu09n7&YQ=;6#eH0N=QWKVV?;!48i?Wd}D z{U#%{kEPzMpMFI_Dj+=Q`3nvrRb0f1SSN>2HhLPf0x6aoo$5L%1MB zt(+^5x`Jeb^7lGh+^Xjhy+WFBt8GoQPrZ`^DF*Fh zs$jeC?`_j)?2=O}^*5^HuV}L%%Ca8JbYPC?3WeW2-o~ytIs=uWS7sBkcYDKE^{ps{ z#flkk-NLodH9Dbt?*A3&dZUV+6qC?fk1(^AK3SS{C*c~`Qs_fv6m=|7s&%|=)3?Xe zmZk-Mb8h{)@s5SgnT$>}sZ()3q75U*Coi9T@x~kWEpJUsu7MQq-09>Rx{8|D71R|q z{x`jc14~o1X=hlrht#_Ldj_g1(R{(|GHPQbn#5qH24-d^t}ah<1~LB zDZj|sc$$!RO!BO#!()EN*8kJ)luY3-pk$8MmAt;~(^$VBaQTYI!Ot4YYka+3&$F%OeYpC zEShlI*}gz9UMFq+rrvFpX;c#UOIzwNlv=j6p>_XA>gy)}CX;Ak;O z+A$7oOYMZz;US(>an3QNzhWt3JNULyGu){_nrcln|G>ZicwF|4_}tuF<)c*PW3Z~` zje8U(7D+2LrZeDMlg|2ml1x^9OXC`t@WFa$hR<2eF zmhutqySyNSqwu453`Nhu-DjFZqnCG=N0`^H9lD|p=uNYjXwJ3?SmJUYAVHoNorFvh zI#@DX9AH!?(FZAFN%D4sT;uE4hZwQZ z2Y8XBbF57UJ%(J^vnc*ZqK=NKH59%nt7s=zQb&%D8l#To7`J;XsYl}JVV85x-g+v) z+F4x^AjeP6k@d>$2jPZqeQ3zZd$)8^!6DE-*!heTW1>gopBG^+*E(Gp+70Q)TGDX( zGDHv95L&~iJ)!=Fl4I(rRdsX)7GP<08M7yqzS6K>EUzY`J2Zr}(WzNt-gvyPVO*DR(Q5 z{a}@4rluxJub$XgLCBm|y=#VPt{Gtc-n<7$885LaaWueqdXQcf`;FztoP7|%WL zA}bLe52COPV8Xxict^YaX;ZSiyKZvFx)S_Xei?mwc#HV>1cYjfkI95T1z<LQZXmZxHa4(t#BDJRa|m8pqN4T% z8UC>5b#!v>x_Rmw_4$|!*8@mIPM;++{+&)%Z(@*-$z-EpeqboW8nvu0{HwXqb=zpCEtJLAv#@bc*}lMxAIsoNcX1%lJMdOFM>` z?tPj1B8(du1bWAteAtEvlxdp|AwETTMXIwMoaMqYqEKzH;<*hAW-b>Ya{UuB=(b01 znOU*#6enO+|7jW%P=oa8^!Q88k=YiK#WftSb_*P?Dh3D2j^>{^wu={irU2(iY+_FR zmdjkn3@Cdvo;X>w;uz2G!jz2XVHm5bEOJFB(t`vh;-HX?AZ_sr{YpCbBf;Iq6ubx(S^TTIb!@6q6XSr%@>6+uG8{i+2@v#>hlP zMGZ=vF4*;b%v1|y`;l*!D%K(O!nD%Mxd(M96{Y_eIFLPVyN^C;{JZ%lLD5g4$f})NOe~65Gxn2JJ6l5- zN9$@MSLbG*S*LAQa>LqGYwL7I1mZ5)BAthw>eV*|3OR9#TsnLm$N6*3{_Wwr?_x>2 zySqMH1J=ckqlamYKXdc~kC9P`+^Zq^_0go2INtov54Mo+h_9o2F3fdGeYqKAyFe?0 zzBe*sk9l@C)rVBx>o|uxh8|hqq;Ryqex}+cS;lQ=J@v>ZI{|^5|9d4Rr}#pgr;<8V z8+v|?yvshe=qGQ?<)@6}c5y=_y8M{s=6Uy}~sX4L@$_uc>Wr@7psdqX8)?9kjd z2W_*plVyB%2!Y*R(x~9z-kqefNs+L_n(?%W@BX1PN!OFNM_$ywPPgq%o6ta$hJi)t z`YZBmlf5|$3sM>C_xU>)@rF9;A_T7(9Pzl?RK|bTFN@-;q>-62^$lfn`a1__-tywx zT4~>X4}Se@-SHc^aixbj_2Au$Zx9pQi+m| z9b|NJx(gQM0jHlD2IW__N6CivrXlF42R)-HN2Gw5W9Lc z#(SwW@C=XIC$G(Uo61}SM`4QA$P;OK-q}m5Ss32g-#?v`a4jnOd?#;xxE;E`@6+jm zrZ&DF+Y=zz=*X#+Zz^KPY(L11rAJW-J@j{lR9l4?_9*j15t9k z2$N)nR2nRKMmt_wY!-o|H&(Hb%DR!*;MQkyXY!Ck_AyN1;oADT=XelbHl*?5Vra~F zuPZ@Xzl*|Tl+=S{!Ko0APWbPr4wvQnO)0L6BpzYG&boO?Y+blBYl2jd* zPD3OGM(vc*kYlBDpNad;54ZD_w@7w6Mv zagufC3;d62{; zOZ5&p7%7)xQw)y#b`S^lV%<~(w@8pFXvb-4nPB{Jrq5zYSM7dHrg$%1;H@W*e(;IRG5zWJh&(_8SaFz6Z(^aS^BpJ}Eti7aV_V+2^PnEfHq96|N{-ASDo3)ri78sAh_Ye4N${CT zcJD8?Wnkdbo(wqWkOmGQ$+>}b|8HOQMIN3PuZ62hnw~>odAm$3CI?F=qgJYajohls z|DzV&fAz4xJCiC+c*$V%Bl`>q6Tkkw#xM?VuIjy|@&t)TY?^UGp}rW1mML=Ikt>RX zI)KCc`mQ@vZ1*L<{l6|4ZW3}0i>%U7%5L*N?yrv5dmmN9nSH5z;a9F9!*DcC|G9(D zu^Ma{1Ons`e3Hr z@z=szhkjrwh|bNiYWE@-uXh%WVc7Xe7dBkWZHqCFSZQA|YFPgLA=Rs2iZ0KJ;OHCf zJ3jLKaZ}xSB2-e1FBHM?{NuG_$hI_1m}jLeHiOoBq9aApJV!;aXhvC+CR44WlWv__;-Klt# z#3XS0)1yHNumnvlE#@1u-9x^6i{dt2Pr(Fq7g_84{%m(gg3BL|zh%4Y@`kim>gwzz zDhsw@sZd90?%DG=dbJ=6DdEZuj8MgjvZ?13lc@)R+@X9?0)xQ>v$Ih9+jONJ>ofC{ zmmKvGI|=sSmKEyvpI5?FX(UZ)Pr7c>H;9)-swr4ga;RWxFa5-)qht7;+pqRH!H*a_ zfJdpX^`|kc_Lcwn;ZBzC!C&k`ek#zibgaB96_q~y*cIj$Ng3^q}wO*-E>Y6jIGmxHONWp*dSHIJ-Hu`Ye zo?1qo^sWX^EXmdBHY(!LA+}WTR~C81W~A*VjqlgE|9c5#2r(cS+mv5$k;#t$RXL6rzrtBw2i|G=SI?C)rd2 zPjQsYy-VC0QS{ky0=vu7?t{~>nCm6{&_jZ!oJCOCUHO#Zd*DYiHzi%IBFXITK^)WuW3<;ipyCkY=`Bs(C{WO`1qnC_+T5FTa3=-`4|nx6j9ml_}n)2p)yQDf?41y^YhwZAn^C6g$#geRw<>L0Gi! zKh1X4Wjx~Fcyg=X8FnGgG=%V(QBTUud-3Y~+j;2L*vlD-7~IwgSY~hQoFxx0xs3a% zqh!sV3&Gh=TL9F9jyaEb&a6TtQ)Jo7Ou~Hm?)TKg4L;5%8#f)QcCGkty=VMTfx``t z*MGv=mK@Kq$Ig)^B#c$f<4)bYt3sKTNo?x+jhv;c+RqOZ|AfDCl2a`e7&;+18Jyk= z1^t;Zcvi7m>){S*zF9t=S z2P!zMh?v#2YG0)+4I%FaXBlS=Sg8%IwUW{?9fe)Q`b?+r)+z++al|7D0awnaOie;o zYLW=!OCgi7qRxARUm%6%4+P^01(KN&@8wK~;j(&#Dlo+kB?OAKwY9gfg@+cMtP+im zv6UUk7li2)4#XisYDs_P&L*?fZ;^8+-?Sh+)$Ny|{ZL6{s_$Rq-Ce|-qNr$^+n*H= z<(NFPeQr62UsI7_6d`c=@@P=whWv`&R&Hylbtx2b-m{7spF&>B$svffhD{I`$)D7o zC}~Zo_4j7+9UZ0Q^0@{YVFQk&cnyW=e}8Lb*gb5N78575(#-eCLLJil7_l=<9ft>d zQ7I`MReBXw+~IqA73&5eqyO~hLeK!?6pU60+Ec5#H<63HfXJ#WZVOWjCaOg z6W4DILxQijXp6rhXjYZfku0lM>E#B9fHGjzC0oDkY`fo**9Fpro7_b;+cnTi9eUXG zi@@goiPo##>yr)B!@T4+4O|D8J-xSFZ9Ul(>9bnTVn0ym4^EJ1TYWb_nB7cQ_U}i; zL=TCI%9XPg7mG{nEv(Fpk9fZz>V-7kfAr6foH|Fpy}{Y6Nc?!N5v7^m$-^NkQ&?yd z&nLS(B~JmCQ^5j)OM1nQ`K59SA%rqnwl4Ovh`R$(2s~$4I{ax^T)>`oy}NPlVc*9a z5Tw%#Km7TgDG`su^@Xr@m0S^j#D=9$_Ttyio0rl?oe7%tYI<|kPHHB}l^8-C{N2oO z9Ic`>iPOWqHSgSMAGSN-zZS#)&CuGPW@g!s3(JO@Qc>}D9V&6oH7SoJsxd?<^+GX- z#R6M~2UfMAk`&1*-q|F5Vz*=F9PUmF<)Qag5wX*L8aclVKhI#)*tPwmGl# zni=ensK8VG09sbeWF&u$+E_xX@C+AB_NT$8^Q}F|xu@K0PY1xOeXLkRQ_yj?frqn* zL*urZnocYe7I)f3zZ|B#?njCxBauj-^>)eb4kVKG(denvClosJOjsP^7n_aQv^!*=eqd052LGl4Z@y*3eWYCM&t`5I~}w{s27fX~3)P@~ZQK(Y9`BjUDC zyec0_2bIh#dak2-u zVn?c9*F^9jmAWNQV3|*=GuG-Rxc&N4$ftaL6>M#fJkc$_G*|NPeh!X~X5_!~k-hRI zKuufY_3T$XMUTkjexzUTa>kx!EzS~q-E@*TK65wkrk=L6zv^q|RS4RZuK2HK#+kka z=dkoyXzr8!?uK3%sc6a9CLu{xM>a#}0qaHR{&tf+DjFL0$xn{hE46S-wa;x^3UWdTrxWw8DJSRS(m~8Bo z=X#oTCnWH}dSJU?=HTEPr{c^y06MAOJ_H0H5{IkJ_dBo)IK{#C8f2*v+NM=S@yT7AJQYQAfgUYqgYh1aLsEw&a0?0**rK@GbnL!A!H7=2eg`ATNBPNqeIYLMYW+D9e@6XH~E(o%cwY}y0 z6KdJF1ZJgh`!O0=C%5V-Cv8Q5wYn{(bJ6|CdjbP$=TMMy= zQLM082jqhmaT*wx)~0*jubClu3Pdkbp3m3jAm-SYaO3(A`h%_6SQ<_g$gjYG_iq%6 z!B56Sev5s)_*^^v#3S22p$gf5onA>QvhK86{QViQjjRwZ#T23^hk%<&<{~ezKdYFP ziY#EJpRh>5yWeAt9G>-=(#V8zf69E~{gCb)#o*WLx9+e+=)-!8AiU7eH%(p|E^icy z#7}GKzfU1WoV&Ka-~PZ&zfwg(S6HqmIOS!zCBbe~dLb=;%k ztBF((Pz(eRWiQBvcIHEV6}sB@psBMn9FBOi01sIimP*F|l=R`06u7e9);E}vhqJF zc8WDimJQ@PS=ye7KTy$^l69N^&fz}v?ddVHrnWW&BXzw{0)7$~dF)1_@k_p0o&-Q(sDys3r zVCNqFE+#Dd9eFSGXrQ&Zo*Yk)5c|QPG}9r1z2vibYlprZp(+yql}>IRviZKiiEuiZ zpi_NwS=Xmp!0YR4fUS)aG^_=0uRHE6IpQ%vcz}zx7Zt6wZopu`2G-rmq{c3sJxm&L zR`0S!)CYl}?wCEPZmn{F@!c#2AJi$&!g-M(dxu~6Vw!9ce-^rI+^UX&w-1|ma1@GEa<>FOhBah7_F^s%63L?DX8T+A^EQPSm&pv#4L4K%vqx zndojGLsZbi##8a~gROHx*{(BA1gyFYD$*2VR{r?1>vS8^{RfjL^$EiE`ql(gf{yo z+3znWWrE%=E)>;?{SXrchrlh61R<l#T+@#c!%5#&)RW3S{&_RuZTnhX&f&A5=Zu ze{bT~(jGsO+MRSFR7}4CMWHrOQJk{-`Cb)J1B*B{%v%3vfr`wjC)*&zf}T>b5H2n( zHOl$?IO;kvqgFiF&?^Xk0ttr?BplsMyvXkML`tJCQodr5ZgcdUb){HaI1A*008e^v z*$b5~6e^cfFa7}#`~FzXGe$;66@gT|N=)RL5sK9xdM~u!8c5G1t)vQtBX}!8EoM^v zv;kd{UMiUgeo|rd)d8T1>8IA$cy04TLRLr#LK(3oVG3+_KU0VQjEVjMx_eI20S}-F zrB4OKYb5slp9m{aD6}y-xrpn#xZbF5DPSylKfk(o@~UmmOYo?Xkf6H4+*v&30AB&) z%_ix<{`u+uiPi99QFZR*;DMFAbJB zTjZpiyGf7(_&NuZNzG#Ba|JvJ-nRFhH&@~n3ks-e@j*a)`Em8;^{e*%B1B5j=e{UL z%6B?}Eir@;F*qXze|mWLXF^z=nt7G7BC%)x2iA6q1MTCW688fjhjy^@!U}r}Vt2pT zqX6TY9V!)r^dr-Idr2Q4YKR$-YvI>0E(r?q#u6X&sbqr8^OVSJy1DnIVp837+GoUMIm%!pm zNMtS(Eow%p8fM&e-)e2HhgUAlb#s2D%?*X(8y8C=`Ys4q>lMB@5tJb_V+=LM(f{0- zBV|AmC z6YYuKh9+opFk-}DBTWg^{gKha1cbN~pdwa)QgyfRAtM)9tD$Z;IU%Ku%uy8&a0MsB z?)Kv*C<8cQ5-4#?d1_#8j{1<<^~v17bSw{ol(x1uG6mDUehcX(e-?u`2`HYpvM8Lk zivN1NMHn1sUr4MT)h|g!1JX%6d#`IXaTAgZeKpTmid<*5$P`9M3@CirbmHJ* zwANA7w_%6&wiY!ZdFwOvz6^SMd87ZW>gy87r)>tmmCNXZz2bDpdX0lI1kO zPTq#x`jRBQe@(ulWe}yUt=;9!8&mMA!%4!vKcbP#FR6T~>@`yFozrxJH8HS${8$3& zHE&&}TC@@+E(5F>V@6I+kpJvh$~%h)PWV;xOgK(wMyqU1Lbg>r3h!}xwNS%-$eEJi zqShGTPQ=Kf0@5Kt|F*a-Mq~}*Y5fc=BtU*&v z3bX$RXw&=dBw)gLfCj}M{&)pBOb_J6 zM0-An$F&Iejs9@xea2?ya|TNb?exLDTsBh6H?7`$qIxj@ zBS$MqD$?xeZyynVef{JiYU=fb9(6^*0Pq8-vqSgk$YSXPd zCbuT(|3ZbTbiG4%cW?Aa8z9D#-RVS&m^&CxaSJt%eULunM8^ip6TQ?ZXxY!&pG8@| z`>r`p6zh7YqV<2gw1%HFx z>2A7+JfoF7zjK4BaJRU(_K0ApjkJYsy*FmRLG;TCnYL26z@MLET>#8+?v&qN8GAw3Q}x6fw&ANg zM~7qeK`dBhPOsSuLe=|g{aLa43XqxxoMhH!`dKL}wqrI%4^hI%j~ueBBp|BbRG`JE z8RW&66LF{P!RcQW@R`%+*AC|-n4y)^0hkCbxGn@V6x|~0x~;{q(I3y;mQS_Dexp-7 z4#7!C%wJp?LiNGCzSR6Bun%3sL_$vVr!jZnT87jig_2xP;WPa^UB1|yfu#M)1AvFm z>Aic&7l1#UQAUF)xNP+0qNKY~S~nx#!yiw3b?A;j2SVK8`L7c# zQlChBD`j&{Xw054K?&~P44&v^Dc1#rwdyr@$T7Uvcka7@{060S)zN4qLF^6^32|G+ z2V+(lH|irCH}XF5QQz;+B91Ao7jibdHlBviHnq|~P4a936mdSz_14jNmXDRAKX`Ai zs1$W7f|mW)BcxuMr>o77)GUHu`1jYqyPw$`k-Q=Ryw1Ln`Pn)btaXrr+5z63!Cv`n&PWu;|{OU&QX{iQS3W(&OI+e7zX`78bQ45hrFvR8TMuyc{W1 z4B$D&vNK>PmF_}baocfAH{>(oqq6<|mBTrqK)ekaMU^^*9gm0>AWWgTD~>27NSBjF&&>;sX0ICqmp>hasu#yG&(|A>^hX_MGwW%=V7e zvdKOq%ScrBr_VSXs@kX3VI9%L;-Pl>Rtq2u-k~l=J8C{Xp zH?dBb=~Tym3dPa$v*0)j?kO?f_`CU{`jBaDEzP_>J}a8>2~cDi6Q~$!TQ5la>YW)R zVI;|TD$P6eUyLO7*-^!cr9bLi&n6R<~U$Dxvyfp&dAY<38T^KtB-X-l`9 zB$u8De2-zp+3C(e#etNpq1K)WK3d~hQU>`RAP*(48*pJW>D+FqoFr$LgH1&1Jd|cj}U)VVR7_VDoUH=O`~5)l%`n<~75) z8*Ac8&J&6ua(OACes<)%z3^^a=`P#Gq8%Z+g%w)7Xl;ARBrs&6v6|s`w9+?)D1ZNRnf?L-~-kE`4+|sFaFoV zQD2%-zvVZ9!HQ&*wQUJRnjXN%z;f<+7Rt(CI$H_ARFsDQ$+IL#a(vcPnB|Fw<3LLmS0FGA3-2slY-6RWFcM+Mu#h^m(jNmHLp zPhsn;pOHaTtiKTARNSdr=rg;(qK?L{ygXujxaL_zA`O?%Y3PuW2m<_o4*fsd{iK!& z!aB9T`G(ArGBOEvh5r2W?vfW-c}km1HNqTsRtaLj2gZT5zVBFlGAC!H)eN+iKl!x~ zbvPkO97!CDIR8&qENW>UW@S+lAO6Zqza=32LDLz?XLE{>+1d71Bz;_)dHZ^7*!_aA zFf*=PXR*X!W<9)7AhSED%Xku^lB}5=nj) z0Q0DN4H}tisHL($LJt?einsnZJs$tE_~9*&p89_$KiC*eP0LCOpz|Ty$J>`@p`Z%1 z`TvcfQ6iiKXl}-ny)C822>MaGd?kNsr`39x%&GRVZ!1}f{@b^!H+mp@r^+f}@J&ca zz|MB1f1mL}nPB<_@@qV2zTH%Z-INiBsb!^d9^Q>*yaPvUY;T#c-dSh;3cqIG6amIw znyB8zbfBy&tm$vAru!X%?gY;CXkK7^E;&Nv4?QuE%6z~={Vn?@!HxFA?UOR0SP#g* zy*Aeh%NVT%lQ4yQ8+to)Su2?u$TPH@v;ZExW&v6EI6&w+5Xwe=lI`W!qG)=ky1k53 zb-AI9bRhN^8%KGx?dP;RMc|FZt2li>L+FuysPEDA3SVOgk0qSVJtXprdSh%T=mK&D z<0XkZ(^6Nvj5D8&xij{iA^p)H%(T7*iV#1Y!Hq*6HmT^oF;DLHC!o4v@bhbvYyTL< zxS!MQD_esiSQ`(cYsineBp6mqOSAp0_xcv!p64D#cLX!lX(B5B^2;5TTvx+C1&TfT zHs}*nNE;o|&es1pIn&Wj=YWSJ;j(46@MPtlK>_JI9lH4!5ygqtFxSnsR;LbWr-cII z_PmAgsVn7o0S~*M&yHQCdbkZ`6yvc@Cv>yTs(HK|>&G(wSp;SQkFWXMSNkU)b{Rr8 z+#5)<)r6}~Tzyz$83+3ooM-p(8B~Wf5h!XP8>1yWJy$yY0^FJ3L*-Z;WB)Usu6m!B zmTT!v66Ps!4_GCI84X^thrGKQ?fKH|~c%6bwBUukz8MjzN^u{Gjtex~4EVJN+*oD<$MSLFl0U zyu377(SmDhW0`SDf`BMmuXU|=%6e*0L(GI`o@jtv0-VQM*=obeWO}Cp_?2iZadsYu zo_sXO(!~V1js10y5-!Zh2;F?In>$|WiVvzX8mN-5mu{GZ02jTEmM!l>bRYU$?;|lufgFj6H(^jT}Kaqs3vsw}VART}*eP zy$W^z;}xiFOlrHA$*yP6-wH0JI61bzUKjTh^5%-sGJJfI6FO)qRI)b8-=S>objlEv zfoiXqV($1{YF`N>l8c8P8+pjh6x#y-FX2HHE*Td4ApNx5E&>7%zGOx$8&d5yNe(Tm zDE>Ro2mPFe=gU=@sKGCUWtg`9MVJqFqQuGRj*~iParD0^($W~OUn^{C=TPqW{aJkX zV7abN3!J3c{#)82baS&M9EYvA>X&g!^8-L;!?5;?9iP1R^-0TYW*h|HD}B`ztOjT{ z*w~xxsdQYvC#sJs8F=sqw{lOok5FZ(eG6s+jiOJ1N$Ts!lZUdEI+kJ2OAe9TdS5eo zMBI7;Y`sdcy`e|)H`!&{)aFQi{k*$`MWNIu%wO!OK!jbyDgWIYO@H`vg_Rve`M8mT zPzZ%0Ft2DE7`PkUHej;~u6p2JZSgz5N}N6Vn?K!$DkuE!OCbN#x4#yy{gt@nD+9PaxOD%NXXS8DQCj#LsLM6Es=EK0)Af@M*;;)2*; zA%pZAjPn{FFYkWkdNbe3;T};cVbJ;U(o#ZEVw^EOXZS^=i@Y~*BAiB_=<1$^eN4y0 zg*ObN+>wt*!FC`g_#nn@K%JGWtgH&cZ&k0M@0z-ED9W!Mw~aF+7CKwxQlnqNf;=JJ z+TZPT+Wgs7IHg3_-qCT9k1y+cTw6;^u=zD)6)n5R66^JofiokwU^zT(}tF7S4j;`-Q=EM6Fg&(3SU1>&4vr_juv9L*PdB2c1FD7QL?Q_S)QU&!romd6 z@5E`W?#>Y8dyhtsUO+GoYmNJrS7-6=Xx|z<9C+KQFt|K3rR1wHScQwnt_Y8G=w2nLSJbe1)OM=LC(HSk`R@&*M=Ab*u)WX9{LkId_{OO5AXu%WMMKSN;Q+_WcOmxg`Ih8Nac-&P1siY< zsy+YOD)86qy(gMca>H0{UMArj&D96Z^d*FV6&b%i({r$h%$45ExHT$~U~Jd}Hj$b0 zUx|f(0p|<~WVc6vUNDQ%mzONKk2lEz=-hLdaw;@5El!98$~CNTwV{8;h$B(aj%FuUC`+XGL);!yLM?-17o~Oo5e`CRCTT)JkWV!Y%(f6 zdM|?v3f*sMNzwexTEAV%ghg;446kXXOfIGIpq%S!k>ra5*7y5Gb{ZAa9L-)i`E8(M z-bX8GpfXn-KfaZQn}B{}>e^$EglJ`Oj4YsX5eoYv6@2TCz6_?^LSl;E@-F=P6MvexOVzORe*#trdY8I-*0dX zFZw`ZvbxJ(W9p$AkUc9Jcd?Utu{}~3k(p}{dXrxepz+!cuxh`zVUw+U0ai^tK*AV3 z&QC_fhLpD_F)_y~>aws8_=o2@^fj}Hp$Weoa9QNNph_(Q&;u(1<@{d!4r_4rLe(2D ztOc9iTnBAgS8~oidsGN!-_;P2BWP)*-1o8T(*>o95mV4f|5|XLkn%B9cuO(lZmX&*%6UC^M9aSZpVBoSQp?J&z;- zD=Fx+afW;*r8UdwYxhi|WB*W|QCAQmCVfgAPa_szJD_EK^^f0Qs^78~berom=P|jJ zhcX*W?Z09#&oS}e6U#vN+j*W^aq7z9RUP0DOF!3HL}BAR>?Y!D-W7=#onX~Q-dtr@)m4UeZ^<)-bm+Joxetx;iG3fy1l6M%<7%(lHFTvc zONG0itzrK-{`l~l4Fx%ecCZXh7Ov&cnuiWwY>~CK;5m|1y~3T}lTa$xd2MO@t9{nI zuR6?H3BiDMlqUD~@%q<7P?N|y9Eg~X?YpAm3(ZtLb=y`hXAKPKrE{JZx zTJZNucj45*FzHupve#Sgb7io87aMAkG_I8=A%{D6QEzK&bMOT-_79r9c>)`?p8%7E zQvTfCM~6OdM*I}RNpzf9{l*Qy=v}@zz{?v5*9+&cQ&bN#S@}D$-JCGiAU1syhsQ3gJxL2A7}1;Do`4E=P4rry?)Jv&`_}auH&+`rUm2<`+J9}=ltI6O4jH+FyJu%A)F~Q#Mtth_$XIyD*uyXD zq%3RI#%-iwWLAY1jgD~5z%R#C47VwtA>WN@ZiR{FZA^#;*~EHSj?s@Xf1K8;vSK}1 zl32aME*WL?V5<~SkFopGo027!NRaz(LOTI_oxiL2t}EGkmwZ{b<|F2SUGU&<%9RA0 z9K0n#|M{zi$B`Gb?{mIjZMb@k;~w|Vl86E@8s|Igtcn%g#UWboubuo|G3Gsi8;!e zJ4xT|j2jFn)~Kv8*ZhY&`FAO;_61UpoY3F+M@J=Pv)er2%IzUOQk})h>4IbT3*=C( zD~XRL**h|>f>&C<*X1v7?GAjcZu)qh!v#rax~d>~UKrhwCo+dQR;rlB%~?CZ5gh`_q23x;%GtHy(i;S$NB>H`~nUMe0N= zFx!GHTO*Y>?8u`f4=9Xz=z}tv?g{fuswKUdJV<`&55 zw4)urO8wOKhZTR;>EC;;p0FQcoj0GY+rN_OqV3W#%{jXOP#l$Iq}66k(g5-Tlw|3kEV=kcI#(+ zQF2)>;nFV_ujWVkmQ#g=`eq@WXhw5(@)y`Va~RgptfDPeaoD( zeJ5yo{~AqImh^IOQmSpIINPest>$5G`(w!5ED5{pR<`$r6ivq@Rut{=8G~OK+4*9N3`xT%6`ka9(amUx{5TyY`oDFzK-!uJK6ZXA6>@o@-(Nw z?OX`|gsd9FaDiNi9@deP%SnJXD4q$FrICIYD|r9UpZuangTB@a%IW5GIw;fy?9;}r znDR$Z|Iy;DPFs=GZt?Xa)z`Q|jybXDYTx4fb$n@XJN9l{>fQ+d!um|gAjSEj>y$lD zgUhQUw)Wjs(|VSSriQm!7EG;d1WEh^*RCv|5525!LG!a;OJSfU4*w}-!ca$6Lifeh zA68e@3xYHHl{bew_fN#r{TNA}UmyND?o+(ixvhCNvDhZ{NNBFVr^+ffOkVd_X1ySq zE8nnn{(whXVs=|t$L~&1wA<)%qDLp&!S*PX&(}SQ&1bjEw`I%DNQJ$zpSJnsN-O>2 zKF{ZYioGvMziT3ExMIL_^v?l|p z``3kCY*Nqd4XGoSGU6LG%krf~QvWQmDQ-*TD$Uq4Q>w7?Btb8-CQINC8@|9Y-Bt8?VOZ++0< zzwg|9kNCg)^&2Qy{9k?;M<$I>7uZ|w?&!N+K3ZVe8VflNe-?mvc=JlQ5qTH!T_tiQb|%8DYn~ocQpf3Qdj{xXhFUs0rh(!3 zU~RHlNuBV5PT@S{!xJp` z_?MyeDi9lAL(v+5{W+Z^*A8jbFvBt|GL-EqTqYHJUy9&m20*c7b23WDrS7Dph)vgd z;G&bZgF8D#ycGJ;qzr0IZZ_pX>)jM|}4lNjMB?q$)fC zQn%~VPU8=3Ye3wJt#g7 zk;dobH1Sf-+~*|h$6hjMk3FXmy7cARlH>l)Dv?J2?FA*v-cEmk1yG8`Iu-T=Sxm5J zh@2(}Z&br%4>o#qx2 z21Ma+ngJ}7bl_`9{eTV9eL-MIm&h1}Dj{Z-(;P%Y+h~&MR zr@A2f>*>0eHsIQo|2!}uM0?r1_3Ev^EtYg7^#7{Dhwp!KyI#?M?j8z zua~8rzSj`K%JAN})Fm6VD;>zjy!t>S>;j7hy@V_LwMn-)f&?!Bqo;Qr2zFG-9^*m8 z3sL^SV_^pJMJjqm?F1!tW!J#h?i<1C5CIs zsBljCv+zBgucN-Q#CyF!ixM>Y62hP(7YQ~ZziEBcXZ;4;pQtIcYz5-sI4G>e(oktV zr}udv5KIE~m2?a!PgZk1nS#J@9X;IodgjRjAW6oq?N^C(Q(|wx6e_&;?YX()R-Bn{ z0$k6C2I_d{|53=f#x!|`VHm<36CK7u!40GtNZ8b%Y*S=w?Zj4uIyM9a2Mz^FCCh?X zkRp^45<@shDNay<0`dvMJQL+q&LhPP1sofY!iobq$*EN-Q25yWlKot=U;HR(`}KR? z`+3{NUG!KMVJvq#CBj&clw60 zexgYRz-h7QR_*xI4Tr031wJK*6MepUcd z-zO^C{nM=|x_6CmHv3{thn@l}`J`W1_>@V{nc_5*^DJ)2s{01dG@%eK z6fiERl|J|p4uDB%QBe|^C;`XEX>BFViSCcZSUCrY-(xeXy6YFcfG)%JzTwBseR8Mc}rmPYWr3?>bohzs}wp?OK>! z1pK@QO46=#35d5_;5UsmWgs*uin6Thcn)5x1M<|@WDQHqVFsDhaZJ}%)!0;A0b3|= zj0nalTa*AVPnDLUYh>EMzTfajVGhrYl~6fWmC zBjk(WdJ-V8=brCPFUG#66WxgCO0hNsdxZvl1A3YZFkp8TfpTGB!`P~~kDEVMe$=rx zdZGo=Yv38};$b3A#=Rb8)b4V1&4rR#AnIgS^>sFrSqkt0uYD%)Djp+sk;d3zb>h4i z84{4@1Ud}rOA2&QhGAisbdg^H?s;l&MoLLYTiWuZe`5%}ya-WO1l?GNlIJPopKbQA zJpgt}j5{9(_jO^eb(22Rm<@cZ|Dj+*)!=y>jYPkdu>0UfM@C1jE?fffR)|ZFQvX!t zf-_y{g-@}h#DL_|lo}wVz_e_}2kTt1S3Qk(maw{_SEBIqrSziX=rn9;4H{o@%M#N1 z0X{90L~|mf;^)4jVY)6v3%AU>!0QoRMva7GCAnfHd4goF8NZPZ8W=USam(%`G+i0u zlQ%6PLTe_67JKhs49jHC2hduX^sIg`*7~Eyfba3(2he8mHS*&()9PGgjByu~3i?$e zosI;>n7|*ujG5$uqphBL_?sEK5x|!c&)tI&7Wl|>K@)4$8afA9ZFzfq4DL#*g;RE3 z9=}t;hBs$N0(A11d(OwSHZ1XOywV8Ld>~$f;L_7yz*wS#o(Z z`k%E{lS_?ck%@^1QnIKbTO?P|+2(aD{eb9pP!05f9Kb6oxk6!gSr59{fkQ7iAhg`Z z7rMUtgnRtB)mO1I6v$u4nG0`lM?lSPC&Cy`ByOQ=mFt3}D{ngrInvpV`GX`WbRC~} z&JD{rIZF~pM{8`(sK=2njvNAXScXa??~wPncju)$fmKB7Q6%U*iQ02D>}NmPjejyb zI{-a*0fL-)+>`)&D-e2n(TBo&Dm}ey*Jk3_#f@zCW@)+3)kDc->QBqRyW0Gl&i^y~ f@xQjeldC4DrFsL)H^Ls1EsZ>R-rT$Hr;`5x2h)R- literal 21194 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 C#$b^E From e6c526c0900608359f9aa5c06c1d26d9cb2e636d Mon Sep 17 00:00:00 2001 From: Stef Smeets Date: Mon, 14 Oct 2024 15:33:54 +0200 Subject: [PATCH 6/9] Fix type issues with plt.Figure --- src/gemdat/plots/matplotlib/_autocorrelation.py | 4 +++- src/gemdat/plots/matplotlib/_bond_length_distribution.py | 6 +++++- src/gemdat/plots/matplotlib/_collective_jumps.py | 4 +++- src/gemdat/plots/matplotlib/_displacement_histogram.py | 4 +++- src/gemdat/plots/matplotlib/_displacement_per_atom.py | 4 +++- src/gemdat/plots/matplotlib/_displacement_per_element.py | 4 +++- src/gemdat/plots/matplotlib/_energy_along_path.py | 4 +++- src/gemdat/plots/matplotlib/_frequency_vs_occurence.py | 4 +++- src/gemdat/plots/matplotlib/_jumps_3d.py | 4 +++- src/gemdat/plots/matplotlib/_jumps_vs_distance.py | 4 +++- src/gemdat/plots/matplotlib/_jumps_vs_time.py | 4 +++- src/gemdat/plots/matplotlib/_msd_per_element.py | 4 +++- src/gemdat/plots/matplotlib/_radial_distribution.py | 4 +++- src/gemdat/plots/matplotlib/_rectilinear.py | 4 +++- src/gemdat/plots/matplotlib/_shape.py | 3 ++- 15 files changed, 46 insertions(+), 15 deletions(-) diff --git a/src/gemdat/plots/matplotlib/_autocorrelation.py b/src/gemdat/plots/matplotlib/_autocorrelation.py index 5feb540..34f59fa 100644 --- a/src/gemdat/plots/matplotlib/_autocorrelation.py +++ b/src/gemdat/plots/matplotlib/_autocorrelation.py @@ -6,6 +6,8 @@ import numpy as np if TYPE_CHECKING: + import matplotlib.figure + from gemdat.orientations import Orientations @@ -14,7 +16,7 @@ def autocorrelation( orientations: Orientations, show_traces: bool = True, show_shaded: bool = True, -) -> plt.Figure: +) -> matplotlib.figure.Figure: """Plot the autocorrelation function of the unit vectors series. Parameters diff --git a/src/gemdat/plots/matplotlib/_bond_length_distribution.py b/src/gemdat/plots/matplotlib/_bond_length_distribution.py index f48b876..66fe544 100644 --- a/src/gemdat/plots/matplotlib/_bond_length_distribution.py +++ b/src/gemdat/plots/matplotlib/_bond_length_distribution.py @@ -7,10 +7,14 @@ from .._shared import _fit_skewnorm_to_hist, _orientations_to_histogram if TYPE_CHECKING: + import matplotlib.figure + from gemdat.orientations import Orientations -def bond_length_distribution(*, orientations: Orientations, bins: int = 50) -> plt.Figure: +def bond_length_distribution( + *, orientations: Orientations, bins: int = 50 +) -> matplotlib.figure.Figure: """Plot the bond length probability distribution. Parameters diff --git a/src/gemdat/plots/matplotlib/_collective_jumps.py b/src/gemdat/plots/matplotlib/_collective_jumps.py index cebb841..ca0da25 100644 --- a/src/gemdat/plots/matplotlib/_collective_jumps.py +++ b/src/gemdat/plots/matplotlib/_collective_jumps.py @@ -5,10 +5,12 @@ import matplotlib.pyplot as plt if TYPE_CHECKING: + import matplotlib.figure + from gemdat import Jumps -def collective_jumps(*, jumps: Jumps) -> plt.Figure: +def collective_jumps(*, jumps: Jumps) -> matplotlib.figure.Figure: """Plot collective jumps per jump-type combination. Parameters diff --git a/src/gemdat/plots/matplotlib/_displacement_histogram.py b/src/gemdat/plots/matplotlib/_displacement_histogram.py index 56921b2..b3189d3 100644 --- a/src/gemdat/plots/matplotlib/_displacement_histogram.py +++ b/src/gemdat/plots/matplotlib/_displacement_histogram.py @@ -5,10 +5,12 @@ import matplotlib.pyplot as plt if TYPE_CHECKING: + import matplotlib.figure + from gemdat.trajectory import Trajectory -def displacement_histogram(trajectory: Trajectory) -> plt.Figure: +def displacement_histogram(trajectory: Trajectory) -> matplotlib.figure.Figure: """Plot histogram of total displacement at final timestep. Parameters diff --git a/src/gemdat/plots/matplotlib/_displacement_per_atom.py b/src/gemdat/plots/matplotlib/_displacement_per_atom.py index 111a8ff..3bb07aa 100644 --- a/src/gemdat/plots/matplotlib/_displacement_per_atom.py +++ b/src/gemdat/plots/matplotlib/_displacement_per_atom.py @@ -5,10 +5,12 @@ import matplotlib.pyplot as plt if TYPE_CHECKING: + import matplotlib.figure + from gemdat.trajectory import Trajectory -def displacement_per_atom(*, trajectory: Trajectory) -> plt.Figure: +def displacement_per_atom(*, trajectory: Trajectory) -> matplotlib.figure.Figure: """Plot displacement per atom. Parameters diff --git a/src/gemdat/plots/matplotlib/_displacement_per_element.py b/src/gemdat/plots/matplotlib/_displacement_per_element.py index 83f9955..3a8fda7 100644 --- a/src/gemdat/plots/matplotlib/_displacement_per_element.py +++ b/src/gemdat/plots/matplotlib/_displacement_per_element.py @@ -7,10 +7,12 @@ from gemdat.plots._shared import _mean_displacements_per_element if TYPE_CHECKING: + import matplotlib.figure + from gemdat.trajectory import Trajectory -def displacement_per_element(*, trajectory: Trajectory) -> plt.Figure: +def displacement_per_element(*, trajectory: Trajectory) -> matplotlib.figure.Figure: """Plot displacement per element. Parameters diff --git a/src/gemdat/plots/matplotlib/_energy_along_path.py b/src/gemdat/plots/matplotlib/_energy_along_path.py index d9a0cd1..34c968a 100644 --- a/src/gemdat/plots/matplotlib/_energy_along_path.py +++ b/src/gemdat/plots/matplotlib/_energy_along_path.py @@ -6,6 +6,8 @@ from pymatgen.core import Structure if TYPE_CHECKING: + import matplotlib.figure + from gemdat.path import Pathway @@ -14,7 +16,7 @@ def energy_along_path( *, structure: Structure | None = None, other_paths: list[Pathway] | None = None, -) -> plt.Figure: +) -> matplotlib.figure.Figure: """Plot energy along specified path. Parameters diff --git a/src/gemdat/plots/matplotlib/_frequency_vs_occurence.py b/src/gemdat/plots/matplotlib/_frequency_vs_occurence.py index 09551aa..3f69fbb 100644 --- a/src/gemdat/plots/matplotlib/_frequency_vs_occurence.py +++ b/src/gemdat/plots/matplotlib/_frequency_vs_occurence.py @@ -6,10 +6,12 @@ import numpy as np if TYPE_CHECKING: + import matplotlib.figure + from gemdat.trajectory import Trajectory -def frequency_vs_occurence(*, trajectory: Trajectory) -> plt.Figure: +def frequency_vs_occurence(*, trajectory: Trajectory) -> matplotlib.figure.Figure: """Plot attempt frequency vs occurence. Parameters diff --git a/src/gemdat/plots/matplotlib/_jumps_3d.py b/src/gemdat/plots/matplotlib/_jumps_3d.py index 43f9f91..20b7860 100644 --- a/src/gemdat/plots/matplotlib/_jumps_3d.py +++ b/src/gemdat/plots/matplotlib/_jumps_3d.py @@ -7,10 +7,12 @@ from pymatgen.electronic_structure import plotter if TYPE_CHECKING: + import matplotlib.figure + from gemdat import Jumps -def jumps_3d(*, jumps: Jumps) -> plt.Figure: +def jumps_3d(*, jumps: Jumps) -> matplotlib.figure.Figure: """Plot jumps in 3D. Parameters diff --git a/src/gemdat/plots/matplotlib/_jumps_vs_distance.py b/src/gemdat/plots/matplotlib/_jumps_vs_distance.py index ff05c1e..e117297 100644 --- a/src/gemdat/plots/matplotlib/_jumps_vs_distance.py +++ b/src/gemdat/plots/matplotlib/_jumps_vs_distance.py @@ -6,6 +6,8 @@ import numpy as np if TYPE_CHECKING: + import matplotlib.figure + from gemdat import Jumps @@ -13,7 +15,7 @@ def jumps_vs_distance( *, jumps: Jumps, jump_res: float = 0.1, -) -> plt.Figure: +) -> matplotlib.figure.Figure: """Plot jumps vs. distance histogram. Parameters diff --git a/src/gemdat/plots/matplotlib/_jumps_vs_time.py b/src/gemdat/plots/matplotlib/_jumps_vs_time.py index 75888d1..c8ad5d5 100644 --- a/src/gemdat/plots/matplotlib/_jumps_vs_time.py +++ b/src/gemdat/plots/matplotlib/_jumps_vs_time.py @@ -5,10 +5,12 @@ import matplotlib.pyplot as plt if TYPE_CHECKING: + import matplotlib.figure + from gemdat import Jumps -def jumps_vs_time(*, jumps: Jumps, binsize: int = 500) -> plt.Figure: +def jumps_vs_time(*, jumps: Jumps, binsize: int = 500) -> matplotlib.figure.Figure: """Plot jumps vs. time histogram. Parameters diff --git a/src/gemdat/plots/matplotlib/_msd_per_element.py b/src/gemdat/plots/matplotlib/_msd_per_element.py index 05b29c2..99ad42d 100644 --- a/src/gemdat/plots/matplotlib/_msd_per_element.py +++ b/src/gemdat/plots/matplotlib/_msd_per_element.py @@ -6,6 +6,8 @@ import numpy as np if TYPE_CHECKING: + import matplotlib.figure + from gemdat.trajectory import Trajectory @@ -14,7 +16,7 @@ def msd_per_element( trajectory: Trajectory, show_traces: bool = True, show_shaded: bool = True, -) -> plt.Figure: +) -> matplotlib.figure.Figure: """Plot mean squared displacement per element. Parameters diff --git a/src/gemdat/plots/matplotlib/_radial_distribution.py b/src/gemdat/plots/matplotlib/_radial_distribution.py index 7de7955..b8a4c7c 100644 --- a/src/gemdat/plots/matplotlib/_radial_distribution.py +++ b/src/gemdat/plots/matplotlib/_radial_distribution.py @@ -5,10 +5,12 @@ import matplotlib.pyplot as plt if TYPE_CHECKING: + import matplotlib.figure + from gemdat.rdf import RDFData -def radial_distribution(rdfs: Iterable[RDFData]) -> plt.Figure: +def radial_distribution(rdfs: Iterable[RDFData]) -> matplotlib.figure.Figure: """Plot radial distribution function. Parameters diff --git a/src/gemdat/plots/matplotlib/_rectilinear.py b/src/gemdat/plots/matplotlib/_rectilinear.py index 746d30f..a598317 100644 --- a/src/gemdat/plots/matplotlib/_rectilinear.py +++ b/src/gemdat/plots/matplotlib/_rectilinear.py @@ -6,6 +6,8 @@ import numpy as np if TYPE_CHECKING: + import matplotlib.figure + from gemdat.orientations import Orientations @@ -14,7 +16,7 @@ def rectilinear( orientations: Orientations, shape: tuple[int, int] = (90, 360), normalize_histo: bool = True, -) -> plt.Figure: +) -> matplotlib.figure.Figure: """Plot a rectilinear projection of a spherical function. This function uses the transformed trajectory. diff --git a/src/gemdat/plots/matplotlib/_shape.py b/src/gemdat/plots/matplotlib/_shape.py index 665b825..c8391ef 100644 --- a/src/gemdat/plots/matplotlib/_shape.py +++ b/src/gemdat/plots/matplotlib/_shape.py @@ -7,6 +7,7 @@ import numpy as np if TYPE_CHECKING: + import matplotlib.figure from pymatgem.core import PeriodicSite from gemdat.shape import ShapeData @@ -16,7 +17,7 @@ def shape( shape: ShapeData, bins: int | Sequence[float] = 50, sites: Collection[PeriodicSite] | None = None, -) -> plt.Figure: +) -> matplotlib.figure.Figure: """Plot site cluster shapes. Parameters From 0463d0329f9176ac9468b9d01d847169a6c6eab9 Mon Sep 17 00:00:00 2001 From: Stef Smeets Date: Mon, 14 Oct 2024 15:36:26 +0200 Subject: [PATCH 7/9] Update hooks --- .pre-commit-config.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2b2681f..d11313d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,7 +3,7 @@ --- repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.6.0 + rev: v5.0.0 hooks: - id: trailing-whitespace args: [--markdown-linebreak-ext=md] @@ -24,7 +24,7 @@ repos: hooks: - id: docformatter - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.5.2 + rev: v0.6.9 hooks: - id: ruff args: [--fix] @@ -32,7 +32,7 @@ repos: - id: ruff-format types_or: [python, pyi, jupyter] - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.10.1 + rev: v1.11.2 hooks: - id: mypy additional_dependencies: [matplotlib, MDAnalysis, numpy, pymatgen, rich, scikit-image, scipy] From 7895a34251c53da691710aa1ae5cc93e67aa5a2c Mon Sep 17 00:00:00 2001 From: Stef Smeets Date: Mon, 14 Oct 2024 15:38:05 +0200 Subject: [PATCH 8/9] Add docstring --- src/gemdat/plots/_shared.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/gemdat/plots/_shared.py b/src/gemdat/plots/_shared.py index 3862602..ec3f427 100644 --- a/src/gemdat/plots/_shared.py +++ b/src/gemdat/plots/_shared.py @@ -124,6 +124,10 @@ def dataframe(self): def _get_vibrational_amplitudes_hist( *, trajectories: list[Trajectory], bins: int ) -> VibrationalAmplitudeHist: + """Calculate vabrational amplitudes histogram. + + Helper for `vibrational_amplitudes`. + """ metrics = [trajectory.metrics().amplitudes() for trajectory in trajectories] max_amp = max(max(metric) for metric in metrics) From 433e8abdbbe3af619f904171612fad58bc94b3fb Mon Sep 17 00:00:00 2001 From: Stef Smeets Date: Mon, 14 Oct 2024 15:50:41 +0200 Subject: [PATCH 9/9] Fix hook --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d11313d..a95e4e1 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -20,7 +20,7 @@ repos: hooks: - id: nbcheckorder - repo: https://github.com/myint/docformatter - rev: v1.7.5 + rev: 06907d0 hooks: - id: docformatter - repo: https://github.com/astral-sh/ruff-pre-commit