ó
~9­\c           @   s  d  d l  m Z m Z m Z m Z m Z m Z m Z m Z m	 Z	 m
 Z
 m Z d  d l m Z m Z m Z m Z m Z m Z d  d l m Z m Z d  d l m Z m Z m Z d  d l m Z d  d l m Z e d d e ƒ\ Z Z  Z! Z" Z# Z$ Z% e d	 e$ e$ ƒ Z& e d
 e$ e$ ƒ Z' e d e$ e$ ƒ Z( e d e$ e$ ƒ Z) e d e$ e$ ƒ Z* e d e$ e$ ƒ Z+ e e* e+ g g ƒ Z, e e* g e+ g g ƒ Z- d „  Z. d „  Z/ d „  Z0 d „  Z1 d „  Z2 d „  Z3 d „  Z4 d „  Z5 d „  Z6 d „  Z7 d „  Z8 d „  Z9 d „  Z: d S(   iÿÿÿÿ(   t   block_collapset	   bc_matmult   bc_block_plus_identt   BlockDiagMatrixt   BlockMatrixt   bc_distt	   bc_mataddt   bc_transposet   blockcutt   reblock_2x2t   deblock(   t   MatrixSymbolt   Identityt   Inverset   tracet	   Transposet   det(   t   Matrixt   ImmutableMatrix(   t   Tuplet   symbolst   Expr(   t   range(   t	   transposes   i:n, pt   integert   At   Bt   Ct   Dt   Gt   Hc           C   sL   t  t t t t ƒ t t t t t t t t g g ƒ k sH t ‚ d  S(   N(   R   R   t   b1t   b2R   R   t   AssertionError(    (    (    sP   lib/python2.7/site-packages/sympy/matrices/expressions/tests/test_blockmatrix.pyt   test_bc_matmul   s    c           C   sU   t  t t t g g ƒ t t t g g ƒ ƒ t t t t t g g ƒ k sQ t ‚ d  S(   N(   R   R   R   R   R!   (    (    (    sP   lib/python2.7/site-packages/sympy/matrices/expressions/tests/test_blockmatrix.pyt   test_bc_matadd   s    +c           C   s^   t  t t t t g t t g g ƒ ƒ ƒ t t j t j g t j t j g g ƒ k sZ t ‚ d  S(   N(	   R   R   R   R   R   R   R   t   TR!   (    (    (    sP   lib/python2.7/site-packages/sympy/matrices/expressions/tests/test_blockmatrix.pyt   test_bc_transpose   s    'c          C   sƒ   t  d t t ƒ }  t  d t t ƒ } t  d t t ƒ } t |  | | ƒ } t | | ƒ j t d |  d | d | ƒ ƒ s t ‚ d  S(   NR   R   R   i   (   R   t   nt   mt   lR   R   t   equalsR!   (   R   R   R   t   X(    (    sP   lib/python2.7/site-packages/sympy/matrices/expressions/tests/test_blockmatrix.pyt   test_bc_dist_diag    s
    c          C   s©   t  d t t ƒ }  t  d t t ƒ } t  d t t ƒ } t  d t t ƒ } t |  | g | | g g ƒ } t | t t t ƒ ƒ t t t ƒ t t ƒ ƒ | k s¥ t ‚ d  S(   NR   R   R   R   (   R   R&   R'   R   R   R   R   R!   (   R   R   R   R   R*   (    (    sP   lib/python2.7/site-packages/sympy/matrices/expressions/tests/test_blockmatrix.pyt   test_block_plus_ident(   s    c          C   sî  t  d t t ƒ }  t  d t t ƒ } t  d t t ƒ } t  d t t ƒ } t  d t t t ƒ } t  d t t t t ƒ } t t |  | g | | g g ƒ ƒ } | j | j	 Œ  | k sº t
 ‚ t  d t t ƒ } t |  d | ƒ |  d | k sô t
 ‚ t  d	 t t ƒ } t | j |  | ƒ | j |  | k s4t
 ‚ | j t t t t f k sWt
 ‚ | j d k slt
 ‚ t | ƒ t t |  j | j g | j | j g g ƒ ƒ k s®t
 ‚ t | ƒ j | j d  d  d
 … k sÙt
 ‚ | | j sìt
 ‚ | j | ƒ j st
 ‚ | | j t t t f k s't
 ‚ | | j s:t
 ‚ | j | ƒ j sRt
 ‚ | | j | j k snt
 ‚ t  d t d ƒ } t  d	 t d ƒ } t t | g | g g ƒ ƒ }	 | |	 j t t d f k sÓt
 ‚ t | |	 ƒ j d |  | | | k st
 ‚ t | |	 ƒ j d | | | | k s1t
 ‚ t t | |	 ƒ ƒ t t | |	 ƒ ƒ k sct
 ‚ t t | |	 d | ƒ ƒ t | |	 ƒ t d | ƒ f k s¦t
 ‚ t |  g g ƒ }
 t  d |  j Œ } t |
 | ƒ |  | k sêt
 ‚ d  S(   NR   R   R   R   t   Mt   Nt   Ei   t   Fiÿÿÿÿi   i    t   Z(   i   i   (   i    i    (   i   i    (   R   R&   R'   t   kR(   t   pR   R   t	   __class__t   argsR!   R    R$   t   shapet
   blockshapeR   t	   is_MatMult	   _blockmult	   is_MatAddt	   _blockaddt   blocksR   (   R   R   R   R   R-   R.   R*   R/   R0   t   Yt   AbR1   (    (    sP   lib/python2.7/site-packages/sympy/matrices/expressions/tests/test_blockmatrix.pyt   test_BlockMatrix1   sD    $(.#B+##//2)c          C   s{   g  d D] }  t  |  d d ƒ ^ q \ } } } } t | | g | | g g ƒ } t | ƒ t | ƒ t | ƒ k sw t ‚ d  S(   Nt   ABCDi   (   R   R   R   R!   (   t   sR   R   R   R   R*   (    (    sP   lib/python2.7/site-packages/sympy/matrices/expressions/tests/test_blockmatrix.pyt   test_BlockMatrix_tracec   s    1c       
   C   s×   g  d D] }  t  |  d d ƒ ^ q \ } } } } t | | g | | g g ƒ } d d l m } m } | | j | ƒ ƒ < t | ƒ t | ƒ t | | | j | ƒ k s² t ‚ Wd  QXt	 t | ƒ t
 ƒ sÓ t ‚ d  S(   NR@   i   iÿÿÿÿ(   t   assumingt   Q(   R   R   t   sympyRC   RD   t
   invertibleR   t   IR!   t
   isinstanceR   (   RA   R   R   R   R   R*   RC   RD   (    (    sP   lib/python2.7/site-packages/sympy/matrices/expressions/tests/test_blockmatrix.pyt   test_BlockMatrix_Determinanth   s    1=c          C   sT  t  d t t ƒ }  t  d t t ƒ } t  d t t ƒ } t  d t t ƒ } t |  | g | | g g ƒ } t |  g g ƒ } | j s‡ t ‚ t | t t t ƒ ƒ t |  t t ƒ | g | | t t ƒ g g ƒ k sÙ t ‚ | t t t ƒ } | t  d t t t t ƒ j st ‚ | t  d t t t t ƒ j	 s;t ‚ t | j
 ƒ |  j
 k sYt ‚ t | j ƒ  ƒ t | | j
 | |  j
 |  j
 | | | |  j
 | j
 g | | |  j
 | j
 | |  j
 | | |  j
 | j
 g g ƒ k sñt ‚ t | j ƒ  t ƒ st ‚ | j st ‚ t t t ƒ | g | | g g ƒ } | j sPt ‚ d  S(   NR   R   R   R   RD   (   R   R&   R'   R   t	   is_squareR!   R    R   R:   R8   RG   t   inverseRH   R   t   is_Identity(   R   R   R   R   R*   R=   RD   R1   (    (    sP   lib/python2.7/site-packages/sympy/matrices/expressions/tests/test_blockmatrix.pyt   test_squareBlockMatrixq   s(    ;'';K$c             sª  t  d t t ƒ ‰  t  d t t ƒ ‰ t  d t t ƒ ‰ t  d t t t t t t ƒ }  t ˆ  ˆ ˆ ƒ ‰ t ˆ  d ˆ d ˆ ƒ } ˆ j d
 ˆ k s t ‚ ˆ j t t t t t t f k sÈ t ‚ t ‡  ‡ ‡ ‡ f d †  t	 d ƒ Dƒ ƒ sù t ‚ ˆ j
 ˆ j Œ  ˆ k st ‚ t t ˆ j ˆ ƒ t ƒ s9t ‚ t ˆ ˆ ƒ t ˆ  ˆ  ˆ ˆ ˆ ˆ ƒ k smt ‚ t ˆ ˆ ƒ t ˆ  ˆ  ˆ ˆ ˆ ˆ ƒ k s¡t ‚ t ˆ ˆ ƒ j t d ˆ  d ˆ d ˆ ƒ ƒ sØt ‚ t ˆ | ƒ t ˆ  ˆ  d ˆ ˆ d ˆ ˆ ƒ k st ‚ t ˆ | ƒ t d ˆ  d ˆ d	 ˆ ƒ k sHt ‚ ˆ d |  j s_t ‚ ˆ d |  j svt ‚ ˆ j |  ƒ j sŽt ‚ ˆ j |  ƒ j s¦t ‚ d  S(   NR   R   R   R-   i   i   i   c         3   sf   |  ]\ } t  d  ƒ D]I } | | k r; ˆ j | | f j n ˆ j | | f ˆ  ˆ ˆ g k Vq q d S(   i   N(   R   R<   t   is_ZeroMatrix(   t   .0t   it   j(   R   R   R   R*   (    sP   lib/python2.7/site-packages/sympy/matrices/expressions/tests/test_blockmatrix.pys	   <genexpr>š   s   i   (   i   i   (   R   R&   R'   R(   R   R<   R!   R6   t   allR   R4   R5   RH   R    RG   R   R   R)   R8   R:   R9   R;   (   R-   R=   (    (   R   R   R   R*   sP   lib/python2.7/site-packages/sympy/matrices/expressions/tests/test_blockmatrix.pyt   test_BlockDiagMatrix   s*    "+"447<4c          C   sŽ  t  d t t ƒ }  t |  t d t d f t d t d f ƒ } |  t t f | t t f k sf t ‚ | t |  d  t d … d  t d … f |  d  t d … t d d  … f g |  t d d  … d  t d … f |  t d d  … t d d  … f g g ƒ k st ‚ t d d t	 d ƒ ƒ } t | d d	 ƒ } | t | ƒ k sJt ‚ t | d
 d ƒ } t | j
 d ƒ t d d g g ƒ k sŠt ‚ d  S(   NR   i   i   i   i   i   i    (   i   i   (   i   i   (   i   i   (   i   i   (   i    i   (   R   R&   R'   R   RP   RQ   R!   R   R   R   R<   (   R   R   R-   (    (    sP   lib/python2.7/site-packages/sympy/matrices/expressions/tests/test_blockmatrix.pyt   test_blockcut®   s    .&KWc       	   C   sÊ   t  g  t d ƒ D]; }  g  t d ƒ D]" } t d |  | f d d ƒ ^ q# ^ q ƒ } | j j d k sl t ‚ t | ƒ } | j j d k s t ‚ | j | j k s¨ t ‚ | j ƒ  | j ƒ  k sÆ t ‚ d  S(   Ni   s   A_%d%di   (   i   i   (   i   i   (   R   R   R   R<   R6   R!   R	   t   as_explicit(   RP   RQ   R   t   BB(    (    sP   lib/python2.7/site-packages/sympy/matrices/expressions/tests/test_blockmatrix.pyt   test_reblock_2x2¼   s    Nc       	   C   sv   t  g  t d ƒ D]; }  g  t d ƒ D]" } t d |  | f t t ƒ ^ q# ^ q ƒ } t t | ƒ ƒ | k sr t ‚ d  S(   Ni   s   A_%d%d(   R   R   R   R&   R
   R	   R!   (   RP   RQ   R   (    (    sP   lib/python2.7/site-packages/sympy/matrices/expressions/tests/test_blockmatrix.pyt   test_deblockÈ   s    NN(;   t&   sympy.matrices.expressions.blockmatrixR    R   R   R   R   R   R   R   R   R	   R
   t   sympy.matrices.expressionsR   R   R   R   R   R   t   sympy.matricesR   R   t
   sympy.coreR   R   R   t   sympy.core.compatibilityR   t   sympy.functionsR   t   TrueRP   RQ   R2   R(   R'   R&   R3   R   R   R   R   R   R   R   R    R"   R#   R%   R+   R,   R?   RB   RI   RM   RS   RT   RW   RX   (    (    (    sP   lib/python2.7/site-packages/sympy/matrices/expressions/tests/test_blockmatrix.pyt   <module>   s6   L.'							2							