
    MZd6                         d dl mZ d dlmZ d dlmZmZ d dlmZ d dl	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 dlmZ  G d deee      Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"y)    )I)symbols)_MinimalMatrix_CastableMatrix)MatrixReductions)raises)Matrixzeros)Symbol)Rational)sqrt)simplify)xc                       e Zd Zy)ReductionsOnlyMatrixN)__name__
__module____qualname__     F/usr/lib/python3/dist-packages/sympy/matrices/tests/test_reductions.pyr   r      s    r   r   c                     t        | | d       S )Nc                     t        | |k(        S N)intijs     r   <lambda>z eye_Reductions.<locals>.<lambda>   s    3qAv; r   r   ns    r   eye_Reductionsr#      s    1&>??r   c                     t        | | d       S )Nc                      y)Nr   r   r   s     r   r   z"zeros_Reductions.<locals>.<lambda>   s    r   r    r!   s    r   zeros_Reductionsr&      s    1n55r   c                  r   t        d      t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd	       t        t        fd
       t        t        fd       t        t        fd       t        t        fd       t        t        fd       j                  ddd      t	        g dg dg dg      k(  sJ j                  ddd      t	        g dg dg dg      k(  sJ j                  ddd      t	        g dg dg dg      k(  sJ j                  ddd      t	        g dg dg dg      k(  sJ j                  ddd      t	        g dg dg dg      k(  sJ j                  ddd      t	        g dg dg dg      k(  sJ j                  ddd      t	        g dg dg dg      k(  sJ j                  dddd      t	        g dg dg dg      k(  sJ j                  dddd      t	        g dg dg dg      k(  sJ j                  dddd       t	        g dg dg dg      k(  sJ t        d!ddgd"z        } | j                  ddd      t	        d!ddgd"z        k(  sJ | j                  ddd      t	        d!ddgd"z        k(  sJ | j                  dddd      t	        d!ddgd"z        k(  sJ y )#N   c                  &     j                  d      S Nabcelementary_row_opes   r   r   ztest_row_op.<locals>.<lambda>       q2259 r   c                  $     j                         S r   r,   r.   s   r   r   ztest_row_op.<locals>.<lambda>       q224 r   c                  ,     j                  ddd      S )Nn->kn   rowkr,   r.   s   r   r   ztest_row_op.<locals>.<lambda>       q227Q2G r   c                  ,     j                  ddd      S )Nr4   r5   r6   r,   r.   s   r   r   ztest_row_op.<locals>.<lambda>       q227a2H r   c                  ,     j                  ddd      S )Nn<->m   r5   row1row2r,   r.   s   r   r   ztest_row_op.<locals>.<lambda>       q2272K r   c                  ,     j                  ddd      S )Nr>   r5   r?   r@   r,   r.   s   r   r   ztest_row_op.<locals>.<lambda>    rC   r   c                  ,     j                  ddd      S )Nr>   r;   r?   r@   r,   r.   s   r   r   ztest_row_op.<locals>.<lambda>!       q227!2L r   c                  ,     j                  ddd      S )Nr>   r?   r;   r@   r,   r.   s   r   r   ztest_row_op.<locals>.<lambda>"       q2272L r   c                  .     j                  dddd      S Nn->n+kmr?   r5   rA   rB   r8   r,   r.   s   r   r   ztest_row_op.<locals>.<lambda>#       q22911PQ2R r   c                  .     j                  dddd      S )NrK   r5   r?   rL   r,   r.   s   r   r   ztest_row_op.<locals>.<lambda>$   rM   r   c                  .     j                  dddd      S )NrK   r;   r?   r5   rL   r,   r.   s   r   r   ztest_row_op.<locals>.<lambda>%       q2292AQR2S r   c                  .     j                  dddd      S )NrK   r?   r;   r5   rL   r,   r.   s   r   r   ztest_row_op.<locals>.<lambda>&       q22912QR2S r   c                  .     j                  dddd      S rJ   r,   r.   s   r   r   ztest_row_op.<locals>.<lambda>'   rM   r   r4   r   r5   r5   r   r   r   r?   r   r   r   r?   r?   r?   r   r   r   r5   r   r6   )rA   r8   r>   r@   )r7   rB   rK   )r?   r5   r   )r7   r8   rB   )rA   r8   rB         )r#   r   
ValueErrorr-   r	   r   ar/   s    @r   test_row_opr^         qA
:9:
:45
:GH
:HI
:KL
:KL
:LM
:LM
:RS
:RS
:ST
:ST
:RS w1-Iy8Y1ZZZZw1-Iy8Y1ZZZZwA3vy)U^>_7````wQ!4	9V_?`8aaaaw1-Iy8Y1ZZZZwQQ769iYbBc;ddddwAA6&)YXaAb:ccccy!Q2fiT]=^6____ya11=T]_hHiAjjjjyqAA>&)U^`iIjBkkkk 	QA3q5)Aw1-1qc!e1DDDDw1-1qc!e1DDDDy!Q2fQA3q56IIIIr   c                  r   t        d      t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd	       t        t        fd
       t        t        fd       t        t        fd       t        t        fd       t        t        fd       j                  ddd      t	        g dg dg dg      k(  sJ j                  ddd      t	        g dg dg dg      k(  sJ j                  ddd      t	        g dg dg dg      k(  sJ j                  ddd      t	        g dg dg dg      k(  sJ j                  ddd      t	        g dg dg dg      k(  sJ j                  ddd      t	        g dg dg dg      k(  sJ j                  ddd      t	        g dg dg dg      k(  sJ j                  dddd      t	        g dg dg dg      k(  sJ j                  dddd      t	        g dg dg dg      k(  sJ j                  dddd       t	        g dg dg dg      k(  sJ t        d!ddgd"z        } | j                  ddd      t	        d!ddgd"z        k(  sJ | j                  ddd      t	        d!ddgd"z        k(  sJ | j                  dddd      t	        d!ddgd"z        k(  sJ y )#Nr(   c                  &     j                  d      S r*   elementary_col_opr.   s   r   r   ztest_col_op.<locals>.<lambda>?   r0   r   c                  $     j                         S r   rb   r.   s   r   r   ztest_col_op.<locals>.<lambda>@   r2   r   c                  ,     j                  ddd      S )Nr4   r5   colr8   rb   r.   s   r   r   ztest_col_op.<locals>.<lambda>A   r9   r   c                  ,     j                  ddd      S )Nr4   r;   r5   rf   rb   r.   s   r   r   ztest_col_op.<locals>.<lambda>B   r<   r   c                  ,     j                  ddd      S )Nr>   r?   r5   col1col2rb   r.   s   r   r   ztest_col_op.<locals>.<lambda>C   rC   r   c                  ,     j                  ddd      S )Nr>   r5   r?   rj   rb   r.   s   r   r   ztest_col_op.<locals>.<lambda>D   rC   r   c                  ,     j                  ddd      S )Nr>   r;   r?   rj   rb   r.   s   r   r   ztest_col_op.<locals>.<lambda>E   rF   r   c                  ,     j                  ddd      S )Nr>   r?   r;   rj   rb   r.   s   r   r   ztest_col_op.<locals>.<lambda>F   rH   r   c                  .     j                  dddd      S NrK   r?   r5   rk   rl   r8   rb   r.   s   r   r   ztest_col_op.<locals>.<lambda>G   rM   r   c                  .     j                  dddd      S )NrK   r5   r?   rr   rb   r.   s   r   r   ztest_col_op.<locals>.<lambda>H   rM   r   c                  .     j                  dddd      S )NrK   r;   r?   r5   rr   rb   r.   s   r   r   ztest_col_op.<locals>.<lambda>I   rP   r   c                  .     j                  dddd      S )NrK   r?   r;   r5   rr   rb   r.   s   r   r   ztest_col_op.<locals>.<lambda>J   rR   r   c                  .     j                  dddd      S rq   rb   r.   s   r   r   ztest_col_op.<locals>.<lambda>K   rM   r   r4   r   r5   rT   rU   rV   r?   rW   rX   rf   )rk   r8   r>   rj   )rg   rl   rK   )r5   r?   r   )rg   r8   rl   )rk   r8   rl   rY   rZ   )r#   r   r[   rc   r	   r   r\   s    @r   test_col_oprw   <   r_   r   c                     t        d      } t        d      }| j                  sJ |j                  sJ t        ddg       }|j                  sJ t        ddg d      }|j                  sJ t        ddg d      }|j                  rJ t	        d      }t        dd|ddg      }|j                  sJ t        dd||dg      }|j                  rJ t        ddg d      }|j                  rJ y )	Nr(   r   rY   )r(   rY   r?   r   r   rZ   )r   r   rZ   r(   rY   r?   r   r?   	r   r   r   r?   rY   r(   r   r   r   )r&   r#   
is_echelonr   r   )zroidentr]   r   s       r   test_is_echelonr}   `   s    
1
C1E>>>Q2&A<<<Q#56A<<<Q#56A||sAQAq!9-A<<<QAq!9-A||Q#>?A|||r   c                     t        d      } t        d      }| j                         | k(  sJ |j                         |k(  sJ t        ddg       } | j                         | k(  sJ t        dddg      } | j                         | k(  sJ fd}t        ddg d      } t	        dgdgdgg      g}t        | j                        D cg c]  }| |d d f    }}| j                         j                  sJ  || ||       t        ddg d      } g }t        | j                        D cg c]  }| |d d f    }}| j                         j                  sJ  || ||       t        ddg d	      } t	        t        d
d      gdgdgg      t	        t        dd      gdgdgg      g}t        | j                        D cg c]  }| |d d f    }}| j                         j                  sJ  || ||       t        ddg d      } t	        dgdgdgg      g}t        | j                        D cg c]  }| |d d f    }}| j                         j                  sJ  || ||       t        ddg d      } t	        dgdgdgg      t	        dgd
gdgg      g}t        | j                        D cg c]  }| |d d f    }}| j                         j                  sJ  || ||       t        ddg d      } t	        d
gdgdgg      g}t        | j                        D cg c]  }| |d d f    }}| j                         j                  sJ  || ||       y c c}w c c}w c c}w c c}w c c}w c c}w )Nr(   r   r?   r5   c                     |D ]  }t        d |z  D              rJ  |D ]:  }t        d |D              rt        d |j                         z  D              s:J  y )Nc              3   4   K   | ]  }|j                     y wr   is_zero.0ts     r   	<genexpr>zCtest_echelon_form.<locals>.verify_row_null_space.<locals>.<genexpr>   s     6Qqyy6   c              3   4   K   | ]  }|j                     y wr   r   r   s     r   r   zCtest_echelon_form.<locals>.verify_row_null_space.<locals>.<genexpr>   s     ,Qqyy,r   c              3   4   K   | ]  }|j                     y wr   r   r   s     r   r   zCtest_echelon_form.<locals>.verify_row_null_space.<locals>.<genexpr>   s     JQqyyJr   )all	transpose)matrowsnullsv	a_echelons       r   verify_row_null_spacez0test_echelon_form.<locals>.verify_row_null_space   sh     	7A6)A+6666	7 	KA,!,,J)AKKM2IJJJJ	Kr   	r?   rY   r(      r5   rZ         	   )	r?   rY   r(   r   r5   rZ   r   r   r   )	rY   r?   r(   r   r   r   rY   r?   r(   rY   )	rY   r?   r(   r   r   r   r?   r?   r(   )	r   r(   r(   r   rY   rY   r   r?   r?   )rY   rY   r(   r(   r(   r   )	r&   r#   echelon_formr   r	   ranger   rz   r   )r]   r/   r   r   r   r   r   s         @r   test_echelon_formr   {   s   
 	AqA >>q   >>q   Q2&A>>q   QA3'A>>q   K 	Q#>?ATTT  E #166]+AadG+D+ I!T5) 	Q#>?AE"166]+AadG+D+ I!T5)Q#>?Ar1oVV  r1oVV 	E #166]+AadG+D+ I!T5) 	Q#>?AVVV  E #166]+AadG+D+ I!T5)Q#>?ASSS  TTT 	E #166]+AadG+D+ I!T5)Q#56ATSS  E #166]+AadG+D+ I!T5)y , , , , , ,s$   M&M"<M'.M,0M1"M6c                     t        ddg       } | j                  d      | k(  sJ t        dddg      } t        dddg      }| j                  d      |j                  d      cxk(  r| k(  sJ  J t        ddg d      }|j                  d      t        dgdgdgg      k(  sJ t        ddg d      }|j                  d      t        g dg      k(  sJ t        ddg d      }|j                  d      t        g d	g d
g dg      k(  sJ t        ddg d      }t        ddg d      }t        ddg d      }t        ddg d      }|j                  d      |j                  d      cxk(  r2|j                  d      cxk(  r|j                  d      cxk(  r|k(  sJ  J t        d      } t	        d      }| j                  d      | k(  sJ |j                  d      |k(  sJ t        g dg dg dg dg      }|j                         \  }}|t        g dg dg dg dg      k(  sJ |dk(  sJ t        t        dd      t        dd      ddgg dg dg dg      }|j                  d      t        dddt        dd      gdddt        d d      gdddt        d!d      gg d"g      k(  sJ t        d#      }t        dd|ddt        |      |dg      }t        |j                  d      ddt        |      | dz   z  |t        dd      z   |z   z  dddt        |      |z   dz   z  g      D ]  \  }	}
t        |	|
z
        j                  rJ  y )$Nr   F)pivotsr?   r5   r(   )r?   rY   r(   r   )r?   r   r   r   r?   rY   )r   r   r   )	r?   rY   r(   r?   rY   r(   r?   rY   r(   )	r?   rY   r(   r   r   r   r   r   r   ry   )	r   r   r   r   r   r   r?   rY   r(   )r   r   r?   rY   rY   r;   r(   )r   r5   rY   rY   r?   ir5   )r   r   r   r   r   r   r;   )r   r5   r   r   r   r?   r   )r?   r;   r   r   r?   r?   r   )r   r   r?   r   r   r   r?   )r   r   r   r?   r?   r   r?   )r   r   r   r   r   r   r   )r   rY   r(      rY   )r   r5   rZ   r   )r   r   
      )            i   r;      r   r   r   r   r   )r   rrefr	   r#   r&   r   r   r   zipr   r   )r/   r]   bcdzr   pivot_offsetsr   r   r   s              r   	test_rrefr      s   Q2&A6661$$$QA3'AQA3'A6661666#7<1<<<<<Q9-A6666A3aS/#::::Q9-A66669+#6666Q#>?A6666%/%/%/+1 $2 2 2 2
 	Q#>?AQ#>?AQ#>?AQ#>?A666FF%F &FF%F & FF%F & %&& & & & &
 	qAA6661$$$6661$$$''''	) 	*A
 C&----	/ 0 0 0 0
 I%%%x2!QA!L0002 	3A 6666*+Q8C3E)F*+QHR4E)F*+Q8C3E)F);	+= $> > > > 	sAQAq!T!Wa#;<AAFF%F(47QBF#a!Q&7%7!%;<1aa1q)+, '1 A&&&&'r   c            	         t        g dg dg dg dg dg dg      j                  ddd	
      } j                  dd	dd      }j                  dd	d      }| d	d d f   t        g dg      k(  sJ |d	d d f   t        g dg      k(  sJ |d	d d f   t        g dg      k(  sJ t        t        fd       t        t        fd       t        t        fd       y )N)r(   r   r   r?   )r   r   r   r(   )r   rY   r?   r(   )rY   r(   r   r   )r   r(   r(   r;   )r   r   r   rZ   r>   rY   r5   r@   rK   r(   rL   r4   r6   )r   r(   r   r   )      r   r   c                  ,     j                  ddd      S )Nr>   rY   rZ   r@   r,   Cs   r   r   z"test_issue_17827.<locals>.<lambda>+  rC   r   c                  ,     j                  ddd      S )Nr4   r   rY   r6   r,   r   s   r   r   z"test_issue_17827.<locals>.<lambda>,  r9   r   c                  .     j                  dddd      S )NrK   r   r5   rY   rL   r,   r   s   r   r   z"test_issue_17827.<locals>.<lambda>-  rP   r   )r	   r-   r   r[   )DEFr   s      @r   test_issue_17827r     s     	A 	
G!!4A	IAA<A	Ga0AQT7fl^,,-,QT7fm_--.-QT7fo.//0/
:KL
:GH
:STr   c                     t        ddgt        ddt        z  z
  gg      } | j                         dk(  sJ t        ddt        dd            }|j                         dk(  sJ t	        d      }|j                         dk(  sJ y )Nr?   rY   r(   r   r   )r	   r   rankr   r
   )mr"   ps      r   	test_rankr   /  st    AA!G%&A668q==q!U1b\"A668q==aA668q==r   c                     t        d      \  } }}}}}}}}}	}
}t        | || |
z  ||
z  dg||||
z  ||
z  dg||||
z  ||
z  dg||||
z  ||
z  dg||	d|z  |z  ||
z  z
  d|	z  |z  |	|
z  z
  dgg      }|j                         dk(  sJ y )Nz/a_x a_y b_x b_y c_x c_y d_x d_y e_x e_y t_0 t_1r   r?   rY   r   )r   r	   r   )axaybxbycxcydxdyexeyt0t1Ms                r   test_issue_11434r   7  s    AB 3BBBBBBRB2q)RB2q)RB2q)RB2q)R2b2b5!B$r'BrE/1=	? 	@A
 668q==r   c            
         t        d      \  } }t        d| z  dddgd| z  d| z  dz
  ddgdd| z  d| z  |z
  dz
  dgdd| |z   dgg      }t        dddd| dz  | | z
  z  z  gdddd| | | z
  z  z  gdddd| | z
  z  gg d	g      }d
}|j                         \  }}t        ||z
        t	        |j
                   k(  sJ ||k(  sJ y )Nz
nu, lambdar   r?   r   r(   r   rY   r   r   r   )r   r	   r   r   r
   shape)nulambAexpected_reducedexpected_pivotsreducedr   s          r   test_rank_regression_from_sor   A  s!    |$HBBA:B$2	A:QrTBrET>A#5:BIr:< 	=A 1aBED52:,>)?@ !1aArD52:,?@ !1aTEBJ@@B C  OffhOGV$w./5!''?BBB_$$$r   c                      t        g dg dg dg dg      } | t        j                  d      t        z  z
  }|j                         dk(  sJ |dz  j                         dk(  sJ |dz  j                         dk(  sJ y )N)r?   r?   r?   r   )r   r   r   r   )r   r   r   r   )r   r   rY   r?   r   r(   rY   )r	   eyer   r   )r   Bs     r   test_issue_15872r   U  sn    o~|LMA	FJJqMAA668q==qD;;=AqD;;=Ar   N)#sympy.core.numbersr   sympy.core.symbolr   sympy.matrices.commonr   r   sympy.matrices.matricesr   sympy.testing.pytestr   sympy.matricesr	   r
   r   r   (sympy.functions.elementary.miscellaneousr   sympy.simplify.simplifyr   	sympy.abcr   r   r#   r&   r^   rw   r}   r   r   r   r   r   r   r   r   r   r   <module>r      s|      % A 4 ' ( $ ' 9 , 	>?<L 	@6!JH!JH6\*~>'@U*%(r   