U
    ZÊ¹jâ  ã                   @   s\   d dl mZ d dl mZ ejjZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ ZdS )é    )Úmp)Úlibmpc            	   	   C   s
  dt _t  t j¡} t  dt j ¡�r t jddd�}g dd  }}}|t j||  7 }|d7 }| |¡ | 	|¡\}}|| k r~q�|dkrBt
d	ƒ‚qBW 5 Q R X t  d
t  | ¡ ¡} t|t jd d  ƒ}|| k sÐt‚t jdd„ dt jgddd�}t|| ƒ}|| k �st‚d S )Né   é   ÚlevinÚu©ÚmethodÚvariantr   é   éè  úiteration limit exceededçÍÌÌÌÌÌì?é   c                 S   s   d| |   S ©Nr   © ©Únr   r   úV/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mpmath/tests/test_levin.pyÚ<lambda>   ó    ztest_levin_0.<locals>.<lambda>©r	   Úlevin_variant)r   ÚdpsÚmpfÚepsÚ	extraprecÚprecr   ÚoneÚappendÚupdate_psumÚRuntimeErrorÚexpÚlogÚabsÚpiÚAssertionErrorÚnsumÚinf)	r   ÚLÚSÚsr   ÚvÚeÚerrÚwr   r   r   Útest_levin_0   s&    
 r0   c            	   	   C   sú   dt _t  t j¡} t  dt j ¡�h t jddd�}g d }}t  |¡d }|d7 }| |¡ | |¡\}}|| k rtq†|dkr<t	d	ƒ‚q<W 5 Q R X t  
d
t  | ¡ ¡} t|t  d¡ ƒ}|| k sÂt‚t jdd„ dt jgddd�}t|| ƒ}|| k söt‚d S )Nr   r   r   r,   r   r   ù       @      @r   r   r   y       À      Àc                 S   s   | d S )Nr1   r   r   r   r   r   r   3   r   ztest_levin_1.<locals>.<lambda>r   )r   r   r   r   r   r   r   r   Úupdater!   r"   r#   r$   Úzetar&   r'   r(   )	r   r)   ÚAr   r+   r,   r-   r.   r/   r   r   r   Útest_levin_1"   s&    

 r5   c            	   	      s  dt _t  d¡‰ t  t j¡} t  dt j ¡�f t jddd�}d}d| t  |¡ ˆ |   }| |¡\}}|d	7 }|| k r|qŽ|d
kr@t	dƒ‚q@W 5 Q R X t  
dt  | ¡ ¡} t  ‡ fdd„dt jg¡}t|| ƒ}|| k sÞt‚t j‡ fdd„dt jgddd�}|| k �st‚d S )Nr   é
   r   ÚsidiÚtr   r   éÿÿÿÿr   r   r   r   c                    s   t  |  ¡d| ˆ    S r   ©r   r"   ©Úx©Úzr   r   r   G   r   ztest_levin_2.<locals>.<lambda>c                    s   d|  t  | ¡ ˆ |    S )Nr9   ©r   Úfacr   r=   r   r   r   L   r   r   )r   r   r   r   r   r   r   r@   Ústepr!   r"   r#   Úquadr(   r$   r&   r'   ©	r   r)   r   r+   r,   r-   Úexactr.   r/   r   r=   r   Útest_levin_27   s&    
  rE   c            	   
      st  dt _t  d¡‰ t  t j¡} t  dt j ¡�Š t jddd�}d\}}|ˆ  | t  d| ¡ t  |¡t  d| ¡ d|   7 }|d	7 }| |¡\}}|| k r q²|d
krDt	dƒ‚qDW 5 Q R X t  
dt  | ¡ ¡} t  ‡ fdd„dt jg¡d t  dt j ¡ }t|| ƒ}|| k �st‚t j‡ fdd„dt jgdddt j dgdd„ td
ƒD ƒ d�}t|| ƒ}|| k �spt‚d S )Nr   r   é   r   r8   r   )r   r   é   r   r   r   çš™™™™™é?c                    s    t  |  |  d ˆ | d   ¡S )Nr   rG   r:   r;   r=   r   r   r   ^   r   ztest_levin_3.<locals>.<lambda>r   c                    s8   ˆ  |  t  d|  ¡ t  | ¡t  d|  ¡ d|    S )NrG   r   r?   r   r=   r   r   r   c   r   é   c                 S   s   g | ]}d ‘qS )r   r   ©Ú.0r<   r   r   r   Ú
<listcomp>c   s     z test_levin_3.<locals>.<listcomp>)r	   r   ZworkprecÚsteps)r   r   r   r   r   r   r   r@   Z	step_psumr!   r"   r#   rB   r(   Úsqrtr%   r$   r&   r'   ÚxrangerC   r   r=   r   Útest_levin_3O   s(    
< .>rP   c               	      s0  dt _t  t j¡�P t  d¡d ‰ t j‡ fdd„dt jgdd�dˆ   } t| t j ƒd	k s^t	‚W 5 Q R X t  
d
t  t j¡ ¡}t jdd„ dt jgdd�} t| t  d¡ ƒ|k s²t	‚d‰ ‡ fdd„}t j|dt jgddd„ tdƒD ƒd�}t  dt  d¡ dt  d¡ dt  d¡ ˆ ¡}t|| ƒ|k �s,t	‚d S )Nr   r6   iöÿÿÿc                    s   | dˆ    S r   r   r   r=   r   r   r   l   r   z!test_levin_nsum.<locals>.<lambda>r   Úl)r	   g»½×Ùß|Û=rH   c                 S   s   d| d  |  S )Nr9   r   r   r   r   r   r   r   q   r   r7   r   y       @      ð?c                    sT   t  dt  d¡ | ¡t  dt  d¡ | ¡ ˆ |   t  dt  d¡ | ¡t  | ¡  S )Nr   é   rG   r   )r   Úrfr   r@   r   r=   r   r   r   u   r   r   r   c                 S   s   g | ]}d ‘qS )r6   r   rJ   r   r   r   rL   v   s     z#test_levin_nsum.<locals>.<listcomp>r   )r	   rM   rR   rG   )r   r   r   r   r   r'   r(   r$   Zeulerr&   r"   r#   r   rO   Zhyp2f1)Úar   Úfr,   rD   r   r=   r   Útest_levin_nsumg   s    & &.rV   c                  C   s´   dt _t  ¡ } g dd  }}}|d|  t j ||  7 }|d7 }| |¡ |  |¡\}}|t jk rfqx|dkrtdƒ‚qt  dt  	t j¡ ¡}t
|t jd d	  ƒ}||k s°t‚d S )
Nr   r   r   r9   r   r   r   r   é   )r   r   Ú	cohen_altr   r   r    r   r!   r"   r#   r$   r%   r&   )ÚACr*   r+   r   r,   r-   r   r.   r   r   r   Útest_cohen_alt_0z   s    

 
rZ   c                  C   s²   dt _g } t  ¡ }d}|  t  dt jd| d   ¡¡ |  t  dt jd|   ¡ ¡ |d7 }| | ¡\}}|t jk rzqŒ|dkrtdƒ‚qt  	|¡}t
|d ƒ}|dk s®t‚d S )Nr   r   r   r   r   gƒ­ò‘þð?gê-�™—q=)r   r   rX   r   Zloggammar   r2   r   r!   r"   r$   r&   )r4   rY   r   r,   r-   r.   r   r   r   Útest_cohen_alt_1Š   s    " 
 

r[   N)Zmpmathr   r   ÚbackendrO   r0   r5   rE   rP   rV   rZ   r[   r   r   r   r   Ú<module>   s   