Beispiel #1
0
def test_refet_daily_output(daily_params):
    """Test daily RefET calculation at a single point and time"""
    # If I don't copy, the pop changes the test values in daily_data()
    inputs = daily_params.copy()
    surface = inputs.pop('surface')
    expected = inputs.pop('expected')
    # print('ETr: {}'.format(expected))

    # ETr/ETo values only have 4 significant figures
    # Small number of days don't match if difference is set < 0.008
    diff = 0.05 if expected >= 10.0 else 0.008

    # Cast all numeric inputs to ee.Number type except tmin (for now)
    adj_inputs = {}
    for k, v in inputs.items():
        if k == 'rso_type':
            adj_inputs[k] = v
        elif k in ['tmin', 'tmax', 'ea', 'rs', 'uz']:
            adj_inputs[k] = ee.Image.constant(v)
        else:
            adj_inputs[k] = ee.Number(v)

    if surface.lower() == 'etr':
        refet = Daily(**adj_inputs).etr
    elif surface.lower() == 'eto':
        refet = Daily(**adj_inputs).eto
    output = refet\
        .reduceRegion(ee.Reducer.first(), geometry=constant_geom, scale=1)\
        .getInfo()
    assert float(output[surface.lower()]) == pytest.approx(expected, abs=diff)
Beispiel #2
0
def test_refet_daily_rso_type_exception():
    with pytest.raises(ValueError):
        refet = Daily(tmax=ee.Image.constant(d_args['tmax']),
                      tmin=ee.Image.constant(d_args['tmin']),
                      ea=ee.Image.constant(d_args['ea']),
                      rs=ee.Image.constant(d_args['rs']),
                      uz=ee.Image.constant(d_args['uz']),
                      zw=ee.Number(s_args['zw']),
                      elev=ee.Number(s_args['elev']),
                      lat=ee.Number(s_args['lat']),
                      doy=ee.Number(d_args['doy']),
                      rso_type='nonsense',
                      method='refet')
Beispiel #3
0
def test_refet_daily_etw():
    refet = Daily(tmax=ee.Image.constant(d_args['tmax']),
                  tmin=ee.Image.constant(d_args['tmin']),
                  ea=ee.Image.constant(d_args['ea']),
                  rs=ee.Image.constant(d_args['rs']),
                  uz=ee.Image.constant(d_args['uz']),
                  zw=ee.Number(s_args['zw']),
                  elev=ee.Number(s_args['elev']),
                  lat=ee.Number(s_args['lat']),
                  doy=ee.Number(d_args['doy']),
                  method='refet')
    output = refet.etw\
        .reduceRegion(ee.Reducer.first(), geometry=constant_geom, scale=1)\
        .getInfo()
    assert float(output['etw']) == pytest.approx(d_args['etw_refet'])
Beispiel #4
0
def test_refet_daily_etsz(surface, expected):
    refet = Daily(tmax=ee.Image.constant(d_args['tmax']),
                  tmin=ee.Image.constant(d_args['tmin']),
                  ea=ee.Image.constant(d_args['ea']),
                  rs=ee.Image.constant(d_args['rs']),
                  uz=ee.Image.constant(d_args['uz']),
                  zw=ee.Number(s_args['zw']),
                  elev=ee.Number(s_args['elev']),
                  lat=ee.Number(s_args['lat']),
                  doy=ee.Number(d_args['doy']),
                  method='refet')
    output = refet.etsz(surface).rename(['etsz']).reduceRegion(
        reducer=ee.Reducer.first(),
        geometry=ee.Geometry.Rectangle([0, 0, 10, 10], 'EPSG:32613', False),
        scale=1).getInfo()
    assert float(output['etsz']) == pytest.approx(expected)
Beispiel #5
0
def test_refet_daily_pet_hargreaves():
    refet = Daily(tmax=ee.Image.constant(d_args['tmax']),
                  tmin=ee.Image.constant(d_args['tmin']),
                  ea=ee.Image.constant(0),
                  rs=ee.Image.constant(0),
                  uz=ee.Image.constant(0),
                  zw=ee.Number(s_args['zw']),
                  elev=ee.Number(0),
                  lat=ee.Number(s_args['lat']),
                  doy=ee.Number(d_args['doy']),
                  method='asce')
    output = refet.pet_hargreaves\
        .reduceRegion(ee.Reducer.first(), geometry=constant_geom, scale=1)\
        .getInfo()
    assert float(output['pet_hargreaves']) == pytest.approx(
        d_args['pet_hargreaves'])