a
    <b                     @   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~q|dkrBt
d	qBW d    n1 s0    Y  t d
t |  } t|t jd d  }|| k sJ t jdd dt jgddd}t|| }|| k sJ d S )N      levinumethodvariantr        iteration limit exceeded?   c                 S   s   d| |   S Nr    nr   r   g/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/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nsuminf)	r   LSsr   veerrwr   r   r   test_levin_0   s$    
0r/   c            	      C   s  dt _t t j} t dt j r t jddd}g d }}t |d }|d7 }|| ||\}}|| k rtq|dkr<t	d	q<W d    n1 s0    Y  t 
d
t |  } t|t d }|| k sJ t jdd dt jgddd}t|| }|| k sJ d S )Nr   r   r   r+   r   r          @      @r   r   r   y             c                 S   s   | d S )Nr0   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(   Ar   r*   r+   r,   r-   r.   r   r   r   test_levin_1"   s$    

0r4   c            	         s$  dt _t d t t j} t dt j p t jddd}d}d| t |  |   }||\}}|d	7 }|| k r|q|d
kr@t	dq@W d    n1 s0    Y  t 
dt |  } t  fdddt jg}t|| }|| k sJ t j fdddt jgddd}|| k s J 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 )Nr8   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,   exactr-   r.   r   r<   r   test_levin_27   s$    
0 rD   c            	   
      s  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 rq|d
krDt	dqDW d    n1 s0    Y  t 
dt |  } t  fdddt jgd t dt j  }t|| }|| k s,J 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   r7   r   )r   r      r   r   r   皙?c                    s    t |  |  d  | d   S )Nr   rF   r9   r:   r<   r   r   r   ^   r   ztest_levin_3.<locals>.<lambda>r   c                    s8     |  t d|   t | t d|   d|    S )NrF   r   r>   r   r<   r   r   r   c   r      c                 S   s   g | ]}d qS )r   r   .0r;   r   r   r   
<listcomp>c   r   z test_levin_3.<locals>.<listcomp>)r	   r   Zworkprecsteps)r   r   r   r   r   r   r   r?   Z	step_psumr!   r"   r#   rA   r'   sqrtr%   r$   r&   xrangerB   r   r<   r   test_levin_3O   s&    
<0.>rO   c                     sD  dt _t t jZ 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 sr0    Y  t 	d
t 
t j }t jdd dt jgdd} t| t 
d |k sJ 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@J d S )Nr   r5   ic                    s   | d    S r   r   r   r<   r   r   r   l   r   z!test_levin_nsum.<locals>.<lambda>r   l)r	   g|=rG   c                 S   s   d| d  |  S )Nr8   r   r   r   r   r   r   r   q   r   r6   r   y       @      ?c                    sT   t dt d | t dt d |   |   t dt d | t |   S )Nr      rF   r   )r   rfr   r?   r   r<   r   r   r   u   r   r   r   c                 S   s   g | ]}d qS )r5   r   rI   r   r   r   rK   v   r   z#test_levin_nsum.<locals>.<listcomp>r   )r	   rL   rQ   rF   )r   r   r   r   r   r&   r'   r$   Zeulerr"   r#   r   rN   Zhyp2f1)ar   fr+   rC   r   r<   r   test_levin_nsumg   s    &4&.rU   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 sJ d S )
Nr   r   r   r8   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    

rY   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 sJ d S )Nr   r   r   r   r   g?g-q=)r   r   rW   r   Zloggammar   r1   r   r!   r"   r$   )r3   rX   r   r+   r,   r-   r   r   r   test_cohen_alt_1   s    " 

rZ   N)Zmpmathr   r   backendrN   r/   r4   rD   rO   rU   rY   rZ   r   r   r   r   <module>   s   