On Feb 10, 2011, at 10:42 AM, Vinzent Steinberg wrote: > On 9 Feb., 05:22, "Aaron S. Meurer" <asmeu...@gmail.com> wrote: >> I am trying to create a branch that backports all of my non-Risch Algorithm >> commits from my integration3 branch. One >> commit,https://github.com/asmeurer/sympy/commit/846af4a187800a97520d771dc9e1..., >> which is related tohttp://code.google.com/p/sympy/issues/detail?id=1991, >> changes the exceptions in the code of matrices.py a little bit. I am not so >> sure now what the best way to have things is, though. >> >> Currently, there is a MatrixError exception, which is only used in one place >> in matrices.py, and there I believe ShapeError should be used instead. All >> over the code there is "assert self.cols == self.rows". I have replaced all >> of these with NonSquareMatrixError, which I for some reason have renamed >> NonSquareMatrixException to. So my questions are: >> >> 1. Should we have MatrixError, and if so, how should it be structured? >> >> 2. Should it be called NonSquareMatrixError or NonSquareMatrixException? It >> is raised in those cases where only a square matrix makes sense but a >> non-square matrix was given (like Matrix.det()). >> >> The current structure of the exceptions is >> >> class NonSquareMatrixException(Exception): >> pass >> >> class ShapeError(ValueError): >> """Wrong matrix shape""" >> pass >> >> class MatrixError(Exception): >> pass >> >> but I think it should be more like >> >> class MatrixError(Exception): >> """ >> If this is never raised directly, is it needed? >> """ >> pass >> >> class ShapeError(ValueError, MatrixError): >> """Wrong matrix shape""" >> pass >> >> class NonSquareMatrixException(ShapeError): >> pass > > > I would drop NonSquareMatrixException() completely, in my opinion this > is overkill. Maybe just replace it with something like > > raise ShapeError('square matrix expected, got %i x %i matrix')
But about half of all instances of ShapeError are because the matrix needed to be square. See the commit I referenced above. I count thirteen instance of ShapeError and ten instances of NonSqauareMatrixError (and actually, I see that one of the ShapeErrors should really be a NonsquareMatrixError, so make that twelve and eleven). ShapeError occurs with things like matrix multiplication which requires certain shape requirements to be met, as well as things like .norm and .dot, which require vectors. NonSquareMatrixError is for all the matrix operations that require square matrices: .det(), inv(), .trace(), various decompositions, etc. So I personally think it can be advantageous to have a separate NonSquareMatrixError/NonSquareMatrixException. Anyway, it derives from ShapeError, so anything that catches ShapeError will also catch it too. > > MatrixError() makes sense when you want to catch matrix-related errors > only and ShapeError() is to specific. > > But I wonder, in which case a "MatrixError" is not a "ShapeError"? If > there is none, MatrixError should be dropped too. > > > Vinzent No there isn't. That's why I was wondering about it, and I believe why I originally removed it in that commit. Do you know if in the future there might be errors other than ShapeError that would derive from MatrixError? Or does it make sense from an object oriented point of view to have a MatrixError base class even if it is derived only once at the moment (I am really no good with OOP stuff, so I don't know)? Aaron Meurer -- You received this message because you are subscribed to the Google Groups "sympy" group. To post to this group, send email to sympy@googlegroups.com. To unsubscribe from this group, send email to sympy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sympy?hl=en.