o
    ohS8                     @   s  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 d dlmZ d d	lmZmZmZmZ d d
lmZmZmZ d dlmZmZ d dlmZ dd Zdd Z dd Z!dd Z"dd Z#dd Z$dd Z%dd Z&dd Z'dd  Z(d!d" Z)ed#d$ Z*d%S )&    )
expand_mul)IRational)S)Symbol)sqrt)Abs)simplify)NonSquareMatrixError)MatrixzeroseyeSparseMatrix)xyz)raisesslow)allclosec                     sL  t g dg dg dg dg} |  \}}}|jsJ |js!J || |d|  tdks1J t g dg dg d	g d
g} |  \}}}|jsMJ |jsRJ || |d|  tdksbJ t g dg dg dg dg} | jdd\}}}|jsJ |jsJ || |d|  tddksJ t g dg dg dg} | jdd\}}}|jsJ |jsJ || |d|  tdksJ t dtdfdtdftdtff   \}}}|jsJ |jsJ || |d  tdksJ t d}|jdu sJ |jdu sJ t d}|jdu sJ |jdu sJ t g dg dg dg  	 \}}}}|  ||
  | ksCJ t g dg dg dg dg  	 \}}}}|  ||
  | ksjJ t g d g d!g d"g  	 \}}}}|  ||
  | ksJ t g dg dg dg tt fd#d$ d S )%N)r            )r   r         )   r   r   r   )   r   r   backwardr   )r   r   r   r   )r   r   r   r   )   r   r   r   )ir   r   r   r   r   r   r   r   r   r   r   	   )
         F	rankcheckr   )r   r   r   r   r   r   )r   r   r   r   r   r   T)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   r   c                      s    j ddS )NTr&   )LUdecomposition_Simple Mr-   |/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/sympy/matrices/tests/test_decompositions.py<lambda>b       ztest_LUdecomp.<locals>.<lambda>)r   LUdecompositionis_loweris_upperpermute_rowsr   r   r   r   LUdecompositionFFinvr   
ValueError)testmatLUpmLmUPDeer-   r.   r0   test_LUdecomp   s   

 

 

"

  

 rB   c                  C   s  t ddgddgg} |  \}}}|| |j | ksJ |j| t|jks(J |j| t|jks4J t ddgg}| \}}}|| |j |ksMJ |j| t|jksYJ |j| t|jkseJ t g dg dg dg dg}| \}}}|| |j |ksJ |j| t|jksJ |j| t|jksJ t tddtdgdtdd	gg}| \}}}t|j| t|jksJ t|j| t|jksJ t|| |j |ksJ d S )
Nr   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   singular_value_decompositionTr   colsr   r   r	   )Ar<   r   VBCDr-   r-   r0   "test_singular_value_decompositionDd   s2   $rK   c               	   C   sv  t ddgddgg} |  \}}t}|t d|dd |dd |dd |dd  gdd|dd  |d d |dd |dd  ggksKJ |t d|dd dd|dd  gd|dd |dd ggksnJ || | ksvJ |j| tdksJ t g dg d	g d
g} |  \}}|j| t|jksJ |jsJ | || ksJ t g dg dg dg} |  \}}|j| t|jksJ |jsJ | || ksJ td}t |g} |  \}}|t |t| gksJ |t t|gksJ t |dgd|gg} |  \}}||t| t ddgddgg ks&J |t|t ddgddgg ks9J d S )Nr   r   r   r   r+   r   r   r   r   r   )r   r   r   )r   r   r   )r%   r   i)r   r      )r      r   )	r   QRdecompositionr   rD   r   rE   r5   r   r   )rF   Qr   Rr   r-   r-   r0   test_QR   s:   .4F


**rS   c                  C   s  t g dg dg dg dg} |  \}}|j| t|jks"J |js'J | || ks/J t g dg dg dg dg} |  \}}|j| t|jksQJ |jsVJ | || ks^J t d	d
d
d	g} |  \}}|j| t|jksxJ |js}J | || ksJ t g dg dg} |  \}}|j| t|jksJ |jsJ | || ksJ t g dg dg dg} |  \}}|j| t|jksJ |jsJ | || ksJ t d
d	d
d	g} |  \}}|j| t|jksJ |jsJ | || ksJ d S )N)r"   r      )r%   r   )r   r   r   )r   rV   )r   r+   r   )r   r   r   )r   r   r   )r   r+   r   r   r   r   r    r*   )r   r   r"      )r   r      @   r   rP   rD   r   rE   r5   rF   rQ   rR   r-   r-   r0   test_QR_non_square   s<    
 




r\   c                  C   s  t g dg dg dg} |  \}}|j| t|jksJ |js$J | || ks,J t g dg dg dg dg} |  \}}|j| t|jksNJ |jsSJ | || ks[J t g dg dg dg dgj} |  \}}|j| t|jks~J |jsJ | || ksJ t g dg} |  \}}|j| t|jksJ |jsJ | || ksJ t g dgj} |  \}}|j| t|jksJ |jsJ | || ksJ t g dg dg} |  \}}|j| t|jksJ |jsJ | || ksJ t g dg dgj} |  \}}|j| t|jks J |js&J | || ks/J t g dg dgj} |  \}}|j| t|jksMJ |jsSJ | || ks\J t g d	g d
g d	gj} |  \}}|j| t|jks}J |jsJ | || ksJ t g d	g d
g d	g dgj} |  \}}|j| t|jksJ |jsJ | || ksJ t g dg dg dg dgj} |  \}}|j| t|jksJ |jsJ | || ksJ d S )Nr   r    r!   rL   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   r   r*   )r   r   r   r   rZ   r[   r-   r-   r0   test_QR_trivial   sn   
 
"



""r]   c                  C   s   t ddgddgg} |  \}}t|| | sJ t||j t ds&J t|j| t ds3J t ddgddgg} |  \}}t|| | sLJ t||j t dsYJ t|j| t dsfJ d S )Nr   g)\(?r   gjt?)r   rP   r   rD   r   r[   r-   r-   r0   test_QR_float  s   r^   c               
      sr   d  fdd} zt ddgddggj| d\}}W n ty6 } z |jd ks+J W Y d }~d S d }~ww J )NI got passed in!c                       t  Nr9   valuemagic_stringr-   r0   goofyiszero)     z;test_LUdecomposition_Simple_iszerofunc.<locals>.goofyiszeror   r   
iszerofunc)r   r,   r9   args)rg   lur=   errr-   re   r0   &test_LUdecomposition_Simple_iszerofunc%  s   $rn   c               
      st   d  fdd} zt ddgddggj| d\}}}W n ty7 } z |jd ks,J W Y d }~d S d }~ww J )Nr_   c                    r`   ra   rb   rc   re   r-   r0   rg   8  rh   z4test_LUdecomposition_iszerofunc.<locals>.goofyiszeror   r   ri   )r   r3   r9   rk   )rg   lur=   rm   r-   re   r0   test_LUdecomposition_iszerofunc4  s   &rq   c                  C   s  t tdd  t tdd  t tdd  t tdd  t tdd  td} | jdd	\}}|| |j | ks:J td
} |  \}}|| |j | ksOJ |jsTJ |tg dtddddgtddtdddggkspJ | svJ |tg dg dg dgksJ tddt	 ddt	  fdt	 ddt	 fddt	  dt	 dff} |  \}}t
|| |j | ksJ | tg dt	d ddgtjt	d  ddggksJ | tdksJ t tdd  t tdd  t tdd  t tdd  t tdd  td} | jdd	\}}|| |j | ksJ td
} |  \}}|| |j | ks1J |js7J |tg dtddddgtddtdddggksTJ | s[J |tg dg dg dgksmJ tddt	 ddt	  fdt	 ddt	 fddt	  dt	 dff} |  \}}t
|| |j | ksJ |tdt	d ddftjt	d  ddffksJ |tdksJ d S )Nc                   S      t d S Nr   r   r   LDLdecompositionr-   r-   r-   r0   r1   D  r2   z'test_LDLdecomposition.<locals>.<lambda>c                   S   rr   Nrt   )r   r   ru   r-   r-   r-   r0   r1   E  r2   c                   S      t dt dfdf S Nr   r   )r   r   )r   r   rv   r-   r-   r-   r0   r1   F      c                   S   rr   N)r   r   )r   r   ru   r-   r-   r-   r0   r1   G  r2   c                   S      t djddS Nrx   F	hermitianru   r-   r-   r-   r0   r1   H      r}   Fr   ))      )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   c                   S   rr   rs   r   rv   r-   r-   r-   r0   r1   Y  r2   c                   S   rr   rw   r   r-   r-   r-   r0   r1   Z  r2   c                   S   ry   rz   )r   r   rv   r-   r-   r-   r0   r1   [  r{   c                   S   rr   r|   r   r-   r-   r-   r0   r1   \  r2   c                   S   r~   r   r   r-   r-   r-   r0   r1   ]  r   )r   r
   r9   r   rv   rD   r4   r   is_diagonalr   r   Hexpandr   Halfr   )rF   r;   rJ   r-   r-   r0   test_LDLdecompositionC  sP   
8"@8:$@2r   c                  C   s   t g dg dg dg dg dg dgg} | D ]2}|jdd}|| }|| }t|| |ks3J t|| |ks=J |j|ksDJ |j|ksKJ qd S )	N)=   Y   7      G   r   )>   `   U   r   rW   r   )E   8      r   6   r   )r#   r   [   )   r   r   )r      r#   0   Z   r   )r   r   r   r   r   r   RD)method)r   pinvr	   r   )AsrF   A_pinvAApApAr-   r-   r0   1test_pinv_succeeds_with_rank_decomposition_methodn  s"   r   c                  C   sv  t ddg } |  \}}|jsJ |j|j  kr |  ks#J  J || | ks+J t dddg} |  \}}|js=J |j|j  krL|  ksOJ  J || | ksWJ t ddg d} |  \}}|jsjJ |j|j  kry|  ks|J  J || | ksJ t g dg dg dg d	g} |  \}}|jsJ |j|j  kr|  ksJ  J || | ksJ d S )
Nr   r   r   r   )	r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r+   r   r   r   r   rU   r   )r   r   r   rV   rV   r   r   )r+   r   r   r+   r   r   r   )r   rank_decomposition
is_echelonrE   rowsrank)acfr-   r-   r0   test_rank_decomposition  s2   
$
$
$
$r   c                  C   s  t ddtdgtdtdddgdtdddgg} |  \}}t||j t|jks.J t|j| t|jks<J |jsAJ t|| |j | ksNJ t g dg dg dg}| \}}t||j t|jksoJ t|j| t|jks}J |jsJ t|| |j |ksJ t dtdddgg d	dddtd
gg dg}| \}}t||j t|jksJ t|j| t|jksJ |jsJ t|| |j |ksJ t g dg dg dg}| \}}t||j t|jksJ t|j| t|jksJ |jsJ t|| |j |ksJ t g dg dg dg dg}| \}}t||j t|jksDJ t|j| t|jksSJ |jsYJ t|| |j |ksgJ d S )Nr   r   r   r   r   )r   r   r#   )r   r   r   )r   r%   "   )r   r   r   r   r   )r   r   r   r   r   )rV   r   r   )r   ir"   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )	r   r   r   upper_hessenberg_decompositionr	   r   r   rE   is_upper_hessenberg)rF   r   r@   rH   rI   rJ   Er-   r-   r0   #test_upper_hessenberg_decomposition  sh   


 r   N)+sympy.core.functionr   sympy.core.numbersr   r   sympy.core.singletonr   sympy.core.symbolr   (sympy.functions.elementary.miscellaneousr   $sympy.functions.elementary.complexesr   sympy.simplify.simplifyr	   sympy.matrices.exceptionsr
   sympy.matricesr   r   r   r   	sympy.abcr   r   r   sympy.testing.pytestr   r   sympy.testing.matricesr   rB   rK   rS   r\   r]   r^   rn   rq   r   r   r   r   r-   r-   r-   r0   <module>   s2    U"#'G+