"""

Module to define exceptions to be used in sympy.polys.matrices modules and
classes.

Ideally all exceptions raised in these modules would be defined and documented
here and not e.g. imported from matrices. Also ideally generic exceptions like
ValueError/TypeError would not be raised anywhere.

"""


class DMError(Exception):
    """Base class for errors raised by DomainMatrix"""
    pass


class DMBadInputError(DMError):
    """list of lists is inconsistent with shape"""
    pass


class DMDomainError(DMError):
    """domains do not match"""
    pass


class DMNotAField(DMDomainError):
    """domain is not a field"""
    pass


class DMFormatError(DMError):
    """mixed dense/sparse not supported"""
    pass


class DMNonInvertibleMatrixError(DMError):
    """The matrix in not invertible"""
    pass


class DMRankError(DMError):
    """matrix does not have expected rank"""
    pass


class DMShapeError(DMError):
    """shapes are inconsistent"""
    pass


class DMNonSquareMatrixError(DMShapeError):
    """The matrix is not square"""
    pass


class DMValueError(DMError):
    """The value passed is invalid"""
    pass


__all__ = [
    'DMError', 'DMBadInputError', 'DMDomainError', 'DMFormatError',
    'DMRankError', 'DMShapeError', 'DMNotAField',
    'DMNonInvertibleMatrixError', 'DMNonSquareMatrixError', 'DMValueError'
]