a
    BCCf/u                     @   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 d dlmZ d dlm  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"m#Z# d dl$m%Z% d dl&m'Z'm(Z( G dd	 d	Z)e j*+d
G dd dZ,e j*-deegdd Z.G dd dZ/G dd dZ0G dd dZ1dddddddZ2G dd dZ3dS )    Ncossinpi)assert_equalassert_almost_equalassert_allcloseassert_suppress_warnings)given)
quadraturerombergrombnewton_cotescumulative_trapezoidcumtrapztrapz	trapezoidquadsimpsonsimps
fixed_quadAccuracyWarningqmc_quadcumulative_simpson)%_cumulative_simpson_unequal_intervals)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"   a/var/www/html/django/DPS/env/lib/python3.9/site-packages/scipy/integrate/tests/test_quadrature.py<lambda>       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(      r)   z+TestFixedQuad.test_vector.<locals>.<lambda>r   r%   r*   r+   )nparanger   r   )r-   r&   r.   r/   r0   r"   r3   r'   test_vector   s
    zTestFixedQuad.test_vectorN)__name__
__module____qualname__r1   r7   r"   r"   r"   r'   r      s   r   ignore::DeprecationWarningc                   @   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 d S r2   )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 r2   r   r$   r&   zr"   r"   r'   myfunc*   s    z.TestQuadrature.test_quadrature.<locals>.myfuncr   r!   ?ۗ?   decimal)r   r   r   r-   rC   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   rA   r"   r"   r'   rC   1   s    z3TestQuadrature.test_quadrature_rtol.<locals>.myfuncr   rD   绽|=r+   .<Rr   r   r   rJ   r"   r"   r'   test_quadrature_rtol0   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 r2   r   rA   r"   r"   r'   rC   9   s    z6TestQuadrature.test_quadrature_miniter.<locals>.myfuncrF   )   4   r   rD   )miniterrG   rH         ?)r   r   r   r	   )r-   rC   rM   rV   rK   rL   r"   r"   r'   test_quadrature_miniter7   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 )NrO   rE   r   )r$   r&   r"   r"   r'   rC   B   s    z:TestQuadrature.test_quadrature_single_args.<locals>.myfuncr   r!   rP   r@   r,   rQ   r+   rR   rJ   r"   r"   r'   test_quadrature_single_argsA   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 r2   r   rA   r"   r"   r'   rC   J   s    z+TestQuadrature.test_romberg.<locals>.myfuncr   rD   r@   rF   rG   rH   )r   r   r   r-   rC   rK   rM   r"   r"   r'   test_rombergH   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   rA   r"   r"   r'   rC   R   s    z0TestQuadrature.test_romberg_rtol.<locals>.myfuncr   rD   rP   rY   g3>Cr+   )r   r   r   r\   r"   r"   r'   test_romberg_rtolP   s    z TestQuadrature.test_romberg_rtolc                 C   s   t ttdd d S )N      )r   r   r5   r6   r-   r"   r"   r'   	test_rombX   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 )Nr_   皙?c                 S   s   t d|  S Nrc   r5   r   r#   r"   r"   r'   r(   `   r)   z2TestQuadrature.test_romb_gh_3731.<locals>.<lambda>g:0yE>r   r,   atolzdivmax .4. exceededc                 S   s   t d|  S rd   re   r#   r"   r"   r'   r(   f   r)   r   )Zdivmaxr*   )r5   r6   r   r   r   minmaxr   r
   filterr   r   )r-   r$   yrK   Zval2rL   supZval3r"   r"   r'   test_romb_gh_3731[   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?rG   rH   )mathr   r   r   )r-   rn   ZvalmathZexpected_valr"   r"   r'   test_non_dtypei   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!   )rW         @rW         @rT   g     @)rW         @ru   rW          @g     P@r   )      @      @@rr   rx   rw   g     V@rG   g     =AN)r   r   r5   arrayr   )r-   r&   wtserrcoffr"   r"   r'   test_newton_cotesp   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 @ru         "@N)r5   ry   r   dotr   )r-   r$   rk   rz   r{   Zexact_integralZnumeric_integralr"   r"   r'   test_newton_cotes2   s    
z!TestQuadrature.test_newton_cotes2r;   c                 C   sj  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 ]}t||d|d }t j|d!gd"}|D ]`}t	|j
}	|	|td  |t|	 d# d d |t|	 d d d  }
t||j
 |
 qvqNt dd$d
}||}d%D ]d}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 ]}t|||d)}t j|d!gd"}|D ]`}t	|j
}	|	|td  |t|	 d# d d |t|	 d d d  }
t||j
 |
 qqt 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_   r`   rp   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@rG   r~   )r   r   r   gUUUUU\@         P@rq   )r$   r   axismulti_index)flags   )r   r   r   r      rT   }   r$   r   r}   )rq   rq   rq   rq   )r    r!   r   r   )r}   r}   r}   r}   竪Je@)r    r   r   r   )r}   g      a@g      @g      @)r   r   g*U@)r5   r6   r   r   linspacer   reshaperangeZnditerlistr   insertslicetuplery   power)r-   rk   r$   r   r>   iritr0   idxintegralr   Z	zero_axisZdefault_axisr"   r"   r'   test_simpson   s    


0D
0
zTestQuadrature.test_simpsonc                 C   s   t ddd}|d }tjdd t||dd W d    n1 sF0    Y  tjd	d t|| W d    n1 s|0    Y  d S )
Nr   rq   r   r!   z The 'even' keyword is deprecatedmatchr   r   zuse keyword arguments)r5   r   pytestdeprecated_callr   r-   r$   rk   r"   r"   r'   test_simpson_deprecations   s    ,z(TestQuadrature.test_simpson_deprecations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   rT   )r   r   r!   r   
      r   r   r   )Zdtype)r5   ry   r   float64r   )r-   r   rk   resultr.   r"   r"   r'   test_simpson_2d_integer_no_x   s    
z+TestQuadrature.test_simpson_2d_integer_no_xc                 C   s`   t d}d| }tjdd. tt||ddt||dd W d    n1 sR0    Y  d S )NrT   r!   r   r   rp   r$   r   )r5   r6   r   r   r   r   r   r-   rk   r$   r"   r"   r'   
test_simps  s    
zTestQuadrature.test_simpsN)r8   r9   r:   r   rN   rS   rX   rZ   r]   r^   rb   rm   ro   r|   r   r   markfilterwarningsr   r   parametrizer   r   r"   r"   r"   r'   r<   #   s$   


W
r<   funcc                 C   sL   d| j  d}tj|d | tjdd W d    n1 s>0    Y  d S )Nz`scipy.integrate.z` is deprecated...r   r   r    )r8   r   r   r5   exp)r   messager"   r"   r'   test_deprecate_integrator  s    r   c                   @   sV   e Z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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!   rT   numr   initial)r}                r   r}   r    r5   r   r   r   )r-   r$   rk   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   rq   r!   r   r   r   )r}   rp   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   )rq   r    r   )rq   r!   rq   r   r    r!   )r   r   )rq   r!   r   )	r5   r6   r   r   ry   r   zipr   shape)r-   r$   rk   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   rq   r!   r   )rs         @rt   rw   )rv   r   r         &@)g      D@g      F@g      H@g      J@)g      L@g      N@r   g      Q@)r~   ru   rs   r   )r   r   rr         *@)r   g      3@g      4@r   )rp   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   )r5   r6   r   ry   r   r   r   r   )r-   rk   r$   Zys_expectedr   r   r   r"   r"   r'   test_y_nd_x_1d6  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!   rT   r   )r   r   r   r}   r   r   )r   r   r   r   r}   rq   r   )            r   r}   )r   r   )r   r   r   r   r}   r   )r-   rk   r   r   r"   r"   r'   test_x_noneN  s    


z$TestCumulative_trapezoid.test_x_noner   r    rp   c              	   C   sz   t jdddd}tjdd t||d}W d   n1 s>0    Y  t||gt |dd |dd	  d
  dS )z4If initial is not None or 0, a ValueError is raised.r   r   r   z	`initial`r   r   Nr    r   r!   )r5   r   r   r   r   r   Zcumsum)r-   r   rk   resr"   r"   r'   test_initial_warninga  s    *z-TestCumulative_trapezoid.test_initial_warningc                 C   s<   t jtdd tg d W d    n1 s.0    Y  d S )NAt least one point is requiredr   rk   )r   raises
ValueErrorr   ra   r"   r"   r'   test_zero_len_yk  s    z(TestCumulative_trapezoid.test_zero_len_yc              
   C   sr   t dddd}|}tjdd: tt||dddd	t||dddd	d
d W d    n1 sd0    Y  d S )Nr   rq   r!   r   r   r   rp   r   )r   r   r   +=r+   )r5   r6   r   r   r   r   r   r   r   r"   r"   r'   test_cumtrapzo  s    z&TestCumulative_trapezoid.test_cumtrapzN)r8   r9   r:   r   r   r   r   r   r   r   r   r   r   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	S )
TestTrapezoidc                 C   sF   t ddd}tt d|d  t dt j  dd}t|d d S )Nr   g?g      r!   r   r    )r5   r6   r   r   sqrtr   r   )r-   r$   r   r"   r"   r'   test_simplez  s    *zTestTrapezoid.test_simplec                 C   s&  t ddd}t ddd}t ddd}t ||d |d   }|d  d  < |d  d  < t ||d |d   }|d  d  < |d  d  < t ||d |d   }|d  d  < |d  d  < |d d d d f |d d d d f  |d d d d f  }||d d d d f  jdd}||d d d d f  jdd}	||d d d d f  jdd}
t||d d d d f dd	}t|| t||d d d d f dd	}t||	 t||d d d d f dd	}t||
 t||dd	}t|| t||dd	}t||	 t||dd	}t||
 d S )
Nr   r    rq   r!   r      r   r   r   )r5   r   Z	ones_likesumr   r   )r-   r$   rk   rB   ZwxZwyZwzqZqxZqyZqzr   r"   r"   r'   	test_ndim  s8    6




zTestTrapezoid.test_ndimc                 C   s   t d}|| }|dk}t jj||d}d}tt||| t jj||d}tt||| t jj||d}tt||| d S )NrT   r!   )maskr   )r5   r6   mary   r   r   )r-   r$   rk   r   Zymr   Zxmr"   r"   r'   test_masked  s    
zTestTrapezoid.test_maskedc              	   C   sd   t d}d| }tjdd2 tt||dddt||ddd W d    n1 sV0    Y  d S )Nr   r!   r   r   rp   r   )r$   r   r   )r5   r6   r   r   r   r   r   r   r"   r"   r'   test_trapz_alias  s    
zTestTrapezoid.test_trapz_aliasN)r8   r9   r:   r   r   r   r   r"   r"   r"   r'   r   y  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   sz  d}t jt|d$ tdddgddg W d    n1 s<0    Y  d}t jt|d( tdd ddgddg W d    n1 s0    Y  d	d
 }d}t jt|d$ t|ddgddg W d    n1 s0    Y  d}t jt|d, tdd ddgddgdd W d    n1 s$0    Y  d}t jt|d, tdd ddgddgdd W d    n1 st0    Y  d}t jt|d, tdd ddgddgdd W d    n1 s0    Y  d}t jt|d4 tdd ddgddgtj	dd W d    n1 s0    Y  d}t jt|d, tdd ddgddgdd W d    n1 sl0    Y  d S )Nz`func` must be callable.r   za duckr   r    z/`func` must evaluate the integrand at points...c                   S   s   dS Nr    r"   r"   r"   r"   r'   r(     r)   z3TestQMCQuad.test_input_validation.<locals>.<lambda>c                 S   s   | j dksJ t| S r   )ndimr5   r   r#   r"   r"   r'   r     s    z/TestQMCQuad.test_input_validation.<locals>.funcz8Exception encountered when attempting vectorized call...z`n_points` must be an integer.c                 S   s   dS r   r"   r#   r"   r"   r'   r(     r)   g     @)n_pointsz!`n_estimates` must be an integer.c                 S   s   dS r   r"   r#   r"   r"   r'   r(     r)   r   )n_estimatesz8`qrng` must be an instance of scipy.stats.qmc.QMCEngine.c                 S   s   dS r   r"   r#   r"   r"   r'   r(     r)   )qrngz8`qrng` must be initialized with dimensionality equal to c                 S   s   dS r   r"   r#   r"   r"   r'   r(     r)   z,`log` must be boolean \(`True` or `False`\).c                 S   s   dS r   r"   r#   r"   r"   r'   r(     r)   r   log)
r   r   	TypeErrorr   r   warnsUserWarningr   qmcSobol)r-   r   r   r"   r"   r'   test_input_validation  s2    262<<<Dz!TestQMCQuad.test_input_validation   r   r!   c              	      s\  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sJ t jd}tjj||d}t	fdd||||d|d}tt |j|	jdd t |jt |dk r2t jndks>J tt |j|	jddd d S )Nr!   c                    s   t j| j S r2   )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=
?)rg   r   c                     s   t  |  S r2   )r5   r   r[   )r   r"   r'   r(     r)   z(TestQMCQuad.basic_test.<locals>.<lambda>T)r   r   r   r   r   r+   gؗҜ<rf   )r5   zeroseyerandomdefault_rngr   r   r   onesr   r  cdfr   Zstdtritstandard_errorr   r   prodr   imagr   )r-   r   r   signsr   rngr   r>   r?   r   refrg   Zlogresr"   )r  r   r  r'   
basic_test  s4    



,zTestQMCQuad.basic_testr   i   r   r   c                 C   s   |  || d S r2   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 sD0    Y  |j|r^tj ndkshJ |jdksvJ d S )Nz-A lower limit was equal to an upper limit, sor   c                 S   s   dS r   r"   r#   r"   r"   r'   r(     r)   z'TestQMCQuad.test_zero.<locals>.<lambda>r   r    r   )r   r   r   r   r   r5   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)r8   r9   r:   r  r5   r  r  r   r   r   r  r  r  r  r"   r"   r"   r'   r     s   $$

r   r   r$   r   r   r   c          	         sf  | j | dk r>|d u r(t| |||d dS |t| |||dd S t| |d} t|dkrht||dn|}t|dkrt||dn|}t|dkrt||dn|}| j d  |d ur|t  n|}|d u }|rdn|}t|| j }t|| j d d d }tj| ||fdd} fdd	}t|d|}|rP|d
dd f n|}t|d|}|S )Nrq   )r$   r   r   r   r   r   r    )r    r   c                    s.   t | d   |  d   | d  d  dS )Nr!   )r$   r   )r   )rB   r%   r"   r'   r   8  s    z*cumulative_simpson_nd_reference.<locals>.f.)	r   r   r5   Zmoveaxisr   r6   Zbroadcast_toconcatenateZapply_along_axis)	rk   r$   r   r   r   Zinitial_was_nonerB   r   r   r"   r%   r'   cumulative_simpson_nd_reference  s(       
r!  c                   @   s  e Zd ZedZed Zej	ddej	dddd Z
ej	ded	d
ej	ddej	ddej	ddej	dddd Zej	ddeg ddfdeeg dgeegdfdeeeegeeegddfdeg g dfdeddfd eed!dfd"eed!d#fd$ed%ed!d&fgd'd( Zd)d* Zd+d, Zeejejejdd
d-d.ejd/d-d0d1d2d3 d4d5d6d7 Zeejejejdd
d-d.ejd/d-d0d1d8d3 d4d5d9d: Zd%S );TestCumulativeSimpsonr   r!   use_dx)FTuse_initialc                 C   sr  t jd}d}|rdnd}| }|dkr<t ||nt || |  }t |d d d t jf }||d d d t jf }	t j|	||  dd}
t j|	||d   |d  dd}|r|n||d  dd  }|r|d nd }|rd|ind	|i}t|
fi |d
|i}|s0t||dd n>|r:dnd}t||dd t||d d ||d d dd d S )N   F*BG r   rq   r!   r    r   r   r   r$   r   gV瞯<r+   g{Gzd?)	r5   r  r  sortr6   Znewaxisr   r   r   )r-   r#  r$  r  r&   orderr   r$   r   crk   Yr  r   kwargr   Zi0r"   r"   r'   r   F  s(    "zTestCumulativeSimpson.test_1dr   rq   x_ndim)r    rq   x_len)r    r!   rG   i_ndim)Nr   rq   r   )NTc                 C   s  t jd}dd|g}|d ||  ||< |d< | }d||< |dkrL|nd}	|j|d}
d	\}}|r|dkr||j|dn| }n4|dkrt j|j|d|d
nt |j|| d}|d u rd n
|j|	d}t|
||||d}t|
||||d}t jj||dd d S )Nr%  rT      r   r    rq   r"   size)NNr   r  gV瞯<r+   )	r5   r  r  copyr&  r   r!  testingr   )r-   r   r,  r-  r.  r   r  r   Zshape_len_1Zi_shaperk   r$   r   r   r  r"   r"   r'   test_ndi  s"    
zTestCumulativeSimpson.test_nd)r   kwarg_updatezx must be strictly increasing)r!   r!   rq   r   r#   )r!   r!   r   r   r$   rk   r   )r$   rk   r   r   z-`axis=4` is not valid for `y` with `y.ndim=1`r   z+shape of `x` must be the same as `y` or 1-DrT   z'`initial` must either be a scalar or...r   z"`dx` must either be a scalar or...Nr   c                 C   sb   t | j| jd d dd}tjt|d* tf i t |fi | W d    n1 sT0    Y  d S )Nr   )rk   r$   r   r   r   r   )dicty0x0r   r   r   r   )r-   r   r5  Zkwargs0r"   r"   r'   test_simpson_exceptions  s    z-TestCumulativeSimpson.test_simpson_exceptionsc                 C   s2   t jd}|jdd}t|dd}t|d d S )Nr%  r   r0  r   r   )r5   r  r  r   r   )r-   r  rk   r   r"   r"   r'   test_special_cases  s    z(TestCumulativeSimpson.test_special_casesc                 C   s   t j|dd}t||}t|ddddf |ddddf ddddf }g |jdd dR }t jt ||dddf |dddf  t |gdd}d|ddddf< |S )aj  `cumulative_simpson` and `simpson` can be tested against other to verify
        they give consistent results. `simpson` will iteratively be called with
        successively higher upper limits of integration. This function calculates
        the theoretical correction required to `simpson` at even intervals to match
        with `cumulative_simpson`.
        r   r   .Nr    r}   r!   )r5   diffr   r   r   r	  )r-   rk   r$   dZsub_integrals_h1Zsub_integrals_h2Zzeros_shapetheoretical_differencer"   r"   r'   1_get_theoretical_diff_between_simps_and_cum_simps  s"    
 
zGTestCumulativeSimpson._get_theoretical_diff_between_simps_and_cum_simpsr   )Zmax_dimsZmin_sideZmax_sider   F)	allow_nanc                 C   s   t | dkS NgHz>absr#   r"   r"   r'   r(     r)   zTestCumulativeSimpson.<lambda>)elementsr   c                 C   sp   dd }t |dd}||}| j|t|jd d}tj|ddd	f |ddd	f |ddd	f   d	S )
e  Theoretically, the output of `cumulative_simpson` will be identical
        to `simpson` at all even indices and in the last index. The first index
        will not match as `simpson` uses the trapezoidal rule when there are only two
        data points. Odd indices after the first index are shown to match with
        a mathematically-derived correction.c                    s,   t j fddtd jd d D ddS )Nc                    s$   g | ]}t  d d|f ddqS ).NrW   r   r   .0r   r   r"   r'   
<listcomp>  r)   z|TestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dx.<locals>.simpson_reference.<locals>.<listcomp>r!   r   r    r   r5   stackr   r   r   r"   r   r'   simpson_reference  s    "zhTestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dx.<locals>.simpson_referencerW   r   r   r#   .r    N)r   r?  r5   r6   r   r3  r   )r-   rk   rL  r   r  r>  r"   r"   r'   7test_cumulative_simpson_against_simpson_with_default_dx  s    ,zMTestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dxc                 C   s   t | dkS rA  rB  r#   r"   r"   r'   r(     r)   c                 C   s   d|j d d  }tjdd|j d d}|dd d| tjddt|d   |dd< dd	 }t||d
}|||}| ||}tj	|dddf |dddf |dddf   dS )rE  r   r   r    r   r   Nrc   c                    s.   t j fddtdjd d D ddS )Nc                    s0   g | ](}t d d|f  d d|f dqS ).Nr#   rF  rG  r6  r"   r'   rI    r)   zlTestCumulativeSimpson.test_cumulative_simpson_against_simpson.<locals>.simpson_reference.<locals>.<listcomp>r!   r   r    r   rJ  )rk   r$   r"   r6  r'   rL    s    "zXTestCumulativeSimpson.test_cumulative_simpson_against_simpson.<locals>.simpson_referencer#   .)
r   r5   r   r  uniformlenr   r?  r3  r   )r-   rk   intervalr$   rL  r   r  r>  r"   r"   r'   'test_cumulative_simpson_against_simpson  s    4
,z=TestCumulativeSimpson.test_cumulative_simpson_against_simpson)r8   r9   r:   r5   r6   r9  r8  r   r   r   r   r4  r7  r:  r;  r?  r   hyp_numZarraysr   Zarray_shapesstZfloatsrj   rM  rQ  r"   r"   r"   r'   r"  B  sP   
!


r"  )4r   numpyr5   r   r   r   Znumpy.testingr   r   r   r	   r
   Z
hypothesisr   Zhypothesis.strategies
strategiesrS  Zhypothesis.extra.numpyextrarR  Zscipy.integrater   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zscipy.integrate._quadraturer   Zscipyr   r   r   r   r   r<   r   r   r   r   r   r!  r"  r"   r"   r"   r'   <module>   s(   D
 l
cE_%