@@ -385,7 +385,6 @@ def _read(cls, fileobj, header, buffer_size=4):
385385 Streamline points
386386 """
387387 dtype = header ["_dtype" ]
388-
389388 coordinate_size = 3 * dtype .itemsize
390389 # Make buffer_size an integer and a multiple of coordinate_size.
391390 buffer_size = int (buffer_size * MEGABYTE )
@@ -398,16 +397,16 @@ def _read(cls, fileobj, header, buffer_size=4):
398397 f .seek (header ["_offset_data" ], os .SEEK_SET )
399398
400399 eof = False
401- n_streams = 0
402400 leftover = np .empty ((0 , 3 ), dtype = '<f4' )
401+ n_streams = 0
402+
403403 while not eof :
404404 buff = bytearray (buffer_size )
405405 n_read = f .readinto (buff )
406406 eof = n_read != buffer_size
407407 if eof :
408408 buff = buff [:n_read ]
409409
410- # read raw files from file
411410 raw_values = np .frombuffer (buff , dtype = dtype )
412411
413412 # Convert raw_values into a list of little-endian triples (for x,y,z coord)
@@ -416,6 +415,7 @@ def _read(cls, fileobj, header, buffer_size=4):
416415 # Find stream delimiter locations (all NaNs)
417416 delims = np .where (np .isnan (coords ).all (axis = 1 ))[0 ]
418417
418+ # Recover leftovers, which can't have delimiters in them
419419 if leftover .size :
420420 delims += leftover .shape [0 ]
421421 coords = np .vstack ((leftover , coords ))
@@ -428,11 +428,15 @@ def _read(cls, fileobj, header, buffer_size=4):
428428 n_streams += 1
429429 begin = delim + 1
430430
431- # the rest gets appended to the leftover
431+ # The rest gets appended to the leftover
432432 leftover = coords [begin :]
433433
434434 if not (leftover .shape == (1 , 3 ) and np .isinf (leftover ).all ()):
435- raise DataError ("Expecting end-of-file marker 'inf inf inf'" )
435+ if n_streams == 0 :
436+ msg = "Cannot find a streamline delimiter. This file might be corrupted."
437+ else :
438+ msg = "Expecting end-of-file marker 'inf inf inf'"
439+ raise DataError (msg )
436440
437441 # In case the 'count' field was not provided.
438442 header [Field .NB_STREAMLINES ] = n_streams
0 commit comments