That looks good, although I might try to go for something more general.
Maybe we just need a Shape class that we can combine with Eq, like
Eq(Shape, (1, 1)) where Shape(A) evaluates as the shape of A. It wouldn't
really be a predicate, though, so maybe some more thought is needed here.

Aaron Meurer

On Wed, Dec 14, 2016 at 4:35 PM Andrey Torba <[email protected]> wrote:

> Aaron, what should be done in order to add new sat handlers?
>
> I'm thinking where to start from? sympy/assumptions/sathandlers.py:
>
> class IsEmptyOr1x1(UnevaluatedOnFree):
>
>     def apply(self):
>         return Equivalent(self.args[0], self.expr.shape == (0, 0) or
> self.expr.shape == (1, 1))
>
>
> for klass, fact in [
>     ...
>     (MatrixExpr, IsEmptyOr1x1(Q.diagonal)),
>     (MatrixExpr, Implies(Q.diagonal, Q.symmetric)),
>     ...
>     ]
>
>
> On Monday, December 12, 2016 at 4:04:57 PM UTC-8, Aaron Meurer wrote:
>
> This is a downside of the handlers system. The deductions aren't made
>
>
> based on facts that the handlers return. This is one of the main
>
>
> deficiencies that the satask/sathandlers system tries to fix. I don't
>
>
> know if there's an easy fix to make it work in the handlers system.
>
>
> You could also manually modify the SymmetricHandler class to check for
>
>
> diagonal (this is obviously annoying, because it blatantly duplicates
>
>
> the general fact in get_known_facts
>
>
>
> https://github.com/sympy/sympy/blob/5827cafb1e1840915b3e7c9f62cd0d58fff9fc48/sympy/assumptions/ask.py#L1517
> ).
>
>
>
>
>
> The better way to fix it is to implement it in the sathandlers system.
>
>
> No matrix stuff is implemented there yet, so it may require some
>
>
> ground work.
>
>
>
>
>
> Aaron Meurer
>
>
>
>
>
> On Mon, Dec 12, 2016 at 6:57 PM, Andrey Torba <[email protected]> wrote:
>
>
> > Hi,
>
>
> >
>
>
> > I'm working on the pull request.
>
>
> >
>
>
> > A 1x1 matrix is always diagonal. Diagonal implies symmetric. I have fixed
>
>
> > AskDiagonalHandler such that this assertion pass:
>
>
> >
>
>
> >   V1 = MatrixSymbol('V1', 2, 1)
>
>
> >   V2 = MatrixSymbol('V2', 2, 1)
>
>
> >   expr = V1.T*(V1 + V2)
>
>
> >   assert ask(Q.diagonal(expr)) is True
>
>
> >
>
>
> > Now I assume that inference module will deduce that this expression is
> also
>
>
> > symmetric (since the expression is diagonal):
>
>
> >
>
>
> >   assert ask(Q.symmetric(expr)) is True                  # it is None!
>
>
> >
>
>
> > It returns None. Is anything missing? Can you show an example where this
>
>
> > kind of inference works well?
>
>
> >
>
>
> > -Andrey
>
>
> >
>
>
> > --
>
>
> > You received this message because you are subscribed to the Google Groups
>
>
> > "sympy" group.
>
>
> > To unsubscribe from this group and stop receiving emails from it, send an
>
>
> > email to [email protected].
>
>
> > To post to this group, send email to [email protected].
>
>
> > Visit this group at https://groups.google.com/group/sympy.
>
>
> > To view this discussion on the web visit
>
>
> >
> https://groups.google.com/d/msgid/sympy/d84286f8-9a6f-469b-ac95-4a3c8b21cda2%40googlegroups.com
> .
>
>
> > For more options, visit https://groups.google.com/d/optout.
>
>
>
>
>
>
>
>
>
>
> --
>
>
> You received this message because you are subscribed to the Google Groups
> "sympy" group.
>
>
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
>
>
> To post to this group, send email to [email protected].
>
>
> Visit this group at https://groups.google.com/group/sympy.
>
>
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/sympy/1e2b221a-2b4a-48f5-b1dc-44ff6ab0db28%40googlegroups.com
> <https://groups.google.com/d/msgid/sympy/1e2b221a-2b4a-48f5-b1dc-44ff6ab0db28%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
>
> For more options, visit https://groups.google.com/d/optout.
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sympy.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/CAKgW%3D6JK9m16vO9kSCSbX_SUT32Tv7iHN_4F7Y3bSQzbQX_SEw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to