
    e!hXn                        d dl Z d dlZd dlmZmZmZ d dlmZ d dl	m
Z d dlmc mZ d dlmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZmZmZ d dlm Z m!Z! d dl"m#Z# e jH                  jJ                  Z% G d	 d
      Z& G d d      Z' G d d      Z(e  G d d             Z) G d d      Z*ddddddZ+ G d d      Z, G d d      Z-y)    N)assert_equalassert_almost_equalassert_allclose)given)	rombnewton_cotescumulative_trapezoid	trapezoidquadsimpson
fixed_quadqmc_quadcumulative_simpson)%_cumulative_simpson_unequal_intervals)statsspecial	integrate)array_api_compatibleskip_xp_invalid_arg)xp_assert_closec                       e Zd Zd Zd Zy)TestFixedQuadc                 `    dddz  z  }t        fddd      \  }}t        ||d       y )	N         c                     | dz  dz
  z  S )Nr   r    )xns    m/var/www/html/diagnosisapp-backend/venv/lib/python3.12/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   s6    ac72AqA>QXE2r#   c                     d}t        j                  dd|z        ddz   z  }t        fddd|      \  }}t        ||d       y )	Nr   r   r   c                     | d d d f   z  S Nr   )r   ps    r!   r"   z+TestFixedQuad.test_vector.<locals>.<lambda>"   s    a1d7m r#   r   r$   r%   r&   )nparanger   r   )r(   r    r)   r*   r+   r0   s        @r!   test_vectorzTestFixedQuad.test_vector   sJ    IIa1a!e93QQ?QXE2r#   N)__name__
__module____qualname__r,   r3   r   r#   r!   r   r      s    33r#   r   c                   x    e Zd Zd Zd Zd Zd Zd Zd Ze	j                  j                  ddd	g      d
        Zy)TestQuadraturec                     t         r/   )NotImplementedError)r(   r   abargss        r!   r   zTestQuadrature.quad'   s    !!r#   c                 T    t        t        t        j                  d            d       y )N      )r   r   r1   r2   r(   s    r!   	test_rombzTestQuadrature.test_romb*   s    T"))B-(#.r#   c                     t        j                  d      }t        j                  d|z        }t        |      }t	        d |j                         |j                               \  }}t        ||dd       y )Nr?   皙?c                 2    t        j                  d| z        S )NrD   )r1   cosr   s    r!   r"   z2TestQuadrature.test_romb_gh_3731.<locals>.<lambda>2   s    266#a%= r#   g:0yE>r   r'   atol)r1   r2   rF   r   r   minmaxr   )r(   r   yvalval2errs         r!   test_romb_gh_3731z TestQuadrature.test_romb_gh_3731-   sW    IIfFF3q5M1g0!%%'1557C	cT15r#   c                 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   )      ?      @rU         @   g     @)rU         @rY   rU          @g     P@r   )      @      @@rT   r\   r[   g     V@   g     =AN)r   r   r1   arrayr   )r(   r    wtserrcoffs       r!   test_newton_cotesz TestQuadrature.test_newton_cotes5   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.)        g      ?       @r   gUUUUUU@)rc   gffffff?g @rY         "@N)r1   r^   r   dotr   )r(   r   rL   r_   r`   exact_integralnumeric_integrals          r!   test_newton_cotes2z!TestQuadrature.test_newton_cotes2K   s     HH_%qD#AW66#q>,n=HH)*qD#AW66#q>,n=r#   c           
      	   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      j                  dd      }t        j                  d      j                  ddd      } ||      }t        d      D ]  }t        |||      }t        j                  |dg      }|D ]z  }t        |j                        }	|	j                  |t        d              |t        |	         d   dz  dz  |t        |	         d   dz  dz  z
  }
t        ||j                     |
       |  t        j                  d      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        ||
       t        j                  d      j                  dd      }t        j                  d      j                  ddd      } ||      }t        d      D ]  }t        |||      }t        j                  |dg      }|D ]z  }t        |j                        }	|	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      |       y )$Nr?   r@   rR   dx@   r   r   rG       r   c                     | dz  S )Nr   r   rG   s    r!   fz&TestQuadrature.test_simpson.<locals>.fd   s    a4Kr#         5@r]   rd   r            P@rS   r   axismulti_index)flags   r      rX   }   rc   )rS   rS   rS   rS   )r   r   r   rz   )rc   rc   rc   rc   竪Je@)r   rz   rs   rn   )rc   g      a@g      @g      @)r}   r}   g*U@)r1   r2   r   r   linspacer   reshaperangenditerlistrw   insertslicetupler^   power)r(   rL   r   rp   r;   iritr+   idxintegral	zero_axisdefault_axiss                r!   test_simpsonzTestQuadrature.test_simpson\   s.   IIbMWQZ%WQ3',WQ"++aB"78"= KK1a 	 	!*D1 KK1a !-s3 IIbM!!!Q'IIcN""1a+aDq 	=AQQ'A1]O4B =2>>*

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

1eDk*U3Z=,a/!3ac
mA6F6IA6MM".. 18<	=	= HHaSMHHQNQQ/5QR0#6HH\"HHQNQQ/5QR0#6HHlL,?@HHQN(	!{QQQ/;QR0,?HHlL.ABHHQN0	>QQ/;QR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	        ||       y )N)r   r   r   r   rz   rz   rX   )r   r   r   r   
      r   ry   rv   dtype)r1   r^   r   float64r   )r(   r   rL   resultr)   s        r!   test_simpson_2d_integer_no_xz+TestQuadrature.test_simpson_2d_integer_no_x   sb     HH/35 6!SbS&	A$288ARZZ8rBVX&r#   N)r4   r5   r6   r   rB   rP   ra   ri   r   pytestmarkparametrizer   r   r#   r!   r8   r8   &   sL    "/66,>"K@\ [[Z%7	' 8	'r#   r8   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                     t        j                  ddd      }|}t        ||d      }g d}t        ||       t        ||d       }t        ||dd         y )	Nr   r   rX   numr   initial)rc                r   rc   r   r1   r~   r	   r   )r(   r   rL   y_int
y_expecteds        r!   test_1dz TestCumulative_trapezoid.test_1d   sT    KKA1%$Q15.
z*$Q48z!"~.r#   c                    t        j                  d      j                  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 ]O  \  }}t        ||d|      }t        |j                  d       t        ||d |      }t        |j                  |       Q y )N   rS   r   r   r   r   )rc   rR   rd         @)rc   r         $@     0@)rc         !@      2@g     <@)rc         )@g      :@     @D@)rc   r   g      A@g     @J@)rc        4@g      E@g      P@))r   r   r   )rS   r   r   )rS   r   rS   r   r   r   )r   rv   )rS   r   r   )	r1   r2   r   r	   r^   r   zipr   shape)r(   r   rL   r   r   shapesrv   r   s           r!   test_y_nd_x_ndz'TestCumulative_trapezoid.test_y_nd_x_nd   s    IIi ((Aq1$Q15XX 2 4 6 4 5 7 5 5 7	8 9
 	z* 3y&1 	-KD%(AqtDEi0(At$GEe,		-r#   c           	         t        j                  d      j                  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 ]0  \  }}t        ||d |j                  |    |d       }t        ||       2 y )Nr   rS   r   r   )rV         @rW   r[   )rZ   re   r         &@)g      D@g      F@g      H@g      J@)g      L@g      N@rt   g      Q@)rd   rY   rV   r   )r   r   rT         *@)r   g      3@      4@rq   )rR   r   g     1@)r   rq   g     J@)r   g     B@g     `V@)r   g     J@g     `_@)r   g     @Q@g     0d@)r   g     @U@g     h@r   )r   rv   r   )r1   r2   r   r^   r   r	   r   r   )r(   rL   r   ys_expectedrv   r   r   s          r!   test_y_nd_x_1dz'TestCumulative_trapezoid.test_y_nd_x_1d   s   IIi ((Aq1IIaL!O HH')+++-. / HH'(+,+,. / HH')')+))+	, -. !$I{ ; 	/D*(a.?d157EE:.	/r#   c                    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        ||       y )Nr   r   rX   r   )r   r   r   rc   r   r   )r   r   r   r   rc   rS   rk   )            r   rc   )rl   r   )r   r   r   r   rc   r   )r(   rL   r   r   s       r!   test_x_nonez$TestCumulative_trapezoid.test_x_none   s    KKA1%$Q'*
z*$Q2-
z*$Q1-*
z*$Q1a8-
z*r#   r   r   rR   c                     t        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`matchr   N)r1   r~   r   raises
ValueErrorr	   )r(   r   rL   s      r!   test_initial_errorz+TestCumulative_trapezoid.test_initial_error  sC    
 KK22&]]:[9 	5 G4	5 	5 	5s   AAc                 |    t        j                  t        d      5  t        g        d d d        y # 1 sw Y   y xY w)NAt least one point is requiredr   rL   )r   r   r   r	   rA   s    r!   test_zero_len_yz(TestCumulative_trapezoid.test_zero_len_y  s.    ]]:-MN 	' 2&	' 	' 	's   2;N)r4   r5   r6   r   r   r   r   r   r   r   r   r   r   r#   r!   r   r      sG    /-*/0+& [[As855'r#   r   c                   <   e Zd Zd Z eddg      ej                  j                  d      d               Z eddg      ej                  j                  d      d               Z	e
d        Z ed	d
g      ej                  j                  d      d               Zy)TestTrapezoidc           	          |j                  ddd      }t        |j                  d|dz  z        |j                  d|j	                  |j
                        z        z  d      }t        ||j	                  d             y )Nr   g?g      r   rk   rU   )r2   r
   expsqrtasarraypir   )r(   xpr   r   s       r!   test_simplezTestTrapezoid.test_simple  sd    IIc2r"bffS16\*RWWQBEE9J5J-KKPST2::c?+r#   z	jax.numpyz)JAX arrays do not support item assignment)reasonsskip_xp_backendsc                    |j                  ddd      }|j                  ddd      }|j                  ddd      }|j                  |      |d   |d   z
  z  }|dxx   dz  cc<   |dxx   dz  cc<   |j                  |      |d   |d   z
  z  }|dxx   dz  cc<   |dxx   dz  cc<   |j                  |      |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   }|j                  ||d d d d f   z  d      }	|j                  ||d d d d f   z  d      }
|j                  ||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	        ||       y )
Nr   r   rS   r   rz      ry   r   ru   )r~   	ones_likesumr
   r   )r(   r   r   rL   zwxwywzqqxqyqzr   s                r!   	test_ndimzTestTrapezoid.test_ndim  s)    KK1a KK1a KK1b!\\!_!qt,
1

2!\\!_!qt,
1

2!\\!_!qt,
1

2!atmqa.4a<@VVA1dD=))V2VVA4D=))V2VVA4q=))V2 a1Qd]+!42a1T!T\?32a1T4\?32 a11%2a11%2a11%2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         )rS   r      i|  r   ru   )r   r   r   )r   g     P`@g     k@r   	   )r   r~   r   r
   r   r   r   	Exception)r(   r   r   rL   out0out1s         r!   test_gh21908zTestTrapezoid.test_gh21908@  s5   
 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 )NrX   r   )maskr   )r1   r2   mar^   r   r
   )r(   r   r   rL   r   ymr   xms           r!   test_maskedzTestTrapezoid.test_masked[  s     IIaLEAvUU[[[&	"a(!,UU[[[&	"b)1-UU[[[&	!R(!,r#   Tz,array-likes only supported for NumPy backend)np_onlyr   c                    t        t        d            }|D cg c]  }||z  	 }}|j                  ||j                        }|j                  ||j                        }t	        ||      }t	        ||      }t        ||       y c c}w )NrX   r   )r   r   r   r   r
   r   )	r(   r   r   trL   xarryarrresresarrs	            r!   test_array_likezTestTrapezoid.test_array_likel  sz     qNqQUzz!2::z.zz!2::z.1o4&V$ s   BN)r4   r5   r6   r   r   r   r   usefixturesr   r   r   r   r   r   r#   r!   r   r     s    , kJKM[[/0# 1M#J kJKM[[/0
 1M
0 - -  dMNP[[/0% 1P%r#   r   c                      e Zd Zej                  j
                  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
                  ej                  j                  dddg      d               Zd Zy)TestQMCQuadc           	         d}t        j                  t        |      5  t        dddgddg       d d d        d}t        j                  t        |      5  t        d ddgddg       d d d        d }d	}t        j
                  t        |      5  t        |ddgddg       d d d        d
}t        j                  t        |      5  t        d ddgddgd       d d d        d}t        j                  t        |      5  t        d ddgddgd       d d d        d}t        j                  t        |      5  t        d ddgddgd       d d d        d}t        j                  t        |      5  t        d ddgddgt        j                  j                  d             d d d        d}t        j                  t        |      5  t        d ddgddgd       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   dxY w# 1 sw Y   7x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)Nz`func` must be callable.r   za duckr   r   z/`func` must evaluate the integrand at points...c                       yNr   r   r   r#   r!   r"   z3TestQMCQuad.test_input_validation.<locals>.<lambda>      r#   c                 N    | j                   dk(  sJ t        j                  |       S r  )ndimr1   r   rG   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   rG   s    r!   r"   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r  r#   g     @)n_pointsz!`n_estimates` must be an integer.c                      yr  r   rG   s    r!   r"   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r  r#   r   )n_estimatesz8`qrng` must be an instance of scipy.stats.qmc.QMCEngine.c                      yr  r   rG   s    r!   r"   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r  r#   )qrngz8`qrng` must be initialized with dimensionality equal to c                      yr  r   rG   s    r!   r"   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r  r#   z,`log` must be boolean \(`True` or `False`\).c                      yr  r   rG   s    r!   r"   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r  r#   r   log)
r   r   	TypeErrorr   r   warnsUserWarningr   qmcSobol)r(   messager  s      r!   test_input_validationz!TestQMCQuad.test_input_validationz  s&   ,]]9G4 	/X1v1v.	/ D]]:W5 	0YAA/	0	 M\\+W5 	+TAq6Aq6*	+ 3]]9G4 	C[1a&1a&6B	C 6]]9G4 	C[1a&1a&cB	C M]]9G4 	A[1a&1a&x@	A M]]:W5 	K[1a&1a&uyyq7IJ	K B]]9G4 	:[1a&1a&b9	: 	:?	/ 	/	0 	0	+ 	+	C 	C	C 	C	A 	A	K 	K	: 	:s_   G*G7HHH;H+52H7I*G47HHHH(+H47I I   rz   Nc           	         |t        j                  d      }d}t        j                  |      t        j                  |      fdt         j                  j                  d      }t        j                  j                  ||      }t        j                  |      }t        j                  |      |z  }t        |||||      }	t        j                  j                  ||      }
t        j                  |dz
  d      |	j                  z  }t        |	j                   |
|	       t        j"                  |      |	j                   z  d
kD  sJ t         j                  j                  d      }t        j                  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       y )Nr   c                 Z    t         j                  j                  | j                        S r/   )r   multivariate_normalpdfT)r   covmeans    r!   r  z$TestQMCQuad.basic_test.<locals>.func  s"    ,,00dC@@r#   l   ^^@E9? )seed)r
  r  r  )lower_limitr   gףp=
?rI   r   c                  4    t        j                   |        S r/   )r1   r  )r=   r  s    r!   r"   z(TestQMCQuad.basic_test.<locals>.<lambda>  s    tT{(; r#   T)r
  r  r  r  +=r&   缉ؗҜ<rH   )r1   oneszeroseyerandomdefault_rngr   r  r  r   r  cdfr   stdtritstandard_errorr   r   prodr   imagr   )r(   r
  r  signsr  rngr  r;   r<   r   refrI   logresr   r  r!  s                @@@r!   
basic_testzTestQMCQuad.basic_test  s   =GGAJExx~ffTl	A ii##$78yyt#.HHTNGGDME!tQH#.T;''++AtSa+H{1}e4s7I7IIc5wwu~cll*Q...ii##$78yyt#.;Q#+"/ 	v/EJwwv'RWWU^a5GBEEQOOOv445**U	Dr#   r
  i   r  rs   c                 (    | j                  ||       y r/   r6  )r(   r
  r  s      r!   
test_basiczTestQMCQuad.test_basic  s     	+.r#   r2  r   ry   c                 (    | j                  |       y )N)r2  r8  )r(   r2  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        j                  |rt
        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, sor   c                      yr  r   rG   s    r!   r"   z'TestQMCQuad.test_zero.<locals>.<lambda>  r  r#   r   r   r  )r   r  r  r   r   r1   infr/  )r(   r  r  r   s       r!   	test_zerozTestQMCQuad.test_zero  sy     B\\+W5 	A;AAC@C	A||3A666!!Q&&&	A 	As   A11A: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   normr  rG   s    r!   r  z-TestQMCQuad.test_flexible_input.<locals>.func  s    ::>>!1>--r#   r   r   r   rB  g{Gz?)r   r   rD  r-  r   r   )r(   r  r   r4  s       r!   test_flexible_inputzTestQMCQuad.test_flexible_input  sS    	. tQ"jjnnQan(5::>>!1>+EEc40r#   )r  rz   N)r4   r5   r6   r   r   thread_unsafer  r6  r   r9  r;  r?  rE  r   r#   r!   r  r  y  s    [[": ":HD> [[Z$7[[]QG4/ 5 8/ [[W1vBx"a1b'&JK% L% [[[[UUDM2' 3 '1r#   r  ry   r   rl   r   rv   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 )
NrS   )r   rl   rv   r   r   ry   r   )r   r   c                 >    t        | d  | dz   | dz  d        S )Nr   )r   r   )r   )r   r    s    r!   rp   z*cumulative_simpson_nd_reference.<locals>.f  s,    !!BQ%1Qqs8QqstWEEr#   .)	r   r	   r1   moveaxisr  r2   broadcast_toconcatenateapply_along_axis)
rL   r   rl   r   rv   initial_was_noner   rp   r   r    s
            @r!   cumulative_simpson_nd_referencerO    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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                   ej                  j"                   e ej(                  ej*                   ej,                  dd	d()       ej0                  d*d(d+,      j3                  d-       .      /      d0                      Zej                  j                   ej                  j"                   e ej(                  ej*                   ej,                  dd	d()       ej0                  d*d(d+,      j3                  d1       .      /      d2                      Zy#)3TestCumulativeSimpsonr   r   use_dx)FTuse_initialc                 *   t         j                  j                  d      }d}|rdnd}|j                         }|dk(  r$t        j                  |j                  |            n(t        j                  |      |z  |j                         z   }t        j                  |dz         d d t         j
                  f   }|j                  |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       y |rdnd}t        ||d       t        ||d d   ||d d   d       y )N   F*BG r   rS   r   r   r   r   rl   r   r   gV瞯<r&   g{Gzd?)	r1   r+  r,  sortr2   newaxisr   r   r   )r(   rR  rS  r3  r    orderrl   r   r   crL   Yr4  r   kwargr   i0s                    r!   r   zTestCumulativeSimpson.test_1d  sy   
 ii##$89 ZZ\',zRWWSZZ]#))A,r/CJJL0 	
IIeai BJJ/JJuqy!!RZZ-0FF1QT6"FF1QQZ<Q'a0aQqtVQRL &!A$4$r
3( =e=W= C51!qBC62CAJBEE
?r#   rv   rS   x_ndim)r   rS   x_len)r   r   r]   i_ndim)Nr   rS   rl   )NTc                    t         j                  j                  d      }dd|g}|d   ||   c||<   |d<   |j                         }d||<   |dk(  r|nd}	|j                  |      }
d	\  }}|r(|dkD  r|j                  |      n|j                         }nT|dkD  r't        j                  |j                  |      |
      n't        j                  |j                  ||               }|d n|j                  |	      }t        |
||||      }t        |
||||      }t         j                  j                  ||d       y )NrU  rX      ry   r   rS   r   size)NNr   rG  V瞯<r&   )	r1   r+  r,  copyrV  r   rO  testingr   )r(   rv   r^  r_  r`  rl   r3  r   shape_len_1i_shaperL   r   r   r   r4  s                  r!   test_ndzTestCumulativeSimpson.test_nd'  s5    ii##$89 Au!&rE$KdU2YjjlD!'1+" JJEJ"217!-B?Ez/d;ggcjjeDkj:;  .$cjjgj.F !aBdK-a1WSWX


""3%"8r#   )r  kwarg_updatezx must be strictly increasing)r   r   rS   r   rG   )r   r   r   rz   )r   rL   r   )r   rL   rv   r   z-`axis=4` is not valid for `y` with `y.ndim=1`r   z+shape of `x` must be the same as `y` or 1-DrX   z'`initial` must either be a scalar or...r   z"`dx` must either be a scalar or...N)r   rl   c           
          t        | j                  | j                  d d d      }t        j                  t
        |      5  t        di t        |fi | d d d        y # 1 sw Y   y xY w)Nry   )rL   r   rl   r   rv   r   r   )dicty0x0r   r   r   r   )r(   r  rk  kwargs0s       r!   test_simpson_exceptionsz-TestCumulativeSimpson.test_simpson_exceptionsF  sZ     DGGdL]]:W5 	@?g!>!>?	@ 	@ 	@s    AA(c                     t         j                  j                  d      }|j                  d      }t        |d      }t	        |d       y )NrU  r   rc  r   rk   )r1   r+  r,  r   r   )r(   r3  rL   r   s       r!   test_special_casesz(TestCumulativeSimpson.test_special_casesU  s=    ii##$89JJBJ q)S!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`.
        ry   r   .Nr   rc   r   )r1   diffr   r   rL  r)  )r(   rL   r   dsub_integrals_h1sub_integrals_h2zeros_shapetheoretical_differences           r!   1_get_theoretical_diff_between_simps_and_cum_simpszGTestCumulativeSimpson._get_theoretical_diff_between_simps_and_cum_simps`  s     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>absrG   s    r!   r"   zTestCumulativeSimpson.<lambda>      #a&SW- r#   )elementsr   c                    d }t        |d      } ||      }| j                  |t        j                  |j                  d               }t        j
                  j                  |dddf   |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   ry   r   .rU   rk   r   r1   stackr   r   r   )rL   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rU   rk   ry   rG   .r   Nr'  r$  )r   r{  r1   r2   r   rg  r   )r(   rL   r  r   r4  rz  s         r!   7test_cumulative_simpson_against_simpson_with_default_dxzMTestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dx~  s    "	
 !s+"!%!W!W1772;' "X "
 	

""QRL#c12g,)?QR)HHu 	# 	
r#   c                     t        |       dkD  S r  r  rG   s    r!   r"   zTestCumulativeSimpson.<lambda>  r  r#   c           	         d|j                   d   dz
  z  }t        j                  dd|j                   d         }|dd d|z  t        j                  j	                  ddt        |      dz
        z  z   |dd d }t        ||	      } |||      }| j                  ||      }t        j                  j                  |d
ddf   |d
ddf   |d
ddf   z          y)r  r   ry   r   r   r   NrD   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   ry   r   .rG   r   r  )rL   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rG   .)
r   r1   r~   r+  uniformlenr   r{  rg  r   )r(   rL   intervalr   r  r   r4  rz  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(1%!%!W!Wq"
 	

""QRL#c12g,)?QR)HH	
r#   )r4   r5   r6   r1   r2   ro  rn  r   r   r   r   rj  rm  rq  rs  r{  rF  slowr   hyp_numarraysr   array_shapesstfloatsfilterr  r  r   r#   r!   rQ  rQ     s   	1B	QB[[X}5[[]M:@ ; 6@B [[VYRYYr1%56[[Xv.[[Wi0[[X}5[[T<09 1 6 1 / 7
94 [[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	; 	@	@
&< [[[[

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

'..JJ G  !a"ERYYsB%8??@WX

  
r#   rQ  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...r   ry   )r   r   r:   r   lebedev_rule)r(   r  s     r!   r  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   )r1   r   rG   s    r!   rp   z&TestLebedev.test_quadrature.<locals>.f  s    66!A$<r#      g9-@r&  r&   r   )r   r  r   r1   r   r   )r(   rp   r   wr   r4  s         r!   test_quadraturezTestLebedev.test_quadrature  sU    	  %%b)1!A$hSu-q	1ruu9-r#   rX  rS   rn   r   #      rb  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)divideinvalidr   r   re  r$  r   )r   r  r1   errstater   directional_statsr  r   mean_resultant_lengthr   r   )r(   rX  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)r4   r5   r6   r  r  r   r   r   r   r   r  r   r#   r!   r  r    sS    '
. [[Wd5B?&;d5SRSCT>U&UV, W,r#   r  ).r   numpyr1   numpy.testingr   r   r   
hypothesisr   hypothesis.strategies
strategiesr  hypothesis.extra.numpyextrar  scipy.integrater   r   r	   r
   r   r   r   r   r   scipy.integrate._quadraturer   scipyr   r   r   scipy.conftestr   r   scipy._lib._array_api_no_0dr   r   r   r   r8   r   r   r  rO  rQ  r  r   r#   r!   <module>r     s      L L  " ( (; ; ; N + + D 7;;// 3 3 N' N'bV' V'r e% e% e%P_1 _1D -1T4b "J
 
B, ,r#   