§
    µ³Ùgš�  ã                   ó~  — 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        úY/granary/edev/quantum/lib/python3.11/site-packages/scipy/integrate/tests/test_cubature.pyÚbasic_1d_integrandr   %   s3   € Ø—’˜A˜zÑ*Ô*€JØ—’˜A˜zÑ*Ô*€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  !¡‘n gÑ.Ô.Ð.r   c                 ó†   — |                      |                     | d¬¦  «        d¦  «        |                      |d¦  «        z  S )Nr   ©Úaxisr"   ©r   r   )r   Úsum)r   r   r   s      r   Úbasic_nd_integrandr*   1   s9   € Ø�:Š:�b—f’f˜Q R�fÑ(Ô(¨'Ñ2Ô2°B·J²J¸qÀ'Ñ4JÔ4JÑ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‘‰XˆI˜˜A˜a™C™Ñ  A a¡C¨!¨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’   € ð ”G˜A”J ¤¨¤ˆT€Gà˜YÔ'€OØ—’˜A ÐN¨A¨3µ°F´LÑ0AÔ0AÀAÑ0EÑ+FÐNÈÐNÐNÑOÔO€Jà�6Š6�!•D”G‘)˜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‰
Ø
ñ	Ø�GŠG�F ˆGÑ$Ô$ñ	%à
�&Š&�•4”7‘˜1‘˜rŸvšv f°°!±¡n°sÑ&:À˜vÑDÔDÑDÑ
EÔ
Eñ	Fð �'Š'�"—&’&˜ 1 Q¡3™¨Ñ)Ñ*Ô*°ˆ'Ñ
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—:’:˜e C R CœjÑ)Ô)Ñ*Ô*€AØ�ZŠZ˜Ÿ
š
 5Ñ)Ô)Ñ*Ô*€Fà€JØŸFšF 6°˜FÑ3Ô3°IÔ>ÐØ˜&Ñ Ð#8Ñ8€Fàˆ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•   € ð ”G˜A”J ¤¨¤ˆT€Gà˜YÔ'€OØ˜9Ô%€Nà—’˜A ÐN¨A¨3µ°F´LÑ0AÔ0AÀAÑ0EÑ+FÐNÈÐNÐNÑOÔO€JàˆR�WŠW�_ aÑ'¨:°nÑ+DÀqÑ*HÑHÈrˆWÑ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‰�r—w’w˜v¨B�wÑ/Ô/Ñ/Ø
�'Š'Ø�LŠL˜!˜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Í   € Ø�Œ9€DØ�ZŠZ˜Ÿ
š
 5Ñ)Ô)Ñ*Ô*€FØ�JŠJ�s—z’z %Ñ(Ô(Ñ)Ô)€Eà€JØ�wŠw�v˜rŸzšz¨$Ñ/Ô/Ñ/°bˆwÑ9Ô9€HØ% r§z¢z°!°q¸±v±,Ñ'?Ô'?Ñ?ÀÔKÐØÐ+Ñ+­d¬h°zÀ1ÈÈ$ÉÁ<Ñ.PÔ.PÑP€Fð ˆb�L€Fà�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ƒ   € ð ”G˜A”J ¤¨¤ˆT€Gà˜YÔ'€OØ—’˜A ÐN¨A¨3µ°F´LÑ0AÔ0AÀAÑ0EÑ+FÐNÈÐNÐNÑOÔO€Jà�6Š6�"—&’&˜¨:Ñ5¸B�&Ñ?Ô?Ñ@Ô@Ð@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‰�r—w’w˜v¨B�wÑ/Ô/Ñ/Ø
�'Š'�"—&’&˜ !™Ñ$Ô$ r§v¢v¨f°q©jÑ'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   € Ø�ZŠZ˜Ÿ
š
 5Ñ)Ô)Ñ*Ô*€FØŸFšF 6°˜FÑ3Ô3°IÔ>ÐØ€JØ˜&Ñ Ð#8Ñ8€Fàˆ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‡   € ð ”G˜A”J ¤¨¤ˆT€Gà˜YÔ'€OØ—’˜A ÐN¨A¨3µ°F´LÑ0AÔ0AÀAÑ0EÑ+FÐNÈÐNÐNÑOÔO€Jà�—’�¨Ñ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‘   ø€ Ø—Z’Z Ð#I q c­3¨v¬|Ñ+<Ô+<¸qÑ+@Ñ&AÐ#IÀDÐ#IÐ#IÑJÔJˆ
ð �$‰J�r—w’w˜v¨B�wÑ/Ô/Ñ/ÝŒn˜TÑ"Ô"ñ#à�2—6’6˜& :Ñ-°B�6Ñ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¨¨1¨bÑ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Ð%U±t°q¸! f¨Q°¨T¤lÐ%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Ø�XŠX�q˜!�f 1ˆXÑ%Ô%€Fà
€CÝÔ ¥ q¡¤°$Ð7Ñ7Ô7ð =ð =ˆØŸ*š*Ð%UÐ%UÐ%UÐ%U½sÀ3ÍÈdÉÌÑ?TÔ?TÐ%UÑ%UÔ%UÑVÔVˆØ�s�2•s˜3‘x”x $‘Ñ'Ô'¨!¨!¨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   € Ø�Œ9€Dà�ZŠZ˜Ÿ
š
 5Ñ)Ô)Ñ*Ô*€FØŸFšF 6°˜FÑ3Ô3°IÔ>ÐØ€JØ˜4Ñ 6Ñ)Ð,AÑA€Fàˆ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¦   € ð ”G˜A”J ¤¨¤ˆT€Gà˜YÔ'€OØ˜9Ô%€Nà—’˜A ÐN¨A¨3µ°F´LÑ0AÔ0AÀAÑ0EÑ+FÐNÈÐNÐNÑOÔO€Jà�6Š6Ø	�Š� Ñ" j°>Ñ&AÀAÑ%EÑEÈBˆÑ	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‰Ø
ñ	Ø�GŠG�F ˆGÑ$Ô$ñ	%åŒ7�T˜!‘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›   € Ø�ZŠZ˜Ÿ
š
 5Ñ)Ô)Ñ*Ô*€FØ�JŠJ�s—z’z %Ñ(Ô(Ñ)Ô)€Eà€JØŸGšG B§F¢F¨6°2·:²:¸c±?´?Ñ+BÈ FÑ$LÔ$LÑMÔMÈiÔXÐØÐ+Ñ+­d¬i¸
Ñ.CÔ.CÑC€Fà�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‹   € ð ”G˜A”J ¤¨¤ˆT€GØ˜YÔ'€OØ—’˜A ÐN¨A¨3µ°F´LÑ0AÔ0AÀAÑ0EÑ+FÐNÈÐNÐNÑOÔO€Jà�6Š6�2—6’6˜?¨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‰[Œ[ð %ð %ˆØ�8Š8�A�a”D‰>Œ>ð 	%˜bŸhšh q¨¤t™nœnð 	%Ø! QÑ&Ð!Ð!Ø�XŠX�a˜”d‰^Œ^˜rŸxšx¨¨!¬™~œ~Ò-Ð-Ø 1Ñ$ÐøåŒI•d”gÑÔ $Ñ&Ø	ÐÑ §¢¨°b Ñ!9Ô!9Ñ9ñð r   c                 ób   — |                      |                      |¦  «        ¦  «        }|dz  }|fS )Néd   )rI   rJ   )rK   r2   r   r8   s       r   Úf_gaussian_random_argsr”   P  s2   € Ø�ZŠZ˜Ÿ
š
 5Ñ)Ô)Ñ*Ô*€Fð ˆc�M€Fàˆ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˜   € ð �q�q�q˜!�t”˜e A A A q Dœk¨5°°°°A°¬;¸¸a¸a¸aÀ¸d¼ÐC�J€A€qˆ!ˆQØ��!�!�!�T�'”
‰?˜bŸgšg a™jœjÑ
(¨2¯6ª6°1°"°Q¸±T±'¸!¸Q¹$±,Ñ+?Ô+?Ñ
?€CàŒ5€Lr   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]   € ð ð @ð @ˆØ�6Š6�%˜5’.Ñ!Ô!ð 	@ÝÐ>Ñ?Ô?Ð?ð	@ð �7Š7�5”;˜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ç:Œ0âŽyE>©ÚrtolÚatol)ÚarangeÚfloat64rI   r	   r*   r   Úestimater/   )Úselfr¨   r   r   rB   rC   r›   s          r   Útest_pass_strzTestCubature.test_pass_str‚  s§   € ð �IŠI�a˜rœzˆIÑ*Ô*ˆØ�JŠJ˜˜1�v R¤ZˆJÑ0Ô0ˆØ�JŠJ˜˜1�v R¤ZˆJÑ0Ô0ˆåÕ)¨1¨a°hÀaÈÀ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‰   € õ Ô˜Q¥iÔ&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™   € Ø�JŠJ˜�s‰OŒOˆØ�JŠJ˜�s‰OŒOˆÝ‰~Œ~ˆåÝØØØØØ—)’)˜A R¤Z�)Ñ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Ì   € Ø�JŠJ˜˜�u B¤JˆJÑ/Ô/ˆØ�JŠJ˜˜�u B¤JˆJÑ/Ô/ˆåŒ]�9Ð,KÐLÑLÔLð 	;ð 	;ÝÕ'¨¨A°R°EÐ:Ñ:Ô:Ð:ð	;ð 	;ð 	;ñ 	;ô 	;ð 	;ð 	;ð 	;ð 	;ð 	;ð 	;ð 	;øøøð 	;ð 	;ð 	;ð 	;ð 	;ð 	;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´   € Ø�JŠJ�r‰NŒNˆØ�JŠJ�r‰NŒNˆåŒ]�9Ð,JÐKÑKÔKð 	;ð 	;ÝÕ'¨¨A°R°EÐ:Ñ:Ô:Ð:ð	;ð 	;ð 	;ñ 	;ô 	;ð 	;ð 	;ð 	;ð 	;ð 	;ð 	;ð 	;øøøð 	;ð 	;ð 	;ð 	;ð 	;ð 	;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Ç   € Ø�IŠI�a˜rœzˆIÑ*Ô*ˆà�JŠJ˜�s "¤*ˆJÑ-Ô-ˆØ�JŠJ˜�s "¤*ˆJÑ-Ô-ˆåÝØØØ�R�ð	
ñ 
ô 
ˆõ 	ØŒLØ�JŠJ˜˜˜a˜S 1 #¨ s¨Q¨CÐ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­   € Ø�IŠI�a˜rœzˆIÑ*Ô*ˆà�JŠJ˜�s "¤*ˆJÑ-Ô-ˆØ�JŠJ˜�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‘  € ÝÝØ�JŠJ˜�s "¤*ˆJÑ-Ô-Ø�JŠJ˜�s "¤*ˆJÑ-Ô-ØØ—*’*˜a˜S¨¬
�*Ñ3Ô3°RÐ8ð
ñ 
ô 
ô ”5ð 	ð ˜rœzÒ)Ð)Ð)Ð)åÝØ�JŠJ˜�s "¤*ˆJÑ-Ô-Ø�JŠJ˜�s "¤*ˆJÑ-Ô-ØØ—*’*˜a˜S¨¬
�*Ñ3Ô3°RÐ8ð
ñ 
ô 
ô ”5ð 	ð ˜rœzÒ)Ð)Ð)Ð)åÝØ�JŠJ˜�s "¤*ˆJÑ-Ô-Ø�JŠJ˜�s "¤*ˆJÑ-Ô-ØØ—*’*˜a˜S¨¬
�*Ñ3Ô3°RÐ8ð
ñ 
ô 
ô ”5ð 	ð ˜rœzÒ)Ð)Ð)Ð)Ð)Ð)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µ   gñhãˆµøä>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ÐG¸3�R—Z’Z ¨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˜à�JŠJ�q ¤
ˆJÑ+Ô+ˆØ�JŠJ�q ¤
ˆJÑ+Ô+ˆÝÐGÐGÐGÐGÀ$ÐGÑGÔGÑGÔGˆå�q‰zŒzˆà�<ÒÐ D¨1¢H HÝŒKÐKÑLÔLÐLåØØØØØØØ�4�˜��ð
ñ 
ô 
ˆð Œz˜[Ò(Ð(Ð(Ð(àŒlˆØ�E˜!˜QÐ* Ð* rÐ*Ð*Ð*ˆ	åØØØØØR c¤iÐ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Ñ-Ô-ˆØ�RŒyˆà�<ÒÐ D¨1¢H HÝŒKÐKÑLÔLÐLà�<ÒÐ D¨A¢I IÝŒK×ÒÐ@ÑAÔAÐAà 'Ñˆˆ5�+Øˆ{˜3  rÑ*Ô*ˆà�JŠJ˜�s˜T‘z¨¬ˆJÑ4Ô4ˆØ�JŠJ˜�s˜T‘z¨¬ˆJÑ4Ô4ˆåØØØØØØØ�4�˜��ð
ñ 
ô 
ˆð ŒlˆØ�E˜!˜QÐ* Ð* rÐ*Ð*Ð*ˆ	åØØØØØR c¤iÐRÐRÀÔ@PÐRÐRð	
ñ 	
ô 	
ð 	
ðD S¤Yð Dð DØ$'Ô$4ðDð Dà!#§¢¨¬°yÑ(@Ñ!AÔ!AðDð Dˆð Œz˜[Ò(Ð(Ð(¨'Ñ(Ô(Ð(àŒ|Ô! U¨3¨B¨3¤ZÒ/Ð/Ð/Ð/Ð/Ð/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   gB¾sÂvi@g        c                 óF   — |                      | j        d         df¦  «        S ©Nr   r   ©r£   r2   r	  s     r   r
  zTestCubatureProblems.<lambda>‡  ó   € ˜"Ÿ'š' 1¤7¨1¤:¨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ÐN¸e�b—j’j ¨b¬j�jÑ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˜à�JŠJ�q ¤
ˆJÑ+Ô+ˆØ�JŠJ�q ¤
ˆJÑ+Ô+ˆØ—
’
˜5¨¬
�
Ñ3Ô3ˆàÐØNÐNÐNÐNÀvÐNÑNÔNˆFå�q‰zŒzˆà�<ÒÐ D¨1¢H HÝŒKÐKÑLÔLÐLà�<ÒÐ D¨A¢I IÝŒK×ÒÐ@ÑAÔAÐAåØØØØØØØØ�ð	
ñ 	
ô 	
ˆõ 	ØŒLØØØØR c¤iÐRÐRÀÔ@PÐRÐRØð	
ñ 	
ô 	
ð 	
ð@ S¤Yð @ð @Ø$'Ô$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    € ˜!˜BŸGšG A¨B˜GÑ/Ô/°Ñ2Ñ2€ r   c                 ó:   — |                      d|j        ¬¦  «        S )NgUUUUUUÅ?r®   ré   )rB   rC   r   s      r   r
  zTestCubatureProblems.<lambda>   s   € ˜RŸZšZ¨°2´:˜ZÑ>Ô>€ r   c                 ó   — t          ¦   «         S r  )ró   ©rK   r2   r   s      r   r
  zTestCubatureProblems.<lambda>#  s
   € ¥5¡7¤7€ 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Ð"Ð$5°q¸!à�JŠJ�q ¤
ˆJÑ+Ô+ˆØ�JŠJ�q ¤
ˆJÑ+Ô+ˆØÐ Ð%6¸Ñ;Ô;ˆå�q‰zŒzˆà�<ÒÐ D¨1¢H HÝŒKÐKÑLÔLÐLà�<ÒÐ D¨A¢I IÝŒK×ÒÐ=Ñ>Ô>Ð>à�<ÒÐ D¨A¢I IÕ2EÀbÑ2IÔ2I IÝŒK×ÒÐUÑVÔVÐVåØØØØØØØ�4�˜��ð
ñ 
ô 
ˆð Œz˜[Ò(Ð(Ð(Ð(åØŒLØˆE�!�QÐ"˜Ð"˜rÐ"Ð"Ð"ØØØR c¤iÐRÐRÀÔ@PÐRÐRØð	
ñ 	
ô 	
ð 	
ð 	
ð 	
r   c                 ó8   — |                      | ¦  «        | z  dz  S )Né   r  r	  s     r   r
  zTestCubatureProblems.<lambda>m  s   € ˜2Ÿ6š6 !™9œ9 q™=¨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   € ˜2Ÿ6š6 ! A A A q D¤'™?œ?¨Q¨q¨q¨q°!¨t¬WÑ4°qÑ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˜à�JŠJ�q ¤
ˆJÑ+Ô+ˆØ�JŠJ�q ¤
ˆJÑ+Ô+ˆØ—
’
˜5¨¬
�
Ñ3Ô3ˆå�q‰zŒzˆà�<ÒÐ D¨1¢H HÝŒKÐKÑLÔLÐLàÐØNÐNÐNÐNÀvÐNÑNÔNˆFåØØØØØØØØ�ð	
ñ 	
ô 	
ˆð Œz˜[Ò(Ð(Ð(Ð(åØŒLØØØØR c¤iÐ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�ðð		
ð  Ø%ØˆIˆIØˆIˆIàØ�	�	ðð		
ð  Ø%ØˆDØˆCà�Ø�ðð		
ð  Ø%à�ˆFØ�ˆHà�Q�Ø�Q�ðð
	
ð  Ø%ØˆIˆIØˆIˆIà�	�	Ø�	�	ðð		
ð  Ø%ØˆIˆIØˆIˆIà�	�	Ø�	�	ðð		
ð  Ø%ØˆLˆLØˆIˆIà�	�	Ø�	�	ðð		
ð  Ø%ØÐÐØˆLˆLà��Ø��ðð		
ð  Ø%ØˆDØˆCà�ðð	
ð  Ø%Ø�ˆGØ�ˆFà�A�ðð	
ð  Ø%ØˆLˆLØˆIˆIà�	�	ðð	
ð  Ø%ØˆCØˆCà�ðð	
ð  Ø%Ø�ˆFØ�ˆFØ�ˆVˆIð	
ð  Ø%ØˆIˆIØˆIˆIØˆYˆYˆLð	
ð  Ø%ØˆDØˆCà�Ø�ðð		
ð  Ø%Ø�ˆHØ�ˆFà�A�Ø�A�ðð		
ð  Ø%Ø�ˆHØ�ˆFà�Q�Ø�A�ðð		
ð  Ø%ØˆLˆLØˆIˆIà�	�	Ø�	�	ðð		
ðQR)ñ Rô Rðf!
ð !
ñgRô Rðf!
ðF „[×Ò˜Yð  ð &ð ,ð		
ð  Ø%Ø+ð	
ð  Ø%Ø+ð	
ð  Ø%Ø+ð	
ð  Ø%Ø+ð	
ð5)ñ ô ð@ „[×Ò˜Wð 
'ð 
'ð 
'ñ 
ô 
ð*0ð *0ñ
ô 
ñAô ðV*0ðX „[×Ò˜Yð ˆOð ˆFð ˆCð ˆDð ð	
ð" &Ð%ØÐØˆDØˆCà�ðð	
ð 3Ð2ØˆEØˆIˆIØˆIˆIà��ðð	
ð 3Ð2ØˆEØˆIˆIØˆIˆIà"Ð"Ð"Ø��ðð		
ð 3Ð2ØˆEØˆIˆIØˆIˆIà Ð Ð Ø"Ð"Ð"Ø��ðð
	
ð[8)ñ 8ô 8ðr)2ð )2ñs8ô 8ðr)2ðV ÐØØ=Ð>ðñ ô ð „[×Ò˜Yð ð ð #Øð ŒhˆYˆKØŒXˆJð	
ð  ØØ"ØØŒhˆY˜œ˜	Ð"ØŒX�t”xÐ ð	
ð ØØ"ØØˆCØŒXˆJð	
ð ØØ"ØØŒhˆYˆKØˆCð	
ð ØØ"ØØ�ˆFØŒX�t”xÐ ð	
ð ØØ"ØØ�”�	ˆNØŒX�t”xÐ ð	
ð ØØ"ØØ��D”H�9˜tœx˜iÐ(ØŒX�t”x ¤¨4¬8Ð4ð	
ð ØØ"ØØŒhˆY˜œ˜	 D¤H 9¨t¬x¨iÐ8Ø��4”8˜TœXÐ&ð	
ð 3Ð2ð ?Ð>ð +Ð*ØˆE‰GŒGà�”�	˜1ÐØŒX�r˜4œ8Ð$ð	
ð 	ˆŒð $ð *ð XÐWØ�‘”à�A˜œ�y 4¤8 )Ð,Ø�D”H˜dœh¨¬Ð1ðð ”+Ô#ð!	
ñ 	
ô 	
ðoi)ñ iô iðT&
ð &
ñUiô iñ	ô ð\&
ðP ÐØØ=Ð>ðñ ô ð „[×Ò˜Yð -Ð,ð �t”wÑÐð ŒhˆYˆKØŒXˆJð ˆSˆEð	
ð" 9Ð8ð �d”gÑð ŒhˆY˜ˆNØŒX�qˆMð �ˆXˆJð	
ð!)ñ ô ð@#
ð #
ñ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Ñ)ˆˆ1ˆj˜/Øˆz˜?Ð2¨rÐ2Ð2ˆà�JŠJ�q ¤
ˆJÑ+Ô+ˆØ�JŠJ�q ¤
ˆJÑ+Ô+ˆåŒ]�9Ð,DÐEÑEÔEð 	@ð 	@Ø�MŠMÕ,¨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å   € Ø�JŠJ˜�s‰OŒOˆØ�JŠJ˜�s‰OŒOˆå™6œ6¥9¡;¤;Ð/ð 	Jð 	JˆJÝ”�yÑ)Ô)ð Jð JØ×#Ò#Õ$6¸¸1ÀBÀ5Ð#Ñ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   ø€ ØŸš A zÑ2Ô2ˆJØŸš A zÑ2Ô2ˆJà˜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ê   øø€ ð �T˜9Ð,¨Ð,Ð,ˆ
à�IŠI�a˜rœzˆIÑ*Ô*ˆð	*ð 	*ð 	*ð 	*ð 	*ð 	*ð �JŠJ˜�s "¤*ˆJÑ-Ô-ˆØ�JŠJ˜�s "¤*ˆJÑ-Ô-ˆà—
’
˜1˜q ™s™8 Q q¡S™>¨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ú   € ð
 �IŠI�a˜rœzˆIÑ*Ô*ˆØ�JŠJ˜�s "¤*ˆJÑ-Ô-ˆØ�JŠJ˜�s "¤*ˆJÑ-Ô-ˆà�˜1”˜n¨QÔ/°BÐ7Ñ7Ô7ˆØ�	˜!”˜^¨AÔ.°2Ð6Ñ6Ô6ˆå˜v uÑ-Ô-ˆÝÝØˆ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Ñ%Ô%ð 	!ð 	!ØˆJ�q˜RÐ Ñ Ô Ð ð	!ð 	!ð 	!ñ 	!ô 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!øøøð 	!ð 	!ð 	!ð 	!ð 	!ð 	!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   € õ % T¨bÐ1Ñ1Ô1ÔC‰ˆˆqàŒ{˜1Œ~ ! T¡'¨Q¨t°Q©w©YÑ!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ð 	(ð 	(Ý˜a BÐ'Ñ'Ô'Ð'ð	(ð 	(ð 	(ñ 	(ô 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(øøøð 	(ð 	(ð 	(ð 	(ð 	(ð 	(s   œ;»?Á?N)
rÚ   rÛ   rÜ   rÝ   rË   rÞ   rß   rz   rW  rY  r.   r   r   rQ  rQ  "  sh   € € € € € ðð ð „[×Ò˜V U U¨1¨b¡\¤\Ñ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ÐB°a�"—*’*˜Q b¤j�*Ñ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   ø€ Õ/°°6¸9Ñ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  øøø€ õ  $ B§H¢H¨Q¡K¤KÑ0Ô0ˆ	ØBÐBÐBÐB¸6ÐBÑBÔBˆå0àEÐEÐEÐEÐEØ�JŠJ�q 	Ô 1ˆJÑ2Ô2Ø�JŠJ�q 	Ô 1ˆJÑ2Ô2Øð
ñ 
ô 
ˆð ð 	1ð 	1ˆEØ -× 1Ò 1°)×2CÒ2CÀEÈ7Ñ2SÔ2SÑ TÔ TÐå”�yÐ0QÐ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à��D”H�9ÐØ�”˜$œ(Ð#à�	�	Ø��ðð	
ð	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 Ñ"Ô"ˆÝ,¨R°BÐ7Ñ7Ô7ˆ
à×"Ò" 1 a¨¨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 Ñ"Ô"ˆØ�zŠz˜# R¤ZˆzÑ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ñ	ô ñ Ôð
 1ðF1ð 1ð 1ð 1ð 1�4ñ 1ô 1ð 1ð 1ð 1r   