def test_location_distance_threshold(self): """ Tests a user defined distance threshold between successive points. """ lon = np.array([-71.05, -71.06, -80.0]) lat = np.array([41.0, 41.02, 45.05]) npt.assert_array_equal(qartod.location_test(lon, lat), np.array([1, 1, 1])) npt.assert_array_equal( qartod.location_test(lon, lat, range_max=3000.0), np.ma.array([1, 1, 3]))
def test_single_location_nan(self): lon = [np.nan] lat = [np.nan] npt.assert_array_equal(qartod.location_test(lon=lon, lat=lat), np.ma.array([9])) lon = np.array(lon) lat = np.array(lat) npt.assert_array_equal(qartod.location_test(lon=lon, lat=lat), np.ma.array([9])) # Test dask nan input lon = dask_arr(lon) lat = dask_arr(lat) npt.assert_array_equal(qartod.location_test(lon=lon, lat=lat), np.ma.array([9]))
def test_single_location_none(self): # Masked/None/NaN values return "UNKNOWN" lon = [None] lat = [None] npt.assert_array_equal(qartod.location_test(lon=lon, lat=lat), np.ma.array([9])) lon = np.array(lon) lat = np.array(lat) npt.assert_array_equal(qartod.location_test(lon=lon, lat=lat), np.ma.array([9])) lon = dask_arr(lon) lat = dask_arr(lat) npt.assert_array_equal(qartod.location_test(lon=lon, lat=lat), np.ma.array([9]))
def test_location_bbox(self): lon = [80, -78, -71, -79, 500] lat = [None, 50, 59, 10, -60] npt.assert_array_equal( qartod.location_test(lon=lon, lat=lat, bbox=[-80, 40, -70, 60]), np.ma.array([4, 1, 1, 4, 4])) lon = np.asarray([80, -78, -71, -79, 500], dtype=np.floating) lat = np.asarray([None, 50, 59, 10, -60], dtype=np.floating) npt.assert_array_equal( qartod.location_test(lon=lon, lat=lat, bbox=[-80, 40, -70, 60]), np.ma.array([4, 1, 1, 4, 4])) lon = dask_arr(np.asarray([80, -78, -71, -79, 500], dtype=np.floating)) lat = dask_arr(np.asarray([None, 50, 59, 10, -60], dtype=np.floating)) npt.assert_array_equal( qartod.location_test(lon=lon, lat=lat, bbox=[-80, 40, -70, 60]), np.ma.array([4, 1, 1, 4, 4]))
def test_location(self): """ Ensure that longitudes and latitudes are within reasonable bounds. """ lon = [80.0, -78.5, 500.500] lat = [np.NaN, 50.0, -60.0] npt.assert_array_equal(qartod.location_test(lon=lon, lat=lat), np.ma.array([4, 1, 4])) lon = np.array(lon) lat = np.array(lat) npt.assert_array_equal(qartod.location_test(lon=lon, lat=lat), np.ma.array([4, 1, 4])) lon = dask_arr(lon) lat = dask_arr(lat) npt.assert_array_equal(qartod.location_test(lon=lon, lat=lat), np.ma.array([4, 1, 4]))
def test_location_bad_input(self): # Wrong type lon with self.assertRaises(ValueError): qartod.location_test(lon='hello', lat=70) # Wrong type lat with self.assertRaises(ValueError): qartod.location_test(lon=70, lat='foo') # Wrong type bbox with self.assertRaises(ValueError): qartod.location_test(lon=70, lat=70, bbox='hi') # Wrong size bbox with self.assertRaises(ValueError): qartod.location_test(lon=70, lat=70, bbox=(1, 2))