
    ^Mh                     ~   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 d dlmZ ej                            d          g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 Z0d Z1d Z2d  Z3d! Z4e G d" d#                      Z5ej        6                    d$d%g          ej        6                    d&d'g          ej        6                    d(g d)          e G d* d+                                                          Z7e G d, d-                      Z8e G d. d/                      Z9e G d0 d1                      Z:e ed2d3g4           G d5 d6                                  Z; G d7 d8e          Z<dS )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                 d    |                     | d          }|                     |d          }||z  S N)   r   )r   r   r   reshape)xnxp
x_reshaped
n_reshapeds        c/var/www/html/test/jupyter/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*   1   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/   5   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<   :   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   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$$	%
&&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)   )rngr2   r   r7   r8   
difficultynormalisation_factorss          r   genz_malik_1980_f_1_random_argsrN   X   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   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     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           }t	          |           }d|z  dz  |                    |d          z  |                    |                    | |z
  |z            |                    ||z
  |z            z
  d          z  S 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!e)V+,,w||QY<N/O/OO  
 
	
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!   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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   r1   r   r&   r2   r   r3   expr)   r   r8   r   r9   r:   r;   r   s          r   genz_malik_1980_f_3rb      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 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///
''"&&!$$rvvfqj'9'99'
C
C	Dr   c                     |                     |                     |                    }|                    |d          d         }d}||z  |z  }|fS )Nr   r&   rG   g      (@rH   )rK   r2   r   r8   rM   rL   s         r   genz_malik_1980_f_3_random_argsrf      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   r1   r   r&   )r2   r   r3   r)   ra   s          r   genz_malik_1980_f_4rh      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 rU   )r   r3   r2   r@   r5   	factorialr)   )r   r   r8   r:   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)rB   rC   r8   r   rl   r:   s     `` @r   genz_malik_1980_f_4_exactrn      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                 *    g | ]\  }}||f         S r.   r.   ).0ijpointss      r   
<listcomp>z-_eval_indefinite_integral.<locals>.<listcomp>   s%    %U%U%Utq!fQTl%U%U%Ur   r   )	r   stack	itertoolsproductrangerI   zipr[   r)   )	rl   rB   rC   r   r:   outindselected_pointsru   s	           @r   rm   rm      s     1::DXXq!f1X%%F
C q$777 = =**%U%U%U%Us3d?T?T%U%U%UVVs2s3xx$''!!O*<*<<<Jr   c                     |d         }|                     |                     |                    }|                    |d          d         }d}||z  |z  |z  }|fS )Nr   r&   rG   g      ,@rH   )rK   r2   r   r:   r8   rM   rL   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   r1   r   r!   r&   r_   rP   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   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$$	%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&   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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   r1   r   r!   r&   r_   ra   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   rz   isinfr5   r   r6   r@   )rB   rC   r8   r   r:   double_infinite_countsemi_infinite_countrs   s           r   f_gaussian_exactr   :  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   )rI   rJ   )rK   r2   r   r8   s       r   f_gaussian_random_argsr   P  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   Z  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      ?)r5   r6   )rB   rC   r   r   s       r   f_modified_gaussian_exactr   f  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onesr2   )r   ru   r   points       r   f_with_problematic_pointsr   n  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float64rI   r	   r*   r   estimater/   )selfr   r   r   rB   rC   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   rB   rC   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   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_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   )rI   r   pytestraises	Exceptionr	   r   r   r   rB   rC   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   )rI   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   rI   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   rI   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   )ru   r   )r	   r   rI   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   r   r   r   r   r   r   r   r   r.   r   r   r   r   |  s          [Z * * *  
 
 
 dKM M M
 
M M
&- - -"; ; ;; ; ;
 
 
(
 
 
(* * * * *r   r   r   g-C6?r   gh㈵>r   )r   r   r   c                   (   e Zd ZdZ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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d*d+g,          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d/ddej         ej         gej        ej        ej        ej        gfeeed/ej         ej         ej         ej         gddej        ej        gfd0 d1 d2  e            dej         dgej        dej        gf ej         e!e"d3  e            ddej         ej         gdej        ej        ej        gfej        j#        4          g
          d5                         Z$ ed*d+g,          ej                            dd6 d7ej%        z  gej         gej        gdggfd8 d7ej%        z  ej         dgej        dgdd
ggfg          d9                         Z&dS ):TestCubatureProblemsz9
    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           
         |\  }}}}	}
                     |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rI   r   )rr   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)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_outputz'TestCubatureProblems.test_scalar_output  sG   h  '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   r2   )	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   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_outputz&TestCubatureProblems.test_array_output  s   X **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>o  s    ! r   g      I@Nc                 2    |                     |           | z  S r  rA   r	  s     r   r
  zTestCubatureProblems.<lambda>~  s    "&&))A+ r   gBsvi@g        c                 F    |                     | j        d         df          S Nr   r   r   r2   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   rr   r   r   s     r   rv   z:TestCubatureProblems.test_break_points.<locals>.<listcomp>  +    NNNebjjbjj99NNNr   r   r!   r   r   r   r   r   r   ru   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   ru   r:   r   r   s        `        r   test_break_pointsz&TestCubatureProblems.test_break_pointsl  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*transforms make use of indexing assignmentreasons)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   )rB   rC   r   s      r   r
  zTestCubatureProblems.<lambda>   s    RZZ2:Z>> r   c                     t                      S r  )r   rK   r2   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>4  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   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_limitsz)TestCubatureProblems.test_infinite_limits  s   ^ **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>m  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>|  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   rv   zNTestCubatureProblems.test_infinite_limits_and_break_points.<locals>.<listcomp>  r  r   r  r   r&  r   Fr'  )rI   r   r   r   r   r	   r   r   r   r   r   )r   r   r   r   r   r   r   r   rB   rC   ru   r:   r   s        `       r   %test_infinite_limits_and_break_pointsz:TestCubatureProblems.test_infinite_limits_and_break_pointsf  s6   J ")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<   rD   rS   rX   rb   rd   rh   rn   r   r   r   rN   r]   rf   r   r   r  r  r   r   r   r   r5   infr   paramr   r   r)  r,  r6   r2  r.   r   r   r   r     s         [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f!
F [Y   & ,		
  %+	
  %+	
  %+	
  %+	
5)  @ [W 
' 
' 
' 
 
*0 *0
 
A V*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 =>   [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	 \&
P =>   [Y -, tw hYKXJ SE	
" 98 dg hYNXqM XJ	
!)  @#
 #
A 	 H#
 #
 #
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   )rI   r   r   r   r   r   r   )r   r   r   rB   rC   
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   )rI   r
   r   r   r   r   r   r   )r   r   rB   rC   
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   )rZ   )   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   rI   r   r   r   )r   r   rB  r   r:  r   rB   rC   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)rZ   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   rI   r   r	   r   r   r   r$   )r   rG  rH  r   r   rB   rC   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).
    r:   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_weightsr2   )r   r:   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_error3  s    ]9,HIII 	( 	(aB''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s   ;??N)
r   r   r   r   r   r   r   rz   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)rB   rC   ru   r   r   r   )r?   rZ   rZ   c                    t                              d                    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.
        r   c                 H    g | ]}                     |j                   S r  r   )rr   pr   s     r   rv   zMTestTransformations.test_infinite_limits_maintains_points.<locals>.<listcomp>O  s+    BBBa"**Qbj*11BBBr   c                 &    t          |           S r  )r   )r   ru   	xp_compats    r   r
  zKTestTransformations.test_infinite_limits_maintains_points.<locals>.<lambda>S  s    /69EE r   r   rJ  r(   r   r   N)
r   emptyr   rI   r   invr   r   r   r   )	r   rB   rC   ru   r   f_transformedr   transformed_pointr`  s	      ``   @r   %test_infinite_limits_maintains_pointsz9TestTransformations.test_infinite_limits_maintains_points>  sE     $BHHQKK00	BBBB6BBB0EEEEEJJq	 1J22JJq	 1J22
 
 
  	1 	1E - 1 1)2C2CE72S2S T T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   CC#	&C#	N)	r   r   r   r   r   r   r5   r3  re  r.   r   r   r[  r[  8  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 )NrZ   rJ  )r   r   r   )r   r   rB   rC   r   r   
underlyings          r   r   zBadErrorRule.estimatee  s=    Q"",RB777
""1aD111r   c                 Z    t          ||          }|                    d|j                  S )Ng    .Ar   )r   rI   r   )r   r   rB   rC   r   r   s         r   estimate_errorzBadErrorRule.estimate_errork  s)    Q""zz#RZz000r   N)r.   )r   r   r   r   r   rj  r.   r   r   r   r   `  sF         2 2 2 21 1 1 1 1 1r   r   )=r5   r   rx   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   rn   rm   r   r   r   r   r   r   r   r   r   r   r   r   r   r6  rA  rQ  r[  r   r.   r   r   <module>rr     s                       0 / / / / / $ $ $ $ $ $                ? > > > > >k%%&899;
;/ " " "/ / /
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 ( ( ( ( ( ( ( (* 9:   1  1  1  1  1  1  1	  
 1F1 1 1 1 14 1 1 1 1 1r   