
    -iŐ                        S SK r S SKrS SKrS SKrS SKJrJrJrJrJ	r	  S SK
Jr  S SKJr  S SKJrJrJrJrJrJr  \R*                  R,                  rSrS rS rS	 rS
 rS rS rS rS rS r S r!S r"S r#S r$S r%S r&S r'S r(S r)S r*S r+S r,S r-S r.S r/S r0S  r1 " S! S"5      r2\R*                  Rg                  S#S$/5      \R*                  Rg                  S%S&/5      \R*                  Rg                  S'/ S(Q5       " S) S*5      5       5       5       r4 " S+ S,5      r5 " S- S.5      r6 " S/ S05      r7\R*                  R-                  S1\S29\R*                  R-                  S3\S29 " S4 S55      5       5       r8 " S6 S7\5      r9g)8    N)array_namespacexp_assert_closexp_size	np_compatis_array_api_strict)cubature)_InfiniteLimitsTransform)Rule	FixedRuleNestedFixedRuleGaussLegendreQuadratureGaussKronrodQuadratureGenzMalikCubaturez2JAX/Dask arrays do not support boolean assignment.c                 R    UR                  U S5      nUR                  US5      nX4-  $ N)   r   )r   r   r   reshape)xnxp
x_reshaped
n_reshapeds        V/var/www/html/venv/lib/python3.13/site-packages/scipy/integrate/tests/test_cubature.pybasic_1d_integrandr   !   s+    Az*JAz*J!!    c                 >    UR                  SU S-   -  U S-   -  S5      $ )N   r   r   r   r   r   r   s     r   basic_1d_integrand_exactr"   (   s#    ::a!A#h!ng..r   c                 h    UR                  UR                  U SS9S5      UR                  US5      -  $ )Nr   axisr    r   r   )r   sum)r   r   r   s      r   basic_nd_integrandr(   -   s0    ::bffQRf('2BJJq'4JJJr   c                 >    SSU -   -  * SSU -   -  -   SU -   SU -   -  -  $ )Nr         r    r!   s     r   basic_nd_integrand_exactr-   1   s0    1XIAaC AaC!A#;//r   c                    U R                   S   U R                   S   pTUS   nUR                  X/S/[        UR                   5      S-
  -  QUP75      nUR                  S[        R
                  -  U-  UR                  Xg-  SS9-   5      $ )z
.. math:: f_1(\mathbf x) = \cos\left(2\pi r + \sum^n_{i = 1}\alpha_i x_i\right)

.. code-block:: mathematica

    genzMalik1980f1[x_List, r_, alphas_List] := Cos[2*Pi*r + Total[x*alphas]]
r   r   N.r   r   r$   )shaper   lencosmathpir'   )r   ralphasr   npointsndimalphas_reshapedr   s           r   genz_malik_1980_f_1r:   6   s     GGAJTY'OANA3FLL0AA0E+FNNOJ66!DGG)A+'C" MMNNr   c           	         [        U 5      nUR                  U / S/[        UR                  5      S-
  -  QUP75      n UR                  U/ S/[        UR                  5      S-
  -  QUP75      nSU-  S-  UR	                  USS9-  UR                  S[        R                  -  U-  UR                  X0U-   -  S-  SS9-   5      -  UR	                  UR                  X0U-
  -  S-  5      SS9-  $ )Nr   r   r$   r         ?)
r   r   r1   r0   prodr2   r3   r4   r'   sin)abr5   r6   r   r8   s         r   genz_malik_1980_f_1_exactrB   G   s    1:D


1<!c&,,/!34<t<=A


1<!c&,,/!34<t<=A 
d

	GGFG$	%
&&4771rvvf!ns&:vDD
E	F ''"&&Q3)*'
4	5r   c                     UR                  U R                  US S 5      5      nUR                  U R                  U5      5      nSnUR                  USS9S   nXT-  U-  nX44$ )Nr   	   r$   .Nasarrayrandomr'   )rngr0   r   r5   r6   
difficultynormalisation_factorss          r   genz_malik_1980_f_1_random_argsrL   T   si    


3::eCRj)*AZZ

5)*FJFF6F3I> #88F;r   c                     U R                   S   U R                   S   pTUS   nUS   nUR                  X/S/[        UR                   5      S-
  -  QUP75      nSUR                  US-  X-
  S-  -   SS9-  $ )z
.. math:: f_2(\mathbf x) = \prod^n_{i = 1} (\alpha_i^2 + (x_i - \beta_i)^2)^{-1}

.. code-block:: mathematica

    genzMalik1980f2[x_List, alphas_List, betas_List] :=
        1/Times @@ ((alphas^2 + (x - betas)^2))
r   r   r/   r   r   r$   )r0   r   r1   r>   	r   r6   betasr   r7   r8   r9   betas_reshapedr   s	            r   genz_malik_1980_f_2rQ   _   s     GGAJTY'O9%NANA3FLL0AA0E+FNNOJRWW_a':+Dq*HHrWRRRr   c                    [        U 5      nUR                  U / S/[        UR                  5      S-
  -  QUP75      n UR                  U/ S/[        UR                  5      S-
  -  QUP75      nSU-  S-  UR	                  USS9-  UR	                  UR                  X-
  U-  5      UR                  X-
  U-  5      -
  SS9-  $ Nr   r   r$   )r   r   r1   r0   r>   atanr@   rA   r6   rO   r   r8   s         r   genz_malik_1980_f_2_exactrV   r   s    1:D


1<!c&,,/!34<t<=A


1<!c&,,/!34<t<=A 
d
QrwwvBw//
''GGQY&'"''19f2D*EE  
	
r   c                 ^   US   nUR                  U R                  U5      5      nUR                  U R                  U5      5      nSnUR                  XBR                  S5      -  SS9nXrR                  SSU-  -  5      -  S   nXH-  [        R                  " USSU-  -  5      -  nUS-  nXE4$ )	Nr   g      9@g       r$   r   r   rE   
   )rG   rH   r>   r3   pow)	rI   r0   r   r8   r6   rO   rJ   productsrK   s	            r   genz_malik_1980_f_2_random_argsr[      s    9DZZ

5)*FJJszz%()EJwwvzz$//bw9H%zz!qv,'??K+dhhz1$<.PPF bLF=r   c                     U R                   S   U R                   S   pCUS   nUR                  X/S/[        UR                   5      S-
  -  QUP75      nUR                  UR	                  XV-  SS95      $ )z
.. math:: f_3(\mathbf x) = \exp\left(\sum^n_{i = 1} \alpha_i x_i\right)

.. code-block:: mathematica

    genzMalik1980f3[x_List, alphas_List] := Exp[Dot[x, alphas]]
r   r   r/   r   r$   r0   r   r1   expr'   r   r6   r   r7   r8   r9   r   s          r   genz_malik_1980_f_3r`      st     GGAJTY'OANA3FLL0AA0E+FNNOJ66"&&5B&?@@r   c                 z   [        U 5      nUR                  U / S/[        UR                  5      S-
  -  QUP75      n UR                  U/ S/[        UR                  5      S-
  -  QUP75      nSU-  S-  UR	                  USS9-  UR	                  UR                  X -  5      UR                  X!-  5      -
  SS9-  $ rS   )r   r   r1   r0   r>   r^   )r@   rA   r6   r   r8   s        r   genz_malik_1980_f_3_exactrb      s    1:D


1<!c&,,/!34<t<=A


1<!c&,,/!34<t<=A 
d
QrwwvBw//
''"&&$rvvfj'99'
C	Dr   c                     UR                  U R                  U5      5      nUR                  USS9S   nSnXS-  U-  nU4$ )Nr   r$   rE   g      (@rF   )rI   r0   r   r6   rK   rJ   s         r   genz_malik_1980_f_3_random_argsrd      sL    ZZ

5)*FFF6F3I>J #88F9r   c                     U R                   S   U R                   S   pCUS   nUR                  X/S/[        UR                   5      S-
  -  QUP75      nSUR                  XV-  SS9-   U* S-
  -  $ )z
.. math:: f_4(\mathbf x) = \left(1 + \sum^n_{i = 1} \alpha_i x_i\right)^{-n-1}

.. code-block:: mathematica
    genzMalik1980f4[x_List, alphas_List] :=
        (1 + Dot[x, alphas])^(-Length[alphas] - 1)
r   r   r/   r   r$   )r0   r   r1   r'   r_   s          r   genz_malik_1980_f_4rf      s{     GGAJTY'OANA3FLL0AA0E+FNNOJ3"==$qIIr   c                 H   ^^^ [        U 5      mUUU4S jn[        X@UT5      $ )Nc                    > TR                  U / S/[        TR                  5      S-
  -  QTP75      nST-  TR                  TSS9-  [        R
                  " T5      -  STR                  TU-  SS9-   -  $ rS   )r   r1   r0   r>   r3   	factorialr'   )r   r   r6   r8   r   s     r   F$genz_malik_1980_f_4_exact.<locals>.F   s    ZZ#Iqc3v||+<q+@&A#ID#IJ
 $JrwwvBw//nnT"#266&:-B6779	
r   )r   _eval_indefinite_integral)r@   rA   r6   r   rj   r8   s     `` @r   genz_malik_1980_f_4_exactrm      s"    1:D
 %Q1b11r   c                 l   [        U5      nUR                  X/SS9nSn[        R                  " [	        S5      US9 Hm  nUR                  [        U[	        U5      5       VV	s/ s H  u  p[        XXU	4   5      PM     sn	n5      n
U[        S[        U5      U-   5      U " U
5      -  -  nMo     U$ s  sn	nf )z{
Calculates a definite integral from points `a` to `b` by summing up over the corners
of the corresponding hyperrectangle.
r   r$   r   )repeatr   )
r   stack	itertoolsproductrangerG   zipfloatrY   r'   )rj   r@   rA   r   r8   pointsoutindijselected_pointss              r   rl   rl      s     1:DXXqf1X%F
C  q$7**-0eDk-BC-BTQU6Q$< -BC
 	s2s3x$'!O*<<<	 8 J	 Ds   #B0c                     US   nUR                  U R                  U5      5      nUR                  USS9S   nSnXc-  U-  U-  nU4$ )Nr   r$   rE   g      ,@rF   )rI   r0   r   r8   r6   rK   rJ   s          r   genz_malik_1980_f_4_random_argsr}      sZ    9DZZ

5)*FFF6F3I>J6),AAF9r   c                    U R                   S   U R                   S   pTUS   nUS   nUR                  X/S/[        UR                   5      S-
  -  QUP75      nUR                  UR	                  US-  X-
  S-  -  SS9* 5      $ )z
.. math::

    f_5(\mathbf x) = \exp\left(-\sum^n_{i = 1} \alpha^2_i (x_i - \beta_i)^2\right)

.. code-block:: mathematica

    genzMalik1980f5[x_List, alphas_List, betas_List] :=
        Exp[-Total[alphas^2 * (x - betas)^2]]
r   r   r/   r   r   r$   r]   rN   s	            r   genz_malik_1980_f_5r      s     GGAJTY'O9%NANA3FLL0AA0E+FNNOJ66	"j&AA%EEB	OO r   c           	         [        U 5      nUR                  U / S/[        UR                  5      S-
  -  QUP75      n UR                  U/ S/[        UR                  5      S-
  -  QUP75      nSU-  S-  UR	                  USS9-  [
        R                  US-  -  -  UR	                  [        R                  R                  X#U -
  -  5      [        R                  R                  X!U-
  -  5      -   SS9-  $ )Nr   r=   r   r$   r   )
r   r   r1   r0   r>   r3   r4   scipyspecialerfrU   s         r   genz_malik_1980_f_5_exactr     s    1:D


1<!c&,,/!34<t<=A


1<!c&,,/!34<t<=A 
t
	GGFG$	%77T!V	 ''MMf	23mme) 456  
	
	r   c                 (   UR                  U R                  U5      5      nUR                  U R                  U5      5      nSnUR                  UR                  X2R                  S5      -  SS95      S   nX6-  [        R                  " U5      -  nX44$ )Ng      5@g       @r   r$   rE   )rG   rH   sqrtr'   r3   )rI   r0   r   r6   rO   rJ   rK   s          r   genz_malik_1980_f_5_random_argsr     s    ZZ

5)*FJJszz%()EJGGBFF6::c?+BF$LMiX+dii
.CCF=r   c                     U R                   S   U R                   S   pCUS   nUR                  X/S/[        UR                   5      S-
  -  QUP75      nUR                  UR	                  XV-  S-  SS9* 5      $ )zR
.. math::

    f(\mathbf x) = \exp\left(-\sum^n_{i = 1} (\alpha_i x_i)^2 \right)
r   r   r/   r   r   r$   r]   r_   s          r   
f_gaussianr   (  s|     GGAJTY'OANA3FLL0AA0E+FNNOJ66266?7!;"6EEFFr   c                    [        U 5      nSnSn[        U5       Hi  nUR                  X   5      (       a  UR                  X   5      (       a  US-  nM:  UR                  X   5      UR                  X   5      :w  d  Md  US-  nMk     [        R                  " [        R
                  5      U-  SU-  UR                  USS9-  -  $ )Nr   r   r   r   r$   )r   rs   isinfr3   r   r4   r>   )r@   rA   r6   r   r8   double_infinite_countsemi_infinite_country   s           r   f_gaussian_exactr   5  s     1:D4[88AD>>bhhqtnn!Q&!XXad^rxx~-1$	  IIdgg$&	b!99 r   c                 R    UR                  U R                  U5      5      nUS-  nU4$ )Nd   )rG   rH   )rI   r0   r   r6   s       r   f_gaussian_random_argsr   K  s,    ZZ

5)*F cMF9r   c                     U SS2S4   U SS2S4   U SS2S4   U SS2S4   4u  p4pVX1SS2S4   -  UR                  U5      -  UR                  U* US-  -
  US-  -
  5      -  nUR                  $ )z>
.. math::

    f(x, y, z, w) = x^n \sqrt{y} \exp(-y-z^2-w^2)
Nr   r   r   r*   )r   r^   T)x_arrr   r   r   yzwress           r   f_modified_gaussianr   U  s{     q!teAqDk5A;adCJA!!T'
?bggaj
(2661"QT'!Q$,+?
?C55Lr   c                 @    SSSU-  -   -  [         R                  S-  -  $ )Nr   r   g      ?)r3   r4   )r@   rA   r   r   s       r   f_modified_gaussian_exactr   a  s$    
 a!A#g;S)))r   c                     U H&  nUR                  X:H  5      (       d  M  [        S5      e   UR                  U R                  S   5      $ )z
This emulates a function with a list of singularities given by `points`.

If no `x_arr` are one of the `points`, then this function returns 1.
called with a problematic pointr   )any
ValueErroronesr0   )r   rv   r   points       r   f_with_problematic_pointsr   i  sD     66%.!!>??  775;;q>""r   c                       \ rS rSrSr\R                  R                  S/ SQ5      S 5       r\	" SSS9S	 5       r
S
 rS rS rS rS rS rSrg)TestCubatureiw  z/
Tests related to the interface of `cubature`.
rule_str)zgauss-kronrod
genz-malikgk21gk15c                    UR                  SUR                  S9nUR                  SS/UR                  S9nUR                  SS/UR                  S9n[        [        XEXU4S9n[        UR                  [        X25      SSS9  g )N   dtyper   r   )ruleargs:0yE>rtolatol)arangefloat64rG   r   r(   r   estimater-   )selfr   r   r   r@   rA   r   s          r   test_pass_strTestCubature.test_pass_str|  s~     IIarzzI*JJ1vRZZJ0JJ1vRZZJ0)1hWMLL$Q+		
r   Tz,array-likes only supported for NumPy backend)np_onlyreasonc                     [         R                  " S[         R                  S9nS/nS/n[        [        UUX!4S9n[        UR                  [        X!5      SSS9  g )Nr   r   r   r   r   r   r   )r   r   r   r   r   r   r   r"   r   r   r   r@   rA   r   s         r   test_pass_array_like_not_array+TestCubature.test_pass_array_like_not_array  sa     Qi&7&78CC	
 	LL$Q+		
r   c                     UR                  S/5      nUR                  S/5      n[        5       n[        [        UUUSUR	                  SUR
                  S9U4S9nUR                  S:X  d   eUR                  S:X  d   eg )Nr   r   rX   r   r   )r   max_subdivisionsr   not_converged)rG   BadErrorRuler   r   r   r   subdivisionsstatus)r   r   r@   rA   r   r   s         r   !test_stops_after_max_subdivisions.TestCubature.test_stops_after_max_subdivisions  s    JJsOJJsO~))ARZZ)0"5
 2%%%zz_,,,r   c                     UR                  S//UR                  S9nUR                  S//UR                  S9n[        R                  " [        SS9   [        [        X#U4S9  S S S 5        g ! , (       d  f       g = f)Nr   r   r   z`a` and `b` must be 1D arraysmatchr   )rG   r   pytestraises	Exceptionr   r   r   r   r@   rA   s       r   test_a_and_b_must_be_1d$TestCubature.test_a_and_b_must_be_1d  sa    JJuBJJJ/JJuBJJJ/]]9,KL'RE: MLLs   A,,
A:c                     UR                  / 5      nUR                  / 5      n[        R                  " [        SS9   [	        [
        X#U4S9  S S S 5        g ! , (       d  f       g = f)Nz`a` and `b` must be nonemptyr   r   )rG   r   r   r   r   r   r   s       r   test_a_and_b_must_be_nonempty*TestCubature.test_a_and_b_must_be_nonempty  sG    JJrNJJrN]]9,JK'RE: LKKs   A
A$c           
      6   UR                  SUR                  S9nUR                  S/UR                  S9nUR                  S/UR                  S9n[        [        UUX!4S9n[        UR                  UR                  S/S/S/S/S//UR                  S9SSS9  g )Nr   r   r   r   r   r   )r   r   rG   r   r   r   r   r   s         r   test_zero_width_limits#TestCubature.test_zero_width_limits  s    IIarzzI*JJs"**J-JJs"**J-	
 	LLJJaS1#sQC0

JC		
r   c                    UR                  SUR                  S9nUR                  S/UR                  S9nUR                  S/UR                  S9n[        [        UUX!4S9n[        UR                  [        X!5      * SSS9  g )Nr   r   r   r   r   r   r   )r   r   rG   r   r   r   r   r"   r   s         r   test_limits_other_way_around)TestCubature.test_limits_other_way_around  s    IIarzzI*JJs"**J-JJs"**J-	
 	LL%a,,		
r   c                    [        [        UR                  S/UR                  S9UR                  S/UR                  S9/ UR                  S/UR                  S9U4S9R                  R
                  nX!R                  :X  d   e[        [        UR                  S/UR                  S9UR                  S/UR                  S9/ UR                  S/UR                  S9U4S9R                  R
                  nX!R                  :X  d   e[        [        UR                  S/UR                  S9UR                  S/UR                  S9/ UR                  S/UR                  S9U4S9R                  R
                  nX!R                  :X  d   eg )Nr   r   r   )rv   r   )r   r   rG   r   r   r   float32)r   r   result_dtypes      r   $test_result_dtype_promoted_correctly1TestCubature.test_result_dtype_promoted_correctly  sg   JJs"**J-JJs"**J-**aS

*3R8
 (55 	 zz)))JJs"**J-JJs"**J-**aS

*3R8
 (55 	 zz)))JJs"**J-JJs"**J-**aS

*3R8
 (55 	 zz)))r   r,   N)__name__
__module____qualname____firstlineno____doc__r   markparametrizer   skip_xp_backendsr   r   r   r   r   r   r   __static_attributes__r,   r   r   r   r   w  so     [[Z * 

 dKM
M
&-";;
(
(*r   r   r   g-C6?r   gh㈵>r   )r   r   r   c                   b
   \ rS rSrSr\" SSS9\R                  R                  S\	\
S/S/S	S
/44\	\
SS/SS/S	SS/44\	\
SS/S
S
/SSS/44\	\
/ SQ/ SQS/ SQ44\\S/S/S
/S/44\\SS/SS/SS/SS/44\\/ SQ/ SQ/ SQ/ SQ44\\/ SQ/ SQ/ SQ/ SQ44\\/ SQ/ SQ/ SQ/ SQ44\\/ SQ/ SQ/ SQ/ SQ44\\S/S/S/44\\SS/SS/S
S
/44\\/ SQ/ SQ/ SQ44\\S/S/S/44\\SS/SS/SS/44\\/ SQ/ SQ/ SQ44\\S/S/S/S/44\\SS/SS/SS/SS
/44\\SS/SS/SS/SS/44\\/ SQ/ SQ/ SQ/ SQ44/5      S 5       5       r\" SSS9\R                  R                  S\	\
\4\\\4\\\4\\\4\\\4/5      \R                  R                  S/ SQ5      S 5       5       5       r\R                  R                  SS  S!/S/S/S"4S# S$/S/S/S%//4S& S'// SQ/ SQ/ S(Q/4S) S'// SQ/ SQ/ S*Q/ S(Q/4S+ S'// SQ/ SQ/ S,Q/ S*Q/ S(Q/4/5      S- 5       r\R                  R                  S.\S9\R                  R                  S\S9\R                  R                  S\\\S/\R@                  * /\R@                  /4\\\S0\R@                  * \R@                  * /\R@                  \R@                  /4\\\S/S/\R@                  /4\\\S/\R@                  * /S/4\\\S0SS/\R@                  \R@                  /4\\\S0S\R@                  * /\R@                  \R@                  /4\\\S1SS\R@                  * \R@                  * /\R@                  \R@                  \R@                  \R@                  /4\\\S1\R@                  * \R@                  * \R@                  * \R@                  * /SS\R@                  \R@                  /4S2 S3 S4 \!" 5       S\R@                  * S/\R@                  S\R@                  /4\RD                  " \#\$S5 \!" 5       SS\R@                  * \R@                  * /S\R@                  \R@                  \R@                  /4\R                  RJ                  S69/
5      S7 5       5       5       r&\R                  R                  S.\S9\R                  R                  S\S9\R                  R                  SS8 S9\RN                  -  /\R@                  * /\R@                  /S//4S: S9\RN                  -  \R@                  * S/\R@                  S/SS//4/5      S; 5       5       5       r(S<r)g")=TestCubatureProblemsi  z1
Tests that `cubature` gives the correct answer.

dask.arrayz0Dask hangs/takes a long time for some test casesr   problemr   rX         ?r   r   r   r+   r=   )r   r   r   )r   r   r   r   r   r   r   2   r*   r<   )r   r*   r+   )r   r   r   )r   r   r   )r   r   r   r   )r   r   r   r   c           
        ^ Uu  pgpn
TR                  UTR                  S9nTR                  U	TR                  S9n	[        U4S jU
 5       5      n
[        U5      nUS:X  a  US:  a  [        R
                  " S5        [        UUU	UUU/ U
QTP7S9nUR                  S:X  d   eUR                  nU" X/U
QTP76 n[        UUUUSUR                   S	UR                   3S
9  g )Nr   c              3   X   >#    U  H  nTR                  UTR                  S 9v   M!     g7f)r   NrG   r   ).0argr   s     r   	<genexpr>:TestCubatureProblems.test_scalar_output.<locals>.<genexpr>  s"     G$3RZZ2::Z6$s   '*r   r   1Genz-Malik cubature does not support 1D integralsr   r   r   r   	convergedestimate_error=, subdivisions=r   r   err_msg)rG   r   tupler   r   skipr   r   r   r   errorr   )r   r   r   r   r   r   fexactr@   rA   r   r8   r   est	exact_sols        `         r   test_scalar_output'TestCubatureProblems.test_scalar_output  s    l  '!JJq

J+JJq

J+G$GGqz<D1HKKKL4
 zz[(((ll!**r*	%cii[@P@P?QR	
r   r0   )	r   r*   )r+   )r   r   )r   r*   r   r+   )r*   r   )r*   r+   r   )r   r   r*   c           
          [         R                  R                  S5      nUS   nUS:X  a  US:  a  [        R                  " S5        US:X  a%  US:  a  [        R
                  R                  S5        Uu  pnU" XsU5      nUR                  S/U-  UR                  S	9nUR                  S/U-  UR                  S	9n[        U	UUUUU/ UQUP7S
9nUR                  nU
" X/UQUP76 n[        UUUUSUR                   SUR                   3S9  SUR                   SUR                   SUR                  UR                  U-
  5       3nUR                  S:X  d   U5       eUR                  R                   US S :X  d   eg )Nr   r   r   r   r   r   !Gauss-Kronrod is slow in >= 5 dimr   r   r   r   r   r   , subdivisions= , true_error=r   )r   rH   default_rngr   r   r   slowrG   r   r   r   r   r  r   absr   r0   )r   r   r   r0   r   r   r   rI   r8   r  r  random_argsr   r@   rA   r   r  r  r   s                      r   test_array_output&TestCubatureProblems.test_array_output  s   \ **1-Ry<D1HKKKL<DAIKK@A '+3r*JJsTzJ4JJsTzJ44
 ll!**r*	%cii[@P@P?QR	
 %SYYK 0$$'$4$4#5 6!!#y(@!A BD zz[(1'1(||!!U3BZ///r   c                     U $ Nr,   r   r   s     r   <lambda>TestCubatureProblems.<lambda>l  s    !r   g      I@Nc                 *    UR                  U 5      U -  $ r  r?   r  s     r   r  r  {  s    "&&)A+r   gBsvi@g        c                 B    UR                  U R                  S   S45      $ Nr   r   r   r0   r  s     r   r  r        "''1771:q/2r   g      ?)r=   r=   r=   c                 B    UR                  U R                  S   S45      $ r  r  r  s     r   r  r    r  r   )r   r   r   c                 B    UR                  U R                  S   S45      $ r  r  r  s     r   r  r    r  r   )g?r   r=   c                    Uu  pgpn
UR                  XR                  S9nUR                  XR                  S9n	UR                  XuR                  S9nU
b(  U
 Vs/ s H  oR                  XR                  S9PM     n
n[        U5      nUS:X  a  US:  a  [        R                  " S5        US:X  a%  US:  a  [        R
                  R                  S5        [        UUU	UUUU
U4S9n[        UR                  UUUSUR                   S	UR                   3S
S9  SUR                   SUR                   SUR                  UR                  U-
  5       3nUR                  S:X  d   U5       eg s  snf )Nr   r   r   r   r   r  r   r   r   rv   r   r   r   F)r   r   r   check_dtyper  r  r   )rG   r   r   r   r   r   r  r   r   r   r  r   r  r   )r   r   r   r   r   r   r  r  r@   rA   rv   r   r8   r   r   s                  r   test_break_points&TestCubatureProblems.test_break_pointsi  sx   t ")!JJq

J+JJq

J+

5


3GMNvejjjjj9vFNqz<D1HKKKL<DAIKK@A	
 	LL%cii[@P@P?QR	
 %SYYK 0$$'$4$4#5 6!!#u(<!= >@ zz[(1'1(C Os   "E+	jax.numpy)r   r   )r   r   r
  c                 .    SUR                  U SS9S-  -  $ )Nr   r   r$   r   )r>   r  s     r   r  r    s    !BGGABG/22r   c                 6    UR                  SUR                  S9$ )NgUUUUUU?r   r   )r@   rA   r   s      r   r  r    s    RZZ2::Z>r   c                     [        5       $ r  )r   rI   r0   r   s      r   r  r    s    57r   c                 <    UR                  / SQUR                  S94$ )N)r   r   r   r*   r+   r   r   r+  s      r   r  r  /  s    

?"**
(U'Wr   )marksc           
         [         R                  R                  S5      nUu  pxppUR                  XR                  S9nUR                  XR                  S9nU	" XjU5      n[        U5      nUS:X  a  US:  a  [        R                  " S5        US:X  a%  US:  a  [        R                  R                  S5        US:X  a5  US:  a/  [        U5      (       a  [        R                  R                  S5        [        UUUUUU/ UQUP7S	9nUR                  S
:X  d   e[        UR                  U" X/UQUP76 UUSUR                    SUR"                   3SS9  g )Nr   r   r   r   r   r+   zGenz-Malik is slow in >= 5 dimz5Genz-Malik very slow for array_api_strict in >= 4 dimr   r   error_estimate=r   Fr   r   r   check_0d)r   rH   r  rG   r   r   r   r   r   r  r   xslowr   r   r   r   r  r   )r   r   r   r   r   r   rI   r  r  random_args_funcrandom_args_shaper@   rA   r   r8   r   s                   r   test_infinite_limits)TestCubatureProblems.test_infinite_limits  sM   Z **1->E;"qJJq

J+JJq

J+;qz<D1HKKKL<DAIKK=><DAI2Eb2I2IKKUV4
 zz[(((LL!""r"%cii[@P@P?QR	
r   c                 0    UR                  U 5      U -  S-  $ )N   r  r  s     r   r  r  f  s    266!9q=1,r   g?c                 L    UR                  U S S 2S4   5      U S S 2S4   -  S-  $ )Nr   r8  r  r  s     r   r  r  u  s&    266!AqD'?Qq!tW4q8r   c                 
   Uu  pgpn
UR                  XR                  S9nUR                  XR                  S9n	UR                  XuR                  S9n[        U5      nUS:X  a  US:  a  [        R                  " S5        U
b(  U
 Vs/ s H  oR                  XR                  S9PM     n
n[        UUU	UUUU
U4S9nUR                  S:X  d   e[        UR                  UUUSUR                   SUR                   3S	S
9  g s  snf )Nr   r   r   r   r#  r   r/  r   Fr0  )rG   r   r   r   r   r   r   r   r   r  r   )r   r   r   r   r   r   r  r  r@   rA   rv   r8   r   r   s                 r   %test_infinite_limits_and_break_points:TestCubatureProblems.test_infinite_limits_and_break_pointsa  s   F ")!JJq

J+JJq

J+

5


3qz<D1HKKKLGMNvejjjjj9vFN	
 zz[(((LL%cii[@P@P?QR	
 Os   "D r,   )*r   r   r   r   r   r   r   r   r   r:   rB   rQ   rV   r`   rb   rf   rm   r   r   r  rL   r[   rd   r}   r   r  r%  boolean_index_skip_reasonr   r   r   r3   infr   paramr   r   r2  r5  r4   r;  r   r,   r   r   r   r     s(    lOQ[[Y   & C D 	
(  %FFA		
  %FFA		
  %		
  %DC		
  %FHQQ
	
  %		
  %		
  %		
  %		
  %DC	
  %GFA	
  %	
  %CC	
  %FFVI	
  %L	
  %DC		
  %HFAA		
  %HFQA		
  %		
QR) Rf!
gRQj!
F lOQ[[Y   & ,		
  %+	
  %+	
  %+	
  %+	
5) @ [[W 
' 
*0
AQZ*0X [[Y  F C D 	
" &DC	
 3E	
 3E"		
 3E "
	
[8) 8r)2s8r)2V [[!!+6O!P[[!!,7P!Q[[Y   # hhYKXXJ	
  "hhY	"XXtxx 	
 "CXXJ	
 "hhYKC	
 "FXXtxx 	
 "	NXXtxx 	
 "DHH9txxi(XXtxx4884	
 "hhY	DHH9txxi8488TXX&	
 3 ? +G	1XXr488$	
 	 $ * XAy488),DHHdhh1 ++##!	
oi) iT&
Ui R QX&
P [[!!+6O!P[[!!,7P!Q[[Y - tww hhYKXXJ SE	
" 9 dgg hhYNXXqM XJ	
!) @#
A R QD#
r   r   c                       \ rS rSrSr\R                  R                  SSS/SS/\S4S/S/\	S4/5      S 5       r
S	 rS
rg)	TestRulesi  zB
Tests related to the general Rule interface (currently private).
r   r   r      r  c                    Uu  p4pVU" USU06nUR                  X2R                  S9nUR                  XBR                  S9n[        R                  " [        SS9   UR                  [        X4U4S9  S S S 5        g ! , (       d  f       g = f)Nr   r   zincompatible dimensionr   r   )rG   r   r   r   r   r   r   )r   r   r   r@   rA   
quadraturequadrature_argsr   s           r   (test_incompatible_dimension_raises_error2TestRules.test_incompatible_dimension_raises_error  sv    " -4)j?2r2JJq

J+JJq

J+]]9,DEMM,a"M? FEEs   A99
Bc           	         UR                  S/5      nUR                  S/5      n[        5       [        5       4 H<  n[        R                  " [
        5         UR                  [        X#U4S9  S S S 5        M>     g ! , (       d  f       MP  = f)Nr   r   r   )rG   r
   r   r   r   r   r   r   )r   r   r@   rA   
base_classs        r   +test_estimate_with_base_classes_raise_error5TestRules.test_estimate_with_base_classes_raise_error  sf    JJsOJJsO69;/Jy)##$6B5#I *) 0))s   A::
B		r,   N)r   r   r   r   r   r   r   r   r   r   rG  rK  r   r,   r   r   rA  rA    sk     [[Y FF"	
 CC	
)  @! @Jr   rA  c            	          \ rS rSrSr\R                  R                  S\S4\S4\S4\	S4\	S4/5      S	 5       r
\R                  R                  S
\\4S4/5      S 5       r\R                  R                  S\/5      S 5       rSrg)TestRulesQuadraturei  z0
Tests underlying quadrature rules (ndim == 1).
)r   	rule_argsr	  )r   )rX   )   rB  c                 >  ^^
 U" UST06nTR                  STR                  S9m
U
U4S jnTR                  S/TR                  S9nTR                  S/TR                  S9nTR                  ST
S-   -  T
S-   -  S5      nUR	                  XVU5      n	[        U	US	SS
9  g )Nr   r   r   c                 T   > TR                  U S5      nTR                  TS5      nX-  $ r   r   )r   r   r   r   r   s      r   r  >TestRulesQuadrature.test_base_1d_quadratures_simple.<locals>.f  s,    Az2JAz2J))r   r   r   r   r    r   r   )r   r   rG   r   r   r   )r   r   rO  r   rE  r  r@   rA   r  r   r   s      `      @r   test_base_1d_quadratures_simple3TestRulesQuadrature.test_base_1d_quadratures_simple  s     9,,
IIarzzI*	* JJs"**J-JJs"**J-

1qs8QqS>73&&qQ/		
r   )	rule_pairrule_pair_args)rX   r   c           	      P   UR                  SUR                  S9nUR                  S/UR                  S9nUR                  S/UR                  S9nUS   " US   US9nUS   " US   US9n[        Xx5      n	[	        [
        XVU	SXC4S9n
[        U
R                  [        XC5      SSS	9  g )
Nr   r   r   r   r   r   r   )r   r   r   r   )	r   r   rG   r   r   r   r   r   r"   )r   rV  rW  r   r   r@   rA   higherlowerr   r   s              r   .test_base_1d_quadratures_error_from_differenceBTestRulesQuadrature.test_base_1d_quadratures_error_from_difference  s    
 IIarzzI*JJs"**J-JJs"**J-1nQ/B7!^A.26v-
 	LL$Q+		
r   rE  c                 z    [         R                  " [        5         U" SUS9  S S S 5        g ! , (       d  f       g = f)Nr   rY  )r   r   r   )r   rE  r   s      r   $test_one_point_fixed_quad_impossible8TestRulesQuadrature.test_one_point_fixed_quad_impossible  s&     ]]9%qR  &%%s   ,
:r,   N)r   r   r   r   r   r   r   r   r   r   rT  r\  r_  r   r,   r   r   rN  rN    s     [[2	 $'	 $'	 %(	'	'5 

0 [[<
!#:	;WE? 

2 [[\, !!r   rN  c                   p    \ rS rSrSr\R                  R                  S\" SS5      5      S 5       r	S r
Srg	)
TestRulesCubaturei  z.
Tests underlying cubature rules (ndim >= 2).
r8   r      c                     [        XS9R                  u  p4UR                  S   SU-  SUS-  -  -   SU-  -   S-   :X  d   eg)z{
Tests that the number of function evaluations required for Genz-Malik cubature
matches the number in Genz and Malik 1980.
rY  r   r   r   N)r   nodes_and_weightsr0   )r   r8   r   nodes_s        r    test_genz_malik_func_evaluations2TestRulesCubature.test_genz_malik_func_evaluations  sK     %T1CC{{1~!T'QtQwY!64!?!!CCCCr   c                 ~    [         R                  " [        SS9   [        SUS9  S S S 5        g ! , (       d  f       g = f)Nzonly defined for ndim >= 2r   r   rY  )r   r   r   r   )r   r   s     r   test_genz_malik_1d_raises_error1TestRulesCubature.test_genz_malik_1d_raises_error)  s(    ]]9,HIaB' JIIs   .
<r,   N)r   r   r   r   r   r   r   r   rs   rh  rk  r   r,   r   r   rb  rb    s9     [[VU1b\2D 3D(r   rb  r'  r   r   c                       \ rS rSr\R
                  R                  SSS\R                  * /S\R                  \R                  // SQ/ SQ/4/5      S 5       r	Sr
g	)
TestTransformationsi.  )r@   rA   rv   r   r   r   )r=   rX   rX   c           	        ^^ T Vs/ s H  nTR                  UTR                  S9PM     snm[        UU4S jTR                  UTR                  S9TR                  UTR                  S9TS9nT HN  nUR                  TR	                  US5      5      n[
        R                  " [        SS9   U" U5        SSS5        MP     gs  snf ! , (       d  f       Mg  = f)z`
Test that break points are correctly mapped under the _InfiniteLimitsTransform
transformation.
r   c                    > [        U TT5      $ r  )r   )r   rv   r   s    r   r  KTestTransformations.test_infinite_limits_maintains_points.<locals>.<lambda>E  s    /62>r   rY  r&   r   r   N)rG   r   r	   invr   r   r   r   )	r   r@   rA   rv   r   pf_transformedr   transformed_points	      ``    r   %test_infinite_limits_maintains_points9TestTransformations.test_infinite_limits_maintains_points1  s      <BB6a"**Qbjj*16B0>JJq

J+JJq

J+
 E - 1 1"**UG2L My0QR/0 SR  C SRs   $C.	C		
C	r,   N)r   r   r   r   r   r   r   r3   r>  rv  r   r,   r   r   rn  rn  .  s_     [[1DHH9$((#	
	4 	1	1r   rn  c                   ,    \ rS rSrSrSS jrSS jrSrg)r   iR  zH
A rule with fake high error so that cubature will keep on subdividing.
r,   c                 P    [        X#5      n[        SUS9nUR                  XX45      $ )NrX   rY  )r   r   r   )r   r  r@   rA   r   r   
underlyings          r   r   BadErrorRule.estimateW  s+    Q",RB7
""111r   c                 L    [        X#5      nUR                  SUR                  S9$ )Ng    .Ar   )r   rG   r   )r   r  r@   rA   r   r   s         r   estimate_errorBadErrorRule.estimate_error]  s#    Q"zz#RZZz00r   N)r,   )r   r   r   r   r   r   r}  r   r,   r   r   r   r   R  s    21r   r   ):r3   r   rq   r   scipy._lib._array_apir   r   r   r   r   scipy.integrater   scipy.integrate._cubaturer	   scipy.integrate._rulesr
   r   r   r   r   r   r   r   r=  r   r"   r(   r-   r:   rB   rL   rQ   rV   r[   r`   rb   rd   rf   rm   rl   r}   r   r   r   r   r   r   r   r   r   r   r   r   rA  rN  rb  rn  r   r,   r   r   <module>r     s        % >  ;;// P "/
K0
O"
S&"A"J"2&0"
G,	*#R* R*j $($( " 
S

 S

 ) )S

l%J %JPE! E!P( (* k2KLl3LM1 1 N M1D14 1r   