Created
June 25, 2024 01:24
-
-
Save prl900/7b3f35486f135a70a419d066cce10a83 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import unittest | |
from lark import Lark, Tree, Token | |
with open('edo.ebnf', 'r') as file: | |
grammar = file.read() | |
class TestExpressions(unittest.TestCase): | |
@classmethod | |
def setUpClass(cls): | |
cls.parser = Lark(grammar, start='start', parser='earley') | |
def test_mean_value_of_S2_nir(self): | |
expression = "mean:space(S2Beta.nir@(year=2019, month=7, delta_month=(0,1,2,3,4,5,6,7,8,9,10,11)))" | |
edo_tree = self.parser.parse(expression) | |
print(edo_tree.pretty()) | |
def test_spatial_mean_daily_rainfall(self): | |
expression = "mean:space(AWRA.rain_day@(year=2021, month=7))" | |
self.parser.parse(expression) | |
def test_temporal_mean_MSWX_temp(self): | |
expression = "mean:time(MSWX.air_temperature@(year=2022))" | |
self.parser.parse(expression) | |
def test_max_FAO_pet(self): | |
expression = "max:time(AWRA.fao_pet@(20220101T000000Z:20230101T000000Z))" | |
self.parser.parse(expression) | |
def test_precipitation_Jan_1st_2020(self): | |
expression = "MSWX.precipitation@(20200101T000000Z)" | |
self.parser.parse(expression) | |
def test_total_precipitation_2013(self): | |
expression = "sum:time(MSWX.precipitation@(year=2013))" | |
self.parser.parse(expression) | |
def test_mean_temp_Q1(self): | |
expression = "mean:time(MSWX.tmin_air_temperature@(quarter=1))" | |
self.parser.parse(expression) | |
def test_temp_diff_Jan_2020_annual_mean(self): | |
expression = "MSWX.air_temperature@(20200101T000000Z)-mean:time(MSWX.air_temperature@(year=2020))" | |
self.parser.parse(expression) | |
expression = "MSWX.air_temperature@(year=2020, month=1)-mean:time(MSWX.air_temperature@(year=2020))" | |
self.parser.parse(expression) | |
def test_z_score_Feb_2015(self): | |
expression = "(MSWX.air_temperature@(year=2015, month=2)-mean:time(MSWX.air_temperature@(year=2015)))/std:time(MSWX.air_temperature@(year=2015))" | |
self.parser.parse(expression) | |
def test_mean_monthly_precipitation(self): | |
expression = "AWRA.rain_day@(year=2021, month=7, delta_month=(0,1,2,3,4,5,6,7,8,9,10,11))#(month, mean)" | |
self.parser.parse(expression) | |
def test_max_water_footprint(self): | |
expression = "green=S2v1.green@(year=2018, month=7, delta_month=(0,1,2))#(month, mean)\nnir=S2v1.nir@(year=2018, month=7, delta_month=(0,1,2))#(month, mean)\nmax:time((green-nir)/(green+nir)>0)" | |
self.parser.parse(expression) | |
expression = "green=S2v1.green@(year=2018, month=7, delta_month=(0,1,2))#(month, mean)\nnir=S2v1.nir@(year=2018, month=7, delta_month=(0,1,2))#(month, mean)\nmax:time((green-nir)/(green+nir)>0.3)" | |
self.parser.parse(expression) | |
def test_min_veg_index_2019(self): | |
expression = "red=S2v1.red@(year=2018, month=(7,8,9))#(month, mean)\nnir=S2v1.nir@(year=2018, month=(7,8,9))#(month, mean)\nmin:time((nir-red)/(nir+red))" | |
self.parser.parse(expression) | |
def test_crop_factor_2018(self): | |
expression = "red=S2v1.red@(year=2018)#(month, mean)\nblue=S2v1.blue@(year=2018)#(month, mean)\nnir=S2v1.nir@(year=2018)#(month, mean)\nswir2=S2v1.swir2@(year=2018)#(month, mean)\nevi=2.5*(nir-red)/(nir+6*red-7.5*blue+1)\ngvmi=((nir+0.1)-(swir2+0.02))/((nir+0.1)+(swir2+0.02))\nrmi=clip(gvmi-(0.775*evi-0.0757),0,100)\nevir=clip(evi/0.9,0,1)\n0.680*(1-2.72^(-14.12*(evir^2.482)-7.991*rmi^0.890))" | |
self.parser.parse(expression) | |
def test_veg_index_diff_2018_2020(self): | |
expression = "red2018=S2v1.red@(year=2018)\nnir2018=S2v1.nir@(year=2018)\nndvi2018=(nir2018-red2018)/(nir2018+red2018)\nred2020=S2v1.red@(year=2020)\nnir2020=S2v1.nir@(year=2020)\nndvi2020=(nir2020-red2020)/(nir2020+red2020)\nndvi2020-ndvi2018" | |
self.parser.parse(expression) | |
def test_soil_moisture_content(self): | |
expression = "nir=S2v1.nir@(year=2018, month=3)\nswir2=S2v1.swir2@(year=2018, month=3)\n(nir-swir2)/(nir+swir2)" | |
self.parser.parse(expression) | |
def test_ignition_risk_index(self): | |
expression = "red=S2v1.red@(year=2019, month=12)\nnir=S2v1.nir@(year=2019, month=12)\nswir2=S2v1.swir2@(year=2019, month=12)\nevi=2.5*(nir-red)/(nir+6*red-7.5*swir2+1)\nndwi=(nir-swir2)/(nir+swir2)\nevi*ndwi" | |
self.parser.parse(expression) | |
expression = "red=S2v1.red@(year=2019, month=12)\nnir=S2v1.nir@(year=2019, month=12)\nswir2=S2v1.swir2@(year=2019, month=12)\nprecipitation=sum:time(MSWX.precipitation@(year=2019, month=12, delta_month=(0,-1,-2)))\nevi=2.5*(nir-red)/(nir+6*red-7.5*swir2+1)\nndwi=(nir-swir2)/(nir+swir2)\nevi*ndwi/precipitation" | |
self.parser.parse(expression) | |
def test_flooded_areas(self): | |
expression = "green=S2v1.green@(20230607T000000Z)\nnir=S2v1.nir@(20230607T000000Z)\nswir2=S2v1.swir2@(20230607T000000Z)\nndwi=(green-nir)/(green+nir)\nndwi>0.3 & (swir2>0.15)" | |
self.parser.parse(expression) | |
expression = "green=S2v1.green@(year=2020)#(month, median)\nnir=S2v1.nir@(year=2020)#(month, median)\nndwi=(green-nir)/(green+nir)\nswir2=S2v1.swir2@(year=2020)#(month, median)\nflooded_areas_monthly=ndwi>0.3 & (swir2>0.15)\nsum:time(flooded_areas_monthly)" | |
self.parser.parse(expression) | |
def test_agg_temp_sel(self): | |
expression = "(S2v1.red/S2v1.green)@(year=2021)" | |
self.parser.parse(expression) | |
if __name__ == '__main__': | |
unittest.main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment