'Do not use this directly, but the class ctrs (from_* functions).'

def __init__(self, title, key, total_nlines, pointer_nlines, indices_nlines, values_nlines, mxtype, nrows, ncols, nnon_zeros, pointer_format_str, indices_format_str, values_format_str, right_hand_sides_nlines=0, nelementals=0):

    self.title = title
    self.key = key
    if (title is None):
        title = 'No    Title'
    if (len(title) > 72):
        raise ValueError('title    cannot    be    >    72    characters')
    if (key is None):
        key = '|No    Key'
    if (len(key) > 8):
        warnings.warn(('key    is    >    8    characters    (key    is    %s)' % key), LineOverflow)
    self.total_nlines = total_nlines
    self.pointer_nlines = pointer_nlines
    self.indices_nlines = indices_nlines
    self.values_nlines = values_nlines
    parser = FortranFormatParser()
    pointer_format = parser.parse(pointer_format_str)
    if (not isinstance(pointer_format, IntFormat)):
        raise ValueError(('Expected    int    format    for    pointer    format,    got    %s' % pointer_format))
    indices_format = parser.parse(indices_format_str)
    if (not isinstance(indices_format, IntFormat)):
        raise ValueError(('Expected    int    format    for    indices    format,    got    %s' % indices_format))
    values_format = parser.parse(values_format_str)
    if isinstance(values_format, ExpFormat):
        if (mxtype.value_type not in ['real', 'complex']):
            raise ValueError(('Inconsistency    between    matrix    type    %s    and    value    type    %s' % (mxtype, values_format)))
        values_dtype = np.float64
    elif isinstance(values_format, IntFormat):
        if (mxtype.value_type not in ['integer']):
            raise ValueError(('Inconsistency    between    matrix    type    %s    and    value    type    %s' % (mxtype, values_format)))
        values_dtype = int
    else:
        raise ValueError(('Unsupported    format    for    values    %r' % (values_format,)))
    self.pointer_format = pointer_format
    self.indices_format = indices_format
    self.values_format = values_format
    self.pointer_dtype = np.int32
    self.indices_dtype = np.int32
    self.values_dtype = values_dtype
    self.pointer_nlines = pointer_nlines
    self.pointer_nbytes_full = _nbytes_full(pointer_format, pointer_nlines)
    self.indices_nlines = indices_nlines
    self.indices_nbytes_full = _nbytes_full(indices_format, indices_nlines)
    self.values_nlines = values_nlines
    self.values_nbytes_full = _nbytes_full(values_format, values_nlines)
    self.nrows = nrows
    self.ncols = ncols
    self.nnon_zeros = nnon_zeros
    self.nelementals = nelementals
    self.mxtype = mxtype
