Skip to content

Commit 31bfa82

Browse files
moving collext_timeslices to classmethod
As suggested by @CKehl
1 parent 7a50d42 commit 31bfa82

1 file changed

Lines changed: 37 additions & 33 deletions

File tree

parcels/field.py

Lines changed: 37 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,38 @@ def get_dim_filenames(cls, filenames, dim):
205205
else:
206206
return filenames
207207

208+
@classmethod
209+
def collect_timeslices(cls, timestamps, data_filenames, _grid_fb_class, dimensions, indices, netcdf_engine):
210+
if timestamps is not None:
211+
dataFiles = []
212+
for findex in range(len(data_filenames)):
213+
for f in [data_filenames[findex], ] * len(timestamps[findex]):
214+
dataFiles.append(f)
215+
timeslices = np.array([stamp for file in timestamps for stamp in file])
216+
time = timeslices
217+
else:
218+
timeslices = []
219+
dataFiles = []
220+
for fname in data_filenames:
221+
with _grid_fb_class(fname, dimensions, indices, netcdf_engine=netcdf_engine) as filebuffer:
222+
ftime = filebuffer.time
223+
timeslices.append(ftime)
224+
dataFiles.append([fname] * len(ftime))
225+
timeslices = np.array(timeslices)
226+
time = np.concatenate(timeslices)
227+
dataFiles = np.concatenate(np.array(dataFiles))
228+
if time.size == 1 and time[0] is None:
229+
time[0] = 0
230+
time_origin = TimeConverter(time[0])
231+
time = time_origin.reltime(time)
232+
233+
if not np.all((time[1:] - time[:-1]) > 0):
234+
id_not_ordered = np.where(time[1:] < time[:-1])[0][0]
235+
raise AssertionError(
236+
'Please make sure your netCDF files are ordered in time. First pair of non-ordered files: %s, %s'
237+
% (dataFiles[id_not_ordered], dataFiles[id_not_ordered + 1]))
238+
return time, time_origin, timeslices, dataFiles
239+
208240
@classmethod
209241
def from_netcdf(cls, filenames, variable, dimensions, indices=None, grid=None,
210242
mesh='spherical', timestamps=None, allow_time_extrapolation=None, time_periodic=False,
@@ -317,48 +349,20 @@ def from_netcdf(cls, filenames, variable, dimensions, indices=None, grid=None,
317349
if len(data_filenames) > 1 and 'time' not in dimensions and timestamps is None:
318350
raise RuntimeError('Multiple files given but no time dimension specified')
319351

320-
def collect_timeslices():
321-
if timestamps is not None:
322-
dataFiles = []
323-
for findex in range(len(data_filenames)):
324-
for f in [data_filenames[findex], ] * len(timestamps[findex]):
325-
dataFiles.append(f)
326-
timeslices = np.array([stamp for file in timestamps for stamp in file])
327-
time = timeslices
328-
else:
329-
timeslices = []
330-
dataFiles = []
331-
for fname in data_filenames:
332-
with _grid_fb_class(fname, dimensions, indices, netcdf_engine=netcdf_engine) as filebuffer:
333-
ftime = filebuffer.time
334-
timeslices.append(ftime)
335-
dataFiles.append([fname] * len(ftime))
336-
timeslices = np.array(timeslices)
337-
time = np.concatenate(timeslices)
338-
dataFiles = np.concatenate(np.array(dataFiles))
339-
if time.size == 1 and time[0] is None:
340-
time[0] = 0
341-
time_origin = TimeConverter(time[0])
342-
time = time_origin.reltime(time)
343-
344-
if not np.all((time[1:] - time[:-1]) > 0):
345-
id_not_ordered = np.where(time[1:] < time[:-1])[0][0]
346-
raise AssertionError(
347-
'Please make sure your netCDF files are ordered in time. First pair of non-ordered files: %s, %s'
348-
% (dataFiles[id_not_ordered], dataFiles[id_not_ordered + 1]))
349-
return time, time_origin, timeslices, dataFiles
350-
351352
if grid is None:
352353
# Concatenate time variable to determine overall dimension
353354
# across multiple files
354-
time, time_origin, timeslices, dataFiles = collect_timeslices()
355+
time, time_origin, timeslices, dataFiles = cls.collect_timeslices(timestamps, data_filenames,
356+
_grid_fb_class, dimensions,
357+
indices, netcdf_engine)
355358
grid = Grid.create_grid(lon, lat, depth, time, time_origin=time_origin, mesh=mesh)
356359
grid.timeslices = timeslices
357360
kwargs['dataFiles'] = dataFiles
358361
elif grid is not None and ('dataFiles' not in kwargs or kwargs['dataFiles'] is None):
359362
# ==== means: the field has a shared grid, but may have different data files, so we need to collect the
360363
# ==== correct file time series again.
361-
_, _, _, dataFiles = collect_timeslices()
364+
_, _, _, dataFiles = cls.collect_timeslices(timestamps, data_filenames, _grid_fb_class,
365+
dimensions, indices, netcdf_engine)
362366
kwargs['dataFiles'] = dataFiles
363367

364368
field_chunksize = kwargs.get('field_chunksize', None)

0 commit comments

Comments
 (0)