
    >qjf|                        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"m#Z#m$Z$ d d	l%m&Z&m'Z' d d
l(m)Z* e jV                  jX                  Z, e"e       G d d             Z- e"e       G d d             Z. e"e       G d d             Z/ e"e       G d d             Z0 e"e       G d d             Z1 G d d      Z2 e"e       G d de2             Z3 e"e       G d de2             Z4 e"e       G d d             Z5ddddddZ6 e"e       G d  d!             Z7 e"ejp                         G d" d#             Z9y)$    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)make_xp_test_casexp_default_dtypeis_numpy)xp_assert_closexp_assert_equal)array_api_extrac                       e Zd Zd Zd Zej                  j                  dg d      d        Z e	dd       e	d	d      d
               Z
y)TestFixedQuadc                     dddz  z  }t        fddd      \  }}t        |t        j                  |      d       y )	N         c                     | dz  dz
  z  S Nr    r    xns    d/opt/rentech/trading_bot/.venv/lib/python3.12/site-packages/scipy/integrate/tests/test_quadrature.py<lambda>z+TestFixedQuad.test_scalar.<locals>.<lambda>       a!A#'l     r   r&   -q=rtol)r   r   npasarray)selfexpectedgot_r&   s       @r'   test_scalarzTestFixedQuad.test_scalar   s?    ac72AqA>QRZZ1>r*   c                     dddz  z  }t        fd|j                  d      |j                  d            \  }}t        ||j                  |      d	       y )
Nr   r   r    c                     | dz  dz
  z  S r"   r#   r$   s    r'   r(   z'TestFixedQuad.test_0d.<locals>.<lambda>#   r)   r*                 ?r+   r,   r-   )r   r0   r   )r1   xpr2   r3   r4   r&   s        @r'   test_0dzTestFixedQuad.test_0d    sP    ac72BJJrNBJJrNVWXQRZZ1>r*   dtype)Nfloat32float64c                 B   ||nt        |      }d}j                  dd|z  |      }j                  d|      j                  d|      }}d|dz   z  }t        fd|||f|      \  }}	|j                  k(  rd	nd
}
t        |j                  |      |
       y )Nr   r9   r    r<   r8   r   c                 0    | |d d j                   f   z  S N)newaxis)r%   pr:   s     r'   r(   z+TestFixedQuad.test_vector.<locals>.<lambda>.   s    Aam,<)< r*   )argsr&   r,   gH׊>r-   )getattraranger0   r   r>   r   )r1   r<   r:   r&   rD   abr2   r3   r4   r.   s     `        r'   test_vectorzTestFixedQuad.test_vector'   s    GB,>IIb!A#UI+zz"Ez*BJJrJ,G1a!e9<a!QRSQ+uRZZ1=r*   z	jax.numpyz lazy -> limited input validationreasonz
dask.arrayc                    dd}t        j                  t        |      5  t        fd|j	                  |j
                         |j	                  d             d d d        t        j                  t        |      5  t        fd|j	                  d      |j	                  |j
                               d d d        y # 1 sw Y   hxY w# 1 sw Y   y xY w)	Nr   z8Gaussian quadrature is only available for finite limits.matchc                     | dz  dz
  z  S r"   r#   r$   s    r'   r(   z5TestFixedQuad.test_input_validation.<locals>.<lambda>8       QqS1W r*   r9   r+   c                     | dz  dz
  z  S r"   r#   r$   s    r'   r(   z5TestFixedQuad.test_input_validation.<locals>.<lambda>:   rQ   r*   r8   )pytestraises
ValueErrorr   r0   inf)r1   r:   messager&   s      @r'   test_input_validationz#TestFixedQuad.test_input_validation2   s     L]]:W5 	Y-rzz266'/BBJJrNVWX	Y]]:W5 	X-rzz"~rzz"&&?QUVW	X 	X	Y 	Y	X 	Xs   <C ;CCCN)__name__
__module____qualname__r5   r;   rS   markparametrizerJ   skip_xp_backendsrX   r#   r*   r'   r   r      sc    ?? [[W&BC> D> k*LMl+MNX O NXr*   r   c                       e Zd Zd Zd Zy)TestRombc                     t        t        |j                  d            |j                  d|j                               y )N      1@      `@r@   )r   r   rG   r0   r>   r1   r:   s     r'   	test_rombzTestRomb.test_romb?   s*    RYYt_-rzz%rzzz/RSr*   c                 T   t        j                  d      }t        j                  d|z        }t        |j	                  |            }t        d t        j                  |      t        j                  |            \  }}t        ||j	                  ||j                        dd       y )N   皙?c                 X    t        j                  t        j                  d| z              S )Nrh   )r/   cosarrayr%   s    r'   r(   z,TestRomb.test_romb_gh_3731.<locals>.<lambda>G   s    RVVBHHSUO%< r*   r@   g:0yE>r   r.   atol)
r/   rG   rj   r   r0   r   minmaxr   r>   )r1   r:   r%   yvalr2   r4   s          r'   test_romb_gh_3731zTestRomb.test_romb_gh_3731B   sw    IIfFF3q5M2::a=!<bffQiPQS!RZZ

ZC$UVWr*   N)rY   rZ   r[   re   rs   r#   r*   r'   r`   r`   =   s    TXr*   r`   c                       e Zd Zd Zd Zy)TestNewtonCotesc                 V   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         y)z5Test the first few degrees, for evenly spaced points.r         ?         (@r    )r9         @r9         @   g     @)r9         @r}   r9          @g     P@r   )      @      @@ry   r   r   g     V@   g     =AN)r   r   r/   rk   r   )r1   r&   wtserrcoffs       r'   test_newton_cotesz!TestNewtonCotes.test_newton_cotesM   s   #Aq)WS!BHHc3Z001GadU4Z0#Aq)WC288O#<!<S!@AGadU6\2#Aq)WC288,@#A!A#!EFGadU6\2#Aq)WC288,H#I!I$!NOGadU9_5r*   c                 <   t        j                  g d      }|dz  }t        |      \  }}d}t        j                  ||      }t	        ||       t        j                  g d      }|dz  }t        |      \  }}d}t        j                  ||      }t	        ||       y)z9Test newton_cotes with points that are not evenly spaced.)r8   g      ?       @r    gUUUUUU@)r8   gffffff?g @r}         "@N)r/   rk   r   dotr   )r1   r%   rq   r   r   exact_integralnumeric_integrals          r'   test_newton_cotes2z"TestNewtonCotes.test_newton_cotes2c   s     HH_%qD#AW66#q>,n=HH)*qD#AW66#q>,n=r*   N)rY   rZ   r[   r   r   r#   r*   r'   ru   ru   K   s    6,>r*   ru   c                       e Zd Zd Zej
                  j                  dd      ej
                  j                  dddg      d               Zy	)
TestSimpsonc           
      
   |j                  d      }t        t        |      |j                  d             t        t        |d      |j                  d             t        t        ||j	                  ddd      	      |j                  d
             |j	                  ddd      }d }t        t         ||      |	      |j                  d             |j	                  ddd      }t        t         ||      d      |j                  d             t        j                   d      j                  dd      }|j                  |j                  d      d      } ||      }t        d      D ]  }t        |||      }t        j                  |dg      }|D ]  }	t        |j                        }
|
j                  |t        d              |t        |
         d   dz  dz  |t        |
         d   dz  dz  z
  }t        ||j                     |j                  |               |j                  |j                  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        ||j                  |             t        j                   d      j                  dd      }|j                  |j                  d      d      } ||      }t        d      D ]  }t        |||      }t        j                  |dg      }|D ]  }	t        |j                        }
|
j                  |t        d              |t        |
         d   dz  dz  |t        |
         d   dz  dz  z
  }t        ||j                     |j                  |               |j                  d g      }|d!z  }t        t        ||d      |j                  d             t        t        ||d      |j                  d             |j                  g d"      }|d!z  }t        t        ||d      |j                  d             t        t        ||d      |j                  d             |j                  g d#g d#g d#g      }|d!z  }|j                  g d$      }|j                  d%gdz        }t        t        ||d      |       t        t        ||d      |       |j                  g d#g d#g d&g      }|d!z  }|j                  g d'      }|j                  g d(      }t        t        ||d      |       t        t        ||d      |       y ))Nrb   rc   rw   dx      P@r8   rz   rg   rl   r   r9   r   c                     | dz  S )Nr    r#   rl   s    r'   fz#TestSimpson.test_simpson.<locals>.f   s    a4Kr*         5@r   r   g     \@      0@)r   r   r   rx   r%   axismulti_index)flagsr   )   r    r      r|   g     @_@)r|   r|   r|   r}   r    )r}   r}   r}   r}   )r9   r   rz   r~   )r8   r8   r8   r8   竪Je@)r9   r~   r   r   )r8   g      a@g      @g      @)r   r   g*U@)rG   r   r   r0   linspacer   r/   reshaperangenditerlistr   insertslicetuple)r1   r:   rq   r%   r   rH   iritr4   idxintegral	zero_axisdefault_axiss                 r'   test_simpsonzTestSimpson.test_simpsonx   s   IIcN
BJJt$45c*BJJsO<R[[R%<=rzz#O KKB"	 	!*BJJt,<= KKB"!-rzz$/?@ IIcN""1a(JJryy~y1aDq 	IAQQ'A1]O4B I2>>*

1eDk*U3Z=,a/!3ac
mA6F6IA6MM".. 12::h3GH	I	I JJryy~v.aDA$!AqD'AadG+,!Q$!AqD'0AB2::h/0 IIbM!!!Q'JJryy	2aDq 	IAQQ'A1]O4B I2>>*

1eDk*U3Z=,a/!3ac
mA6F6IA6MM".. 12::h3GH	I	I JJtqDQQ/CAQR0"**S/BJJ'(qDQQ/CAQR0"**S/BJJ(*:<LMNqDJJ34	zz9+/2QQ/;QR0,?JJ(*:<NOPqDJJ;<	zz"IJQQ/;QR0,?r*   array_api_strictzno int->float promotionrK   droplastFTc                     |j                  g dg dg      }|r|d d d df   }t        |d      }t        |j                  |t        |            d      }t        ||       y )N)r    r    r   r   r   r   r|   )r   r   r    r   
      r   r   r   r@   )r0   r   r   r   )r1   r   r:   rq   resultr2   s         r'   test_simpson_2d_integer_no_xz(TestSimpson.test_simpson_2d_integer_no_x   sf    
 JJ157 8!SbS&	A$2::a/?/C:D2N)r*   N)	rY   rZ   r[   r   rS   r\   r^   r]   r   r#   r*   r'   r   r   u   sR    K@Z [[!!"4=V!W[[Z%7	* 8 X	*r*   r   c                   r    e Zd Zd Zd Zd Zd Zej                  j                  dddg      d        Z
d	 Zy
)TestCumulative_trapezoidc                     |j                  ddd      }|}t        ||d      }|j                  g d      }t        ||       t        ||d       }t        ||dd         y )	Nr   r    r|   numr   initial)r8                r   r8   r   r   r	   r0   r   )r1   r:   r%   rq   y_int
y_expecteds         r'   test_1dz TestCumulative_trapezoid.test_1d   s`    KKA1K%$Q15ZZ 9:
z*$Q48z!"~.r*   c                    |j                  |j                  dt        |            d      }|}t        ||d      }|j	                  g dg dgg dg d	gg d
g dgg      }t        ||       g d}t        g d|      D ]E  \  }}t        ||d|      }|j                  dk(  sJ t        ||d |      }|j                  |k(  rEJ  y )N   r@   rx   r    r   r   r   )r8   rw   r         @)r8   r         $@     0@)r8         !@      2@g     <@)r8         )@g      :@     @D@)r8   r   g      A@g     @J@)r8        4@g      E@g      P@))r    r    r   )rx   r   r   )rx   r    rx   r   r   r    )r   r   )r   rG   r   r	   r0   r   zipshape)	r1   r:   r%   rq   r   r   shapesr   r   s	            r'   test_y_nd_x_ndz'TestCumulative_trapezoid.test_y_nd_x_nd   s    JJryy2B22FyGS$Q15ZZ"4"6"8"6"7"9"7"7"9	!: ;
 	z* 3y&1 	(KD%(AqtDE;;)+++(At$GE;;%'''		(r*   c           	         |j                  |j                  dt        |            d      }|j                  dt        |            dz  }|j                  g dg dgg dg d	gg      |j                  g d
gg dgg dgg      |j                  g dg dgg dg dgg dg dgg      f}t	        g d|      D ]0  \  }}t        ||d |j                  |    |d       }t        ||       2 y )Nr   r@   r   r   r    )rz         @r{   r   )r~   r   r         &@)g      D@g      F@g      H@g      J@)g      L@g      N@r   g      Q@)r   r}   rz   r   )r   r   ry         *@)r   g      3@      4@r   )rw   r   g     1@)r   r   g     J@)r   g     B@g     `V@)r   g     J@g     `_@)r   g     @Q@g     0d@)r   g     @U@g     h@r   )r%   r   r   )r   rG   r   r0   r   r	   r   r   )r1   r:   rq   r%   ys_expectedr   r   r   s           r'   test_y_nd_x_1dz'TestCumulative_trapezoid.test_y_nd_x_1d   s   JJryy2B22FyGSIIa/3I4a7 JJ)+---/0 1 JJ)*-.-.0 1 JJ)+)+-++-	. /0 !$I{ ; 	/D*(a.?d157EE:.	/r*   c                    |j                  ddd      }t        |      }|j                  g d      }t        ||       t        |d      }|j                  g d      }t        ||       t        |d	
      }|j                  g d      }t        ||       t        |d	d      }|j                  g d      }t        ||       y )Nr   r    r|   r   )r   r   r   r8   r   r   )r   r   r   r   r8   rx   r   )            r   r8   )r   r   )r   r   r   r   r8   r   )r1   r:   rq   r   r   s        r'   test_x_nonez$TestCumulative_trapezoid.test_x_none  s    KKA1K%$Q'ZZ 56
z*$Q2ZZ 89
z*$Q1-ZZ 56
z*$Q1a8ZZ 89
z*r*   r   r   rw   c                     |j                  ddd      }t        j                  t        d      5  t	        ||       ddd       y# 1 sw Y   yxY w)z4If initial is not None or 0, a ValueError is raised.r   r   r   z	`initial`rN   r   N)r   rS   rT   rU   r	   )r1   r   r:   rq   s       r'   test_initial_errorz+TestCumulative_trapezoid.test_initial_error  sE    
 KK22K&]]:[9 	5 G4	5 	5 	5s   AAc                     t        j                  t        d      5  t        |j	                  g              d d d        y # 1 sw Y   y xY w)NAt least one point is requiredrN   rq   )rS   rT   rU   r	   r0   rd   s     r'   test_zero_len_yz(TestCumulative_trapezoid.test_zero_len_y(  s6    ]]:-MN 	3 2::b>2	3 	3 	3s   AA
N)rY   rZ   r[   r   r   r   r   rS   r\   r]   r   r   r#   r*   r'   r   r      sG    /(*/0+& [[As8553r*   r   c                       e Zd Zd Zd Zy)CommonTrapezoidSimpsonTestsc           	         |j                  ddd      }| j                  |j                  d|dz  z        |j                  d|j	                  |j
                        z        z  d      }t        ||j	                  d             y )Nr   g?      r    r   r9   )rG   quadrature_funcexpsqrtr0   pir   )r1   r:   r%   r   s       r'   test_simplez'CommonTrapezoidSimpsonTests.test_simple.  ss    IIc2r"  a1f!5BJJruuDU@U8V!V$' ! ) 	2::c?+r*   c                    |j                  ddd      }|j                  ddd      }|j                  ddd      }|j                  |      |d   |d   z
  z  }t        j                  |      d   j	                  d      }t        j                  |      d   j	                  d      }|j                  |      |d   |d   z
  z  }t        j                  |      d   j	                  d      }t        j                  |      d   j	                  d      }|j                  |      |d   |d   z
  z  }t        j                  |      d   j	                  d      }t        j                  |      d   j	                  d      }|d d d d f   |d d d d f   z   |d d d d f   z   }|j                  ||d d d d f   z  d      }	|j                  ||d d d d f   z  d      }
|j                  ||d d d d f   z  d      }| j                  ||d d d d f   d	      }t        ||	       | j                  ||d d d d f   d	      }t        ||
       | j                  ||d d d d f   d	      }t        ||       | j                  ||d	      }t        ||	       | j                  ||d	      }t        ||
       | j                  ||d	      }t        ||       y )
Nr   r   rx   r    r      r   r   r   )r   	ones_likexpxatdividesumr   r   )r1   r:   r%   rq   zwxwywzqqxqyqzr   s                r'   	test_ndimz%CommonTrapezoidSimpsonTests.test_ndim5  s   KK1a KK1a KK1b!\\!_!qt,VVBZ]!!!$VVBZ^""1%\\!_!qt,VVBZ]!!!$VVBZ^""1%\\!_!qt,VVBZ]!!!$VVBZ^""1%atmqa.4a<@VVA1dD=))V2VVA4D=))V2VVA4q=))V2   a4&6Q ?2  aQoA >2  ad1oA >2   aa 02  aa 02  aa 02r*   N)rY   rZ   r[   r   r   r#   r*   r'   r   r   -  s    ,#r*   r   c                       e Zd Zd Zy)TestSimpson2c                     t        |i |S rB   )r   r1   rE   kwargss      r'   r   zTestSimpson2.quadrature_func]  s    '''r*   N)rY   rZ   r[   r   r#   r*   r'   r  r  Z  s    (r*   r  c                   .    e Zd Zd Zd Zed        Zd Zy)TestTrapezoidc                     t        |i |S rB   )r
   r  s      r'   r   zTestTrapezoid.quadrature_funcb  s    $)&))r*   c           
         |j                  |j                  ddd      d      }|j                  |j                  ddd      d      }|j                  ddd      }t        t        ||d      |       t        t        ||j	                  g d	      d      |       t        t        ||j	                  g d	      d d d f   d      |       t        j                  t              5  t        ||j	                  g d	      d d d f   d       d d d        |j	                  g d
      }t        t        ||d      |       t        t        ||j                  ddd      d      |       y # 1 sw Y   ^xY w)Nr         )rx   r      i|  r   r   )r   r   r   )r   g     P`@g     k@r   	   )r   r   r   r
   r0   rS   rT   	Exception)r1   r:   r%   rq   out0out1s         r'   test_gh21908zTestTrapezoid.test_gh21908e  s3   JJr{{1b"-w7JJr{{1b"-w7{{3R(	!qq148	!rzz-'@qI4Pa2::m4QW=AF	
 ]]9% 	Ga2::m4T1W=AF	G zz/0	!qq148a2;;q!R0q9	
	G 	Gs   $'E((E1c                    t        j                  d      }||z  }|dk(  }t         j                  j                  ||      }d}t	        t        ||      |       t         j                  j                  ||      }t	        t        ||      |       t         j                  j                  ||      }t	        t        ||      |       y )Nr|   r    )maskr   )r/   rG   mark   r   r
   )r1   r:   r%   rq   r  ymr   xms           r'   test_maskedzTestTrapezoid.test_masked}  s     IIaLEAvUU[[[&	"a(!,UU[[[&	"b)1-UU[[[&	!R(!,r*   c                 6   t        t        d            }|D cg c]  }||z  	 }}t        j                  |t        j                        }t        j                  |t        j                        }t        ||      }t        ||      }t        ||       y c c}w )Nr|   r@   )r   r   r/   r0   r>   r
   r   )r1   r%   trq   xarryarrresresarrs           r'   test_array_likezTestTrapezoid.test_array_like  st    qNqQUzz!2::.zz!2::.1o4&V$ s   BN)rY   rZ   r[   r   r  r   r  r  r#   r*   r'   r  r  `  s%    *
0 - - %r*   r  c                   N   e Zd Zd ZddZej                  j                  dddg      ej                  j                  ddd	g      d
               Zej                  j                  dddgddgddgddgg      d        Z	ej                  j                  dddg      d        Z
d Zy)TestQMCQuadc           	      D   j                  ddg      }j                  ddg      }d}t        j                  t        |      5  t	        d||       d d d        d}t        j                  t
        |      5  t	        d ||       d d d        fd}d	}t              r2t        j                  t        |      5  t	        |||       d d d        n1t        j                  t
        |      5  t	        |||       d d d        d
}t        j                  t        |      5  t	        d ||d       d d d        d}t        j                  t        |      5  t	        d ||d       d d d        d}t        j                  t        |      5  t	        d ||d       d d d        d}t        j                  t
        |      5  t	        d ||t        j                  j                  d             d d d        d}t        j                  t        |      5  t	        d ||d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   PxY w# 1 sw Y   ]xY w# 1 sw Y   4xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr8   r9   z`func` must be callable.rN   za duckz/`func` must evaluate the integrand at points...c                       yNr   r#   r#   r*   r'   r(   z3TestQMCQuad.test_input_validation.<locals>.<lambda>      r*   c                 H    | j                   dk(  sJ j                  |       S r"  )ndimr   r%   r:   s    r'   funcz/TestQMCQuad.test_input_validation.<locals>.func  s!    66Q;;66!9r*   z8Exception encountered when attempting vectorized call...z`n_points` must be an integer.c                      yr"  r#   rl   s    r'   r(   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r#  r*   g     @)n_pointsz!`n_estimates` must be an integer.c                      yr"  r#   rl   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                      yr"  r#   rl   s    r'   r(   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r#  r*   )qrngz8`qrng` must be initialized with dimensionality equal to c                      yr"  r#   rl   s    r'   r(   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r#  r*   r   z,`log` must be boolean \(`True` or `False`\).c                      yr"  r#   rl   s    r'   r(   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r#  r*   r   log)r0   rS   rT   	TypeErrorr   rU   r   warnsUserWarningr   qmcSobol)r1   r:   rH   rI   rW   r'  s    `    r'   rX   z!TestQMCQuad.test_input_validation  s=   JJBx JJBx ,]]9G4 	%Xq!$	% D]]:W5 	&Y1%	&	 MB<k9 %q!$% % z9 %q!$% 3]]9G4 	9[!Q8	9 6]]9G4 	9[!QC8	9 M]]9G4 	7[!QX6	7 M]]:W5 	A[!QUYY__Q-?@	A B]]9G4 	0[!QB/	0 	0G	% 	%	& 	&% %% %	9 	9	9 	9	7 	7	A 	A	0 	0sl   H08H=<I
.I!I$I1I>.J
J0H:=I
II!$I.1I;>J
JJ   r   Nc           	         t              }|t        j                  d      }d}t        j                  |      }t        j                  |      }fdt        j
                  j                  d      }	t        j                  j                  ||	      }
t        j                  |      }t        j                  |      |z  }t        j                  ||      j                  ||      |||
      }t        j                  j                  ||||      }t        j                  |dz
  d	      |j                   z  }t#        |j$                  j                  ||      |
       t        j&                  |      |j$                  z  dkD  sJ t        j
                  j                  d      }	t        j                  j                  ||	      }
t        fdj                  ||      j                  ||      ||d|
      }|j$                  j(                  j*                  k(  rdnd}t#        j-                  j/                  |j$                              |j$                  |       j1                  |j$                  dz         t        j&                  |      dk  rj2                  ndk(  sJ t#        j/                  |j                         |j                   ||dz         y )Nr    c                 t    j                  dj                  | | z  d      z        dj                  z  z  S )Nr   r   r   r    )r   r   r   r&  s    r'   r'  z$TestQMCQuad.basic_test.<locals>.func  s5    66$!!!445RUUCCr*   l   ^^@E9? )seedr@   )r)  r+  r-  )lower_limitr   gףp=
?rn   r   c                  ,    j                   |        S rB   r0  )rE   r'  r:   s    r'   r(   z(TestQMCQuad.basic_test.<locals>.<lambda>  s    tT{(; r*   T)r)  r+  r1  r-  +=g>r-   y                d   rm   )r   r/   oneszeroseyerandomdefault_rngr   r5  r6  r   r0   multivariate_normalcdfr   stdtritstandard_errorr   r   prodr<   r>   realr   imagr   )r1   r)  r+  signsr:   r<   r%  meancovrngr-  rH   rI   r  refrn   logresr.   r'  s       `             @r'   
basic_testzTestQMCQuad.basic_test  sB    $=GGAJExx~ffTl	D ii##$78yyt#.HHTNGGDME!tRZZZ7AU9S (kN''++AtSa+H{1}e4s7I7IIbjjEj&BNwwu~cll*Q...ii##$78yyt#.;**Qe*4bjj%j6P#+"/ **bjj8udv 78#,,TRwwv+,"''%.1:LRSTTTv445**DH	Fr*   r)  i   r+     c                 ,    | j                  |||       y )N)r:   rR  )r1   r)  r+  r:   s       r'   
test_basiczTestQMCQuad.test_basic  s     	+"5r*   rL  r9   g      c                 *    | j                  ||       y )N)rL  r:   rU  )r1   rL  r:   s      r'   	test_signzTestQMCQuad.test_sign  s    e+r*   r1  FTc           	      .   d}t        j                  t        |      5  t        d |j	                  ddg      |j	                  ddg      |      }d d d        j
                  |r|j                   ndk(  sJ |j                  dk(  sJ y # 1 sw Y   ;xY w)Nz-A lower limit was equal to an upper limit, sorN   c                      yr"  r#   rl   s    r'   r(   z'TestQMCQuad.test_zero.<locals>.<lambda>  r#  r*   r   r   r0  )rS   r3  r4  r   r0   r   rV   rH  )r1   r1  r:   rW   r  s        r'   	test_zerozTestQMCQuad.test_zero  s    A\\+W5 	Y;

Aq6(:BJJ1v<NTWXC	Y||3A666!!Q&&&	Y 	Ys   3BBc                     d }t        |dd      }t        j                  j                  dd      t        j                  j                  dd      z
  }t	        |j
                  |d       y )Nc                 D    t         j                  j                  | d      S )Nr    scale)r   normpdfrl   s    r'   r'  z-TestQMCQuad.test_flexible_input.<locals>.func  s    ::>>!1>--r*   r   r   r    r^  g{Gz?)r   r   r`  rF  r   r   )r1   r'  r  rP  s       r'   test_flexible_inputzTestQMCQuad.test_flexible_input  sS    	. tQ"jjnnQan(5::>>!1>+EEc40r*   )r7  r   NN)rY   rZ   r[   rX   rR  rS   r\   r]   rV  rX  r[  rb  r#   r*   r'   r  r    s    )0V!FF [[Z$7[[]QG46 5 86 [[WBx#sc2YS	&RS, T, [[UUDM2' 3'1r*   r  r   r%   r   r   r   c                t  	 | j                   |   dk  r%|t        | |||d       S |t        | |||d      z   S t        j                  | |d      } t        j                  |      dkD  rt        j                  ||d      n|}t        j                  |      dkD  rt        j                  ||d      n|}t        j                  |      dkD  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 )
Nrx   )r%   r   r   r   r   r   r   )r   r   c                 >    t        | d  | dz   | dz  d        S )Nr    )r%   r   )r   )r   r&   s    r'   r   z*cumulative_simpson_nd_reference.<locals>.f  s,    !!BQ%1Qqs8QqstWEEr*   .)	r   r	   r/   moveaxisr%  rG   broadcast_toconcatenateapply_along_axis)
rq   r%   r   r   r   initial_was_noner   r   r  r&   s
            @r'   cumulative_simpson_nd_referencerk    s   wwt}q?'Q2D$OO1!qRdTUVVV 	AtR A$&GGAJNAtR A&(ggbkAoRr	"2B020@10Dbkk'4,'G 	
A^RYYq\A$#aG 	177#Aoogqwws|d':;G
1gR0AF


aQ
'C +#c12g,C
++c2t
$CJr*   c                      e Zd Z ej                  d      Zedz  Zej                  j                  dd      ej                  j                  dd      d               Z
 ed      ej                  j                  d	 ej                  d
d            ej                  j                  dd      ej                  j                  dd      ej                  j                  dd      ej                  j                  dd      d                                           Zej                  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#                  d*      ej                  j$                   e ej*                  ej,                   ej.                  ddd*+       ej2                  d,d*d-.      j5                  d/       0      1      d2                      Zej                  j#                  d*      ej                  j$                   e ej*                  ej,                   ej.                  ddd*+       ej2                  d,d*d-.      j5                  d3       0      1      d4                      Zy%)5TestCumulativeSimpsonr   r    use_dx)FTuse_initialc                    t         j                  j                  d      }d}|rdnd}|j                  |j                               }|dk(  r4|j                  t        j                  |j                  |                  }n@|j                  ||j                        |z  |j                  |j                               z   }|j                  |dz   |j                        d d |j                  f   }	|j                  |j                  |dz               d d |j                  f   }
|j                  |
||	z  z  d      }|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       y |rdnd}t        ||d       t        ||d d   ||d d   d       y )N   F*BG r   rx   r    r@   r   r   r   r   r%   r   gV瞯<r-   g{Gzd?)r/   rC  rD  r0   sortrG   r>   rC   r   r   r   )r1   rn  ro  r:   rO  r&   orderr   r%   r   crq   YrP  r   kwargr  i0s                     r'   r   zTestCumulativeSimpson.test_1d.  s   
 ii##$89 ZZ

%A:

2773::a=12A		!2::	.r1BJJszz|4LLAIIeairzzI21bjj=AJJszz%!),-am<FF1QT6F"FF1QQZ<Q'aF0aQqtVQRL &!A$4$r
3( =e=W= C51!qBC62CAJBEE
?r*   T)cpu_onlyr   rx   x_ndim)r   rx   x_len)r   r    r   i_ndim)Nr   rx   r   )NTc                    t         j                  j                  d      }dd|g}|d   ||   c||<   |d<   |j                         }	d|	|<   |dk(  r|	nd}
|j	                  |j                  |            }d	\  }}|r9|dkD  r|j                  |	      n|j                         }|j	                  |      }ne|dkD  r't        j
                  |j                  |      |
      n't        j
                  |j                  ||               }|j	                  |      }|d n |j	                  |j                  |
            }t        |||||      }t        t        j                  |      t        j                  |      |d nt        j                  |      |d nt        j                  |      |      }t        ||j	                  |      d       y )Nrq  r|      r   r   rx   r#   size)NNr   rc  V瞯<r-   )	r/   rC  rD  copyr0   rr  r   rk  r   )r1   r   rz  r{  r|  r   r:   rO  r   shape_len_1i_shaperq   r%   r   r  rP  s                   r'   test_ndzTestCumulativeSimpson.test_ndS  s    ii##$89 Au!&rE$KdU2YjjlD!'1+" JJszzuz-.217!-BBB?Ez/d;ggcjjeDkj:; 

1A .$bjj9Q.R !aBdK .JJqMRZZ]rztrzzRT~#ODG1D4
 	RZZ_59r*   )rW   kwarg_updatezx must be strictly increasing)r    r    rx   r   rl   )r    r    r   r   )r%   rq   r   )r%   rq   r   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-Dr|   z'`initial` must either be a scalar or...r   z"`dx` must either be a scalar or...N)r%   r   c           
         t        |j                  | j                        |j                  | j                        d d d      }|j	                         D ci c]<  \  }}|t        |t              r$|j                  t        j                  |            n|> }}}t        j                  t        |      5  t        di t        |fi | d d d        y c c}}w # 1 sw Y   y xY w)Nr   )rq   r%   r   r   r   rN   r#   )dictr0   y0x0items
isinstancer   r/   rS   rT   rU   r   )r1   rW   r  r:   kwargs0kvs          r'   test_simpson_exceptionsz-TestCumulativeSimpson.test_simpson_exceptionsz  s     DGG,

4770C#". %1$6$6$8: Aq 
1d8K2::bjjm4QRR : :]]:W5 	@?g!>!>?	@ 	@:	@ 	@s   AC5CC#c                     t         j                  j                  d      }|j                  |j                  d            }t	        |d      }t        ||j                  d|j                               y )Nrq  r   r  r8   r   r  r@   )r/   rC  rD  r0   r   r   rA  r>   )r1   r:   rO  rq   r  s        r'   test_special_casesz(TestCumulativeSimpson.test_special_cases  sW    ii##$89JJszzrz*+ r*RXXarzzX:;r*   c                 r   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}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`.
        r   r   .Nr   r8   r    )r/   diffr   r   rh  rA  )r1   rq   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     GGAB@AF@c4R4iL!C2I,

tt)
 )(a(!#%!#qr'*-=c3B3h-GG%
 "
 -0sADqDy) &%r*   r   )max_dimsmin_sidemax_sider   F)	allow_nanc                     t        |       dkD  S NgHz>absrl   s    r'   r(   zTestCumulativeSimpson.<lambda>      #a&SW- r*   )elementsr   c           
      "   d }t        |j                  |      d      } ||      }| j                  |t        j                  |j
                  d               }t        |dddf   |j                  |dddf   |dddf   z         d	
       y)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                  t        d| j                  d   dz         D cg c]  }t	        | dd |f   d       c}d      S c c}w )Nr    r   r   .r9   r   r   r/   stackr   r   r   )rq   r   s     r'   simpson_referencezhTestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dx.<locals>.simpson_reference  sM    886;Aqwwr{1}6MN37,NUW Ns   Ar9   r   r   rl   .r   NgؗҜ<r<  )r   r0   r  r/   rG   r   r   )r1   rq   r:   r  r  rP  r  s          r'   7test_cumulative_simpson_against_simpson_with_default_dxzMTestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dx  s    "	
 !A37"!%!W!W1772;' "X "
 	QRL"**Sab\4J3PQPR74S%ST	
r*   c                     t        |       dkD  S r  r  rl   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                  j	                  ddt        |      dz
        z  z   |dd d }t        |j                  |      |j                  |      	      } |||      }| j                  ||      }t        |d
ddf   |j                  |d
ddf   |d
ddf   z                y)r  r   r   r   r   r   Nrh   c                     t        j                  t        d| j                  d   dz         D cg c]  }t	        | dd |f   |dd |f          c}d      S c c}w )Nr    r   r   .rl   r   r  )rq   r%   r   s      r'   r  zXTestCumulativeSimpson.test_cumulative_simpson_against_simpson.<locals>.simpson_reference  sZ    88<A!QWWR[QR]<STq37qbqbz2T Ts   "Arl   .)
r   r/   r   rC  uniformlenr   r0   r  r   )	r1   rq   r:   intervalr%   r  r  rP  r  s	            r'   'test_cumulative_simpson_against_simpsonz=TestCumulativeSimpson.test_cumulative_simpson_against_simpson  s    " qwwr{Q'KK21772;/!"HRYY%6%6r1c!fqj%III!"	 !A"**Q-@1%!%!W!Wq"
 	QRL"**Sab\4J3PQPR74S%ST	
r*   )rY   rZ   r[   r/   rG   r  r  rS   r\   r]   r   r^   r  r  r  r  r  	fail_slowslowr   hyp_numarraysr>   array_shapesstfloatsfilterr  r  r#   r*   r'   rm  rm  )  s   	1B	QB[[X}5[[]M:!@ ; 6!@F t$[[VYRYYr1%56[[Xv.[[Wi0[[X}5[[T<0: 1 6 1 / 7 %:B [[8	($*>?	($"l1CBx*PQ	($"b""b"TU*VW	)4"+;<	8$A,G	6yryy|8LM	2D14NO	-tdyryy|/LM	; 	@	@<&< [[2[[

'..JJ G  !a"ERYYsB%8??@WX

  
. [[2[[

'..JJ G  !a"ERYYsB%8??@WX

  
r*   rm  c                       e Zd Zd Zd Zej                  j                  d e e	ddd             e e	ddd	            z         d
        Z
y)TestLebedevc                     d}t        j                  t        |      5  t        j                  d       d d d        y # 1 sw Y   y xY w)NzOrder n=-1 not available...rN   r   )rS   rT   NotImplementedErrorr   lebedev_rule)r1   rW   s     r'   rX   z!TestLebedev.test_input_validation  s9    /]].g> 	'""2&	' 	' 	's	   =Ac                     d }t        j                  d      \  }}| ||      z  }d}t        ||d       t        t        j                  |      dt        j
                  z         y )Nc                 2    t        j                  | d         S )Nr   )r/   r   rl   s    r'   r   z&TestLebedev.test_quadrature.<locals>.f  s    66!A$<r*      g9-@r>  r-   r   )r   r  r   r/   r   r   )r1   r   r%   wr  rP  s         r'   test_quadraturezTestLebedev.test_quadrature  sU    	  %%b)1!A$hSu-q	1ruu9-r*   rs  rx       r    #      r~  c                 ^   t        j                  |      \  }}t        j                  dd      5  t	        j
                  |j                  d      }t        |j                  dd       d d d        t        t        j                  |      dt        j                  z         y # 1 sw Y   :xY w)Nignore)r   invalidr   r   r  r<  r   )r   r  r/   errstater   directional_statsTr   mean_resultant_lengthr   r   )r1   rs  r%   r  r  s        r'   test_propertieszTestLebedev.test_properties  s    %%e,1[[(; 	F))!##A6CC55quE	F 	q	1RUU7+		F 	Fs   :B##B,N)rY   rZ   r[   rX   r  rS   r\   r]   r   r   r  r#   r*   r'   r  r    sS    '
. [[Wd5B?&;d5SRSCT>U&UV, W,r*   r  ):rS   numpyr/   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_apir   r   r   scipy._lib._array_api_no_0dr   r   scipy._externalr   r   r\   r^   r   r`   ru   r   r   r   r  r  r  rk  rm  r  r  r#   r*   r'   <module>r     s     L L  " ( (; ; ; N + + . O O H 2;;// :"X "X "XJ 4
X 
X 
X < &> &> !&>R 7Z* Z* Z*z '(V3 V3 )V3r+ +Z 7(. ( (
 94%/ 4% 4%n 8h1 h1 h1V -1T4b "J %&M
 M
 'M
` 9))*, , +,r*   