o
    5Bi/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"   e/var/www/html/Trade-python/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"   r2   r'   test_vector   s
   zTestFixedQuad.test_vectorN)__name__
__module____qualname__r0   r6   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 r1   )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 r1   r   r$   r&   zr"   r"   r'   myfunc*      z.TestQuadrature.test_quadrature.<locals>.myfuncr   r!   ?ۗ?   decimal)r   r   r   r,   rC   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   rA   r"   r"   r'   rC   1       z3TestQuadrature.test_quadrature_rtol.<locals>.myfuncr   rE   绽|=r*   .<Rr   r   r   rK   r"   r"   r'   test_quadrature_rtol0      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@   r1   r   rA   r"   r"   r'   rC   9   rD   z6TestQuadrature.test_quadrature_miniter.<locals>.myfuncrG   )   4   r   rE   )miniterrH   rI         ?)r   r   r   r	   )r,   rC   rN   r[   rL   rM   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 )NrR   rF   r   )r$   r&   r"   r"   r'   rC   B   rS   z:TestQuadrature.test_quadrature_single_args.<locals>.myfuncr   r!   rT   r?   r+   rU   r*   rV   rK   r"   r"   r'   test_quadrature_single_argsA   rX   z*TestQuadrature.test_quadrature_single_argsc                 C   s.   dd }t |dtdd}d}t||dd d S )	Nc                 S   r@   r1   r   rA   r"   r"   r'   rC   J   rD   z+TestQuadrature.test_romberg.<locals>.myfuncr   rE   r?   rG   rH   rI   )r   r   r   r,   rC   rL   rN   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   rQ   )Ng =`XCr   rA   r"   r"   r'   rC   R   rS   z0TestQuadrature.test_romberg_rtol.<locals>.myfuncr   rE   rT   r^   g3>Cr*   )r   r   r   ra   r"   r"   r'   test_romberg_rtolP   rP   z TestQuadrature.test_romberg_rtolc                 C   s   t ttdd d S )N      )r   r   r4   r5   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 }|	t
d td	d | | d
d}W d    n1 sHw   Y  t||ddd d S )Nrd   皙?c                 S      t d|  S Nrh   r4   r   r#   r"   r"   r'   r(   `       z2TestQuadrature.test_romb_gh_3731.<locals>.<lambda>g:0yE>r   r+   atolzdivmax .4. exceededc                 S   ri   rj   rk   r#   r"   r"   r'   r(   f   rl   r   )divmaxr)   )r4   r5   r   r   r   minmaxr   r
   filterr   r   )r,   r$   yrL   val2rM   sup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?rH   rI   )mathr   r   r   )r,   rx   valmath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!   )r\         @r\         @rY   g     @)r\         @r   r\          @g     P@r   )      @      @@r~   r   r   g     V@rH   g     =AN)r   r   r4   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 @r         "@N)r4   r   r   dotr   )r,   r$   rs   r   r   exact_integralnumeric_integralr"   r"   r'   test_newton_cotes2   s   
z!TestQuadrature.test_newton_cotes2r:   c                 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 )2Nrd   re   r|   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@rH   r   )r   r   r   gUUUUU\@         P@r}   )r$   r   axismulti_index)flags   )r   r   r   r      rY   }   r$   r   r   )r}   r}   r}   r}   )r    r!   r   r   )r   r   r   r   竪Je@)r    r   r   r   )r   g      a@g      @g      @)r   r   g*U@)r4   r5   r   r   linspacer   reshaperangenditerlistr   insertslicetupler   power)r,   rs   r$   r   r=   iritr/   idxintegralr   	zero_axis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 s#w   Y  tjd	d t|| W d    d S 1 s?w   Y  d S )
Nr   r}   r   r!   z The 'even' keyword is deprecatedmatchr   r   zuse keyword arguments)r4   r   pytestdeprecated_callr   r,   r$   rs   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   rY   )r   r   r!   r   
      r   r   r   )dtype)r4   r   r   float64r   )r,   r   rs   resultr-   r"   r"   r'   test_simpson_2d_integer_no_x   s   
z+TestQuadrature.test_simpson_2d_integer_no_xc                 C   sb   t d}d| }tjdd tt||ddt||dd W d    d S 1 s*w   Y  d S )NrY   r!   r   r   r|   r$   r   )r4   r5   r   r   r   r   r   r,   rs   r$   r"   r"   r'   
test_simps  s   
"zTestQuadrature.test_simpsN)r7   r8   r9   r   rO   rW   r]   r_   rb   rc   rg   rw   r{   r   r   r   markfilterwarningsr   r   parametrizer   r   r"   r"   r"   r'   r;   #   s&    


W
r;   funcc                 C   sN   d| j  d}tj|d | tjdd W d    d S 1 s w   Y  d S )Nz`scipy.integrate.z` is deprecated...r   r   r    )r7   r   r   r4   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!   rY   numr   initial)r                r   r   r    r4   r   r   r   )r,   r$   rs   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   r}   r!   r   r   r   )r   r|   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   )r}   r    r   )r}   r!   r}   r   r    r!   )r   r   )r}   r!   r   )	r4   r5   r   r   r   r   zipr   shape)r,   r$   rs   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   r}   r!   r   )r         @r   r   )r   r   r         &@)g      D@g      F@g      H@g      J@)g      L@g      N@r   g      Q@)r   r   r   r   )r   r   r~         *@)r   g      3@g      4@r   )r|   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   )r4   r5   r   r   r   r   r   r   )r,   rs   r$   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!   rY   r   )r   r   r   r   r   r   )r   r   r   r   r   r}   r   )            r   r   )r   r   )r   r   r   r   r   r   )r,   rs   r   r   r"   r"   r'   test_x_noneN  s   


z$TestCumulative_trapezoid.test_x_noner   r    r|   c              	   C   sz   t jdddd}tjdd t||d}W d   n1 sw   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!   )r4   r   r   r   r   r   cumsum)r,   r   rs   resr"   r"   r'   test_initial_warninga  s
   2z-TestCumulative_trapezoid.test_initial_warningc                 C   s>   t jtdd tg d W d    d S 1 sw   Y  d S )NAt least one point is requiredr   rs   )r   raises
ValueErrorr   rf   r"   r"   r'   test_zero_len_yk  s   "z(TestCumulative_trapezoid.test_zero_len_yc              
   C   st   t dddd}|}tjdd tt||dddd	t||dddd	d
d W d    d S 1 s3w   Y  d S )Nr   r}   r!   r   r   r   r|   r   )r   r   r   +=r*   )r4   r5   r   r   r   r   r   r   r   r"   r"   r'   test_cumtrapzo  s   "z&TestCumulative_trapezoid.test_cumtrapzN)r7   r8   r9   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    )r4   r5   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    r}   r!   r      r   r   r   )r4   r   	ones_likesumr   r   )r,   r$   rs   rB   wxwywzqqxqy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 )NrY   r!   )maskr   )r4   r5   mar   r   r   )r,   r$   rs   r  ymr   xmr"   r"   r'   test_masked  s   
zTestTrapezoid.test_maskedc              	   C   sf   t d}d| }tjdd tt||dddt||ddd W d    d S 1 s,w   Y  d S )Nr   r!   r   r   r|   r   )r$   r   r   )r4   r5   r   r   r   r   r   r   r"   r"   r'   test_trapz_alias  s   
"zTestTrapezoid.test_trapz_aliasN)r7   r8   r9   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   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.r   z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  )ndimr4   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   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   r   	TypeErrorr   r   warnsUserWarningr   qmcSobol)r,   r   r   r"   r"   r'   test_input_validation  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 r1   )r   multivariate_normalpdfTr#   )covmeanr"   r'   r     s   z$TestQMCQuad.basic_test.<locals>.funcl   ^^@E9? )seed)r  r  r  )lower_limitr    gףp=
?)rn   r   c                     s   t  |  S r1   )r4   r  r`   )r   r"   r'   r(     rl   z(TestQMCQuad.basic_test.<locals>.<lambda>T)r  r  r  r  r   r*   gؗҜ<rm   )r4   zeroseyerandomdefault_rngr   r  r   onesr   r#  cdfr   stdtritstandard_errorr   r   prodr   imagr   )r,   r  r  signsr  rngr  r=   r>   r   refrn   logresr"   )r&  r   r'  r'   
basic_test  s4   



(
zTestQMCQuad.basic_testr  i   r  r   c                 C   s   |  || d S r1   r8  )r,   r  r  r"   r"   r'   
test_basic  s   zTestQMCQuad.test_basicr4  r    r   c                 C   s   | j |d d S )N)r4  r9  )r,   r4  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   r4   infr1  )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   r6  r"   r"   r'   test_flexible_input  s    zTestQMCQuad.test_flexible_inputN)r7   r8   r9   r!  r4   r.  r8  r   r   r   r:  r;  r=  rA  r"   r"   r"   r'   r    s    $$

r  r   r$   r   r   r   c          	         sd  | j | dk r|d u rt| |||d dS |t| |||dd S t| |d} t|dkr4t||dn|}t|dkrDt||dn|}t|dkrTt||dn|}| j d  |d urf|t  n|}|d u }|rpdn|}t|| j }t|| j d d d }tj| ||fdd} fdd	}t|d|}|r|d
dd f n|}t|d|}|S )Nr}   )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   r4   moveaxisr  r5   broadcast_toconcatenateapply_along_axis)	rs   r$   r   r   r   initial_was_nonerB   r   r   r"   r%   r'   cumulative_simpson_nd_reference  s(      
rH  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   sp  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}|re|n	||d  dd  }|ru|d nd }|r}d|ind	|i}t|
fi |d
|i}|st||dd d S |rdnd}t||dd t||d d ||d d dd d S )N   F*BG r   r}   r!   r    r   r   r   r$   r   gV瞯<r*   g{Gzd?)	r4   r,  r-  sortr5   newaxisr  r   r   )r,   rJ  rK  r5  r&   orderr   r$   r   crs   Yr6  r   kwargr   i0r"   r"   r'   r   F  s(   "&zTestCumulativeSimpson.test_1dr   r}   x_ndim)r    r}   x_len)r    r!   rH   i_ndim)Nr   r}   r   )NTc                 C   s  t jd}dd|g}|d || ||< |d< | }d||< |dkr&|nd}	|j|d}
d	\}}|rC|dkr>|j|dn| }n|dkrRt j|j|d|d
n
t |j|| d}|d u rcd n|j|	d}t|
||||d}t|
||||d}t jj||dd d S )NrL  rY      r   r    r}   r"   size)NNr   rB  gV瞯<r*   )	r4   r,  r-  copyrM  r   rH  testingr   )r,   r   rU  rV  rW  r   r5  r   shape_len_1i_shapers   r$   r   r   r6  r"   r"   r'   test_ndi  s"   
zTestCumulativeSimpson.test_nd)r   kwarg_updatezx must be strictly increasing)r!   r!   r}   r   r#   )r!   r!   r   r   r$   rs   r   )r$   rs   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-DrY   z'`initial` must either be a scalar or...r   z"`dx` must either be a scalar or...Nr   c                 C   sd   t | j| jd d dd}tjt|d tdi t |fi | W d    d S 1 s+w   Y  d S )Nr   )rs   r$   r   r   r   r   r"   )dicty0x0r   r   r   r   )r,   r   r`  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 )NrL  r   rY  r   r   )r4   r,  r-  r   r   )r,   r5  rs   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!   )r4   diffr   r   rE  r*  )r,   rs   r$   dsub_integrals_h1sub_integrals_h2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   )max_dimsmin_sidemax_sider   F)	allow_nanc                 C      t | dkS NgHz>absr#   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 ).Nr\   r   r   .0r   r   r"   r'   
<listcomp>  s   $ z|TestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dx.<locals>.simpson_reference.<locals>.<listcomp>r!   r   r    r   r4   stackr   r   r   r"   r   r'   simpson_reference  s   "zhTestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dx.<locals>.simpson_referencer\   r   r   r#   .r    N)r   rn  r4   r5   r   r\  r   )r,   rs   r  r   r6  rm  r"   r"   r'   7test_cumulative_simpson_against_simpson_with_default_dx  s   ,zMTestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dxc                 C   rs  rt  ru  r#   r"   r"   r'   r(     rw  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 )ry  r   r   r    r   r   Nrh   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#   rz  r{  ra  r"   r'   r}    s   0 zlTestCumulativeSimpson.test_cumulative_simpson_against_simpson.<locals>.simpson_reference.<locals>.<listcomp>r!   r   r    r   r~  )rs   r$   r"   ra  r'   r    s   "zXTestCumulativeSimpson.test_cumulative_simpson_against_simpson.<locals>.simpson_referencer#   .)
r   r4   r   r,  uniformlenr   rn  r\  r   )r,   rs   intervalr$   r  r   r6  rm  r"   r"   r'   'test_cumulative_simpson_against_simpson  s   4
,z=TestCumulativeSimpson.test_cumulative_simpson_against_simpson)r7   r8   r9   r4   r5   rd  rc  r   r   r   r   r_  rb  rf  rg  rn  r   hyp_numarraysr   array_shapesstfloatsrr   r  r  r"   r"   r"   r'   rI  B  sR    
!


rI  )4r   numpyr4   r   r   r   numpy.testingr   r   r   r	   r
   
hypothesisr   hypothesis.strategies
strategiesr  hypothesis.extra.numpyextrar  scipy.integrater   r   r   r   r   r   r   r   r   r   r   r   r   r   r   scipy.integrate._quadraturer   scipyr   r   r   r   r   r;   r   r   r   r   r  rH  rI  r"   r"   r"   r'   <module>   s*   D
 l
cE_%