a
    .'ar&                     @   s   d dl Zd dl mZmZmZ d dlmZmZmZm	Z	m
Z
 d dlmZmZmZmZmZmZmZmZmZmZmZmZmZ G dd dZG dd dZG d	d
 d
ZG dd dZdS )    Ncossinpi)assert_equalassert_almost_equalassert_allcloseassert_suppress_warnings)
quadraturerombergrombnewton_cotescumulative_trapezoidcumtrapztrapz	trapezoidquadsimpsonsimps
fixed_quadAccuracyWarningc                   @   s   e Zd Zdd Zdd ZdS )TestFixedQuadc                    sB   d  fdd}dd   }t |dd d\}}t||dd	 d S )
N   c                    s   | d  d  S )N       xnr   Dlib/python3.9/site-packages/scipy/integrate/tests/test_quadrature.py<lambda>       z+TestFixedQuad.test_scalar.<locals>.<lambda>r   r   r   r   -q=rtol)r   r   )selffuncexpectedgot_r   r   r!   test_scalar   s
    zTestFixedQuad.test_scalarc                    sR   d}t dd|   fdd}d d  }t|dd|d\}}t||dd	 d S )
Nr   r   r   c                    s   |  d d d f  S Nr   r   pr   r!   r"      r#   z+TestFixedQuad.test_vector.<locals>.<lambda>r   r   r$   r%   )nparanger   r   )r'   r    r(   r)   r*   r+   r   r.   r!   test_vector   s    zTestFixedQuad.test_vectorN)__name__
__module____qualname__r,   r2   r   r   r   r!   r      s   r   c                   @   s|   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )TestQuadraturec                 C   s   t d S r-   )NotImplementedError)r'   r   abargsr   r   r!   r      s    zTestQuadrature.quadc                 C   s0   dd }t |dtd\}}d}t||dd d S )Nc                 S   s   t ||  |t|   t S r-   r   r   r    zr   r   r!   myfunc#   s    z.TestQuadrature.test_quadrature.<locals>.myfuncr   r   ?ۗ?   Zdecimal)r   r   r   r'   r=   valerr	table_valr   r   r!   test_quadrature!   s    zTestQuadrature.test_quadraturec                 C   s4   dd }t |dtddd\}}d}t||dd d S )Nc                 S   s    dt ||  |t|    t S )NY)	kRr   r;   r   r   r!   r=   *   s    z3TestQuadrature.test_quadrature_rtol.<locals>.myfuncr   r>   绽|=r%   .<Rr   r   r   rC   r   r   r!   test_quadrature_rtol)   s    z#TestQuadrature.test_quadrature_rtolc                 C   sJ   dd }d}dD ]4}t |dtd|d\}}t||dd	 t|d
k  qd S )Nc                 S   s   t ||  |t|   t S r-   r   r;   r   r   r!   r=   2   s    z6TestQuadrature.test_quadrature_miniter.<locals>.myfuncr@   )   4   r   r>   )miniterrA   rB         ?)r   r   r   r	   )r'   r=   rF   rO   rD   rE   r   r   r!   test_quadrature_miniter0   s    z&TestQuadrature.test_quadrature_miniterc                 C   s4   dd }t |dtddd\}}d}t||dd d S )	Nc                 S   s    dt ||  dt|    t S )NrH   r?   r   )r   r    r   r   r!   r=   ;   s    z:TestQuadrature.test_quadrature_single_args.<locals>.myfuncr   r   rI   r:   r&   rJ   r%   rK   rC   r   r   r!   test_quadrature_single_args:   s    z*TestQuadrature.test_quadrature_single_argsc                 C   s.   dd }t |dtdd}d}t||dd d S )	Nc                 S   s   t ||  |t|   t S r-   r   r;   r   r   r!   r=   C   s    z+TestQuadrature.test_romberg.<locals>.myfuncr   r>   )r:   r@   rA   rB   )r   r   r   r'   r=   rD   rF   r   r   r!   test_rombergA   s    zTestQuadrature.test_rombergc                 C   s0   dd }t |dtddd}d}t||dd d S )	Nc                 S   s    dt ||  |t|    t S )Ng =`XCr   r;   r   r   r!   r=   K   s    z0TestQuadrature.test_romberg_rtol.<locals>.myfuncr   r>   rI   rR   g3>Cr%   )r   r   r   rT   r   r   r!   test_romberg_rtolI   s    z TestQuadrature.test_romberg_rtolc                 C   s   t ttdd d S )N      )r   r   r0   r1   )r'   r   r   r!   	test_rombQ   s    zTestQuadrature.test_rombc                 C   s   t d}t d| }t|}tdd | | \}}t||ddd t 8}|	t
d td	d | | d
d}W d    n1 s0    Y  t||ddd d S )NrW   皙?c                 S   s   t d|  S NrZ   r0   r   r   r   r   r!   r"   Y   r#   z2TestQuadrature.test_romb_gh_3731.<locals>.<lambda>g:0yE>r   )r&   Zatolzdivmax .4. exceededc                 S   s   t d|  S r[   r\   r   r   r   r!   r"   _   r#   r   )Zdivmaxr$   )r0   r1   r   r   r   minmaxr   r
   filterr   r   )r'   r   yrD   Zval2rE   ZsupZval3r   r   r!   test_romb_gh_3731T   s    
:z TestQuadrature.test_romb_gh_3731c                 C   s,   dd l }t|jdd}d}t||dd d S )Nr   r   g?k?rA   rB   )mathr   r   r   )r'   rb   ZvalmathZexpected_valr   r   r!   test_non_dtypeb   s    zTestQuadrature.test_non_dtypec                 C   s  d}t |d\}}t||tddg  t||d  d  d}t |d\}}t||tg d d  t||d  d	  d}t |d\}}t||tg d
 d  t||d  d  d}t |d\}}t||tg d d  t||d  d  dS )z5Test the first few degrees, for evenly spaced points.r         ?         (@r   )rP         @rP         @rM   g     @)rP         @ri   rP          @g     P@r   )      @      @@rf   rl   rk   g     V@rA   g     =AN)r   r   r0   arrayr   )r'   r    wtserrcoffr   r   r!   test_newton_cotesi   s     z TestQuadrature.test_newton_cotesc                 C   s|   t g d}|d }t|\}}d}t ||}t|| t g d}|d }t|\}}d}t ||}t|| dS )z9Test newton_cotes with points that are not evenly spaced.)        g      ?       @r   gUUUUUU@)rq   gffffff?g @ri         "@N)r0   rm   r   dotr   )r'   r   r`   rn   ro   Zexact_integralZnumeric_integralr   r   r!   test_newton_cotes2   s    
z!TestQuadrature.test_newton_cotes2c                 C   s   t d}tt|d tt|ddd tt|t ddddd	 t d}d
| }tt||ddd tt||ddd tt||ddd d S )NrW   rX   rd   dx@   r   r   r       r   Zavg)r   eveng     +@firstg     +@Zlast   )r0   r1   r   r   linspacer'   r`   r   r   r   r!   test_simpson   s    

zTestQuadrature.test_simpsonc                 C   s8   t d}d| }tt||dddt||ddd d S )Nr   r   rd   r{   )r   rw   rz   )r0   r1   r   r   r   r~   r   r   r!   
test_simps   s
    
zTestQuadrature.test_simpsN)r3   r4   r5   r   rG   rL   rQ   rS   rU   rV   rY   ra   rc   rp   ru   r   r   r   r   r   r!   r6      s   
r6   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestCumulative_trapezoidc                 C   sX   t jdddd}|}t||dd}g d}t|| t||d d}t||dd   d S )	Nr   rM   Znumr   initial)rq                r   rq   r   r0   r}   r   r   )r'   r   r`   y_int
y_expectedr   r   r!   test_1d   s    
z TestCumulative_trapezoid.test_1dc                 C   s   t dddd}|}t||dd}t g dg dgg d	g d
gg dg dgg}t|| g d}tg d|D ]@\}}t||d|d}t|jd t||d |d}t|j| qzd S )N   re   r   r   r   r   )rq   rd   rr         @)rq   r         $@     0@)rq         !@      2@g     <@)rq         )@g      :@g     @D@)rq   r   g      A@g     @J@)rq        4@g      E@g      P@))r   r   r   )re   r   r   )re   r   re   r   r   r   g@)r   axis)re   r   r   )	r0   r1   reshaper   rm   r   zipr   shape)r'   r   r`   r   r   Zshapesr   r   r   r   r!   test_y_nd_x_nd   s(    

z'TestCumulative_trapezoid.test_y_nd_x_ndc              	   C   s   t dddd}t dd }t g dg dgg dg dggt g d	gg d
gg dggt g dg dgg dg dgg dg dggf}tg d|D ]0\}}t||d |j|  |d d}t|| qd S )Nr   re   r   r   )rg         @rh   rk   )rj   rs   r         &@)g      D@g      F@g      H@g      J@)g      L@g      N@g      P@g      Q@)rr   ri   rg   r   )r   r   rf   g      *@)r   g      3@g      4@      5@)rd   r   g     1@)r   r   g     J@)r   g     B@g     `V@)r   g     J@g     `_@)r   g     @Q@g     0d@)r   g     @U@g     h@r   )r   r   r   )r0   r1   r   rm   r   r   r   r   )r'   r`   r   Zys_expectedr   r   r   r   r   r!   test_y_nd_x_1d   s:    

z'TestCumulative_trapezoid.test_y_nd_x_1dc                 C   s   t jdddd}t|}g d}t|| t|dd}g d}t|| t|d	d
}g d}t|| t|d	dd}g d}t|| d S )Nr   r   rM   r   )r   r   r   rq   Gz?r   )r   r   r   r   rq   re   rv   )            r   rq   )rw   r   )r   r   r   r   rq   r   )r'   r`   r   r   r   r   r!   test_x_none   s    


z$TestCumulative_trapezoid.test_x_nonec              	   C   sF   t dddd}|}tt||ddddt||dddddd	 d S )
Nr   re   r   r   rd   r   )rw   r   r   g+=r%   )r0   r1   r   r   r   r   )r'   r   r`   r   r   r!   test_cumtrapz   s    z&TestCumulative_trapezoid.test_cumtrapzN)r3   r4   r5   r   r   r   r   r   r   r   r   r!   r      s
   
r   c                   @   s    e Zd ZdZdd Zdd ZdS )TestTrapezoidz[This function is tested in NumPy more extensive, just do some
    basic due diligence here.c                 C   sp   t d}tt|d tt|ddd tt|t ddddd	 t d}d
| }tt||ddd d S )NrW   rX   rd   rv   rx   r   r   r   ry   r   g?)r   rw   g      +@)r0   r1   r   r   r}   r~   r   r   r!   test_trapezoid   s    

zTestTrapezoid.test_trapezoidc                 C   s8   t d}d| }tt||dddt||ddd d S )Nr   r   rd   r   )r   rw   r   )r0   r1   r   r   r   r~   r   r   r!   
test_trapz  s
    
zTestTrapezoid.test_trapzN)r3   r4   r5   __doc__r   r   r   r   r   r!   r      s   
r   )Znumpyr0   r   r   r   Znumpy.testingr   r   r   r	   r
   Zscipy.integrater   r   r   r   r   r   r   r   r   r   r   r   r   r   r6   r   r   r   r   r   r!   <module>   s   < T