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.

Reply via email to