B
    <Z                 @   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 v t jddd}g dd  }}}xP|t j||  7 }|d7 }|| |	|\}}|| k rP |dkrDt
d	qDW W d Q R X t d
t |  } t|t jd d  }|| k stt jdd dt jgddd}t|| }|| k s
td S )N      levinu)methodvariantr      i  ziteration limit exceededg?   c             S   s   d| |   S )Nr
    )nr   r   6lib/python3.7/site-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AssertionError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 l t jddd}g d }}xLt |d }|d7 }|| ||\}}|| k rvP |dkr>t	d	q>W W d Q R X t 
d
t |  } t|t d }|| k stt jdd dt jgddd}t|| }|| k std S )Nr   r   r   r$   )r   r	   r
   y       @      @i  ziteration limit exceededg?y             c             S   s   | d S )Ny       @      @r   )r   r   r   r   r   3   s    ztest_levin_1.<locals>.<lambda>)r   r   )r   r   r   r   r   r   r   r   updater   r   r   r   Zzetar   r   r    )	r   r!   Ar   r#   r$   r%   r&   r'   r   r   r   test_levin_1"   s(    

 r+   c        	   	      s  dt _t d t t j} t dt j j t jddd}d}xPd| t |  |   }||\}}|d	7 }|| k r~P |d
krBt	dqBW W d Q R X t 
dt |  } t  fdddt jg}t|| }|| k stt j fdddt jgddd}|| k std S )Nr   
   r   sidit)r   r	   r   r
   i  ziteration limit exceededg?c                s   t |  d|     S )Nr
   )r   r   )x)zr   r   r   G   s    ztest_levin_2.<locals>.<lambda>c                s   d|  t |   |    S )Nr/   )r   fac)r   )r1   r   r   r   L   s    )r   r   )r   r   r   r   r   r   r   r2   stepr   r   r   quadr    r   r   r   )	r   r!   r   r#   r$   r%   exactr&   r'   r   )r1   r   test_levin_27   s(    
  r6   c        	   
      sx  dt _t d t t j} t dt j  t jddd}d\}}xp|  | t d|  t |t d|  d|   7 }|d	7 }||\}}|| k rP |d
krFt	dqFW W d 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 sttd S )Nr   r      r   r.   )r   r	   )r   r      r
   i  ziteration limit exceededg?c                s    t |  |  d  | d   S )Nr   r8   )r   r   )r0   )r1   r   r   r   ^   s    ztest_levin_3.<locals>.<lambda>r   c                s8     |  t d|   t | t d|   d|    S )Nr8   r   )r   r2   )r   )r1   r   r   r   c   s       c             S   s   g | ]}d qS )r
   r   ).0r0   r   r   r   
<listcomp>c   s    z test_levin_3.<locals>.<listcomp>)r   r   Zworkprecsteps)r   r   r   r   r   r   r   r2   Z	step_psumr   r   r   r4   r    Zsqrtr   r   r   r   xrange)	r   r!   r   r#   r$   r%   r5   r&   r'   r   )r1   r   test_levin_3O   s*    
< .>r>   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 d Q R X t 
d
t t j }t jdd dt jgdd} t| t d |k st	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   r,   ic                s   | d    S )Nr
   r   )r   )r1   r   r   r   l   s    z!test_levin_nsum.<locals>.<lambda>r
   l)r   g|=g?c             S   s   d| d  |  S )Nr/   r
   r   )r   r   r   r   r   q   s    r-   r   y       @      ?c                sT   t dt d | t dt d |   |   t dt d | t |   S )Nr      r8   r
   )r   Zrfr   r2   )r   )r1   r   r   r   u   s    r   r   c             S   s   g | ]}d qS )r,   r   )r:   r0   r   r   r   r;   v   s    z#test_levin_nsum.<locals>.<listcomp>i  )r   r<   r@   r8   )r   r   r   r   r   r   r    r   Zeulerr   r   r   r   r=   Zhyp2f1)ar   fr$   r5   r   )r1   r   test_levin_nsumg   s    & &.rC   c              C   s   dt _t  } g dd  }}}x\|d|  t j ||  7 }|d7 }|| | |\}}|t jk rhP |dkr tdq W t dt 	t j }t
|t jd d	  }||k std S )
Nr   r   r
   r/   i  ziteration limit exceededg?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    

 rG   c              C   s   dt _g } t  }d}xx| t dt jd| d    | t dt jd|     |d7 }|| \}}|t jk r|P |dkrtdqW t 	|}t
|d }|dk std S )Nr   r
   r   i  ziteration limit exceededg?g-q=)r   r   rE   r   Zloggammar   r)   r   r   r   r   r   )r*   rF   r   r$   r%   r&   r   r   r   test_cohen_alt_1   s     " 
 
rH   N)Zmpmathr   r   Zbackendr=   r(   r+   r6   r>   rC   rG   rH   r   r   r   r   <module>   s   