o
    8VaW                     @   s   d dl 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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 )%    )AbsSSymbolsymbolsIRationalPurePolyFloat)MatrixMutableSparseMatrixImmutableSparseMatrixSparseMatrixeyeoneszeros
ShapeError)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   B/usr/lib/python3/dist-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}m} |g }|d
dg}|||ks6J |||ks?J t||t|ksLJ t||t|ksYJ dd t	dD }tj
| tddg ksoJ 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s1J |d dks:J |d dksCJ |d  dksLJ td"}|td" }t|ts^J |d |ksgJ |d d| ksrJ |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s0J |
jdks8J |
d d  |dddgksGJ ||ksNJ | d}|d
 |tg d*g d+gksfJ | d}|d
 |td
dgddgdd
ggksJ 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sFJ 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svJ 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s2J tdF dGks=J tdH dIksHJ tdJ dksSJ tdK dLks^J tdM dNksiJ | 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s2J | d|
d dd df< |
| dksGJ tdd
dY|
d d df< |
tg dZks^J |d|
d d d d f< |
|dkssJ 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&s4J |j's:J || (|dh| |dksKJ tg dig djg dkg dlg}|% \}}}|j&shJ |j'snJ || (|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s4J tg dng dog dyg}	tt|	* }|	| | dksTJ |	j*dvdw|ks_J |	j*dxdw|ksjJ 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sIJ |0dt1dd
td
dt- dgg dgkscJ |j2ddrlJ 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	s:J td
d||d |d  g}|6|td
dgd| |d  |d d |d  ggk	shJ 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
sWJ  ; }|d tg dk
shJ |d
 tg dk
suJ |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sOJ td#d#dddddddddd	}	|	B g dksjJ |	C g dksuJ tdD dksJ 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   )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.   ,   r/   r   r   r   r   )r   r   r)      r(   )r2   )r3   r   )r2   )r3   r   )r   r(   )r   r   )r   r   )r   r0   )r4   )r   r      r)   r2      )r   r   z	c = a @ bx
      )i  i  i,*  i7  )r   r   r   )r   r   r   )r0      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   r1   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?r4   c                   S   s   t d dddggS r%   r   r   r   r   r   r&      rC   c                   S   s   t dd ddggS r%   r   r   r   r   r   r&      rC   c                   S   s   t ddtdddS )Nr   r   )r   r1   )r   r   r   r   r   r   r&      s    y))r   )   )r   r   r   r>   )r   r   r0   ))r   r   r3   )rJ   r   rJ   r   r   rJ   r3   r   r3   r   r   r   i)r   r   r   r   )r3   r0   r5   rF   	   r8      r:         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   i  ))r   r   r   r   r:   )r   r   r   r   r   )r   r   r   rH   r   )r   r   rH   r   rF   )r   r   r   r   r0   i))rG   r   r   r   r3   )r   r   r   r3   )r   r   rE   r   r3   )r   r   r   rJ   r3   )r   r   r   r   rH   i-  ))r   r   r   r   )rJ   r   r   r   rK   rL   <   )r   r   r   r   )r3   r   r   r   )rO   r8   rP   r   rQ   )rU   rV   rW   rX   )r   r   r   r   r      ))r   r5   rH   r   r   )r   r   r   r   r   )rJ   r   r5   r   r   )rE   rJ   r   r3   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   r3   r0   r5   )rF   rO   r8   rP   )r:   rR   rS   r9   )r   r5   rP   r9   rJ   )r@   r@   rA   )r   r   r   r   rM   )r[   )r   r   r   r   )r   r   r   r   )r   r   r   r   ))r   r   r   r   )r   r0   r5   rF   rN   rQ   rO   )	r   r   r   r   r   r   r   r   r   c                 S   r^   r   r   r_   r   r   r   r&   6  rb   )rc   )r   r   r   )r   r   r   r   r   r3   )r   r   r   r   r   r   )r   r   r   r   r   r3   c                 S   s   d|  S )Nr   r   r7   r   r   r   r&   >  rb   c                 S      dS Nr   r   re   r   r   r   r&   ?      )r   r   r3   r   )r   r   r5   r   )rF   r   r   r   )rJ   r0   r   r   Zbackward)r0   rJ   r5   r   )r   r   r0   r5   )r   rJ   r5   r   )ir   r0   r   z)r   r   r3   )r   r0   r   )rF   r   r0   )r   r5   r3   )r   rH   r   )r3   r8   r5   )rF   r   r   )rH   r   r3   CHmethodLDL)r5   r   r0   )r3   r   r0   rd   )rJ   r   rJ   rS   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   )rH   r   r   r   r   r   )r   r   r   )r   r   r   )r   r0   r   )r   r   r0   )   ru   )r   r   )rE   r   r   )r   r3   r0   )r5   rF   rO   )rE   r0   rE   )r0   rv   r0   rF   )r3   r5   r   r   )r   r0   r   rH      rR   ru   )r   r   r   r   r0   r   r   )rJ   ru   r   rJ   ir   r   )r   rO   r   r   r0   r0   r   )rH   rE   r   r   r   rO   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )rE   r   r   r   r   r   r   )r   r   r   r   r   r   r   )rJ   r   r   rJ   r   r   r   ))r   r   rH   r   r   r   )rH   r   r   )rH   r   r   )r3   r   r   )r   r   r   rx   r:   rT      )	r   )r   rO   )r   r   )r   r5   )r   rO   )r   r   )r3   r5   )r0   r   )rO   r5   )	r   r   r6   r   rO   r:   r   r   r6   r   r5   rT   r   rO   r:   r   r   ry   r3   r5   rT   r0   r   r:   rO   r5   r6   )	rz   r   r   r|   r}   r   r   r{   r~   )Er   	TypeErrorr   sympy.matricesr   r*   Zrow_joincol_jointyperangeZhstackr
   ZvstacktodokevalSyntaxErrorr   
isinstanceZcolsZ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   r*   bZsparse_matricescr7   Amr   rD   Zm0Zm1Zm2ZtestmatLUpri   ZsolnZAinvZv1Zv2testZsymsQRouttmpZbasisZsparse_eye3Zvalsr   rp   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   r0   )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r4   rn   ))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   r3   )r   )r   r   r   )r   Ztracer   r   r   r   
test_trace,  s   r   c                   C   s4   t d g dksJ t d g dksJ d S )Nr   )r<   rc   r   r   r   r   r   r   )r<   r   rc   r   )r   r   r   r   r   r   r   
test_CL_RL1  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(   )r1   r1   d   c                 S   s   t |dko
| | dkS rg   intr_   r   r   r   r&   ;  r/   ztest_add.<locals>.<lambda>c                 S   s   t | dko
||  dkS rg   r   r_   r   r   r   r&   <  r/   r   )r   r   r   )r   r   r   r   r   test_add8  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   rf   rg   r   r_   r   r   r   r&   A  rh   z/test_errors.<locals>.<lambda>.<locals>.<lambda>r   r   r   r   r   r&   A  rB   ztest_errors.<locals>.<lambda>c                   S   s   t g dddgS )Nr>   r   r   r   r   r   r   r   r&   B  rC   c                   S      t ddgddggd S Nr   r   r   r   r>   r   r   r   r   r   r&   C  r/   c                   S   r   )Nr   r   r   r   r3   r   r   r   r   r   r&   D  r/   c                   S   r   r   r   r   r   r   r   r&   E  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&   G  s   " c                   S   r   )Nr   r   r   r   r4   r   r   r   r   r   r&   I  r/   c                   S   s   t g ddS )Nr>   r   )r   r   r   r   r   r   r&   J  rC   c                   S   s   t ddddgd S )Nr   r   r   r   r   r   r   r   r&   K  rr   c                   S   s    t ddddgt ddddg S r%   r   r   r   r   r   r&   M  s     )r   r   r   
IndexErrorr   r   r   r   r   test_errors@  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_lenP  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_eyeV  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   *   r1   r3   r0   )r   r3   r0   +   )r   r   r      r   )r   r   r   rI   )r   r
   )sr   r   r   test_copyin]  s(   $"""$  $r   c                  C   s  ddl m}  | d}| tg dg dg dgksJ | | j tg dg dg d	gks5J | d}| \}}d
| tg dg dg dgksRJ |tg dg dg dgkscJ || |j |ksnJ | d}| | | tdksJ | g dg dg dg}| 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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s%J ||d d df d}|| |d d df ks@J d S )Nr   r   )   r9   rG   r9   r6   r   rG   r   rP   )r3   r   r   )r   r   r   )rH   r   r   r   r   r   r9   )r9   r   r   )rO   r9   r   )rE   r3   r9   )r   r   r   )r   rO   r   )r   r   rO   ))r   r   r   r<   r?   r   )r   rH   r   )rH   r   rH   rs   r   r   r0   rj   rk   rm   )r   r   Zcholeskyr
   r   ZLDLdecompositionr   r   r   r   ZHalfZsolver   Zsolve_least_squares)r   r   r   DZansr   r   r   r   test_sparse_solvet  sb   

"r   c                  C   s   t d\} }}}t d\}}}}t| dg||gg}t||g||gg}	t||g||gg}
t||  ||  g||| |   | ||| |   | gg}||	|ksUJ ||
|ks^J d S Nza:du:xr   )r   r   r   r   r
   Zlower_triangular_solver   r   r   duro   wr7   r   Br   solr   r   r   test_lower_triangular_solve     <r   c                  C   s   t d\} }}}t d\}}}}t| |gd|gg}t||g||gg}	t||g||gg}
t||| |  |  ||| |  |  g|| || gg}||	|ksUJ ||
|ks^J d S r   )r   r   r   r   r
   Zupper_triangular_solver   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
   Zdiagonal_solve)
r   r   r   ro   r   r7   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 )	Nr7   r   r   r   r   Fr(   r)   )r   r   r   Zis_hermitian)r7   r   r   r   r   test_hermitian  s   

r   N)$Zsympyr   r   r   r   r   r   r   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>   s.   ( (	    2