
    ^MhXn                        d dl Z d dlZd dlmZmZmZ d dlmZ d dl	m
Z d dlmc mZ d dlmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZmZmZ d dlm Z m!Z! d dl"m#Z# e j$        j%        Z% G d	 d
          Z& G d d          Z' G d d          Z(e  G d d                      Z) G d d          Z*ddddddZ+ G d d          Z, G d d          Z-dS )    N)assert_equalassert_almost_equalassert_allclose)given)	rombnewton_cotescumulative_trapezoid	trapezoidquadsimpson
fixed_quadqmc_quadcumulative_simpson)%_cumulative_simpson_unequal_intervals)statsspecial	integrate)array_api_compatibleskip_xp_invalid_arg)xp_assert_closec                       e Zd Zd Zd ZdS )TestFixedQuadc                 r    dddz  z  }t          fddd          \  }}t          ||d           d S )	N         c                     | dz  dz
  z  S )Nr   r    )xns    e/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/integrate/tests/test_quadrature.py<lambda>z+TestFixedQuad.test_scalar.<locals>.<lambda>   s    a!A#'l     r   r    -q=rtol)r   r   )selfexpectedgot_r    s       @r!   test_scalarzTestFixedQuad.test_scalar   sT    ac72222AqA>>>QXE222222r#   c                     d}t          j        dd|z            ddz   z  }t          fddd|          \  }}t          ||d           d S )	Nr   r   r   c                 "    | d d d f         z  S Nr   )r   ps    r!   r"   z+TestFixedQuad.test_vector.<locals>.<lambda>"   s    a111d7m r#   r   r$   r%   r&   )nparanger   r   )r(   r    r)   r*   r+   r0   s        @r!   test_vectorzTestFixedQuad.test_vector   si    Ia1a!e93333QQ???QXE222222r#   N)__name__
__module____qualname__r,   r3   r   r#   r!   r   r      s2        3 3 33 3 3 3 3r#   r   c                   ~    e Zd Zd Zd Zd Zd Zd Zd Ze	j
                            ddd	g          d
             ZdS )TestQuadraturec                     t           r/   )NotImplementedError)r(   r   abargss        r!   r   zTestQuadrature.quad'   s    !!r#   c                 d    t          t          t          j        d                    d           d S )N      )r   r   r1   r2   r(   s    r!   	test_rombzTestQuadrature.test_romb*   s(    T")B--((#.....r#   c                    t          j        d          }t          j        d|z            }t          |          }t	          d |                                |                                          \  }}t          ||dd           d S )Nr?   皙?c                 0    t          j        d| z            S )NrD   )r1   cosr   s    r!   r"   z2TestQuadrature.test_romb_gh_3731.<locals>.<lambda>2   s    26#a%== r#   g:0yE>r   r'   atol)r1   r2   rF   r   r   minmaxr   )r(   r   yvalval2errs         r!   test_romb_gh_3731z TestQuadrature.test_romb_gh_3731-   ss    IfF3q5MM1gg00!%%''15577CC	cT1555555r#   c                    d}t          |d          \  }}t          ||t          j        ddg          z             t	          ||dz   dz             d}t          |d          \  }}t	          ||t          j        g d          z  dz             t	          ||dz   d	z             d}t          |d          \  }}t	          ||t          j        g d
          z  dz             t	          ||dz   dz             d}t          |d          \  }}t	          ||t          j        g d          z  dz             t	          ||dz   dz             dS )z5Test the first few degrees, for evenly spaced points.r         ?         (@r   )      ?      @rU         @   g     @)rU         @rY   rU          @g     P@r   )      @      @@rT   r\   r[   g     V@   g     =AN)r   r   r1   arrayr   )r(   r    wtserrcoffs       r!   test_newton_cotesz TestQuadrature.test_newton_cotes5   sq   #Aq))WS!BHc3Z000111GadU4Z000#Aq))WC28OOO#<#<!<S!@AAAGadU6\222#Aq))WC28,@,@,@#A#A!A#!EFFFGadU6\222#Aq))WC28,H,H,H#I#I!I$!NOOOGadU9_55555r#   c                 V   t          j        g d          }|dz  }t          |          \  }}d}t          j        ||          }t	          ||           t          j        g d          }|dz  }t          |          \  }}d}t          j        ||          }t	          ||           dS )z9Test newton_cotes with points that are not evenly spaced.)        g      ?       @r   gUUUUUU@)rc   gffffff?g @rY         "@N)r1   r^   r   dotr   )r(   r   rL   r_   r`   exact_integralnumeric_integrals          r!   test_newton_cotes2z!TestQuadrature.test_newton_cotes2K   s     H___%%qD#AW6#q>>,n===H)))**qD#AW6#q>>,n=====r#   c           
      z   t          j        d          }t          t          |          d           t          t          |d          d           t          t          |t          j        ddd                    d	           t          j        d
dd          }d }t          t           ||          |          d           t          j        d
dd          }t          t           ||          d          d           t          j        d                              dd          }t          j        d                              ddd          } ||          }t          d          D ]}t          |||          }t          j        |dg          }|D ]}t          |j
                  }	|	                    |t          d                      |t          |	                   d         dz  dz  |t          |	                   d         dz  dz  z
  }
t          ||j
                 |
           t          j        d                              dd          } ||          }t          ||d          }d|d d d
f         |d d df         z   z  |d d d
f         |d d df         z
  z  }
t          ||
           t          j        d                              dd          }t          j        d                              ddd          } ||          }t          d          D ]}t          |||          }t          j        |dg          }|D ]}t          |j
                  }	|	                    |t          d                      |t          |	                   d         dz  dz  |t          |	                   d         dz  dz  z
  }
t          ||j
                 |
           t          j        dg          }t          j        |d          }t          t          ||d          d           t          t          ||d          d           t          j        g d          }t          j        |d          }t          t          ||d          d           t          t          ||d          d           t          j        g dg dg dg          }t          j        |d          }g d}d gdz  }t          t          ||d          |           t          t          ||d          |           t          j        g dg dg d!g          }t          j        |d          }g d"}g d#}t          t          ||d          |           t          t          ||d          |           d S )$Nr?   r@   rR   dx@   r   r   rG       r   c                     | dz  S )Nr   r   rG   s    r!   fz&TestQuadrature.test_simpson.<locals>.fd   s    a4Kr#         5@r]   rd   r            P@rS   r   axismulti_index)flags   r      rX   }   rc   )rS   rS   rS   rS   )r   r   r   rz   )rc   rc   rc   rc   竪Je@)r   rz   rs   rn   )rc   g      a@g      @g      @)r}   r}   g*U@)r1   r2   r   r   linspacer   reshaperangenditerlistrw   insertslicetupler^   power)r(   rL   r   rp   r;   iritr+   idxintegral	zero_axisdefault_axiss                r!   test_simpsonzTestQuadrature.test_simpson\   s   IbMMWQZZ%%%WQ3''',,,WQ"+aB"7"7888"=== K1a  	 	 	 	!***D111 K1a  !---s333 IbMM!!!Q''IcNN""1a++AaDDq 	= 	=AQQ'''A1]O444B = =2>**

1eDkk***U3ZZ=,a/!3ac

mA6F6IA6MM". 18<<<<	= IbMM!!!Q''AaDDA$$$!AAAqD'AaaadG+,!!!Q$!AAAqD'0AB8$$$ IbMM!!!Q''IcNN""1a++AaDDq 	= 	=AQQ'''A1]O444B = =2>**

1eDkk***U3ZZ=,a/!3ac

mA6F6IA6MM". 18<<<<	= HaSMMHQNNQQ///555QR000#666H\\\""HQNNQQ///555QR000#666HlllLLL,,,?@@HQNN(((	!{QQQ///;;;QR000,???HlllLLL...ABBHQNN000	>>>QQ///;;;QR000,?????r#   droplastFTc                     t          j        g dg dg          }|r|d d d df         }t          |d          }t          t          j        |t           j                  d          }t	          ||           d S )N)r   r   r   r   rz   rz   rX   )r   r   r   r   
      r   ry   rv   dtype)r1   r^   r   float64r   )r(   r   rL   resultr)   s        r!   test_simpson_2d_integer_no_xz+TestQuadrature.test_simpson_2d_integer_no_x   s     H///3335 6 6 	!!!SbS&	A$$$28ARZ888rBBBVX&&&&&r#   N)r4   r5   r6   r   rB   rP   ra   ri   r   pytestmarkparametrizer   r   r#   r!   r8   r8   &   s        " " "/ / /6 6 66 6 6,> > >"K@ K@ K@\ [Z%77	' 	' 87	' 	' 	'r#   r8   c                   x    e Zd Zd Zd Zd Zd Zej        	                    dddg          d             Z
d	 Zd
S )TestCumulative_trapezoidc                     t          j        ddd          }|}t          ||d          }g d}t          ||           t          ||d           }t          ||dd                     d S )	Nr   r   rX   numr   initial)rc                r   rc   r   r1   r~   r	   r   )r(   r   rL   y_int
y_expecteds        r!   test_1dz TestCumulative_trapezoid.test_1d   s~    KA1%%%$Q1555...
z***$Q4888z!""~.....r#   c                    t          j        d                              ddd          }|}t          ||d          }t          j        g dg dgg d	g d
gg dg dgg          }t          ||           g d}t          g d|          D ]U\  }}t          ||d|          }t          |j        d           t          ||d |          }t          |j        |           Vd S )N   rS   r   r   r   r   )rc   rR   rd         @)rc   r         $@     0@)rc         !@      2@g     <@)rc         )@g      :@     @D@)rc   r   g      A@g     @J@)rc        4@g      E@g      P@))r   r   r   )rS   r   r   )rS   r   rS   r   r   r   )r   rv   )rS   r   r   )	r1   r2   r   r	   r^   r   zipr   shape)r(   r   rL   r   r   shapesrv   r   s           r!   test_y_nd_x_ndz'TestCumulative_trapezoid.test_y_nd_x_nd   s4   Ii  ((Aq11$Q1555X 2 2 2 4 4 4 6 4 4 4 5 5 5 7 5 5 5 5 5 5 7	8 9 9
 	z*** 322yyy&11 	- 	-KD%(AqtDDDEi000(At$GGGEe,,,,		- 	-r#   c           	         t          j        d                              ddd          }t          j        d          dz  }t          j        g dg dgg dg dgg          t          j        g d	gg d
gg dgg          t          j        g dg dgg dg dgg dg dgg          f}t	          g d|          D ];\  }}t          ||d |j        |                  |d           }t          ||           <d S )Nr   rS   r   r   )rV         @rW   r[   )rZ   re   r         &@)g      D@g      F@g      H@g      J@)g      L@g      N@rt   g      Q@)rd   rY   rV   r   )r   r   rT         *@)r   g      3@      4@rq   )rR   r   g     1@)r   rq   g     J@)r   g     B@g     `V@)r   g     J@g     `_@)r   g     @Q@g     0d@)r   g     @U@g     h@r   )r   rv   r   )r1   r2   r   r^   r   r	   r   r   )r(   rL   r   ys_expectedrv   r   r   s          r!   test_y_nd_x_1dz'TestCumulative_trapezoid.test_y_nd_x_1d   s~   Ii  ((Aq11IaLL!O H''')))+++++++-. / / H'''(+++,+++,. / / H''')''')))+))))))+	, - -. !$III{ ; ; 	/ 	/D*(a.?d157 7 7EE:....	/ 	/r#   c                 Z   t          j        ddd          }t          |          }g d}t          ||           t          |d          }g d}t          ||           t          |d	
          }g d}t          ||           t          |d	d          }g d}t          ||           d S )Nr   r   rX   r   )r   r   r   rc   r   r   )r   r   r   r   rc   rS   rk   )            r   rc   )rl   r   )r   r   r   r   rc   r   )r(   rL   r   r   s       r!   test_x_nonez$TestCumulative_trapezoid.test_x_none   s    KA1%%%$Q''***
z***$Q222---
z***$Q1---***
z***$Q1a888---
z*****r#   r   r   rR   c                     t          j        ddd          }t          j        t          d          5  t          ||           ddd           dS # 1 swxY w Y   dS )z4If initial is not None or 0, a ValueError is raised.r   r   r   z	`initial`matchr   N)r1   r~   r   raises
ValueErrorr	   )r(   r   rL   s      r!   test_initial_errorz+TestCumulative_trapezoid.test_initial_error  s    
 K22&&&]:[999 	5 	5 G4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s   AAAc                     t          j        t          d          5  t          g            d d d            d S # 1 swxY w Y   d S )NAt least one point is requiredr   rL   )r   r   r   r	   rA   s    r!   test_zero_len_yz(TestCumulative_trapezoid.test_zero_len_y  s    ]:-MNNN 	' 	' 2&&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   :>>N)r4   r5   r6   r   r   r   r   r   r   r   r   r   r   r#   r!   r   r      s        / / /- - -*/ / /0+ + +& [As8 5 5 5' ' ' ' 'r#   r   c                   t   e Zd Zd Z eddg          ej                            d          d                         Z eddg          ej                            d          d                         Z	e
d             Z ed	d
g          ej                            d          d                         ZdS )TestTrapezoidc           	      0   |                     ddd          }t          |                    d|dz  z            |                    d|                    |j                  z            z  d          }t          ||                    d                     d S )Nr   g?g      r   rk   rU   )r2   r
   expsqrtasarraypir   )r(   xpr   r   s       r!   test_simplezTestTrapezoid.test_simple  s    IIc2r""bffS16\**RWWQBE9J9J5J-K-KKPSTTT2::c??+++++r#   z	jax.numpyz)JAX arrays do not support item assignment)reasonsskip_xp_backendsc                 D   |                     ddd          }|                     ddd          }|                     ddd          }|                    |          |d         |d         z
  z  }|dxx         dz  cc<   |dxx         dz  cc<   |                    |          |d         |d         z
  z  }|dxx         dz  cc<   |dxx         dz  cc<   |                    |          |d         |d         z
  z  }|dxx         dz  cc<   |dxx         dz  cc<   |d d d d f         |d d d d f         z   |d d d d f         z   }|                    ||d d d d f         z  d          }	|                    ||d d d d f         z  d          }
|                    ||d d d d f         z  d          }t          ||d d d d f         d	          }t	          ||	           t          ||d d d d f         d	          }t	          ||
           t          ||d d d d f         d	          }t	          ||           t          ||d	          }t	          ||	           t          ||d	          }t	          ||
           t          ||d	          }t	          ||           d S )
Nr   r   rS   r   rz      ry   r   ru   )r~   	ones_likesumr
   r   )r(   r   r   rL   zwxwywzqqxqyqzr   s                r!   	test_ndimzTestTrapezoid.test_ndim  s    KK1a  KK1a  KK1b!!\\!__!qt,
1

2!\\!__!qt,
1

2!\\!__!qt,
1

2!aaatmqaaa.4aaa<@VVA111dD=))V22VVA4D=))V22VVA4qqq=))V22 a1QQQd]+!4442a1T!!!T\?3332a1T4\?3332 a11%%%2a11%%%2a11%%%2r#   c           
         |                     |                    ddd          d          }|                     |                    ddd          d          }|                    ddd          }t          t          ||d          |           t          t          ||                    g d	          d          |           t          t          ||                    g d	          d d d f         d          |           t          j        t                    5  t          ||                    g d	          d d d f         d           d d d            n# 1 swxY w Y   |                    g d
          }t          t          ||d          |           t          t          ||                    ddd          d          |           d S )Nr         )rS   r      i|  r   ru   )r   r   r   )r   g     P`@g     k@r   	   )r   r~   r   r
   r   r   r   	Exception)r(   r   r   rL   out0out1s         r!   test_gh21908zTestTrapezoid.test_gh21908@  s   
 JJr{{1b"--w77JJr{{1b"--w77{{3R((	!qq1114888	!rzz---'@'@qIII4PPPa2::mmm44QQQW=AFFF	
 	
 	
 ]9%% 	G 	Ga2::mmm44T111W=AFFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G zz///00	!qq1114888a2;;q!R00q999	
 	
 	
 	
 	
s   2EE Ec                    t          j        d          }||z  }|dk    }t           j                            ||          }d}t	          t          ||          |           t           j                            ||          }t	          t          ||          |           t           j                            ||          }t	          t          ||          |           d S )NrX   r   )maskr   )r1   r2   mar^   r   r
   )r(   r   r   rL   r   ymr   xms           r!   test_maskedzTestTrapezoid.test_masked[  s     IaLLEAvU[[[&&	"a((!,,,U[[[&&	"b))1---U[[[&&	!R((!,,,,,r#   Tz,array-likes only supported for NumPy backend)np_onlyr   c                 &   t          t          d                    }d |D             }|                    ||j                  }|                    ||j                  }t	          ||          }t	          ||          }t          ||           d S )NrX   c                     g | ]}||z  S r   r   ).0ts     r!   
<listcomp>z1TestTrapezoid.test_array_like.<locals>.<listcomp>q  s    qQUr#   r   )r   r   r   r   r
   r   )r(   r   r   rL   xarryarrresresarrs           r!   test_array_likezTestTrapezoid.test_array_likel  s     qNNAzz!2:z..zz!2:z..1oo4&&V$$$$$r#   N)r4   r5   r6   r   r   r   r   usefixturesr   r   r   r   r  r   r#   r!   r   r     sK       , , , kJKM M M[/00# # 10M M#J kJKM M M[/00
 
 10M M
0 - - -  dMNP P P[/00% % 10P P% % %r#   r   c                      e Zd Zej        j        d             ZddZej                            dddg          ej                            ddd	g          d
                         Z	ej                            dddgddgddgddgg          d             Z
ej        j        ej                            dddg          d                         Zd ZdS )TestQMCQuadc           	         d}t          j        t          |          5  t          dddgddg           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          d ddgddg           d d d            n# 1 swxY w Y   d }d	}t          j        t          |          5  t          |ddgddg           d d d            n# 1 swxY w Y   d
}t          j        t          |          5  t          d ddgddgd           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          d ddgddgd           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          d ddgddgd           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          d ddgddgt          j        	                    d                     d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          d ddgddgd           d d d            d S # 1 swxY w Y   d S )Nz`func` must be callable.r   za duckr   r   z/`func` must evaluate the integrand at points...c                      dS Nr   r   r   r#   r!   r"   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  s    Q r#   c                 D    | j         dk    sJ t          j        |           S r  )ndimr1   r   rG   s    r!   funcz/TestQMCQuad.test_input_validation.<locals>.func  s    6Q;;;;6!99r#   z8Exception encountered when attempting vectorized call...z`n_points` must be an integer.c                     dS r  r   rG   s    r!   r"   z3TestQMCQuad.test_input_validation.<locals>.<lambda>      q r#   g     @)n_pointsz!`n_estimates` must be an integer.c                     dS r  r   rG   s    r!   r"   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r  r#   r   )n_estimatesz8`qrng` must be an instance of scipy.stats.qmc.QMCEngine.c                     dS r  r   rG   s    r!   r"   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r  r#   )qrngz8`qrng` must be initialized with dimensionality equal to c                     dS r  r   rG   s    r!   r"   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r  r#   z,`log` must be boolean \(`True` or `False`\).c                     dS r  r   rG   s    r!   r"   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r  r#   r   log)
r   r   	TypeErrorr   r   warnsUserWarningr   qmcSobol)r(   messager
  s      r!   test_input_validationz!TestQMCQuad.test_input_validationz  s   ,]9G444 	/ 	/X1v1v...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ D]:W555 	0 	0YYAA///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0	 	 	 M\+W555 	+ 	+TAq6Aq6***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 3]9G444 	C 	C[[1a&1a&6BBBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 6]9G444 	C 	C[[1a&1a&cBBBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C M]9G444 	A 	A[[1a&1a&x@@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A M]:W555 	K 	K[[1a&1a&uyq7I7IJJJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K B]9G444 	: 	:[[1a&1a&b9999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   A  AA(BBB6CCC D%%D),D)E22E69E6F??GG'6H))H-0H-I77I;>I;   rz   Nc           	         |t          j        d          }d}t          j        |          t          j        |          fdt           j                            d          }t          j                            ||          }t          j        |          }t          j        |          |z  }t          |||||          }	t          j
                            ||          }
t          j        |dz
  d          |	j        z  }t          |	j        |
|	           t          j        |          |	j        z  d
k    sJ t           j                            d          }t          j                            ||          }t          fd||||d|          }t          t          j        |j                  |	j        d           t          j        |j                  t          j        |          d
k     rt           j        nd
k    sJ t          t          j        |j                  |	j        dd           d S )Nr   c                 P    t           j                            | j                  S r/   )r   multivariate_normalpdfT)r   covmeans    r!   r
  z$TestQMCQuad.basic_test.<locals>.func  s     ,00dC@@@r#   l   ^^@E9? )seed)r  r  r  )lower_limitr   gףp=
?rI   r   c                  2    t          j         |            S r/   )r1   r  )r=   r
  s    r!   r"   z(TestQMCQuad.basic_test.<locals>.<lambda>  s    ttT{(;(; r#   T)r  r  r  r  +=r&   缉ؗҜ<rH   )r1   oneszeroseyerandomdefault_rngr   r  r  r   r   cdfr   stdtritstandard_errorr   r   prodr   imagr   )r(   r  r  signsr	  rngr  r;   r<   r   refrI   logresr#  r
  r$  s                @@@r!   
basic_testzTestQMCQuad.basic_test  s1   =GAJJEx~~fTll	A 	A 	A 	A 	A 	A i##$788yt#..HTNNGDMME!tQH#.T; ; ;'++AtSa+HH{1}e44s7IIc5555wu~~cl*Q....i##$788yt#..;;;;Q#+"/ / / 	v//EJJJJwv''RWU^^a5G5GBEEQOOOOv455*U	D 	D 	D 	D 	D 	Dr#   r  i   r  rs   c                 2    |                      ||           d S r/   r9  )r(   r  r  s      r!   
test_basiczTestQMCQuad.test_basic  s     	+.....r#   r5  r   ry   c                 2    |                      |           d S )N)r5  r;  )r(   r5  s     r!   	test_signzTestQMCQuad.test_sign  s    e$$$$$r#   r  FTc                     d}t          j        t          |          5  t          d ddgddg|          }d d d            n# 1 swxY w Y   |j        |rt
          j         ndk    sJ |j        dk    sJ d S )Nz-A lower limit was equal to an upper limit, sor   c                     dS r  r   rG   s    r!   r"   z'TestQMCQuad.test_zero.<locals>.<lambda>  s    Q r#   r   r   r  )r   r  r  r   r   r1   infr2  )r(   r  r  r   s       r!   	test_zerozTestQMCQuad.test_zero  s     B\+W555 	A 	A;;AAC@@@C	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A|3 5A6666!Q&&&&&&s   AA
Ac                     d }t          |dd          }t          j                            dd          t          j                            dd          z
  }t	          |j        |d           d S )Nc                 D    t           j                            | d          S )Nr   scale)r   normr!  rG   s    r!   r
  z-TestQMCQuad.test_flexible_input.<locals>.func  s    :>>!1>---r#   r   r   r   rE  g{Gz?)r   r   rG  r0  r   r   )r(   r
  r   r7  s       r!   test_flexible_inputzTestQMCQuad.test_flexible_input  sl    	. 	. 	. tQ""jnnQan((5:>>!1>+E+EEc400000r#   )r  rz   N)r4   r5   r6   r   r   thread_unsafer  r9  r   r<  r>  rB  rH  r   r#   r!   r  r  y  s8       [": ": ":HD D D D> [Z$77[]QG44/ / 54 87/ [W1vBx"a1b'&JKK% % LK% [[UUDM22' ' 32 '1 1 1 1 1r#   r  ry   r   rl   r   rv   c                f  	 | j         |         dk     r-|t          | |||d           S |t          | |||d          z   S t          j        | |d          } t          j        |          dk    rt          j        ||d          n|}t          j        |          dk    rt          j        ||d          n|}t          j        |          dk    rt          j        ||d          n|}| j         d         	||t          j        	          z  n|}|d u }|rdn|}t          j        || j                   }t          j        || j         d d         dz             }t          j        | ||fd          }	fd}t          j        |d|          }|r|d	dd f         n|}t          j        |d|          }|S )
NrS   )r   rl   rv   r   r   ry   r   )r   r   c                 d    t          | d          | dz           | dz  d                    S )Nr   )r   r   )r   )r   r    s    r!   rp   z*cumulative_simpson_nd_reference.<locals>.f  s8    !!BQB%1QqsU8QqsttWEEEEr#   .)	r   r	   r1   moveaxisr	  r2   broadcast_toconcatenateapply_along_axis)
rL   r   rl   r   rv   initial_was_noner   rp   r   r    s
            @r!   cumulative_simpson_nd_referencerR    s   wt}q?'Q2D$OOOO1!qRdTUVVVVV 	AtR  A$&GAJJNNAtR   A&(gbkkAooRr	"	"	"2B020@0@10D0Dbk'4,,,'G 	
A^RYq\\A$#0aaG 	17##Aogqwss|d':;;G
1gR000AF F F F F

aQ
'
'C +
3#c122g,,C
+c2t
$
$CJr#   c                      e Zd Z ej        d          Zedz  Zej        	                    dd          ej        	                    dd          d                         Z
ej        	                    d ej        dd	                    ej        	                    d
d          ej        	                    dd          ej        	                    dd          ej        	                    dd          d                                                             Zej        	                    dd eg d          fd eeg dgeeg          fd eeeegeeegd          fd eg g           fd ed          fd e ej        d                    fd  e ej        d          !          fd" ed# ej        d          $          fg          d%             Zd& Zd' Zej        j        ej        j         e ej        ej         ej        dd	d()           ej        d*d(d+,                              d-           .          /          d0                                     Zej        j        ej        j         e ej        ej         ej        dd	d()           ej        d*d(d+,                              d1           .          /          d2                                     Zd#S )3TestCumulativeSimpsonr   r   use_dx)FTuse_initialc                 ~   t           j                            d          }d}|rdnd}|                                }|dk    r't          j        |                    |                    n+t          j        |          |z  |                                z   }t          j        |dz             d d t           j        f         }|                    |dz             d d t           j        f         }	t          j        |	||z  z  d          }
t          j        |	||dz   z  z  |dz   z  d          }|r|n||d         z
  dd          }|r|d         nd }|rd|ind	|i}t          |
fi |d
|i}|st          ||d           d S |rdnd}t          ||d           t          ||d d         ||d d         d           d S )N   F*BG r   rS   r   r   r   r   rl   r   r   gV瞯<r&   g{Gzd?)	r1   r.  r/  sortr2   newaxisr   r   r   )r(   rU  rV  r6  r    orderrl   r   r   crL   Yr7  r   kwargr   i0s                    r!   r   zTestCumulativeSimpson.test_1d  s   
 i##$899 "ZZ\\',zzRWSZZ]]###)A,,r/CJJLL0 	
Ieai  BJ/JJuqy!!!!!RZ-0F1QT6"""F1QQZ<Q'a0000aaQqtVQRRL &/!A$$4$2r

3( ==e==W===  	@C5111111!(qBC62222CAJBEE
??????r#   rv   rS   x_ndim)r   rS   x_len)r   r   r]   i_ndim)Nr   rS   rl   )NTc                    t           j                            d          }dd|g}|d         ||         c||<   |d<   |                                }d||<   |dk    r|nd}	|                    |          }
d	\  }}|r1|dk    r|                    |          n|                                }n^|dk    r*t          j        |                    |          |
          n-t          j        |                    ||                             }|d n|                    |	          }t          |
||||          }t          |
||||          }t           j                            ||d           d S )NrX  rX      ry   r   rS   r   size)NNr   rJ  V瞯<r&   )	r1   r.  r/  copyrY  r   rR  testingr   )r(   rv   ra  rb  rc  rl   r6  r   shape_len_1i_shaperL   r   r   r   r7  s                  r!   test_ndzTestCumulativeSimpson.test_nd'  s{    i##$899 Au!&rE$KdU2YjjllD!'1++" JJEJ""2 	=17!---BB?Ezz//d;;;;gcjjeDkj::;;  .$$cjjgj.F.F !aBdKKK-a1WSWXXX

""3%"88888r#   )r  kwarg_updatezx must be strictly increasing)r   r   rS   r   rG   )r   r   r   rz   )r   rL   r   )r   rL   rv   r   z-`axis=4` is not valid for `y` with `y.ndim=1`r   z+shape of `x` must be the same as `y` or 1-DrX   z'`initial` must either be a scalar or...r   z"`dx` must either be a scalar or...N)r   rl   c           
          t          | j        | j        d d d          }t          j        t
          |          5  t          di t          |fi | d d d            d S # 1 swxY w Y   d S )Nry   )rL   r   rl   r   rv   r   r   )dicty0x0r   r   r   r   )r(   r  rn  kwargs0s       r!   test_simpson_exceptionsz-TestCumulativeSimpson.test_simpson_exceptionsF  s     DGdLLL]:W555 	@ 	@??g!>!>!>!>???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   AA#&A#c                     t           j                            d          }|                    d          }t          |d          }t	          |d           d S )NrX  r   rf  r   rk   )r1   r.  r/  r   r   )r(   r6  rL   r   s       r!   test_special_casesz(TestCumulativeSimpson.test_special_casesU  sS    i##$899JJBJ q)))S!r#   c                    t          j        |d          }t          ||          }t          |ddddf         |ddddf                   ddddf         }g |j        dd         dR }t          j        t          j        |          |dddf         |dddf         z
  t          j        |          gd          }d|ddddf<   |S )aj  `cumulative_simpson` and `simpson` can be tested against other to verify
        they give consistent results. `simpson` will iteratively be called with
        successively higher upper limits of integration. This function calculates
        the theoretical correction required to `simpson` at even intervals to match
        with `cumulative_simpson`.
        ry   r   .Nr   rc   r   )r1   diffr   r   rO  r,  )r(   rL   r   dsub_integrals_h1sub_integrals_h2zeros_shapetheoretical_differences           r!   1_get_theoretical_diff_between_simps_and_cum_simpszGTestCumulativeSimpson._get_theoretical_diff_between_simps_and_cum_simps`  s    GAB@AFF@c44R4iL!C2I,
 

ttt)
 )(a((!#%%!#qrr'*-=c3B3h-GG%%
 "
 "
 "
 -0sADqDy) &%r#   r   )max_dimsmin_sidemax_sider   F)	allow_nanc                 (    t          |           dk    S NgHz>absrG   s    r!   r"   zTestCumulativeSimpson.<lambda>      #a&&SW- r#   )elementsr   c                 2   d }t          |d          } ||          }|                     |t          j        |j        d                             }t          j                            |dddf         |dddf         |dddf         z   d	
           dS )e  Theoretically, the output of `cumulative_simpson` will be identical
        to `simpson` at all even indices and in the last index. The first index
        will not match as `simpson` uses the trapezoidal rule when there are only two
        data points. Odd indices after the first index are shown to match with
        a mathematically-derived correction.c                      t          j         fdt          d j        d         dz             D             d          S )Nc                 F    g | ]}t          d d|f         d          S ).NrU   rk   r   )r   r   rL   s     r!   r   z|TestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dx.<locals>.simpson_reference.<locals>.<listcomp>  s2    NNN37,,,NNNr#   r   ry   r   r   r1   stackr   r   r   s   `r!   simpson_referencezhTestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dx.<locals>.simpson_reference  sJ    8NNNNeAqwr{1}6M6MNNNUW   r#   rU   rk   ry   rG   .r   Nr*  r'  )r   r~  r1   r2   r   rj  r   )r(   rL   r  r   r7  r}  s         r!   7test_cumulative_simpson_against_simpson_with_default_dxzMTestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dx~  s    "	 	 	
 !s+++""!%!W!W172;'' "X "
 "
 	
""QRRL#c122g,)?QRR)HHu 	# 	
 	
 	
 	
 	
r#   c                 (    t          |           dk    S r  r  rG   s    r!   r"   zTestCumulativeSimpson.<lambda>  r  r#   c           	         d|j         d         dz
  z  }t          j        dd|j         d                   }|dd         d|z  t          j                            ddt          |          dz
            z  z   |dd<   d }t          ||	          } |||          }|                     ||          }t          j        	                    |d
ddf         |d
ddf         |d
ddf         z              dS )r  r   ry   r   r   r   NrD   c                      t          j         fdt          d j        d         dz             D             d          S )Nc           	      Z    g | ]'}t          d d|f         d d|f                   (S ).NrG   r  )r   r   r   rL   s     r!   r   zlTestCumulativeSimpson.test_cumulative_simpson_against_simpson.<locals>.simpson_reference.<locals>.<listcomp>  s>    TTTq37qbqbz222TTTr#   r   ry   r   r   r  )rL   r   s   ``r!   r  zXTestCumulativeSimpson.test_cumulative_simpson_against_simpson.<locals>.simpson_reference  sO    8TTTTTE!QWR[QR]<S<STTT   r#   rG   .)
r   r1   r~   r.  uniformlenr   r~  rj  r   )r(   rL   intervalr   r  r   r7  r}  s           r!   'test_cumulative_simpson_against_simpsonz=TestCumulativeSimpson.test_cumulative_simpson_against_simpson  s   " qwr{Q'K2172;///!""HRY%6%6r1c!ffqj%I%III!""	 	 	 !a(((1%%!%!W!Wq"
 "
 	
""QRRL#c122g,)?QRR)HH	
 	
 	
 	
 	
r#   )r4   r5   r6   r1   r2   rr  rq  r   r   r   r   rm  rp  rt  rv  r~  rI  slowr   hyp_numarraysr   array_shapesstfloatsfilterr  r  r   r#   r!   rT  rT     s       	1B	QB[X}55[]M::@ @ ;: 65@B [VYRYr1%5%566[Xv..[Wi00[X}55[T<009 9 10 65 10 /. 76
94 [8	($$*>*>*>?	($$"lll1CBx*P*P*PQ	($$"b""b"TU*V*V*VW	)44"+;+;+;<	8$$A,,,G	6yry||8L8L8LM	2DD14N4N4NO	-ttdyry||/L/L/LM	; 	 	@ @	 	@
  & & &< [[
U
'.J G !a"EEERYsB%888??@W@WXX
 
 
  
 
   
, [[
U
'.J G !a"EEERYsB%888??@W@WXX
 
 
  
 
   
 
 
r#   rT  c                       e Zd Zd Zd Zej                            d e e	ddd                     e e	ddd	                    z             d
             Z
dS )TestLebedevc                     d}t          j        t          |          5  t          j        d           d d d            d S # 1 swxY w Y   d S )NzOrder n=-1 not available...r   ry   )r   r   r:   r   lebedev_rule)r(   r  s     r!   r  z!TestLebedev.test_input_validation  s    /].g>>> 	' 	'"2&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   A  AAc                     d }t          j        d          \  }}| ||          z  }d}t          ||d           t          t          j        |          dt          j        z             d S )Nc                 6    t          j        | d                   S )Nr   )r1   r   rG   s    r!   rp   z&TestLebedev.test_quadrature.<locals>.f  s    6!A$<<r#      g9-@r)  r&   r   )r   r  r   r1   r   r   )r(   rp   r   wr   r7  s         r!   test_quadraturezTestLebedev.test_quadrature  sv    	  	  	  %b))1!!A$$hSu----q		1ru9-----r#   r[  rS   rn   r   #      re  c                 R   t          j        |          \  }}t          j        dd          5  t	          j        |j        d          }t          |j        dd           d d d            n# 1 swxY w Y   t          t          j	        |          dt          j
        z             d S )Nignore)divideinvalidr   r   rh  r'  r   )r   r  r1   errstater   directional_statsr"  r   mean_resultant_lengthr   r   )r(   r[  r   r  r   s        r!   test_propertieszTestLebedev.test_properties  s    %e,,1[(;;; 	F 	F)!#A666CC5quEEEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	q		1RU7+++++s   3A--A14A1N)r4   r5   r6   r  r  r   r   r   r   r   r  r   r#   r!   r  r    s        ' ' '
. 
. 
. [Wdd55B??&;&;dd55SRSCTCT>U>U&UVV, , WV, , ,r#   r  ).r   numpyr1   numpy.testingr   r   r   
hypothesisr   hypothesis.strategies
strategiesr  hypothesis.extra.numpyextrar  scipy.integrater   r   r	   r
   r   r   r   r   r   scipy.integrate._quadraturer   scipyr   r   r   scipy.conftestr   r   scipy._lib._array_api_no_0dr   r   r   r   r8   r   r   r  rR  rT  r  r   r#   r!   <module>r     s        L L L L L L L L L L       " " " " " " ( ( ( ( ( ( ( ( (; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; N M M M M M + + + + + + + + + + D D D D D D D D 7 7 7 7 7 7;/ 3 3 3 3 3 3 3 3 N' N' N' N' N' N' N' N'bV' V' V' V' V' V' V' V'r e% e% e% e% e% e% e% e%P_1 _1 _1 _1 _1 _1 _1 _1D -1T4b " " " " "J
 
 
 
 
 
 
 
B, , , , , , , , , ,r#   