From d673d177774e9586f187016ebf6a26925dced31e Mon Sep 17 00:00:00 2001 From: Yang Date: Tue, 25 Jul 2023 10:35:57 +0200 Subject: [PATCH] Add tests (#10) * add test write property json * test read and copy properties file * test validation functions * add sonar cloud * check spatial temporal bounds * add tests for utils * add tests for canopy dataset * add more tests to canopy dataset * add badgets to readme * add tests for converter * add tests for regrid * test xesmf availability * exception for pytest with(out) xesmf * make linter happy * add tests for xesmf regrid * further improve coverage for converter * further improve coverage regrid * Apply suggestions from code review Co-authored-by: SarahAlidoost <55081872+SarahAlidoost@users.noreply.github.com> * fix temp dir for windows by using mktemp * address comments from Sarah --------- Co-authored-by: SarahAlidoost <55081872+SarahAlidoost@users.noreply.github.com> --- .github/workflows/sonarcloud.yml | 40 ++++ README.md | 4 + sonar-project.properties | 13 ++ src/zampy/datasets/converter.py | 13 +- src/zampy/datasets/dataset_protocol.py | 4 +- src/zampy/datasets/validation.py | 4 +- tests/test_converter.py | 103 +++++++++++ ...lobalCanopyHeight_10m_2020_N51E003_Map.tif | Bin 0 -> 231076 bytes .../eth-canopy-height/properties.json | 0 tests/test_dataset_protocol.py | 99 ++++++++++ tests/test_datasets/__init__.py | 6 + tests/test_datasets/test_eth_canopy_height.py | 175 ++++++++++++++++++ tests/test_dummy.py | 2 - tests/test_regrid.py | 133 +++++++++++++ tests/test_utils.py | 68 +++++++ tests/test_validation.py | 42 +++++ tests/test_xesmf_regrid.py | 48 +++++ 17 files changed, 746 insertions(+), 8 deletions(-) create mode 100644 .github/workflows/sonarcloud.yml create mode 100644 sonar-project.properties create mode 100644 tests/test_converter.py create mode 100644 tests/test_data/eth-canopy-height/ETH_GlobalCanopyHeight_10m_2020_N51E003_Map.tif create mode 100644 tests/test_data/eth-canopy-height/properties.json create mode 100644 tests/test_dataset_protocol.py create mode 100644 tests/test_datasets/__init__.py create mode 100644 tests/test_datasets/test_eth_canopy_height.py delete mode 100644 tests/test_dummy.py create mode 100644 tests/test_regrid.py create mode 100644 tests/test_utils.py create mode 100644 tests/test_validation.py create mode 100644 tests/test_xesmf_regrid.py diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml new file mode 100644 index 0000000..682d9db --- /dev/null +++ b/.github/workflows/sonarcloud.yml @@ -0,0 +1,40 @@ +name: sonarcloud + +on: + push: + branches: + - main + pull_request: + types: [opened, synchronize, reopened] + branches: + - main + +jobs: + + sonarcloud: + name: SonarCloud + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis + - name: Set up Python + uses: actions/setup-python@v3 + with: + python-version: '3.10' + - name: Python info + shell: bash -l {0} + run: | + which python3 + python3 --version + - name: Install dependencies + run: python3 -m pip install hatch --upgrade + - name: Run unit tests with coverage + run: hatch run coverage + - name: Correct coverage paths + run: sed -i "s+$PWD/++g" coverage.xml + - name: SonarCloud Scan + uses: SonarSource/sonarcloud-github-action@master + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN }} # Needed to get PR information, if any + SONAR_TOKEN: ${{secrets.SONAR_TOKEN }} \ No newline at end of file diff --git a/README.md b/README.md index 44a8280..1da61af 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,10 @@ # zampy Tool for downloading Land Surface Model input data +[![github license badge](https://img.shields.io/github/license/EcoExtreML/zampy)](https://github.com/EcoExtreML/zampy) +[![build](https://github.com/EcoExtreML/zampy/actions/workflows/build.yml/badge.svg)](https://github.com/EcoExtreML/zampy/actions/workflows/build.yml) +[![workflow scc badge](https://sonarcloud.io/api/project_badges/measure?project=EcoExtreML_zampy&metric=coverage)](https://sonarcloud.io/dashboard?id=EcoExtreML_zampy) + ## Tool outline: diff --git a/sonar-project.properties b/sonar-project.properties new file mode 100644 index 0000000..c5a0059 --- /dev/null +++ b/sonar-project.properties @@ -0,0 +1,13 @@ +sonar.organization=ecoextreml +sonar.projectKey=EcoExtreML_zampy +sonar.host.url=https://sonarcloud.io +sonar.sources=src/zampy/ +sonar.tests=tests/ +sonar.links.homepage=https://github.com/EcoExtreML/zampy +sonar.links.scm=https://github.com/EcoExtreML/zampy +sonar.links.issue=https://github.com/EcoExtreML/zampy/issues +sonar.links.ci=https://github.com/EcoExtreML/zampy/actions +sonar.python.coverage.reportPaths=coverage.xml +sonar.python.xunit.reportPath=xunit-result.xml +sonar.python.pylint.reportPaths=pylint-report.txt +sonar.python.version=3.8, 3.9, 3.10 \ No newline at end of file diff --git a/src/zampy/datasets/converter.py b/src/zampy/datasets/converter.py index 5fdf4b1..02c21e1 100644 --- a/src/zampy/datasets/converter.py +++ b/src/zampy/datasets/converter.py @@ -36,7 +36,16 @@ def check_convention(convention: Union[str, Path]) -> None: def convert( data: xr.Dataset, dataset: Dataset, convention: Union[str, Path] ) -> xr.Dataset: - """Convert a loaded dataset to the specified convention.""" + """Convert a loaded dataset to the specified convention. + + Args: + data: Input xarray data. + dataset: Zampy dataset instance. + convention: Input data exchange convention. + + Return: + Input xarray with converted variables following given convention. + """ converted = False if isinstance(convention, str): convention_file = Path(CONVENTIONS[convention]).open(mode="r", encoding="UTF8") @@ -50,11 +59,11 @@ def convert( var_name = convention_dict[var.lower()]["variable"] var_units = data[var].attrs["units"] if var_units != convert_units: - converted = True # lazy dask array data = _convert_var(data, var, convert_units) data = data.rename({var: var_name}) print(f"{var} renamed to {var_name}.") + converted = True else: print(f"Variable '{var}' is not included in '{convention}' convention.") diff --git a/src/zampy/datasets/dataset_protocol.py b/src/zampy/datasets/dataset_protocol.py index eb0dafd..2803cff 100644 --- a/src/zampy/datasets/dataset_protocol.py +++ b/src/zampy/datasets/dataset_protocol.py @@ -38,12 +38,12 @@ def __post_init__(self) -> None: """Validate the initialized SpatialBounds class.""" if self.south > self.north: raise ValueError( - "Value of southern bound is greater than norther bound." + "Value of southern bound is greater than northern bound." "\nPlease check the spatial bounds input." ) if self.west > self.east: raise ValueError( - "Value of western bound is greater than east bound." + "Value of western bound is greater than eastern bound." "\nPlease check the spatial bounds input." ) diff --git a/src/zampy/datasets/validation.py b/src/zampy/datasets/validation.py index 7f70234..5da63c8 100644 --- a/src/zampy/datasets/validation.py +++ b/src/zampy/datasets/validation.py @@ -51,10 +51,10 @@ def compare_variables( variable_names: User requested variables. Raises: - ValueError: _description_ + InvalidVariableError: If the variables are not available in the dataset """ if not all(var in dataset.variable_names for var in variable_names): - raise ValueError( + raise InvalidVariableError( f"Input variable and/or units does not match the {dataset.name} dataset." ) diff --git a/tests/test_converter.py b/tests/test_converter.py new file mode 100644 index 0000000..7214dd4 --- /dev/null +++ b/tests/test_converter.py @@ -0,0 +1,103 @@ +"""Unit test for converter.""" + +from pathlib import Path +import numpy as np +import pytest +import xarray as xr +from test_datasets import data_folder +from zampy.datasets import EthCanopyHeight +from zampy.datasets import converter +from zampy.datasets.eth_canopy_height import parse_tiff_file + + +path_dummy_data = data_folder / "eth-canopy-height" + +# ruff: noqa: B018 + + +def test_check_convention_not_support(): + convention = "fake_convention" + with pytest.raises(ValueError, match="not supported"): + converter.check_convention(convention) + + +def test_check_convention_not_exist(): + convention = Path("fake_path") + with pytest.raises(FileNotFoundError, match="could not be found"): + converter.check_convention(convention) + + +def test_convert_var(): + """Test _convert_var function.""" + ds = parse_tiff_file( + path_dummy_data / "ETH_GlobalCanopyHeight_10m_2020_N51E003_Map.tif", + ) + ds_convert = converter._convert_var(ds, "height_of_vegetation", "decimeter") + + assert np.allclose( + ds_convert["height_of_vegetation"].values, + ds["height_of_vegetation"].values * 10.0, + equal_nan=True, + ) + + +def test_convert_var_name(): + """Test convert function. + + In this test, no unit-conversion is performed. Only the variable name is updated. + """ + ds = parse_tiff_file( + path_dummy_data / "ETH_GlobalCanopyHeight_10m_2020_N51E003_Map.tif", + ) + ds_convert = converter.convert( + data=ds, dataset=EthCanopyHeight(), convention="ALMA" + ) + + assert list(ds_convert.data_vars)[0] == "Hveg" + + +def test_convert_unit(): + """Test convert function. + + In this test, unit conversion is performed. + """ + ds = parse_tiff_file( + path_dummy_data / "ETH_GlobalCanopyHeight_10m_2020_N51E003_Map.tif", + ) + ds["height_of_vegetation"].attrs["units"] = "decimeter" + ds_convert = converter.convert( + data=ds, dataset=EthCanopyHeight(), convention="ALMA" + ) + + assert np.allclose( + ds_convert["Hveg"].values, + ds["height_of_vegetation"].values / 10.0, + equal_nan=True, + ) + + +def test_convert_no_conversion(): + """Test convert function. + + In this test, no conversion is performed. The input will be returned without change. + """ + dummy_ds = xr.Dataset( + data_vars=dict( + temperature=( + ["latitude", "longitude"], + np.random.randn(1, 2), + {"units": "Celsius"}, + ), + ), + coords=dict( + lon=(["longitude"], [110, 111]), + lat=(["latitude"], [20]), + ), + attrs=dict(units="Weather dataset."), + ) + + ds_convert = converter.convert( + data=dummy_ds, dataset=EthCanopyHeight(), convention="ALMA" + ) + + assert list(ds_convert.data_vars)[0] == "temperature" diff --git a/tests/test_data/eth-canopy-height/ETH_GlobalCanopyHeight_10m_2020_N51E003_Map.tif b/tests/test_data/eth-canopy-height/ETH_GlobalCanopyHeight_10m_2020_N51E003_Map.tif new file mode 100644 index 0000000000000000000000000000000000000000..c30681b9e9c01fd7776fa55ac4aff29bab9462b9 GIT binary patch literal 231076 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

Z8PuJFY)n z^7MF2O@jx$8?fxc30O{x!M=EZ#6&)U^7UZ0kM!lEht{0nkuP(+_3)1kLWKTS+!($L zrw47p^3+u5iZ4@RQ76W9y@-;8V!X4oXRDIMY~$!bvp>Qgyg!Lke!4O%{S57e&49>4 zT)hY@(gxxNAmzq~`&9(|Z>HXBafBQV!g`cV(sB3P#d>{_Mc*r3bO z5BiQ*S1#k=k9~Mj-~fed1XgAD!P`YUVe%*(&ESIKFX!-b*m?ZCo`M;76Or{;GHlXR z*>mtte5+fCuB##?lkydgx3AB(3l3xA;YyT?uky#VeHb^c9SXmWhl5fGK9__F$MG{t zmpuEw)$M<;;cGcdM5pJ8JsrZ4?;QWvuW51j5Uda9O6GQ$JWj;QaR=ahzzn^s*P_a% z7~9+>cc9rsnG1z6S}Txc;_=fvxR+B@4)DvOqs(p{&+GMfaQ>G=l9e|Pr;S5#IlKv9 z=r3a7`w^@&(1jOnJkN?Meop+cm6B?)`HI;T*1S` z;tSFezu|{=eDMB0HVsRF>74*f81xKzw_oFGH-Cog-^(FCcJf8WAP)1-mF%J{?45o9 zzdGE(@^=q#yF)v6*`&oxn!p}K7wF1|SoZTDb&6-L!X zTk$Act8kY4MmTCn9%0lTe!RGnx9XTPGb5aFk^}AfktR zlFx;rK@Z_Bn#nq$bO1iS(a>l%4hEZoam)T5T3-7OyJhY9+o36+w5!YJ>C;%xVx#}LaSV)PwT?7!oElpkNN5`|LgvRe|hi!=j*`#_n*6@x1fsd z0Q!$Q2AB5IpWH6IwJwdA<-7y8-Qy6i_7mrgbor+C7RIf;gs7>Pkf(7THEVXt{^}Ag zzj*2W+8SuEQYqh1ze810X0YR zoa#fg7cQ7>NjTO&OT&wkyHGwn5Y6HPP_e=ci|@RI*FjBK{|v>5vtRJGs21+)^I&zk z4v$)2faTP`_@aVw!?O%ey<`u1Z5-~rFvFU{calf40iRsA;KHwMc-hzY->loecO6<} z-hpZZ(Qk}N!Lwu)S|u5CuHG;%U2DpG%dzbH;5oiINT#rtuwXORa8hIBzzA+yz58A?p9{drT2(=uf`XjDlk;~Tdsy5 zV7~nc^7T85Pk$Fj9xW8z<~2OdHDGG=XpUKE!%?}zxIS|bGbQ8pbapjVR7-GVR4Lrt z>r3@`InP*T(pubaQ-i9j;>~Pq%Z2^)Xx{fYZfl*#`{gQB`lG_b zW*YRk^Z~_I9l23-8CT+J@iyu<7ESvIuLj+CS~7r}6-a2ez7iKctH-#oIea}}A$!g8 zhUMs^7`1IHGWta#I=}&HQx3zXtPP!Bx1z_OM(qEqGrzCxz_w}0Y#1Fv&#uS0Bz`@; zTI{Ck>g}9)-Imrxhfw+KItCB=iSgOr&|9ZD8>vsA-jv3&ZlAzL(Q995zmgk#e9&r0 zEY28}LqNtZP2uj&tzK*{;&=7%4i z>d@~s471&ZH~w%6>T1;@G4?YCI98y%od#R3D;2%pG@LkGf<_}(;gv%Zmb`1o(F2t@ zYEg6A)j5n+#kJ^b@f+d3&1iL?8@m{E<1q2MB{lSca@-OqcX@!j%)#0Fl2_GRa(Y_n z)4))hZlx`m(`Ebr)b&zLu7v8b*Vx>z92fPU!KJz<&x&_s@NOgF28?9pM{{1Nmi+&_ zo7gryoMAoJ34_3#)60$7$EE_OTh`;{7R4x1)Te`JUaYo%!u{A|xUYK#rzfd!mvaZM zefUT+p>Cq{D;436+(wr^4!A1pIo~A#ywW(6Df4ECmiid7cRayW1DVm34QGn=LaJ_D zz%4ty`9otg&rT?UV`v$o>uOVZiza^=wWG_?S_H|AG(kHEl}Sm?!>WTGd7NLdKyc+_Fmk;fSA zSBX|hTj=t806m*;!u7-_NInz6rNT%$FS&>1b)&Iev>tYQ#3$jumA_{N@v_kpjuEc& zxmHc-y}_NsKhI~RbFlas!|8Fr{U3h+93fdubAPns=8^qrJ){GR>OH_Io%yIP+yJ#d z)A4osbaWoG3Nn4yYL7 z{UbZXEQt_5;8={}7$}ra!2VG&yow#s>eNiEQ};!2xhZC?yMP&k-XYxa4-yxhKv?L0 z>}h67`;a~OB4?SZvySv%Z%6CwvAnC_hlzvkpwr2rn6)YnRSTD*tS}NKZ^Dp(vl!+s zXX%YM(arTCdY6kn;)`TvTMuOX8XevcEyVxG{dBo!HNL)(Jd{p(sEnv5d*7QfkFCST z(>u~#7%Do8B{$%BU+V657QW3)s;wKx+e6n2gFA^ny?1ldoHo3-{UeHJeS&+lBXHbh z4y`VGaj^Fkv{~f26Me+2YcieV)N`Wj8o~z_va*!W4CBSG|viu=muI@^`?_k7ddaMu&>4~ zXzSGBW={=Hoi>^dC9e^5`8pmx{DP)M&8T4{{>S&1@G?MHLX~#x^Ik!llcBsc-bFkB zJ(#sfjTxecT{Y_pI?YxR9(fb`^wpr@w^cm+Z~*mGd>A0P?Uy=6vDr{zS-;##h08;H z{&`>6V2x?{dlF;3-00VJ8AFpdaOvR~`qrI5XYEw@NsjNRIx)N?+KoAC%b3$nxXDo& zINrDrkKT2p*30JH5hU!st~S)kl^pTorP!qL23gCxb9l-L9DjBJJ9;0&H0N=2dwhh? zFCAp)8M#LlSK;+r4f;J9!0SpgXg$rDK0Af&(rYmNY}~kN*I4%d;X>nzHEgxO`+w*? z@jvqZ`Oo~?zi5jW)osf&y;=(|`8Bkbq@rWPf#|z45Wf4oq5H)f)p2I9(w~T^R=(KV zcqTM%#bWfHt~6Z^R`lt^!m7^fUcWxg_uZ1b+fgW6?tx8-eK=h?6%!TtCnGvh8w!BS%S$8mZEFuCiI;gBigOrSn^eBd&+7QRm{V^t0@?q_7$sT&UyT2 zG4|Bz&}9ZVaouB3TPJ>I14z%`AF*u6!x7Ocdpd+)KlqwxM*?qPsOBd%Sy8@DeGqff&W z+C}W5f$2V;iJ#Bk4+rtk;EQ8KX;q4c!NHbCR~K>f)uf4PD3$ zXQnY^y(V`r5Z$q97tt-7vQc6YhHbiqpvR%?_Be&UWy!)yUr&=$L#PwAf*cjXv^NVm zr9)r(e!PJjD~wq~yjJ&d0g_;7-(9oecf z=el$ch5L%({p=B*->*;K#^2%QQ-=rVJ%ZYRD`-FP3?{Yo!czaE7!neWf|$#A+&GMj zu21KD^CsMDd;ozx9;4qWOMb|m!y6lBa(`|g-nv(cp58}cXluegORU-A&QzL64#9tB zo&9Hg?_LZ3NXEGiBjc*@pmqxkuDjxttq1mRiNd2@2QldFcr4ny1V4H^ApYJWbQVu? z`ip2h%{_#<%TFNv)m>=qYsTp%Et%1GC$tCd$2QZQXi@Bkw|Dzt*4LG2D}5;^;hZ+= zd;%f+Lh)q#Cj7i3XQGYf!Z|vrnEJgfMkc&cEKX?yuUlHUR?!T;Oiu4u-@wrnsdZ}3QA?I(^O<^iIlKJ0h@DZo z92UD*I7cC@zkVx^rL5uxtroPj4WjjCVd+$F!<8ASaO>fU5#L&HO+Pz^8mCfQV+~QA zg@9qZ@ZeEfZq(?-_Qq1v-5%o5r+Qp^vjOk?<-B6hnxlm+y!cXY4w(1}IaO+WH^-e- zSNy4&xryz^3;(TwGFAMaVw&$8)b!Ed`e&y6Vzi%~H4d;-sbobPd$C>}EqcUZrZ{MnEdxEMJRolHWY>lKZY^+GXw zoj3MGY{k2-l96}b7l*_v>TGco_rxohJZcA49u9?#TQaI;zW*~S9+$*-H?wOrqW5;; zpav5d^QsxUU(}@iX(tY@sTEF17kn3u|Dk#f@NsgM;%bpC_IoZzR)1rBc;SdfRyo+^ zZG@ax6LB?f2*Uc9V#Zioe8d=Z%zp}6DWDQ_=Em)672&zZ>Rc@ks$Wl9FfNsRP5i_xMr zIh5*$hF!alClZbZrK$|L_b`~wT%I8c+#loIfLs1iF1%PaMJ01RS-B{#T{=rsm1 zTi=F$3C=vB?8_lh!s0cUExM#dbd5eOEXaC%)+|tRsdh2KFPJ8`SJU%bbE>z9W!a)C zT)$q9m91}KwB~p8@;-#vv|`i_)n!TiOd8H?%fKa#m|rC8&<+Du4p3);#tqDGC-bFC zYlOehghQkI@xwjvmSo$S=Kes#L{--MxbsS%y=;3dh3ERkh;Gu7uhm~kCi5;#>(!Uj z7bMfJtuRxHw{x~I0r&SdV#8l8sPjdIa9qMkccY+r(-$4Wj>F>70hkZ*f!CW`s5^T) zTP2$F*Qr@__jQvDd2imkI-U)(n$WMN9COukaqY73%`}Cfn;Fl<`O;(fF&0NXw&V5E zZ0xqlL9$^kTK>L;?)y$-iR3qoEx!(*oO?JO`5D7IsM6_cEqX6}3-wQ0%$`#wngRoU z)G?#EUn?s5wd3;lPf)S+6S^6|ijT>21caWK9%1p$46P+3+4 zdz;;;nYIk})_%}_whrgF9mnMxLD;@K3SE4kLti%mhJ8~oG-EFAj84J5Ys2vBqzks| zTcA*KGc@O>;oRuU*f=N$u}b=Mj_5@D5f;p7a|AyP?jhNzKbPeNf_qw`^YVshb?lD9 z=Q**#cOO(um!R{YNZhPlgU{2(;pOcGSbjqX&N|Z(Iet8jIm$i9@G7>39>swM5pZ7> zip;K$Fj)Nse5#h>_UbL@*ghB+cK2uO_P+Gml!-O-|7G3& zL#y!}h3>$9xbw^%*9Of+>iK5)s-})2;XuC`{#`N5-yW$uHY0y)GUn8D<%mAaTGq}Lmc!iz>?mv*gfnzOnz&yzS&9)ti6t}8tGrSjuR6&a- zJnPq!!#4I|O>bd@CC=eh&lOx?qR0ETYRnlSEbswq__MADecRTf#h6xHsx+E2ADFWs z*^tJYcQ9pp7Q-T!a?`Y7%=3(-jd(2%ix1M@s25El_rm>hIR=cmDfjJG96sbRo~@pa zVe1b7dcxWClU#N;;l&R(jN602UhS6iRo~5=8@zyNMY}jyywq`<*0R(7-E^51&b7@({X^C7 z-YNO`@Z~B#_e+EKg)!JYuRbE4StBAo4s$Y};+OjY47eJBRF!ksDLR%zcUye)@pzX5OW*H~-z9zJz;W8vax-0`x;CeN>mt)tQqR&x)J zEC*x%Mai=aoQgs25qMGLgqzpOa7bn&MT~1ubs@OZg7#EULBxEyMuh$eFQ_w`|{f;3w}Q` zpLzL#%*#5?o?5Z|GHNNah8yukfE^QZri&N;9_$uuLW+1kZ@S(`&pU<;dOC%hb0s5h z&{@AA*7R@|vr#qh*!tbZ+*8d?Etr89>~jRUzdWHaODImzR(yfJAR3$OZ7e_#ys zWBdi>J&$0+I8!L8ZNkUP=PUrkZSeUbvtYo+!L=T(P5h9n=nNf#{j3 z7@dCweK&XKlhn@ar|5^)x*1ZpGHc1Y{CDg3`O({0>{bs}6;>GUCwuU#39w)H4ADSLRywqwjHj_HaIl>*;AYI-nGxlO!*o z!6%s^*|JyeB%b+cL2uo1^p2>-$=kyix6y?C*L=g~RV`WMu1v>}p^P6Op1M+XK1i(3 z%*&eWeW4Ri{?3QpkYOBQOkVBUk1OYxF#lnHY7LCz=iO)Mbu@)Xzb>ZNZ#yc79bsva zu)XV8vBQ;4T>thW?C)waBIY%|k4lEE^$RTNl8-({8?jp$1Dh-wGfL+R`gujL=6g4%|crkD{TQ1+uZu7i3qk|_q%y!~q(Wh+*aOMVO z(R&swV8}5iR(CSymZ0@C3`*tT@N_x5M03>5e;(0OzUa%P|Ae$3Bs z;ew<9woouBd# zwf_EFYt(^hC$aR4_)2p7@l0uRZcRFijQR;!a;*gSQluP78$9;V76c2!qXdRVKcr=P{PR2S_;U^a6tp8J^=lPqtlx;{d)69$4h8z zt;4(r`>1++JN;Y|BojJ;2|oFZFWF9;VlVbTFo(vw?73KY!Efu?(JvgG7+l6Y`4S4$dcsYC5;iY|jI9~b}ZA1Uh&CmI_YW45^ z-KYz0_}omLLw5G!7B^ddOtRwVJHvT)R!jC0FZsf0dognHM*Ogk$3qv%GyD1+9yfo% zE#(KAdoSRaFIBMEI}=-{yi>%CTZ{rS!Nv zcAtSdpY*VA?h4^v4~MaPYYeKRK>G%r@gdU&wbus=Ls%VA9>>to?FiznkNn;G?QM|- zhY$M{GxWA%;f^7A==Dxv@J&;=y^G=AFIBSag=Kaj5+h8#(a6aas-D6=8lMKMS#vS0 zUo?EJL-4fw14XYP@rsOAdx0Cnpxx;J6yL6c(!*L~cS&aA!%)+75x&~kBV<@_+_rzC zc&4#lyvjbvjedaRBT;#QgoX0kfG5IlzsQr_!mQ$$8|&gO!4zJ zPe;JGTPU&jh4!m@Nb7qGhI7y3YJ>Htm;Op}r!x^#R))&UJK&xtXIUdvs#=;cDa%D> zt{r&lM;AIIW=kLA4~DF7#1%o3zq8pv*q-)uh*0pt>ry!Ai|%5D4n2g&k~G_#Ua#6R zNU5Rh6UOoKT}Sq+apw8ss~MiZLRfv1IdbJJ-m#g*gl~&@{gySOAGF|+hjEfqzXJO2 zVz5CxmbwjukK#F!KGQteYDfs%zE9=;`qOz2nmqjM9p*S^;Om{n%)L60O`4fABR`x~ z<0EKiw3EWDV$RJ_@mmGbO?^Ep`YmIf1D*_Y^J1x40EfPw%zMJ|)XN{nH-k-Bqfv{h ziS=09b~MjPfB&M(S}MD2qC%0vcSjRw)N((YK8j&tX+I9_-DwMNFBIU0unCVGp9QaduMp_q0e2O=M}*83Ahxm*EWMB8*hzP+=@yRmyQX52k2*95 z%tG72Bc-?OjXy_b;m@em*ff3>mT4@&%YyE(8X19(HzTk}`eCWU1MN_>9_MbJf~E3q zv}vr#gWn}rNB+LQlKACMc7UI8H`u)mMAA4V?EBUcf%)0Eo7|tL-3PEpb0D_0@T zaDoHWv2Ugmei%+f^cZdEyndm0+|?U-uPrdw?F!QDHlxkG{+ybs%P-p12+hwD`p^eV zFv!NE0$rM(AI^F2zz&nzQQa;dXX<~&ef^&pD)aEi>yzOinc#=o7h!0l1U!nCyqVFR zxhcem3mY~RUg~u?{|1*O$^LUtCeJo^X|{Ac7uo*6yJGPm?-6aXFcmTny7790ZM?NKoW|R>@w8hwV}B0k#7bSB z72bo|*&<9G+X=VlXt3I5JgXh2@vZA@_J6dN4_$(3>=8*ix{H@`HfKuS$nj?~a}zzc zc|-umZeGWP2iELa{1n#=6uddto3D=8aZ9fB0Wu6(JhwBaUhl#-ssm{-ej+{gI&+<; z8_&*;;F0?N{A1`tzf(bM(x(NLld3W5t1fL5tQb4nhh{Hq`O9V){ohUDgi&J|;JTST za>ImC+U37w{r;_{$A69(QqV03o)t&YNo^0#=w{)<$=jGTDhr`4ehiJy?W@q*a#PW~ zC|KqTEjc4Zm5;{EK&XFT%x*Um-%r+OyXvmYJDv&U?J-ze*#gJ2hT_+JU)Xo-irX&; zYoGc!Q1e|8DrZ%1Y54M0a=Ps9E9$Mes_1sg7rh-iqT_Jqs> z6?{OG_`6cqTi~3Pgnhy7F+x2CtNUe04_k5!Y+K{z6zS>j)y065lJ9eKE!K-Srs~`@ zELCpC092u5MFCQk0}!tri|$Rrpu8goLBE?ZtDqY%37a6S%~e!1bjO};Lonp%EXl43 z!y^4ebi)a>*OcGeh5gv>cpUxbHKxtL6eP?HMa42LdcSK<|NSkwPR^!tIf#avyYTf} z>03BjGHt0g-^>=Sq1hzKqa4JwO-;Fa`2=pb>&!Khy>U{m;i%u9T$2#RCNH*0A6v5L zj1n36FqHd-b!JCxCyweC4DaX&lywx(WuE|yPd^K%0GahJ1{YlMWY$C{UbQf%Uf2}A zO%LXWts59RVk6hutfk#L@mCB|=0M?`9NG|!ZPQP|zncmR>q&-fcpd6Cy@BMG&3UxR zFRYStn!jXP@0{`)7H1WldAmCk4_(3DWBcLIMP~EkE}(u$UoLv9%(@;+s7UgWUiuOa zbv5S|N6=QuP;z^N*v@hnTaP|Lo%iYgrR(=^b^IUsIJa$Mer@(Zv0l9Q(G^M1z8sCp zo3AinLt}2clZv>TI}j|{@am?WFv0p5jJBu1#N{x47{#E?sB6eE5KVN&1-z_Ort7d8 zWIhrdfNLgd-e35Ctlhu7zTuMTdwj(#$$<@lx6FqRhHgj0gTd&Vwi|kjB$GN|0P+;x za+XX((hXr5_pQrKqxYlV_r{!(q{R1wTX6c}=ZJ|*hJR%`miNww)q-1!YrChQc!KaY zFc05Wb%rM7amrQ2L(dWL%Ittql7X?g{tWC8CT8nRuK1uIg>|VJFx-`fxco6#-B*F< z4)u@~bxl!w#2h!*2|rb1q2h4yEy=`rsIYigtVk;`L6N2}V$(Zfu5*3yMfO0y{7!`b9dHIuzl+ z!;Z`m*C5va0lb|0FmAyP{tn(Fv@sq`n*0*SI;*nzbv^VunzA5&G8@-TXSBTOU-c_$ z=g<0dS^M_m%EApYjF>{`yjr_ z6ZzrBn9+MJG6Roe;4tBH6uG>or>@29dt%@I(+ELN`=FhrBX>W(iM4_UbM>|ll9r?( zYr}rz%{~WR_YBlj6u|JB7IPiW!7ltNGHyAty2gk)2K{Jen!sWDny(_+sx)l*p8rvTI2%QGq5hBF>XbEMlKdLI%!^3mO#J!CA8J(A;g zO($_q)}05sx^YHL6@HZs|Eqrg@A^HFQ4fdPi_rB$ECxyy;-1j@myA4);&De|tF->_ zbvQHnq2#u`>fitS&szMC9((pwXVnpPkxkx#@c|9udrMF-YZB}}wZgJSX`Wr~i94=h zcH1Et`|al7hu8}rTs8_%K83*i>|RV>WsXkeL3sGa72VF=#t?Op8M!mg*OZ$wgp&4)Rk(MmAQ=H0;elj?%kx0!FxZf5M! zrL6P_qk`cSItU-sxxLoxSSUE10|zm2Z3NpygzB1mWfxeoar|#I4Sp}qLE`w;rysj5J;*m3 zH`8`qGOh1NbH^k_z8o5lg*}&{-&_^uX&Ui>nl(@6+H>lecjz45fv&seF+h3*+qDxK z7$<+0&(hZR_`;ld#X*^Nb7cRj-+#6KcCw#|H9ZO> ztG};6%-c%5b`*KUQtxoLr3#Z5AO2g-YBbB?npBVfa{c-U))WI?qWA9eFk8L?DK`yK zH>(>A(=JGymRn=h#CS|G8jf)N+mfgwT5#^VP%^T#S`t3S3UgXpq5J*YI55rzE0Wd= zjqoN64_4vC+2`Tx9E6z)(O41cjXqaA5#i~JQyYTuTWKRa`%c1_H%aL7xfWOND6wjG zPaZchXOl+=7ix}Uu6rP-$@gXQyCC-T*QJZto3{2Hk8Qm^O8TBQhy6H9NZLEY^_tK) z`&#nWd|h4=nZ&!&a-nD32YLfn;mD~NENm zV@^sa5}S5n^Q83{<(-K-e_8mf@WPq{9q=`G7OrKb2n}dHrtFGG7pnw}v2TkF&&m;> zm4HmgOsq{#6`y72&`nB{Q4{1D+~qXttVAY4Ng=)`t1=;A2`?XaqJOG3H+yv90H5A` zG0BCmj&5PAQK=jdwnb?D<7iesi}|vmCf;~+g4jF9%~*wnO$CSwQDmP(r*X^Of~}AA zvG{6g!wVbdHo1UR$H-oVn zAK#zv)fQ0tM;h%u%n@fv5nSssl|R3ZVRv&cUQ?H_wRsfBo5j(8adKSidd`C!{mc^I5uJAjQIRR|0mVp8Q+QPX9U)cQ*d5zy5pQ z{U5Epb0;(*>*_RGhBpK637H6d&NQ&=u!_b9xXtll?vj>g9sqRLo5&Ps#o>MTT zel{{Z)#>(7jsp_vF``zL+wJq9dPRy~cXj7xRaf5GIGxJI-aOM!lcip|EV`}4$z{KA zBV-49*JnU-d?pksWze=ka7tslA!PD8yqxI+%jLN!Q%u3hJX_rV?TVEbK1*`Dbi&W? zv!J_BtS!!$k-PCC{2w^sYS~Lk(ajKq8oP_UtC3I_I`#UWO1M5F1o1bPz;NPA$+&7A z7F`s5?8=F}7u%7qc1^{l#x`*A8-Z$}{VHF#9%h@~ONzzMxY2SP6H`N=V!9qP4(%1} zrq_Z=Z^%v0$MS8p0-Xx?LE7#jqMF2>dr)^4{O-$);YsXuHi+-5o!H}coR|p(G47f# zyR?0aB>yKU{(29}Qx2nYa|Y&pe}UQ;m(jNP26P%8BRcV&xUN^Baqu{D7Z+e*l@gb% zeu~o?&NL5RO9%T5E{wgx8ztvCazQb{%XHd)7}*`{(EqnQi!&`bHNcNG>HFC{Z~>bH z&#TLq9vn3~f(Z=?Tp<`R;jaX9B|~V=#O&|E^fh#h+ep=L;lKVGz+RrQ-1>O~A6omd z&`N>JoR!&S#Q+9+ui(^?;xp=O3vAm;aZ}s8|MEKWAKjz>yFKUISd4FGWoWEA31i_) z3Xl%`C)Y_z>S*0i$v^x3kJjD7;lL6!m=<8Kat$OGrTIn0lw&p+@!Luzyc*FWG03l|>Y%Iubkh}>~!;N+Aap3s`^cB66p72p! zi>!s+${pyoPMR(ziY%BR!|5@yR5Mg&P=W%3MArL*2MwrksD!hw9rc9{bi%uRxGubj z%Jr4dpCdA6_f=xP;EbLZpDk8a?~paR9A*!!kRKqR%ls`uvvNduVr|iB{-K!Ltv7}!3H|CbFSyA7H|HD_y>txf z?loe8W_ymku1sn3N6-)%{GU$9@w`C`#>X^BQgvKWUgiS-kkObpO%4ZJc_QJ|aMaFs zMgG$q$q@@F#JRYl?-&{GSSHJyM<21dq8h`;KSinc9+=%5jX;rEvgM*+)utE0ZI2CO z-;QEvMj)+o<}rKMG}h|gM$N1^9B3Z}%L*Gb?zw`A?&e$?CU_HfL|(@WSKKgnhk5Eo zSW5Qd;_|iF*0&K4zmls&Kl^1&EGs9iqS~VUR4J%`@8T*spjGZ_6Lx*E4Cn zc{h$U3};%bg*5@!B8x@FOJ?0_LGznv4wxP$26&O-726GAy;@pU9 zh!Xi1Y3;OF5c?AYB2tn8@S9C^n;FijpJU1VLJoNBeIMV_ZP5ZE;+!PvdUnE=CUyvMJL!3M~5AKVU*w;*v=61qo{8VH)mpL<4 zXxTf=$-u0gPtmXYcIaP_r^)3i(Z>hVXmxktlQQF}d)qK1Uk~Xjv*0H72cOI0Q8fM; z@~RRscikPyYctrTMK6_how7$S& zT(jqRp~qO_x0vHqH*vDwdfHrE!(-k_l-}$uxRRr3+;cp))Cx_K`vnLv3}yzJbLM1w zjyj>ph-IpO_0RvVe=fQp^f!L?oRd3~2Yw9z$8zbQtYtM&jXA zKhz#^M9MXBPYt?(m0zMUPiYlCmA^owK`?&Jynt)@L3}=@Hy_QBW8Y41a6`8nt3SB% z$0uhhmt4S4qwly|cpnAYR|F@;ES4P@%maoZ zzrfoQnXLrpz`Q+E+@x5#)`5ZYOS#co7sHfBL+_m#WHRjWbkj=YzAX`27)NYAVTplL zozUvc2;upkfO#8&py`-|iNl{GEWQ+(cMZ8a!=0lU!cB+T^X!llSR-_q<<6a%A$Vdo zKV-SH(*d~XUc|`8VB8s#iq#hra88`fF0v~{&b-I?CG;IhMlI-W-7IvP1*o1bP21N` zad}%Cz7rkt&=6Ic6gBN1l=d+;I9EO*y<(Hegxm@^;dakvi#>e|e6+Z5c zy$ABl3UMr@&Bnum(kFvi(E@ZW!O5rPJ;Is^5QCze80X!XrG1 z3sZJ6+~0uqhixd+?-70k=D=dM13Wtv;=$ra2o0-)joWtA#E5xr-c$4+ejUF>#&5}# z3z)Ke7bZWj$JoyUVKhSr&ca`^{=gh`%6uuYJkuMNi(=vP>?;BWmP<}7*TCYSj&Rbs z2;=yB5}o7jNKwy0UhqN8b<)CCk&n1&i7YGbx8ajSNA69~6g8~D^}8+kYnq;T|9mMG zrT@qKh!^+XL#j}lH8Q`2-eVgMKXE|mx3>sYeM-%&0`N>!Av) z6qBJlQ3d@6cE{1#&N#n81+8SwP?`K4Q(m`XTFD#nSta)S7wuSM;KC{wd43)^jnVUi zP(6GY3_~9yHf=tx+}MtnA+pRCY~IP0{l&~QkwXXV;GQY7>AgJ*BLkE;CSLH)&R@od znRihZ^afQy<=A=h8#ZfbadYBBSU))fV|8Z?vbzoKyQLWI>jCo@J@7)t2QwnBOZJ~r z!MRU$XkYgpADqQpQ0fBg_AP<&T){iOcpF14<+yBq6Q10v!q_2(B8Rjsw|?u+)GH70 zXp}maKMUlE-zGfus1nJ$W8e2e`<*JqWS0W$u=tLXBYV-x5@KC8Wis@+*1s#GhTGG4 zkjVMCI-g@ThcHgoQ?P=&Fj#y>rJrxZj{WO!#z%_^#eaL>|4Vb2|K0oLKYqWpXLJSs zE)`p18`18Q8-KU?0++XD{1UL37v>8uo9Rd#|7L;~{gKF>l7)2R{;Wh_20fAR!@TR5 zb|n!$K^ZWK0KWcyC3(AA9(^4ZFuOJm9ZWn>VI>2#QIj#KdN1~_Ux2d_ikRop11D-m zV)%*xlpk)5RN)C+B>K~*O)2=U+zV~%QxK<8i>?#pj`0B?=*h@Da1=F^cI3nJDHd&I)wQXvP=6L|p$q4O^Yv5ixHAv~?q} zUv34a$nO9fW#Fl>UE*NYENN4<98J5oyveO29fSY`qJwGKr)N948(VG0|{1rLxda#>;8M~zp;kdr(_ zc&e7cAYv<4f4c{d`5D--DhV6bFNF6MOE{h%gpt#CLU~>mq9?q@m1qUdyxWZlV#YkZ zr{EPS1k+WE{B~wNT+*MR@2HKq+)B)uW#qZIi!v1tn&45WBesc*f)2hPupq1v%YMGW z&iAd^=IK_9idE%llXjFdw&7Ci-ZWCahj#KJTT4~sTTM*Iw2uZf68T!kAIQr75R_Ao_#%GK70hcjCx_qXms9v@$a$mv5bm9h$uoZ7>X-|@V3 zvG^Ws`pcf=i6ORJ5|oFXV=p0EpRh>yYTH8HTu+yjf&9>S*>fcZZn@wr|TdciBPeba7S+U0|9gC-+q z=^NN}yoqn!75SiJ6`FaeBl?08+mk{n%fm?b~EKVqc zUz`eWc(r4Cqv(4*JF_tV7ak;Qu~T9%*7je`<^l0My`?R;40Ps?{BbONy__K$;WT|e zgbYU)weK1}FN{E&*UOM^ zRE=u6Ax!&zzdte$i2HcShoh=Kk)b9AKlZGJoR@~HL3D1w) zaPUBT?pg8%@AhV6W^F!x7A(O2537)tSB(#)+8mlSoOQ2#m}nNjkCoeC`er9YyTMYm zf!yAq9j&@Mv)#HFyQit}La$MN?4D1dGf62U7Ouu^q3wvqvz}G^gJMMx`xzM!59>K-K z8939>7Zc*T!S0P7&V13~Hlfd2p17P5kH-k_<7Sp^*u>s}^4xMMoFD7P@a`B1&0CM) zxL13Sz3(=L)g8jp=oAbXAQ+C${`lQV4wW{M@a()BDKAT)C%J$CjhkppJBbY`OEK7V zI&wyDfa!=9x-?A+jHNF`M za$m8<%$OH08gunL5cd_iw`w(tnToxwZSeC_4Af&+NsuYMqLwr-JJvN$j4 zIZ9}y@u8pU(rXgwD{m!Ac_XnPXc#8ejzI^@NPMh5iY?1-qV0~hRMzXnE#eGBqx?J+ z7jYTZ(J@3_DMb?t5IJr<>WK_PwhclIUk{80#E=34AaR@I(c0sG8 z_FQ8=TjUgE;?DTn=yprwg5>+4!?W6{m!=QAd8yrvQ;_EA8yzgNK zRsrz&YK%EdQzg4h+QRT;JGIa=O68&Q?Cdb##{kIEGZHBGhuBk_|oqx z3eW2B&ZuZgdIZs=Z4{qKg>!WmG2>l3h4G;gj0#;Xyg%DnsT07X@8&Wv+>NtZdvLLb z0aI2aA$d&}_PNePddpC>Yio-c@mmnPT8Y zhLtxXux#m7=zH!#v-3(!Exd;7eY&$;!Hvdl5}rNm$c}CNnKj>+(FV&|Q5nLXQvSTP z(~J*u)tC^X$!n+kvTCvp2N+$z>I~z*>i6H(@1N`5)R&nOvy_RF%d>~0AY0^)HYroa zNtW#gxl->~Ae(CY^Vzg~ycn|!y**NqR;fx^^Pe~|#Da#SM7HGqZOpkbmDCw8zu;?+? zNeW=<_X1s(DD#)d9zW7A9l^GjvD0if_64Qjt;i&J|8zY}cIdOMO*KldO-8AEnxv}g z2pV2DN_5=MNU%;54c^0{Te26D7g;FpmW`IeCg?}Va1R;zLqyWWw6^tPo5Yb!skL4F)nK! zKiHcS;yuYrokp98JxuRx#+NRZ>^f1LvE)S2M`sYzE?&i>4jG6mdBI%33^uar4|$!5XVUWYGtVxi(H<_PL$Vn#U+t3p?bU1;6 z)NOcUl!y+U6u5GOI+b*vAZ2Y8Mh>=S`v+ZE*2a$QeLthM-!6O#2ts(m6WklM3GXx( zA>-##NG0!qym1lME#8J_As{^d!P2_ef!trKR^4PkfVvt{ZgR)G8=~yZLR zq%b)WG0Pi}D%*xbO@70V^@!@+Ts(SFin0}Z&~23;rrDapqLH_bE9GJWmyBq~;ysbUtRraG}dJOct96^u!+E9uXT7?U4B7Z`P=VOnf z+x)$7d6@$_-p21~6{xf;!c*nD2)m=m4Yty>|8Nekb=Qe}>qSV}I0n}rEXe~-4T1fal4~atCCLKy#nmq^tSAwYHO6+v{rNr--ozOxXQ)90$UzhC=`iEG$ zA5i8hEjOWKitA*Uf!EbTkZ-jP4zWp?^6M;AeCk9_!71#!`UD=3 z;7+%EsFfYXW})9o^NPjFj8j6UbrOwcZTPMAFX*oLi9M%ZV@%NnwArIUlU2P~r@04L zKg!YIs0?q#-Nkz68wj0x3m!(QjErtX&vo0;e!?1|2Vaj{CD~X}oBCJ%{*(3hKl>aT zb+!VnHZ8)N+q01B`av@C={LkQ*B~_e9OUF=Ip*9rnkV^CV__eDGqT}X)mwkR)~5y) zL2Y7th8*h5h?VVWRGNoOdlOzL1hsGd!uFPS)Nxj2+VKjgeY}Lg454>Y7=XU6MUr3E zme71ufP*V45vRWf_XZBY=7)>$s8c=0srF>k$9^=OaLgx~$n3++=G ztOZBNyRtPu<&|TaZvk2ld4Z|I-#kN{aZgxY0y*J*Q=fkTT@4Mt&&HL<3sG$+ zvbDwtW`$rArJk(ALlZT=-@F1l^@=1dvwBGS>JP>mgYA$Wu~BHWZlc%H3Q4Dc7?dBn zEtz+%5XEt-%s;%D*C%dct8ve+;(48vzhutD^~X$#ziruw_2 z!FW3+e>#Kv210{|V+bC%2H7E_pl`Gbnvu^jVM14`2b_d|a6Ddz1>tUL0*=g!5nR(0 zG#(XsxmWhVK}|>Gy>#NLu!lmIZq1{c_hGBvY9x=Uz@od2upIv!ex>~xmF>)8yG&ep zw;MH)#c&!T?vs^T3~#AJ@S#d%hTg=L_lN5Kygf(lvtZPdT4-)9#{-EgBvM^@@BRsRYi|%aGD2f@^b)#% zFolJApm@zqs73XHv`H$4?{dTb*ldjdwiCI%!Vy2hjw>#kF!O#nqJq94+_WdhDj3kX z^$^-`sfCv52NWs3ML=F2jQf6(B=lG(v03Z_{V9QnJL8MxZxd0kt%w%49*Em)h4RD_ ztPk6Sr08vsghrtCK;q&CA6#nPAN9g3)Jq`*H{H7l*6$aI>+6H)(O*&QP1``_a6b$l zn~(CBjri$Mf^3(Kh%a9&+4{*GiNnS7R$*9W)DK?IgjVC*Fm_NEZ2NER*heiAd)KYP z%5*#YdhW}|mI}OJ<%V3TVes7A7Dr4q>2x5Ocel)B$!brI{}D(p!L%PB_BS5N58&ci zj{4P?VS4=mUVZs2S>Nd(ax=2gcJEZkjB3DX?IiSVYmU^l@%VMT0p9CVP;aA-H5-m% zbcf3b%&oyqw*sU$RYE&emItJo(e%lRO388b?DG_^ANhS3R3x08G!+mL|QE@&L-S_>~ zKmS=z|0^FQ4jGaz`wybB!kFegy7191J+4yjK+jFuyna(;RY+gMB&1`b_c^2|DRaBO zm>2!4KA_QgE!K;inKNhG@tkZhD%D$1H$5KP)%HTEPpV|@kqSu)z2UuUJ~l1yiqIP` zC8dP}5&7E}`D&Zc99tmt)M~sprI+~nC_XdhAU;Kd8dkGKpIM8F1y7NcxK-T8KJf38 zis|z_U=iIJ<(78Xb#fV29rr`=vlzVhGC}j340Q2y#cF2*WY6g&*q1V>^gJqja2{wC zy#v*T#pv+F4O=g1V7bv@iSDIHyfuF$`JP%YnH&?3{d4Q^-AQoE_MOLVlZ{yHTrDwh zYKP6wd!pg=V~NwvTHKm9lm!n=c*n5^Px*TA?My4iU0%Y>r<17LaR8r`8#8n7OWe8` zgO4XKA~-h#Io;;cGJZ8DmwNHeK65r7(B{b`O_6infQ43ha+{BxyK{)hXhAI({vDfA?D#|{=a<3F~oLcc^#5cJ7ZbI$IT2!jFpmB6F zOxmBt{)a`Furv#oVy>b4iHpz@oJQHL?@^Ta71!HbMPSxX$Yp;;`J9vZ;~uI22ZByv%!m~93|)&~wSU#`zpk7AReuij9Uxd|KT)u| zJ2Pa5@wM7$h6dju>0j1&k6*cP_O8PuJHZs_ zo`WSi%g{1$I-ZCcY*M)+8NNUtn?7}b<-)GGIpZw8SWL!k_0_mA?lgKC|G>7birnre z&#K>VkUdI|ZT5aemF5w6PO8Dh3vF5A(V7<3w@{JL5eEyk5iRC(CgW~Mk_$#+v_&MW zdX7iG=1jmb3K0kP;)`7{PM>d!vo|kGyi{XRaL!ElFkEppXEHLBmtnf)B;;Nn3FFk= zcq6#jD~i^jC^i_AwngDhQfEFpxEoC)645m16=sgG;>nalNV*mWceFv+COw3oc#BUv z$E6B^Mb$i-hljBW`WJyj?jaUKWCY_XQ>J7VO^cZFa)bGzXePDll38AfEflF?3-)l%<_eQ11+-qnWt7 zXRKI5ZLo5}6$~487G}>+iHz%FWam7^XP-}~dw&p@I-P};(S6AHcVaJT9kyg2gu`4@ zeo$No&tKnAu}hhrYe1uYQcTNpkptX2^32sD ze7aGK6V@6WDBYblCT(aOF3*_Ma*RBkQ26|Bs}cfGhsss-*3 z-{E*Wk%1nx7K2REv2AAB-|w40@1MUO|MNcik84C;l03ARLArjY|JOD2D%ytk^71Uz z+lu<$2k}I=4TlKceBe~UT(^6Hd-}S(vi2721Z(U{Z87@g{tIuR*Z7BUz2BP4$Eh=H z!y~+3a1-4>dtg()7m_Qc3m}{SLekXF3-|B2z*AeS8Bxi2+4(M}r9DFb=w0I9VTsL? zeUWos<=?F5*Q`W--ijwU@W*}gbRXWAPQanxk&${4HH+Ht zzR+)9+AquVod@yIDL*D2naw$|A?)5`$KPhiSy!XDVVosd>WKk;oxBgBk1VvE{xNPifUbX~-pLr5zCG z^Md8{;ge*qyEx+!84aO#PoYOx9%?&pz<<>* zOTngWdV!drpExGfgxFuQ+^<%L(5{MtN!E-F^|#Tdv>ECmyQIUHMjZNW$eksvIp4V* zLmm~O=yzAvTP4{bb*57WLv zZcz*#oZg9qx@WgcEGzKu~U3$Qh<1R3o=!_%ljXi2W4PpuR^y;Ft$!VQb# z3sGXIO(&0OcrxQ5^4iI=k4H8x9iN7TogU~tTsV&g4Z`}Ybx6|6!C;@)=q+WzHw%*y zS-l>2TXle2kr#|EJVjgYaFm5RA@Q9N<_z47y$e=hbP_PWV?2^i{E!$LEy2xR<1yAW z3_2ydF{CaKX0`_~6{9e=ix&oqTEBC@UU1x|;?;*mB3JqX)Wq556-^!b>UZSQT#?PT zN{JoM_M~&?@!YM@k25a2@Unt06$@8zeaHD6Xfu%t!b|&L;Y8{`3u0pCZ2DD=WnA2R zP9AxTPHLgtbiN;lChuUyl+En%)0SI;Mebnw18k{0hm8YYW2;po2CbE$v5q~r-WQ%> zwIv)baiOM_u^Ex$ZJ480fSPt6@bl9>v`#Q4m+JERG$r29Q)QcILrRLJ7#u0Zcg4REKS_@# zgbrSdKTHPSd0=TvOn{^xZO4&DG|VMFw=KlIObh%52=-nU-g} zQzqPs17=^wp*ki0Ufha$SH7ausPkX-`>*z$f7a#y*GJuBy97tH7IzNrfl+2EwoR=> zgjP2O?d;D|k&UWa?#A(-L?&9-VqD+#07lP+|NPl07zmwiz-}`*nu>l?_|_hn`?Bo} zGal;Snu8X}(BJ9~V$R-zT4WXW*w>4U$$DrspM~V7$Y<;=&B_gO)b~1p@ZbdaFS5ne z!KTpct%cuN(ujZ9LvT5=Bwu&dNRFwlghrQS+}WOhIH66jyI{h&jlSqMd^7HOxuSOO z8HA?@jlIHLq{NO!dAu_oc@IHST`7WN6zTB9hd%EGC$ym}duv8wN$T{o9%)GhHmPY4KKcyVy$bHwW^Lydy26+yp}?nlAdm{AiTG z-Vf)~^@TSN#5wWg-EsVq5yx_$QT#S|BSQ)nbBoBZ$`k9bhM_;dVJ-7_=u*u}a3Y87 z;P?uEE{nD04U6f2%L;P2F3k%L!Z#c74jtT$Xv4M)Hot@(@3iPLQk~IXzT)Mr1Ne5; z3zO`N#2&dlZ~Y#}?lXNj+N~>(Z~K93A|J!Vvp-wB70FvR%r-IR9*f*g$ zCKo9$TF`T}H@lxw;l}X_?Ct*z_iR)-u9rTg4V1X>k|rOnm1b@JH%K3{=MX7-KHXu! z68GaM?bVFmefzLgzc99Z>Okc%d8S$RWY=Oj?&wi~TXlVT_M8E2N36o>F<hw%{~v}8f`^zT)xY+@_g_0vGv_e|Zx<|&^D{_HnqAP2?e;%N^RCipfY z)&C`0m3_zHYdy*CeYxXD5Y_U1XmrVj-maTr`Y{%zt+zmCNne;ICgMx`RJ6O3h|WEl zkR#4eb7BW_p0p9WJZa57Pld)v_^x_e-UcSWhRQo7-fPfi@H=U`-@guNog5sC|A_eu zhcG|4FV9HZ(^P&WH`jRcdc+evUA_}mosy9~R`iSqA7P52H&nWce7_u9h9{^{ql?JT zdGv?Y-j?n=KO?ue9v%1IL#t*l=6XhQ(UkyND2ECC#d!W~@??)}Pwp8!hV^TN9#!L}V_{<$eDk<~;%v-@37% zhd%EFikeli5nS(^$a&L(L9TnyD@1S*?})5>&mYJRlVZ>9A~*B-d(7JW3B5!w>{Zl? zf&CYCal&18v zn=sLD%O@6|-21pIyE=ClY}5wiO>Bf;vni9Vp2y(XPccJ7hGX__!;FG2|EBNz^S=A* z@xRwc|5vV8a}!K;2HYe6HMy0+LVjeWM+{%O=lX=u7?&k zjLycY>=EMq@!-d0hq1=`G`d&p!-7_hOkSbGWQ|yKd%X{HPC8TTOmFI!kLJ~Zy?H0n zjZW$|9MJC^TrC&lYNI$`6`bSNIqvXV^Inn~xfGQag;?@Vo`$VtSh@Zcj8^muQf;9=iw z!AM;>PMy`7DvhU5dEqry?zj$*h4*n$>=&^1HHI8&!0j+i7IoKV@mX6ANmt~Sr_!93 zUV~KODe^sHK?_GGdRWIYd21kzm(5|T@u7UGH%AM`Ch|dFp4fq& za!;{q&~A9Q&xV=oQ+!KohD~#KemM45{r*>K?|V7P{!6$TbN@PJDajW{TNL{YuO&wPt#FPi{K?46U@X@Ox(v775MIlAAw} zKh};*o(jg7oXAR_CfJ%UQt>7u0S{EyA>A+$hlN+UzmL!iE>z}8arWpLxeCimo+ENk zF8b_g&AX9FJhXQfN0bIqbJsYw^Bc-OiW)rdeIk$VpU>atY^d|qkr8dj@T=fv<$5&Z zM{OkDS)avDn|So!ng-Vcr;srFBZizeYsb&NtO&OSmHsmBPL@)~y@zQq1+_t5$K2lR5S!kN)+ z=($vnWA=Z?FdI|eIdln|ESsPsa^-%Vux8kuU>?$+&G1Ri)RZ5{^ZmWJ#^0AUqipGR zMu+dcylFLmIFk+yrnZY5w^>p0U>mam0h>T8Z7%bp4DhumA(+;{~S%W4!Vq~ZSbhZt}3 z5tDM|sJkl}E)kCS_UIrso+w9bMj0+{J&5Ub7Bn63SN`+=L~Z_eerD&(N|^683qGE^ zp>CgmV=gNt@0?>KH}+kT^nJegZ~c+gEEkdY@)aR29^6oD%acEUqUpvl6vPW{ltK)2 zk0&GSoGjfwPG{(_8Yrw6yb0UYXnubS8Y!=lJns&6e7TJIi*6vP*pH!B7h!#&0K;C4 z#hR>{D6AJbOQowR>9d&n--6jg+m!n+`Et==Z?1kdi&jTN*=C;(4J*vK>540hTD75o z3sT{+0}pK!9?K^$u(4j2ozJ>bIeQGHOGok48eh5`_Yk?KUevD-VvE}nN)md~{G8BG zYP4hGydT&oJB1_P_;botN2b`$X47$pWWERW?oOfg%-J0Ox&f70GSr^) z45rO3aC>Db{DH$BDB z;nm1_@emc->P$$rq|=QGl+-`L6dz?yUVRnke2}#38ae_GV z3z_D|<385BR;b9$UZxzTtjeGv`iwu{o?9c|LGQ*ROfL{~yDhTpzq%6E0Vgo&c?MF~ z%QK-q7kfJFgrsFB)O4-`gW< zT!*RROsY!Ph*Nf*Mc;n!alqyVwx#YvT}>G#9981?OErJ>&;Nt_-~Ub>|MA-EbI0TA zDpe?Ftiqe)Zhw1kT1h8LBI32EdTPs3GZS)S{D1EVw&@T|cXCzX4` zD)bJ99XyR4F_-WpX*&u64#6|w42Bkdz~mLm-00Jlvdb1zLDPoI^K|&D%W-Tx{0w8n zEcNBJDI6UTK#!nNbZ-^I9*xU|7IO-}Oz@$!*FyS~2JlMjO)M9@uw~XFi?#n)HqLNm zhr@cTv36z8{UJgJwScGchEO}N9|O*N^T=j*F26X0M;!Wbmw!LO-5bC?{W~!FsVX09 z_vO_i3wV0fRKg^Hnuwufo($)n@nc}t3@+*)z!8oX{CP>89g?m=_rz&*vd+V?Wo3}^ ze2el8g5Bk;!q*vwEU*5Cnuk)X86(TFpI_m*lN5Ihzb~?CUt;`@*ND9O0*-0V@zg+t zo%%h)1)Wl~SL#FgS%PnRPp~V+-ZtgjbI6p-QCssj?it*NpG-&YNgvCJlf-%R`THn2 zSAfSlWpEI=^$sCZxS=S7*84|u{m?$N*yq4geHvgGCs^GfUtm%90to}|;qsvZ9MKov zksar7MtBm{m2z?4bPY-;Kf=ekEtvTIB%)29VVmbIJS~>y&t3Im=Le=VNq>oOtGjp~@&*%EJw^K~cLm3! z9tC5636HHNqqn)zG}DJN7w58%iO6nQ+J+~q1Nq=}3@@Fx0C4JwfxMi%kjvi(usMAU zor5BH`B^O69yVirgaxOGuLG_Q%o1lYV;?=ohr+#(8GQq?wvVvQwk^kOOu#T+wHECw64-pIS6f>BdVkBC95+o$v)Ku)cSt*bkSYMC%%=#mvx4 zqZ&n~t*IEQ&g3If)D`(YU$cada`vnsY^)&a~E0V#!Z+?u~54NzWBHwaqXj4V)Gidge+h>? z4L<58*v3aRxbXBHxCV(?b!`(KMBhfjjxyYCu_WGGGj6;uJKeEj(i9!;-mAhMKdO+E zSd9}=Z8&n`9T-e|huU$U(6O`nU-RexAFaPqQoz`q27g<3HF8c%HWj_X)PR{x=rWVb znmRJ#t14Uk1V7X2n#dSW#~IrdnEibZhNWD_@h@UdWwQ)ismj?AB9kusI&71R@VI3Y z*7bai1vUfdzDI>uRUe~$!*hfl`z1X3;!Jw}Czxn`gp%Jgj4D*3VO$yf6CY#Z^!4!n z{T$xMsv&vTnXCNz(?wx9%^Ng0^N2K`<$19EX$6rVeHKDILitUr_|{$I7JIE^+oKD( zu}>IVIgaP>wLY}TSk8cqg`ArrSO@+5I8H%}TBd_J=g>+jwv1%p=K)O8bf=nFA0OS7 z<(o{wyjASUbgf>j@7SIT1&e5keJu(!3ejHXDiR8s&}i3)8PW1o7%MNbe5w$zwj3Qz zKH4N*n97oEZc3{o8G1OF1`1T^2{N<3euFKh@vQn6;V_=VlN2xf>;qzQL!K( zf{J2A?4TlGK@kL{SUHzFSzpfi&X+IiBq!N>ujL1`-4>}NXjL?3rwpC$PV(wJ$YiT&rLuv1kC?K`yaDOd#W*Yn^N<3hB*8ld&; z|K-hahF8-V9F7!3(K3I;H874QJ*JA6OX-KoVR|fcnI>pGrKQ!6Xm05s<@K{3cJ6zVLLh->;sNPA%(yr04myk#EcWzj` zxJoNliJQn(C^H8sLy3ga?c5PYwU-tgB&bLp8>u7Y@XgiEPvMlmu|R1PCgg{mTsuM z#D%@xf(R&Nb8g=rdbC`LF*_d7jB)QMK;RSIpLmBf`0H5@dz=#To|0zN2hupzO~VcC zEF0n%@%l(YhUqVsUNXnVIt}b&XS)p3Fbc%-p+QI47Quh_|!EtIe>><^$-83y% z0oG?~h%a9XhqOKr3AT{n_V<*%Pzayh#IU$tl4-W%Am2Ly%S5E|YnJMA37t><} z|Deeif7ATW-6Z&)7s2n_iOVh+zS*i!yLg*&(b}~QDkJgA*O2}dwkLx4<@vQuJddB}Q`F0u!;_hx=U*sT1a`u16l(o zIGz{93)?9${g{mIBpo~sde3x^6A^xKIT|GrP&IxIRBvnJU9v6cvNj?l;!)J=hKU*> zs4tv?y#0}w`h+pSVocHaT@P0i`B2-w2JSA|kn4(pL74(BKN3eqi7F1yvA{?^Fk5pg z>K~Ob)~P@EM%m-1pBV(a6|hS@4Q&^5*xqRpp7M;wGPd)axn(+r7G~ki`b?a&N(3Zh z@R-sed8q&{_gyiUqlwKua`@Oc76~eoU?^sRS4_L+kS348Fl!tRw!$6(D=bb|#0SO~ z*!iiIPJMYvP1o;}v`YsSH9w$f-rY>I-A*HE;z*k=4&{CQjPBS$Lzm?7oaL-cB}eF= z6h_Zt0dz7p)e@EylVmB0wq3hPC;1fx?^nj5A9AdQnrV#GOVS;FLlyTKTmJ&nCTDk2 z)`s^ay=;JLtKU$E(0iJuB#qb0#UTHUu_|Ba;Ox3VDqnY>ymlU=wc0FGrnHG#T2iTQ z1IsWBF+)S2Im)|#kb;Q-z8<uI@qSHg)Fu|PHnkQ zdYWbQDnb^GbC?(L?t2o?{KFsp_dfIftNi?NTf;d^hLq@lCetq+en8gNENj=#gS-nD zQrY&eBs?V?13ZA!zF3sTy`c8-=6^z`}XcG2zK1oHiVT88gOXvxW(l);dB=zz?oZfRaTs(Pr<3OBy-Qe$F_H z0s)9EnT-RFS7S8OD!PiYjK%NnSe`r%XD0cAyNm<1aZy<0mkdX{47>|utQgvi;fJfy zUFZ*%Jd6#w){qL)#nD}kI5u7mpDl&)R+$S^Zz*Ey7&lxsw!m(GO+<#-LVUaqmUXG( ziT6i(d6y5xLjCk{+Y9>C{DJPW`8)5nn>23l4Sk6FN;_Y?BHe&K8a3)CC2kdipb^ub zaCMO8zy~@m@`LgW`-!igAIg4=eIsLuD;s{1X4`u*RpiI|1HEKs+f877`4Z-Fc*X7) zBl_RSy6XdRiM*$(PyuY6B*Xdw!q2(Fs0&huf5B+nQL@Gn#vi=Hb&-6|aAEs>UwmI_ zj%k)t;J;ZN#~k{}&h;+IHnB>+-?`H7)5A;Ew7XXm5yN`mJJUl|tz|T2$pJE3 zs0iJWA^LJB{%`&M7kGb(>0WWk4oYbk*DXb%2ll7c%+;UHX(&sK(yXZFs4}PNCAtIP$ z-Z%ttQkwTt6cK=N=Rnoh)E z@;y&X9|lSft%P@O0z$v}qg=)qW9K`g*9u0%&1#=XxHiLBa6!6;z zqTtdPh^U0%&80l>)MVmEeIPnU8{q=u6s`2p!#A5KR5n<{{-qT*hK~ckm@l3sjKS_V z2B-;hhv@@b*hpJ5W}O7imhz$R+HVrPEskNIUb6khi|keroaYikc^~^sI|a}RRrjL(&qu6I?1a1v6Y&*_$rHf`Eb&%<| z&2%6ZZHP6eKa+N9J85cNBinc1=oI60neBK*_pFK;L*Xga96U}l{HsZJ(KTArR6^>K zm;Uz8{{`w-GtP#y_4qhW@x=;GtP0E5bcrT2)n$~hDV>}S&Y(zzom73elu9I@QI3xY z^YC(E<$yNEU5mozTT3BsB91pEFR4>=m`nzL(F%{9^qpl0)G5j0*F_F~M2^FKEq6TU zWA(9=-G|u>Yvh0cjwFSkEL#T6jAM0ryc>jREs`(gV#k(QFt^IarUz+2b`%=Brb0$x z9lGC)N9>9zcqtT!c=aHbLy(UBeJP0To{84BD7*`qiD;)4P!d^>JHHtBV*XZKPri=d z4+=4Q%|eua4`#cf>5zS#fx8kZh�yZPOF+Dku>Pp0XWqzb*C@jz*-81=8oZLAKf) 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ⅇ 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�}=}@KkUL9$a09 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 e4-i`|N#;jC!Xg None: + """Test assert_xesmf_available function with exception case.""" + with pytest.raises(ImportError, match="Could not import the `xesmf`"): + regrid.assert_xesmf_available() + + +@pytest.fixture +def dummy_dataset(): + ds = parse_tiff_file( + path_dummy_data / "ETH_GlobalCanopyHeight_10m_2020_N51E003_Map.tif", + ) + return ds + + +def test_infer_resolution(dummy_dataset): + """Test resolution inferring function.""" + (resolution_lat, resolution_lon) = regrid.infer_resolution(dummy_dataset) + expected_lat = 0.01 + expected_lon = 0.01 + + assert resolution_lat == pytest.approx(expected_lat, 0.001) + assert resolution_lon == pytest.approx(expected_lon, 0.001) + + +def test_groupby_regrid(dummy_dataset): + """Test groupby regrid function.""" + bbox = SpatialBounds(54, 6, 51, 3) + ds = regrid._groupby_regrid(data=dummy_dataset, spatial_bounds=bbox, resolution=1.0) + expected_lat = [51.0, 52.0, 53.0, 54.0] + expected_lon = [3.0, 4.0, 5.0, 6.0] + + np.testing.assert_allclose(ds.latitude.values, expected_lat) + np.testing.assert_allclose(ds.longitude.values, expected_lon) + + +def test_interp_regrid(dummy_dataset): + """Test interp regrid function.""" + bbox = SpatialBounds(51.1, 3.1, 51, 3) + ds = regrid._interp_regrid(data=dummy_dataset, spatial_bounds=bbox, resolution=0.05) + expected_lat = [51.0, 51.05, 51.1] + expected_lon = [3.0, 3.05, 3.1] + + np.testing.assert_allclose(ds.latitude.values, expected_lat) + np.testing.assert_allclose(ds.longitude.values, expected_lon) + + +def test_flox_regrid_coarser(dummy_dataset): + """Test flox regridding at a coarser resolution + + Note that the native resolution is about lat/lon=0.01. + """ + bbox = SpatialBounds(54, 6, 51, 3) + ds = regrid.flox_regrid(data=dummy_dataset, spatial_bounds=bbox, resolution=1.0) + expected_lat = [51.0, 52.0, 53.0, 54.0] + expected_lon = [3.0, 4.0, 5.0, 6.0] + + np.testing.assert_allclose(ds.latitude.values, expected_lat) + np.testing.assert_allclose(ds.longitude.values, expected_lon) + + +def test_flox_regrid_finer(dummy_dataset): + """Test flox regridding at a finer resolution + + Note that the native resolution is about lat/lon=0.01. + """ + bbox = SpatialBounds(51.02, 3.02, 51, 3) + ds = regrid.flox_regrid(data=dummy_dataset, spatial_bounds=bbox, resolution=0.002) + # only compare first 5 index + expected_lat = [51.0, 51.002, 51.004, 51.006, 51.008] + expected_lon = [3.0, 3.002, 3.004, 3.006, 3.008] + + np.testing.assert_allclose(ds.latitude.values[:5], expected_lat) + np.testing.assert_allclose(ds.longitude.values[:5], expected_lon) + + +def test_flox_regrid_close(dummy_dataset): + """Test flox regridding at a resolution close to native. + + Note that the native resolution is about lat/lon=0.01. + """ + bbox = SpatialBounds(51.1, 3.1, 51, 3) + ds = regrid.flox_regrid(data=dummy_dataset, spatial_bounds=bbox, resolution=0.02) + expected_lat = [51.0, 51.02, 51.04, 51.06, 51.08, 51.1] + expected_lon = [3.0, 3.02, 3.04, 3.06, 3.08, 3.1] + + np.testing.assert_allclose(ds.latitude.values, expected_lat) + np.testing.assert_allclose(ds.longitude.values, expected_lon) + + +def test_regrid_data_flox(dummy_dataset): + bbox = SpatialBounds(54, 6, 51, 3) + ds = regrid.regrid_data( + data=dummy_dataset, spatial_bounds=bbox, resolution=1.0, method="flox" + ) + expected_lat = [51.0, 52.0, 53.0, 54.0] + expected_lon = [3.0, 4.0, 5.0, 6.0] + + np.testing.assert_allclose(ds.latitude.values, expected_lat) + np.testing.assert_allclose(ds.longitude.values, expected_lon) + + +def test_regrid_data_unknown_method(dummy_dataset): + bbox = SpatialBounds(54, 6, 51, 3) + with pytest.raises(ValueError): + regrid.regrid_data( + data=dummy_dataset, + spatial_bounds=bbox, + resolution=1.0, + method="fake_method", + ) diff --git a/tests/test_utils.py b/tests/test_utils.py new file mode 100644 index 0000000..f77ad62 --- /dev/null +++ b/tests/test_utils.py @@ -0,0 +1,68 @@ +"""Unit test for utils functions.""" + +import tempfile +from pathlib import Path +from unittest.mock import patch +from zampy.datasets import utils + + +def test_tqdm_update(): + """Test tqdm function.""" + # Create an instance of TqdmUpdate + progress_bar = utils.TqdmUpdate(total=100) + progress_bar.update_to(10, 10) + + # Assert that the progress bar's value has been updated correctly + assert progress_bar.n == 100 + + +@patch("requests.head") +def test_get_url_size(mock_head): + """Test url size function.""" + url = "https://example.com/test_file.txt" + + # Create a mock response object + mock_response = mock_head.return_value + mock_response.headers = {"Content-Length": "1024"} + + size = utils.get_url_size(url) + + # Assert that the mock head function was called with the correct URL + mock_head.assert_called_once_with(url) + + # Assert that the returned size is correct + assert size == 1024 + + +def test_get_file_size(): + """Create a temporary file with a size of 1024 bytes.""" + with tempfile.NamedTemporaryFile() as temp_file: + temp_path = Path(temp_file.name) + temp_file.write(b"0" * 1024) + temp_file.flush() + + # Call the get_file_size() function + size = utils.get_file_size(temp_path) + + # Assert that the returned size is correct + assert size == 1024 + + +def test_get_file_size_not_exist(): + """Test with a non-existing file.""" + non_existing_path = Path("non_existing_file.txt") + size = utils.get_file_size(non_existing_path) + assert size == 0 + + +@patch("urllib.request.urlretrieve") +def test_download_url(mock_urlretrieve): + """Test download function.""" + # fake test data + url = "https://example.com/test_file.txt" + fpath = Path("test_file.txt") + overwrite = True + + utils.download_url(url, fpath, overwrite) + # assrt that the urlretrieve function is called. + assert mock_urlretrieve.called diff --git a/tests/test_validation.py b/tests/test_validation.py new file mode 100644 index 0000000..9e35ba2 --- /dev/null +++ b/tests/test_validation.py @@ -0,0 +1,42 @@ +"""Unit test for validation.""" + +import numpy as np +import pytest +from zampy.datasets import EthCanopyHeight +from zampy.datasets import validation +from zampy.datasets.dataset_protocol import SpatialBounds +from zampy.datasets.dataset_protocol import TimeBounds + + +def test_compare_variables_not_match(): + dummy_dataset = EthCanopyHeight() + variables = ["fake_var"] + with pytest.raises(validation.InvalidVariableError): + validation.compare_variables(dummy_dataset, variables) + + +def test_compare_time_bounds_not_cover_start(): + dummy_dataset = EthCanopyHeight() + times = TimeBounds(np.datetime64("1900-01-01"), np.datetime64("2020-12-31")) + with pytest.raises(validation.InvalidTimeBoundsError, match="not cover the start"): + validation.compare_time_bounds(dummy_dataset, times) + + +def test_compare_time_bounds_not_cover_end(): + dummy_dataset = EthCanopyHeight() + times = TimeBounds(np.datetime64("2020-01-01"), np.datetime64("2100-12-31")) + with pytest.raises(validation.InvalidTimeBoundsError, match="not cover the end"): + validation.compare_time_bounds(dummy_dataset, times) + + +def test_validate_download_request(): + """Check function validate download request. + + Note that all the cases with errors are tested separately in other functions. + Here we make sure that the function can be called without error. + """ + dummy_dataset = EthCanopyHeight() + times = TimeBounds(np.datetime64("2020-01-01"), np.datetime64("2020-12-31")) + bbox = SpatialBounds(54, 6, 51, 3) + variables = ["height_of_vegetation"] + validation.validate_download_request(dummy_dataset, "./", times, bbox, variables) diff --git a/tests/test_xesmf_regrid.py b/tests/test_xesmf_regrid.py new file mode 100644 index 0000000..569340e --- /dev/null +++ b/tests/test_xesmf_regrid.py @@ -0,0 +1,48 @@ +"""Unit test for regridding functions with xesmf.""" + +from pathlib import Path +import numpy as np +import pytest +from zampy.datasets.dataset_protocol import SpatialBounds +from zampy.datasets.eth_canopy_height import parse_tiff_file + + +XESMF_INSTALLED = True +try: + import xesmf as _ # noqa: F401 (unused import) + from zampy.utils import xesmf_regrid +except ImportError: + XESMF_INSTALLED = False + + +@pytest.mark.skipif(not XESMF_INSTALLED, reason="xesmf is not installed") +def test_create_new_grid(): + bbox = SpatialBounds(54, 6, 51, 3) + ds = xesmf_regrid.create_new_grid(spatial_bounds=bbox, resolution=1.0) + expected_lat = [51.0, 52.0, 53.0, 54.0] + expected_lon = [3.0, 4.0, 5.0, 6.0] + + np.testing.assert_allclose(ds.latitude.values, expected_lat) + np.testing.assert_allclose(ds.longitude.values, expected_lon) + + +@pytest.mark.skipif(not XESMF_INSTALLED, reason="xesmf is not installed") +def test_xesfm_regrid(): + # load dummy dataset + path_dummy_data = ( + Path(__file__).resolve().parent / "test_data" / "eth-canopy-height" + ) + dummy_dataset = parse_tiff_file( + path_dummy_data / "ETH_GlobalCanopyHeight_10m_2020_N51E003_Map.tif", + ) + + bbox = SpatialBounds(54, 6, 51, 3) + ds = xesmf_regrid.xesfm_regrid( + data=dummy_dataset, spatial_bounds=bbox, resolution=1.0 + ) + + expected_lat = [51.0, 52.0, 53.0, 54.0] + expected_lon = [3.0, 4.0, 5.0, 6.0] + + np.testing.assert_allclose(ds.latitude.values, expected_lat) + np.testing.assert_allclose(ds.longitude.values, expected_lon)