def __new__(cls, array, start=None, end=None):
self = array.view(type=cls)<EOL>if end is None and start is None:<EOL><INDENT>start = numpy.array([len(arr) for arr in array], dtype='<STR_LIT>')<EOL>array = numpy.concatenate(array)<EOL><DEDENT>if end is None:<EOL><INDENT>sizes = start<EOL>self.start = numpy.zeros(shape=len(sizes), dtype='<STR_LIT>')<EOL>self.end = numpy.zeros(shape=len(sizes), dtype='<STR_LIT>')<EOL>self.end[:] = sizes.cumsum()<EOL>self.start[<NUM_LIT:1>:] = self.end[:-<NUM_LIT:1>]<EOL><DEDENT>else:<EOL><INDENT>self.start = start<EOL>self.end = end<EOL><DEDENT>self.A = array<EOL>return self<EOL>
if end is none, start contains the sizes. 
            if start is also none, array is a list of arrays to concatenate