Source code for pacman.model.graphs.common.slice

from pacman.exceptions import PacmanValueError
import collections


[docs]class Slice(collections.namedtuple('Slice', 'lo_atom hi_atom n_atoms as_slice')): """ Represents a slice of a vertex. :attr int lo_atom: The lowest atom represented in the slice. :attr int hi_atom: The highest atom represented in the slice. :attr int n_atoms: The number of atoms represented by the slice. :attr as_slice: This slice represented as a :py:func:`slice` object (for use in indexing lists, arrays, etc.) """ def __new__(cls, lo_atom, hi_atom): """ Create a new Slice object. :param int lo_atom: Index of the lowest atom to represent. :param int hi_atom: Index of the highest atom to represent. :raises PacmanValueError: If the bounds of the slice are invalid. """ if lo_atom < 0: raise PacmanValueError('lo_atom < 0') if hi_atom < lo_atom: raise PacmanValueError( 'hi_atom {:d} < lo_atom {:d}'.format(hi_atom, lo_atom)) # Number of atoms represented by this slice n_atoms = hi_atom - lo_atom + 1 # Slice for accessing arrays of values as_slice = slice(lo_atom, hi_atom + 1) # Create the Slice object as a `namedtuple` with these pre-computed # values filled in. return super(cls, Slice).__new__(cls, lo_atom, hi_atom, n_atoms, as_slice)