@@ -606,7 +606,7 @@ def receive(self, chunk) -> list:
606606 split_indices = self .get_splits (chunk .data , target_size_b , DEFAULT_CHUNK_SPLIT_NS )
607607 # Split the cache into chunks and return list of chunks
608608 chunks = []
609- for index in split_indices :
609+ for index in np . diff ( split_indices ) :
610610 _chunk , chunk = chunk .split (
611611 t = chunk .data ["time" ][index ] - int (DEFAULT_CHUNK_SPLIT_NS // 2 ),
612612 allow_early_split = False ,
@@ -628,12 +628,19 @@ def flush(self) -> list:
628628 def get_splits (data , target_size , min_gap = DEFAULT_CHUNK_SPLIT_NS ):
629629 """Get indices where to split the data into chunks of approximately target_size."""
630630 assumed_i = int (target_size // data .itemsize )
631+ if assumed_i == 0 :
632+ raise ValueError ("Target size is too small." )
631633 gap_indices = np .argwhere (strax .diff (data ) > min_gap ).flatten () + 1
632634 split_indices = [0 ]
635+ argmin = 0
633636 if len (gap_indices ) != 0 :
637+ n = 0
634638 while split_indices [- 1 ] + assumed_i < gap_indices [- 1 ]:
635- split_indices .append (
636- gap_indices [np .abs (gap_indices - assumed_i - split_indices [- 1 ]).argmin ()]
637- )
638- split_indices = np .diff (split_indices )
639+ if n > len (data ):
640+ raise ValueError ("Trapped in infinite loop!" )
641+ _argmin = np .abs (gap_indices [argmin + 1 :] - assumed_i - split_indices [- 1 ]).argmin ()
642+ split_indices .append (gap_indices [argmin + 1 :][_argmin ])
643+ argmin += _argmin + 1
644+ n += 1
645+ split_indices = np .array (split_indices )
639646 return split_indices
0 commit comments