a
    khZ                     @   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s8J t dddddggi} | t ddgddggksjJ t dddddgi} | t ddgddggksJ d S )N   r   r            r   r   )a r   N/var/www/auris/lib/python3.9/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s6J dd	lm} tg }|d
dg}|||kshJ |||kszJ t||t|ksJ t||t|ksJ dd t	dD }tj
| tddg ksJ dd t	dD }tj| tddg ksJ td}d|d< |d dks*J d
|d< d|d< |tdksLJ d|d< |tdksfJ 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s
J |d  dksJ ztd! W n ty<   Y nn0 |d dksPJ |d dksbJ |d dkstJ |d dksJ |d dksJ |d  dksJ td"}|td" }t|tsJ |d |ksJ |d d| ksJ |d d| ksJ |d dksJ d| }t|ts6J |d dksHJ |d d#ksZJ |d d$kslJ |d dks~J 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sHJ tdd|dddg}|}	|	j|	jksrJ |	jdksJ |	d d  |dddgksJ ||ksJ | d}
|
d
 |
tg d*g d+gksJ | 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sVJ |
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s2J tddd| ditg d0g d1g d2g d0gkslJ t td3d  td
dd
dg d
dggksJ tddd
ddgg d
dgddggksJ t td4d  t td5d  td6gtsJ td ddijdksJ td dd
ijd7ks2J td d dd
ijd7ksNJ 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sJ td> d
ksJ td? d@ks4J tdA dksJJ tdB dCks`J tdD dEksvJ tdF dGksJ tdH dIksJ tdJ dksJ tdK dLksJ tdM dNksJ | d}|d dd df | dk	sJ |ddddf |dk	s0J tdddOd }|dd d f td
ddPk	sbJ |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
svJ | d|	d dd df< |	| dk
sJ tdd
dY|	d d df< |	tg dZk
sJ |d|	d d d d f< |	|dk
sJ dA|	d d d d f< |	tdAksJ ddg|	d ddf< |	td[ksDJ | d}|!d
d\td
d\d]ksjJ 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&szJ |j'sJ || (|dh| |dksJ tg dig djg dkg dlg}|% \}}}|j&sJ |j'sJ || (|dh| |dksJ td"td;tdm  }}}td
|d
fd|df|d|ff  % \}}}|j&sfJ |j'srJ || (|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sFJ |j*dvdw| dks`J |j*dxdw| dkszJ tg dng dog dyg}tt|* }|| | dksJ |j*dvdw|ksJ |j*dxdw|ksJ tg dng dog dzg}tt|* }|| | dks&J |j*dvdw|ks<J |j*dxdw|ksRJ 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s J |tddg d tddt- gddggks2J || dtd
dt- gddgd
dgdd
ggksjJ |/d| dtd
dt- gddgd
dgdd
ggksJ |0dt1dd
td
dt- dgg dgksJ |j2ddrJ tdd  d= d<  3d
 fdd  tg dg dg dgks8J td  4d  tg dg dg dgkspJ | 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sJ td"}td;}td
d|d | d|d  ||  g}||g}|6|td| | |d g|d| | ggksJ td
d||d |d  g}|6|td
dgd| |d  |d d |d  ggksJ 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szJ |
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sXJ 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sJ  ; }|d tg dksJ |d
 tg dksJ |d tg dksJ |d tddddd|d=d d
gksBJ td"}td;}| d}|<|t=|d
 d kszJ |<|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sJ  1ddtddi ksJ td#d#dddddddddd	}|B g dksJ |C g dksJ tdD dksJ d S )Nc                 S   s
   t | S N)r   r   nr   r   r   
sparse_eye   s    z&test_sparse_matrix.<locals>.sparse_eyec                 S   s
   t | S r   r   r   r   r   r   r   sparse_zeros   s    z(test_sparse_matrix.<locals>.sparse_zerosc                   S   s
   t ddS Nr   r   r   r   r   r   r   <lambda>       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>.   r&   z&test_sparse_matrix.<locals>.<listcomp>r      c                 S   s   g | ]}t |d qS r+   r"   r,   r   r   r   r.   0   r&   r   r   r   r   )r   r   r)      r(   )r1   )r2   r   )r1   )r2   r   )r   r(   )r   r   )r   r   )r   r/   )r3   )r   r      r)   r1      )r   r   z	c = a @ bx
      )i  i  i,*  i7  )r   r   r   )r   r   r   )r/      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   r0   r   r   r   r   r   r%      r&   c                   S   s   t dddgS )Nr   r   r   r   r   r   r   r%      r&   c                   S   s   t ddddggS r$   r   r   r   r   r   r%      r&   g?r3   c                   S   s   t d dddggS r$   r   r   r   r   r   r%      r&   c                   S   s   t dd ddggS r$   r   r   r   r   r   r%      r&   c                   S   s   t ddtdddS )Nr   r   )r   r0   )r   r   r   r   r   r   r%      r&   y))r   )   )r   r   r   r=   )r   r   r/   ))r   r   r2   )rG   r   rG   r   r   rG   r2   r   r2   r   r   r   i)r   r   r   r   )r2   r/   r4   rC   	   r7      r9         r8      )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   r9   )r   r   r   r   r   )r   r   r   rE   r   )r   r   rE   r   rC   )r   r   r   r   r/   i))rD   r   r   r   r2   )r   r   r   r2   )r   r   rB   r   r2   )r   r   r   rG   r2   )r   r   r   r   rE   i-  ))r   r   r   r   )rG   r   r   r   rH   rI   <   )r   r   r   r   )r2   r   r   r   )rL   r7   rM   r   rN   )rR   rS   rT   rU   )r   r   r   r   r      ))r   r4   rE   r   r   )r   r   r   r   r   )rG   r   r4   r   r   )rB   rG   r   r2   r   )r   r   r   r   r   {   c                 S   s   | | S r   r   ijr   r   r   r%     r&   r   r   r   )r   r   )r   r   r   r   )r   r2   r/   r4   )rC   rL   r7   rM   )r9   rO   rP   r8   )r   r4   rM   r8   rG   )r?   r?   r@   )r   r   r   r   rJ   )rX   )r   r   r   r   )r   r   r   r   )r   r   r   r   ))r   r   r   r   )r   r/   r4   rC   rK   rN   rL   )	r   r   r   r   r   r   r   r   r   c                 S   s   | | S r   r   r[   r   r   r   r%   :  r&   )r^   )r   r   r   )r   r   r   r   r   r2   )r   r   r   r   r   r   )r   r   r   r   r   r2   c                 S   s   d|  S )Nr   r   r6   r   r   r   r%   B  r&   c                 S   s   dS Nr   r   r`   r   r   r   r%   C  r&   )r   r   r2   r   )r   r   r4   r   )rC   r   r   r   )rG   r/   r   r   Zbackward)r/   rG   r4   r   )r   r   r/   r4   )r   rG   r4   r   )ir   r/   r   z)r   r   r2   )r   r/   r   )rC   r   r/   )r   r4   r2   )r   rE   r   )r2   r7   r4   )rC   r   r   )rE   r   r2   CHmethodLDL)r4   r   r/   )r2   r   r/   r_   )rG   r   rG   rP   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   F)Zsimplifyc                    s   | d |df   S )Nr   r   r   )vr\   Mr   r   r%     r&   )r   r   r   )rE   r   r   r   r   r   )r   r   r   )r   r   r   )r   r/   r   )r   r   r/   )   rm   )r   r   )rB   r   r   )r   r2   r/   )r4   rC   rL   )rB   r/   rB   )r/   rn   r/   rC   )r2   r4   r   r   )r   r/   r   rE      rO   rm   )r   r   r   r   r/   r   r   )rG   rm   r   rG   ir   r   )r   rL   r   r   r/   r/   r   )rE   rB   r   r   r   rL   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )rB   r   r   r   r   r   r   )r   r   r   r   r   r   r   )rG   r   r   rG   r   r   r   ))r   r   rE   r   r   r   )rE   r   r   )rE   r   r   )r2   r   r   )r   r   r   rp   r9   rQ      )	r   )r   rL   )r   r   )r   r4   )r   rL   )r   r   )r2   r4   )r/   r   )rL   r4   )	r   r   r5   r   rL   r9   r   r   r5   r   r4   rQ   r   rL   r9   r   r   rq   r2   r4   rQ   r/   r   r9   rL   r4   r5   )	rr   rw   ry   rt   ru   rx   rz   rs   rv   )Er   	TypeErrorr   sympy.matricesr*   r   Zrow_joincol_jointyperangeZhstackr
   ZvstacktodokevalSyntaxErrorr   
isinstancecolsrowsZrow_delZcol_delr   Zcol_swapZrow_swapcopy
ValueErrortolistZhasr   shapeZdetlenZreshapeZ	applyfuncabsr   ZLUdecompositionZis_lowerZis_upperZpermute_rowsZLUsolveinvcrossZnormr   CZ
row_insertZ
col_insertr   Zis_symmetricZcol_opfillZcofactor_matrixZjacobianZQRdecompositionr   TZrrefZ	nullspaceZcharpolyr	   Z	eigenvalssortedkeysZ
eigenvectsrow_listcol_listZnnz)!r!   r#   r   r*   bZsparse_matricescr6   Amr   rA   Zm0m1m2ZtestmatLUprb   ZsolnZAinvZv1Zv2testZsymsQRouttmpZbasisZsparse_eye3valsr   ri   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   r/   )r   Zscalar_multiplyr   r   r   r   test_scalar_multiply'  s    r   c                   C   s   t d t dksJ d S )Nr3   rg   ))r   r   )r   r   )r   Z	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   r2   )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s0J d S )Nr   )r;   r^   r   r   r   r   r   r   )r;   r   r^   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slJ d S )	Nr'   )r)   r(   )r0   r0   d   c                 S   s   t |dko| | dkS ra   intr[   r   r   r   r%   ?  r&   ztest_add.<locals>.<lambda>c                 S   s   t | dko||  dkS ra   r   r[   r   r   r   r%   @  r&   r   )r   r   r   )r   r   r   r   r   test_add<  s    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   s   dS ra   r   r[   r   r   r   r%   E  r&   z/test_errors.<locals>.<lambda>.<locals>.<lambda>r   r   r   r   r   r%   E  r&   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  r&   c                   S   s   t ddgddggd S Nr   r   r   r   r=   r   r   r   r   r   r%   G  r&   c                   S   s   t ddgddggd S )Nr   r   r   r   r2   r   r   r   r   r   r%   H  r&   c                   S   s   t ddgddggd S r   r   r   r   r   r   r%   I  r&   c                   S   s"   t ddgddggddgt S )Nr   r   r   r   r   )r   Zcopyin_listsetr   r   r   r   r%   K  r&   c                   S   s   t ddgddggd S )Nr   r   r   r   r3   r   r   r   r   r   r%   M  r&   c                   S   s   t g ddS )Nr=   r   )r   r   r   r   r   r   r%   N  r&   c                   S   s   t ddddgd S )Nr   r   r   r   r   r   r   r   r%   O  r&   c                   S   s    t ddddgt ddddg S r$   r   r   r   r   r   r%   Q  r&   )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s0J 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s4J t dtdt dksNJ tt d dkshJ 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s8J | d dksHJ | dd dgks^J d| d< | d dksvJ | ddd f t ddggksJ td	d
gg| ddd f< | dd d f t g dgksJ ddgg| ddd f< | dd d f t g dgksJ d| d< | d d d df t g dks<J g d| d< | d d df t g dksjJ 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   *   r0   r2   r/   )r   r2   r/   +   )r   r   r      r   )r   r   r   rF   )r   r
   )sr   r   r   test_copyina  s(    $""$&""r   c                  C   s  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sJ |tg dg dg dgksJ || |j | ksJ t d} |  |  t tdksJ 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sjJ | 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sJ | | } | | d d df d}| | | d d df ksFJ | | d d df d}| | | d d df ks|J d S )N)   r8   rD   r8   r5   r   rD   r   rM   )r2   r   r   )r   r   r   )rE   r   r   r   r   r   r8   )r8   r   r   )rL   r8   r   )rB   r2   r8   )r   r   r   )r   rL   r   )r   r   rL   ))r   r   r   r;   r>   r   )r   rE   r   )rE   r   rE   rk   r   r   r/   r   rc   rd   rf   )r   Zcholeskyr
   r   ZLDLdecompositionr   r   r   r   ZHalfZsolver}   Zsolve_least_squares)r   r   DZ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sJ |	|
|ksJ d S )Nc                   S   s   t ddggtddggS r$   r   lower_triangular_solver
   r   r   r   r   r%     s    z-test_lower_triangular_solve.<locals>.<lambda>c                   S   s    t ddgddggtdgS Nr   r   r   r   r   r   r   r   r   r%     s    c                   S   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%     s    a:du:xr   )
r   r   r   r   r   r   r   r   r
   r   r   r   r   durh   wr6   r   Br   solr   r   r   test_lower_triangular_solve  s    <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sJ |	|
|ksJ d S )Nc                   S   s   t ddggtddggS r$   r   upper_triangular_solver
   r   r   r   r   r%     s    z-test_upper_triangular_solve.<locals>.<lambda>c                   S   s    t ddgddggtdgS r   r   r   r   r   r   r%     s    c                   S   s*   t ddgddggtddgddggS r   r   r   r   r   r   r%     s    r   r   r   )
r   r   r   r{   r   r   r   r   r
   r   r   r   r   r   test_upper_triangular_solve  s    <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sJ |||	ksJ d S )Nza dr   r   )r   r   r   r   r
   Zdiagonal_solve)
r   r   r   rh   r   r6   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sHJ dt |d< |jdu sbJ | |d< |jd u sxJ |d t |d< |jdu sJ d S )	Nr6   r   r   r   r   Fr(   r)   )r   r   r   Zis_hermitian)r6   r   r   r   r   test_hermitian  s    

r   N))Zsympy.core.numbersr   r   r   Zsympy.core.singletonr   Zsympy.core.symbolr   r   Z$sympy.functions.elementary.complexesr   Zsympy.polys.polytoolsr	   r|   r
   r   r   r   r   r   r   r   r   Zsympy.testing.pytestr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s4   ,	    1