@@ -86,7 +86,8 @@ class ArrayProxy(object):
86
86
# Assume Fortran array memory layout
87
87
order = 'F'
88
88
89
- def __init__ (self , file_like , spec , * , mmap = True , keep_file_open = None ):
89
+ def __init__ (self , file_like , spec , * ,
90
+ mmap = True , keep_file_open = None , compression = None ):
90
91
"""Initialize array proxy instance
91
92
92
93
Parameters
@@ -125,6 +126,7 @@ def __init__(self, file_like, spec, *, mmap=True, keep_file_open=None):
125
126
If ``file_like`` is an open file handle, this setting has no
126
127
effect. The default value (``None``) will result in the value of
127
128
``KEEP_FILE_OPEN_DEFAULT`` being used.
129
+ compression : { None, "gz", "bz2", "zst" }, optional, keyworld only
128
130
"""
129
131
if mmap not in (True , False , 'c' , 'r' ):
130
132
raise ValueError ("mmap should be one of {True, False, 'c', 'r'}" )
@@ -147,10 +149,11 @@ def __init__(self, file_like, spec, *, mmap=True, keep_file_open=None):
147
149
# Permit any specifier that can be interpreted as a numpy dtype
148
150
self ._dtype = np .dtype (self ._dtype )
149
151
self ._mmap = mmap
152
+ self ._compression = compression
150
153
# Flags to keep track of whether a single ImageOpener is created, and
151
154
# whether a single underlying file handle is created.
152
155
self ._keep_file_open , self ._persist_opener = \
153
- self ._should_keep_file_open (file_like , keep_file_open )
156
+ self ._should_keep_file_open (file_like , keep_file_open , compression )
154
157
self ._lock = RLock ()
155
158
156
159
def __del__ (self ):
@@ -172,7 +175,7 @@ def __setstate__(self, state):
172
175
self .__dict__ .update (state )
173
176
self ._lock = RLock ()
174
177
175
- def _should_keep_file_open (self , file_like , keep_file_open ):
178
+ def _should_keep_file_open (self , file_like , keep_file_open , compression ):
176
179
"""Called by ``__init__``.
177
180
178
181
This method determines how to manage ``ImageOpener`` instances,
@@ -248,7 +251,8 @@ def _should_keep_file_open(self, file_like, keep_file_open):
248
251
if hasattr (file_like , 'read' ) and hasattr (file_like , 'seek' ):
249
252
return False , False
250
253
# if the file is a gzip file, and we have_indexed_gzip,
251
- have_igzip = openers .HAVE_INDEXED_GZIP and file_like .endswith ('.gz' )
254
+ have_igzip = openers .HAVE_INDEXED_GZIP and (compression in ("gz" , ".gz" ) or
255
+ file_like .endswith ('.gz' ))
252
256
253
257
persist_opener = keep_file_open or have_igzip
254
258
return keep_file_open , persist_opener
@@ -297,11 +301,15 @@ def _get_fileobj(self):
297
301
if self ._persist_opener :
298
302
if not hasattr (self , '_opener' ):
299
303
self ._opener = openers .ImageOpener (
300
- self .file_like , keep_open = self ._keep_file_open )
304
+ self .file_like ,
305
+ keep_open = self ._keep_file_open ,
306
+ compression = self ._compression )
301
307
yield self ._opener
302
308
else :
303
309
with openers .ImageOpener (
304
- self .file_like , keep_open = False ) as opener :
310
+ self .file_like ,
311
+ keep_open = False ,
312
+ compression = self ._compression ) as opener :
305
313
yield opener
306
314
307
315
def _get_unscaled (self , slicer ):
0 commit comments