o
    "`                     @   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 ? t jddd}g dd}}}	 |t j||  7 }|d7 }|| |	|\}}|| k r@n	|dkrHt
d	q"W d    n1 sSw   Y  t d
t |  } t|t jd d  }|| k ssJ t jdd dt jgddd}t|| }|| k sJ d S )N      levinumethodZvariantr        iteration limit exceeded?   c                 S   s   d| |   S Nr
    nr   r   9/usr/lib/python3/dist-packages/mpmath/tests/test_levin.py<lambda>   s    ztest_levin_0.<locals>.<lambda>r	   levin_variant)r   dpsmpfeps	extraprecprecr   oneappendupdate_psumRuntimeErrorexplogabspinsuminf)	r   LSsr   veerrwr   r   r   test_levin_0   s,   
r-   c            	      C   s  dt _t t j} t dt j : t jddd}g d}}	 t |d }|d7 }|| ||\}}|| k r;n	|dkrCt	d	qW d    n1 sNw   Y  t 
d
t |  } t|t d }|| k slJ t jdd dt jgddd}t|| }|| k sJ d S )Nr   r   r   r)   r   r
          @      @r   r   r   y             c                 S   s   | d S )Nr.   r   r   r   r   r   r   3   s    ztest_levin_1.<locals>.<lambda>r   )r   r   r   r   r   r   r   r   updater   r    r!   r"   Zzetar$   r%   )	r   r&   Ar   r(   r)   r*   r+   r,   r   r   r   test_levin_1"   s,   

r1   c            	         s$  dt _t d t t j} t dt j 9 t jddd}d}	 d	| t |  |   }||\}}|d7 }|| k r?n	|d
krGt	dq!W d    n1 sRw   Y  t 
dt |  } t  fdddt jg}t|| }|| k szJ t j fdddt jgddd}|| k sJ d S )Nr   
   r   siditr   r   r
   r   r   r   c                    s   t |  d|     S r   r   r    xzr   r   r   G   s    ztest_levin_2.<locals>.<lambda>c                    s   d|  t |   |    S )Nr5   r   facr   r9   r   r   r   L   s    r   )r   r   r   r   r   r   r   r<   stepr   r    r!   quadr%   r"   r$   	r   r&   r   r(   r)   r*   exactr+   r,   r   r9   r   test_levin_27   s,   

 rA   c            	   
      s  dt _t d t t j} t dt j K t jddd}d\}}	 |  | t d	|  t |t d|  d	|   7 }|d7 }||\}}|| k rQn	|d
krYt	dq#W d    n1 sdw   Y  t 
dt |  } t  fdddt jgd t dt j  }t|| }|| k sJ t j fdddt jgdddt j dgdd td
D  d}t|| }|| k sJ d S )Nr   r      r   r4   r   )r   r   r
      r   r   皙?c                    s    t |  |  d  | d   S )Nr   rC   r6   r7   r9   r   r   r   ^   s     ztest_levin_3.<locals>.<lambda>r   c                    s8     |  t d|   t | t d|   d|    S )NrC   r   r;   r   r9   r   r   r   c   s   8    c                 S      g | ]}d qS )r
   r   .0r8   r   r   r   
<listcomp>c       z test_levin_3.<locals>.<listcomp>)r	   r   Zworkprecsteps)r   r   r   r   r   r   r   r<   Z	step_psumr   r    r!   r>   r%   Zsqrtr#   r"   r$   xranger?   r   r9   r   test_levin_3O   s.   
<
.>rM   c                     sB  dt _t t j- t dd  t j fdddt jgddd   } t| t j d	k s/J W d    n1 s9w   Y  t 	d
t 
t j }t jdd dt jgdd} t| t 
d |k scJ 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 sJ d S )Nr   r2   ic                    s   | d    S r   r   r   r9   r   r   r   l   s    z!test_levin_nsum.<locals>.<lambda>r
   l)r	   g|=rD   c                 S   s   d| d  |  S )Nr5   r
   r   r   r   r   r   r   q   rJ   r3   r   y       @      ?c                    sT   t dt d | t dt d |   |   t dt d | t |   S )Nr      rC   r
   )r   Zrfr   r<   r   r9   r   r   r   u   s   T r   r   c                 S   rF   )r2   r   rG   r   r   r   rI   v   rJ   z#test_levin_nsum.<locals>.<listcomp>r   )r	   rK   rO   rC   )r   r   r   r   r   r$   r%   r"   Zeulerr    r!   r   rL   Zhyp2f1)ar   fr)   r@   r   r9   r   test_levin_nsumg   s   &&.rR   c                  C   s   dt _t  } g dd}}}	 |d|  t j ||  7 }|d7 }|| | |\}}|t jk r4n	|dkr<tdqt dt 	t j }t
|t jd d	  }||k sYJ d S )
Nr   r   r
   r5   r   r   r   r      )r   r   	cohen_altr   r   r   r   r   r    r!   r"   r#   )ACr'   r(   r   r)   r*   r   r+   r   r   r   test_cohen_alt_0z   s   

rV   c                  C   s   dt _g } t  }d}	 | t dt jd| d    | t dt jd|     |d7 }|| \}}|t jk r>n	|dkrFtdqt 	|}t
|d }|dk sXJ d S )Nr   r
   r   r   r   g?g-q=)r   r   rT   r   Zloggammar   r/   r   r   r    r"   )r0   rU   r   r)   r*   r+   r   r   r   test_cohen_alt_1   s    " 

rW   N)Zmpmathr   r   ZbackendrL   r-   r1   rA   rM   rR   rV   rW   r   r   r   r   <module>   s   