o
    8VaT                     @   sT  d dl mZmZmZmZmZmZmZmZm	Z	m
Z
mZ d dlmZmZ d dlmZ d dlmZ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 Z edd Z!dd Z"edd Z#dd Z$dd Z%dd Z&dd Z'e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, Z0d-d. Z1d/d0 Z2d1S )2    )RationalSymbolNIAbssqrtexpFloatsincossymbols)eyeMatrix)S)raisesXFAIL)NonSquareMatrixErrorMatrixError)DFTsimplify)ImmutableMatrix)slow)allclosec                     s  t } td}|jddtjdiksJ |jddg dks J | ddtg dtg dtg d	gfgks;J | ddtg dgtg dgtg d	ggfgksYJ tg d
g dg dg}| dtj dtj dtjdikszJ | ddtg dgfddtg dgfddt| dd| dddggfgksJ | ddtg dggfddtg dggfddtg dggfgksJ t	d}t|dgddgg}| |dtjdiksJ tddgddgg}| ddtddddggfgksJ | ddtddgggfgksJ tg dg dg dg}| dd}dd| dd  }| dd}| ddd| d  }| ddd| d  }dd  ||d  dtdd||d    ||d  |  d||d    dd||d    | dggfddtg dgf||d  dtdd||d    ||d  |  d||d    dd||d    | dggfg fd d!t
tD }|  fd"d!t
tD }t|t|ksJ t	d#dd$}	tt|	t|	 gt |	 t|	gg}| ddtt |	 t|	 gdgggfdt|	 dtt|	 t|	 gdgggfgks/J | ddtt|	 t|	 dgggfdt|	 dtt |	 t|	 dgggfgks]J tddg d%}|jdd&|_td'd( |jd d d D dksJ |jdd&|_td)d( |jd d d D dksJ tt dd*dgddgg}| t d+dtd,d  dttd, d t dd gdgggft d+dtd,d  dtt d-dtd,d  gdgggfgksJ tg  i ksJ tg jddg ksJ tg  g ksJ ttd.d/  ttd0d/  ttd1d/  ttd2d/  ttd3d/  ttd4d/  tddgdd*gg}
t|
jddd5tsRJ t|
jddd5ts_J t|
jd6d/ dd5tsnJ t|
jd7d/ dd5ts}J d S )8N   FmultipleT   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   ar   r#   r   )         )      	      !      r,   c                 S   s   t t| |S N)strr   )en r5   A/usr/lib/python3/dist-packages/sympy/matrices/tests/test_eigen.pyNSE   s   ztest_eigen.<locals>.NS      r*   )r   r%   r   c                    L   g | ]"} | d  d | d d fdd| d d  D fqS )r   r#   r   c                       g | ]} |d qS r#   r5   .0jr7   r5   r6   
<listcomp>O       )test_eigen.<locals>.<listcomp>.<listcomp>r5   r>   ir7   rr5   r6   rA   N   
     ztest_eigen.<locals>.<listcomp>c                    r:   )r   r#   r   c                    r;   r<   r5   r=   r@   r5   r6   rA   R   rB   rC   r5   rD   rF   r5   r6   rA   Q   rH   epsreal)	r   r#   r   r   r   r   r#   r#   r   c                 s       | ]}|j V  qd S r1   qrD   r5   r5   r6   	<genexpr>h       ztest_eigen.<locals>.<genexpr>c                 s   rM   r1   rN   rD   r5   r5   r6   rP   j   rQ   r(   r)   I   c                   S   s   t ddgddgddgg S )Nr   r#   r   r(   r   	eigenvalsr5   r5   r5   r6   <lambda>x       ztest_eigen.<locals>.<lambda>c                   S   s   t ddgddgddgg S )Nr   r   r   r(   r)   r*   rT   r5   r5   r5   r6   rV   z   rW   c                   S      t g dg dg S )Nr'   r   r)   r*   rT   r5   r5   r5   r6   rV   |       c                   S   rX   )Nr   r(   r)   r   rT   r5   r5   r5   r6   rV   ~   rZ   c                   S      t g dg dgjddS )Nr'   rY   FZerror_when_incompleterT   r5   r5   r5   r6   rV          c                   S   r\   )Nr   r[   Fr]   rT   r5   r5   r5   r6   rV      r^   )r   r   c                 S      | S r1   r5   xr5   r5   r6   rV          c                 S   r_   r1   r5   r`   r5   r5   r6   rV      rb   )r   r   r   rU   r   One
eigenvectsleft_eigenvectsZeror   rangelensortedabsr   r   Z_eigenvectsmaxr   r   r   
isinstancedictlist)RMr&   bcdr3   Zr1Zr2rI   mr5   rF   r6   
test_eigen   s   


( (&

@@

$*
 *
**<:"ru   c                  C   s   ddl m}  tddd}tdt| dgt|ddgg dg}| |jd	d
| |jdd
ks2J | |jdd d
| |jdd
ksFJ d S )Nr   )	count_opsrO   TZpositiver%   r   )r   r   r%   Fr   c                 S   r_   r1   r5   r`   r5   r5   r6   rV      rb   z!test_eigen_slow.<locals>.<lambda>)Zsympy.core.functionrv   r   r   r   rU   )rv   rO   rt   r5   r5   r6   test_eigen_slow   s   (rx   c                  C   s   t g dg dg dg} tddtdd  tdd tdd tjg}| jddd	}t|}d
d |D }t|}t||D ]\}}t|| dk sNJ q@d S )N)r   333333?ry   )ry   ?rz   )rz   ry   ry   r)   r(   i     T)Zrationalr   c                 S      g | ]}|  qS r5   )Zevalfr>   ra   r5   r5   r6   rA          z(test_float_eigenvals.<locals>.<listcomp>g&.>)	r   r   r   r   rf   rU   ri   ziprj   )rt   ZevalsZn_evalsZs_evalsra   yr5   r5   r6   test_float_eigenvals   s   r   c                     sX   t dddddtg tt fdd  drJ tt fdd  d\} }d S )Nr#   r   r   c                      
     dS NT)is_diagonalizabler5   rt   r5   r6   rV         
 z"test_eigen_vects.<locals>.<lambda>Tc                      r   r   diagonalizer5   r   r5   r6   rV      r   )r   r   r   NotImplementedErrorr   r   r   )PDr5   r   r6   test_eigen_vects   s
   r   c                     s8  t d\} }d dd t D } fddt D }t D ]
}|| || |< q t|}| }t| ks;J t D ]}|||  dksKJ q?|jdd}t|t|ks\J t| d	d	gd|d	gd
d| gg}| }|| d
|dikszJ |jdd}t|dksJ || d
ksJ ||dksJ d S )Nzx y   c                 S   s   g | ]}t d | qS )zx%s)r   rD   r5   r5   r6   rA      rZ   z#test_issue_8240.<locals>.<listcomp>c                    s   g | ]}d d t  D qS )c                 S   s   g | ]}d qS )r   r5   rD   r5   r5   r6   rA      s    z.test_issue_8240.<locals>.<listcomp>.<listcomp>)rg   r=   r4   r5   r6   rA      rW   r   Tr   r   r#   r   )r   rg   r   rU   rh   setcount)ra   r   Zdiagonal_variablesrp   rE   rU   r5   r   r6   test_issue_8240   s(    r   c                  C   sx   t g dg dg dg} |  dtj dtj dtjdiks!J t g dg dg dg d	g d
g}| s:J d S )Nr"   r   r   r#   r   r   r   r   r   rS   r   rS   rS   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   rU   r   rc   rf   )rp   rt   r5   r5   r6   test_eigenvals   s   (	r   c                  C   sb   t g dg dg dg} |  }|D ]\}}}t|dks J | |d  ||d  ks.J qd S Nr"   r   r   r   r   )r   rd   rh   rp   ZvecsvalZmultZvec_listr5   r5   r6   test_eigenvects      r   c                  C   sb   t g dg dg dg} |  }|D ]\}}}t|dks J |d |  ||d  ks.J qd S r   )r   re   rh   r   r5   r5   r6   test_left_eigenvects   r   r   c            %      C   s  t g dg dg dg} |  | ksJ | jdd| ksJ |  | ks'J |  | | | fks2J | jdd| | | fks?J |  | ksGJ dd l}tdD ]}g }d}d}t|| D ]}|dd	}||g }q]t |||} t| }| \}	}
}|  \}}}|  }| }|	|
 | }|| | }|
  |  |  |  |  |  | jdd}| jdd\}}}|jdd}|jdd\}}}|| | }|| | }|  |  |  |  |  |  | |ksJ ||ksJ ||ksJ |
|ksJ | |ksJ ||ksJ ||ks J ||ks'J qOtdD ]}g }d}t|| D ]}|dd	}|dd	} || t  }||g }q8t |||} t| }| \}	}
}|  \}}}|  }| }|	|
 | }|| | }|
  |  |  |  |  |  | jdd}| jdd\}}}|jdd}|jdd\}}}|| | }|| | }|  |  |  |  |  |  | |ksJ ||ksJ ||ksJ |
|ksJ | |ksJ ||ksJ ||ks
J ||ksJ q,t d
dtdd} | 	dd } |  d |  ks0J | jddd | jddksAJ |  \}!}"}#|!|" |# |  }$t
t|$dk s[J d S )Nr   r    r!   F)upperr   r#   i 6ei ʚ;   r,   r      c                 S   s   t | S r1   )r	   )rE   r5   r5   r6   rV   y      z$test_bidiagonalize.<locals>.<lambda>g-q=)r   ZbidiagonalizeZbidiagonal_decompositionrandomrg   Zrandintr   r   r   Z	applyfuncrj   rk   )%rp   r   Z	real_testZtest_valuesrowcol_valuer   ZN1ZN2ZN3ZM1ZM2ZM3ZM0ZN0ZN4ZM4ZLM0ZLM1ZLM2ZLM3ZLN0ZLN1ZLN2ZLN3ZLN4ZLM4Zcomplex_testsizerK   compr&   rq   rr   Zdiffr5   r5   r6   test_bidiagonalize   s   "r   c                     s
  t ddg d tt fdd   \} }| sJ |t t dgdtggks,J t ddg d   \} }tdd | D sGJ td	d |  D sTJ  jd
d\}}||ksbJ t g dg dg dg dg   \} }t| |  |  sJ d S )Nr#   r   r$   r   r   c                      s    j ddS )NTZ
reals_onlyr   r5   r   r5   r6   rV     s    z"test_diagonalize.<locals>.<lambda>r   )r         ?r   r   c                 s       | ]}t |tV  qd S r1   rl   r	   r>   r3   r5   r5   r6   rP         z#test_diagonalize.<locals>.<genexpr>c                 s   r   r1   r   r   r5   r5   r6   rP     r   Tr   )r   r   r   r   )r   r   r   Mb`?)r   r   r   r   )r   r   r   r   )	r   r   r   r   Zis_diagonalr   allvaluesr   )r   r   r   ZD2r5   r   r6   test_diagonalize  s&   r   c                  C   s   t d\} }}tdd| |||g}| sJ | sJ tddg d r)J tddg d}| s7J |jddr?J d S )Nza b cr#   )r   r   r   r   r   Tr   )r   r   Zis_symmetricr   )r&   rq   rr   rt   r5   r5   r6   test_is_diagonalizable  s   r   c                     s  t ddg d tt fdd t ddg d   \} } |ks%J t ddg d   \} } |ks9J t g d	g d
g dg dg}| \} }t| | |   |ks]J t dddg t dgt dgfksrJ t dddgjddt dgksJ t g dg dg dg dg dg tt fdd t dddtd  gddtd  dgg   \} }tdd | D sJ tdd |D sJ d S )Nr   r#   )rS   r   rS   r{   r   
   c                            S r1   jordan_formr5   r   r5   r6   rV     r   z"test_jordan_form.<locals>.<lambda>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(   r   r   )rL   r#   r   r   )r   r   r#   r(   )r   r   rL   r#   r   F)Zcalc_transformr   r   r   r   r   c                      r   r1   r   r5   r   r5   r6   rV     r   g      ?g      ?g      ?g      ?c                 s   "    | ]}t |tp|d kV  qdS r   Nr   r}   r5   r5   r6   rP          z#test_jordan_form.<locals>.<genexpr>c                 s   r   r   r   r}   r5   r5   r6   rP     r   )	r   r   r   r   r   invr   r   r   )r   JAr5   r   r6   test_jordan_form  s4   *$&r   c                  C   s@  t ddd} tddt gddgg}| ddgksJ td}| |d< d	|d
< | }t|d	dt| hks9J tt| t| gt|  t| gg}dd | D }|t	j
t	j
gks_J tddgddgddgddgg}| ttdd tdtd gksJ |j ttdd tdtd ddgksJ d S )Nra   TrJ   r   r   r#   r   )r   r   r)   )r#   r#   c                 S   r|   r5   )Ztrigsimp)r>   svr5   r5   r6   rA     r~   z(test_singular_values.<locals>.<listcomp>r(      r.   )r   r   r   Zsingular_valuesr   r   r   r
   r   r   rc   r   T)ra   r   Zvalsr5   r5   r6   test_singular_values  s.   &"r   c                   C   s*   t g dg dg dgi kdu sJ d S )Nr"   r   r   F)r   r5   r5   r5   r6   test___eq__  s   r   c                  C   s  t g dg dg dg} | jdksJ | jdksJ | jdks"J | jdks)J | jdks0J t ddgddgg} | jdksAJ | jdksHJ | jdksOJ | jdksVJ | jdks]J t g dg dg d	g} | jdksqJ | jdksxJ | jdksJ | jdksJ | jdksJ t d
dgddgg} | jdksJ | jdksJ | jdksJ | jdksJ | jdksJ t ddgddgg} | jdksJ | jdksJ | jdksJ | jdksJ | jdksJ t d
dt gt dgg} | jdksJ | jdksJ | jdksJ | jdksJ | jdksJ tddd}tddd}t |ddgd|dgdd|gg} | jdks?J | jdksGJ | jdksOJ | jdksWJ | jdks_J t |ddgd|dgdd|gg} | jdkswJ | jdksJ | jdksJ | jdksJ | jdksJ t |dgd|gg} | jdksJ | jdksJ | jdksJ | jdksJ | jdksJ t g dg dg dg dg} | jdksJ | jdksJ | jdksJ t g dg dg dg} | jrJ | jr
J d S )N)r#   r$   r   )r$   r#   r$   )r   r$   r#   TFr)   r(   )r#   r$   r$   )r$   r$   r#   r   r#   r   r,   r&   rw   rq   )negativer   )ga~2^?=6 0z?u?1ڿ"ş})r   gEߡ?֯mA?)Ewc?)r   r   g?}uq?)r   r   r   g!pb?r   r   r   )r   r   r#   )r   r#   r   )r   Zis_positive_definiteis_positive_semidefiniteZis_negative_definiteZis_negative_semidefiniteZis_indefiniter   r   )rt   r&   rq   r5   r5   r6   test_definite  s     
r   c                  C   sf  ddl m}  tg dg dg dg}| |dksJ tg ddddt gddt dgg}| |dks6J tg d	g dg d
g}| |dksKJ tddgddgg}| |dks]J tg dg dg dg}| |dksrJ tg dg dg dg}| |dksJ tg dg dg dg}| |dksJ tg dg dg dg}| |dksJ d S )Nr   )"_is_positive_semidefinite_choleskyr   Tr)   r   Fr   )r   r   r$   r   )r(   r%   )r%   r   r-   )r   r-      )r-   rS   r   )rS   r#   r   )r   r   r*   )r(   r%   r#   )r%   r   r$   )r#   r$   r)   )r   r#   r$   )r#   r)   r   )r$   r   r-   )Zsympy.matrices.eigenr   r   r   )r   rt   r5   r5   r6   #test_positive_semidefinite_choleskyZ  s"   &r   c                  C   s6   t g dg dg dg dg dg} |  sJ d S )N)r)   rS   r#   )r%   r   r   r#   r   )r%   r   r   r%   r   )r+   r   r   r-   r%   )r(   r   r   irL   )r   rd   )r   r5   r5   r6   test_issue_20582q  s   	r   c               
   C   s*  t d jdd} |  }|d ddtdtd gdgdgggfks&J |d ddtdtd gdgdgggfks>J |d t dtdgdgdgggfksSJ t d jdd} |  }|d ddtdgdgdgdgggfkswJ |d ddtdgdgdgdggtdgdgdgdgggfksJ |d t dtdgdgdgdgggfksJ t d	 jdd} |  }|d ddtdtd	 gdgdgdgdgggfksJ |d ddttdd td	d  gdgdgdgdggttdd td	d  gdgdgdgdgggfksJ d S )
Nr   T)complexr   r$   r   r#   r(   r)   )r   Zas_explicitexpandrd   r   r   r   r   )r   rd   r5   r5   r6   test_issue_20275~  sP   



.

$
..r   c                  C   s<   t ddd} tg dd| dgdd| gg}|jd u sJ d S )Nrq   T)Znonzeror   r   )r   r   r   )rq   rt   r5   r5   r6   test_issue_20752  s   r   N)3Zsympyr   r   r   r   r   r   r   r	   r
   r   r   Zsympy.matricesr   r   Zsympy.core.singletonr   Zsympy.testing.pytestr   r   Zsympy.matrices.matricesr   r   Z"sympy.matrices.expressions.fourierr   Zsympy.simplify.simplifyr   Zsympy.matrices.immutabler   r   Zsympy.testing.matricesr   ru   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r5   r5   r5   r6   <module>   sB   4 ~

	


 
0a0