o
    "`(                     @   s>  d dl mZ d dlZd dlT ejjZejZej	Z	ej
Z
ejZejZeg dg dg dgZg dZeg dg d	g d
g dgZg dZeg dg dg dg dg dgZg dZeg dg dg dg dg dgZg dZeg dg dg dgZeg dg dg dgZg dZed d!gd"d gd#d$ggZg d%Zeg d&g d'g d(g d)gZg d*Zeg d+g d,g d-gZg d.Zeg d/g d0g d1gZg d2Z d3d4 Z!d5d6 Z"d7d8 Z#d9d: Z$d;d< Z%d=d> Z&d?d@ Z'dAdB Z(dCdD Z)dEdF Z*e+dGdHdI Z,dJdK Z-dLdM Z.dNdO Z/dPdQ Z0dRdS Z1dS )T    )divisionN)*)         )   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   r   r   	   i)r      r   r      )r   r   r   r   2   )gQx$@g=
ףp=g        gQ롿gGz@)gNbX9gRQ?g(\@g(\B!gHzG?)gRQgQ?g rпgp=
ף"@gE)g)\#@g(\@g     @1g;On?g\(8@)gQ"g33333sA@gp=
ףS@gQ?g33333sP@)gfffff!@g
ףp=4@gGz@ffffff@gףp=
7M@)r   r   r   )r   r   r   )r   r   i)g	?gZB>@gr3܀o@)gsFZ*o@g#GGge,i9@)g}.AgR#@g(~Ƅ.)g     7@gQ/gQ@r   g      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   g      @)
      g      /)      ?      ?       @r   )g      @g      @g      @)g      @g       @g      "@)      ?r   r   c                  C   s   t  } t}t| \} }t| ||}t| |}|g dksJ dd |D g dks,J t } t}t| \} }t| ||}t| |}|g dksKJ dd |D g dksXJ td} |  }t| d	d
 | |kslJ d S )N)r   r   r   r   c                 S      g | ]}t |d qS    round.0i r!   :/usr/lib/python3/dist-packages/mpmath/tests/test_linalg.py
<listcomp>O       z"test_LU_decomp.<locals>.<listcomp>)g-P@grhA@g(mUg^ \^v@g+6CV@)r   r   r	   r   c                 S   r   r   r   r   r!   r!   r"   r#   W   r$   )gw]@g_DP@gIϘ}X?gRxgE9r   r   )Z	overwrite)	A3copyb3	LU_decompL_solveU_solveA4b4
randmatrix)AbpyxZbakr!   r!   r"   test_LU_decompH   s$   

r3   c                  C   s<   t ttfD ]} t| }t| | t| j ddk sJ qd S )Nr   g+=)A1A2A5inversemnormeyeZrows)r.   invr!   r!   r"   test_inverse^   s   "r;   c                  C   s  dt _tt} }tt| |\}}}}|ttdtdtddgdtdtdtd	gdtd
tdtdgdtdtdtdggksGJ |ddtdgksRJ tt	|dddks^J g d}dd }g }g }	t
ddD ]-}
||
} tt| |\}}}}t|}t|}|t	|d |	t	t| ||d qodd |D g dksJ t	t|t|	 tdk sJ dd }g }g }t
ddD ]6}
||
} t|  \}}}}|t	|d |t	t| d d d |
d  f || d d |
d  f d qt	t|t| tdk sJ d S )!N   z3.0z-2.0z-1.0r   g      z3.333333333333333z-2.9999999999999991z2.0z-0.66666666666666674z2.8142135623730948z-2.8284271247461898r   z-1.3333333333333333z-0.20000000000000018z4.2426406871192857r   z-1.4142135623730949r   r   gv@)gJ+Y@gy&1,M@g%C;B@g(\O8@g1Z1@gn(@gMb"@g(\@gq=
ףp@gʡE@gy&1,@g/$@c                    s>   g }t ddD ] | fddt d| d D  qt|S )Nr      c                    s   g | ]
}d  | d  qS )r   r   r!   )r   jr    r!   r"   r#   x   s    z3test_householder.<locals>.coeff.<locals>.<listcomp>)rangeappendmatrix)nr.   r!   r?   r"   coefft   s   $ztest_householder.<locals>.coeffr   c                 S   r   )r   r   )r   resr!   r!   r"   r#      r$   z$test_householder.<locals>.<listcomp>)gRmX.@g8hi\?g5Żڌ^?g?g A8C?vIh%<=c                 S   s`   t d|  | }td|  dddd}|dd }t|d d df | t|d | df  }|S )Nr   r
   r   minmaxc                 S   s   t dt  |  S )Ny              ?)expZpir2   r!   r!   r"   <lambda>   s    z9test_householder.<locals>.hilbert_cmplx.<locals>.<lambda>r   )Zhilbertr-   Zapplydiag)rC   r.   vr!   r!   r"   hilbert_cmplx   s
   ,z'test_householder.<locals>.hilbert_cmplxr   )mpdpsA8b8householderextendrB   mpfr   normr@   rA   residualinfr&   )r.   r/   Hr0   r2   rr1   rD   Z	residualsZrefresrC   rO   Zresiduals_cmplxZrefres_cmplxr!   r!   r"   test_householderc   sL   

>$r\   c                  C   s8   t d} t| \}}}t||  ||  ddk sJ d S )Nr   r   gV瞯<)r-   Zlur8   )r.   PLUr!   r!   r"   test_factorization   s   "r`   c                   C   s  t tttttttdk sJ t tttttttdk s J t ttttt	t	tdks0J t ttt
ttd ttdk sBJ t ttt
ttd ttdk sTJ t ttt
tt	d t	ddksfJ t ttttttddk svJ t ttt
ttd tddk sJ d S )Ng|=      ?go   @r   r   g333333@)rW   rX   A6lu_solveb6rY   A7b7rR   rS   Zqr_solveA10b10r!   r!   r!   r"   
test_solve   s      $$$ (ri   c                  C   sP   t ddgddgddgg} t dt dt g}tt| t| ||dk s&J d S )	Nr   y               @r   y              @r   r   r   g|a2U?)rB   r>   rW   rX   rc   )r.   r/   r!   r!   r"   test_solve_overdet_complex   s   "rj   c                     sx   dt _ddgddgg} ttd}ddg}d| |f d||f d	| |f d	||f fD ] tttf fd
d q+d S )Nr<   r   g333333?g?g?r   r   zlu_solve(%s, %s)zqr_solve(%s, %s)c                      s   t  S N)evalr!   r?   r!   r"   rL      s    ztest_singular.<locals>.<lambda>)rP   rQ   reprzerospytestZraisesZeroDivisionError
ValueError)r.   Br/   r!   r?   r"   test_singular   s   rs   c                  C   s`   t t tt g dg dg dgksJ t tt} t t t| tt jdks.J d S )N)r   r   r   )r   r   r   )r
   g      ra   r   )	fpZcholeskyrB   A9Zcholesky_solveb9rW   rX   rY   rK   r!   r!   r"   test_cholesky   s   0$rw   c                   C   s   t tdksJ tt tddksJ tt tdksJ tt tdks'J t tdks/J tt tdks9J t tddksCJ d S )	Nr   r      i*  iC ir   r   )	detr4   r   r5   r%   r+   r6   rb   rn   r!   r!   r!   r"   test_det   s   rz   c                  C   sl   dt _tddgddgg} t| dd tdksJ t| d	d tdks'J t| d
d tdks4J d S )Nr<   g6?gꕲq?ga2U0*?gBiq?c                 S   
   t | dS )Nr   r8   rK   r!   r!   r"   rL         
 ztest_cond.<locals>.<lambda>z327065209.73817754c                 S   s
   t | tS rk   )r8   rY   rK   r!   r!   r"   rL      r}   c                 S   r{   )NFr|   rK   r!   r!   r"   rL      r}   z249729266.80008656)rP   rQ   rB   ZcondrV   r.   r!   r!   r"   	test_cond   s
   r   r   c                  C   s,   t dd} ttt| |  ddk sJ d S )Nr   r   gj7֖6)r-   r8   r7   r   r!   r!   r"   test_precision   s   
"r   c                  C   s   dt _dt_tg dg dg dg} tg d}t| |}|d jdk s*J |d jdk s3J |d	 jdk s<J d
|d v sDJ d|d v sLJ d|d	 v sTJ d S )Nr<   )z0.1z0.3z1.0)z7.1z5.5z4.8)z3.2z4.4z5.6)4z0.6z0.5r   rF   r   r   giE'n@gFxlbO*g'ɮ@)rP   rQ   ZivrB   rc   Zdelta)ar/   cr!   r!   r"   test_interval_matrix   s   r   c                  C   s<   t d} t| }| jt| ksJ d| d< | jd u sJ d S )Nr   )r   r   )r-   r(   Z_LU)r.   ZLUr!   r!   r"   test_LU_cache   s
   r   c                  C   sp   t dddd} t ddddd}t| |t dddd	d }t| ||}tt| ||d
tt| ||d
k s6J d S )Nr   g#B;g@xDrG   r   r   i  gh㈵gh㈵>r   )r-   rc   improve_solutionrW   rX   )r.   r/   Zx1Zx2r!   r!   r"   test_improve_solution   s
   ,r   c                  C   s   t dD ]j} d}d}|| t_d}d}t d|d }t|}tdd |D }t|dk r;t|}t|}t|dk s-|| }|d | | }	|d | | }
|t_t|	d	d
}|| t_|
| }|t_t|t	
dsnJ qdt_d S )Nr   r<   r   r   c                 S   s   g | ]}t |qS r!   )rJ   )r   r2   r!   r!   r"   r#      s    z!test_exp_pade.<locals>.<listcomp>g{Gz?r
   Zpade)method)r@   rP   rQ   rM   absr-   ry   ZexpmrW   rY   Zae)r    rQ   ZextraZdmNZdgr   ZexpamZa1Ze2Ze1dr!   r!   r"   test_exp_pade   s.   


r   c                  C   s2  dt _d} d}d}d}td}tddD ]}d}d	}t|d
 }td
|d
 t   }td
|d
 t   }	tt||	}
tt	||	}t 
|
|}|rd}d}td|D ])}td|
D ]!}t| ||  t   }t| ||  t   }t|||||f< q]qVn'd}d}td|D ]}td|
D ]}t| ||  t   }t||||f< qqt|||d\}}td}t|||  }||ksJ |dkrtt|
|j|  }||ksJ tt|
||j  }||ksJ |dkrtt|
|j|   }||ksJ tt|
| |j  }||ksJ qd S )Nr<   ir   r	   Fz0.0r   r   Zfullr   complexTreal)Zedpsz1.0E-11)rP   rQ   rV   xrangeboolZnintZrandintrI   rH   rB   ZmpcZqrrW   r9   T	conjugate)ZlowlimitZuplimitZmaxmZflgZzerokZexdpsmodeZnum1Znum2r   rC   r.   Zdtyper>   r    valZval2QRZmaxnormZn1r!   r!   r"   test_qr  s`   
r   )2Z
__future__r   ro   ZmpmathZlibmpZbackendr   rP   r(   r)   r*   rT   r   rB   r4   Zb1r5   Zb2r%   r'   r+   r,   r6   rb   rd   re   rf   rR   rS   ru   rv   rg   rh   r3   r;   r\   r`   ri   rj   rs   rw   rz   r   Zextradpsr   r   r   r   r   r   r!   r!   r!   r"   <module>   s   7
		
