o
    Ebr&                     @   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   G/usr/lib/python3/dist-packages/scipy/integrate/tests/test_quadrature.py<lambda>   s    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"      s    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+   r1   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 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      t ||  |t|   t S r,   r   r   r    zr   r   r!   myfunc#      z.TestQuadrature.test_quadrature.<locals>.myfuncr   r   ?ۗ?   Zdecimal)r   r   r   r&   r=   valerr	table_valr   r   r!   test_quadrature!      zTestQuadrature.test_quadraturec                 C   s4   dd }t |dtddd\}}d}t||dd d S )Nc                 S       dt ||  |t|    t S )NY)	kRr   r;   r   r   r!   r=   *       z3TestQuadrature.test_quadrature_rtol.<locals>.myfuncr   r?   绽|=r$   .<Rr   r   r   rD   r   r   r!   test_quadrature_rtol)      z#TestQuadrature.test_quadrature_rtolc                 C   sJ   dd }d}dD ]}t |dtd|d\}}t||dd	 t|d
k  qd S )Nc                 S   r:   r,   r   r;   r   r   r!   r=   2   r>   z6TestQuadrature.test_quadrature_miniter.<locals>.myfuncrA   )   4   r   r?   )miniterrB   rC         ?)r   r   r   r	   )r&   r=   rG   rT   rE   rF   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 )NrK   r@   r   )r   r    r   r   r!   r=   ;   rL   z:TestQuadrature.test_quadrature_single_args.<locals>.myfuncr   r   rM   r9   r%   rN   r$   rO   rD   r   r   r!   test_quadrature_single_args:   rQ   z*TestQuadrature.test_quadrature_single_argsc                 C   s.   dd }t |dtdd}d}t||dd d S )	Nc                 S   r:   r,   r   r;   r   r   r!   r=   C   r>   z+TestQuadrature.test_romberg.<locals>.myfuncr   r?   )r9   rA   rB   rC   )r   r   r   r&   r=   rE   rG   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   rJ   )Ng =`XCr   r;   r   r   r!   r=   K   rL   z0TestQuadrature.test_romberg_rtol.<locals>.myfuncr   r?   rM   rW   g3>Cr$   )r   r   r   rY   r   r   r!   test_romberg_rtolI   rI   z TestQuadrature.test_romberg_rtolc                 C   s   t ttdd d S )N      )r   r   r/   r0   )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 }|	t
d td	d | | d
d}W d    n1 sHw   Y  t||ddd d S )Nr\   皙?c                 S      t d|  S Nr_   r/   r   r   r   r   r!   r"   Y       z2TestQuadrature.test_romb_gh_3731.<locals>.<lambda>g:0yE>r   )r%   Zatolzdivmax .4. exceededc                 S   r`   ra   rb   r   r   r   r!   r"   _   rc   r   )Zdivmaxr#   )r/   r0   r   r   r   minmaxr   r
   filterr   r   )r&   r   yrE   Zval2rF   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?rB   rC   )mathr   r   r   )r&   rj   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   )rU         @rU         @rR   g     @)rU         @rq   rU          @g     P@r   )      @      @@rn   rt   rs   g     V@rB   g     =AN)r   r   r/   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@)ry   gffffff?g @rq         "@N)r/   ru   r   dotr   )r&   r   rg   rv   rw   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 )Nr\   r]   rl   dx@   r   r   r       r   Zavg)r   eveng     +@firstg     +@Zlast   )r/   r0   r   r   linspacer&   rg   r   r   r   r!   test_simpson   s   

zTestQuadrature.test_simpsonc                 C   8   t d}d| }tt||dddt||ddd d S )Nr   r   rl   r   )r   r   r   )r/   r0   r   r   r   r   r   r   r!   
test_simps   
   
zTestQuadrature.test_simpsN)r2   r3   r4   r   rH   rP   rV   rX   rZ   r[   r^   ri   rk   rx   r}   r   r   r   r   r   r!   r5      s    
r5   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   rR   Znumr   initial)ry                r   ry   r   r/   r   r   r   )r&   r   rg   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| q=d S )N   rm   r   r   r   r   )ry   rl   rz         @)ry   r         $@     0@)ry         !@      2@g     <@)ry         )@g      :@g     @D@)ry   r   g      A@g     @J@)ry        4@g      E@g      P@))r   r   r   )rm   r   r   )rm   r   rm   r   r   r   g@)r   axis)rm   r   r   )	r/   r0   reshaper   ru   r   zipr   shape)r&   r   rg   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 ]\}}t||d |j|  |d d}t|| qUd S )Nr   rm   r   r   )ro         @rp   rs   )rr   r{   r         &@)g      D@g      F@g      H@g      J@)g      L@g      N@g      P@g      Q@)rz   rq   ro   r   )r   r   rn   g      *@)r   g      3@g      4@      5@)rl   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   )r/   r0   r   ru   r   r   r   r   )r&   rg   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   rR   r   )r   r   r   ry   Gz?r   )r   r   r   r   ry   rm   r~   )            r   ry   )r   r   )r   r   r   r   ry   r   )r&   rg   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   rm   r   r   rl   r   )r   r   r   g+=r$   )r/   r0   r   r   r   r   )r&   r   rg   r   r   r!   test_cumtrapz   s   
z&TestCumulative_trapezoid.test_cumtrapzN)r2   r3   r4   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 )Nr\   r]   rl   r~   r   r   r   r   r   r   g?)r   r   g      +@)r/   r0   r   r   r   r   r   r   r!   test_trapezoid   s   

zTestTrapezoid.test_trapezoidc                 C   r   )Nr   r   rl   r   )r   r   r   )r/   r0   r   r   r   r   r   r   r!   
test_trapz  r   zTestTrapezoid.test_trapzN)r2   r3   r4   __doc__r   r   r   r   r   r!   r      s    
r   )Znumpyr/   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   r5   r   r   r   r   r   r!   <module>   s    < T