@@ -28,22 +28,29 @@ def force(*args, **kwargs):
28
28
idx = 1
29
29
for key , val in func .__annotations__ .items ():
30
30
is_kwargs = key in kwargs .keys ()
31
- if val not in _SUPPORTED_DTYPE or kwargs . get ( key , None ) is None and is_kwargs or len (args )== 1 :
31
+ if not is_kwargs and idx >= len (args ):
32
32
continue
33
- if raise_mistype and (val != type (kwargs .get (key )) if is_kwargs else val != type (args [idx ])):
33
+ input_value = kwargs .get (key , None ) if is_kwargs else args [idx ]
34
+ if type (input_value ) == val :
35
+ continue
36
+ if raise_mistype and (
37
+ val != type (kwargs .get (key ))
38
+ if is_kwargs
39
+ else val != type (args [idx ])
40
+ ):
34
41
if is_kwargs :
35
42
expected = f"{ type (kwargs [key ]).__name__ } ({ kwargs [key ]} )"
36
43
else :
37
44
expected = f"{ type (args [idx ]).__name__ } ({ args [idx ]} )"
38
45
39
46
raise MisType (
40
- f"{ key } expected a { val .__name__ } , not a { expected } ."
41
- )
47
+ f"{ key } expected a { val .__name__ } , not a { expected } ."
48
+ )
42
49
if is_kwargs :
43
50
kwargs [key ] = val (kwargs [key ]) if val != list else [kwargs [key ]]
44
- else :
51
+ elif len ( args ) >= idx :
45
52
_args [idx ] = val (args [idx ]) if val != list else [args [idx ]]
46
- idx += 1
53
+ idx += 1
47
54
args = tuple (_args )
48
55
return func (* args , ** kwargs )
49
56
@@ -116,24 +123,32 @@ def _lee_filter(img, window_size: int):
116
123
img_output = xr .where (np .isnan (binary_nan ), img_ , img_output )
117
124
return img_output
118
125
126
+
119
127
@xr .register_dataarray_accessor ("ed" )
120
128
class EarthDailyAccessorDataArray :
121
129
def __init__ (self , xarray_obj ):
122
130
self ._obj = xarray_obj
123
-
131
+
124
132
def _max_time_wrap (self , wish = 5 ):
125
- return np .min ((wish ,self ._obj [' time' ].size ))
133
+ return np .min ((wish , self ._obj [" time" ].size ))
126
134
127
135
@_typer ()
128
136
def plot_band (self , cmap = "Greys" , col = "time" , col_wrap = 5 , ** kwargs ):
129
- return self ._obj .plot .imshow (cmap = cmap , col = col , col_wrap = self ._max_time_wrap (col_wrap ), ** kwargs )
137
+ return self ._obj .plot .imshow (
138
+ cmap = cmap , col = col , col_wrap = self ._max_time_wrap (col_wrap ), ** kwargs
139
+ )
130
140
131
141
@_typer ()
132
142
def plot_index (
133
143
self , cmap = "RdYlGn" , vmin = - 1 , vmax = 1 , col = "time" , col_wrap = 5 , ** kwargs
134
144
):
135
145
return self ._obj .plot .imshow (
136
- vmin = vmin , vmax = vmax , cmap = cmap , col = col , col_wrap = self ._max_time_wrap (col_wrap ), ** kwargs
146
+ vmin = vmin ,
147
+ vmax = vmax ,
148
+ cmap = cmap ,
149
+ col = col ,
150
+ col_wrap = self ._max_time_wrap (col_wrap ),
151
+ ** kwargs ,
137
152
)
138
153
139
154
@@ -143,9 +158,8 @@ def __init__(self, xarray_obj):
143
158
self ._obj = xarray_obj
144
159
145
160
def _max_time_wrap (self , wish = 5 ):
146
- return np .min ((wish ,self ._obj ['time' ].size ))
147
-
148
-
161
+ return np .min ((wish , self ._obj ["time" ].size ))
162
+
149
163
@_typer ()
150
164
def plot_rgb (
151
165
self ,
@@ -173,7 +187,12 @@ def plot_index(
173
187
self , index , cmap = "RdYlGn" , vmin = - 1 , vmax = 1 , col = "time" , col_wrap = 5 , ** kwargs
174
188
):
175
189
return self ._obj [index ].plot .imshow (
176
- vmin = vmin , vmax = vmax , cmap = cmap , col = col , col_wrap = self ._max_time_wrap (col_wrap ), ** kwargs
190
+ vmin = vmin ,
191
+ vmax = vmax ,
192
+ cmap = cmap ,
193
+ col = col ,
194
+ col_wrap = self ._max_time_wrap (col_wrap ),
195
+ ** kwargs ,
177
196
)
178
197
179
198
@_typer ()
@@ -235,20 +254,23 @@ def _auto_mapper(self):
235
254
params [_BAND_MAPPING [v ]] = self ._obj [v ]
236
255
return params
237
256
238
- def available_index (self , details = False ):
257
+ def available_indices (self , details = False ):
239
258
mapper = list (self ._auto_mapper ().keys ())
240
259
indices = spyndex .indices
241
260
available_indices = []
242
261
for k , v in indices .items ():
243
262
needed_bands = v .bands
263
+ missing_bands = False
244
264
for needed_band in needed_bands :
245
265
if needed_band not in mapper :
266
+ missing_bands = True
246
267
break
268
+ if missing_bands is False :
247
269
available_indices .append (spyndex .indices [k ] if details else k )
248
270
return available_indices
249
271
250
272
@_typer ()
251
- def add_index (self , index : list , ** kwargs ):
273
+ def add_indices (self , index : list , ** kwargs ):
252
274
"""
253
275
Uses spyndex to compute and add index.
254
276
0 commit comments