o
    "`J"                     @   s   d dl mZ d dl mZ ejjZd'ddZd'ddZd(d	d
Zd(ddZdd Z	d)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$d%Zd&S )*    )mp)libmpFc           
      C      |r	t dt|  t| \}}|t| |  }| | }||  t| j }|r7t d| t d| t|}t|}|rSt d|d|d t d|d|d t	dt
tj }	||	k sdJ ||	k sjJ |S Noriginal matrix:
zeigenvalues:
zeigenvectors:
zdifference:
皙?)printstrr   Zeigsydiag	transposeeyerowsmnormexplogeps
AverboseDQBCEZNCZNEr    r   C/usr/lib/python3/dist-packages/mpmath/tests/test_eigen_symmetric.py	run_eigsy	   $   



r   c           
      C   r   r   )r	   r
   r   Zeigher   transpose_conjr   r   r   r   r   r   r   r   r   r   	run_eighe$   r   r    Tc                 C   ~  | j | j}}tdttj }|r tdt|  td| tj| |d\}}}t	|j|j }	t
t||D ]
}
||
 |	|
|
f< q9|r[tdt| tdt| tdt| ||	 | |  }t|}|rstdt|d	| ||k syJ ||  t|j  }t|}|rtd
t|d	| ||k sJ | | t|j }t|}|rtdt|d	| ||k sJ d S Nr   r   full)full_matriceszU:
zS:
zV:
zC
r   zD:
zE:
)r   colsr   r   r   r   r	   r
   svd_rzerosxrangeminr   r   r   r   r$   r   mnr   UZS0VSjr   errr   r   r   r   r   	run_svd_r?   8   



r2   c                 C   r!   r"   )r   r%   r   r   r   r   r	   r
   svd_cr'   r(   r)   r   r   r   r*   r   r   r   	run_svd_cf   r3   r5   c                 C   s\   d}t t|| \}}|t |8 }|t |8 }t ||k s#J t ||k s,J d S )Nh㈵>)r   gauss_quadraturelenmatrixr   )qtypeabr   der   r   r   	run_gauss   s   r?   
   c                 C   sL   t | | }t| D ]}t| D ]}tdt   d | |||f< qq
|S )z,
    random matrix with integer entries
          )r   r9   r(   intrand)r,   ranger   ir0   r   r   r   irandmatrix   s   "rG   c                  C   s  t ddgddgg} t|  t|  t ddgddgg} t|  t|  t g dg dg d	g} t|  t|  t g d
g dg dg} t|  t|  t ddgddgg} t|  t g dg dg dg} t|  t g dg dg dg} t|  d S )NrA               )rA      rJ   )rM   rH   rL   )rJ   rL   rI   )rA   r   rJ   )r   rH   rB   )rJ   rB   rI   y      @      @y      @      )rA   y             &r   )y              &@rH   y              =@)r   y             =rI   )rA   y      &@      1@y      @      3@)y      &@      1rH   y      *      7@)y      @      3y      *      7rI   )r   r9   r   r    r   r   r   r   test_eighe_fixed_matrix   s$   rO   c                  C   sj   d} t dD ],}dt| |  d }t d| D ]}t |d | D ]}|||f |||f< q qt| qd S )NrI   r@   rA   rB   r   )r(   r   
randmatrixr   Nr;   r   rF   r0   r   r   r   test_eigsy_randmatrix   s   
rS   c                  C   s   d} t dD ]H}dt| |  d ddt| |  d   }t d| D ]&}t|||f |||f< t |d | D ]}t|||f |||f< q9q#t| qd S )NrI   r@   rA   rB                 ?r   )r(   r   rP   reconjr    rQ   r   r   r   test_eighe_randmatrix   s   ,
rW   c                  C   sd   d} d}t dD ]'}t| |}t d| D ]}t |d | D ]}|||f |||f< qqt| qd S )N   r@   r   rB   )r(   rG   r   rR   Rr;   r   rF   r0   r   r   r   test_eigsy_irandmatrix   s   

r[   c                  C   s   d} d}t dD ]>}t| |dt| |  }t d| D ]&}t|||f |||f< t |d | D ]}t|||f |||f< q1qt| qd S )NrX   r@   rT   r   rB   )r(   rG   r   rU   rV   r    rY   r   r   r   test_eighe_irandmatrix   s   
r\   c                  C   s   t dD ]Q} t dk}dtt d  }dtt d  }dt|| d }t dkrN|d9 }t |D ]}t |D ]}t|||f |||f< q>q8t||dd qd S )NrI         ?rB   r@   rA   Fr$   r   )r(   r   rD   rC   rP   r2   rF   r#   r+   r,   r   xyr   r   r   test_svd_r_rand   s   rb   c                  C   s   t dD ]m} t dk}dtt d  }dtt d  }dt|| d ddt|| d   }t dkrj|d9 }t |D ]%}t |D ]}tt|||f dtt|||f   |||f< qJqDt||dd qd S )	NrI   r]   rB   r@   rA   rT   Fr^   )r(   r   rD   rC   rP   rU   Zimr5   r_   r   r   r   test_svd_c_rand  s   ,:rc   c               	   C   s   t dt t j } g dg dg dg dg dg dg dg d	g}t |}t t d
dt dddg}t j|dd}||8 }t || k sNJ t j|dd}||8 }t || k sbJ d S )Nr   )   r@   rA   rH   rJ   )   rJ   r@   r      )rL   rg   rK   rH   )rL   ri   rX   )	   rf   rB   ri   rX   )rj   rB   irI   rg   )rA   i   rI   rB   )rX   rI   r   ri   rA   i     i  r   F)Z
compute_uv)	r   r   r   r   r9   sqrtr&   r   r4   )r   r;   r<   r/   r   r   r   test_svd_test_case  s$   
	 rn   c                  C   s   ddg} ddg}t d| | g d} g d}t d| | g d} g d}t d	| | d
dg} ddg}t d| | g d} g d}t d| | g d} g d}t d| | d S )NgEygEy?rB   legendre)g{[lg0#;r   g0#;?g{[l?)ΞS?$%ڡ?gr3yV4?rq   rp   )gHƱ?g?g
p?gü6?)>c@C?:Ά_?rs   rr   
legendre01g'eg'e?gE%[?hermite)g"U) g䬀)r   g䬀)?g"U) @)8Dn?R1?g??rw   rv   )g\m?gpPZ@g\(@)g F?g1m<?goF?laguerre)r?   )r;   r<   r   r   r   test_gauss_quadrature_static*  s$   ry   c              	      s  dt d d  fdddfdd	}|d	d
d ddg |ddd ddg |ddd t j t jg |ddd dt jg |ddd dt jgdt d d |ddd ddg |ddd ddg |ddd ddgdt d dt d d d S )NrI   rA   rB   c                    s2   d}t t d ddD ]
}||   |  }q|S )Nr   rB   rg   )r(   r8   )r`   rrF   rN   r   r   FH  s   z(test_gauss_quadrature_dynamic.<locals>.Fr   c                    s   t j| ||d\}}d}tt|D ]}||| ||  7 }qt  fdd|}	t ||	 }
r=t| |
||	 |
dk sCJ d S )Nalphabetar   c                    s   |  |  S Nr   r`   )r{   FWr   r   <lambda>U      z<test_gauss_quadrature_dynamic.<locals>.run.<locals>.<lambda>r6   )r   r7   r(   r8   ZquadZfabsr	   )r:   r   rZ   r}   r~   XWr;   rF   r<   c)r{   r,   r   )r   r   runN  s   z*test_gauss_quadrature_dynamic.<locals>.runro   c                 S      dS NrB   r   r   r   r   r   r   ^      z/test_gauss_quadrature_dynamic.<locals>.<lambda>rg   rt   c                 S   r   r   r   r   r   r   r   r   _  r   ru   c                 S   s   t |  |  S r   r   r   r   r   r   r   r   `  r   rx   c                 S   s   t |  S r   r   r   r   r   r   r   a  s    Z	glaguerrec                 S   s   t | t |   S r   )r   rm   r   r   r   r   r   r   b      )r}   Z
chebyshev1c                 S   s   dt d| |    S r   r   rm   r   r   r   r   r   c  r   Z
chebyshev2c                 S   s   t d| |   S r   r   r   r   r   r   r   d  s    Zjacobic                 S   s,   d|  dt d  d|  dt d   S )NrB   rH   rI   )r   mpfr   r   r   r   r   e  s   , rH   r|   )r   r   )r   rP   infr   )r   r   r   )r   r{   r,   r   r   test_gauss_quadrature_dynamicC  s   $2r   N)F)FT)r@   )Zmpmathr   r   Zbackendr(   r   r    r2   r5   r?   rG   rO   rS   rW   r[   r\   rb   rc   rn   ry   r   r   r   r   r   <module>   s&   



''

