def test_getNotRectangle_latsOutOfBounds(self): """ Tests that out-of-bound latitude values abort with message Out-of-bound longitudes already tested in test_unit_utils.py """ # get longxy, latixy that would normally come from an fsurdat file # self._get_longxy_latixy will convert -180 to 180 to 0-360 longitudes # get cols, rows also min_lon = 0 # expects min_lon < max_lon min_lat = -5 # expects min_lat < max_lat longxy, latixy, _, _ = self._get_longxy_latixy( _min_lon=min_lon, _max_lon=359, _min_lat=min_lat, _max_lat=5) # get not_rectangle from user-defined lon_1, lon_2, lat_1, lat_2 # I have chosen the lon/lat ranges to match their corresponding index # values to keep this simple (see usage below) lon_1 = 355 lon_2 = 5 lat_1 = -91 lat_2 = 91 with self.assertRaisesRegex(SystemExit, "lat_1 and lat_2 need to be in the range -90 to 90"): _ = ModifyFsurdat._get_not_rectangle( lon_1=lon_1, lon_2=lon_2, lat_1=lat_1, lat_2=lat_2, longxy=longxy, latixy=latixy)
def test_getNotRectangle_lon1leLon2Lat1leLat2(self): """ Tests that not_rectangle is True and False in the grid cells expected according to the user-specified lon_1, lon_2, lat_1, lat_2 When lon_1 <= lon_2 and lat_1 <= lat_2, expect not_rectangle to be False in a rectangle bounded by these lon/lat values Work with integer lon/lat values to keep the testing simple """ # get longxy, latixy that would normally come from an fsurdat file # self._get_longxy_latixy will convert -180 to 180 to 0-360 longitudes # get cols, rows also min_lon = 2 # expects min_lon < max_lon min_lat = 3 # expects min_lat < max_lat longxy, latixy, cols, rows = self._get_longxy_latixy( _min_lon=min_lon, _max_lon=7, _min_lat=min_lat, _max_lat=8) # get not_rectangle from user-defined lon_1, lon_2, lat_1, lat_2 lon_1 = 3 lon_2 = 5 # lon_1 < lon_2 lat_1 = 6 lat_2 = 8 # lat_1 < lat_2 not_rectangle = ModifyFsurdat._get_not_rectangle( lon_1=lon_1, lon_2=lon_2, lat_1=lat_1, lat_2=lat_2, longxy=longxy, latixy=latixy) compare = np.ones((rows,cols)) # assert this to confirm intuitive understanding of these matrices self.assertEqual(np.size(not_rectangle), np.size(compare)) # Hardwire where I expect not_rectangle to be False (0) # I have chosen the lon/lat ranges to match their corresponding index # values to keep this simple compare[lat_1-min_lat:lat_2-min_lat+1, lon_1-min_lon:lon_2-min_lon+1] = 0 np.testing.assert_array_equal(not_rectangle, compare)
def test_getNotRectangle_lonsStraddle0deg(self): """ Tests that not_rectangle is True and False in the grid cells expected according to the user-specified lon_1, lon_2, lat_1, lat_2 When lon_1 > lon_2 and lat_1 > lat_2, expect not_rectangle to be False in four rectangles bounded by these lon/lat values, in the top left, top right, bottom left, and bottom right of the domain Work with integer lon/lat values to keep the testing simple """ # get longxy, latixy that would normally come from an fsurdat file # self._get_longxy_latixy will convert -180 to 180 to 0-360 longitudes # get cols, rows also min_lon = 0 # expects min_lon < max_lon min_lat = -5 # expects min_lat < max_lat longxy, latixy, cols, rows = self._get_longxy_latixy(_min_lon=min_lon, _max_lon=359, _min_lat=min_lat, _max_lat=5) # get not_rectangle from user-defined lon_1, lon_2, lat_1, lat_2 # I have chosen the lon/lat ranges to match their corresponding index # values to keep this simple (see usage below) lon_1 = 355 lon_2 = 5 # lon_1 > lon_2 lat_1 = -4 lat_2 = -6 # lat_1 > lat_2 not_rectangle = ModifyFsurdat._get_not_rectangle( lon_1=lon_1, lon_2=lon_2, lat_1=lat_1, lat_2=lat_2, longxy=longxy, latixy=latixy, ) compare = np.ones((rows, cols)) # assert this to confirm intuitive understanding of these matrices self.assertEqual(np.size(not_rectangle), np.size(compare)) # Hardwire where I expect not_rectangle to be False (0) # I have chosen the lon/lat ranges to match their corresponding index # values to keep this simple compare[:lat_2 - min_lat + 1, :lon_2 - min_lon + 1] = 0 compare[:lat_2 - min_lat + 1, lon_1 - min_lon:] = 0 compare[lat_1 - min_lat:, :lon_2 - min_lon + 1] = 0 compare[lat_1 - min_lat:, lon_1 - min_lon:] = 0 np.testing.assert_array_equal(not_rectangle, compare)