23
23
from __future__ import division , print_function , absolute_import
24
24
25
25
import warnings
26
+ from functools import partial
26
27
27
28
import numpy as np
28
29
@@ -176,10 +177,21 @@ def validate_data(self, imaker, params):
176
177
proxy_copy = proxy_data .copy ()
177
178
# Not yet cached, proxy image: in_memory is False
178
179
assert_false (img .in_memory )
180
+ # Load with caching='unchanged'
181
+ data = img .get_data (caching = 'unchanged' )
182
+ # Still not cached
183
+ assert_false (img .in_memory )
184
+ # Default load, does caching
179
185
data = img .get_data ()
180
186
# Data now cached
181
187
assert_true (img .in_memory )
182
188
assert_false (proxy_data is data )
189
+ # Now caching='unchanged' does nothing, returns cached version
190
+ data_again = img .get_data (caching = 'unchanged' )
191
+ assert_true (data is data_again )
192
+ # caching='fill' does nothing because the cache is already full
193
+ data_yet_again = img .get_data (caching = 'fill' )
194
+ assert_true (data is data_yet_again )
183
195
# changing array data does not change proxy data, or reloaded data
184
196
data [:] = 42
185
197
assert_array_equal (proxy_data , proxy_copy )
@@ -191,25 +203,38 @@ def validate_data(self, imaker, params):
191
203
# Which unsets in_memory
192
204
assert_false (img .in_memory )
193
205
assert_array_equal (img .get_data (), proxy_copy )
194
- else : # not proxy
195
- assert_true (isinstance (img .dataobj , np .ndarray ))
206
+ # Check caching='fill' does cache data
207
+ img = imaker ()
208
+ assert_false (img .in_memory )
209
+ data = img .get_data (caching = 'fill' )
196
210
assert_true (img .in_memory )
197
- non_proxy_data = np .asarray (img .dataobj )
198
- data = img .get_data ()
199
- assert_true (non_proxy_data is data )
200
- # changing array data does change proxy data, and reloaded data
201
- data [:] = 42
202
- assert_array_equal (np .asarray (img .dataobj ), 42 )
203
- # It does change the result of get_data
204
- assert_array_equal (img .get_data (), 42 )
205
- # Unache has no effect
206
- img .uncache ()
207
- assert_array_equal (img .get_data (), 42 )
211
+ data_again = img .get_data ()
212
+ assert_true (data is data_again )
213
+ else : # not proxy
214
+ for caching in (None , 'fill' , 'unchanged' ):
215
+ img = imaker ()
216
+ get_data_func = (img .get_data if caching is None else
217
+ partial (img .get_data , caching = caching ))
218
+ assert_true (isinstance (img .dataobj , np .ndarray ))
219
+ assert_true (img .in_memory )
220
+ data = get_data_func ()
221
+ assert_true (data is img .dataobj )
222
+ # changing array data does change proxy data, and reloaded data
223
+ data [:] = 42
224
+ assert_array_equal (np .asarray (img .dataobj ), 42 )
225
+ # It does change the result of get_data
226
+ assert_array_equal (get_data_func (), 42 )
227
+ # Unache has no effect
228
+ img .uncache ()
229
+ assert_array_equal (get_data_func (), 42 )
230
+ assert_true (img .in_memory )
208
231
# dataobj is read only
209
232
fake_data = np .zeros (img .shape ).astype (img .get_data_dtype ())
210
233
assert_raises (AttributeError , setattr , img , 'dataobj' , fake_data )
211
234
# So is in_memory
212
235
assert_raises (AttributeError , setattr , img , 'in_memory' , False )
236
+ # Values to get_data caching parameter must be 'fill' or 'unchanged'
237
+ assert_raises (ValueError , img .get_data , caching = 'something' )
213
238
214
239
def validate_data_deprecated (self , imaker , params ):
215
240
# Check _data property still exists, but raises warning
0 commit comments