
    YhŐ                     @   d dl Z d dlZd dlZd dlZd dlmZmZmZmZm	Z	 d dl
mZ d dlmZ d dlmZmZmZmZmZmZ ej        j        ZdZd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d  Z1 G d! d"          Z2ej        3                    d#d$g          ej        3                    d%d&g          ej        3                    d'g d(           G d) d*                                              Z4 G d+ d,          Z5 G d- d.          Z6 G d/ d0          Z7ej                            d1e2          ej                            d3e2           G d4 d5                                  Z8 G d6 d7e          Z9dS )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                 d    |                     | d          }|                     |d          }||z  S N)   r   )r   r   r   reshape)xnxp
x_reshaped
n_reshapeds        u/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/scipy/integrate/tests/test_cubature.pybasic_1d_integrandr   !   s3    Az**JAz**Jz!!    c                 F    |                     d| dz   z  | dz   z  d          S )N   r   r   r   r   r   r   s     r   basic_1d_integrand_exactr"   (   s&    ::a!A#h!ng...r   c                     |                     |                    | d          d          |                     |d          z  S )Nr   axisr    r   r   )r   sum)r   r   r   s      r   basic_nd_integrandr(   -   s9    ::bffQRf(('22BJJq'4J4JJJr   c                 >    dd| z   z   dd| z   z  z   d| z   d| z   z  z  S )Nr         r    r!   s     r   basic_nd_integrand_exactr-   1   s0    1XIAaC AaC!A#;//r   c                 0   | j         d         | j         d         }}|d         }|                    | |gdgt          |j                   dz
  z  |R           }|                    dt          j        z  |z  |                    ||z  d          z             S )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     GAJTGY'OANA3FL0A0AA0E+FNNNOOJ66!DG)A+'C" M MMNNNr   c           	      &   t          |           }|                    | g dgt          |j                  dz
  z  |R           } |                    |g dgt          |j                  dz
  z  |R           }d|z  dz  |                    |d          z  |                    dt          j        z  |z  |                    || |z   z  dz  d          z             z  |                    |	                    || |z
  z  dz            d          z  S )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$$	%
&&471rvvf!ns&:vDDD
E
E	F ''"&&1Q3)**'
4
4	5r   c                    |                     |                     |d d                             }|                     |                     |                    }d}|                    |d          d         }||z  |z  }||fS )Nr   	   r$   .Nasarrayrandomr'   )rngr0   r   r5   r6   
difficultynormalisation_factorss          r   genz_malik_1980_f_1_random_argsrL   T   s~    


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

5))**FJFF6F33I>& #88Fv;r   c                    | j         d         | j         d         }}|d         }|d         }|                    | |gdgt          |j                   dz
  z  |R           }d|                    |dz  ||z
  dz  z   d          z  S )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     GAJTGY'O9%NANA3FL0A0AA0E+FNNNOOJRWW_a':n+Dq*HHrWRRRRr   c                    t          |           }|                    | g dgt          |j                  dz
  z  |R           } |                    |g dgt          |j                  dz
  z  |R           }d|z  dz  |                    |d          z  |                    |                    | |z
  |z            |                    ||z
  |z            z
  d          z  S 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///
''GGQY&''"''1u9f2D*E*EE  
 
	
r   c                    |d         }|                     |                     |                    }|                     |                     |                    }d}|                    ||                     d          z  d          }||                     dd|z  z            z  d         }||z  t          j        |dd|z  z            z  }|dz  }||fS )	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wwvrzz$///bw99H%rzz!qv,'?'??K++dhz1$<.P.PPF bLF5=r   c                 
   | j         d         | j         d         }}|d         }|                    | |gdgt          |j                   dz
  z  |R           }|                    |                    ||z  d                    S )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`      s     GAJTGY'OANA3FL0A0AA0E+FNNNOOJ66"&&:5B&??@@@r   c                    t          |           }|                    | g dgt          |j                  dz
  z  |R           } |                    |g dgt          |j                  dz
  z  |R           }d|z  dz  |                    |d          z  |                    |                    || z            |                    ||z            z
  d          z  S 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///
''"&&!$$rvvfqj'9'99'
C
C	Dr   c                     |                     |                     |                    }|                    |d          d         }d}||z  |z  }|fS )Nr   r$   rE   g      (@rF   )rI   r0   r   r6   rK   rJ   s         r   genz_malik_1980_f_3_random_argsrd      sW    ZZ

5))**FFF6F33I>J& #88F9r   c                     | j         d         | j         d         }}|d         }|                    | |gdgt          |j                   dz
  z  |R           }d|                    ||z  d          z   | dz
  z  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     GAJTGY'OANA3FL0A0AA0E+FNNNOOJ3"===$qIIr   c                 X    t          |           fd}t          || |          S )Nc                                         | g dgt          j                  dz
  z  R           }dz                      d          z  t	          j                  z  d                    |z  d          z   z  S rS   )r   r1   r0   r>   r3   	factorialr'   )r   r   r6   r8   r   s     r   Fz$genz_malik_1980_f_4_exact.<locals>.F   s    ZZ#Iqc3v|+<+<q+@&A#ID#I#IJJ
 $JrwwvBw///nT""#266&:-B67779	
r   )r   _eval_indefinite_integral)r@   rA   r6   r   rj   r8   s     `` @r   genz_malik_1980_f_4_exactrl      sI    1::D
 
 
 
 
 
 
 %Q1b111r   c           
      ~   t          |          }|                    ||gd          d}t          j        t	          d          |          D ]m}|                    fdt          |t	          |                    D                       }|t          dt          |          |z              | |          z  z  }n|S )z
    Calculates a definite integral from points `a` to `b` by summing up over the corners
    of the corresponding hyperrectangle.
    r   r$   r   )repeatc                 D    g | ]\  }}t          ||f                   S r,   )float).0ijpointss      r   
<listcomp>z-_eval_indefinite_integral.<locals>.<listcomp>   s-    CCCTQU6!Q$<  CCCr   r   )	r   stack	itertoolsproductrangerG   ziprY   r'   )	rj   r@   rA   r   r8   outindselected_pointsrt   s	           @r   rk   rk      s     1::DXXq!f1X%%F
C q$777 = =**CCCCSeDkk-B-BCCC
 
 	s2s3xx$''!!O*<*<<<Jr   c                     |d         }|                     |                     |                    }|                    |d          d         }d}||z  |z  |z  }|fS )Nr   r$   rE   g      ,@rF   )rI   r0   r   r8   r6   rK   rJ   s          r   genz_malik_1980_f_4_random_argsr      se    9DZZ

5))**FFF6F33I>J46),AAF9r   c                 .   | j         d         | j         d         }}|d         }|d         }|                    | |gdgt          |j                   dz
  z  |R           }|                    |                    |dz  ||z
  dz  z  d                     S )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     GAJTGY'O9%NANA3FL0A0AA0E+FNNNOOJ66	"j>&AA%EEB	O	OO  r   c           	         t          |           }|                    | g dgt          |j                  dz
  z  |R           } |                    |g dgt          |j                  dz
  z  |R           }d|z  dz  |                    |d          z  t
          j        |dz  z  z  |                    t          j        	                    ||| z
  z            t          j        	                    |||z
  z            z   d          z  S )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$$	%7T!V	 ''Mf	233m!e) 4556  
 
	
	r   c                 n   |                     |                     |                    }|                     |                     |                    }d}|                    |                    ||                     d          z  d                    d         }||z  t	          j        |          z  }||fS )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GGBFF62::c??+BF$L$LMMiX++di
.C.CCF5=r   c                    | j         d         | j         d         }}|d         }|                    | |gdgt          |j                   dz
  z  |R           }|                    |                    ||z  dz  d                     S )z^
    .. 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     GAJTGY'OANA3FL0A0AA0E+FNNNOOJ66266?Z7!;"6EEEFFFr   c                    t          |           }d}d}t          |          D ]{}|                    | |                   r!|                    ||                   r|dz  }>|                    | |                   |                    ||                   k    r|dz  }|t          j        t          j                  |z  d|z  |                    |d          z  z  S )Nr   r   r   r   r$   )r   ry   isinfr3   r   r4   r>   )r@   rA   r6   r   r8   double_infinite_countsemi_infinite_countrr   s           r   f_gaussian_exactr   5  s     1::D4[[ % %88AaD>> 	%bhhqtnn 	%!Q&!!XXad^^rxx!~~--1$Idg$&	b!9!99 r   c                 b    |                     |                     |                    }|dz  }|fS )Nd   )rG   rH   )rI   r0   r   r6   s       r   f_gaussian_random_argsr   K  s2    ZZ

5))**F cMF9r   c                    | dddf         | dddf         | dddf         | dddf         f\  }}}}||dddf         z  |                     |          z  |                    | |dz  z
  |dz  z
            z  }|j        S )zJ
    .. 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     qqq!teAAAqDk5A;aaadCJAq!Q!!!T'
?bggajj
(2661"QT'!Q$,+?+?
?C5Lr   c                 8    ddd|z  z   z  t           j        dz  z  S )Nr   r   g      ?)r3   r4   )r@   rA   r   r   s       r   f_modified_gaussian_exactr   a  s"    
 a!A#g;S)))r   c                     |D ]*}|                     | |k              rt          d          +|                    | j        d                   S )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   rt   r   points       r   f_with_problematic_pointsr   i  s]      @ @66%5.!! 	@>???	@ 775;q>"""r   c                       e Zd ZdZej                            dg d          d             Z edd          d             Z	d	 Z
d
 Zd Zd Zd Zd ZdS )TestCubaturez7
    Tests related to the interface of `cubature`.
    rule_str)zgauss-kronrod
genz-malikgk21gk15c                 8   |                     d|j                  }|                    ddg|j                  }|                    ddg|j                  }t          t          |||||f          }t          |j        t          ||          dd           d S )N   dtyper   r   )ruleargs:0yE>rtolatol)arangefloat64rG   r   r(   r   estimater-   )selfr   r   r   r@   rA   r   s          r   test_pass_strzTestCubature.test_pass_str|  s     IIarzI**JJ1vRZJ00JJ1vRZJ00)1ahaWMMML$Q++		
 	
 	
 	
 	
 	
r   Tz,array-likes only supported for NumPy backend)np_onlyreasonc                     t          j        dt           j                  }dg}dg}t          t          ||||f          }t          |j        t          ||          dd           d S )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_arrayz+TestCubature.test_pass_array_like_not_array  s     Qi&7888CCR	
 
 
 	L$Q++		
 	
 	
 	
 	
 	
r   c                    |                     dg          }|                     dg          }t                      }t          t          |||d|                    d|j                  |f          }|j        dk    sJ |j        dk    sJ d S )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_subdivisionsz.TestCubature.test_stops_after_max_subdivisions  s    JJsOOJJsOO~~))ARZ)00"5
 
 
 2%%%%z_,,,,,,r   c                    |                     dgg|j                  }|                     dgg|j                  }t          j        t          d          5  t          t          |||f           d d d            d S # 1 swxY w Y   d S )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_1dz$TestCubature.test_a_and_b_must_be_1d  s    JJuBJJ//JJuBJJ//]9,KLLL 	; 	;'ARE::::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s   A??BBc                     |                     g           }|                     g           }t          j        t          d          5  t	          t
          |||f           d d d            d S # 1 swxY w Y   d S )Nz`a` and `b` must be nonemptyr   r   )rG   r   r   r   r   r   r   s       r   test_a_and_b_must_be_nonemptyz*TestCubature.test_a_and_b_must_be_nonempty  s    JJrNNJJrNN]9,JKKK 	; 	;'ARE::::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s   A--A14A1c           
      ^   |                     d|j                  }|                    dg|j                  }|                    dg|j                  }t          t          ||||f          }t          |j        |                    dgdgdgdgdgg|j                  dd           d S )Nr   r   r   r   r   r   )r   r   rG   r   r   r   r   r   s         r   test_zero_width_limitsz#TestCubature.test_zero_width_limits  s    IIarzI**JJs"*J--JJs"*J--R	
 
 
 	LJJaS1#sQC0
JCC		
 	
 	
 	
 	
 	
r   c                 4   |                     d|j                  }|                    dg|j                  }|                    dg|j                  }t          t          ||||f          }t          |j        t          ||           dd           d S )Nr   r   r   r   r   r   r   )r   r   rG   r   r   r   r   r"   r   s         r   test_limits_other_way_aroundz)TestCubature.test_limits_other_way_around  s    IIarzI**JJs"*J--JJs"*J--R	
 
 
 	L%a,,,		
 	
 	
 	
 	
 	
r   c           
         t          t          |                    dg|j                  |                    dg|j                  g |                    dg|j                  |f          j        j        }||j        k    sJ t          t          |                    dg|j                  |                    dg|j                  g |                    dg|j                  |f          j        j        }||j        k    sJ t          t          |                    dg|j                  |                    dg|j                  g |                    dg|j                  |f          j        j        }||j        k    sJ d S )Nr   r   r   )rt   r   )r   r   rG   r   r   r   float32)r   r   result_dtypes      r   $test_result_dtype_promoted_correctlyz1TestCubature.test_result_dtype_promoted_correctly  s   JJs"*J--JJs"*J--**aS
*33R8
 
 
 5 	 rz))))JJs"*J--JJs"*J--**aS
*33R8
 
 
 5 	 rz))))JJs"*J--JJs"*J--**aS
*33R8
 
 
 5 	 rz))))))r   N)__name__
__module____qualname____doc__r   markparametrizer   skip_xp_backendsr   r   r   r   r   r   r   r,   r   r   r   r   w  s          [Z * * *  
 
 
 dKM M M
 
M M
&- - -"; ; ;; ; ;
 
 
(
 
 
(* * * * *r   r   r   g-C6?r   gh㈵>r   )r   r   r   c                   4	   e Zd ZdZ edd          ej                            dee	dgdgdd	gffee	ddgd
d
gdddgffee	ddgd	d	gdddgffee	g dg ddg dffe
edgd
gd	gdgffe
eddgddgddgddgffe
eg dg dg dg dffe
eg dg dg dg dffe
eg dg dg dg dffe
eg dg dg dg dffeedgd
gdgffeeddgd
d
gd	d	gffeeg dg dg dffeedgdgd
gffeeddgdd
gd
d
gffeeg dg dg dffeedgd
gdgdgffeeddgd
d
gddgdd	gffeeddgd
d
gdd
gddgffeeg dg dg dg dffg          d                         Z edd          ej                            dee	efe
eefeeefeeefeeefg          ej                            dg d          d                                     Zej                            dd d gdgdgd!fd" d#gdgdgd$ggfd% d&gg dg dg d'gfd( d&gg dg dg d)g d'gfd* d&gg dg dg d+g d)g d'gfg          d,             Zej                            d-e          ej                            de          ej                            deeed.ej         gej        gfeeed/ej         ej         gej        ej        gfeeed.dgej        gfeeed.ej         gdgfeeed/ddgej        ej        gfeeed/dej         gej        ej        gfeeed0ddej         ej         gej        ej        ej        ej        gfeeed0ej         ej         ej         ej         gddej        ej        gfd1 d2 d3  e             d
ej         dgej        dej        gf ej!        e"e#d4  e             ddej         ej         gd
ej        ej        ej        gfej        j$        5          g
          d6                                     Z%ej                            d-e          ej                            de          ej                            dd7 d8ej&        z  gej         gej        gdggfd9 d8ej&        z  ej         dgej        d
gddggfg          d:                                     Z'd!S );TestCubatureProblemsz9
    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           
         |\  }}}}	}
                     |j                  }                     |	j                  }	t          fd|
D                       }
t          |          }|dk    r|dk     rt	          j        d           t          |||	|||g |
R           }|j        dk    sJ |j        } |||	g|
R  }t          ||||d|j
         d	|j         
           d S )Nr   c              3   P   K   | ] }                     |j                   V  !dS )r   NrG   r   )rq   argr   s     r   	<genexpr>z:TestCubatureProblems.test_scalar_output.<locals>.<genexpr>  s5      GG3RZZ2:Z66GGGGGGr   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_outputz'TestCubatureProblems.test_scalar_output  sG   l  '5!QJJq
J++JJq
J++GGGG$GGGGGqzz<D1HHKKLLL4
 
 
 z[((((lE!Q**r***	RciRR@PRR	
 	
 	
 	
 	
 	
r   r0   )	r   r*   )r+   )r   r   )r   r*   r   r+   )r*   r   )r*   r+   r   )r   r   r*   c           
         t           j                            d          }|d         }|dk    r|dk     rt          j        d           |dk    r%|dk    rt          j                            d           |\  }	}
} ||||          }|                    dg|z  |j        	          }|                    dg|z  |j        	          }t          |	|||||g ||R 
          }|j
        } |
||g||R  }t          ||||d|j         d|j                    d|j         d|j         d|                    |j
        |z
             }|j        dk    s
J |            |j
        j        |d d         k    sJ d S )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_outputz&TestCubatureProblems.test_array_output  s   \ **1--Ry<D1HHKKLLL<DAIIK@AAA '5+{3r**JJsTzJ44JJsTzJ444
 
 
 lE!Q**r***	RciRR@PRR	
 	
 	
 	
DSY D D$'$4D D!#y(@!A!AD D z[((('(((|!U3B3Z//////r   c                     | S Nr,   r   r   s     r   <lambda>zTestCubatureProblems.<lambda>l  s    ! r   g      I@Nc                 2    |                     |           | z  S r
  r?   r  s     r   r  zTestCubatureProblems.<lambda>{  s    "&&))A+ r   gBsvi@g        c                 F    |                     | j        d         df          S Nr   r   r   r0   r  s     r   r  zTestCubatureProblems.<lambda>      "''171:q/22 r   g      ?)r=   r=   r=   c                 F    |                     | j        d         df          S r  r  r  s     r   r  zTestCubatureProblems.<lambda>  r  r   )r   r   r   c                 F    |                     | j        d         df          S r  r  r  s     r   r  zTestCubatureProblems.<lambda>  r  r   )g?r   r=   c           
         |\  }}}}	}
                     |j                  }                     |	j                  }	                     |j                  }|
fd|
D             }
t          |          }|dk    r|dk     rt          j        d           |dk    r%|dk    rt          j                            d           t          |||	||||
f          }t          |j	        |||d	|j
         d
|j         d           d	|j
         d|j         d                    |j	        |z
             }|j        dk    s
J |            d S )Nr   c                 H    g | ]}                     |j                   S r   r   rq   r   r   s     r   ru   z:TestCubatureProblems.test_break_points.<locals>.<listcomp>  +    NNNebjjbjj99NNNr   r   r   r   r   r  r   r   r   rt   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   rt   r8   r   r   s        `        r   test_break_pointsz&TestCubatureProblems.test_break_pointsi  s   t ")5!QJJq
J++JJq
J++

5

33NNNNvNNNFqzz<D1HHKKLLL<DAIIK@AAA	
 	
 	
 	LRciRR@PRR	
 	
 	
 	
@SY @ @$'$4@ @!#u(<!=!=@ @ z[((('(((((r   	jax.numpy)r   r   )r   r   r   c                 <    d|                     | d          dz  z  S )Nr   r   r$   r   )r>   r  s     r   r  zTestCubatureProblems.<lambda>  s     !BGGABG//22 r   c                 :    |                     d|j                  S )NgUUUUUU?r   r   )r@   rA   r   s      r   r  zTestCubatureProblems.<lambda>  s    RZZ2:Z>> r   c                     t                      S r
  )r   rI   r0   r   s      r   r  zTestCubatureProblems.<lambda>  s
    577 r   c                 @    |                     g d|j                  fS )N)r   r   r   r*   r+   r   r   r!  s      r   r  zTestCubatureProblems.<lambda>/  s    

???"*
(U(U'W r   )marksc           
         t           j                            d          }|\  }}}	}
}}|                    ||j                  }|                    ||j                  } |	||
|          }t          |          }|dk    r|dk     rt          j        d           |dk    r%|dk    rt          j        	                    d           |dk    r4|dk    r.t          |          rt          j                            d           t          ||||||g ||R 	          }|j        d
k    sJ t          |j         |||g||R  ||d|j         d|j         d           d S )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_limitsz)TestCubatureProblems.test_infinite_limits  s   Z **1-->E;5"$5q!JJq
J++JJq
J++%6;;qzz<D1HHKKLLL<DAIIK=>>><DAII2Eb2I2IIKUVVV4
 
 
 z[((((LE!Q""r"""RciRR@PRR	
 	
 	
 	
 	
 	
r   c                 8    |                     |           | z  dz  S )N   r  r  s     r   r  zTestCubatureProblems.<lambda>f  s    266!99q=1, r   g?c                 `    |                     | d d df                   | d d df         z  dz  S )Nr   r-  r  r  s     r   r  zTestCubatureProblems.<lambda>u  s2    266!AAAqD'??Qqqq!tW4q8 r   c           
         |\  }}}}	}
                     |j                  }                     |	j                  }	                     |j                  }t          |          }|dk    r|dk     rt          j        d           |
fd|
D             }
t          |||	||||
f          }|j        dk    sJ t          |j        |||d|j	         d	|j
         d
           d S )Nr   r   r   r   c                 H    g | ]}                     |j                   S r  r   r  s     r   ru   zNTestCubatureProblems.test_infinite_limits_and_break_points.<locals>.<listcomp>  r  r   r  r   r%  r   Fr&  )rG   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r@   rA   rt   r8   r   s        `       r   %test_infinite_limits_and_break_pointsz:TestCubatureProblems.test_infinite_limits_and_break_pointsa  s6   F ")5!QJJq
J++JJq
J++

5

33qzz<D1HHKKLLLNNNNvNNNF	
 	
 	
 z[((((LRciRR@PRR	
 	
 	
 	
 	
 	
r   )(r   r   r   r   r   r   r   r   r:   rB   rQ   rV   r`   rb   rf   rl   r   r   r   rL   r[   rd   r   r   r  r  boolean_index_skip_reasonr   r   r   r3   infr   paramr   r   r(  r+  r4   r1  r,   r   r   r   r     s[	         lOQ Q Q[Y   & C D 	
(  %FFA		
  %FFA		
  %IIII				
  %DC		
  %FHQQ
	
  %IIII						
  %IIII						
  %LLII						
  %LL		
  %DC	
  %GFA	
  %LLII			
  %CC	
  %FFVI	
  %IIIIYYL	
  %DC		
  %HFAA		
  %HFQA		
  %LLII						
QR) R Rf!
 !
gR RQ Qj!
F lOQ Q Q[Y   & ,		
  %+	
  %+	
  %+	
  %+	
5)  @ [W 
' 
' 
' 
 
*0 *0
 
A Q QZ*0X [Y O F C D 	
" &%DC	
 32EIIII	
 32EIIII"""		
 32EIIII   """
	
[8) 8 8r)2 )2s8 8r)2V [!!+6O!PP[!!,7P!QQ[Y   # hYKXJ	
  "hY	"Xtx 	
 "CXJ	
 "hYKC	
 "FXtx 	
 "	NXtx 	
 "DH9txi(Xtx484	
 "hY	DH9txi848TX&	
 32 ?> +*EGG	1Xr48$	
 	 $ * XWAy48),DHdh1 +#!	
 	
 	
oi) i iT&
 &
Ui i RQ QPX&
P [!!+6O!PP[!!,7P!QQ[Y -, tw hYKXJ SE	
" 98 dg hYNXqM XJ	
!)  @#
 #
A  RQ QPD#
 #
 #
r   r   c                       e Zd ZdZej                            dddgddgedfdgdgedfg          d             Z	d Z
d	S )
	TestRuleszJ
    Tests related to the general Rule interface (currently private).
    r   r   r      r   c                 :   |\  }}}} ||d|i}|                     ||j                  }|                     ||j                  }t          j        t          d          5  |                    t          |||f           d d d            d S # 1 swxY w Y   d S )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_errorz2TestRules.test_incompatible_dimension_raises_error  s    " -4)1j/z?2r22JJq
J++JJq
J++]9,DEEE 	@ 	@MM,a"M???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   # BBBc                 <   |                     dg          }|                     dg          }t                      t                      fD ]R}t          j        t
                    5  |                    t          |||f           d d d            n# 1 swxY w Y   Sd S )Nr   r   r   )rG   r
   r   r   r   r   r   r   )r   r   r@   rA   
base_classs        r   +test_estimate_with_base_classes_raise_errorz5TestRules.test_estimate_with_base_classes_raise_error  s    JJsOOJJsOO669;;/ 	J 	JJy)) J J##$61B5#IIIJ J J J J J J J J J J J J J J	J 	Js   $ BB	B	N)r   r   r   r   r   r   r   r   r   r<  r?  r,   r   r   r6  r6    s          [Y FF"	
 CC	
)   @ @!  @J J J J Jr   r6  c            	          e Zd ZdZej                            dedfedfedfedfedfg          d             Z	ej                            d	eefd
fg          d             Z
ej                            deg          d             ZdS )TestRulesQuadraturez8
    Tests underlying quadrature rules (ndim == 1).
    )r   	rule_argsr   )r   )rX   )   r7  c                 j  
  ||di}                     dj                  

fd}                    dgj                  }                    dgj                  }                    d
dz   z  
dz   z  d          }|                    |||          }	t          |	|d	d
           d S )Nr   r   r   c                 f                         | d          }                     d          }||z  S r   r   )r   r   r   r   r   s      r   r   z>TestRulesQuadrature.test_base_1d_quadratures_simple.<locals>.f  s4    Az22JAz22Jz))r   r   r   r   r    r   r   )r   r   rG   r   r   r   )r   r   rB  r   r:  r   r@   rA   r   r   r   s      `      @r   test_base_1d_quadratures_simplez3TestRulesQuadrature.test_base_1d_quadratures_simple  s     T9,,,
IIarzI**	* 	* 	* 	* 	* 	* JJs"*J--JJs"*J--

1qs8QqS>733&&q!Q//		
 	
 	
 	
 	
 	
r   )	rule_pairrule_pair_args)rX   r   c           	         |                     d|j                  }|                    dg|j                  }|                    dg|j                  } |d         |d         |          } |d         |d         |          }t          ||          }	t	          t
          |||	d||f          }
t          |
j        t          ||          dd	           d S )
Nr   r   r   r   r   r   r   )r   r   r   r   )	r   r   rG   r   r   r   r   r   r"   )r   rG  rH  r   r   r@   rA   higherlowerr   r   s              r   .test_base_1d_quadratures_error_from_differencezBTestRulesQuadrature.test_base_1d_quadratures_error_from_difference  s    
 IIarzI**JJs"*J--JJs"*J--1nQ/B777	!^A.2666vu--qR
 
 
 	L$Q++		
 	
 	
 	
 	
 	
r   r:  c                     t          j        t                    5   |d|           d d d            d S # 1 swxY w Y   d S )Nr   rJ  )r   r   r   )r   r:  r   s      r   $test_one_point_fixed_quad_impossiblez8TestRulesQuadrature.test_one_point_fixed_quad_impossible  s     ]9%% 	! 	!JqR    	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   599N)r   r   r   r   r   r   r   r   r   rF  rM  rO  r,   r   r   rA  rA    s          [2	 $'	 $'	 %(	'	'5  
 
 
0 [<
!#:	;WE?  
 
 
2 [\,  ! ! ! ! !r   rA  c                   t    e Zd ZdZej                            d edd                    d             Zd Z	dS )TestRulesCubaturez6
    Tests underlying cubature rules (ndim >= 2).
    r8   r      c                     t          ||          j        \  }}|j        d         d|z  d|dz  z  z   d|z  z   dz   k    sJ dS )z
        Tests that the number of function evaluations required for Genz-Malik cubature
        matches the number in Genz and Malik 1980.
        rJ  r   r   r   N)r   nodes_and_weightsr0   )r   r8   r   nodes_s        r    test_genz_malik_func_evaluationsz2TestRulesCubature.test_genz_malik_func_evaluations  sY     %Tb111Cq{1~!T'QtQwY!64!?!!CCCCCCCr   c                     t          j        t          d          5  t          d|           d d d            d S # 1 swxY w Y   d S )Nzonly defined for ndim >= 2r   r   rJ  )r   r   r   r   )r   r   s     r   test_genz_malik_1d_raises_errorz1TestRulesCubature.test_genz_malik_1d_raises_error)  s    ]9,HIII 	( 	(aB''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s   ;??N)
r   r   r   r   r   r   r   ry   rW  rY  r,   r   r   rQ  rQ    sh          [VUU1b\\22D D 32D( ( ( ( (r   rQ  r  r   r   c                       e Zd Zej                            dddej         gdej        ej        gg dg dgfg          d             ZdS )TestTransformations)r@   rA   rt   r   r   r   )r=   rX   rX   c                    fdD             t          fd                    |j                                      |j                            }D ]i}|                                        |d                    }t          j        t          d          5   ||           ddd           n# 1 swxY w Y   jdS )	zx
        Test that break points are correctly mapped under the _InfiniteLimitsTransform
        transformation.
        c                 H    g | ]}                     |j                   S r  r   )rq   pr   s     r   ru   zMTestTransformations.test_infinite_limits_maintains_points.<locals>.<listcomp>A  s+    BBBa"**Qbj*11BBBr   c                 &    t          |           S r
  )r   )r   rt   r   s    r   r  zKTestTransformations.test_infinite_limits_maintains_points.<locals>.<lambda>E  s    /62>> r   r   rJ  r&   r   r   N)r	   rG   r   invr   r   r   r   )r   r@   rA   rt   r   f_transformedr   transformed_points      ``   r   %test_infinite_limits_maintains_pointsz9TestTransformations.test_infinite_limits_maintains_points1  s*     CBBB6BBB0>>>>>JJq
J++JJq
J++
 
 
  	1 	1E - 1 1"**UG2L2L M My0QRRR 1 1/0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1	1 	1s   $B<<C 	C 	N)	r   r   r   r   r   r   r3   r3  rc  r,   r   r   r[  r[  .  s         [1DH9$(#			
	4 	 	1 1	 	1 1 1r   r[  c                   "    e Zd ZdZddZddZdS )r   zP
    A rule with fake high error so that cubature will keep on subdividing.
    r,   c                 t    t          ||          }t          d|          }|                    ||||          S )NrX   rJ  )r   r   r   )r   r   r@   rA   r   r   
underlyings          r   r   zBadErrorRule.estimateW  s=    Q"",RB777
""1aD111r   c                 Z    t          ||          }|                    d|j                  S )Ng    .Ar   )r   rG   r   )r   r   r@   rA   r   r   s         r   estimate_errorzBadErrorRule.estimate_error]  s)    Q""zz#RZz000r   N)r,   )r   r   r   r   r   rh  r,   r   r   r   r   R  sF         2 2 2 21 1 1 1 1 1r   r   ):r3   r   rw   r   scipy._lib._array_apir   r   r   r   r   scipy.integrater   scipy.integrate._cubaturer	   scipy.integrate._rulesr
   r   r   r   r   r   r   r   r2  r   r"   r(   r-   r:   rB   rL   rQ   rV   r[   r`   rb   rd   rf   rl   rk   r   r   r   r   r   r   r   r   r   r   r   r   r   r6  rA  rQ  r[  r   r,   r   r   <module>rm     s                       % $ $ $ $ $ > > > > > >                ;/ P " " "/ / /
K K K0 0 0
O O O"
 
 
  S S S&    "A A A"    J J J"2 2 2  &    0  "  
G 
G 
G  ,  	 	 	* * *# # #R* R* R* R* R* R* R* R*j $(($(( " " "  
S

 S

 S

 S

 S

 S

 S

  )( )(S

l%J %J %J %J %J %J %J %JPE! E! E! E! E! E! E! E!P( ( ( ( ( ( ( (* k2KLLl3LMM1 1 1 1 1 1 1 NM ML1D1 1 1 1 14 1 1 1 1 1r   