@@ -55,10 +55,10 @@ def __init__(self, *args, **kwargs):
5555
5656class VariableCache :
5757 ''' Class for handling in-memory variable/reducer caching.
58+ TODO: Add some maximum memory use guards.
5859 '''
59- def __init__ (self , reader ):
60+ def __init__ (self ):
6061 self .__varcache = {} # {(varname, operator):data}
61- self .__reader = reader
6262
6363 def keys (self ):
6464 return self .__varcache .keys ()
@@ -70,7 +70,7 @@ def __setitem__(self, key, value):
7070 self .__varcache [key ] = value
7171
7272
73- def read_variable_from_cache (self , name , cellids , operator ):
73+ def read_variable_from_cache (self , reader , name , cellids , operator ):
7474 ''' Read variable from cache instead of the vlsv file.
7575 :param name: Name of the variable
7676 :param cellids: a value of -1 reads all data
@@ -90,10 +90,10 @@ def read_variable_from_cache(self, name, cellids, operator):
9090 if cellids == - 1 :
9191 return var_data
9292 else :
93- return var_data [self . __reader .get_cellid_locations ()[cellids ]]
93+ return var_data [reader .get_cellid_locations ()[cellids ]]
9494 else :
9595 if (len (cellids ) > 0 ):
96- indices = np .array (itemgetter (* cellids )(self . __reader .get_cellid_locations ()),dtype = np .int64 )
96+ indices = np .array (itemgetter (* cellids )(reader .get_cellid_locations ()),dtype = np .int64 )
9797 else :
9898 indices = np .array ([],dtype = np .int64 )
9999 if value_len == 1 :
@@ -106,22 +106,21 @@ class FileCache:
106106 '''
107107
108108 def __init__ (self , reader ) -> None :
109- self .__reader = reader
110109 self .__metadata_dict = {}
111110 self .__metadata_read = False
112111
113112 self .__rtree_index_files = []
114113 self .__rtree_index = None
115- self .__rtree_idxfile = os .path .join (self .get_cache_folder (),"rtree.idx" )
116- self .__rtree_datfile = os .path .join (self .get_cache_folder (),"rtree.dat" )
114+ self .__rtree_idxfile = os .path .join (self .get_cache_folder (reader ),"rtree.idx" )
115+ self .__rtree_datfile = os .path .join (self .get_cache_folder (reader ),"rtree.dat" )
117116
118117 self .__rtree_properties = rtree .index .Property ()
119118 self .__rtree_properties .dimension = 3
120119 self .__rtree_properties .overwrite = True
121120
122121
123- def get_cache_folder (self ):
124- fn = self . __reader .file_name
122+ def get_cache_folder (self , reader ):
123+ fn = reader .file_name
125124
126125 head ,tail = os .path .split (fn )
127126 path = head
@@ -147,14 +146,14 @@ def get_cache_folder(self):
147146
148147 return path
149148
150- def clear_cache_folder (self ):
151- path = self .get_cache_folder ()
149+ def clear_cache_folder (self , reader ):
150+ path = self .get_cache_folder (reader )
152151 import shutil
153152 shutil .rmtree (path )
154153
155- def set_cellid_spatial_index (self , force = False ):
156- if not os .path .exists (self .get_cache_folder ()):
157- os .makedirs (self .get_cache_folder ())
154+ def set_cellid_spatial_index (self , reader , force = False ):
155+ if not os .path .exists (self .get_cache_folder (reader )):
156+ os .makedirs (self .get_cache_folder (reader ))
158157
159158 if force :
160159 if os .path .exists (self .__rtree_idxfile ):
@@ -164,7 +163,7 @@ def set_cellid_spatial_index(self, force = False):
164163 if (not os .path .isfile (self .__rtree_idxfile ) or not os .path .isfile (self .__rtree_datfile )):
165164 t0 = time .time ()
166165
167- bboxes = self . __reader .get_mesh_domain_extents ("SpatialGrid" )
166+ bboxes = reader .get_mesh_domain_extents ("SpatialGrid" )
168167 bboxes = bboxes .reshape ((- 1 ,6 ), order = 'C' )
169168
170169 self .__rtree_index = rtree .index .Index (self .__rtree_idxfile [:- 4 ],properties = self .__rtree_properties , interleaved = False )
@@ -175,39 +174,39 @@ def set_cellid_spatial_index(self, force = False):
175174 else :
176175 pass
177176
178- def get_cellid_spatial_index (self , force = False ):
177+ def get_cellid_spatial_index (self , reader , force = False ):
179178 if self .__rtree_index == None :
180179 if (force ):
181- self .set_cellid_spatial_index (force )
180+ self .set_cellid_spatial_index (reader , force )
182181 elif not os .path .isfile (self .__rtree_idxfile ) or not os .path .isfile (self .__rtree_datfile ):
183182 self .__rtree_index = None
184183 else :
185184 self .__rtree_index = rtree .index .Index (self .__rtree_idxfile [:- 4 ], properties = self .__rtree_properties , interleaved = False )
186185
187186 return self .__rtree_index
188187
189- def add_metadata (self , key , value ):
188+ def add_metadata (self , reader , key , value ):
190189 self .__metadata_dict [key ] = value
191- self .save_metadata ()
190+ self .save_metadata (reader )
192191
193- def get_metadata_filename (self ):
194- pth , base = os .path .split (self . __reader .file_name )
195- path = self .get_cache_folder ()
192+ def get_metadata_filename (self , reader ):
193+ pth , base = os .path .split (reader .file_name )
194+ path = self .get_cache_folder (reader )
196195
197196 s = os .path .join (path ,"metadata.pkl" )
198197 return s
199198
200- def save_metadata (self ):
201- fn = self .get_metadata_filename ()
202- if not os .path .exists (self .get_cache_folder ()):
203- os .makedirs (self .get_cache_folder ())
199+ def save_metadata (self , reader ):
200+ fn = self .get_metadata_filename (reader )
201+ if not os .path .exists (self .get_cache_folder (reader )):
202+ os .makedirs (self .get_cache_folder (reader ))
204203 try :
205204 with open (fn ,'wb' ) as f :
206205 pickle .dump (self .__metadata_dict ,f )
207206 except Exception as e :
208207 logging .warning ("Could not save metadata file, error: " + str (e ))
209208
210- def get_metadata (self , key , default ):
209+ def get_metadata (self , reader , key , default ):
211210 ''' Read metadata from metadata file/memory, and if not available,
212211 return the given default value.
213212
@@ -217,11 +216,11 @@ def get_metadata(self, key, default):
217216
218217 if not self .__metadata_read :
219218 try :
220- fn = self .get_metadata_filename ()
219+ fn = self .get_metadata_filename (reader )
221220 with open (fn ,'rb' ) as f :
222221 self .__metadata_dict = pickle .load (f )
223222 except Exception as e :
224- logging .debug ("No metadata file found at " + self .get_metadata_filename ()+ ":\n " + str (e ))
223+ logging .debug ("No metadata file found at " + self .get_metadata_filename (reader )+ ":\n " + str (e ))
225224
226225 self .__metadata_read = True
227226
0 commit comments