o
    ohZ                     @   s  d dl mZmZ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mZmZmZmZmZ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#dd Z$d d! Z%d"d# Z&d$d% Z'd&d' Z(d(S ))    )FloatIRational)S)Symbolsymbols)Abs)PurePoly)	MatrixMutableSparseMatrixImmutableSparseMatrixSparseMatrixeyeoneszeros
ShapeErrorNonSquareMatrixError)raisesc                  C   s   t dddddgddggi} | t ddgddggksJ t dddddggi} | t ddgddggks5J t dddddgi} | t ddgddggksMJ d S )N   r   r            r   r   )a r   t/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/sympy/matrices/tests/test_sparse.pytest_sparse_creation   s    r   c            !         s  dd } dd }t tdd  td}t||ksJ dd	lm} tg }|d
dg}|||ks4J |||ks=J t||t|ksJJ t||t|ksWJ dd t	dD }tj
| tddg ksmJ dd t	dD }tj| tddg ksJ td}d|d< |d dksJ d
|d< d|d< |tdksJ d|d< |tdksJ d|d< |tdksJ | dddksJ td}td}|| }|d dksJ |d dksJ |d dksJ |d dksJ |d dksJ |d  dksJ ztd! W n
 ty   Y n7w |d dksJ |d dks&J |d dks/J |d dks8J |d dksAJ |d  dksJJ td"}|td" }t|ts\J |d |kseJ |d d| kspJ |d d| ks{J |d dksJ d| }t|tsJ |d dksJ |d d#ksJ |d d$ksJ |d dksJ tddgddgg}|d d d  g d%ksJ tg d&g d'g d(g}|d d d  g d)ksJ td"}t|dgddgg}|}	|	j|	jksJ |	jdks
J |	d d  |dddgksJ tdd|dddg}|}	|	j|	jks.J |	jdks6J |	d d  |dddgksEJ ||ksLJ | d}
|
d
 |
tg d*g d+gksdJ | d}
|
d
 |
td
dgddgdd
ggksJ td}
d|
d < |
d
d |
tg d,g d*g d-gksJ |
dd
 |
tg d*g d,g d-gksJ td
dd
dg}| }| }|d d
ksJ |d |tddg ksJ |d
 |td
d
d
gksJ tg d.d
dgd
ggtg d.g d/g d*gksJ tddd| ditg d0g d1g d2g d0gks+J t td3d  td
dd
dg d
dggksDJ tddd
ddgg d
dgddggks[J t td4d  t td5d  td6gtstJ td ddijdksJ td dd
ijd7ksJ td d dd
ijd7ksJ t td8d  t td9d  t td:d  td"td;}}td
d
dg dksJ td
gg d
ksJ td< d=ksJ t|d
f|d| ff d| | | ksJ td> d
ksJ td? d@ksJ tdA dksJ tdB dCks%J tdD dEks0J tdF dGks;J tdH dIksFJ tdJ dksQJ tdK dLks\J tdM dNksgJ | d}|d dd df | dks|J |ddddf |dksJ tdddOd }|dd d f td
ddPksJ |d
dd
f tdd
dQksJ tg dRg dSg dTg dUg}|d d d=f tdd
g dVksJ |dWd d d f tg dTg dUgksJ td
dgddggd
gd
gf tdggks
J |d}	| d|	ddddf< |	tg dXks%J t |	 dks0J | d|	d dd df< |	| dksEJ tdd
dY|	d d df< |	tg dZks\J |d|	d d d d f< |	|dksqJ dA|	d d d d f< |	tdAksJ ddg|	d ddf< |	td[ksJ | d}|!d
d\td
d\d]ksJ tddd^d }|!ddtg d_ksJ |!ddtd`dagksJ | d}|"dbd | dd ksJ |"dcd |dksJ t#t|d
f|d| fftt$|d
ft$|dt$| ffksJ tg ddg deg dfg dgg}|% \}}}|j&s2J |j's8J || (|dh| |dksIJ tg dig djg dkg dlg}|% \}}}|j&sfJ |j'slJ || (|dh| |dks}J td"td;tdm}}}td
|d
fd|df|d|ff  % \}}}|j&sJ |j'sJ || (|dh  |dksJ tg dng dog dpg}tdd
g dq}|| }|)|}||ksJ tg drg dsg dtg}tdd
g du}|| }|)|}||ks	J | d}|* | dksJ |j*dvdw| dks%J |j*dxdw| dks2J tg dng dog dyg}tt|* }|| | dksRJ |j*dvdw|ks]J |j*dxdw|kshJ tg dng dog dzg}tt|* }|| | dksJ |j*dvdw|ksJ |j*dxdw|ksJ td
dg d.}td
dg d{}|+|td
dg d|ksJ |,dd d}ksJ td
dt- fd~f}|j.td
dt- gddggksJ |tddg d |ksJ |tddg d tddt- gddggksJ || dtd
dt- gddgd
dgdd
ggks*J |/d| dtd
dt- gddgd
dgdd
ggksGJ |0dt1dd
td
dt- dgg dgksaJ |j2ddrjJ tdd  d= d<  3d
 fdd  tg dg dg dgksJ td  4d  tg dg dg dgksJ | d| d5 ksJ tg dg dg dg}|5 tg dg dg dgksJ tg d.g dg dg}|5 tg dg dg dgksJ td"}td;}td
d|d | d|d  ||  g}||g}|6|td| | |d g|d| | ggk	s8J td
d||d |d  g}|6|td
dgd| |d  |d d |d  ggk	sfJ td
dgddgg}|7 \}}
t8}|td|d=d |dd |d
d |d=d  gdd|d=d  |d
 d |d
d |d=d  ggk	sJ |
td|d
d dd|d=d  gd|d
d |d
d ggk	sJ ||
 |k	sJ |j9| | dk	sJ t8}tg dg dg  : \}}|td
d|d d |dd gdd
|dd |dd ggk
s!J tg dg dg dg dg  : \}}|tg dg ddddddd
|d
d gg dgk
sUJ  ; }|d tg dk
sfJ |d
 tg dk
ssJ |d tg dk
sJ |d tddddd|d=d d
gk
sJ td"}td;}| d}|<|t=|d
 d k
sJ |<|t=|d
 d k
sJ tg d  > } t?| @ g dk
sJ t8}tg d*g d,g d+g  A d
dtg d*tg d,tg d+gfgksJ tg dg dg d+g  A d
d
t|d=d |dd d
ggfdd
tg d,gfdd
tg dgfgks>J  1ddtddi ksMJ td#d#dddddddddd	}|B g dkshJ |C g dkssJ tdD dksJ d S )Nc                 S   
   t | S N)r   r   nr   r   r   
sparse_eye      
z&test_sparse_matrix.<locals>.sparse_eyec                 S   r   r   r   r   r    r   r   r   sparse_zeros   r#   z(test_sparse_matrix.<locals>.sparse_zerosc                   S   s
   t ddS Nr   r   r   r   r   r   r   <lambda>   s   
 z$test_sparse_matrix.<locals>.<lambda>r   r   r   r   r   )MutableDenseMatrixr   r   c                 S   s   g | ]}t d |qS r   r$   .0r!   r   r   r   
<listcomp>.       z&test_sparse_matrix.<locals>.<listcomp>r      c                 S   s   g | ]}t |d qS r,   r$   r-   r   r   r   r/   0   r0   r   r   r   r   )r   r   r*      r)   )r3   )r4   r   )r3   )r4   r   )r   r)   )r   r   )r   r   )r   r1   )r5   )r   r      r*   r3      )r   r   z	c = a @ bx
      )i  i  i,*  i7  )r   r   r   )r   r   r   )r1      r   )	i"  i     i  i  ip  i  i  i  )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   s   t ddddiS )Nr   r2   r   r   r   r   r   r'          c                   S   s   t dddgS )Nr   r   r   r   r   r   r   r'      s    c                   S   s   t ddddggS r&   r   r   r   r   r   r'          g?r5   c                   S   s   t d dddggS r&   r   r   r   r   r   r'      rD   c                   S   s   t dd ddggS r&   r   r   r   r   r   r'      rD   c                   S   s   t ddtdddS )Nr   r   )r   r2   )r   r   r   r   r   r   r'      s    y))r   )   )r   r   r   r?   )r   r   r1   ))r   r   r4   )rK   r   rK   r   r   rK   r4   r   r4   r   r   r   i)r   r   r   r   )r4   r1   r6   rG   	   r9      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   i  ))r   r   r   r   r;   )r   r   r   r   r   )r   r   r   rI   r   )r   r   rI   r   rG   )r   r   r   r   r1   i))rH   r   r   r   r4   )r   r   r   r4   )r   r   rF   r   r4   )r   r   r   rK   r4   )r   r   r   r   rI   i-  ))r   r   r   r   )rK   r   r   r   rL   rM   <   )r   r   r   r   )r4   r   r   r   )rP   r9   rQ   r   rR   )rV   rW   rX   rY   )r   r   r   r   r      ))r   r6   rI   r   r   )r   r   r   r   r   )rK   r   r6   r   r   )rF   rK   r   r4   r   )r   r   r   r   r   {   c                 S      | | S r   r   ijr   r   r   r'         r   r   r   )r   r   )r   r   r   r   )r   r4   r1   r6   )rG   rP   r9   rQ   )r;   rS   rT   r:   )r   r6   rQ   r:   rK   )rA   rA   rB   )r   r   r   r   rN   )r\   )r   r   r   r   )r   r   r   r   )r   r   r   r   ))r   r   r   r   )r   r1   r6   rG   rO   rR   rP   )	r   r   r   r   r   r   r   r   r   c                 S   r_   r   r   r`   r   r   r   r'   :  rc   )rd   )r   r   r   )r   r   r   r   r   r4   )r   r   r   r   r   r   )r   r   r   r   r   r4   c                 S   s   d|  S )Nr   r   r8   r   r   r   r'   B  rc   c                 S      dS Nr   r   rf   r   r   r   r'   C      )r   r   r4   r   )r   r   r6   r   )rG   r   r   r   )rK   r1   r   r   backward)r1   rK   r6   r   )r   r   r1   r6   )r   rK   r6   r   )ir   r1   r   z)r   r   r4   )r   r1   r   )rG   r   r1   )r   r6   r4   )r   rI   r   )r4   r9   r6   )rG   r   r   )rI   r   r4   CHmethodLDL)r6   r   r1   )r4   r   r1   re   )rK   r   rK   rT   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   F)simplifyc                    s   | d |df   S )Nr   r   r   )vra   Mr   r   r'         )r   r   r   )rI   r   r   r   r   r   )r   r   r   )r   r   r   )r   r1   r   )r   r   r1   )   rx   )r   r   )rF   r   r   )r   r4   r1   )r6   rG   rP   )rF   r1   rF   )r1   ry   r1   rG   )r4   r6   r   r   )r   r1   r   rI      rS   rx   )r   r   r   r   r1   r   r   )rK   rx   r   rK   ir   r   )r   rP   r   r   r1   r1   r   )rI   rF   r   r   r   rP   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )rF   r   r   r   r   r   r   )r   r   r   r   r   r   r   )rK   r   r   rK   r   r   r   ))r   r   rI   r   r   r   )rI   r   r   )rI   r   r   )r4   r   r   )r   r   r   r{   r;   rU      )	r   )r   rP   )r   r   )r   r6   )r   rP   )r   r   )r4   r6   )r1   r   )rP   r6   )	r   r   r7   r   rP   r;   r   r   r7   r   r6   rU   r   rP   r;   r   r   r|   r4   r6   rU   r1   r   r;   rP   r6   r7   )	r}   r   r   r   r   r   r   r~   r   )Er   	TypeErrorr   sympy.matricesr+   r   row_joincol_jointyperangehstackr
   vstacktodokevalSyntaxErrorr   
isinstancecolsrowsrow_delcol_delr   col_swaprow_swapcopy
ValueErrortolisthasr   shapedetlenreshape	applyfuncabsr   LUdecompositionis_loweris_upperpermute_rowsLUsolveinvcrossnormr   C
row_insert
col_insertr   is_symmetriccol_opfillcofactor_matrixjacobianQRdecompositionr   Trref	nullspacecharpolyr	   	eigenvalssortedkeys
eigenvectsrow_listcol_listnnz)!r"   r%   r   r+   bsparse_matricescr8   Amr   rE   m0m1m2testmatLUprk   solnAinvv1v2testsymsQRouttmpbasissparse_eye3valsr   rs   r   test_sparse_matrix   s  




$.2









""""&.2





 F"" "

 







(8@.4 
,  



* r   c                   C   s*   t ddggdt ddggksJ d S )Nr   r   r   r1   )r   scalar_multiplyr   r   r   r   test_scalar_multiply'     *r   c                   C   s   t d t dksJ d S )Nr5   rp   ))r   r   )r   r   )r   	transposer   r   r   r   test_transpose+  s   
r   c                   C   s,   t d dks
J t d dksJ d S )Nr   r4   )r   )r   r   r   )r   tracer   r   r   r   
test_trace0  s   r   c                   C   s4   t d g dksJ t d g dksJ d S )Nr   )r=   rd   r   r   r   r   r   r   )r=   r   rd   r   )r   r   r   r   r   r   r   
test_CL_RL5  s   

r   c                  C   sp   t dt d t dksJ t dddd } t dddd }t|  t|  t| |   dks6J d S )	Nr(   )r*   r)   )r2   r2   d   c                 S   s   t |dko
| | dkS rh   intr`   r   r   r   r'   ?  r0   ztest_add.<locals>.<lambda>c                 S   s   t | dko
||  dkS rh   r   r`   r   r   r   r'   @  r0   r   )r   r   r   )r   r   r   r   r   test_add<  s   4r   c                   C   s   t tdd  t tdd  t tdd  t tdd  t tdd  t tdd  t tdd  t td	d  t td
d  t tdd  d S )Nc                   S   s   t dddd S )Ngffffff?r   c                 S   rg   rh   r   r`   r   r   r   r'   E  ri   z/test_errors.<locals>.<lambda>.<locals>.<lambda>r   r   r   r   r   r'   E  rC   ztest_errors.<locals>.<lambda>c                   S   s   t g dddgS )Nr?   r   r   r   r   r   r   r   r'   F  rD   c                   S      t ddgddggd S Nr   r   r   r   r?   r   r   r   r   r   r'   G  r0   c                   S   r   )Nr   r   r   r   r4   r   r   r   r   r   r'   H  r0   c                   S   r   r   r   r   r   r   r   r'   I  r0   c                   S   s"   t ddgddggddgt S )Nr   r   r   r   r   )r   copyin_listsetr   r   r   r   r'   K  s   " c                   S   r   )Nr   r   r   r   r5   r   r   r   r   r   r'   M  r0   c                   S   s   t g ddS )Nr?   r   )r   r   r   r   r   r   r'   N  rD   c                   S   s   t ddddgd S )Nr   r   r   r   r   r   r   r   r'   O  ru   c                   S   s    t ddddgt ddddg S r&   r   r   r   r   r   r'   Q  s     )r   r   r   
IndexErrorr   r   r   r   r   test_errorsD  s    r   c                   C   s4   t  rJ t  t g ksJ t  t g gksJ d S r   r   r   r   r   r   test_lenT  s   
r   c                   C   sl   t dtdt dksJ tt d dksJ t dtdt dks'J tt d dks4J d S )Nr   )clsr   )r   r   r   r   r   r   r   r   r   test_sparse_zeros_sparse_eyeZ  s   r   c                  C   s  t ddi } d| d< | d d df t tg dksJ | d dks$J | dd dgks/J d| d< | d dks;J | ddd f t ddggksLJ td	d
gg| ddd f< | dd d f t g dgksjJ ddgg| ddd f< | dd d f t g dgksJ d| d< | d d d df t g dksJ g d| d< | d d df t g dksJ tg d| d< | d d df t g dksJ t g d| d< | d d df t g dksJ d S )Nr   r   r)   r   r>   r   *   r2   r4   r1   )r   r4   r1   +   )r   r   r      r   )r   r   r   rJ   )r   r
   )sr   r   r   test_copyina  s(   $"""$  $r   c                  C   sv  t d} |  tg dg dg dgksJ |  |  j tg dg dg dgks/J t d} |  \}}d| tg d	g d
g dgksLJ |tg dg dg dgks]J || |j | kshJ t d} |  |  t tdkszJ t g dg dg dg} t tddtddtddgtddtddtddgddtj	gg}| jdd|ksJ | jdd|ksJ | | t tdksJ | 
| d d df d}| | | d d df ksJ | 
| d d df d}| | | d d df ksJ | | } | | d d df d}| | | d d df ksJ | | d d df d}| | | d d df ks9J d S )N)   r:   rH   r:   r7   r   rH   r   rQ   )r4   r   r   )r   r   r   )rI   r   r   r   r   r   r:   )r:   r   r   )rP   r:   r   )rF   r4   r:   )r   r   r   )r   rP   r   )r   r   rP   ))r   r   r   r=   r@   r   )r   rI   r   )rI   r   rI   rv   r   r   r1   r   rl   rm   ro   )r   choleskyr
   r   LDLdecompositionr   r   r   r   Halfsolver   solve_least_squares)r   r   Dansr   r   r   r   test_sparse_solvex  s`   

"r   c                  C   s   t tdd  t tdd  t tdd  td\} }}}td\}}}}t| dg||gg}t||g||gg}	t||g||gg}
t||  ||  g||| |   | ||| |   | gg}|	|	|ksjJ |	|
|kssJ d S )Nc                   S      t ddggtddggS r&   r   lower_triangular_solver
   r   r   r   r   r'        z-test_lower_triangular_solve.<locals>.<lambda>c                   S       t ddgddggtdgS Nr   r   r   r   r  r   r   r   r   r'         c                   S   *   t ddgddggtddgddggS Nr   r   r   r   r  r   r   r   r   r'     r   a:du:xr   )
r   r   r   r   r   r   r   r   r
   r  r   r   r   durr   wr8   r   Br   solr   r   r   test_lower_triangular_solve     <r  c                  C   s   t tdd  t tdd  t tdd  td\} }}}td\}}}}t| |gd|gg}t||g||gg}	t||g||gg}
t||| |  |  ||| |  |  g|| || gg}|	|	|ksjJ |	|
|kssJ d S )Nc                   S   r  r&   r   upper_triangular_solver
   r   r   r   r   r'     r  z-test_upper_triangular_solve.<locals>.<lambda>c                   S   r  r  r  r   r   r   r   r'     r  c                   S   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   test_upper_triangular_solve  r  r  c            
      C   s   t d\} }t d\}}}}t| dgd|gg}t||g||gg}t||g||gg}t||  ||  g|| || gg}	|||	ksGJ |||	ksPJ d S )Nza dr  r   )r   r   r   r   r
   diagonal_solve)
r   r  r  rr   r  r8   r   r  r   r  r   r   r   test_diagonal_solve  s   $r  c                  C   s   t d} tdtgt dgg}|jsJ tdtgt dgg}|js$J dt |d< |jdu s1J | |d< |jd u s<J |d t |d< |jdu sKJ d S )	Nr8   r   r   r   r   Fr)   r*   )r   r   r   is_hermitian)r8   r   r   r   r   test_hermitian  s   

r  N))sympy.core.numbersr   r   r   sympy.core.singletonr   sympy.core.symbolr   r   $sympy.functions.elementary.complexesr   sympy.polys.polytoolsr	   r   r
   r   r   r   r   r   r   r   r   sympy.testing.pytestr   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   r   r   r   <module>   s6    ,	    1