
    Ugm                        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c 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  d dl!m"Z" d dl#m$Z$m%Z%  G d d	          Z&e j'        (                    d
           G d d                      Z)e j'        *                    deeg          d             Z+ G d d          Z, G d d          Z- G d d          Z.ddddddZ/ G d d          Z0dS )    Ncossinpi)assert_equalassert_almost_equalassert_allcloseassert_suppress_warnings)given)
quadraturerombergrombnewton_cotescumulative_trapezoid	trapezoidquadsimpson
fixed_quadAccuracyWarningqmc_quadcumulative_simpson)%_cumulative_simpson_unequal_intervals)statsspecialc                       e Zd Zd Zd ZdS )TestFixedQuadc                 r    dddz  z  }t          fddd          \  }}t          ||d           d S )	N         c                     | dz  dz
  z  S )Nr!   r     xns    d/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/integrate/tests/test_quadrature.py<lambda>z+TestFixedQuad.test_scalar.<locals>.<lambda>   s    a!A#'l     r   r&   -q=rtol)r   r	   )selfexpectedgot_r&   s       @r'   test_scalarzTestFixedQuad.test_scalar   sT    ac72222AqA>>>QXE222222r)   c                     d}t          j        dd|z            ddz   z  }t          fddd|          \  }}t          ||d           d S )	Nr   r    r!   c                 "    | d d d f         z  S Nr#   )r%   ps    r'   r(   z+TestFixedQuad.test_vector.<locals>.<lambda>   s    a111d7m r)   r   r*   r+   r,   )nparanger   r	   )r.   r&   r/   r0   r1   r6   s        @r'   test_vectorzTestFixedQuad.test_vector   si    Ia1a!e93333QQ???QXE222222r)   N)__name__
__module____qualname__r2   r9   r#   r)   r'   r   r      s2        3 3 33 3 3 3 3r)   r   zignore::DeprecationWarningc                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zej                            dddg          d             ZdS )TestQuadraturec                     t           r5   )NotImplementedError)r.   r%   abargss        r'   r   zTestQuadrature.quad%   s    !!r)   c                 h    d }t          |dt          d          \  }}d}t          ||d           d S )Nc                 \    t          || z  |t          |           z  z
            t          z  S r5   r   r%   r&   zs      r'   myfuncz.TestQuadrature.test_quadrature.<locals>.myfunc*   '    qs1SVV8|$$R''r)   r   r!   ?ۗ?   decimal)r   r   r   r.   rH   valerr	table_vals        r'   test_quadraturezTestQuadrature.test_quadrature(   sH    	( 	( 	(faX66S*	CA666666r)   c                 l    d }t          |dt          dd          \  }}d}t          ||d           d S )Nc                 b    dt          || z  |t          |           z  z
            z  t          z  S )NY)	kRr   rF   s      r'   rH   z3TestQuadrature.test_quadrature_rtol.<locals>.myfunc1   s,    #ac!CFF(l+++B..r)   r   rJ   绽|=r,   .<Rr   r   r	   rP   s        r'   test_quadrature_rtolz#TestQuadrature.test_quadrature_rtol0   sM    	/ 	/ 	/faXEBBBS1	YU333333r)   c                     d }d}dD ]C}t          |dt          d|          \  }}t          ||d           t          |d	k                Dd S )
Nc                 \    t          || z  |t          |           z  z
            t          z  S r5   r   rF   s      r'   rH   z6TestQuadrature.test_quadrature_miniter.<locals>.myfunc9   rI   r)   rL   )   4   r   rJ   )miniterrM   rN         ?)r   r   r   r
   )r.   rH   rS   r`   rQ   rR   s         r'   test_quadrature_miniterz&TestQuadrature.test_quadrature_miniter7   su    	( 	( 	(*	 	 	G!&!R7KKKHCY::::C#I	 	r)   c                 l    d }t          |dt          dd          \  }}d}t          ||d           d S )Nc                 b    dt          || z  dt          |           z  z
            z  t          z  S )NrW   rK   r   r$   s     r'   rH   z:TestQuadrature.test_quadrature_single_args.<locals>.myfuncB   s,    #ac#c!ff*n---b00r)   r   r!   rX   rC   r-   rY   r,   rZ   rP   s        r'   test_quadrature_single_argsz*TestQuadrature.test_quadrature_single_argsA   sM    	1 	1 	1fa!%@@@S1	YU333333r)   c                 d    d }t          |dt          d          }d}t          ||d           d S )Nc                 \    t          || z  |t          |           z  z
            t          z  S r5   r   rF   s      r'   rH   z+TestQuadrature.test_romberg.<locals>.myfuncJ   rI   r)   r   rJ   )rC   rL   rM   rN   )r   r   r   r.   rH   rQ   rS   s       r'   test_rombergzTestQuadrature.test_rombergH   sG    	( 	( 	(fa(333*	CA666666r)   c                 f    d }t          |dt          dd          }d}t          ||d           d S )Nc                 b    dt          || z  |t          |           z  z
            z  t          z  S )Ng =`XCr   rF   s      r'   rH   z0TestQuadrature.test_romberg_rtol.<locals>.myfuncR   s,    AaC#a&&L)))",,r)   r   rJ   rX   re   g3>Cr,   )r   r   r	   ri   s       r'   test_romberg_rtolz TestQuadrature.test_romberg_rtolP   sI    	- 	- 	-fa(???/	YU333333r)   c                 d    t          t          t          j        d                    d           d S )N      )r   r   r7   r8   r.   s    r'   	test_rombzTestQuadrature.test_rombX   s(    T")B--((#.....r)   c                 *   t          j        d          }t          j        d|z            }t          |          }t	          d |                                |                                          \  }}t          ||dd           t                      5 }|	                    t          d           t          d |                                |                                d	
          }d d d            n# 1 swxY w Y   t          ||dd           d S )Nro   皙?c                 0    t          j        d| z            S Nrt   r7   r   r%   s    r'   r(   z2TestQuadrature.test_romb_gh_3731.<locals>.<lambda>`   s    26#a%== r)   g:0yE>r   r-   atolzdivmax .4. exceededc                 0    t          j        d| z            S rv   rw   rx   s    r'   r(   z2TestQuadrature.test_romb_gh_3731.<locals>.<lambda>f   s    RVCE]] r)   r   )divmaxr+   )r7   r8   r   r   r   minmaxr	   r   filterr   r   )r.   r%   yrQ   val2rR   supval3s           r'   test_romb_gh_3731z TestQuadrature.test_romb_gh_3731[   s;   IfF3q5MM1gg00!%%''15577CC	cT15555    	PCJJ(=>>>22AEEGGQUUWWQOOOD	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	TA666666s   AC55C9<C9c                 b    dd l }t          |j        dd          }d}t          ||d           d S )Nr   r    g?k?rM   rN   )mathr   r   r   )r.   r   valmathexpected_vals       r'   test_non_dtypezTestQuadrature.test_non_dtypei   s>    $(Aq))*G\1======r)   c                    d}t          |d          \  }}t          ||t          j        ddg          z             t	          ||dz   dz             d}t          |d          \  }}t	          ||t          j        g d          z  dz             t	          ||dz   d	z             d}t          |d          \  }}t	          ||t          j        g d
          z  dz             t	          ||dz   dz             d}t          |d          \  }}t	          ||t          j        g d          z  dz             t	          ||dz   dz             dS )z5Test the first few degrees, for evenly spaced points.r          ?         (@r!   )ra         @ra         @r^   g     @)ra         @r   ra          @g     P@r   )      @      @@r   r   r   g     V@rM   g     =AN)r   r   r7   arrayr   )r.   r&   wtserrcoffs       r'   test_newton_cotesz TestQuadrature.test_newton_cotesp   sq   #Aq))WS!BHc3Z000111GadU4Z000#Aq))WC28OOO#<#<!<S!@AAAGadU6\222#Aq))WC28,@,@,@#A#A!A#!EFFFGadU6\222#Aq))WC28,H,H,H#I#I!I$!NOOOGadU9_55555r)   c                 V   t          j        g d          }|dz  }t          |          \  }}d}t          j        ||          }t	          ||           t          j        g d          }|dz  }t          |          \  }}d}t          j        ||          }t	          ||           dS )z9Test newton_cotes with points that are not evenly spaced.)        g      ?       @r!   gUUUUUU@)r   gffffff?g @r         "@N)r7   r   r   dotr   )r.   r%   r   r   r   exact_integralnumeric_integrals          r'   test_newton_cotes2z!TestQuadrature.test_newton_cotes2   s     H___%%qD#AW6#q>>,n===H)))**qD#AW6#q>>,n=====r)   c           
      z   t          j        d          }t          t          |          d           t          t          |d          d           t          t          |t          j        ddd                    d	           t          j        d
dd          }d }t          t           ||          |          d           t          j        d
dd          }t          t           ||          d          d           t          j        d                              dd          }t          j        d                              ddd          } ||          }t          d          D ]}t          |||          }t          j        |dg          }|D ]}t          |j
                  }	|	                    |t          d                      |t          |	                   d         dz  dz  |t          |	                   d         dz  dz  z
  }
t          ||j
                 |
           t          j        d                              dd          } ||          }t          ||d          }d|d d d
f         |d d df         z   z  |d d d
f         |d d df         z
  z  }
t          ||
           t          j        d                              dd          }t          j        d                              ddd          } ||          }t          d          D ]}t          |||          }t          j        |dg          }|D ]}t          |j
                  }	|	                    |t          d                      |t          |	                   d         dz  dz  |t          |	                   d         dz  dz  z
  }
t          ||j
                 |
           t          j        dg          }t          j        |d          }t          t          ||d          d           t          t          ||d          d           t          j        g d          }t          j        |d          }t          t          ||d          d           t          t          ||d          d           t          j        g dg dg dg          }t          j        |d          }g d}d gdz  }t          t          ||d          |           t          t          ||d          |           t          j        g dg dg d!g          }t          j        |d          }g d"}g d#}t          t          ||d          |           t          t          ||d          |           d S )$Nro   rp   r   dx@   r   r   rx       r    c                     | dz  S )Nr!   r#   rx   s    r'   fz&TestQuadrature.test_simpson.<locals>.f   s    a4Kr)         5@rM   r   r            P@r   r%   axismulti_index)flags   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@)r7   r8   r   r   linspacer	   reshaperangenditerlistr   insertslicetupler   power)r.   r   r%   r   rA   iritr1   idxintegral	zero_axisdefault_axiss                r'   test_simpsonzTestQuadrature.test_simpson   s   IbMMWQZZ%%%WQ3''',,,WQ"+aB"7"7888"=== K1a  	 	 	 	!***D111 K1a  !---s333 IbMM!!!Q''IcNN""1a++AaDDq 	= 	=AQQ'''A1]O444B = =2>**

1eDkk***U3ZZ=,a/!3ac

mA6F6IA6MM". 18<<<<	= IbMM!!!Q''AaDDA$$$!AAAqD'AaaadG+,!!!Q$!AAAqD'0AB8$$$ IbMM!!!Q''IcNN""1a++AaDDq 	= 	=AQQ'''A1]O444B = =2>**

1eDkk***U3ZZ=,a/!3ac

mA6F6IA6MM". 18<<<<	= HaSMMHQNNQQ///555QR000#666H\\\""HQNNQQ///555QR000#666HlllLLL,,,?@@HQNN(((	!{QQQ///;;;QR000,???HlllLLL...ABBHQNN000	>>>QQ///;;;QR000,?????r)   droplastFTc                     t          j        g dg dg          }|r|d d d df         }t          |d          }t          t          j        |t           j                  d          }t	          ||           d S )N)r!   r!   r   r   r   r   r^   )r   r   r!   r   
      r   r   r   )dtype)r7   r   r   float64r   )r.   r   r   resultr/   s        r'   test_simpson_2d_integer_no_xz+TestQuadrature.test_simpson_2d_integer_no_x   s     H///3335 6 6 	!!!SbS&	A$$$28ARZ888rBBBVX&&&&&r)   N)r:   r;   r<   r   rT   r[   rb   rf   rj   rm   rr   r   r   r   r   r   pytestmarkparametrizer   r#   r)   r'   r>   r>   #   s       " " "7 7 74 4 4  4 4 47 7 74 4 4/ / /7 7 7> > >6 6 6,> > >"K@ K@ K@\ [Z%77	' 	' 87	' 	' 	'r)   r>   funcc                     d| j          d}t          j        |          5   | t          j        dd           d d d            d S # 1 swxY w Y   d S )Nz`scipy.integrate.z` is deprecated...matchr   r    )r:   r   deprecated_callr7   exp)r   messages     r'   test_deprecate_integratorr      s    C$-CCCG		g	.	.	.  RVQ                 s   AA
A
c                   x    e Zd Zd Zd Zd Zd Zej        	                    dddg          d             Z
d	 Zd
S )TestCumulative_trapezoidc                     t          j        ddd          }|}t          ||d          }g d}t          ||           t          ||d           }t          ||dd                     d S )	Nr   r!   r^   numr   initial)r                r   r   r    r7   r   r   r	   )r.   r%   r   y_int
y_expecteds        r'   test_1dz TestCumulative_trapezoid.test_1d   s~    KA1%%%$Q1555...
z***$Q4888z!""~.....r)   c                    t          j        d                              ddd          }|}t          ||d          }t          j        g dg dgg d	g d
gg dg dgg          }t          ||           g d}t          g d|          D ]U\  }}t          ||d|          }t          |j        d           t          ||d |          }t          |j        |           Vd 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   )	r7   r8   r   r   r   r	   zipr   shape)r.   r%   r   r   r   shapesr   r   s           r'   test_y_nd_x_ndz'TestCumulative_trapezoid.test_y_nd_x_nd  s4   Ii  ((Aq11$Q1555X 2 2 2 4 4 4 6 4 4 4 5 5 5 7 5 5 5 5 5 5 7	8 9 9
 	z*** 322yyy&11 	- 	-KD%(AqtDDDEi000(At$GGGEe,,,,		- 	-r)   c           	         t          j        d                              ddd          }t          j        d          dz  }t          j        g dg dgg dg dgg          t          j        g d	gg d
gg dgg          t          j        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           }t          ||           <d 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   )r7   r8   r   r   r   r   r   r	   )r.   r   r%   ys_expectedr   r   r   s          r'   test_y_nd_x_1dz'TestCumulative_trapezoid.test_y_nd_x_1d  s~   Ii  ((Aq11IaLL!O H''')))+++++++-. / / H'''(+++,+++,. / / H''')''')))+))))))+	, - -. !$III{ ; ; 	/ 	/D*(a.?d157 7 7EE:....	/ 	/r)   c                 Z   t          j        ddd          }t          |          }g d}t          ||           t          |d          }g d}t          ||           t          |d	
          }g d}t          ||           t          |d	d          }g d}t          ||           d S )Nr   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   r   )r.   r   r   r   s       r'   test_x_nonez$TestCumulative_trapezoid.test_x_none1  s    KA1%%%$Q''***
z***$Q222---
z***$Q1---***
z***$Q1a888---
z*****r)   r   r    r   c           
      &   t          j        ddd          }t          j        d          5  t	          ||          }ddd           n# 1 swxY w Y   t          ||gt          j        |dd         |dd	         z             d
z             dS )z4If initial is not None or 0, a ValueError is raised.r   r   r   z	`initial`r   r   Nr    r   r!   )r7   r   r   r   r   r	   cumsum)r.   r   r   ress       r'   test_initial_warningz-TestCumulative_trapezoid.test_initial_warningD  s    
 K22&&&#+666 	; 	;&q':::C	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;gD	!ABB%!CRC&.(A(A!(CDEEEEEs   AAAc                     t          j        t          d          5  t          g            d d d            d S # 1 swxY w Y   d S )NAt least one point is requiredr   r   )r   raises
ValueErrorr   rq   s    r'   test_zero_len_yz(TestCumulative_trapezoid.test_zero_len_yN  s    ]:-MNNN 	' 	' 2&&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   :>>N)r:   r;   r<   r   r   r   r   r   r   r   r  r	  r#   r)   r'   r   r      s        / / /- - -*/ / /0+ + +& [As8 F F F' ' ' ' 'r)   r   c                        e Zd Zd Zd Zd ZdS )TestTrapezoidc                     t          j        ddd          }t          t          j        d|dz  z            t          j        dt           j        z            z  d          }t          |d           d S )Nr   g?g      r!   r   r    )r7   r8   r   r   sqrtr   r	   )r.   r%   r   s      r'   test_simplezTestTrapezoid.test_simpleT  sd    Ic2r""bfS16\**RWQY-?-??CHHH1r)   c                 2   t          j        ddd          }t          j        ddd          }t          j        ddd          }t          j        |          |d         |d         z
  z  }|dxx         dz  cc<   |dxx         dz  cc<   t          j        |          |d         |d         z
  z  }|dxx         dz  cc<   |dxx         dz  cc<   t          j        |          |d         |d         z
  z  }|dxx         dz  cc<   |dxx         dz  cc<   |d d d d f         |d d d d f         z   |d d d d f         z   }||d d d d f         z                      d          }||d d d d f         z                      d          }	||d d d d f         z                      d          }
t	          ||d d d d f         d	          }t          ||           t	          ||d d d d f         d	          }t          ||	           t	          ||d d d d f         d	          }t          ||
           t	          ||d	          }t          ||           t	          ||d	          }t          ||	           t	          ||d	          }t          ||
           d S )
Nr   r    r   r!   r      r   r   r   )r7   r   	ones_likesumr   r	   )r.   r%   r   rG   wxwywzqqxqyqzr   s               r'   	test_ndimzTestTrapezoid.test_ndimZ  s   K1a  K1a  K1b!!\!__!qt,
1

2!\!__!qt,
1

2!\!__!qt,
1

2!aaatmqaaa.4aaa<@"QQQd]##((a(00"T111d]##((a(00"T4]##((a(00 a1QQQd]+!4442a1T!!!T\?3332a1T4\?3332 a11%%%2a11%%%2a11%%%2r)   c                    t          j        d          }||z  }|dk    }t           j                            ||          }d}t	          t          ||          |           t           j                            ||          }t	          t          ||          |           t           j                            ||          }t	          t          ||          |           d S )Nr^   r!   )maskr   )r7   r8   mar   r	   r   )r.   r%   r   r  ymr   xms          r'   test_maskedzTestTrapezoid.test_masked  s     IaLLEAvU[[[&&	"a((!,,,U[[[&&	"b))1---U[[[&&	!R((!,,,,,r)   N)r:   r;   r<   r  r  r!  r#   r)   r'   r  r  S  sB          # # #J- - - - -r)   r  c                      e Zd Zd Zdd ej        d          fdZej        	                    dddg          ej        	                    ddd	g          d
                         Z
ej        	                    dddgddgddgddgg          d             Zej        	                    dddg          d             Zd ZdS )TestQMCQuadc           	         d}t          j        t          |          5  t          dddgddg           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          d ddgddg           d d d            n# 1 swxY w Y   d }d	}t          j        t          |          5  t          |ddgddg           d d d            n# 1 swxY w Y   d
}t          j        t          |          5  t          d ddgddgd           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          d ddgddgd           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          d ddgddgd           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          d ddgddgt          j        	                    d                     d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          d ddgddgd           d d d            d S # 1 swxY w Y   d S )Nz`func` must be callable.r   za duckr   r    z/`func` must evaluate the integrand at points...c                      dS Nr    r#   r#   r)   r'   r(   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  s    Q r)   c                 D    | j         dk    sJ t          j        |           S r&  )ndimr7   r  rx   s    r'   r   z/TestQMCQuad.test_input_validation.<locals>.func  s    6Q;;;;6!99r)   z8Exception encountered when attempting vectorized call...z`n_points` must be an integer.c                     dS r&  r#   rx   s    r'   r(   z3TestQMCQuad.test_input_validation.<locals>.<lambda>      q r)   g     @)n_pointsz!`n_estimates` must be an integer.c                     dS r&  r#   rx   s    r'   r(   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r*  r)   r   )n_estimatesz8`qrng` must be an instance of scipy.stats.qmc.QMCEngine.c                     dS r&  r#   rx   s    r'   r(   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r*  r)   )qrngz8`qrng` must be initialized with dimensionality equal to c                     dS r&  r#   rx   s    r'   r(   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r*  r)   z,`log` must be boolean \(`True` or `False`\).c                     dS r&  r#   rx   s    r'   r(   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r*  r)   r   log)
r   r  	TypeErrorr   r  warnsUserWarningr   qmcSobol)r.   r   r   s      r'   test_input_validationz!TestQMCQuad.test_input_validation  s   ,]9G444 	/ 	/X1v1v...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ D]:W555 	0 	0YYAA///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0	 	 	 M\+W555 	+ 	+TAq6Aq6***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 3]9G444 	C 	C[[1a&1a&6BBBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 6]9G444 	C 	C[[1a&1a&cBBBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C M]9G444 	A 	A[[1a&1a&x@@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A M]:W555 	K 	K[[1a&1a&uyq7I7IJJJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K B]9G444 	: 	:[[1a&1a&b9999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   A  AA(BBB6CCC D%%D),D)E22E69E6F??GG'6H))H-0H-I77I;>I;   r   r!   c           	      V   d}t          j        |          t          j        |          fdt           j                            d          }t
          j                            ||          }t          j        |          }t          j        |          |z  }t          |||||          }	t
          j
                            ||          }
t          j        |dz
  d          |	j        z  }t          |	j        |
|	           t          j        |          |	j        z  d
k    sJ t           j                            d          }t
          j                            ||          }t          fd||||d|          }t          t          j        |j                  |	j        d           t          j        |j                  t          j        |          d
k     rt           j        nd
k    sJ t          t          j        |j                  |	j        dd           d S )Nr!   c                 P    t           j                            | j                  S r5   )r   multivariate_normalpdfT)r%   covmeans    r'   r   z$TestQMCQuad.basic_test.<locals>.func  s     ,00dC@@@r)   l   ^^@E9? )seed)r+  r-  r/  )lower_limitr    gףp=
?)rz   r   c                  2    t          j         |            S r5   )r7   r3  )rC   r   s    r'   r(   z(TestQMCQuad.basic_test.<locals>.<lambda>  s    ttT{(;(; r)   T)r+  r-  r3  r/  g+=r,   gؗҜ<ry   )r7   zeroseyerandomdefault_rngr   r7  r8  onesr   r=  cdfr   stdtritstandard_errorr	   r   prodr   imagr   )r.   r+  r-  signsr(  rngr/  rA   rB   r  refrz   logresr@  r   rA  s                @@@r'   
basic_testzTestQMCQuad.basic_test  s   x~~fTll	A 	A 	A 	A 	A 	A i##$788yt#..HTNNGDMME!tQH#.T; ; ;'++AtSa+HH{1}e44s7IIc5555wu~~cl*Q....i##$788yt#..;;;;Q#+"/ / / 	v//EJJJJwv''RWU^^a5G5GBEEQOOOOv455*U	D 	D 	D 	D 	D 	Dr)   r+  i   r-  r   c                 2    |                      ||           d S r5   rS  )r.   r+  r-  s      r'   
test_basiczTestQMCQuad.test_basic  s     	+.....r)   rO  r    r   c                 2    |                      |           d S )N)rO  rU  )r.   rO  s     r'   	test_signzTestQMCQuad.test_sign  s    e$$$$$r)   r3  FTc                     d}t          j        t          |          5  t          d ddgddg|          }d d d            n# 1 swxY w Y   |j        |rt
          j         ndk    sJ |j        dk    sJ d S )Nz-A lower limit was equal to an upper limit, sor   c                     dS r&  r#   rx   s    r'   r(   z'TestQMCQuad.test_zero.<locals>.<lambda>  s    Q r)   r   r    r2  )r   r5  r6  r   r   r7   infrL  )r.   r3  r   r  s       r'   	test_zerozTestQMCQuad.test_zero  s    A\+W555 	A 	A;;AAC@@@C	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A|3 5A6666!Q&&&&&&s   AA
Ac                     d }t          |dd          }t          j                            dd          t          j                            dd          z
  }t	          |j        |d           d S )Nc                 D    t           j                            | d          S )Nr!   scale)r   normr>  rx   s    r'   r   z-TestQMCQuad.test_flexible_input.<locals>.func  s    :>>!1>---r)   r   r    r!   r_  g{Gz?)r   r   ra  rJ  r	   r   )r.   r   r  rQ  s       r'   test_flexible_inputzTestQMCQuad.test_flexible_input  sl    	. 	. 	. tQ""jnnQan((5:>>!1>+E+EEc400000r)   N)r:   r;   r<   r9  r7   rI  rS  r   r   r   rV  rX  r\  rb  r#   r)   r'   r#  r#    s+       ": ": ":H #'AWRWQZZ D D D D< [Z$77[]QG44/ / 54 87/ [W1vBx"a1b'&JKK% % LK% [UUDM22' ' 32'1 1 1 1 1r)   r#  r   r%   r   r   r   c                f  	 | j         |         dk     r-|t          | |||d           S |t          | |||d          z   S t          j        | |d          } t          j        |          dk    rt          j        ||d          n|}t          j        |          dk    rt          j        ||d          n|}t          j        |          dk    rt          j        ||d          n|}| j         d         	||t          j        	          z  n|}|d u }|rdn|}t          j        || j                   }t          j        || j         d d         dz             }t          j        | ||fd          }	fd}t          j        |d|          }|r|d	dd f         n|}t          j        |d|          }|S )
Nr   )r%   r   r   r   r   r   r    )r    r   c                 d    t          | d          | dz           | dz  d                    S )Nr!   )r%   r   )r   )rG   r&   s    r'   r   z*cumulative_simpson_nd_reference.<locals>.f
  s8    !!BQB%1QqsU8QqsttWEEEEr)   .)	r   r   r7   moveaxisr(  r8   broadcast_toconcatenateapply_along_axis)
r   r%   r   r   r   initial_was_nonerG   r   r  r&   s
            @r'   cumulative_simpson_nd_referencerk    s   wt}q?'Q2D$OOOO1!qRdTUVVVVV 	AtR  A$&GAJJNNAtR   A&(gbkkAooRr	"	"	"2B020@0@10D0Dbk'4,,,'G 	
A^RYq\\A$#0aaG 	17##Aogqwss|d':;;G
1gR000AF F F F F

aQ
'
'C +
3#c122g,,C
+c2t
$
$CJr)   c                      e Zd Z ej        d          Zedz  Zej        	                    dd          ej        	                    dd          d                         Z
ej        	                    d ej        dd	                    ej        	                    d
d          ej        	                    dd          ej        	                    dd          ej        	                    dd          d                                                             Zej        	                    dd eg d          fd eeg dgeeg          fd eeeegeeegd          fd eg g           fd ed          fd e ej        d                    fd  e ej        d          !          fd" ed# ej        d          $          fg          d%             Zd& Zd' Zej        j         e ej        ej         ej        dd	d()           ej        d*d(d+,                              d-           .          /          d0                         Zej        j         e ej        ej         ej        dd	d()           ej        d*d(d+,                              d1           .          /          d2                         Zd#S )3TestCumulativeSimpsonr   r!   use_dx)FTuse_initialc                 ~   t           j                            d          }d}|rdnd}|                                }|dk    r't          j        |                    |                    n+t          j        |          |z  |                                z   }t          j        |dz             d d t           j        f         }|                    |dz             d d t           j        f         }	t          j        |	||z  z  d          }
t          j        |	||dz   z  z  |dz   z  d          }|r|n||d         z
  dd          }|r|d         nd }|rd|ind	|i}t          |
fi |d
|i}|st          ||d           d S |rdnd}t          ||d           t          ||d d         ||d d         d           d S )N   F*BG r   r   r!   r    r   r   r   r%   r   gV瞯<r,   g{Gzd?)	r7   rG  rH  sortr8   newaxisr  r   r	   )r.   rn  ro  rP  r&   orderr   r%   r   cr   YrQ  r   kwargr  i0s                    r'   r   zTestCumulativeSimpson.test_1d  s   
 i##$899 "ZZ\\',zzRWSZZ]]###)A,,r/CJJLL0 	
Ieai  BJ/JJuqy!!!!!RZ-0F1QT6"""F1QQZ<Q'a0000aaQqtVQRRL &/!A$$4$2r

3( ==e==W===  	@C5111111!(qBC62222CAJBEE
??????r)   r   r   x_ndim)r    r   x_len)r    r!   rM   i_ndim)Nr   r   r   )NTc                    t           j                            d          }dd|g}|d         ||         c||<   |d<   |                                }d||<   |dk    r|nd}	|                    |          }
d	\  }}|r1|dk    r|                    |          n|                                }n^|dk    r*t          j        |                    |          |
          n-t          j        |                    ||                             }|d n|                    |	          }t          |
||||          }t          |
||||          }t           j                            ||d           d S )Nrq  r^      r   r    r   r#   size)NNr   rc  gV瞯<r,   )	r7   rG  rH  copyrr  r   rk  testingr	   )r.   r   rz  r{  r|  r   rP  r   shape_len_1i_shaper   r%   r   r  rQ  s                  r'   test_ndzTestCumulativeSimpson.test_nd;  s{    i##$899 Au!&rE$KdU2YjjllD!'1++" JJEJ""2 	=17!---BB?Ezz//d;;;;gcjjeDkj::;;  .$$cjjgj.F.F !aBdKKK-a1WSWXXX

""3%"88888r)   )r   kwarg_updatezx must be strictly increasing)r!   r!   r   r   rx   )r!   r!   r   r   )r%   r   r   )r%   r   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-Dr^   z'`initial` must either be a scalar or...r   z"`dx` must either be a scalar or...N)r%   r   c           
          t          | j        | j        d d d          }t          j        t
          |          5  t          di t          |fi | d d d            d S # 1 swxY w Y   d S )Nr   )r   r%   r   r   r   r   r#   )dicty0x0r   r  r  r   )r.   r   r  kwargs0s       r'   test_simpson_exceptionsz-TestCumulativeSimpson.test_simpson_exceptionsZ  s     DGdLLL]:W555 	@ 	@??g!>!>!>!>???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   AA#&A#c                     t           j                            d          }|                    d          }t          |d          }t	          |d           d S )Nrq  r   r  r   r   )r7   rG  rH  r   r   )r.   rP  r   r  s       r'   test_special_casesz(TestCumulativeSimpson.test_special_casesi  sS    i##$899JJBJ q)))S!r)   c                    t          j        |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          j        |          |dddf         |dddf         z
  t          j        |          g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!   )r7   diffr   r   rh  rE  )r.   r   r%   dsub_integrals_h1sub_integrals_h2zeros_shapetheoretical_differences           r'   1_get_theoretical_diff_between_simps_and_cum_simpszGTestCumulativeSimpson._get_theoretical_diff_between_simps_and_cum_simpst  s    GAB@AFF@c44R4iL!C2I,
 

ttt)
 )(a((!#%%!#qrr'*-=c3B3h-GG%%
 "
 "
 "
 -0sADqDy) &%r)   r   )max_dimsmin_sidemax_sider  F)	allow_nanc                 (    t          |           dk    S NgHz>absrx   s    r'   r(   zTestCumulativeSimpson.<lambda>      #a&&SW- r)   )elementsr  c                 .   d }t          |d          } ||          }|                     |t          j        |j        d                             }t          j                            |dddf         |dddf         |dddf         z              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                      t          j         fdt          d j        d         dz             D             d          S )Nc                 F    g | ]}t          d d|f         d          S ).Nra   r   r   ).0r   r   s     r'   
<listcomp>z|TestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dx.<locals>.simpson_reference.<locals>.<listcomp>  s2    NNN37,,,NNNr)   r!   r   r    r   r7   stackr   r   r  s   `r'   simpson_referencezhTestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dx.<locals>.simpson_reference  sJ    8NNNNeAqwr{1}6M6MNNNUW   r)   ra   r   r   rx   .r    N)r   r  r7   r8   r   r  r	   )r.   r   r  r  rQ  r  s         r'   7test_cumulative_simpson_against_simpson_with_default_dxzMTestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dx  s     	 	 	
 !s+++""!%!W!W172;'' "X "
 "
 	
""QRRL#c122g,)?QRR)HH	
 	
 	
 	
 	
r)   c                 (    t          |           dk    S r  r  rx   s    r'   r(   zTestCumulativeSimpson.<lambda>  r  r)   c           	         d|j         d         dz
  z  }t          j        dd|j         d                   }|dd         d|z  t          j                            ddt          |          dz
            z  z   |dd<   d }t          ||	          } |||          }|                     ||          }t          j        	                    |d
ddf         |d
ddf         |d
ddf         z              dS )r  r   r   r    r   r   Nrt   c                      t          j         fdt          d j        d         dz             D             d          S )Nc           	      Z    g | ]'}t          d d|f         d d|f                   (S ).Nrx   r  )r  r   r%   r   s     r'   r  zlTestCumulativeSimpson.test_cumulative_simpson_against_simpson.<locals>.simpson_reference.<locals>.<listcomp>  s>    TTTq37qbqbz222TTTr)   r!   r   r    r   r  )r   r%   s   ``r'   r  zXTestCumulativeSimpson.test_cumulative_simpson_against_simpson.<locals>.simpson_reference  sO    8TTTTTE!QWR[QR]<S<STTT   r)   rx   .)
r   r7   r   rG  uniformlenr   r  r  r	   )r.   r   intervalr%   r  r  rQ  r  s           r'   'test_cumulative_simpson_against_simpsonz=TestCumulativeSimpson.test_cumulative_simpson_against_simpson  s     qwr{Q'K2172;///!""HRY%6%6r1c!ffqj%I%III!""	 	 	 !a(((1%%!%!W!Wq"
 "
 	
""QRRL#c122g,)?QRR)HH	
 	
 	
 	
 	
r)   )r:   r;   r<   r7   r8   r  r  r   r   r   r   r  r  r  r  r  slowr   hyp_numarraysr   array_shapesstfloatsr   r  r  r#   r)   r'   rm  rm    s       	1B	QB[X}55[]M::@ @ ;: 65@B [VYRYr1%5%566[Xv..[Wi00[X}55[T<009 9 10 65 10 /. 76
94 [8	($$*>*>*>?	($$"lll1CBx*P*P*PQ	($$"b""b"TU*V*V*VW	)44"+;+;+;<	8$$A,,,G	6yry||8L8L8LM	2DD14N4N4NO	-ttdyry||/L/L/LM	; 	 	@ @	 	@
  & & &< [
U
'.J G !a"EEERYsB%888??@W@WXX
 
 
  
 
  
, [
U
'.J G !a"EEERYsB%888??@W@WXX
 
 
  
 
  
 
 
r)   rm  )1r   numpyr7   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   scipy.integrate._quadraturer   scipyr   r   r   r   filterwarningsr>   r   r   r   r  r#  rk  rm  r#   r)   r'   <module>r     s                 7 7 7 7 7 7 7 7 7 7 7 7 7 7       " " " " " " ( ( ( ( ( ( ( ( (; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; N M M M M M                3 3 3 3 3 3 3 3  899K' K' K' K' K' K' K' :9K'\ ':!677  87W' W' W' W' W' W' W' W't:- :- :- :- :- :- :- :-z\1 \1 \1 \1 \1 \1 \1 \1~ -1T4b " " " " "J}
 }
 }
 }
 }
 }
 }
 }
 }
 }
r)   