o
    &?e
E                     @   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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   f/home/www/facesmatcher.com/pyenv/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ejd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   )Zdivmaxr&   )r1   r2   r   r   r   minmaxr   r
   filterr   r   )r)   r!   yrH   Zval2rI   supZ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)   rp   ZvalmathZ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         @rw   rX          @g     P@r   )      @      @@rt   rz   ry   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 @rw         "@N)r1   r{   r   dotr   )r)   r!   rm   r|   r}   Zexact_integralZnumeric_integralr   r   r$   test_newton_cotes2   s   
z!TestQuadrature.test_newton_cotes2zignore::DeprecationWarningc                 C   sd  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dd}dd }tt|||ddd tt|||ddd t ddd}tt||dddd tt||dddd t ddd}t dddd}||}tdD ]D}t||d|d }t j|d!gd"}|D ]/}t	|j
}	|	|td  |t|	 d# d d |t|	 d d d  }
t||j
 |
 qqt dd$d
}||}d%D ]1}t|||d#d }d|d d df |d d df   |d d df |d d df   }
t||
 qt d&d'd'}t d(d'd'd'}||}tdD ]E}t|||d)}t j|d!gd"}|D ]0}t	|j
}	|	|td  |t|	 d# d d |t|	 d d d  }
t||j
 |
 q[qHt 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-}d.gd }tt||dd)| tt||d#d)| t g d,g d,g d/g}t |d
}g d0}g d1}tt||dd)| tt||d#d)| d S )2Nr`   ra   rr   dx@   r   r   r        r   avgr!   eveng     +@firstg     +@last   r   c                 S   s   | d S )Nr   r   r    r   r   r$   f   s   z&TestQuadrature.test_simpson.<locals>.fr         5@g*5@rD   r   )r   r   r   gUUUUU\@         P@rs   )r!   r   axismulti_index)flags   )r   r   r   r      rU   }   )r!   r   r   )rs   rs   rs   rs   )r   r   r   r   )r   r   r   r   竪Je@)r   r   r   r   )r   g      a@g      @g      @)r   r   g*U@)r1   r2   r   r   linspacer   reshaperangeZnditerlistr   insertslicetupler{   power)r)   rm   r!   r   r9   iritr,   idxintegralr   Z	zero_axisZdefault_axisr   r   r$   test_simpson   s   


0D
0
zTestQuadrature.test_simpsonc                 C   sR   t ddd}|d }t  t||dd W d    d S 1 s"w   Y  d S )Nr   rs   r   r   r   r   )r1   r   pytestZdeprecated_callr   r)   r!   rm   r   r   r$   test_simpson_even_is_deprecated   s
   
"z.TestQuadrature.test_simpson_even_is_deprecated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   )Zdtype)r1   r{   r   Zfloat64r   )r)   r   rm   resultr*   r   r   r$   test_simpson_2d_integer_no_x   s   
z+TestQuadrature.test_simpson_2d_integer_no_xc                 C   s4   t d}d| }tt||ddt||dd d S )NrU   r   rr   r!   r   )r1   r2   r   r   r   r)   rm   r!   r   r   r$   
test_simps   s   
zTestQuadrature.test_simpsN)r4   r5   r6   r   rK   rS   rY   r[   r^   r_   rb   ro   rq   r~   r   r   markfilterwarningsr   r   parametrizer   r   r   r   r   r$   r7      s&    


W
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   rs   r   r   r   r   )r   rr   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   )rs   r   r   )rs   r   rs   r   r   r   g@)r   r   )rs   r   r   )	r1   r2   r   r   r{   r   zipr   shape)r)   r!   rm   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   rs   r   r   )ru         @rv   ry   )rx   r   r         &@)g      D@g      F@g      H@g      J@)g      L@g      N@r   g      Q@)r   rw   ru   r   )r   r   rt   g      *@)r   g      3@g      4@r   )rr   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!   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   rU   r   )r   r   r   r   Gz?r   )r   r   r   r   r   rs   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   rs   r   r   rr   r   )r   r   r   +=r'   )r1   r2   r   r   r   r   r   r   r   r$   test_cumtrapzQ  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   rr   r   r   r   r   r    r   r   g?r   g      +@)r1   r2   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   rr   r   )r!   r   r   )r1   r2   r   r   r   r   r   r   r$   
test_trapzg  s
   
zTestTrapezoid.test_trapzN)r4   r5   r6   __doc__r   r   r   r   r   r$   r   Z  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%   w      z3TestQMCQuad.test_input_validation.<locals>.<lambda>c                 S   s   | j dksJ t| S r   )ndimr1   sumr    r   r   r$   funcy  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%     r   g     @)n_pointsz!`n_estimates` must be an integer.c                 S   r   r   r   r    r   r   r$   r%     r   r   )n_estimatesz8`qrng` must be an instance of scipy.stats.qmc.QMCEngine.c                 S   r   r   r   r    r   r   r$   r%     r   )qrngz8`qrng` must be initialized with dimensionality equal to c                 S   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%     r   r   log)
r   Zraises	TypeErrorr   
ValueErrorwarnsUserWarningr   qmcSobol)r)   messager   r   r   r$   test_input_validationp  sB   &$z!TestQMCQuad.test_input_validation   r   r   c              	      sX  d}t |t |  fddt jd}tjj||d}t |}t || }t	|||||d}	tj
j| |d}
t|d d	|	j }t|	j|
|d
 t ||	j dks`J t jd}tjj||d}t	fdd||||d|d}tt |j|	jdd t |jt |dk rt jndksJ tt |j|	jddd d S )Nr   c                    s   t j| j S r.   )r   multivariate_normalpdfTr    )covmeanr   r$   r     s   z$TestQMCQuad.basic_test.<locals>.funcl   ^^@E9? )seed)r   r   r   )Zlower_limitr   gףp=
?)ri   r   c                     s   t  |  S r.   )r1   r   r\   )r   r   r$   r%     rg   z(TestQMCQuad.basic_test.<locals>.<lambda>T)r   r   r   r   r   r'   gؗҜ<rh   )r1   ZzeroseyerandomZdefault_rngr   r   r   onesr   r   cdfscZstdtritstandard_errorr   r   prodexpimagr   )r)   r   r   signsr   rngr   r9   r:   resrefri   Zlogresr   )r   r   r   r$   
basic_test  s4   



(
zTestQMCQuad.basic_testr   i   r   r   c                 C   s   |  || d S r.   r  )r)   r   r   r   r   r$   
test_basic  s   zTestQMCQuad.test_basicr  r   r   c                 C   s   | j |d d S )N)r  r  )r)   r  r   r   r$   	test_sign  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     s   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   o  s    $$

r   )$r   numpyr1   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   Zscipyr   r   r   r   r7   r   r   r   r   r   r   r$   <module>   s    @ iT