
    (ph                     &   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  S SKJr  \R.                  R1                  S5      /r\R.                  R4                  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 r1S r2S  r3S! r4\ " S" S#5      5       r5\R.                  Rm                  S$S%/5      \R.                  Rm                  S&S'/5      \R.                  Rm                  S(/ S)Q5      \ " S* S+5      5       5       5       5       r7\ " S, S-5      5       r8\ " S. S/5      5       r9\ " S0 S15      5       r:\\" S2S3/S49 " S5 S65      5       5       r; " S7 S8\5      r<g)9    N)array_namespacexp_assert_closexp_size	np_compatis_array_api_strict)array_api_compatible)cubature)Rule	FixedRuleNestedFixedRuleGaussLegendreQuadratureGaussKronrodQuadratureGenzMalikCubature)_InfiniteLimitsTransformskip_xp_backendsc                 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*   1   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/   5   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<   :   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   r3   r2   prodr4   r5   r6   r)   sin)abr7   r8   r   r:   s         r   genz_malik_1980_f_1_exactrD   K   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)   )rngr2   r   r7   r8   
difficultynormalisation_factorss          r   genz_malik_1980_f_1_random_argsrN   X   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   r1   r   r!   r&   )r2   r   r3   r@   	r   r8   betasr   r9   r:   r;   betas_reshapedr   s	            r   genz_malik_1980_f_2rS   c   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[	        U 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   r3   r2   r   r@   atan)rB   rC   r8   rQ   r   r:   xp_tests          r   genz_malik_1980_f_2_exactrX   v   s    1:D


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


1<!c&,,/!34<t<=A a G 
d
QrwwvBw//
''LL!)V+,w||QY<N/OO  
	
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!   rG   
   )rI   rJ   r@   r5   pow)	rK   r2   r   r:   r8   rQ   rL   productsrM   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   r1   r   r&   r2   r   r3   expr)   r   r8   r   r9   r:   r;   r   s          r   genz_malik_1980_f_3rb      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-  $ rU   )r   r   r3   r2   r@   r`   )rB   rC   r8   r   r:   s        r   genz_malik_1980_f_3_exactrd      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&   rG   g      (@rH   )rK   r2   r   r8   rM   rL   s         r   genz_malik_1980_f_3_random_argsrf      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   r1   r   r&   )r2   r   r3   r)   ra   s          r   genz_malik_1980_f_4rh      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-   -  $ rU   )r   r3   r2   r@   r5   	factorialr)   )r   r   r8   r:   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)rB   rC   r8   r   rl   r:   s     `` @r   genz_malik_1980_f_4_exactro      s"    1:D
 %Q1b11r   c           
      Z   [        U5      nUR                  X/SS9nSn[        R                  " [	        S5      US9 Hd  nUR                  [        U[	        U5      5       VV	s/ s H  u  pXXU	4   PM     sn	n5      n
U[        S[        U5      U-   5      U " U
5      -  -  nMf     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rangerI   zipr[   r)   )rl   rB   rC   r   r:   pointsoutindijselected_pointss              r   rn   rn      s     1:DXXqf1X%F
C  q$7**s3d?T%U?TtqfTl?T%UVs2s3x$'!O*<<< 8 J &Vs   #B'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&   rG   g      ,@rH   )rK   r2   r   r:   r8   rM   rL   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   r1   r   r!   r&   r_   rP   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   r3   r2   r@   r5   r6   scipyspecialerf)rB   rC   r8   rQ   r   r:   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&   rG   )rI   rJ   sqrtr)   r5   )rK   r2   r   r8   rQ   rL   rM   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   r1   r   r!   r&   r_   ra   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   ru   isinfr5   r   r6   r@   )rB   rC   r8   r   r:   double_infinite_countsemi_infinite_countrz   s           r   f_gaussian_exactr   :  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   )rI   rJ   )rK   r2   r   r8   s       r   f_gaussian_random_argsr   P  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   Z  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      ?)r5   r6   )rB   rC   r   r   s       r   f_modified_gaussian_exactr   f  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onesr2   )r   rw   r   points       r   f_with_problematic_pointsr   n  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)TestCubaturei|  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float64rI   r	   r*   r   estimater/   )selfr   r   r   rB   rC   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   rB   rC   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   rZ   r   r   )r   max_subdivisionsr   not_converged)rI   BadErrorRuler	   r   r   r   subdivisionsstatus)r   r   rB   rC   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   )rI   r   pytestraises	Exceptionr	   r   r   r   rB   rC   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   )rI   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   rI   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   rI   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   )rw   r   )r	   r   rI   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   r   r   r   r   r   r   r   r   __static_attributes__r.   r   r   r   r   |  so     [[Z * 

 dKM
M
&-";;
(
(*r   r   r   g-C6?r   gh㈵>r   )r   r   r   c                   ~	   \ rS rSrSr\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       r\R                  R                  S\\	\4\
\\4\\\4\\\4\\\4/5      \R                  R                  S/ SQ5      S 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\" S+S,/S-9\R                  R                  S\\\S.\R>                  * /\R>                  /4\\\S/\R>                  * \R>                  * /\R>                  \R>                  /4\\\S.S/\R>                  /4\\\S.\R>                  * /S/4\\\S/SS/\R>                  \R>                  /4\\\S/S\R>                  * /\R>                  \R>                  /4\\\S0SS\R>                  * \R>                  * /\R>                  \R>                  \R>                  \R>                  /4\\\S0\R>                  * \R>                  * \R>                  * \R>                  * /SS\R>                  \R>                  /4S1 S2 S3 \ " 5       S\R>                  * S/\R>                  S\R>                  /4\RB                  " \"\#S4 \ " 5       SS\R>                  * \R>                  * /S\R>                  \R>                  \R>                  /4\R                  RH                  S59/
5      S6 5       5       r%\" S+S,/S-9\R                  R                  SS7 S8\RL                  -  /\R>                  * /\R>                  /S//4S9 S8\RL                  -  \R>                  * S/\R>                  S/SS//4/5      S: 5       5       r'S;r(g)<TestCubatureProblemsi  z1
Tests that `cubature` gives the correct answer.
problemr   rZ         ?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rI   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)rI   r   tupler   r   skipr	   r   r   r   errorr   )r   r   r   r   r   r   fexactrB   rC   r   r:   r   est	exact_sols        `         r   test_scalar_output'TestCubatureProblems.test_scalar_output  s    h  '!JJq

J+JJq

J+G$GGqz<D1HKKKL4
 zz[(((ll!**r*	%cii[@P@P?QR	
r   r2   )	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   rJ   default_rngr   r   r   slowrI   r   r	   r   r   r   r   absr   r2   )r   r   r   r2   r   r   r   rK   r:   r   r  random_argsr   rB   rC   r   r  r  r   s                      r   test_array_output&TestCubatureProblems.test_array_output  s   X **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>o  s    !r   g      I@Nc                 *    UR                  U 5      U -  $ r  rA   r  s     r   r  r  ~  s    "&&)A+r   gBsvi@g        c                 B    UR                  U R                  S   S45      $ Nr   r   r   r2   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   rw   r   r   r   F)r   r   r   check_dtyper  r  r   )rI   r   r   r   r   r   r  r	   r   r   r   r   r  r   )r   r   r   r   r   r   r   r  rB   rC   rw   r   r:   r   r   s                  r   test_break_points&TestCubatureProblems.test_break_pointsl  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*transforms make use of indexing assignmentreasons)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   )rB   rC   r   s      r   r  r     s    RZZ2::Z>r   c                     [        5       $ r  )r   rK   r2   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  4  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   rJ   r  rI   r   r   r   r   r   r  r   xslowr	   r   r   r   r   r   )r   r   r   r   r   r   rK   r   r  random_args_funcrandom_args_shaperB   rC   r   r:   r   s                   r   test_infinite_limits)TestCubatureProblems.test_infinite_limits  sM   ^ **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  m  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   r9  r  r  s     r   r  r  |  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   r0  r   Fr1  )rI   r   r   r   r   r	   r   r   r   r   r   )r   r   r   r   r   r   r   r  rB   rC   rw   r:   r   r   s                 r   %test_infinite_limits_and_break_points:TestCubatureProblems.test_infinite_limits_and_break_pointsf  s   J ")!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<   rD   rS   rX   rb   rd   rh   ro   r   r   r  rN   r]   rf   r~   r   r  r#  r   r   r   r   r5   infr   paramr   r   r3  r6  r6   r<  r   r.   r   r   r   r     s    [[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f!
F [[Y   & ,		
  %+	
  %+	
  %+	
  %+	
5) @ [[W 
' 
*0
AV*0X [[Y  F C D 	
" &DC	
 3E	
 3E"		
 3E "
	
[8) 8r)2s8r)2V => [[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	\&
P => [[Y - tww hhYKXXJ SE	
" 9 dgg hhYNXXqM XJ	
!) @#
A	H#
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   )rI   r   r   r   r   r   r   )r   r   r   rB   rC   
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   )rI   r
   r   r   r   r   r   r   )r   r   rB   rC   
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   )rZ   )   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   rI   r   r   r   )r   r   rO  r   rE  r   rB   rC   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)rZ   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   rI   r   r	   r   r   r   r$   )r   rV  rW  r   r   rB   rC   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).
r:   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_weightsr2   )r   r:   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_error3  s(    ]]9,HIaB' JIIs   .
<r.   N)r   r   r   r   r   r   r   r   ru   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	)
TestTransformationsi8  )rB   rC   rw   r   r   r   )r?   rZ   rZ   c           	        ^^	 [        UR                  S5      5      m	T Vs/ s H  oTR                  XTR                  S9PM     snm[	        UU	4S jUR                  UT	R                  S9U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   r   c                    > [        U TT5      $ r  )r   )r   rw   	xp_compats    r   r  KTestTransformations.test_infinite_limits_maintains_points.<locals>.<lambda>S  s    /69Er   rY  r(   r   r   N)
r   emptyrI   r   r   invr   r   r   r   )
r   rB   rC   rw   r   pf_transformedr   transformed_pointrq  s
      `     @r   %test_infinite_limits_maintains_points9TestTransformations.test_infinite_limits_maintains_points>  s      $BHHQK0	;AB6a**Qjj*16B0EJJq	 1 1J2JJq	 1 1J2
 E - 1 1)2C2CE72S Ty0QR/0 SR  C SRs   "C	C!!
C0	r.   N)r   r   r   r   r   r   r   r5   r>  rx  r   r.   r   r   rn  rn  8  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   i`  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      $ )NrZ   rY  )r   r   r   )r   r   rB   rC   r   r   
underlyings          r   r   BadErrorRule.estimatee  s+    Q",RB7
""111r   c                 L    [        X#5      nUR                  SUR                  S9$ )Ng    .Ar   )r   rI   r   )r   r   rB   rC   r   r   s         r   estimate_errorBadErrorRule.estimate_errork  s#    Q"zz#RZZz00r   N)r.   )r   r   r   r   r   r   r  r   r.   r   r   r   r   `  s    21r   r   )=r5   r   rs   r   scipy._lib._array_apir   r   r   r   r   scipy.conftestr   scipy.integrater	   scipy.integrate._rulesr
   r   r   r   r   r   scipy.integrate._cubaturer   r   usefixtures
pytestmarkr   r   r$   r*   r/   r<   rD   rN   rS   rX   r]   rb   rd   rf   rh   ro   rn   r~   r   r   r   r   r   r   r   r   r   r   r   r   rA  rN  rb  rn  r   r.   r   r   <module>r     s        0 $  ?kk%%&89;
;;// "/
K0
O"
S&""A"J"2"0"
G,	*# R* R* R*j $($( " 
 S

 S

  ) )S

l %J %J %JP E! E! E!P ( ( (* 9: 1  1	 
 1F14 1r   