
    Yhm                        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  d dl!m"Z" e j#        j$        Z$ G d	 d
          Z% G d d          Z& G d d          Z' 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)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    w/var/www/tools.fuzzalab.pt/emblema-extractor/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*   r/   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+   r2   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   r0   r1   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 )NrC   )r0   cosr   s    r    r!   z2TestQuadrature.test_romb_gh_3731.<locals>.<lambda>2   s    26#a%== r"   g:0yE>r   r&   atol)r0   r1   rE   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   )      ?      @rT         @   g     @)rT         @rX   rT          @g     P@r   )      @      @@rS   r[   rZ   g     V@   g     =AN)r   r   r0   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@)rb   gffffff?g @rX         "@N)r0   r]   r   dotr   )r'   r   rK   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?   rQ   dx@   r   r   rF       r   c                     | dz  S )Nr   r   rF   s    r    fz&TestQuadrature.test_simpson.<locals>.fd   s    a4Kr"         5@r\   rc   r            P@rR   r   axismulti_index)flags   r      rW   }   rb   )rR   rR   rR   rR   )r   r   r   ry   )rb   rb   rb   rb   竪Je@)r   ry   rr   rm   )rb   g      a@g      @g      @)r|   r|   g*U@)r0   r1   r   r   linspacer   reshaperangenditerlistrv   insertslicetupler]   power)r'   rK   r   ro   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   ry   ry   rW   )r   r   r   r   
      r   rx   ru   dtype)r0   r]   r   float64r   )r'   r   rK   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)r3   r4   r5   r   rA   rO   r`   rh   r   pytestmarkparametrizer   r   r"   r    r7   r7   &   s        " " "/ / /6 6 66 6 6,> > >"K@ K@ K@\ [Z%77	' 	' 87	' 	' 	'r"   r7   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   rW   numr   initial)rb                r   rb   r   r0   r}   r	   r   )r'   r   rK   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   rR   r   r   r   r   )rb   rQ   rc         @)rb   r         $@     0@)rb         !@      2@g     <@)rb         )@g      :@     @D@)rb   r   g      A@g     @J@)rb        4@g      E@g      P@))r   r   r   )rR   r   r   )rR   r   rR   r   r   r   )r   ru   )rR   r   r   )	r0   r1   r~   r	   r]   r   zipr   shape)r'   r   rK   r   r   shapesru   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   rR   r   r   )rU         @rV   rZ   )rY   rd   r         &@)g      D@g      F@g      H@g      J@)g      L@g      N@rs   g      Q@)rc   rX   rU   r   )r   r   rS         *@)r   g      3@      4@rp   )rQ   r   g     1@)r   rp   g     J@)r   g     B@g     `V@)r   g     J@g     `_@)r   g     @Q@g     0d@)r   g     @U@g     h@r   )r   ru   r   )r0   r1   r~   r]   r   r	   r   r   )r'   rK   r   ys_expectedru   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   rW   r   )r   r   r   rb   r   r   )r   r   r   r   rb   rR   rj   )            r   rb   )rk   r   )r   r   r   r   rb   r   )r'   rK   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   rQ   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)r0   r}   r   raises
ValueErrorr	   )r'   r   rK   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   rK   )r   r   r   r	   r@   s    r    test_zero_len_yz(TestCumulative_trapezoid.test_zero_len_y  s    ]:-MNNN 	' 	' 2&&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   :>>N)r3   r4   r5   r   r   r   r   r   r   r   r   r   r   r"   r    r   r      s        / / /- - -*/ / /0+ + +& [As8 5 5 5' ' ' ' 'r"   r   c                       e Zd Zd Z edd          d             Z edd          d             Zed             Z ed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   rj   rT   )r1   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)reasonc                 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   rR   r   ry      rx   r   rt   )r}   	ones_likesumr
   r   )r'   r   r   rK   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         )rR   r      i|  r   rt   )r   r   r   )r   g     P`@g     k@r   	   )r~   r}   r   r
   r   r   r   	Exception)r'   r   r   rK   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 )NrW   r   )maskr   )r0   r1   mar]   r   r
   )r'   r   r   rK   r   ymr   xms           r    test_maskedzTestTrapezoid.test_maskedX  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 )NrW   c                     g | ]}||z  S r   r   ).0ts     r    
<listcomp>z1TestTrapezoid.test_array_like.<locals>.<listcomp>m  s    qQUr"   r   )r   r   r   r   r
   r   )r'   r   r   rK   xarryarrresresarrs           r    test_array_likezTestTrapezoid.test_array_likei  s     qNNAzz!2:z..zz!2:z..1oo4&&V$$$$$r"   N)
r3   r4   r5   r   skip_xp_backendsr   r   r   r   r   r   r"   r    r   r     s        , , , kHJ J J# #J J#J kHJ J J
 
J J
0 - - -  dKM M M% %M M% % %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  )ndimr0   r   rF   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   rF   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   rF   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   rF   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   rF   s    r    r!   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r
  r"   z,`log` must be boolean \(`True` or `False`\).c                     dS r  r   rF   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_validationv  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;   ry   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=
?rH   r   c                  2    t          j         |            S r.   )r0   r  )r<   r  s    r    r!   z(TestQMCQuad.basic_test.<locals>.<lambda>  s    ttT{(;(; r"   T)r  r  r  r  +=r%   缉ؗҜ<rG   )r0   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   refrH   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  rr   c                 2    |                      ||           d S r.   r7  )r'   r  r  s      r    
test_basiczTestQMCQuad.test_basic  s     	+.....r"   r3  r   rx   c                 2    |                      |           d S )N)r3  r9  )r'   r3  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   rF   s    r    r!   z'TestQMCQuad.test_zero.<locals>.<lambda>  s    Q r"   r   r   r  )r   r  r  r   r   r0   infr0  )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  rF   s    r    r  z-TestQMCQuad.test_flexible_input.<locals>.func  s    :>>!1>---r"   r   r   r   rC  g{Gz?)r   r   rE  r.  r   r   )r'   r  r   r5  s       r    test_flexible_inputzTestQMCQuad.test_flexible_input  sl    	. 	. 	. tQ""jnnQan((5:>>!1>+E+EEc400000r"   )r  ry   N)r3   r4   r5   r   r   thread_unsafer  r7  r   r:  r<  r@  rF  r   r"   r    r  r  u  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  rx   r   rk   r   ru   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 )
NrR   )r   rk   ru   r   r   rx   r   )r   r   c                 d    t          | d          | dz           | dz  d                    S )Nr   )r   r   )r   )r   r   s    r    ro   z*cumulative_simpson_nd_reference.<locals>.f  s8    !!BQB%1QqsU8QqsttWEEEEr"   .)	r   r	   r0   moveaxisr  r1   broadcast_toconcatenateapply_along_axis)
rK   r   rk   r   ru   initial_was_noner   ro   r   r   s
            @r    cumulative_simpson_nd_referencerP    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                   b   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                            d(          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                            d(          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   rR   r   r   r   r   rk   r   r   gV瞯<r%   g{Gzd?)	r0   r,  r-  sortr1   newaxisr   r   r   )r'   rS  rT  r4  r   orderrk   r   r   crK   Yr5  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"   ru   rR   x_ndim)r   rR   x_len)r   r   r\   i_ndim)Nr   rR   rk   )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 )NrV  rW      rx   r   rR   r   size)NNr   rH  V瞯<r%   )	r0   r,  r-  copyrW  r   rP  testingr   )r'   ru   r_  r`  ra  rk   r4  r   shape_len_1i_shaperK   r   r   r   r5  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   rR   r   rF   )r   r   r   ry   )r   rK   r   )r   rK   ru   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-DrW   z'`initial` must either be a scalar or...r   z"`dx` must either be a scalar or...N)r   rk   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 )Nrx   )rK   r   rk   r   ru   r   r   )dicty0x0r   r   r   r   )r'   r  rl  kwargs0s       r    test_simpson_exceptionsz-TestCumulativeSimpson.test_simpson_exceptionsB  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 )NrV  r   rd  r   rj   )r0   r,  r-  r   r   )r'   r4  rK   r   s       r    test_special_casesz(TestCumulativeSimpson.test_special_casesQ  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`.
        rx   r   .Nr   rb   r   )r0   diffr   r   rM  r*  )r'   rK   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>absrF   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 ).NrT   rj   r   )r   r   rK   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   rx   r   r   r0   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"   rT   rj   rx   rF   .r   Nr(  r%  )r   r|  r0   r1   r   rh  r   )r'   rK   r  r   r5  r{  s         r    7test_cumulative_simpson_against_simpson_with_default_dxzMTestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dxz  s    $	 	 	
 !s+++""!%!W!W172;'' "X "
 "
 	
""QRRL#c122g,)?QRR)HHu 	# 	
 	
 	
 	
 	
r"   c                 (    t          |           dk    S r  r  rF   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   rx   r   r   r   NrC   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 ).NrF   r  )r   r   r   rK   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   rx   r   r   r  )rK   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"   rF   .)
r   r0   r}   r,  uniformlenr   r|  rh  r   )r'   rK   intervalr   r  r   r5  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"   )r3   r4   r5   r0   r1   rp  ro  r   r   r   r   rk  rn  rr  rt  r|  	fail_slowrG  slowr   hyp_numarraysr   array_shapesstfloatsfilterr  r  r   r"   r    rR  rR    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	; 	 	@ @	 	@
  & & &< [2[[
U
'.J G !a"EEERYsB%888??@W@WXX
 
 
  
 
    
, [2[[
U
'.J G !a"EEERYsB%888??@W@WXX
 
 
  
 
    
 
 
r"   rR  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   rx   )r   r   r9   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   )r0   r   rF   s    r    ro   z&TestLebedev.test_quadrature.<locals>.f  s    6!A$<<r"      g9-@r'  r%   r   )r   r  r   r0   r   r   )r'   ro   r   wr   r5  s         r    test_quadraturezTestLebedev.test_quadrature  sv    	  	  	  %b))1!!A$$hSu----q		1ru9-----r"   rY  rR   rm   r   #      rc  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   rf  r%  r   )r   r  r0   errstater   directional_statsr   r   mean_resultant_lengthr   r   )r'   rY  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)r3   r4   r5   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   numpyr0   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   scipy._lib._array_api_no_0dr   r   r   r   r7   r   r   r  rP  rR  r  r   r"   r    <module>r     s        L L L L L L L L L L       " " " " " " ( ( ( ( ( ( ( ( (; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; N M M M M M + + + + + + + + + + . . . . . . 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b% b% b% b% b% b% b% b%J_1 _1 _1 _1 _1 _1 _1 _1D -1T4b " " " " "JA
 A
 A
 A
 A
 A
 A
 A
F, , , , , , , , , ,r"   