Skip to content

Instantly share code, notes, and snippets.

@prl900
Created June 25, 2024 01:24
Show Gist options
  • Save prl900/7b3f35486f135a70a419d066cce10a83 to your computer and use it in GitHub Desktop.
Save prl900/7b3f35486f135a70a419d066cce10a83 to your computer and use it in GitHub Desktop.
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