a
    .'aK                  	   @   s   d dl Z d dlZd dlmZ d dlmZ e jdg dZ	e	dd Z
e	dd	 Zd
d Z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
quadrature)N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 sJ 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	   Clib/python3.9/site-packages/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)npZarangedictr   r   Zlinalgr   )r   fr   kwargsexactreserrrestr	   r   r   test_quad_vec_simple   s*    
r(   c              
   C   s  dd }dD ]}| dkr$|dk r$qt d|| d}t|dtjfi |\}}t|tjd	 dt||d
 t|dtj fi |\}}t|tj d	 dt||d
 t|tj dfi |\}}t|tjd	 dt||d
 t|tjdfi |\}}t|tj d	 dt||d
 t|tj tjfi |\}}t|tjdt||d
 t|tjtj fi |\}}t|tj dt||d
 t|tjtjfi |\}}t|ddt||d
 t|tj tj fi |\}}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szJ 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   P   r   gh㈵>i  T)r   r   r   r   r   r   g      ?)
r!   r   r    infr   pir   er*   status)r   r"   r   r#   r%   r&   r$   infor	   r	   r   test_quad_vec_simple_inf*   s>    
 r0   c                 C   s   dd| d   S r)   r	   r
   r	   r	   r   
_lorenzianZ   s    r1   c               	   C   s   ddl m}  t}t|tj tjdddd\}}t|tjddd | dJ}d	d
 }t|tj tjdd|jd\}}t|tjddd W d    n1 s0    Y  d S )Nr   )Poolr   r      )r   r   Zworkersr   r   c                 S   s   dd| d   S r)   r	   r
   r	   r	   r   r   f   r   z$test_quad_vec_pool.<locals>.<lambda>)	Zmultiprocessing.dummyr2   r1   r   r    r+   r   r,   map)r2   r"   r%   r&   Zpoolr	   r	   r   test_quad_vec_pool^   s    
 r5   c                    s@    fdd}dg t |dddd| d}|d j d ks<J d S )	Nc                    s    d  d7  < | d S )Nr   r      r	   r
   countr	   r   r"   m   s    ztest_num_eval.<locals>.fr   r   r   T)r   r   r   r   )r   neval)r   r"   r%   r	   r7   r   test_num_evalk   s    r:   c                  C   s   dd } t | ddddd\}}}|jdks.J |jdks<J |jdksJJ |jdksXJ |jjd d	kslJ |jj|jjd d
d	dfksJ |jj|jjd fksJ d S )Nc                 S   s
   t dS )N)   r   r   )r    Zonesr
   r	   r	   r   r"   w   s    ztest_info.<locals>.fr   r   r   T)r   r   zTarget precision reached.r   r;   )	r   Zsuccessr.   messager9   Z	intervalsshapeZ	integralserrors)r"   r%   r&   r/   r	   r	   r   	test_infov   s     r?   c                  C   s\   dd } dd }t | dddd\}}}|jd	ks4J t |dddd\}}}|jd	ksXJ 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   r;   )r   r.   )rA   rB   r%   r&   r/   r	   r	   r   test_nan_inf   s    rC   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sNJ qNd S )
N)r   g      ?r   g      ?r   c                 s   s   | ]}| V  qd S r   r	   ).0r   r	   r	   r   	<genexpr>   r   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
   r8   Zinterval_setsZquadrature_pointsr	   r   r"      s
    ztest_points.<locals>.fr   )r   r   r   )tupler   r    Zsearchsortedsortedall)abr   r"   pjr	   rL   r   test_points   s    
rT   )ZpytestZnumpyr    Znumpy.testingr   Zscipy.integrater   ZmarkZparametrizeZquadrature_paramsr(   r0   r1   r5   r:   r?   rC   r+   rT   r	   r	   r	   r   <module>   s(   

/

