ó
¡¼™\c           @  sô  d  Z  d d l m Z m Z d d l m Z d d l m Z m Z d d l	 m
 Z
 m Z d d l m Z m Z d d l m Z d d l m Z d d	 l m Z d d
 l m Z d „  Z d e
 f d „  ƒ  YZ d e
 f d „  ƒ  YZ d e
 f d „  ƒ  YZ d e
 f d „  ƒ  YZ d e
 f d „  ƒ  YZ d e
 f d „  ƒ  YZ d e
 f d „  ƒ  YZ d e
 f d „  ƒ  YZ d e
 f d „  ƒ  YZ  d e
 f d „  ƒ  YZ! d  „  Z" d! „  Z# d" „  Z$ d# e
 f d$ „  ƒ  YZ% d% e
 f d& „  ƒ  YZ& d' e
 f d( „  ƒ  YZ' d) S(*   sd   
This module contains query handlers responsible for calculus queries:
infinitesimal, bounded, etc.
iÿÿÿÿ(   t   print_functiont   division(   t	   conjuncts(   t   Qt   ask(   t   CommonHandlert   test_closed_group(   t   MatMult
   MatrixExpr(   t	   fuzzy_and(   t   sift(   t   Basic(   t   partialc         C  s   |  | j  k r t Sd  S(   N(   t
   predicatest   True(   t	   predicatet   exprt   assumptions(    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyt   _Factorization   s    t   AskSquareHandlerc           B  s   e  Z d  Z e d „  ƒ Z RS(   s"   
    Handler for key 'square'
    c         C  s   |  j  d |  j  d k S(   Ni    i   (   t   shape(   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR      s    (   t   __name__t
   __module__t   __doc__t   staticmethodR   (    (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR      s   t   AskSymmetricHandlerc           B  sŒ   e  Z d  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z	 e	 Z
 e d „  ƒ Z e e j ƒ Z RS(   s%   
    Handler for key 'symmetric'
    c           sÆ   |  j  ƒ  \ } } t ‡  f d †  | j Dƒ ƒ r5 t St t j |  ƒ ˆ  ƒ rQ t St | j ƒ d k rÂ | j d | j d j k rÂ t | j ƒ d k rœ t St t j	 t
 | j d d !Œ  ƒ ˆ  ƒ Sd  S(   Nc         3  s'   |  ] } t  t j | ƒ ˆ  ƒ Vq d  S(   N(   R   R   t	   symmetric(   t   .0t   arg(   R   (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pys	   <genexpr>'   s    i   i    iÿÿÿÿi   (   t   as_coeff_mmult   allt   argsR   R   R   t   diagonalt   lent   TR   R   (   R   R   t   factort   mmul(    (   R   sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR   $   s    2c         C  sŽ   |  j  \ } } t t j | ƒ | ƒ } | s1 d  St t j | ƒ | ƒ } | st | t k rŠ t t j | ƒ | ƒ rŠ t t j | ƒ | ƒ Sd  S(   N(	   R   R   R   t   integert   Nonet   negativet   Falset
   invertibleR   (   R   R   t   baset   expt   int_expt   non_negative(    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyt   MatPow2   s    c           s   t  ‡  f d †  |  j Dƒ ƒ S(   Nc         3  s'   |  ] } t  t j | ƒ ˆ  ƒ Vq d  S(   N(   R   R   R   (   R   R   (   R   (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pys	   <genexpr>A   s    (   R   R   (   R   R   (    (   R   sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyt   MatAdd?   s    c         C  sL   |  j  s t St t j |  ƒ | ƒ r) t St j |  ƒ t | ƒ k rH t Sd  S(   N(   t	   is_squareR(   R   R   R    R   R   R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyt   MatrixSymbolC   s    	c         C  s   t  t j |  ƒ | ƒ S(   N(   R   R   t   square(   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyt
   ZeroMatrixN   s    c         C  s   t  t j |  j ƒ | ƒ S(   N(   R   R   R   R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyt	   TransposeR   s    c         C  sF   t  t j |  ƒ | ƒ r t S|  j s) d  St  t j |  j ƒ | ƒ Sd  S(   N(   R   R   R    R   t   on_diagR&   R   t   parent(   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyt   MatrixSliceX   s
    	(   R   R   R   R   R   R.   R/   R1   R3   R4   t   InverseR7   R   t
   AlwaysTruet   Identity(    (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR      s   t   AskInvertibleHandlerc           B  s“   e  Z d  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e e j	 ƒ g d \ Z
 Z e e j ƒ Z e d „  ƒ Z e d „  ƒ Z RS(   s&   
    Handler for key 'invertible'
    c           s\   |  j  ƒ  \ } } t ‡  f d †  | j Dƒ ƒ r5 t St ‡  f d †  | j Dƒ ƒ rX t Sd  S(   Nc         3  s'   |  ] } t  t j | ƒ ˆ  ƒ Vq d  S(   N(   R   R   R)   (   R   R   (   R   (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pys	   <genexpr>n   s    c         3  s-   |  ]# } t  t j | ƒ ˆ  ƒ t k Vq d  S(   N(   R   R   R)   R(   (   R   R   (   R   (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pys	   <genexpr>p   s   (   R   R   R   R   t   anyR(   (   R   R   R#   R$   (    (   R   sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR   k   s    c         C  sZ   |  j  \ } } t t j | ƒ | ƒ } | s1 d  S| j t k rV t t j | ƒ | ƒ Sd  S(   N(   R   R   R   R%   R&   t   is_negativeR(   R)   (   R   R   R*   R+   R,   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR.   t   s    c         C  s   d  S(   N(   R&   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR/      s    c         C  s0   |  j  s t St j |  ƒ t | ƒ k r, t Sd  S(   N(   R0   R(   R   R)   R   R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR1   ƒ   s    	i   c         C  s   t  t j |  j ƒ | ƒ S(   N(   R   R   R)   R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR4   Ž   s    c         C  s*   |  j  s d  St t j |  j ƒ | ƒ Sd  S(   N(   R5   R&   R   R   R)   R6   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR7   ’   s    	(   R   R   R   R   R   R.   R/   R1   R   R9   R:   R8   t   AlwaysFalseR3   R4   R7   (    (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR;   f   s   	t   AskOrthogonalHandlerc           B  s­   e  Z d  Z e j Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z	 e d „  ƒ Z
 e e j ƒ Z e e j ƒ Z e d „  ƒ Z e Z e d „  ƒ Z e e e e j ƒ ƒ Z RS(   s&   
    Handler for key 'orthogonal'
    c           sh   |  j  ƒ  \ } } t ‡  f d †  | j Dƒ ƒ rA | d k rA t St ‡  f d †  | j Dƒ ƒ rd t Sd  S(   Nc         3  s'   |  ] } t  t j | ƒ ˆ  ƒ Vq d  S(   N(   R   R   t
   orthogonal(   R   R   (   R   (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pys	   <genexpr>¢   s    i   c         3  s-   |  ]# } t  t j | ƒ ˆ  ƒ t k Vq d  S(   N(   R   R   R)   R(   (   R   R   (   R   (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pys	   <genexpr>¥   s   (   R   R   R   R   R<   R(   (   R   R   R#   R$   (    (   R   sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR   Ÿ   s    c         C  sG   |  j  \ } } t t j | ƒ | ƒ } | rC t t j | ƒ | ƒ Sd  S(   N(   R   R   R   R%   R@   R&   (   R   R   R*   R+   R,   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR.   ©   s
    c         C  s<   t  |  j ƒ d k r8 t t j |  j d ƒ | ƒ r8 t Sd  S(   Ni   i    (   R!   R   R   R   R@   R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR/   ²   s    c         C  sO   |  j  s( t t j |  ƒ | ƒ t k r, t St j |  ƒ t | ƒ k rK t Sd  S(   N(   R0   R   R   R)   R(   R@   R   R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR1   ¸   s
    
c         C  s   t  t j |  j ƒ | ƒ S(   N(   R   R   R@   R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR4   Ä   s    c         C  s*   |  j  s d  St t j |  j ƒ | ƒ Sd  S(   N(   R5   R&   R   R   R@   R6   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR7   Ê   s    	(   R   R   R   R   R@   R   R   R   R.   R/   R1   R   R9   R:   R>   R3   R4   R8   R7   R   R   t   Factorization(    (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR?   ™   s   	
	t   AskUnitaryHandlerc           B  s­   e  Z d  Z e j Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z	 e d „  ƒ Z
 e
 Z e d „  ƒ Z e d „  ƒ Z e e e e j ƒ ƒ Z e e j ƒ Z e e j ƒ Z RS(   s#   
    Handler for key 'unitary'
    c           sn   |  j  ƒ  \ } } t ‡  f d †  | j Dƒ ƒ rG t | ƒ d k rG t St ‡  f d †  | j Dƒ ƒ rj t Sd  S(   Nc         3  s'   |  ] } t  t j | ƒ ˆ  ƒ Vq d  S(   N(   R   R   t   unitary(   R   R   (   R   (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pys	   <genexpr>Ü   s    i   c         3  s-   |  ]# } t  t j | ƒ ˆ  ƒ t k Vq d  S(   N(   R   R   R)   R(   (   R   R   (   R   (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pys	   <genexpr>ß   s   (   R   R   R   t   absR   R<   R(   (   R   R   R#   R$   (    (   R   sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR   Ù   s    c         C  sG   |  j  \ } } t t j | ƒ | ƒ } | rC t t j | ƒ | ƒ Sd  S(   N(   R   R   R   R%   RC   R&   (   R   R   R*   R+   R,   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR.   ã   s
    c         C  sO   |  j  s( t t j |  ƒ | ƒ t k r, t St j |  ƒ t | ƒ k rK t Sd  S(   N(   R0   R   R   R)   R(   RC   R   R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR1   ì   s
    
c         C  s   t  t j |  j ƒ | ƒ S(   N(   R   R   RC   R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR4   ô   s    c         C  s*   |  j  s d  St t j |  j ƒ | ƒ Sd  S(   N(   R5   R&   R   R   RC   R6   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR7   ú   s    	c         C  s   t  S(   N(   R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyt   DFT  s    (   R   R   R   R   RC   R   R   R   R.   R1   R4   R8   R7   RE   R   R   RA   R   R9   R:   R>   R3   (    (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyRB   Ó   s   	
	t   AskFullRankHandlerc           B  sn   e  Z d  Z e d „  ƒ Z e d „  ƒ Z e e j ƒ Z e e j	 ƒ Z
 e d „  ƒ Z e Z e d „  ƒ Z RS(   s$   
    Handler for key 'fullrank'
    c           s'   t  ‡  f d †  |  j Dƒ ƒ r# t Sd  S(   Nc         3  s'   |  ] } t  t j | ƒ ˆ  ƒ Vq d  S(   N(   R   R   t   fullrank(   R   R   (   R   (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pys	   <genexpr>  s    (   R   R   R   (   R   R   (    (   R   sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR     s    c         C  s`   |  j  \ } } t t j | ƒ | ƒ } | r\ t t j | ƒ | ƒ r\ t t j | ƒ | ƒ Sd  S(   N(   R   R   R   R%   R'   RG   R&   (   R   R   R*   R+   R,   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR.     s
    c         C  s   t  t j |  j ƒ | ƒ S(   N(   R   R   RG   R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR4   "  s    c         C  s#   t  t j |  j ƒ | ƒ r t Sd  S(   N(   R   R   R@   R6   R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR7   (  s    (   R   R   R   R   R   R.   R   R9   R:   R>   R3   R4   R8   R7   (    (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyRF     s   	t   AskPositiveDefiniteHandlerc           B  sŒ   e  Z d  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e e j	 ƒ Z
 e e j ƒ Z e d „  ƒ Z e Z e d „  ƒ Z RS(   s-   
    Handler for key 'positive_definite'
    c           s¼   |  j  ƒ  \ } } t ‡  f d †  | j Dƒ ƒ rA | d k rA t St | j ƒ d k r¸ | j d | j d j k r¸ t t j | j d ƒ ˆ  ƒ r¸ t t j	 t
 | j d d !Œ  ƒ ˆ  ƒ Sd  S(   Nc         3  s'   |  ] } t  t j | ƒ ˆ  ƒ Vq d  S(   N(   R   R   t   positive_definite(   R   R   (   R   (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pys	   <genexpr>5  s   i    i   iÿÿÿÿi   (   R   R   R   R   R!   R"   R   R   RG   RI   R   (   R   R   R#   R$   (    (   R   sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR   2  s    	c         C  s'   t  t j |  j d ƒ | ƒ r# t Sd  S(   Ni    (   R   R   RI   R   R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR.   >  s    c           s'   t  ‡  f d †  |  j Dƒ ƒ r# t Sd  S(   Nc         3  s'   |  ] } t  t j | ƒ ˆ  ƒ Vq d  S(   N(   R   R   RI   (   R   R   (   R   (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pys	   <genexpr>F  s   (   R   R   R   (   R   R   (    (   R   sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR/   D  s    c         C  s0   |  j  s t St j |  ƒ t | ƒ k r, t Sd  S(   N(   R0   R(   R   RI   R   R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR1   J  s    	c         C  s   t  t j |  j ƒ | ƒ S(   N(   R   R   RI   R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR4   U  s    c         C  s*   |  j  s d  St t j |  j ƒ | ƒ Sd  S(   N(   R5   R&   R   R   RI   R6   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR7   [  s    	(   R   R   R   R   R   R.   R/   R1   R   R9   R:   R>   R3   R4   R8   R7   (    (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyRH   -  s   t   AskUpperTriangularHandlerc           B  s«   e  Z d  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e e j	 ƒ g d \ Z
 Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e e e e j ƒ ƒ Z RS(	   s,   
    Handler for key 'upper_triangular'
    c           s6   |  j  ƒ  \ } } t ‡  f d †  | Dƒ ƒ r2 t Sd  S(   Nc         3  s'   |  ] } t  t j | ƒ ˆ  ƒ Vq d  S(   N(   R   R   t   upper_triangular(   R   t   m(   R   (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pys	   <genexpr>j  s    (   t   as_coeff_matricesR   R   (   R   R   R#   t   matrices(    (   R   sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR   g  s    c           s'   t  ‡  f d †  |  j Dƒ ƒ r# t Sd  S(   Nc         3  s'   |  ] } t  t j | ƒ ˆ  ƒ Vq d  S(   N(   R   R   RK   (   R   R   (   R   (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pys	   <genexpr>o  s    (   R   R   R   (   R   R   (    (   R   sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR/   m  s    c         C  sŽ   |  j  \ } } t t j | ƒ | ƒ } | s1 d  St t j | ƒ | ƒ } | st | t k rŠ t t j | ƒ | ƒ rŠ t t j | ƒ | ƒ Sd  S(   N(	   R   R   R   R%   R&   R'   R(   R)   RK   (   R   R   R*   R+   R,   R-   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR.   r  s    c         C  s#   t  j |  ƒ t | ƒ k r t Sd  S(   N(   R   RK   R   R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR1     s    i   c         C  s   t  t j |  j ƒ | ƒ S(   N(   R   R   t   lower_triangularR   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR4   †  s    c         C  s   t  t j |  j ƒ | ƒ S(   N(   R   R   RK   R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR8   Š  s    c         C  s*   |  j  s d  St t j |  j ƒ | ƒ Sd  S(   N(   R5   R&   R   R   RK   R6   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR7   Ž  s    	(   R   R   R   R   R   R/   R.   R1   R   R9   R:   R3   R4   R8   R7   R   R   R   RK   RA   (    (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyRJ   b  s   t   AskLowerTriangularHandlerc           B  s«   e  Z d  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e e j	 ƒ g d \ Z
 Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e e e e j ƒ ƒ Z RS(	   s,   
    Handler for key 'lower_triangular'
    c           s6   |  j  ƒ  \ } } t ‡  f d †  | Dƒ ƒ r2 t Sd  S(   Nc         3  s'   |  ] } t  t j | ƒ ˆ  ƒ Vq d  S(   N(   R   R   RO   (   R   RL   (   R   (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pys	   <genexpr>Ÿ  s    (   RM   R   R   (   R   R   R#   RN   (    (   R   sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR   œ  s    c           s'   t  ‡  f d †  |  j Dƒ ƒ r# t Sd  S(   Nc         3  s'   |  ] } t  t j | ƒ ˆ  ƒ Vq d  S(   N(   R   R   RO   (   R   R   (   R   (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pys	   <genexpr>¤  s    (   R   R   R   (   R   R   (    (   R   sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR/   ¢  s    c         C  sŽ   |  j  \ } } t t j | ƒ | ƒ } | s1 d  St t j | ƒ | ƒ } | st | t k rŠ t t j | ƒ | ƒ rŠ t t j | ƒ | ƒ Sd  S(   N(	   R   R   R   R%   R&   R'   R(   R)   RO   (   R   R   R*   R+   R,   R-   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR.   §  s    c         C  s#   t  j |  ƒ t | ƒ k r t Sd  S(   N(   R   RO   R   R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR1   ´  s    i   c         C  s   t  t j |  j ƒ | ƒ S(   N(   R   R   RK   R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR4   »  s    c         C  s   t  t j |  j ƒ | ƒ S(   N(   R   R   RO   R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR8   ¿  s    c         C  s*   |  j  s d  St t j |  j ƒ | ƒ Sd  S(   N(   R5   R&   R   R   RO   R6   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR7   Ã  s    	(   R   R   R   R   R   R/   R.   R1   R   R9   R:   R3   R4   R8   R7   R   R   R   RO   RA   (    (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyRP   —  s   t   AskDiagonalHandlerc           B  sÉ   e  Z d  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e e	 j
 ƒ g d \ Z Z e d „  ƒ Z e d „  ƒ Z e d	 „  ƒ Z e d
 „  ƒ Z e e e e j ƒ ƒ Z RS(   s$   
    Handler for key 'diagonal'
    c         C  s   |  j  d k p |  j  d k S(   Ni    i   (   i    i    (   i   i   (   R   (   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyt   _is_empty_or_1x1Ñ  s    c           sI   t  j |  ƒ r t S|  j ƒ  \ } } t ‡  f d †  | Dƒ ƒ rE t Sd  S(   Nc         3  s'   |  ] } t  t j | ƒ ˆ  ƒ Vq d  S(   N(   R   R   R    (   R   RL   (   R   (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pys	   <genexpr>Ú  s    (   RQ   RR   R   RM   R   (   R   R   R#   RN   (    (   R   sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR   Õ  s
    c         C  sŽ   |  j  \ } } t t j | ƒ | ƒ } | s1 d  St t j | ƒ | ƒ } | st | t k rŠ t t j | ƒ | ƒ rŠ t t j | ƒ | ƒ Sd  S(   N(	   R   R   R   R%   R&   R'   R(   R)   R    (   R   R   R*   R+   R,   R-   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR.   Ý  s    c           s'   t  ‡  f d †  |  j Dƒ ƒ r# t Sd  S(   Nc         3  s'   |  ] } t  t j | ƒ ˆ  ƒ Vq d  S(   N(   R   R   R    (   R   R   (   R   (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pys	   <genexpr>ì  s    (   R   R   R   (   R   R   (    (   R   sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR/   ê  s    c         C  s6   t  j |  ƒ r t St j |  ƒ t | ƒ k r2 t Sd  S(   N(   RQ   RR   R   R   R    R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR1   ï  s    i   c         C  s   t  t j |  j ƒ | ƒ S(   N(   R   R   R    R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR4   ø  s    c         C  s   t  t j |  j ƒ | ƒ S(   N(   R   R   R    R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR8   ü  s    c         C  s=   t  j |  ƒ r t S|  j s  d  St t j |  j ƒ | ƒ Sd  S(   N(	   RQ   RR   R   R5   R&   R   R   R    R6   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR7      s
    	c         C  s   t  S(   N(   R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyt   DiagonalMatrix	  s    (   R   R   R   R   RR   R   R.   R/   R1   R   R9   R:   R3   R4   R8   R7   RS   R   R   R   R    RA   (    (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyRQ   Ì  s   	c           s    t  ‡  ‡ f d †  | j Dƒ ƒ S(   s    Block Matrix elements c         3  s$   |  ] } t  ˆ | ƒ ˆ  ƒ Vq d  S(   N(   R   (   R   t   b(   R   R   (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pys	   <genexpr>  s    (   R   t   blocks(   R   R   R   (    (   R   R   sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyt   BM_elements  s    c         C  s   t  |  | j ƒ | ƒ S(   s    Matrix Slice elements (   R   R6   (   R   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyt   MS_elements  s    c         C  s^   t  | j d „  ƒ } | t | t } } t t t | Œ  | | ƒ t t | Œ  | |  ƒ g ƒ S(   Nc         S  s   t  |  t ƒ S(   N(   t
   isinstanceR   (   t   x(    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyt   <lambda>  t    (   R
   R   R(   R   R	   R   R   (   t   matrix_predicatet   scalar_predicateR   R   t   dt   factorsRN   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyt   MatMul_elements  s
    t   AskIntegerElementsHandlerc           B  s©   e  Z e d  „  ƒ Z e d „  ƒ Z e g d \ Z Z Z Z e e	 j
 ƒ g d \ Z Z e e e e j e j ƒ ƒ Z e e e e j ƒ ƒ Z e e e e j ƒ ƒ Z RS(   c         C  s   t  |  | t j ƒ S(   N(   R   R   t   integer_elements(   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR/      s    c         C  sZ   |  j  \ } } t t j | ƒ | ƒ } | s1 d  S| j t k rV t t j | ƒ | ƒ Sd  S(   N(   R   R   R   R%   R&   R=   R(   Rb   (   R   R   R*   R+   R,   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR.   $  s    i   i   (   R   R   R   R/   R.   t   HadamardProductt   Determinantt   TraceR4   R   R9   R3   R:   R   R`   R   Rb   R%   R   RW   R7   RV   t   BlockMatrix(    (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyRa     s   t   AskRealElementsHandlerc           B  s   e  Z e d  „  ƒ Z e d „  ƒ Z e g d \ Z Z Z Z Z	 e e
 e e j e j ƒ ƒ Z e e
 e e j ƒ ƒ Z e e
 e e j ƒ ƒ Z RS(   c         C  s   t  |  | t j ƒ S(   N(   R   R   t   real_elements(   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR/   9  s    c         C  sŽ   |  j  \ } } t t j | ƒ | ƒ } | s1 d  St t j | ƒ | ƒ } | st | t k rŠ t t j | ƒ | ƒ rŠ t t j | ƒ | ƒ Sd  S(   N(	   R   R   R   R%   R&   R'   R(   R)   Rh   (   R   R   R*   R+   R,   R-   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR.   =  s    i   (   R   R   R   R/   R.   Rc   Rd   Re   R4   RA   R   R`   R   Rh   t   realR   RW   R7   RV   Rf   (    (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyRg   8  s   t   AskComplexElementsHandlerc           B  s¢   e  Z e d  „  ƒ Z e d „  ƒ Z e g d \ Z Z Z Z Z	 Z
 e e e e j e j ƒ ƒ Z e e e e j ƒ ƒ Z e e e e j ƒ ƒ Z e e j ƒ Z RS(   c         C  s   t  |  | t j ƒ S(   N(   R   R   t   complex_elements(   R   R   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR/   S  s    c         C  sŽ   |  j  \ } } t t j | ƒ | ƒ } | s1 d  St t j | ƒ | ƒ } | st | t k rŠ t t j | ƒ | ƒ rŠ t t j | ƒ | ƒ Sd  S(   N(	   R   R   R   R%   R&   R'   R(   R)   Rk   (   R   R   R*   R+   R,   R-   (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyR.   W  s    i   (   R   R   R   R/   R.   Rc   Rd   Re   R4   R8   RA   R   R`   R   Rk   t   complexR   RW   R7   RV   Rf   R   R9   RE   (    (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyRj   R  s   N((   R   t
   __future__R    R   t   sympy.logic.boolalgR   t   sympy.assumptionsR   R   t   sympy.assumptions.handlersR   R   t   sympy.matrices.expressionsR   R   t   sympy.core.logicR	   t   sympy.utilities.iterablesR
   t
   sympy.coreR   t	   functoolsR   R   R   R   R;   R?   RB   RF   RH   RJ   RP   RQ   RV   RW   R`   Ra   Rg   Rj   (    (    (    sB   lib/python2.7/site-packages/sympy/assumptions/handlers/matrices.pyt   <module>   s4   	
G3:8"555D			