|
7 | 7 | from typing import Any, Sequence
|
8 | 8 | import numpy as np
|
9 | 9 | import pandas as pd
|
10 |
| -from tqdm import tqdm |
11 | 10 |
|
12 | 11 | from mikecore.DfsFile import (
|
13 | 12 | DfsDynamicItemInfo,
|
@@ -349,99 +348,6 @@ def __repr__(self) -> str:
|
349 | 348 |
|
350 | 349 | return str.join("\n", out)
|
351 | 350 |
|
352 |
| - def read( |
353 |
| - self, |
354 |
| - *, |
355 |
| - items: str | int | Sequence[str | int] | None = None, |
356 |
| - time: int | str | slice | None = None, |
357 |
| - keepdims: bool = False, |
358 |
| - dtype: Any = np.float32, |
359 |
| - ) -> Dataset: |
360 |
| - """Read data from a dfs file. |
361 |
| -
|
362 |
| - Parameters |
363 |
| - --------- |
364 |
| - items: list[int] or list[str], optional |
365 |
| - Read only selected items, by number (0-based), or by name |
366 |
| - time: int, str, datetime, pd.TimeStamp, sequence, slice or pd.DatetimeIndex, optional |
367 |
| - Read only selected time steps, by default None (=all) |
368 |
| - keepdims: bool, optional |
369 |
| - When reading a single time step only, should the time-dimension be kept |
370 |
| - in the returned Dataset? by default: False |
371 |
| - dtype: data-type, optional |
372 |
| - Define the dtype of the returned dataset (default = np.float32) |
373 |
| -
|
374 |
| - Returns |
375 |
| - ------- |
376 |
| - Dataset |
377 |
| -
|
378 |
| - """ |
379 |
| - self._open() |
380 |
| - |
381 |
| - item_numbers = _valid_item_numbers(self._dfs.ItemInfo, items) |
382 |
| - n_items = len(item_numbers) |
383 |
| - |
384 |
| - single_time_selected, time_steps = _valid_timesteps(self._dfs.FileInfo, time) |
385 |
| - nt = len(time_steps) if not single_time_selected else 1 |
386 |
| - |
387 |
| - shape: tuple[int, ...] |
388 |
| - |
389 |
| - if self._ndim == 1: |
390 |
| - shape = (nt, self.nx) # type: ignore |
391 |
| - elif self._ndim == 2: |
392 |
| - shape = (nt, self.ny, self.nx) # type: ignore |
393 |
| - else: |
394 |
| - # TODO this is not used, since Dfs3 has a separate .read method |
395 |
| - shape = (nt, self.nz, self.ny, self.nx) # type: ignore |
396 |
| - |
397 |
| - dims = self.geometry.default_dims |
398 |
| - |
399 |
| - if single_time_selected and not keepdims: |
400 |
| - shape = shape[1:] |
401 |
| - else: |
402 |
| - dims = ["time"] + list(dims) |
403 |
| - |
404 |
| - data_list: list[np.ndarray] = [ |
405 |
| - np.ndarray(shape=shape, dtype=dtype) for _ in range(n_items) |
406 |
| - ] |
407 |
| - |
408 |
| - t_seconds = np.zeros(len(time_steps)) |
409 |
| - |
410 |
| - for i, it in enumerate(tqdm(time_steps, disable=not self.show_progress)): |
411 |
| - for item in range(n_items): |
412 |
| - itemdata = self._dfs.ReadItemTimeStep(item_numbers[item] + 1, int(it)) |
413 |
| - |
414 |
| - d = itemdata.Data |
415 |
| - assert d.ndim == 1 |
416 |
| - |
417 |
| - d[d == self.deletevalue] = np.nan |
418 |
| - |
419 |
| - if self._ndim == 2: |
420 |
| - d = d.reshape(self.ny, self.nx) # type: ignore |
421 |
| - |
422 |
| - if single_time_selected: |
423 |
| - data_list[item] = np.atleast_2d(d) if keepdims else d |
424 |
| - else: |
425 |
| - data_list[item][i] = d |
426 |
| - |
427 |
| - t_seconds[i] = itemdata.Time |
428 |
| - |
429 |
| - time = pd.to_datetime(t_seconds, unit="s", origin=self.start_time) |
430 |
| - |
431 |
| - items = _get_item_info(self._dfs.ItemInfo, item_numbers) |
432 |
| - |
433 |
| - self._dfs.Close() |
434 |
| - |
435 |
| - return Dataset( |
436 |
| - data=data_list, |
437 |
| - time=time, |
438 |
| - items=items, |
439 |
| - dims=tuple(dims), |
440 |
| - geometry=self.geometry, |
441 |
| - validate=False, |
442 |
| - dt=self._timestep, |
443 |
| - ) |
444 |
| - |
445 | 351 | def _open(self) -> None:
|
446 | 352 | raise NotImplementedError("Should be implemented by subclass")
|
447 | 353 |
|
@@ -494,7 +400,7 @@ def start_time(self) -> pd.Timestamp:
|
494 | 400 | def end_time(self) -> pd.Timestamp:
|
495 | 401 | """File end time."""
|
496 | 402 | if self._end_time is None:
|
497 |
| - self._end_time = self.read(items=[0]).time[-1].to_pydatetime() |
| 403 | + self._end_time = self.read(items=[0]).time[-1].to_pydatetime() # type: ignore |
498 | 404 |
|
499 | 405 | return self._end_time
|
500 | 406 |
|
|
0 commit comments