示例#1
0
def test_Image_tcorr_image_daily():
    """Tcorr should be masked for date outside range with IMAGE_DAILY"""
    input_image = ee.Image.constant(1).set({
        'system:time_start': ee.Date('1980-07-04').millis()})
    m = model.Image(input_image, tcorr_source='IMAGE_DAILY',
                     tmax_source='TOPOWX_MEDIAN_V0')
    tcorr_img, index_img = m._tcorr
    tcorr = utils.point_image_value(tcorr_img, SCENE_POINT)
    index = utils.point_image_value(index_img, SCENE_POINT)
    assert tcorr['tcorr'] is None
    assert index['index'] is None
示例#2
0
def test_Image_tcorr_image_annual(expected=[0.9786, 2], tol=0.0001):
    """Test getting annual Tcorr from composite when monthly/daily are missing"""
    input_image = ee.Image.constant(1).set({
        'system:time_start': ee.Date('1980-07-04').millis()})
    m = model.Image(input_image, tcorr_source='IMAGE',
                     tmax_source='TOPOWX_MEDIAN_V0')
    m._month = ee.Number(9999)
    tcorr_img, index_img = m._tcorr
    tcorr = utils.point_image_value(tcorr_img, SCENE_POINT)
    index = utils.point_image_value(index_img, SCENE_POINT)
    assert abs(tcorr['tcorr'] - expected[0]) <= tol
    assert index['index'] == expected[1]
示例#3
0
def test_Image_tcorr_image_month(expected=[0.9723, 1], tol=0.0001):
    """Test getting monthly Tcorr from composite when daily is missing"""
    # Setting start date to well before beginning of daily Tcorr images
    # 1980-07-04 should have the same cycle_day value as previous tests
    input_image = ee.Image.constant(1).set({
        'system:time_start': ee.Date('1980-07-04').millis()})
    m = model.Image(input_image, tcorr_source='IMAGE',
                     tmax_source='TOPOWX_MEDIAN_V0')
    tcorr_img, index_img = m._tcorr
    tcorr = utils.point_image_value(tcorr_img, SCENE_POINT)
    index = utils.point_image_value(index_img, SCENE_POINT)
    assert abs(tcorr['tcorr'] - expected[0]) <= tol
    assert index['index'] == expected[1]
示例#4
0
def test_Image_tcorr_image_default(expected=[0.978, 3], tol=0.0001):
    """Test getting default Tcorr from composite"""
    input_image = ee.Image.constant(1).set(
        {'system:time_start': ee.Date('1980-07-04').millis()})
    m = ssebop.Image(input_image,
                     tcorr_source='IMAGE',
                     tmax_source='TOPOWX_MEDIAN_V0')
    m._month = ee.Number(9999)
    m._cycle_day = ee.Number(9999)
    tcorr_img, index_img = m.tcorr
    tcorr = utils.point_image_value(tcorr_img, SCENE_POINT)
    index = utils.point_image_value(index_img, SCENE_POINT)
    assert abs(tcorr['tcorr'] - expected[0]) <= tol
    assert index['index'] == expected[1]
示例#5
0
def test_Image_tcorr_image_source(tcorr_source, tmax_source, scene_id,
                                  expected, tol=0.0001):
    """Test getting Tcorr value and index for a single date at a real point"""
    scene_date = datetime.datetime.strptime(scene_id.split('_')[-1], '%Y%m%d') \
        .strftime('%Y-%m-%d')
    input_image = ee.Image.constant(1).set({
        'system:time_start': ee.Date(scene_date).millis()})
    tcorr_img, index_img = model.Image(
        input_image, tcorr_source=tcorr_source, tmax_source=tmax_source)._tcorr

    # Tcorr images are constant images and need to be queried at a point
    tcorr = utils.point_image_value(tcorr_img, SCENE_POINT)
    index = utils.point_image_value(index_img, SCENE_POINT)
    assert abs(tcorr['tcorr'] - expected[0]) <= tol
    assert index['index'] == expected[1]
示例#6
0
def test_Image_et_fraction_values(dt, elev, tcorr, tmax, expected, tol=0.0001):
    output_img = default_image_obj(dt_source=dt,
                                   elev_source=elev,
                                   tcorr_source=tcorr,
                                   tmax_source=tmax).et_fraction
    output = utils.point_image_value(ee.Image(output_img), TEST_POINT)
    assert abs(output['et_fraction'] - expected) <= tol
示例#7
0
def test_Image_mask_values():
    output_img = default_image_obj(ndvi=0.5,
                                   lst=308,
                                   dt_source=10,
                                   elev_source=50,
                                   tcorr_source=0.98,
                                   tmax_source=310).mask
    output = utils.point_image_value(output_img, TEST_POINT)
    assert output['mask'] == 1
示例#8
0
def test_Image_tcorr_image_values(lst=300,
                                  ndvi=0.8,
                                  tmax=306,
                                  expected=0.9804,
                                  tol=0.0001):
    output_img = default_image_obj(lst=lst, ndvi=ndvi,
                                   tmax_source=tmax).tcorr_image
    output = utils.point_image_value(output_img, TEST_POINT)
    assert abs(output['tcorr'] - expected) <= tol
示例#9
0
def test_Model_elr_adjust(xy, adjusted):
    """Check if the temperature is lower when there should be an adjustment

    This test can't be done with constant images since there are reduce and
    reproject calls in the function.
    """
    tmax = ee.Image(f'NASA/ORNL/DAYMET_V4/20170701').select(['tmax'
                                                             ]).add(273.15)
    elev = ee.Image('CGIAR/SRTM90_V4')

    # Use a small radius to make the test run faster
    original = utils.point_image_value(tmax, xy, scale=100)['tmax']
    tmax = model.elr_adjust(temperature=tmax, elevation=elev, radius=80)
    output = utils.point_image_value(tmax, xy, scale=100)['tmax']
    if adjusted:
        assert output < original
    else:
        assert output == original
示例#10
0
def test_Image_et_values(tol=0.0001):
    output_img = default_image_obj(ndvi=0.5,
                                   lst=308,
                                   dt_source=10,
                                   elev_source=50,
                                   tcorr_source=0.98,
                                   tmax_source=310,
                                   et_reference_source=10).et
    output = utils.point_image_value(output_img, TEST_POINT)
    assert abs(output['et'] - 5.8) <= tol
示例#11
0
def test_Image_calculate_values(tol=0.0001):
    """Test if the calculate method returns ET, ETr, and ETf values"""
    output_img = default_image_obj(
            ndvi=0.5, lst=308, dt_source=10, elev_source=50,
            tcorr_source=0.98, tmax_source=310, et_reference_source=10)\
        .calculate(['et', 'et_reference', 'et_fraction'])
    output = utils.point_image_value(output_img, TEST_POINT)
    assert abs(output['et'] - 5.8) <= tol
    assert abs(output['et_reference'] - 10) <= tol
    assert abs(output['et_fraction'] - 0.58) <= tol
示例#12
0
def test_Image_tmax_fallback(tmax_source, xy, expected, tol=0.001):
    """Test getting Tmax median value when daily doesn't exist

    To test this, move the test date into the future
    Tmax collections are filtered based on start_date and end_date
    """
    m = default_image_obj(tmax_source=tmax_source)
    m._start_date = ee.Date.fromYMD(2099, 7, 1)
    m._end_date = ee.Date.fromYMD(2099, 7, 2)
    output = utils.point_image_value(ee.Image(m.tmax), xy)
    assert abs(output['tmax'] - expected) <= tol
示例#13
0
def test_Image_tmax_fallback(tmax_source, xy, expected, tol=0.001):
    """Test getting Tmax median value when daily doesn't exist

    To test this, move the test date into the future
    """
    input_img = ee.Image.constant([300, 0.8]).rename(['lst', 'ndvi']) \
        .set({'system:index': SCENE_ID,
              'system:time_start': ee.Date(SCENE_DATE).update(2099).millis()})
    output_img = ssebop.Image(input_img, tmax_source=tmax_source).tmax
    output = utils.point_image_value(ee.Image(output_img), xy)
    assert abs(output['tmax'] - expected) <= tol
示例#14
0
def test_Image_time_values():
    # The time image is currently being built from the et_fraction image, so all
    #   the ancillary values must be set.
    output_img = default_image_obj(ndvi=0.5,
                                   lst=308,
                                   dt_source=10,
                                   elev_source=50,
                                   tcorr_source=0.98,
                                   tmax_source=310).time
    output = utils.point_image_value(output_img, TEST_POINT)
    assert output['time'] == SCENE_TIME
示例#15
0
def test_Image_dt_source_calculated(dt_source, date, xy, expected, tol=0.001):
    """Test getting calculated dT values for a single date at a real point"""
    m = ssebop.Image(default_image(), dt_source=dt_source)
    # Start/end date are needed to filter the source collection
    m._start_date = ee.Date.parse('yyyy-MM-dd', date)
    m._end_date = ee.Date.parse('yyyy-MM-dd', date).advance(1, 'day')
    # DOY is needed in dT calculation
    m._doy = ee.Date.parse('yyyy-MM-dd', date).getRelative('day', 'year')\
        .int().add(1)
    output = utils.point_image_value(ee.Image(m.dt), xy)
    assert abs(output['dt'] - expected) <= tol
示例#16
0
def test_Image_et_reference_sources(source,
                                    band,
                                    factor,
                                    xy,
                                    expected,
                                    tol=0.001):
    """Test getting reference ET values for a single date at a real point"""
    output = utils.point_image_value(
        default_image_obj(et_reference_source=source,
                          et_reference_band=band,
                          et_reference_factor=factor).et_reference, xy)
    assert abs(output['et_reference'] - expected) <= tol
示例#17
0
def test_Image_tcorr_image_daily_last_date_ingested():
    """Test if last exported daily Tcorr image is used

    Two extra daily images with system:time_starts of "1979-01-01" but different
    "date_ingested" properties were added to the collection for this test.
    The "first" and "second" images have values of 1 and 2 respectively.
    """
    input_image = ee.Image.constant(1).set(
        {'system:time_start': ee.Date('1979-01-01').millis()})
    m = ssebop.Image(input_image,
                     tcorr_source='IMAGE_DAILY',
                     tmax_source='TOPOWX_MEDIAN_V0')
    tcorr_img, index_img = m.tcorr
    tcorr = utils.point_image_value(tcorr_img, SCENE_POINT)
    assert tcorr['tcorr'] == 2
示例#18
0
def test_Image_tcorr_scene_daily():
    """Tcorr should be masked for date outside range with SCENE_DAILY"""
    input_image = ee.Image.constant(1).set({
        'system:index':
        'LC08_042035_20150713',
        'system:time_start':
        ee.Date('1980-07-04').millis()
    })
    m = ssebop.Image(input_image,
                     tcorr_source='SCENE_DAILY',
                     tmax_source='DAYMET_MEDIAN_V2')
    tcorr_img = m.tcorr
    tcorr = utils.point_image_value(tcorr_img, SCENE_POINT)
    index = utils.getinfo(tcorr_img.get('tcorr_index'))
    assert tcorr['tcorr'] is None
    assert index == 9
示例#19
0
def test_Image_tcorr_scene_month(expected=[0.97006134520787, 1], tol=0.000001):
    """Test getting monthly Tcorr from composite when daily is missing"""
    # Setting start date to well before beginning of daily Tcorr images
    input_image = ee.Image.constant(1).set({
        'system:index':
        'LC08_042035_20150713',
        'system:time_start':
        ee.Date('1980-07-13').millis()
    })
    m = ssebop.Image(input_image,
                     tcorr_source='SCENE',
                     tmax_source='DAYMET_MEDIAN_V2')
    tcorr_img = m.tcorr
    tcorr = utils.point_image_value(tcorr_img, SCENE_POINT)
    index = utils.getinfo(tcorr_img.get('tcorr_index'))
    assert abs(tcorr['tcorr'] - expected[0]) <= tol
    assert index == expected[1]
示例#20
0
def test_Image_tcorr_scene_annual(expected=[0.9762536456651, 2], tol=0.000001):
    """Test getting annual Tcorr from composite when monthly/daily are missing"""
    input_image = ee.Image.constant(1).set({
        'system:index':
        'LC08_042035_20150713',
        'system:time_start':
        ee.Date('1980-07-13').millis()
    })
    m = ssebop.Image(input_image,
                     tcorr_source='SCENE',
                     tmax_source='DAYMET_MEDIAN_V2')
    m._month = ee.Number(9999)
    tcorr_img = m.tcorr
    tcorr = utils.point_image_value(tcorr_img, SCENE_POINT)
    index = utils.getinfo(tcorr_img.get('tcorr_index'))
    assert abs(tcorr['tcorr'] - expected[0]) <= tol
    assert index == expected[1]
示例#21
0
def test_Image_et_fraction_elr_param(lst,
                                     ndvi,
                                     dt,
                                     elev,
                                     tcorr,
                                     tmax,
                                     elr_flag,
                                     expected,
                                     tol=0.0001):
    """Test that elr_flag works and changes ETf values"""
    output_img = default_image_obj(lst=lst,
                                   ndvi=ndvi,
                                   dt_source=dt,
                                   elev_source=elev,
                                   tcorr_source=tcorr,
                                   tmax_source=tmax,
                                   elr_flag=elr_flag).et_fraction
    output = utils.point_image_value(ee.Image(output_img), TEST_POINT)
    assert abs(output['et_fraction'] - expected) <= tol
示例#22
0
def test_Image_tmax_sources(tmax_source, xy, expected, tol=0.001):
    """Test getting Tmax values for a single date at a real point"""
    output_img = ssebop.Image(default_image(), tmax_source=tmax_source).tmax
    output = utils.point_image_value(ee.Image(output_img), xy)
    assert abs(output['tmax'] - expected) <= tol
示例#23
0
def test_point_image_value(tol=0.001):
    expected = 2364.351
    output = utils.point_image_value(ee.Image('USGS/NED'),
                                     [-106.03249, 37.17777])
    assert abs(output['elevation'] - expected) <= tol
示例#24
0
def test_Image_elev_sources(elev_source, xy, expected, tol=0.001):
    """Test getting elevation values for a single date at a real point"""
    output = utils.point_image_value(
        ssebop.Image(default_image(), elev_source=elev_source).elev, xy)
    assert abs(output['elev'] - expected) <= tol
示例#25
0
def test_Image_dt_source_constant(dt_source, xy, expected, tol=0.001):
    """Test getting condatnt dT values for a single date at a real point"""
    m = ssebop.Image(default_image(), dt_source=dt_source)
    output = utils.point_image_value(ee.Image(m.dt), xy)
    assert abs(output['dt'] - expected) <= tol
示例#26
0
def test_Image_dt_source_clamping(dt_source, doy, xy, expected, tol=0.001):
    """Check that dT values are clamped to dt_min and dt_max (6, 25)"""
    m = ssebop.Image(default_image(), dt_source=dt_source)
    m._doy = doy
    output = utils.point_image_value(ee.Image(m.dt), xy)
    assert abs(output['dt'] - expected) <= tol
示例#27
0
def test_Image_dt_source_median(dt_source, doy, xy, expected, tol=0.001):
    """Test getting median dT values for a single date at a real point"""
    m = ssebop.Image(default_image(), dt_source=dt_source)
    m._doy = doy
    output = utils.point_image_value(ee.Image(m.dt), xy)
    assert abs(output['dt'] - expected) <= tol