o
    g;                     @   s   d dl Z 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 d dlmZ d dlmZmZ  G dd d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AccuracyWarning)	_qmc_quad)statsspecialc                   @   s   e Zd Zdd Zdd ZdS )TestFixedQuadc                    s>   d dd   }t  fdddd d\}}t||dd	 d S )
N         c                    s   | d  d  S )Nr   r    xnr   c/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/scipy/integrate/tests/test_quadrature.py<lambda>   s    z+TestFixedQuad.test_scalar.<locals>.<lambda>r   r"   -q=rtol)r   r   )selfexpectedgot_r   r"   r$   test_scalar   s   zTestFixedQuad.test_scalarc                    sN   d}t dd|  d d  }t fdd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$   test_vector   s
   zTestFixedQuad.test_vectorN)__name__
__module____qualname__r-   r3   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ejdddg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   ?ۗ?   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   rA   绽|=r'   .<Rr   r   r   rG   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?   3   r@   z6TestQuadrature.test_quadrature_miniter.<locals>.myfuncrC   )   4   r   rA   )miniterrD   rE         ?)r   r   r   r	   )r)   r?   rJ   rW   rH   rI   r   r   r$   test_quadrature_miniter1   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 )NrN   rB   r   )r!   r#   r   r   r$   r?   <   rO   z:TestQuadrature.test_quadrature_single_args.<locals>.myfuncr   r   rP   r;   r(   rQ   r'   rR   rG   r   r   r$   test_quadrature_single_args;   rT   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?   D   r@   z+TestQuadrature.test_romberg.<locals>.myfuncr   rA   r;   rC   rD   rE   )r   r   r   r)   r?   rH   rJ   r   r   r$   test_rombergB   s   zTestQuadrature.test_rombergc                 C   s0   dd }t |dtddd}d}t||dd d S )	Nc                 S   rM   )Ng =`XCr   r=   r   r   r$   r?   L   rO   z0TestQuadrature.test_romberg_rtol.<locals>.myfuncr   rA   rP   rZ   g3>Cr'   )r   r   r   r]   r   r   r$   test_romberg_rtolJ   rL   z TestQuadrature.test_romberg_rtolc                 C   s   t ttdd d S )N      )r   r   r1   r2   )r)   r   r   r$   	test_rombR   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 Nrc   r1   r   r    r   r   r$   r%   Z       z2TestQuadrature.test_romb_gh_3731.<locals>.<lambda>g:0yE>r   )r(   atolzdivmax .4. exceededc                 S   rd   re   rf   r    r   r   r$   r%   `   rg   r   )divmaxr&   )r1   r2   r   r   r   minmaxr   r
   filterr   r   )r)   r!   yrH   val2rI   supval3r   r   r$   test_romb_gh_3731U   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?rD   rE   )mathr   r   r   )r)   rr   valmathexpected_valr   r   r$   test_non_dtypec   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   )rX         @rX         @rU   g     @)rX         @r{   rX          @g     P@r   )      @      @@rx   r~   r}   g     V@rD   g     =AN)r   r   r1   arrayr   )r)   r#   wtserrcoffr   r   r$   test_newton_cotesj   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@)r   gffffff?g @r{         "@N)r1   r   r   dotr   )r)   r!   rm   r   r   exact_integral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 t dg}t |d
}tt||ddd tt||ddd t g d}t |d
}tt||ddd tt||ddd t g dg dg dg}t |d
}g d}g d}tt||dd| tt||dd| t g dg dg dg}t |d
}g d}g d}tt||dd| tt||dd| d S )Nr`   ra   rv   dx@   r   r   r        r   avg)r!   eveng     +@firstg     +@last   rw   )r!   axisr   )rw   rw   rw   rw   )r   r   r      )r   r   r   r   )     e@r   r   )r   r      r   )r   g      a@g      @g      @)r   r   g     @)r1   r2   r   r   linspacer   power)r)   rm   r!   	zero_axisdefault_axisr   r   r$   test_simpson   s:   

zTestQuadrature.test_simpsondroplastFTc                 C   s`   t g dg dg}|r|d d d df }t|dd}tt j|t jddd}t|| d S )N)r   r   r   r   r   r   rU   )r   r   r   r   
      r   r   )r   )dtype)r1   r   r   float64r   )r)   r   rm   resultr*   r   r   r$   test_simpson_2d_integer_no_x   s   
z+TestQuadrature.test_simpson_2d_integer_no_xc                 C   8   t d}d| }tt||dddt||ddd d S )Nr   r   rv   r   )r!   r   r   )r1   r2   r   r   r   r)   rm   r!   r   r   r$   
test_simps   
   
zTestQuadrature.test_simpsN)r4   r5   r6   r   rK   rS   rY   r[   r^   r_   rb   rq   ru   r   r   r   pytestmarkparametrizer   r   r   r   r   r$   r7      s"    
%
r7   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   r   rU   numr   initial)r                r   r   r   r1   r   r   r   )r)   r!   rm   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   rw   r   r   r   r   )r   rv   r         @)r   r         $@     0@)r         !@      2@g     <@)r         )@g      :@g     @D@)r   r   g      A@g     @J@)r        4@g      E@g      P@))r   r   r   )rw   r   r   )rw   r   rw   r   r   r   g@)r   r   )rw   r   r   )	r1   r2   reshaper   r   r   zipr   shape)r)   r!   rm   r   r   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   rw   r   r   )ry         @rz   r}   )r|   r   r         &@)g      D@g      F@g      H@g      J@)g      L@g      N@g      P@g      Q@)r   r{   ry   r   )r   r   rx   g      *@)r   g      3@g      4@      5@)rv   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   )r1   r2   r   r   r   r   r   r   )r)   rm   r!   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   rU   r   )r   r   r   r   Gz?r   )r   r   r   r   r   rw   r   )            r   r   )r   r   )r   r   r   r   r   r   )r)   rm   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   rw   r   r   rv   r   )r   r   r   g+=r'   )r1   r2   r   r   r   r   )r)   r!   rm   r   r   r$   test_cumtrapz  s   
z&TestCumulative_trapezoid.test_cumtrapzN)r4   r5   r6   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`   ra   rv   r   r   r   r   r    r   r   g?)r!   r   g      +@)r1   r2   r   r   r   r   r   r   r$   test_trapezoid!  s   

zTestTrapezoid.test_trapezoidc                 C   r   )Nr   r   rv   r   )r!   r   r   )r1   r2   r   r   r   r   r   r   r$   
test_trapz+  r   zTestTrapezoid.test_trapzN)r4   r5   r6   __doc__r   r   r   r   r   r$   r     s    
r   c                   @   s   e Zd Zdd ZddedfddZej	ddd	gej	d
ddgdd Z
ej	dddgddgddgddggdd Zej	dddgdd Zdd ZdS )TestQMCQuadc                 C   sv  d}t jt|d tdddgddg W d    n1 sw   Y  d}t jt|d tdd ddgddg W d    n1 sCw   Y  d	d
 }d}t jt|d t|ddgddg W d    n1 sjw   Y  d}t jt|d tdd ddgddgdd W d    n1 sw   Y  d}t jt|d tdd ddgddgdd W d    n1 sw   Y  d}t jt|d tdd ddgddgdd W d    n1 sw   Y  d}t jt|d tdd ddgddgtj	dd W d    n	1 sw   Y  d}t jt|d tdd ddgddgdd W d    d S 1 s4w   Y  d S )Nz`func` must be callable.matchza duckr   r   z/`func` must evaluate the integrand at points...c                   S      dS Nr   r   r   r   r   r$   r%   ;      z3TestQMCQuad.test_input_validation.<locals>.<lambda>c                 S   s   | j dksJ t| S r   )ndimr1   sumr    r   r   r$   func=  s   
z/TestQMCQuad.test_input_validation.<locals>.funcz8Exception encountered when attempting vectorized call...z`n_points` must be an integer.c                 S   r   r   r   r    r   r   r$   r%   F  r   g     @)n_pointsz!`n_estimates` must be an integer.c                 S   r   r   r   r    r   r   r$   r%   J  r   r   )n_estimatesz8`qrng` must be an instance of scipy.stats.qmc.QMCEngine.c                 S   r   r   r   r    r   r   r$   r%   N  r   )qrngz8`qrng` must be initialized with dimensionality equal to c                 S   r   r   r   r    r   r   r$   r%   R  r   z,`log` must be boolean \(`True` or `False`\).c                 S   r   r   r   r    r   r   r$   r%   V  r   r   log)
r   raises	TypeErrorqmc_quad
ValueErrorwarnsUserWarningr   qmcSobol)r)   messager   r   r   r$   test_input_validation4  sB   &$z!TestQMCQuad.test_input_validation   r   r   c              
      sF  d}t |t |  fddt jd}tjj||d}t |}t || }t	|||| f|d}	tj
j| |d}
t|d d	|	j }t|	j|
|d
 t ||	j dkscJ t jd}tjj||d}t	fdd|||| fd|d}tt |j|	j t |jt |dk rt jndksJ d S )Nr   c                    s   t j|  S r.   )r   multivariate_normalpdfr    )covmeanr   r$   r   ^     z$TestQMCQuad.basic_test.<locals>.funcl   ^^@E9? )seed)r   r   r;   r   )lower_limitr   gףp=
?)rh   r   c                     s   t  |  S r.   )r1   r   r\   )r   r   r$   r%   n  rg   z(TestQMCQuad.basic_test.<locals>.<lambda>T)r   r   r;   r   r   )r1   zeroseyerandomdefault_rngr   r   r   onesr   r   cdfscstdtritstandard_errorr   integralprodexpimagr   )r)   r   r   signsr   rngr   r9   r:   resrefrh   logresr   )r   r   r   r$   
basic_testX  s.   





,zTestQMCQuad.basic_testr   i   r   r   c                 C   s   |  || d S r.   r  )r)   r   r   r   r   r$   
test_basict  s   zTestQMCQuad.test_basicr  r   r   c                 C   s   | j |d d S )N)r  r  )r)   r  r   r   r$   	test_signy  s   zTestQMCQuad.test_signr   FTc                 C   sz   d}t jt|d tdd ddgddg|d}W d    n1 s"w   Y  |j|r/tj ndks4J |jdks;J d S )Nz-A lower limit was equal to an upper limit, sor   c                 S   r   r   r   r    r   r   r$   r%     r   z'TestQMCQuad.test_zero.<locals>.<lambda>r   r   r   )r   r   r   r   r   r1   infr   )r)   r   r   r  r   r   r$   	test_zero}  s   zTestQMCQuad.test_zeroc                 C   sF   dd }t |dd}tjjdddtjjddd }t|j|d d S )Nc                 S   s   t jj| ddS )Nr   scale)r   normr   r    r   r   r$   r     r   z-TestQMCQuad.test_flexible_input.<locals>.funcr   r   r   r  g{Gz?)r   r   r  r   r   r   )r)   r   r  r  r   r   r$   test_flexible_input  s    zTestQMCQuad.test_flexible_inputN)r4   r5   r6   r   r1   r   r  r   r   r   r  r	  r  r  r   r   r   r$   r   3  s    $$

r   )&r   numpyr1   r   r   r   numpy.testingr   r   r   r	   r
   scipy.integrater   r   r   r   r   r   r   r   r   r   r   r   r   scipy.integrate._quadraturer   r   scipyr   r   r   r   r7   r   r   r   r   r   r   r$   <module>   s    < -T