Source code for nbodykit.io.tools
import numpy
[docs]def get_slice_size(start, stop, step):
"""
Utility function to return the size of an array slice
Parameters
----------
start : int
the beginning of the slice
stop : int
the end of the slice
step : int
the slice step size
Returns
-------
N : int
the total size of the slice
"""
N, remainder = divmod(stop-start, step)
if remainder: N += 1
return N
[docs]def global_to_local_slice(sizes, start, stop, fnum):
"""
Convert a global slice, specified by `start` and `stop`
to the corresponding local indices of the file specified
by `fnum`
Parameters
----------
sizes : array_like
the sizes of each file in the file stack
start : int
the global index to begin the slice
stop : int
the global index to stop the slice
fnum : int
the file number that defines the desired local indexing
Returns
-------
local_start, local_stop : int
the local start and stop slice values
"""
# cumulative sizes
cumsizes = numpy.insert(numpy.cumsum(sizes), 0, 0)
# local slice
start_size = cumsizes[fnum]
return (max(start-start_size, 0), min(stop-start_size, sizes[fnum]))
[docs]def get_file_slice(sizes, start, stop):
"""
Return the list of file numbers that must be accessed
to return data between `start` and `slice`, where
these indices are defined in terms of the global
catalog indexing
Parameters
----------
sizes : array_like
the sizes of each file in the file stack
start : int
the global index to begin the slice
stop : int
the global index to stop the slice
Returns
-------
fnums : list
the list of integers specifying the relevant
file numbers that must be accessed
"""
# cumulative sizes
cumsizes = numpy.insert(numpy.cumsum(sizes), 0, 0)
# return the relevant file numbers
fnums = numpy.searchsorted(cumsizes[1:], [start, stop])
return list(range(fnums[0], fnums[1]+1))