
    (phXn                        S SK r S SKrS SKJrJrJr  S SKJr  S SK	J
r  S SKJs  Jr  S SKJrJrJrJrJrJrJrJrJr  S SKJr  S SKJrJrJr  S SKJ r J!r!  S SK"J#r#  \ RH                  RJ                  r% " S	 S
5      r& " S S5      r' " S S5      r(\  " S S5      5       r) " S S5      r*SSSSS.S jr+ " S S5      r, " S S5      r-g)    N)assert_equalassert_almost_equalassert_allclose)given)	rombnewton_cotescumulative_trapezoid	trapezoidquadsimpson
fixed_quadqmc_quadcumulative_simpson)%_cumulative_simpson_unequal_intervals)statsspecial	integrate)array_api_compatibleskip_xp_invalid_arg)xp_assert_closec                        \ rS rSrS rS rSrg)TestFixedQuad   c                 R   ^ SmSST-  -  n[        U4S jSSTS9u  p#[        X!SS9  g )	N         c                    > U ST-  S-
  -  $ )Nr   r    )xns    X/var/www/html/venv/lib/python3.13/site-packages/scipy/integrate/tests/test_quadrature.py<lambda>+TestFixedQuad.test_scalar.<locals>.<lambda>   s    a!A#'l    r   r!   -q=rtol)r   r   )selfexpectedgot_r!   s       @r"   test_scalarTestFixedQuad.test_scalar   s2    ac72AqA>E2r%   c                    ^ Sn[         R                  " SSU-  5      mSTS-   -  n[        U4S jSSUS9u  p4[        X2SS9  g )	Nr   r   r   c                    > U TS S 2S 4   -  $ Nr   )r    ps    r"   r#   +TestFixedQuad.test_vector.<locals>.<lambda>"   s    a1d7mr%   r   r&   r'   r(   )nparanger   r   )r*   r!   r+   r,   r-   r3   s        @r"   test_vectorTestFixedQuad.test_vector   sF    IIa1a!e93QQ?E2r%   r   N)__name__
__module____qualname____firstlineno__r.   r7   __static_attributes__r   r%   r"   r   r      s    33r%   r   c                       \ rS rSrS rS rS rS rS rS r	\
R                  R                  SS	S
/5      S 5       rSrg)TestQuadrature&   c                     [         er2   )NotImplementedError)r*   r    abargss        r"   r   TestQuadrature.quad'   s    !!r%   c                 V    [        [        [        R                  " S5      5      S5        g )N      )r   r   r5   r6   r*   s    r"   	test_rombTestQuadrature.test_romb*   s    T"))B-(#.r%   c                     [         R                  " S5      n[         R                  " SU-  5      n[        U5      n[	        S UR                  5       UR                  5       5      u  pE[        X4SSS9  g )NrH   皙?c                 4    [         R                  " SU -  5      $ )NrN   )r5   cosr    s    r"   r#   2TestQuadrature.test_romb_gh_3731.<locals>.<lambda>2   s    266#a%=r%   g:0yE>r   r)   atol)r5   r6   rP   r   r   minmaxr   )r*   r    yvalval2errs         r"   test_romb_gh_3731 TestQuadrature.test_romb_gh_3731-   sS    IIfFF3q5M1g0!%%'1557C	15r%   c                 F   Sn[        US5      u  p#[        X![        R                  " SS/5      -  5        [	        X1S-  * S-  5        Sn[        US5      u  p#[	        X![        R                  " / SQ5      -  S-  5        [	        X1S-  * S	-  5        Sn[        US5      u  p#[	        X![        R                  " / S
Q5      -  S-  5        [	        X1S-  * S-  5        Sn[        US5      u  p#[	        X![        R                  " / SQ5      -  S-  5        [	        X1S-  * S-  5        g)z5Test the first few degrees, for evenly spaced points.r         ?         (@r   )      ?      @ra         @   g     @)ra         @re   ra          @g     P@r   )      @      @@r`   rh   rg   g     V@   g     =AN)r   r   r5   arrayr   )r*   r!   wtserrcoffs       r"   test_newton_cotes TestQuadrature.test_newton_cotes5   s   #Aq)SBHHc3Z001GdU4Z0#Aq)C288O#<!<S!@AGdU6\2#Aq)C288,@#A!A#!EFGdU6\2#Aq)C288,H#I!I$!NOGdU9_5r%   c                 8   [         R                  " / SQ5      nUS-  n[        U5      u  p4Sn[         R                  " X25      n[	        Xe5        [         R                  " / SQ5      nUS-  n[        U5      u  p4Sn[         R                  " X25      n[	        Xe5        g)z9Test newton_cotes with points that are not evenly spaced.)        g      ?       @r   gUUUUUU@)rp   gffffff?g @re         "@N)r5   rj   r   dotr   )r*   r    rW   rk   rl   exact_integralnumeric_integrals          r"   test_newton_cotes2!TestQuadrature.test_newton_cotes2K   s     HH_%qD#A66#>,=HH)*qD#A66#>,=r%   c           
      	   [         R                  " S5      n[        [        U5      S5        [        [        USS9S5        [        [        U[         R                  " SSS5      S9S	5        [         R                  " S
SS5      nS n[        [        U" U5      US9S5        [         R                  " S
SS5      n[        [        U" U5      SS9S5        [         R                  " S5      R                  SS5      n[         R                  " S5      R                  SSS5      nU" U5      n[        S5       H  n[        XUS9n[         R                  " US/S9nU Hz  n[        UR                  5      n	U	R                  U[        S 5      5        U[        U	5         S   S-  S-  U[        U	5         S   S-  S-  -
  n
[        XgR                     U
5        M|     M     [         R                  " S5      R                  SS5      nU" U5      n[        XSS9nSUS S 2S
4   US S 2S4   -   -  US S 2S
4   US S 2S4   -
  -  n
[        Xj5        [         R                  " S5      R                  SS5      n[         R                  " S5      R                  SSS5      nU" U5      n[        S5       H  n[        XUS9n[         R                  " US/S9nU Hz  n[        UR                  5      n	U	R                  U[        S 5      5        U[        U	5         S   S-  S-  U[        U	5         S   S-  S-  -
  n
[        XgR                     U
5        M|     M     [         R                  " S/5      n[         R                  " US5      n[        [        XSS9S5        [        [        XSS9S5        [         R                  " / SQ5      n[         R                  " US5      n[        [        XSS9S5        [        [        XSS9S5        [         R                  " / SQ/ SQ/ SQ/5      n[         R                  " US5      n/ SQnS /S-  n[        [        XSS9U5        [        [        XSS9U5        [         R                  " / SQ/ SQ/ S!Q/5      n[         R                  " US5      n/ S"Qn/ S#Qn[        [        XSS9U5        [        [        XSS9U5        g )$NrH   rI   r^   dx@   r   r   rQ       r   c                     U S-  $ )Nr   r   rQ   s    r"   f&TestQuadrature.test_simpson.<locals>.fd   s    a4Kr%         5@ri   rq   r            P@r_   r    axismulti_index)flags   r      rd   }   rp   )r_   r_   r_   r_   )r   r   r   r   )rp   rp   rp   rp   竪Je@)r   r   r   r|   )rp   g      a@g      @g      @)r   r   g*U@)r5   r6   r   r   linspacer   reshaperangenditerlistr   insertslicetuplerj   power)r*   rW   r    r~   rC   iritr-   idxintegral	zero_axisdefault_axiss                r"   test_simpsonTestQuadrature.test_simpson\   s   IIbMWQZ%WQ3',WQ"++aB"78"= KK1a 	 	!*D1 KK1a !-s3 IIbM!!!Q'IIcN""1a+aDqAQ'A1]O4B2>>*

1eDk*U3Z=,a/!3ac
mA6F6IA6MM.. 18<	   IIbM!!!Q'aDA$!AqD'AadG+,!Q$!AqD'0AB$ IIbM!!!Q'IIcN""1a+aDqAQ'A1]O4B2>>*

1eDk*U3Z=,a/!3ac
mA6F6IA6MM.. 18<	   HHaSMHHQNQ/5R0#6HH\"HHQNQ/5R0#6HHlL,?@HHQN(	!{QQ/;R0,?HHlL.ABHHQN0	>Q/;R0,?r%   droplastFTc                     [         R                  " / SQ/ SQ/5      nU(       a  US S 2S S24   n[        USS9n[        [         R                  " U[         R                  S9SS9n[	        X45        g )N)r   r   r   r   r   r   rd   )r   r   r   r   
   r   r   r   r   dtype)r5   rj   r   float64r   )r*   r   rW   resultr+   s        r"   test_simpson_2d_integer_no_x+TestQuadrature.test_simpson_2d_integer_no_x   s`     HH/35 6!SbS&	A$288ARZZ8rBV&r%   r   N)r9   r:   r;   r<   r   rK   r[   rm   rv   r   pytestmarkparametrizer   r=   r   r%   r"   r?   r?   &   sL    "/66,>"K@\ [[Z%7	' 8	'r%   r?   c                   z    \ rS rSrS rS rS rS r\R                  R                  SSS/5      S	 5       rS
 rSrg)TestCumulative_trapezoid   c                     [         R                  " SSSS9nUn[        X!SS9n/ SQn[        X45        [        X!S S9n[        X4SS  5        g )	Nr   r   rd   numr   initial)rp                r   rp   r   r5   r   r	   r   )r*   r    rW   y_int
y_expecteds        r"   test_1d TestCumulative_trapezoid.test_1d   sL    KKA1%$Q15.
*$Q48!"~.r%   c                    [         R                  " S5      R                  SSS5      nUn[        X!SS9n[         R                  " / SQ/ SQ// S	Q/ S
Q// SQ/ SQ//5      n[        X45        / SQn[        / SQU5       HG  u  pg[        X!SUS9n[        UR                  S5        [        X!S US9n[        UR                  U5        MI     g )N   r_   r   r   r   r   )rp   r^   rq         @)rp   r         $@     0@)rp         !@      2@g     <@)rp         )@g      :@     @D@)rp   r   g      A@g     @J@)rp        4@g      E@g      P@))r   r   r   )r_   r   r   )r_   r   r_   r   r   r   )r   r   )r_   r   r   )	r5   r6   r   r	   rj   r   zipr   shape)r*   r    rW   r   r   shapesr   r   s           r"   test_y_nd_x_nd'TestCumulative_trapezoid.test_y_nd_x_nd   s    IIi ((Aq1$Q15XX 2 4 6 4 5 7 5 5 7	8 9
 	* 3y&1KD(qtDEi0(t$GEe,	 2r%   c           	         [         R                  " S5      R                  SSS5      n[         R                  " S5      S-  n[         R                  " / SQ/ SQ// SQ/ SQ//5      [         R                  " / S	Q// S
Q// SQ//5      [         R                  " / SQ/ SQ// SQ/ SQ// SQ/ SQ//5      4n[	        / SQU5       H+  u  pE[        XS UR                  U    US S9n[        Xe5        M-     g )Nr   r_   r   r   )rb         @rc   rg   )rf   rr   r         &@)g      D@g      F@g      H@g      J@)g      L@g      N@r   g      Q@)rq   re   rb   r   )r   r   r`         *@)r   g      3@      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   )r5   r6   r   rj   r   r	   r   r   )r*   rW   r    ys_expectedr   r   r   s          r"   test_y_nd_x_1d'TestCumulative_trapezoid.test_y_nd_x_1d   s    IIi ((Aq1IIaL!O HH')+++-. / HH'(+,+,. / HH')')+))+	, -. !$I{ ;D(.?d157EE. !<r%   c                     [         R                  " SSSS9n[        U5      n/ SQn[        X#5        [        USS9n/ SQn[        X#5        [        US	S
9n/ SQn[        X#5        [        US	SS9n/ SQn[        X#5        g )Nr   r   rd   r   )r   r   r   rp   r   r   )r   r   r   r   rp   r_   ry   )            r   rp   )rz   r   )r   r   r   r   rp   r   )r*   rW   r   r   s       r"   test_x_none$TestCumulative_trapezoid.test_x_none   sx    KKA1%$Q'*
*$Q2-
*$Q1-*
*$Q1a8-
*r%   r   r   r^   c                     [         R                  " SSSS9n[        R                  " [        SS9   [        X!S9  SSS5        g! , (       d  f       g= f)z4If initial is not None or 0, a ValueError is raised.r   r   r   z	`initial`matchr   N)r5   r   r   raises
ValueErrorr	   )r*   r   rW   s      r"   test_initial_error+TestCumulative_trapezoid.test_initial_error  s8    
 KK22&]]:[9 4 :99s   
A
Ac                 |    [         R                  " [        SS9   [        / S9  S S S 5        g ! , (       d  f       g = f)NAt least one point is requiredr   rW   )r   r   r   r	   rJ   s    r"   test_zero_len_y(TestCumulative_trapezoid.test_zero_len_y  s&    ]]:-MN 2& ONNs   
-
;r   N)r9   r:   r;   r<   r   r   r   r   r   r   r   r   r   r=   r   r%   r"   r   r      sG    /-*/0+& [[As855'r%   r   c                   2   \ rS rSrS r\" SS/S9\R                  R                  S5      S 5       5       r	\" SS/S9\R                  R                  S5      S 5       5       r
\S	 5       r\" S
S/S9\R                  R                  S5      S 5       5       rSrg)TestTrapezoidi  c           	          UR                  SSS5      n[        UR                  SUS-  -  5      UR                  SUR	                  UR
                  5      -  5      -  SS9n[        X1R	                  S5      5        g )Nr   g?g      r   ry   ra   )r6   r
   expsqrtasarraypir   )r*   xpr    r   s       r"   test_simpleTestTrapezoid.test_simple  sb    IIc2r"bffS16\*RWWQBEE9J5J-KKPST::c?+r%   z	jax.numpyz)JAX arrays do not support item assignment)reasonsskip_xp_backendsc                    UR                  SSS5      nUR                  SSS5      nUR                  SSS5      nUR                  U5      US   US   -
  -  nUS==   S-  ss'   US==   S-  ss'   UR                  U5      US   US   -
  -  nUS==   S-  ss'   US==   S-  ss'   UR                  U5      US   US   -
  -  nUS==   S-  ss'   US==   S-  ss'   US S 2S S 4   US S S 2S 4   -   US S S S 24   -   nUR                  XS S 2S S 4   -  SS9n	UR                  XS S S 2S 4   -  SS9n
UR                  XS S S S 24   -  SS9n[        XS S 2S S 4   SS	9n[	        X5        [        XS S S 2S 4   SS	9n[	        X5        [        XS S S S 24   SS	9n[	        X5        [        XSS	9n[	        X5        [        XSS	9n[	        X5        [        XSS	9n[	        X5        g )
Nr   r   r_   r   r      r   r   r   )r   	ones_likesumr
   r   )r*   r   r    rW   zwxwywzqqxqyqzr   s                r"   	test_ndimTestTrapezoid.test_ndim  s    KK1a KK1a KK1b!\\!_!qt,
1

2!\\!_!qt,
1

2!\\!_!qt,
1

2!atmqa.4a<@VVA1dD=))V2VVA4D=))V2VVA4q=))V2 aQd]+!4aT!T\?3aT4\?3 a1%a1%a1%r%   c           
         UR                  UR                  SSS5      S5      nUR                  UR                  SSS5      S5      nUR                  SSS5      n[        [        X2SS9U5        [        [        X1R	                  / S	Q5      SS9U5        [        [        X1R	                  / S	Q5      S S 2S 4   SS9U5        [
        R                  " [        5         [        X1R	                  / S	Q5      S S S 24   SS9  S S S 5        UR	                  / S
Q5      n[        [        X2SS9U5        [        [        X1R                  SSS5      SS9U5        g ! , (       d  f       N[= f)Nr         )r_   r      i|  r   r   )r   r   r   )r   g     P`@g     k@r   	   )r   r   r   r
   r   r   r   	Exception)r*   r   r    rW   out0out1s         r"   test_gh21908TestTrapezoid.test_gh21908@  s   
 JJr{{1b"-w7JJr{{1b"-w7{{3R(	!q148	!zz-'@qI4Pa::m4QW=AF	
 ]]9%a::m4T1W=AF & zz/0	!q148a;;q!R0q9	
 &%s   #E
Ec                 r   [         R                  " S5      nX"-  nUS:H  n[         R                  R                  X4S9nSn[	        [        XR5      U5        [         R                  R                  X$S9n[	        [        XW5      U5        [         R                  R                  X$S9n[	        [        X75      U5        g )Nrd   r   )maskr   )r5   r6   marj   r   r
   )r*   r   r    rW   r  ymr   xms           r"   test_maskedTestTrapezoid.test_masked[  s     IIaLEAvUU[[[&	"(!,UU[[[&	")1-UU[[[&	!(!,r%   Tz,array-likes only supported for NumPy backend)np_onlyr   c                    [        [        S5      5      nU Vs/ s H  o3U-  PM	     nnUR                  X!R                  S9nUR                  XAR                  S9n[	        XB5      n[	        Xe5      n[        Xx5        g s  snf )Nrd   r   )r   r   r   r   r
   r   )	r*   r   r    trW   xarryarrresresarrs	            r"   test_array_likeTestTrapezoid.test_array_likel  so     qNAqUAzz!::z.zz!::z.o4&$ s   A=r   N)r9   r:   r;   r<   r   r   r   r   usefixturesr   r	  r   r  r  r=   r   r%   r"   r   r     s    , kJKM[[/0# 1M#J kJKM[[/0
 1M
0 - -  dMNP[[/0% 1P%r%   r   c                      \ rS rSr\R
                  R                  S 5       rSS jr\R
                  R                  SSS/5      \R
                  R                  S	SS
/5      S 5       5       r
\R
                  R                  SSS/SS/SS/SS//5      S 5       r\R
                  R                  \R
                  R                  SSS/5      S 5       5       rS rSrg)TestQMCQuadiy  c           	         Sn[         R                  " [        US9   [        SSS/SS/5        S S S 5        Sn[         R                  " [        US9   [        S SS/SS/5        S S S 5        S nS	n[         R
                  " [        US9   [        USS/SS/5        S S S 5        S
n[         R                  " [        US9   [        S SS/SS/SS9  S S S 5        Sn[         R                  " [        US9   [        S SS/SS/SS9  S S S 5        Sn[         R                  " [        US9   [        S SS/SS/SS9  S S S 5        Sn[         R                  " [        US9   [        S SS/SS/[        R                  R                  S5      S9  S S S 5        Sn[         R                  " [        US9   [        S SS/SS/SS9  S S S 5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNZ= f! , (       d  f       GN7= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nz`func` must be callable.r   za duckr   r   z/`func` must evaluate the integrand at points...c                      gNr   r   r   r%   r"   r#   3TestQMCQuad.test_input_validation.<locals>.<lambda>  s    Qr%   c                 R    U R                   S:X  d   e[        R                  " U 5      $ r   )ndimr5   r   rQ   s    r"   func/TestQMCQuad.test_input_validation.<locals>.func  s     66Q;;66!9r%   z8Exception encountered when attempting vectorized call...z`n_points` must be an integer.c                     gr   r   rQ   s    r"   r#   r!        qr%   g     @)n_pointsz!`n_estimates` must be an integer.c                     gr   r   rQ   s    r"   r#   r!    r'  r%   r   )n_estimatesz8`qrng` must be an instance of scipy.stats.qmc.QMCEngine.c                     gr   r   rQ   s    r"   r#   r!    r'  r%   )qrngz8`qrng` must be initialized with dimensionality equal to c                     gr   r   rQ   s    r"   r#   r!    r'  r%   z,`log` must be boolean \(`True` or `False`\).c                     gr   r   rQ   s    r"   r#   r!    r'  r%   r   log)
r   r   	TypeErrorr   r   warnsUserWarningr   qmcSobol)r*   messager$  s      r"   test_input_validation!TestQMCQuad.test_input_validationz  s   ,]]9G4X1v1v. 5 D]]:W5YAA/ 6	 M\\+W5TAq6Aq6* 6 3]]9G4[1a&1a&6B 5 6]]9G4[1a&1a&cB 5 M]]9G4[1a&1a&x@ 5 M]]:W5[1a&1a&uyyq7IJ 6 B]]9G4[1a&1a&b9 54? 54 65 65 54 54 54 65 54s_   GG
G/?H4H)H%/H60I
G
G,/
G>
H
H"%
H36
I
I   r   Nc           
        ^^^ Uc  [         R                  " S5      nSn[         R                  " U5      m[         R                  " U5      mUU4S jm[         R                  R                  S5      n[        R                  R                  XES9n[         R                  " U5      n[         R                  " U5      U-  n[        TXxUX&S9n	[        R                  R                  UTTUS9n
[        R                  " US-
  S5      U	R                  -  n[        U	R                   XS	9  [         R"                  " U5      U	R                   -  S
:  d   e[         R                  R                  S5      n[        R                  R                  XES9n[        U4S jXxXSUS9n[        [         R$                  " UR                   5      U	R                   SS9  [         R&                  " UR                   5      [         R"                  " U5      S
:  a  [         R(                  OS
:X  d   e[        [         R$                  " UR                  5      U	R                  SSS9  g )Nr   c                 Z   > [         R                  R                  U R                  TT5      $ r2   )r   multivariate_normalpdfT)r    covmeans    r"   r$  $TestQMCQuad.basic_test.<locals>.func  s"    ,,00dC@@r%   l   ^^@E9? )seed)r(  r*  r,  )lower_limitr   gףp=
?rT   r   c                  6   > [         R                  " T" U 6 5      $ r2   )r5   r0  )rE   r$  s    r"   r#   (TestQMCQuad.basic_test.<locals>.<lambda>  s    tT{(;r%   T)r(  r*  r0  r,  +=r(   缉ؗҜ<rS   )r5   oneszeroseyerandomdefault_rngr   r4  r5  r   r<  cdfr   stdtritstandard_errorr   r   prodr   imagr   )r*   r(  r*  signsr#  rngr,  rC   rD   r  refrT   logresr?  r$  r@  s                @@@r"   
basic_testTestQMCQuad.basic_test  s   =GGAJExx~ffTl	A ii##$78yyt.HHTNGGDME!tQH#.;''++AtSa+H{1}e4s7I7IIc5wwu~cll*Q...ii##$78yyt.;Q#+"/ 	v/EJwwv'RWWU^a5GBEEQOOOv445**U	Dr%   r(  i   r*  r   c                 &    U R                  X5        g r2   rW  )r*   r(  r*  s      r"   
test_basicTestQMCQuad.test_basic  s     	.r%   rS  r   r   c                 "    U R                  US9  g )N)rS  rZ  )r*   rS  s     r"   	test_signTestQMCQuad.test_sign  s    e$r%   r0  FTc                    Sn[         R                  " [        US9   [        S SS/SS/US9nS S S 5        WR                  U(       a  [
        R                  * OS:X  d   eUR                  S:X  d   eg ! , (       d  f       NK= f)Nz-A lower limit was equal to an upper limit, sor   c                     gr   r   rQ   s    r"   r#   'TestQMCQuad.test_zero.<locals>.<lambda>  s    Qr%   r   r   r/  )r   r2  r3  r   r   r5   infrP  )r*   r0  r6  r  s       r"   	test_zeroTestQMCQuad.test_zero  sn     B\\+W5;AAC@C 6||3A666!!Q&&& 65s   A33
Bc                     S n[        USS5      n[        R                  R                  SSS9[        R                  R                  SSS9-
  n[	        UR
                  US5        g )Nc                 >    [         R                  R                  U SS9$ )Nr   scale)r   normr=  rQ   s    r"   r$  -TestQMCQuad.test_flexible_input.<locals>.func  s    ::>>!1>--r%   r   r   r   rh  g{Gz?)r   r   rj  rN  r   r   )r*   r$  r  rU  s       r"   test_flexible_inputTestQMCQuad.test_flexible_input  sS    	. tQ"jjnnQan(5::>>!1>+EEc40r%   r   )r9  r   N)r9   r:   r;   r<   r   r   thread_unsafer7  rW  r   r[  r^  rd  rl  r=   r   r%   r"   r  r  y  s    [[": ":HD> [[Z$7[[]QG4/ 5 8/ [[W1vBx"a1b'&JK% L% [[[[UUDM2' 3 '1r%   r  r   r    rz   r   r   c          	        ^	 U R                   U   S:  a  Uc  [        XX$S S9$ U[        XX$SS9-   $ [        R                  " XS5      n [        R                  " U5      S:  a  [        R                  " XS5      OUn[        R                  " U5      S:  a  [        R                  " X$S5      OUn[        R                  " U5      S:  a  [        R                  " X4S5      OUnU R                   S   m	Ub  U[        R
                  " T	5      -  OUnUS L nU(       a  SOUn[        R                  " XR                   5      n[        R                  " X0R                   S S S-   5      n[        R                  " XU4SS9nU	4S jn[        R                  " USU5      nU(       a	  US	SS 24   OUn[        R                  " USU5      nU$ )
Nr_   )r    rz   r   r   r   r   r   )r   r   c                 8   > [        U S T U TST-   U ST-  S  S9$ )Nr   )r    r   )r   )r   r!   s    r"   r~   *cumulative_simpson_nd_reference.<locals>.f  s,    !!BQ%1Qqs8QqstWEEr%   .)	r   r	   r5   moveaxisr#  r6   broadcast_toconcatenateapply_along_axis)
rW   r    rz   r   r   initial_was_noner   r~   r  r!   s
            @r"   cumulative_simpson_nd_referencerx    sv   wwt}q?'2$OO1!RTUVVV 	AR A$&GGAJNAR A&(ggbkAoRr	"2B020@10Dbkk','G 	
A^RYYq\A$#aG 	77#Aoogwws|d':;G
gR0AF


aQ
'C +#c12g,C
++c2t
$CJr%   c                      \ rS rSr\R
                  " S5      r\S-  r\R                  R                  SS5      \R                  R                  SS5      S 5       5       r\R                  R                  S\R
                  " S	S
5      5      \R                  R                  SS5      \R                  R                  SS5      \R                  R                  SS5      \R                  R                  SS5      S 5       5       5       5       5       r\R                  R                  SS\" / SQS94S\" \/ SQ/\\/S94S\" \\\/\\\/SS94S\" / / S94S\" SS94S\" \R
                  " S 5      S94S!\" \R
                  " S 5      S"94S#\" S$\R
                  " S 5      S%94/5      S& 5       rS' rS( r\R                  R"                  \R                  R$                  \" \R*                  " \R,                  \R.                  " SS
S)S*9\R2                  " S+S)S,S-9R5                  S. 5      S/9S09S1 5       5       5       r\R                  R"                  \R                  R$                  \" \R*                  " \R,                  \R.                  " SS
S)S*9\R2                  " S+S)S,S-9R5                  S2 5      S/9S09S3 5       5       5       rS4rg$)5TestCumulativeSimpsoni   r   r   use_dx)FTuse_initialc                 J   [         R                  R                  S5      nSnU(       a  SOSnUR                  5       nUS:X  a%  [         R                  " UR                  U5      5      O)[         R                  " U5      U-  UR                  5       -   n[         R                  " US-   5      S S 2[         R
                  4   nUR                  US-   5      S S 2[         R
                  4   n	[         R                  " XU-  -  SS9n
[         R                  " XUS-   -  -  US-   -  SS9nU(       a  UO	XS   -
  SS  nU(       a  US   OS nU(       a  SU0OS	U0n[        U
40 UDS
U0D6nU(       d  [        XSS9  g U(       a  SOSn[        XSS9  [        UUS S2   UUS S2   SS9  g )N   F*BG r   r_   r   r   r   r   rz   r    r   gV瞯<r(   g{Gzd?)	r5   rL  rM  sortr6   newaxisr   r   r   )r*   r{  r|  rT  r!   orderrz   r    r   crW   YrU  r   kwargr  i0s                    r"   r   TestCumulativeSimpson.test_1d  so   
 ii##$89 ZZ\',zRWWSZZ]#))A,r/CJJL0 	
IIeai BJJ/JJuqy!!RZZ-0FF1T6"FF1QZ<Q'a0aQtVQRL &!A$4$r
3( =e=W= C51!qBC62CAJBEE
?r%   r   r_   x_ndim)r   r_   x_len)r   r   ri   i_ndim)Nr   r_   rz   )NTc                 P   [         R                  R                  S5      nSSU/nUS   Xq   sXq'   US'   UR                  5       nSX'   US:X  a  UOSn	UR                  US9n
S	u  pU(       a&  US:  a  UR                  US9OUR                  5       nOMUS:  a"  [         R                  " UR                  US9US
9O$[         R                  " UR                  Xq   S95      nUc  S OUR                  U	S9n[        XX\US9n[        XX\US9n[         R                  R                  XSS9  g )Nr~  rd      r   r   r_   r   size)NNr   ro  V瞯<r(   )	r5   rL  rM  copyr  r   rx  testingr   )r*   r   r  r  r  rz   rT  r   shape_len_1i_shaperW   r    r   r  rU  s                  r"   test_ndTestCumulativeSimpson.test_nd'  s!    ii##$89 Au!&rEKU2Yjjl!'1+" JJEJ"17!-B?Ez/d;ggcjjekj:;  .$cjjgj.F !BdK-aSWX


""3%"8r%   )r6  kwarg_updatezx must be strictly increasing)r   r   r_   r   rQ   )r   r   r   r   )r    rW   r   )r    rW   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-Drd   z'`initial` must either be a scalar or...r   z"`dx` must either be a scalar or...N)r    rz   c           
          [        U R                  U R                  S S SS9n[        R                  " [
        US9   [        S0 [        U40 UD6D6  S S S 5        g ! , (       d  f       g = f)Nr   )rW   r    rz   r   r   r   r   )dicty0x0r   r   r   r   )r*   r6  r  kwargs0s       r"   test_simpson_exceptions-TestCumulativeSimpson.test_simpson_exceptionsF  sM     DGGdL]]:W5?g!>!>? 655s   A
A(c                     [         R                  R                  S5      nUR                  SS9n[        USS9n[	        US5        g )Nr~  r   r  r   ry   )r5   rL  rM  r   r   )r*   rT  rW   r  s       r"   test_special_cases(TestCumulativeSimpson.test_special_casesU  s=    ii##$89JJBJ q)S!r%   c                 l   [         R                  " USS9n[        X5      n[        USSSS24   USSSS24   5      SSSS24   n/ UR                  SS QSP7n[         R                  " [         R
                  " U5      USSS24   USSS24   -
  [         R
                  " U5      /SS9nSUSSSS24'   U$ )aB  `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   rp   r   )r5   diffr   r   ru  rJ  )r*   rW   r    dsub_integrals_h1sub_integrals_h2zeros_shapetheoretical_differences           r"   1_get_theoretical_diff_between_simps_and_cum_simpsGTestCumulativeSimpson._get_theoretical_diff_between_simps_and_cum_simps`  s     GGAB@F@c4R4iL!C2I,

tt)
 )(a(!#%!#qr'*-=c3B3h-GG%
 "
 -0sADqDy) &%r%   r   )max_dimsmin_sidemax_sider   F)	allow_nanc                     [        U 5      S:  $ NgHz>absrQ   s    r"   r#   TestCumulativeSimpson.<lambda>      #a&SW-r%   )elementsr   c                     S n[        USS9nU" U5      nU R                  U[        R                  " UR                  S   5      S9n[        R
                  R                  USSS24   USSS24   USSS24   -   S	S
9  g)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                     [         R                  " [        SU R                  S   S-   5       Vs/ s H  n[	        U SS U24   SS9PM     snSS9$ s  snf )Nr   r   r   .ra   ry   r   r5   stackr   r   r   )rW   r   s     r"   simpson_referencehTestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dx.<locals>.simpson_reference  sS    886;Aqwwr{1}6MN6M37,6MNUW Ns   Ara   ry   r   rQ   .r   NrH  rD  )r   r  r5   r6   r   r  r   )r*   rW   r  r  rU  r  s         r"   7test_cumulative_simpson_against_simpson_with_default_dxMTestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dx~  s    "	
 !s+"!%!W!W1772;' "X "
 	

""QRL#c12g,)?QR)HHu 	# 	
r%   c                     [        U 5      S:  $ r  r  rQ   s    r"   r#   r    r  r%   c           	         SUR                   S   S-
  -  n[        R                  " SSUR                   S   S9nUSS SU-  [        R                  R	                  SS[        U5      S-
  5      -  -   USS& S n[        XS	9nU" X5      nU R                  X5      n[        R                  R                  US
SS24   US
SS24   US
SS24   -   5        g)r  r   r   r   r   r   NrN   c                     [         R                  " [        SU R                  S   S-   5       Vs/ s H  n[	        U SS U24   USS U24   S9PM     snSS9$ s  snf )Nr   r   r   .rQ   r   r  )rW   r    r   s      r"   r  XTestCumulativeSimpson.test_cumulative_simpson_against_simpson.<locals>.simpson_reference  s`    88<A!QWWR[QR]<ST<Sq37qbqbz2<ST Ts   "ArQ   .)
r   r5   r   rL  uniformlenr   r  r  r   )r*   rW   intervalr    r  r  rU  r  s           r"   'test_cumulative_simpson_against_simpson=TestCumulativeSimpson.test_cumulative_simpson_against_simpson  s    " qwwr{Q'KK21772;/!"HRYY%6%6r1c!fqj%III!"	 !(%!%!W!W"
 	

""QRL#c12g,)?QR)HH	
r%   r   )r9   r:   r;   r<   r5   r6   r  r  r   r   r   r   r  r  r  r  r  rn  slowr   hyp_numarraysr   array_shapesstfloatsfilterr  r  r=   r   r%   r"   rz  rz     s   	1B	QB[[X}5[[]M:@ ; 6@B [[VRYYr1%56[[Xv.[[Wi0[[X}5[[T<09 1 6 1 / 7
94 [[8	($*>?	($"l1CBx*PQ	($"b""b"TU*VW	)4"+;<	8$A,G	6ryy|8LM	2D14NO	-tdryy|/LM	; 	@	@
&< [[[[

..JJ  !a"EYYsB%8??@WX

  
, [[[[

..JJ  !a"EYYsB%8??@WX

  
r%   rz  c                       \ rS rSrS rS r\R                  R                  S\	" \
" SSS5      5      \	" \
" SS	S
5      5      -   5      S 5       rSrg)TestLebedevi  c                     Sn[         R                  " [        US9   [        R                  " S5        S S S 5        g ! , (       d  f       g = f)NzOrder n=-1 not available...r   r   )r   r   rB   r   lebedev_rule)r*   r6  s     r"   r7  !TestLebedev.test_input_validation  s0    /]].g>""2& ?>>s	   <
A
c                     S n[         R                  " S5      u  p#X1" U5      -  nSn[        XESS9  [        [        R                  " U5      S[        R
                  -  5        g )Nc                 4    [         R                  " U S   5      $ )Nr   )r5   r   rQ   s    r"   r~   &TestLebedev.test_quadrature.<locals>.f  s    66!A$<r%      g9-@rG  r(   r   )r   r  r   r5   r   r   )r*   r~   r    wr  rU  s         r"   test_quadratureTestLebedev.test_quadrature  sQ    	  %%b)!A$hu-q	1ruu9-r%   r  r_   r|   r   #      r  c                 \   [         R                  " U5      u  p#[        R                  " SSS9   [        R
                  " UR                  SS9n[        UR                  SSS9  S S S 5        [        [        R                  " U5      S[        R                  -  5        g ! , (       d  f       N@= f)Nignore)divideinvalidr   r   r  rD  r   )r   r  r5   errstater   directional_statsr>  r   mean_resultant_lengthr   r   )r*   r  r    r  r  s        r"   test_propertiesTestLebedev.test_properties  st    %%e,[[(;))!##A6CC55quE < 	q	1RUU7+	 <;s   5B
B+r   N)r9   r:   r;   r<   r7  r  r   r   r   r   r   r  r=   r   r%   r"   r  r    sS    '
. [[Wd5B?&;d5SRSCT>U&UV, W,r%   r  ).r   numpyr5   numpy.testingr   r   r   
hypothesisr   hypothesis.strategies
strategiesr  hypothesis.extra.numpyextrar  scipy.integrater   r   r	   r
   r   r   r   r   r   scipy.integrate._quadraturer   scipyr   r   r   scipy.conftestr   r   scipy._lib._array_api_no_0dr   r   r   r   r?   r   r   r  rx  rz  r  r   r%   r"   <module>r     s      L L  " ( (; ; ; N + + D 7;;// 3 3 N' N'bV' V'r e% e% e%P_1 _1D -1T4b "J
 
B, ,r%   