@@ -279,14 +279,14 @@ def interpolate(
279279
280280 if len (valid_times ) == 0 :
281281 warnings .warn (
282- "Sequence interpolation returns empty array, no valid times queried" ,
282+ "Interpolation returns empty array, no valid times queried. " ,
283283 UserWarning ,
284284 stacklevel = 2 ,
285285 )
286286 return (
287- (np .empty ((0 , self ._data .shape [1 ])), valid )
287+ (np .empty ((0 , self ._data .shape [1 ]), dtype = self . _data . dtype ), valid )
288288 if return_valid
289- else np .empty ((0 , self ._data .shape [1 ]))
289+ else np .empty ((0 , self ._data .shape [1 ]), dtype = self . _data . dtype )
290290 )
291291
292292 idx_lower = np .floor ((valid_times - self .start_time ) / self .time_delta ).astype (
@@ -345,6 +345,12 @@ def interpolate(
345345
346346 def close (self ) -> None :
347347 super ().close ()
348+
349+ if hasattr (self , "_data" ) and isinstance (self ._data , np .memmap ):
350+ mmap_obj = getattr (self ._data , "_mmap" , None )
351+ if mmap_obj is not None :
352+ mmap_obj .close ()
353+
348354 del self ._data
349355
350356
@@ -406,14 +412,14 @@ def interpolate(
406412
407413 if len (valid_times ) == 0 :
408414 warnings .warn (
409- "Sequence interpolation returns empty array, no valid times queried" ,
415+ "Interpolation returns empty array, no valid times queried. " ,
410416 UserWarning ,
411417 stacklevel = 2 ,
412418 )
413419 return (
414- (np .empty ((0 , self ._data .shape [1 ])), valid )
420+ (np .empty ((0 , self ._data .shape [1 ]), dtype = self . _data . dtype ), valid )
415421 if return_valid
416- else np .empty ((0 , self ._data .shape [1 ]))
422+ else np .empty ((0 , self ._data .shape [1 ]), dtype = self . _data . dtype )
417423 )
418424
419425 idx_lower = np .floor (
@@ -469,7 +475,6 @@ def interpolate(
469475 np .copyto (interpolated , neuron_means , where = np .isnan (interpolated ))
470476
471477 return (interpolated , valid ) if return_valid else interpolated
472-
473478 else :
474479 raise NotImplementedError (
475480 "interpolation_mode should be linear or nearest_neighbor"
@@ -532,7 +537,7 @@ def __init__(
532537 self .end_time = self .timestamps [- 1 ]
533538 self .valid_interval = TimeInterval (self .start_time , self .end_time )
534539 self .rescale = rescale
535- self .cache_trials = cache_data # Store the cache preference
540+ self .cache_data = cache_data # Store the cache preference
536541 self .use_stimuli_names = use_stimuli_names
537542 self ._parse_trials ()
538543
@@ -627,9 +632,7 @@ def _parse_trials(self) -> None:
627632 else :
628633 data_file_name = self .root_folder / "data" / f"{ key } .npy"
629634 self .trials .append (
630- ScreenTrial .create (
631- data_file_name , metadata , cache_data = self .cache_trials
632- )
635+ ScreenTrial .create (data_file_name , metadata , cache_data = self .cache_data )
633636 )
634637
635638 def interpolate (
@@ -691,6 +694,20 @@ def rescale_frame(self, frame: np.ndarray) -> np.ndarray:
691694 np .float32
692695 )
693696
697+ def close (self ) -> None :
698+ super ().close ()
699+
700+ if hasattr (self , "trials" ):
701+ for trial in self .trials :
702+ if hasattr (trial , "_cached_data" ) and isinstance (
703+ trial ._cached_data , np .memmap
704+ ):
705+ mmap_obj = getattr (trial ._cached_data , "_mmap" , None )
706+ if mmap_obj is not None :
707+ mmap_obj .close ()
708+ del trial ._cached_data
709+ del self .trials
710+
694711
695712class TimeIntervalInterpolator (Interpolator ):
696713 """Interpolator for labeled time intervals.
@@ -762,7 +779,7 @@ def interpolate(
762779
763780 if n_times == 0 :
764781 warnings .warn (
765- "TimeIntervalInterpolator returns an empty array, no valid times queried." ,
782+ "Interpolation returns empty array, no valid times queried." ,
766783 UserWarning ,
767784 stacklevel = 2 ,
768785 )
@@ -1092,10 +1109,15 @@ def interpolate(
10921109
10931110 # Handle edge case where no times are valid
10941111 if len (valid_times ) == 0 :
1112+ warnings .warn (
1113+ "Interpolation returns empty array, no valid times queried." ,
1114+ UserWarning ,
1115+ stacklevel = 2 ,
1116+ )
10951117 return (
1096- (np .empty ((0 , self .n_signals )), valid )
1118+ (np .empty ((0 , self .n_signals ), dtype = np . float64 ), valid )
10971119 if return_valid
1098- else np .empty ((0 , self .n_signals ))
1120+ else np .empty ((0 , self .n_signals ), dtype = np . float64 )
10991121 )
11001122
11011123 # 2. Prepare boundaries
0 commit comments