U
    GvfK                  	   @   s  d dl Z d dlZd dlmZ d dlmZ d dlmZ e j	
dddddgZed	d
 Zedd Zdd Zdd Zdd Zdd Ze j	
dddge j	
dddgdd Zedd Zdd  Zd!d" Ze j	
d#d$d ejfejd fej ejfejej fgd%d& ZdS )'    N)assert_allclose)quad_vec)Pool
quadraturegk15Zgk21	trapezoidc                    s  t d  fdd}dD ]}| dkr0|dk r0qt|| d}d d	   d	  }t|d
dfddi|\}}t||d
|d t|d
dfddi|\}}t j|| |k stt|d
dfddd|\}}t||d
|d t|d
dfddddd|^}}}t||d
|d qd S )N
   c                    s   |   S N xnr
   H/tmp/pip-unpacked-wheel-96ln3f52/scipy/integrate/tests/test__quad_vec.py<lambda>       z&test_quad_vec_simple.<locals>.<lambda>皙?gMbP?gư>r   -C6?)epsabsr         r   normmaxZrtolZatol2)      ?      ?)r   pointsg:0yE>Ti'  )r   Zepsrelfull_outputlimit)nparangedictr   r   Zlinalgr   AssertionError)r   fr   kwargsexactreserrrestr
   r   r   test_quad_vec_simple   s*    
r+   c              
   C   sx  dd }dD ]}| dkr$|dk r$qt d|| d}t|dtjf|\}}t|tjd	 dt||d
 t|dtj f|\}}t|tj d	 dt||d
 t|tj df|\}}t|tjd	 dt||d
 t|tjdf|\}}t|tj d	 dt||d
 t|tj tjf|\}}t|tjdt||d
 t|tjtj f|\}}t|tj dt||d
 t|tjtjf|\}}t|ddt||d
 t|tj tj f|\}}t|ddt||d
 t|dtjfddi|\}}t|tjd	 dt||d
 qdd }tjtj td	 }d}t|tj tjdd|| dd\}}}|j	dksZt
t||dt|d| d
 d S )Nc                 S   s   ddt | d   S Nr   r   )r!   Zfloat64r   r
   r
   r   r   /   r   z*test_quad_vec_simple_inf.<locals>.<lambda>r   r   r   r   )r   r   r   r   r   r   r   )r   g       @c                 S   s   t | d d| d   S )Nr   r   )r!   sinr   r
   r
   r   r   S   r   gh㈵>i  T)r    r   r   r   r   r   g      ?)r#   r   r!   infr   pir   er-   statusr$   )r   r%   r   r&   r(   r)   r'   infor
   r
   r   test_quad_vec_simple_inf-   s@    
 r3   c                  C   sF   dd } d}t dddg}t| dd|fd\}}t||dd	d
 d S )Nc                 S   s   | | |  t d S N   r!   r"   r   ar
   r
   r   r   ^   r   z$test_quad_vec_args.<locals>.<lambda>r   r   UUUUUU?UUUUUU@r   )argsr   r   )r!   arrayr   r   )r%   r8   r'   r(   r)   r
   r
   r   test_quad_vec_args]   s
    r=   c                 C   s   dd| d   S r,   r
   r   r
   r
   r   
_lorenzianf   s    r>   c               	   C   s   t } t| tj tjdddd\}}t|tjddd td@}dd	 } t| tj tjdd|jd\}}t|tjddd W 5 Q R X d S )
Nr   r      )r   r   workersr   r   r   c                 S   s   dd| d   S r,   r
   r   r
   r
   r   r   p   r   z$test_quad_vec_pool.<locals>.<lambda>)r>   r   r!   r.   r   r/   r   map)r%   r(   r)   poolr
   r
   r   test_quad_vec_poolj   s    
 rC   c                 C   s   | | |  t d S r4   r6   r7   r
   r
   r   _func_with_argsu   s    rD   
extra_argsr   )r   r@   r   r   c              	   C   sz   t }tdddg}t|dd| |d\}}t||ddd t|.}t|dd| |jd\}}t||ddd W 5 Q R X d S )Nr   r9   r:   r   )r;   r@   r   r   )rD   r!   r<   r   r   r   rA   )rE   r@   r%   r'   r(   r)   rB   r
   r
   r   test_quad_vec_pool_argsy   s    
rF   c                    s@    fdd}dg t |dddd| d}|d j d ks<td S )	Nc                    s    d  d7  < | d S )Nr   r      r
   r   countr
   r   r%      s    ztest_num_eval.<locals>.fr   r   r   T)r   r   r   r   )r   nevalr$   )r   r%   r(   r
   rH   r   test_num_eval   s    rK   c                  C   s   dd } t | ddddd\}}}|jdks.t|jdks<t|jdksJt|jdksXt|jjd d	kslt|jj|jjd d
d	dfkst|j	j|jjd fkstd S )Nc                 S   s
   t dS )N)r5   r   r   )r!   Zonesr   r
   r
   r   r%      s    ztest_info.<locals>.fr   r   r   T)r   r   zTarget precision reached.r   r5   )
r   successr$   r1   messagerJ   Z	intervalsshapeZ	integralserrors)r%   r(   r)   r2   r
   r
   r   	test_info   s     rP   c                  C   s\   dd } dd }t | dddd\}}}|jd	ks4tt |dddd\}}}|jd	ksXtd S )
Nc                 S   s   t jS r	   )r!   nanr   r
   r
   r   f_nan   s    ztest_nan_inf.<locals>.f_nanc                 S   s   | dk rt jS d|  S )Nr   r   )r!   r.   r   r
   r
   r   f_inf   s    ztest_nan_inf.<locals>.f_infr   r   T)r   r5   )r   r1   r$   )rR   rS   r(   r)   r2   r
   r
   r   test_nan_inf   s    rT   za,b)r   r   c                    s   d}|t dd |D 7 }dg d  fdd}t|| ||ddd	 D ].}tt|t |}t||d ksNtqNd S )
N)r   g      ?r   g      ?r   c                 s   s   | ]}| V  qd S r	   r
   ).0r   r
   r
   r   	<genexpr>   s     ztest_points.<locals>.<genexpr>   r   c                    s6     dkr t   d7  d t|  dS )Nr   r   g        )appendsetaddfloatr   rI   Zinterval_setsZquadrature_pointsr
   r   r%      s
    ztest_points.<locals>.fr   )r   r   r    )tupler   r!   Zsearchsortedsortedallr$   )r8   br   r%   pjr
   r]   r   test_points   s    
rd   )ZpytestZnumpyr!   Znumpy.testingr   Zscipy.integrater   Zmultiprocessing.dummyr   markZparametrizeZquadrature_paramsr+   r3   r=   r>   rC   rD   rF   rK   rP   rT   r.   rd   r
   r
   r
   r   <module>   s8    


/	

 