@@ -66,6 +66,7 @@ def __init__(self, array, out_dtype=None, calc_scale=True):
66
66
else :
67
67
out_dtype = np .dtype (out_dtype )
68
68
self ._out_dtype = out_dtype
69
+ self ._finite_range = None
69
70
if self .scaling_needed ():
70
71
raise WriterError ("Scaling needed but cannot scale" )
71
72
@@ -138,11 +139,8 @@ def out_dtype(self):
138
139
139
140
def finite_range (self ):
140
141
""" Return (maybe cached) finite range of data array """
141
- try :
142
- return self ._finite_range
143
- except AttributeError :
144
- pass
145
- self ._finite_range = finite_range (self ._array )
142
+ if self ._finite_range is None :
143
+ self ._finite_range = finite_range (self ._array )
146
144
return self ._finite_range
147
145
148
146
def _writing_range (self ):
@@ -223,13 +221,17 @@ def __init__(self, array, out_dtype=None, calc_scale=True,
223
221
else :
224
222
out_dtype = np .dtype (out_dtype )
225
223
self ._out_dtype = out_dtype
226
- self .needs_scale = self .scaling_needed ()
227
224
self .scaler_dtype = np .dtype (scaler_dtype )
228
- self .slope = 1.0
229
- self ._scale_calced = False
225
+ self .reset ()
230
226
if calc_scale :
231
227
self .calc_scale ()
232
228
229
+ def reset (self ):
230
+ """ Set object to values before any scaling calculation """
231
+ self .slope = 1.0
232
+ self ._finite_range = None
233
+ self ._scale_calced = False
234
+
233
235
def _get_slope (self ):
234
236
return self ._slope
235
237
def _set_slope (self , val ):
@@ -242,10 +244,11 @@ def calc_scale(self, force=False):
242
244
# If we've run already, return unless told otherwise
243
245
if not force and self ._scale_calced :
244
246
return
245
- self ._scale_calced = True
247
+ self .reset ()
246
248
if not self .scaling_needed ():
247
249
return
248
250
self ._do_scaling ()
251
+ self ._scale_calced = True
249
252
250
253
def to_fileobj (self , fileobj , order = 'F' , nan2zero = True ):
251
254
""" Write array into `fileobj`
@@ -361,11 +364,15 @@ def __init__(self, array, out_dtype=None, calc_scale=True,
361
364
>>> (aw.slope, aw.inter) == (1.0, 128)
362
365
True
363
366
"""
364
- super (SlopeInterArrayWriter , self ).__init__ (array , out_dtype , False ,
367
+ super (SlopeInterArrayWriter , self ).__init__ (array ,
368
+ out_dtype ,
369
+ calc_scale ,
365
370
scaler_dtype )
371
+
372
+ def reset (self ):
373
+ """ Set object to values before any scaling calculation """
374
+ super (SlopeInterArrayWriter , self ).reset ()
366
375
self .inter = 0.0
367
- if calc_scale :
368
- self .calc_scale ()
369
376
370
377
def _get_inter (self ):
371
378
return self ._inter
0 commit comments