Skip to content

Commit f6d6107

Browse files
committed
Merge pull request #261 from WeatherGod/fix_260
Perform input validation and casting on input variables. Closes #260.
2 parents 8ed87a0 + da607df commit f6d6107

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

lib/mpl_toolkits/basemap/__init__.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,13 @@ def _validated_ll(param, name, minval, maxval):
503503
(name, minval, maxval))
504504
return param
505505

506+
507+
def _validated_or_none(param, name, minval, maxval):
508+
if param is None:
509+
return None
510+
return _validated_ll(param, name, minval, maxval)
511+
512+
506513
def _insert_validated(d, param, name, minval, maxval):
507514
if param is not None:
508515
d[name] = _validated_ll(param, name, minval, maxval)
@@ -671,6 +678,18 @@ def __init__(self, llcrnrlon=None, llcrnrlat=None,
671678
# set units to meters.
672679
projparams['units']='m'
673680
# check for sane values of lon_0, lat_0, lat_ts, lat_1, lat_2
681+
lat_0 = _validated_or_none(lat_0, 'lat_0', -90, 90)
682+
lat_1 = _validated_or_none(lat_1, 'lat_1', -90, 90)
683+
lat_2 = _validated_or_none(lat_2, 'lat_2', -90, 90)
684+
lat_ts = _validated_or_none(lat_ts, 'lat_ts', -90, 90)
685+
lon_0 = _validated_or_none(lon_0, 'lon_0', -360, 720)
686+
lon_1 = _validated_or_none(lon_1, 'lon_1', -360, 720)
687+
lon_2 = _validated_or_none(lon_2, 'lon_2', -360, 720)
688+
llcrnrlon = _validated_or_none(llcrnrlon, 'llcrnrlon', -360, 720)
689+
urcrnrlon = _validated_or_none(urcrnrlon, 'urcrnrlon', -360, 720)
690+
llcrnrlat = _validated_or_none(llcrnrlat, 'llcrnrlat', -90, 90)
691+
urcrnrlat = _validated_or_none(urcrnrlat, 'urcrnrlat', -90, 90)
692+
674693
_insert_validated(projparams, lat_0, 'lat_0', -90, 90)
675694
_insert_validated(projparams, lat_1, 'lat_1', -90, 90)
676695
_insert_validated(projparams, lat_2, 'lat_2', -90, 90)

lib/mpl_toolkits/basemap/test.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,16 @@ def test_results_should_be_same_for_c_and_f_order_arrays(self):
191191
assert_almost_equal(yy1, yy2)
192192

193193

194-
194+
class TestInputValidation(TestCase):
195+
def test_optional_casting(self):
196+
# Test for the bug reported in gh:#260
197+
d = {'llcrnrlat': 28.979408, 'urcrnrlat': 35.19622,
198+
'llcrnrlon': -95.614105, 'urcrnrlon': -77.554749,
199+
'lon_0': -87.0, 'resolution': 'c', 'lat_0': 32.070374,
200+
'projection': 'lcc'}
201+
bmap1 = Basemap(lat_1=30.0, **d)
202+
bmap2 = Basemap(lat_1=np.array([30.0], dtype='float32'), **d)
203+
assert bmap1.proj4string == bmap2.proj4string
195204

196205

197206
def test():

0 commit comments

Comments
 (0)