@@ -399,8 +399,8 @@ def read(
399
399
time : int | str | slice | None = None ,
400
400
elements : Sequence [int ] | np .ndarray | None = None ,
401
401
area : tuple [float , float , float , float ] | None = None ,
402
- x : float | None = None ,
403
- y : float | None = None ,
402
+ x : float | Sequence [ float ] | None = None ,
403
+ y : float | Sequence [ float ] | None = None ,
404
404
keepdims : bool = False ,
405
405
dtype : Any = np .float32 ,
406
406
error_bad_data : bool = True ,
@@ -421,7 +421,7 @@ def read(
421
421
Read only data inside (horizontal) area given as a
422
422
bounding box (tuple with left, lower, right, upper)
423
423
or as list of coordinates for a polygon, by default None
424
- x, y: float, optional
424
+ x, y: float or list[float] , optional
425
425
Read only data for elements containing the (x,y) points(s),
426
426
by default None
427
427
elements: list[int], optional
@@ -447,8 +447,11 @@ def read(
447
447
single_time_selected , time_steps = _valid_timesteps (dfs , time )
448
448
449
449
_validate_elements_and_geometry_sel (elements , area = area , x = x , y = y )
450
- if elements is None :
451
- elements = self ._parse_geometry_sel (area = area , x = x , y = y )
450
+ if area is not None :
451
+ elements = self .geometry ._elements_in_area (area )
452
+
453
+ if (x is not None ) or (y is not None ):
454
+ elements = self .geometry .find_index (x = x , y = y )
452
455
453
456
if elements is None :
454
457
geometry = self .geometry
@@ -459,44 +462,34 @@ def read(
459
462
geometry = self .geometry .elements_to_geometry (elements )
460
463
461
464
item_numbers = _valid_item_numbers (dfs .ItemInfo , items )
462
- items = _get_item_info (dfs .ItemInfo , item_numbers )
463
465
n_items = len (item_numbers )
464
466
465
- deletevalue = self .deletevalue
466
-
467
- data_list = []
468
-
469
- shape : tuple [int , ...]
470
-
471
467
t_rel = np .zeros (len (time_steps ))
472
468
473
469
n_steps = len (time_steps )
474
- shape = (
470
+ shape : tuple [ int , ...] = (
475
471
(n_elems ,)
476
472
if (single_time_selected and not keepdims )
477
473
else (n_steps , n_elems )
478
474
)
479
- for item in range (n_items ):
480
- # Initialize an empty data block
481
- data : np .ndarray = np .ndarray (shape = shape , dtype = dtype )
482
- data_list .append (data )
475
+ data_list : list [np .ndarray ] = [
476
+ np .ndarray (shape = shape , dtype = dtype ) for _ in range (n_items )
477
+ ]
483
478
484
479
for i in trange (n_steps , disable = not self .show_progress ):
485
- it = time_steps [i ]
486
480
for item in range (n_items ):
487
- dfs , d , t = _read_item_time_step (
481
+ dfs , d , t_rel [ i ] = _read_item_time_step (
488
482
dfs = dfs ,
489
483
filename = self ._filename ,
490
484
time = time ,
491
485
item_numbers = item_numbers ,
492
- deletevalue = deletevalue ,
486
+ deletevalue = self . deletevalue ,
493
487
shape = shape ,
494
488
item = item ,
495
- it = it ,
489
+ it = time_steps [ i ] ,
496
490
error_bad_data = error_bad_data ,
497
491
fill_bad_data_value = fill_bad_data_value ,
498
492
)
499
- t_rel [i ] = t
500
493
501
494
if elements is not None :
502
495
d = d [elements ]
@@ -506,13 +499,9 @@ def read(
506
499
else :
507
500
data_list [item ][i ] = d
508
501
509
- time = pd .to_datetime (t_rel , unit = "s" , origin = self .start_time )
510
-
511
502
dfs .Close ()
512
503
513
- dims : tuple [str , ...]
514
-
515
- dims = ("time" , "element" )
504
+ dims : tuple [str , ...] = ("time" , "element" )
516
505
517
506
if single_time_selected and not keepdims :
518
507
dims = ("element" ,)
@@ -522,10 +511,13 @@ def read(
522
511
dims = tuple ([d for d in dims if d != "element" ])
523
512
data_list = [np .squeeze (d , axis = - 1 ) for d in data_list ]
524
513
514
+ time = pd .to_datetime (t_rel , unit = "s" , origin = self .start_time )
515
+ item_infos = _get_item_info (dfs .ItemInfo , item_numbers )
516
+
525
517
return Dataset (
526
518
data_list ,
527
519
time ,
528
- items ,
520
+ item_infos ,
529
521
geometry = geometry ,
530
522
dims = dims ,
531
523
validate = False ,
@@ -558,53 +550,6 @@ def append(self, ds: Dataset, validate: bool = True) -> None:
558
550
info = _get_dfsu_info (self ._filename )
559
551
self ._n_timesteps = info .n_timesteps
560
552
561
- def _parse_geometry_sel (
562
- self ,
563
- area : tuple [float , float , float , float ] | None ,
564
- x : float | None ,
565
- y : float | None ,
566
- ) -> np .ndarray | None :
567
- """Parse geometry selection.
568
-
569
- Parameters
570
- ----------
571
- area : list[float], optional
572
- Read only data inside (horizontal) area given as a
573
- bounding box (tuple with left, lower, right, upper)
574
- or as list of coordinates for a polygon, by default None
575
- x : float, optional
576
- Read only data for elements containing the (x,y) points(s),
577
- by default None
578
- y : float, optional
579
- Read only data for elements containing the (x,y) points(s),
580
- by default None
581
-
582
- Returns
583
- -------
584
- list[int]
585
- List of element ids
586
-
587
- Raises
588
- ------
589
- ValueError
590
- If no elements are found in selection
591
-
592
- """
593
- elements = None
594
-
595
- if area is not None :
596
- elements = self .geometry ._elements_in_area (area )
597
-
598
- if (x is not None ) or (y is not None ):
599
- elements = self .geometry .find_index (x = x , y = y )
600
-
601
- if (x is not None ) or (y is not None ) or (area is not None ):
602
- # selection was attempted
603
- if (elements is None ) or len (elements ) == 0 :
604
- raise ValueError ("No elements in selection!" )
605
-
606
- return elements
607
-
608
553
def get_overset_grid (
609
554
self ,
610
555
dx : float | None = None ,
0 commit comments