B
    +[(              
   @   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dddgdddgdddggZddd	gZedd
d
dgdddd
gddddgdd d	dggZdddd
gZedd d
d
d gd ddd d
gd	ddd d gd d dddgd dd d dggZd d d d dgZedddddgdddddgddd d!d"gd#d$d%d&d'gd(d)d*d+d,ggZd-d.d/d0d1gZedddgdddgddd2ggZed3d4d5gd6d7d8gd9d:d;ggZd<d=d>gZedd?gddgddggZdddgZedddgd
d dgd
dd
gdd d
ggZdddd	gZed	ddgdddgddd@ggZdAdBdCgZedDdEdEgdFdGdHgdIdJdKggZdLdDdLgZ dMdN Z!dOdP Z"dQdR Z#dSdT Z$dUdV Z%dWdX Z&dYdZ Z'd[d\ Z(d]d^ Z)d_d` Z*e+ddadb Z,dcdd Z-dedf Z.dgdh Z/didj Z0dkdl Z1dS )m    )divisionN)*                  	   i      2   gQx$@g=
ףp=g        gQ롿gGz@gNbX9gRQ?g(\@g(\B!gHzG?gRQgQ?g rпgp=
ף"@gEg)\#@g(\@g     @1g;On?g\(8@gQ"g33333sA@gp=
ףS@gQ?g33333sP@gfffff!@g
ףp=4@gGz@gffffff@gףp=
7M@ig	?gZB>@gr3܀o@gsFZ*o@g#GGge,i9@g}.AgR#@g(~Ƅ.g     7@gQ/gQ@g      g      @
      g      /y      ?      ?g       @g      @g      @g      @g      @g       @g      "@g      ?c              C   s   t  } t}t| \} }t| ||}t| |}|ddddgksBtdd |D dddd	d
gksbtt } t}t| \} }t| ||}t| |}|ddddgkstdd |D dddddgkstt	d} |  }t| dd | |kstd S )Nr   r   r   c             S   s   g | ]}t |d qS )   )round).0i r   7lib/python3.7/site-packages/mpmath/tests/test_linalg.py
<listcomp>O   s    z"test_LU_decomp.<locals>.<listcomp>g-P@grhA@g(mUg^ \^v@g+6CV@r   r	   c             S   s   g | ]}t |d qS )r   )r   )r   r   r   r   r   r   W   s    gw]@g_DP@gIϘ}X?gRxgE9)Z	overwrite)
A3copyb3	LU_decompL_solveU_solveAssertionErrorA4b4
randmatrix)AbpyxZbakr   r   r   test_LU_decompH   s(    

r+   c              C   s@   x:t ttgD ],} t| }t| | t| j ddk stqW d S )Nr   g+=)A1A2A5inversemnormeyeZrowsr"   )r&   invr   r   r   test_inverse^   s    r3   c              C   sF  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st|ddtdgkstt	t
|dddkstddddddddddd d!g}d"d# }g }g }	xhtdd$D ]Z}
||
} tt| |\}}}}t|}t|}|t
|d |	t
t| ||d qW d%d& |D d'd(d)d*d+gksttt
t|t|	 td,k std-d. }g }g }x|tddD ]n}
||
} t|  \}}}}|t
|d |t
t| d d d |
d/ f || d d |
d/ f d qW t
t|t| td,k sBtd S )0N   z3.0z-2.0z-1.0r   g      z3.333333333333333z-2.9999999999999991z2.0z-0.66666666666666674z2.8142135623730948z-2.8284271247461898g      ?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                sB   g }x4t ddD ]& | fddt d| d D  qW t|S )Nr      c                s   g | ]}d  | d  qS )g      ?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   s   g | ]}t |d qS )r   )r   )r   Zresr   r   r   r      s    z$test_householder.<locals>.<listcomp>gRmX.@g8hi\?g5Żڌ^?g?g A8C?gvIh%<=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)r*   r   r   r   <lambda>   s    z9test_householder.<locals>.hilbert_cmplx.<locals>.<lambda>r   )Zhilbertr%   Zapplydiag)r:   r&   vr   r   r   hilbert_cmplx   s
    ,z'test_householder.<locals>.hilbert_cmplxr   )mpdpsA8b8householderextendr9   mpfr"   r   normr7   r8   residualinfr   )r&   r'   Hr(   r*   rr)   r;   Z	residualsZrefresr:   rB   Zresiduals_cmplxZrefres_cmplxr   r   r   test_householderc   sJ    

 BrO   c              C   s8   t d} t| \}}}t||  ||  ddk s4td S )Nr   r   gV瞯<)r%   Zlur0   r"   )r&   PLUr   r   r   test_factorization   s    rS   c               C   s  t tttttttdk s tt tttttttdk s@tt tt	tt	t
t
tdks`tt tttttd ttdk stt tttttd ttdk stt tt	tt	t
d t
ddkstt ttttttddk stt tttttd tddk std S )Ng|=g      ?go   @r   r   g333333@)rJ   rK   A6lu_solveb6rL   r"   A7b7rE   rF   Zqr_solveA10b10r   r   r   r   
test_solve   s       $$$ r[   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 sLtd S )	Nr   y               @r   y              @r   r   r   g|a2U?)r9   r6   rJ   rK   rU   r"   )r&   r'   r   r   r   test_solve_overdet_complex   s    r\   c                 s|   dt _ddgddgg} ttd}ddg}xLd| |f d||f d	| |f d	||f gD ] tttf fd
d qXW d S )Nr4   gffffff@g333333?g?g?r   r   zlu_solve(%s, %s)zqr_solve(%s, %s)c                  s   t  S )N)evalr   )r   r   r   r?      s    ztest_singular.<locals>.<lambda>)rC   rD   reprzerospytestZraisesZeroDivisionError
ValueError)r&   Br'   r   )r   r   test_singular   s    rd   c              C   sf   t t tt dddgdddgdddggks6tt tt} t t t| tt j	dksbtd S )Nr   r   r   r
   g      g      ?)
fpZcholeskyr9   A9r"   Zcholesky_solveb9rJ   rK   rL   )r*   r   r   r   test_cholesky   s    6rh   c               C   s   t tdksttt tddks&ttt tdks:ttt tdksNtt tdks^ttt tdksrtt t	ddkstd S )	Nr   r      i*  iC ir   r   )
detr,   r"   r   r-   r   r#   r.   rT   r_   r   r   r   r   test_det   s    rk   c              C   sl   dt _tddgddgg} t| dd tdks4tt| d	d tdksNtt| d
d tdkshtd S )Nr4   g6?gꕲq?ga2U0*?gBiq?c             S   s
   t | dS )Nr   )r0   )r*   r   r   r   r?      s    ztest_cond.<locals>.<lambda>z327065209.73817754c             S   s
   t | tS )N)r0   rL   )r*   r   r   r   r?      s    c             S   s
   t | dS )NF)r0   )r*   r   r   r   r?      s    z249729266.80008656)rC   rD   r9   ZcondrI   r"   )r&   r   r   r   	test_cond   s
    rm   c              C   s,   t dd} ttt| |  ddk s(td S )Nr   r   gj7֖6)r%   r0   r/   r"   )r&   r   r   r   test_precision   s    
rn   c              C   s   dt _dt_tdddgdddgdd	d
gg} tdddg}t| |}|d jdk s\t|d jdk snt|d jdk std|d kstd|d kstd|d kstd S )Nr4   z0.1z0.3z1.0z7.1z5.5z4.8z3.2z4.4z5.64z0.6z0.5r   gvIh%<=r   r   giE'n@gFxlbO*g'ɮ@)rC   rD   Zivr9   rU   Zdeltar"   )ar'   cr   r   r   test_interval_matrix   s    "rr   c              C   s<   t d} t| }| jt| ks"td| d< | jd ks8td S )Nr   i)r   r   )r%   r   Z_LUr"   )r&   ZLUr   r   r   test_LU_cache   s
    rs   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 sltd S )Nr   g#B;g@xD)r<   r=   r   ii  gh㈵gh㈵>r   )r%   rU   improve_solutionrJ   rK   r"   )r&   r'   Zx1Zx2r   r   r   test_improve_solution   s
    ru   c              C   s   xt dD ]} d}d}|| t_d}d}t d|d }t|}tdd |D }x t|dk rpt|}t|}qRW || }|d | | }	|d | | }
|t_t|	d	d
}|| t_|
| }|t_t|t	
ds
tq
W dt_d S )Nr   r4   r   r   c             S   s   g | ]}t |qS r   )r>   )r   r*   r   r   r   r      s    z!test_exp_pade.<locals>.<listcomp>g{Gz?r
   Zpade)method)r7   rC   rD   r@   absr%   rj   ZexpmrJ   rL   Zaer"   )r   rD   ZextraZdmNZdgrp   ZexpamZa1Ze2Ze1dr   r   r   test_exp_pade   s,    

r{   c              C   sR  dt _d} d}d}d}td}x,tddD ]}d}d	}t|d
 }td
|d
 t   }td
|d
 t   }	tt||	}
tt	||	}t 
|
|}|rd}d}xtd|D ]V}xPtd|
D ]B}t| ||  t   }t| ||  t   }t|||||f< qW qW nZd}d}xPtd|D ]B}x:td|
D ],}t| ||  t   }t||||f< q4W q$W t|||d\}}td}t|||  }||kst|dkrtt|
|j|  }||ksttt|
||j  }||kst|dkr,tt|
|j|   }||ks$ttt|
| |j  }||ks,tq,W d S )Nr4   ir   r	   Fz0.0r   r   Zfullr   complexTreal)Zedpsz1.0E-11)rC   rD   rI   xrangeboolZnintZrandintr=   r<   r9   ZmpcZqrrJ   r"   r1   T	conjugate)ZlowlimitZuplimitZmaxmZflgZzerokZexdpsmodeZnum1Znum2ry   r:   r&   Zdtyper6   r   valZval2QRZmaxnormZn1r   r   r   test_qr  sV    
r   )2Z
__future__r   r`   ZmpmathZlibmpZbackendr~   rC   r   r    r!   rG   rt   r9   r,   Zb1r-   Zb2r   r   r#   r$   r.   rT   rV   rW   rX   rE   rF   rf   rg   rY   rZ   r+   r3   rO   rS   r[   r\   rd   rh   rk   rm   Zextradpsrn   rr   rs   ru   r{   r   r   r   r   r   <module>   s   












7
		