o
    `^hX                     @   sN  d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
  mZ d dlmZmZ d dlmZmZmZmZmZ d dlmZmZ d dlmZmZmZ d dlmZ d d	l m!Z! dd
dZ"dddZ#dd Z$eej%&dej%j'dddej%j'dddG dd dZ(eej%&dej%j'dddej%j'dddG dd dZ)dS )    N)assert_allclose)array_api_compatible)xp_assert_closexp_assert_equal)array_namespacexp_sizexp_ravelxp_copyis_numpy)specialstats)quad_vecnsumtanhsinh)_pair_cache)_gen_harmonic_gt1c                 C   s:   |d u rt | n|}dd|j d  || d  d  S )N            ?)r   piexpxxp r   a/home/air/shanriGPT/back/venv/lib/python3.10/site-packages/scipy/integrate/tests/test_tanhsinh.pynorm_pdf   s   &r   c                 C   s4   |d u rt | n|}dtd|j  | d d  S )Ng      r   )r   mathlogr   r   r   r   r   norm_logpdf   s    r   c                 C   s   dd }|S )Nc                    s    fdd}|S )Nc                     sT   | d j }dd | D } g }tt|D ]  fdd| D }||  q|S )Nr   c                 S   s   g | ]}t |qS r   )r   .0	arg_arrayr   r   r   
<listcomp>"       zB_vectorize.<locals>.decorator.<locals>.wrapped.<locals>.<listcomp>c                    s   g | ]}|  qS r   r   r    ir   r   r#   %   r$   )shaperanger   prodappend)
arg_arraysr'   resarg_scalarsfr%   r   wrapped    s   
z._vectorize.<locals>.decorator.<locals>.wrappedr   )r/   r0   r   r.   r   	decorator   s   	z_vectorize.<locals>.decoratorr   )r   r1   r   r   r   
_vectorize   s   r2   skip_xp_backendsarray_api_strictz)Currently uses fancy indexing assignment.reasonz	jax.numpyz*JAX arrays do not support item assignment.c                   @   s  e Zd Zdd Zde_de_dd Zejd de	d  d e_de_d	d
 Z
eejd d d e
_ejd e
_dd Zdejd  d e_de_dd Zde_de_dd Zejd e_de_dd Zdeej ed ed e_de_dd Zde_de_dd Zej e	d d e_ejd e_dd Zejed d e_ejd e_dd Zejd e_eje_d d! Zeeje_eje_d"d# Zeejd e_eje_d$d% Zd&e_eje_d'd( Zejd e_eje_dsd+d,Zd-d. Zej d/d0e!jfd&ge!j d0fd&ge!j e!jfd1ge!je!j fd2gd3e"j#$d2e"j#$d1 ggd4d5 Z%ejj&d6d7d8ej d9e'dd:d;d< Z(ejj&d6d=d8ej d>d&d?d@gfej dAe"j)j*dBdC Z+ej dDe, dEdFdGgdHdI Z-dJdK Z.dLdM Z/dNdO Z0dPdQ Z1dRdS Z2ejj&dTdUdVej dWdXdYgdZd[ Z3d\d] Z4ej d^e'dd_d` Z5dadb Z6ej dcdde!j d0gdedegffej dfdgdhdi Z7djdk Z8dldm Z9dndo Z:ejj&d6dpdqdr Z;d*S )tTestTanhSinhc                 C   s   |t d|  S Nr   npr   selftr   r   r   f19      zTestTanhSinh.f1      ?r   c                 C   s   |d t | S Nr   )r:   arctanr;   r   r   r   f2?   r?   zTestTanhSinh.f2r      c                 C      t |t | S Nr:   r   cosr;   r   r   r   f3E      zTestTanhSinh.f3c                 C   s,   t d|d  }t |d|d  |  S )Nr   r   )r:   sqrtrB   )r<   r=   ar   r   r   f4K   s   zTestTanhSinh.f4   `   c                 C   rE   rF   )r:   rK   r   r;   r   r   r   f5R   rJ   zTestTanhSinh.f5gqqܿc                 C   s   t d|d  S Nr   r   r:   rK   r;   r   r   r   f6X   r?   zTestTanhSinh.f6   c                 C   s   t |t d|d   S rQ   rR   r;   r   r   r   f7^   s   zTestTanhSinh.f7g      ?c                 C   s   t |d S rA   r9   r;   r   r   r   f8d      zTestTanhSinh.f8c                 C      t t |S rF   )r:   r   rH   r;   r   r   r   f9j      zTestTanhSinh.f9c                 C   rX   rF   )r:   rK   tanr;   r   r   r   f10p   rZ   zTestTanhSinh.f10c                 C   s   dd|d   S rQ   r   r;   r   r   r   f11v   rZ   zTestTanhSinh.f11c                 C   s   t | t | S rF   )r:   r   rK   r;   r   r   r   f12|      zTestTanhSinh.f12c                 C   s   t |d  d S rA   )r:   r   r;   r   r   r   f13   rJ   zTestTanhSinh.f13c                 C   s   t | t | S rF   rG   r;   r   r   r   f14   r_   zTestTanhSinh.f14r   c                 C   s   t || S rF   )r:   sinr;   r   r   r   f15   rW   zTestTanhSinh.f15FNc                 C   sd   |d u r	t ||n|}t|| }|s|S tjdd ||W  d    S 1 s+w   Y  d S )Nignoredivide)r   absr:   errstatelog10)r<   r,   refr   r   errr   r   r   error   s   $zTestTanhSinh.errorc                 C   s  | j }|d}||j}d}tjt|d td|| W d    n1 s(w   Y  d}tjt|d t|||dd W d    n1 sIw   Y  d}tjt|d t||d	| W d    n1 skw   Y  tjt|d t|||d
d W d    n1 sw   Y  tjt|d t|||td W d    n1 sw   Y  d}tjt|d t|||dd W d    n1 sw   Y  tjt|d t||||jd W d    n1 sw   Y  d}tjt|d t||||jdd W d    n	1 sw   Y  tjt|d t||||jdd W d    n	1 s0w   Y  d}tjt|d t|||t d W d    n	1 sSw   Y  tjt|d t|||dd W d    n	1 ssw   Y  d}tjt|d t|||dd W d    n	1 sw   Y  tjt|d t|||dd W d    n	1 sw   Y  d}tjt|d t|||dd W d    n	1 sw   Y  d}tjt|d t|||dd W d    d S 1 sw   Y  d S )Nr   `f` must be callable.match*   ...must be True or False.r   r   ...must be real numbers.      ?      ?ekkiatolrtol#...must be non-negative and finite. ...may not be positive infinity.T)ry   r   )rw   r   z...must be integers.maxlevelzmigratory coconut)minlevelz...must be non-negative.preserve_shapez...must be callable.
elderberrycallback)	r>   asarraybpytestraises
ValueError	_tanhsinhinfobject)r<   r   r/   zerof_bmessager   r   r   test_input_validation   sr   
$z"TestTanhSinh.test_input_validationzlimits, refr         ?      )r   r{   c                    s    fdd|D }  t|d j} j ||d}ttg|R  }t|j| ttg|R ddi}t |j|dd t	| }|dkrP|
|jjd	sZJ |
|jjd
sZJ t |j|jddd d S )Nc                    s   g | ]}  |qS r   r   )r!   limitr   r   r   r#          z9TestTanhSinh.test_integral_transforms.<locals>.<listcomp>r   dtyper   TF)check_dtypereal floatingzcomplex floating缉ؗҜ<)rw   r   )r   floatr   r   r   r   integralr   r   r   isdtyperl   )r<   limitsrj   r   r   r,   logresxp_testr   r   r   test_integral_transforms   s   
z%TestTanhSinh.test_integral_transformsTz!Cumbersome to convert everything.np_onlyr6   f_number   c                 C   s   t | d| }d}t|d|j|d}t|j|j|d |dvr4t| |j|j|j }||jk s4J |dv r:d S |js?J |j	dksFJ d S )Nr/   g:0yU>r   rx   >      >      
   rD   )
getattrr   r   r   r   rj   rg   rl   successstatus)r<   r   r   r/   ry   r,   
true_errorr   r   r   
test_basic   s   
zTestTanhSinh.test_basicz#Distributions aren't xp-compatible.rj   g?g333333?casec           	      C   sv   |\}}|dv rt d |dv rttddst d tt|| }||}t|j	g|R  }t
|j| d S )N>   kstwodgammalaplacedweibullz0tanh-sinh is not great for non-smooth integrands>   levy_stablestudentized_rangeSCIPY_XSLOWr   z%This case passes, but it is too slow.)r   skipintosgetenvr   r   intervalr   pdfr   r   )	r<   rj   r   r   distnameparamsdistr   r,   r   r   r   test_accuracy  s   


zTestTanhSinh.test_accuracyr'   rD      rT   r   r   r   c                    s  t jd}|||}|||}|||}t|fddd_d_t|dd }t	|||fd}||||}	t
|}
g d}|D ]& |
 fd	d
|	D }tt| }t||dd t| j|kswJ qQ|
|jjdsJ |
|jjdsJ |
|jjdsJ |
|jjdsJ ||jjksJ ||jdksJ ||jjksJ d S )N   F*BG c                    sD     j d7  _   jt| ks| jdkrdn| jd 7  _| | S Nr   r{   )ncallfevalr   ndimr'   r   pr/   nr   r   r/      s   .z*TestTanhSinh.test_vectorization.<locals>.fr   c                    s   t  fdd| |S )Nc                    s   |   S rF   r   r   r   r   r   <lambda>)  s    zKTestTanhSinh.test_vectorization.<locals>._tanhsinh_single.<locals>.<lambda>)r   )rL   r   r   r   r   r   _tanhsinh_single'  s   z9TestTanhSinh.test_vectorization.<locals>._tanhsinh_singleargsr   rl   r   r   nfevr~   c                    s   g | ]}t | qS r   )r   r!   rj   )attrr   r   r#   1  r   z3TestTanhSinh.test_vectorization.<locals>.<listcomp>V瞯<rx   boolr   r   )r:   randomdefault_rngr   r   r)   r   r   r2   r   r   stackr   r   r   r'   r   r   r   r   r   r~   max)r<   r'   r   rngrL   r   r   r   r,   refsr   attrsref_attrres_attrr   )r   r/   r   r   test_vectorization  s4   

zTestTanhSinh.test_vectorizationc                    s    fdd d _ jdjdf}jgd }j gd }t ||d|d}jg djd}t|j| d S )	Nc                    s~     j d7  _ fddfddfddg}g }tt|D ]}| |df }tt|| }||| | q |S )Nr   c                         | d  S rA   r   r   r   r   r   r   D  s    z4TestTanhSinh.test_flags.<locals>.f.<locals>.<lambda>c                    s
     | S rF   r   r   r   r   r   r   E     
 c                    s     |  jS rF   )	full_likenanr   r   r   r   r   F      .)nitr(   r   r   r   r*   r   )xsjsfuncsr,   r&   r   jr/   r   r   r   r/   B  s   



z"TestTanhSinh.test_flags.<locals>.fr   r   r   rN   )r~   r   r   )	r   arangeint64r   r   r   int32r   r   )r<   r   r   rL   r   r,   	ref_flagsr   r   r   
test_flags?  s   zTestTanhSinh.test_flagsc                    sh    fdd}   jgd }   j gd }t|||ddd} j g d jd}t|j| d S )	Nc                    s<     | d d    | d  | d  jg} |S )Nr   r   r   )r   r   r   r   )r   r,   r   r   r   r/   X  s
   
z1TestTanhSinh.test_flags_preserve_shape.<locals>.fr   rN   T)r~   r   r   r   )r   r   r   r   r   r   )r<   r   r/   rL   r   r,   r   r   r   r   test_flags_preserve_shapeV  s   z&TestTanhSinh.test_flags_preserve_shapec                    sl   dd  t  fdddd}t fdddddd	}d
j}t|jj|d |d d S )Nc                 S   sD   | | | |d|  g| |d|  | |d|   ggS )Nr      d   )r   rb   rH   r   r   r   r   r/   f  s   $z+TestTanhSinh.test_preserve_shape.<locals>.fc                    s
    | t S rF   )r:   r   r.   r   r   r   j  r   z2TestTanhSinh.test_preserve_shape.<locals>.<lambda>r   r   c                    s
    | S rF   r   r   r   r   r   r   k  r   Tr           r   )r   r   r   r   r   r   )r<   r   rj   r,   r   r   r   r   test_preserve_shaped  s   z TestTanhSinh.test_preserve_shapec                    s    j } fdd} jd|d} jd|d jd|d}}d}tdD ]#}t|||d|d	}	| j|	j|d
 d}
|
|d k sF|
dk sFJ |
}q%d S )Nc                    s   |   d|   S r8   rr   )r=   r   r   r   r/   s  r?   z(TestTanhSinh.test_convergence.<locals>.fr@   r   r   r   r   rT   r   r~   Tr   r   r   g      /)float64r   r(   r   rl   r   )r<   r   r   r/   rj   rL   r   last_logerrr&   r,   logerrr   r   r   test_convergencep  s   zTestTanhSinh.test_convergencec                    s  t d fdd jtjd dtd  d jd _d} j| }jdjd}jdjd}d	\ _ _t	 ||}| 
|j j|j
  k rY|k s\J  J |j jksdJ  j|_|jsmJ |jd
kstJ d	\ _ _t|j}t	 |||d} j|_||ksJ d	\ _ _|d8 }|dksJ t	 |||d}| 
|j j|j
  k r|ksJ  J |j j  kr|jk sJ  J  j|jd ksJ |jrJ |jtjksJ |} j|_d	\ _ _tt|j
tj}	t	 ||d
|	d}|j|jksJ |j
|j
ksJ |j j  kr'|jks*J  J  j|jks3J |js9J |jd
ksAJ d	\ _ _tt|j
tj }	t	 ||d
|	d}| 
|j j|j
  k ro|	k srJ  J |j j  kr|jksJ  J  j|jksJ |jsJ |jd
ksJ d	\ _ _tt|j
|j tj}
t	 |||
d}|j|jksJ |j
|j
ksJ |j j  kr|jksJ  J  j|jksJ |jsJ |jd
ksJ d	\ _ _tt|j
|j tj }
t	 |||
d}| 
|j j j |j
|j   k r)|
k s,J  J |j j  kr<|jks?J  J  j|jksHJ |jsNJ |jd
ksVJ d S )Nr   c                    s8     j d7  _   jt| 7  _| d |  S rQ   )callsr   r   r   atanr   r/   r   r   r   r   r/     s   z:TestTanhSinh.test_options_and_result_attributes.<locals>.fr   rD   r   -q=r   )r   r   r   r}   r   ry   rw   rx   )r   r   r   r   r   r   rj   r   r  r   rl   r   r   r   r   r   r~   eim	_ECONVERRr:   	nextafterr   r   )r<   r   default_rtoldefault_atolrL   r   rj   r~   r,   rw   ry   r   r  r   "test_options_and_result_attributes  s   *
*

*"
&.&&:&z/TestTanhSinh.test_options_and_result_attributestorchzAhttps://github.com/scipy/scipy/pull/21149#issuecomment-2330477359r5   ry   g-C6?g+=c           
         sz  t ddd} jd jd} jd jd}tt||dt|d}tt|||d	}t 	|j
|j
fi | t 	|j|jfi | |j|jksNJ d
d } fdd}	 j j  jd} j j jd}t|	||dd}t|||}tjdd, t 	|j
|j
fi |ddi t 	|j|jfi |ddi W d    n1 sw   Y  |j|jksJ d S )NgC]r2<r   )rw   ry   r   r   g       @T)r   ry   rx   c                 S   s   t |  t|  S rF   )r   r   r   r   r   r   r/     r?   z TestTanhSinh.test_log.<locals>.fc                    s$     t| d t|   jd  S )Ny                              ?)r   r   r   r   r   r   r   logf	  s   $z#TestTanhSinh.test_log.<locals>.logfrr   rd   allr   F)dictr   r   r   r   r   r   r   r   r   r   rl   r   r   r:   rh   )
r<   ry   r   	test_tolsrL   r   r,   rj   r/   r  r   r   r   test_log  s.   
zTestTanhSinh.test_logc                    s    fdd}  d   jd }}t|||}tdd dtdd  d  }t|j  | dd }   j   j }}t|||}t|j  d	 d S )
Nc                    s     d|  S Nr  r   r   r   r   r   r/     rW   z$TestTanhSinh.test_complex.<locals>.fr   rT   r   r   r  c                 S   s   t | dt | d   S )N              ?r   )r   r   r   r   r   r/   &  s   y            )r   r   r   r   rK   r   r   r   r<   r   r/   rL   r   r,   rj   r   r   r   test_complex  s   $zTestTanhSinh.test_complexr~   c           
         sZ  t d fdd ddg  _ _ _jdjd}jdjd}t ||d|d} j}td|d D ]g}ddg  _ _ _t	||d}t ||fi |}	t
|	j|jdd	 t
|	j|jd|j d
 |	j j  kr jjd ksJ  J  j|| d d ksJ |	j|jksJ t| j qCd S )Nr   c                    sN     j d7  _   jt| 7  _ jt| f _| d |  S rQ   )r  r   r   r   concatr   r   r  r   r  r   r   r/   6  s   z%TestTanhSinh.test_minlevel.<locals>.fr   r   r   r   gؗҼ<rx   rv   )r   r   r   r  r   r   r   sortr(   r  r   r   rl   r   r'   r   r   )
r<   r~   r   rL   r   rj   ref_xr   optionsr,   r   r  r   test_minlevel-  s$   (zTestTanhSinh.test_minlevelc              	      s    fdd}   j d j  jd j dg}   j jd j dd jg}ttj}  ||d |d | |||g}t|||}t|j| d S )Nc                    s     j |  | <  | d  S rA   )r   isinfr   r   r   r   r   r/   R  s   z/TestTanhSinh.test_improper_integrals.<locals>.fr   i   r   )r   r   r   rK   r   r   r   r   )r<   r   r/   rL   r   rj   r,   r   r   r   test_improper_integralsP  s   &""z$TestTanhSinh.test_improper_integralsr   r   r   r   r   )float32r   c           	         s   t   j| d\}} fdd} jkrdnd}t||||d}|jj ks.J |jj ks6J |js>J t	|j
|
|  d S )Nr   c                    s   | j  ksJ | S rF   )r   r   r   r   r   r   r   r/   c  s   
z"TestTanhSinh.test_dtype.<locals>.fr  h㈵>rx   )r   r   r   r   r   r   rl   r  r   r   r   )	r<   r   r   r   rL   r   r/   ry   r,   r   r$  r   
test_dtype\  s   
 zTestTanhSinh.test_dtypec                    s   j  j}}fdd}d\}}|| d t||dd}t|||fi |}|jr4J |j|ks;J  fdd d	 _d  _|d
= t|||fi |d i}	| D ],}
|
dkrt||
 dkskJ |	|
 dkssJ q]|	|
  j|
   kr||
 ksJ  J q]d S )Nc                         |  |  S rF   r   r   r   r   r   r/   q  rZ   z-TestTanhSinh.test_maxiter_callback.<locals>.f)r   r   r   r   )r   r~   ry   c                    sB     j d7  _ |  _t| dsJ | jdksJ  j krtd S )Nr   r   )iterr,   hasattrr   StopIterationr,   )r   maxiterr   r   r   {  s   
z4TestTanhSinh.test_maxiter_callback.<locals>.callbackr{   r~   r   r   r   )	r   r   r  r   r   r~   r(  r,   keys)r<   r   rL   r   r/   r   r~   kwargsr,   res2keyr   )r   r,  r   r   test_maxiter_callbackn  s&   
,z"TestTanhSinh.test_maxiter_callbackc                    s   j j jd}j jjd}fdd} fdd g  _g  _d}t|||d| d t|d	 D ]&}t|||||d
}t jd	|  |jdd t jd	|  |j	ddd q7d S )Nr   c                    r'  rF   r   r   r   r   r   r/     rZ   z&TestTanhSinh.test_jumpstart.<locals>.fc                    s0    j t| jd   jt| jd  d S )Nr   )	integralsr*   r	   r   errorsrl   r+  r   r   r   r     s   z-TestTanhSinh.test_jumpstart.<locals>.callbackrT   r   )r   r~   r   r   r   r   rx   r   r  )
r   r   r   r3  r4  r   r(   r   r   rl   )r<   r   rL   r   r/   r~   r&   r,   r   )r   r   r   test_jumpstart  s   zTestTanhSinh.test_jumpstartc           
         s    d  d}}t||fdd}t|||}|js!J t|j  d t|||dd}|jdks9J t|j   j t|||dd}|jdksRJ t|j   j t|||}|jsgJ |j	dksnJ t|j  d d	d }t|||d
d}t|j  d    jdddg}  d jddg}  dd jdg}t||||fd}t|j   j j jdg t|jd d  
d j t|j j g d jd t|j  g d t|jd d  j
dd jd  dt_ dt_dgt_d t_  d  d}}t fdd||}t|j  d tdd ||}t|j  d d}tdd   d |}g d}|D ]}	||	 j|ks`J qTd S )Nr   r   c                    s     | jds	J | S )Nr   )r   r   r   )r   r   r   r/     s   z*TestTanhSinh.test_special_cases.<locals>.fr   r}   r{   r   c                 S   s   | | S rF   r   r   cr   r   r   r/           r   g?r   r   )r   r   r   r   r   FFFTc                    s     | d S r  r   r   r   r   r   r     r   z1TestTanhSinh.test_special_cases.<locals>.<lambda>r  c                 S      | S rF   r   r   r   r   r   r         r"  c                 S   r<  rF   r   r   r   r   r   r     r=  r   )r   r   r   r   r   r   r   rl   r   r~   fullr   r   r   emptyr   xjcwjindicesh0zerosr'   )
r<   r   rL   r   r/   r,   r7  r'   r   r   r   )r   r   r   test_special_cases  sV   


 "zTestTanhSinh.test_special_cases)r   c                 C   s&   t dd}d|d< tt jd| d S )NA   r     r{   r   )r:   r>  r   rb   )r<   r   r   r   r   r   #test_compress_nodes_weights_gh21496  s   z0TestTanhSinh.test_compress_nodes_weights_gh21496)FN)<__name__
__module____qualname__r>   rj   r   rC   r:   r   r   rI   r   rM   rP   rS   rU   rK   r   gammarV   rY   r\   r]   r   r^   r`   ra   rc   rl   r   r   markparametrizer   r   normcdfr   r3   r(   r   _distr_paramsdistcontr   tupler   r   r   r   r  r  r  r  r  r!  r&  r2  r5  rE  rH  r   r   r   r   r7   .   s    &

:

(u"
" "Cr7   zNo fancy indexing.zNo mutation.c                   @   s  e Zd ZejdZejdddd Z	dd Z
ejd d e
_de
_eje
_e e
_d	d
 Zee	de_de_eje_e	fe_dd Zde_ejdddde_eeje	e_e	fe_dd Zejdedddd Zejdg ddd Zejde dddgdd  Zd!d" Z d#d$ Z!d%d& Z"ejd'd(d)gd*d+ Z#d,d- Z$d.d/ Z%ejd0d1d2gd3d4 Z&ejd5d6d7gd8d9 Z'ejj(d(d:d;d<d= Z)d>S )?TestNSuml   Q [ r   r   sizec                 C   s   |d S Nr   r   )r<   kr   r   r   r>     s   zTestNSum.f1r      c                 C      d||  S r8   r   r<   rX  r   r   r   r   rC        zTestNSum.f2r   c                 C   rZ  r8   r   r[  r   r   r   rI     r\  zTestNSum.f3rN   r   )r   r   c                 C   s  | j }||j||j}}d}tjt|d td|| W d    n1 s*w   Y  d}tjt|d t|||dd W d    n1 sKw   Y  d}tjt|d t||d| W d    n1 smw   Y  tjt|d t|||d W d    n1 sw   Y  tjt|d t||||dd	 W d    n1 sw   Y  tjt|d t|||td
dd W d    n1 sw   Y  tjt|d t|||ttdd W d    n1 sw   Y  t	j
dd t||t	jt	jg|d}||jdk||j@ ||j@ |j @ |j@ dks/J t||d|t	jdg}||jdk||j@ ||j@ |j @ |j@ dks^J t||d|d||j|j |jddgd	}||jdk||j@ ||j@ |j @ |j@ dksJ W d    n	1 sw   Y  d}tjt|d t|||tddd W d    n	1 sw   Y  tjt|d t|||tt	jdd W d    n	1 sw   Y  d}tjt|d t|||tt	jddd W d    n	1 sw   Y  tjt|d t|||tt	jddd W d    n	1 s8w   Y  d}tjt|d t|||dd W d    n	1 sZw   Y  tjt|d t|||dd W d    d S 1 s{w   Y  d S )Nrm   rn   rp   rq   r   rr   rs   rt   )stepru   rv   
tolerancesrx   rd   r  r   r{   r   g      $@r   rz   r|   T)r_  r   z"...must be a non-negative integer.g      @maxtermsr   )r>   r   rL   r   r   r   r   r   r  r:   rh   r   r   r  r   isnansumrl   r   r   )r<   r   r/   rL   r   r   r,   r   r   r   r     s    


$zTestNSum.test_input_validationr   rT   c                    sJ   dj}t| d|    j  j}}tfdd jD }j  j|d}t |||d}t	|j
| t|jj|jjd t|}	t|jj|j|	jd tjdd t fd	d
||d|d}
W d    n1 szw   Y  t	|
j
|j
 t	|
j|jdd t|
j|j t|
j|j d S )Nr   r/   c                 3   s    | ]}  |V  qd S rF   r   )r!   argr   r   r   	<genexpr>R  s    z&TestNSum.test_basic.<locals>.<genexpr>r   r   rd   re   c                     s     |  S rF   rr   r   r   r   r   r   [  r   z%TestNSum.test_basic.<locals>.<lambda>T)r   r   r   rv   )r   r   r   rL   r   rS  r   rj   r   r   rc  r   r   rD  r'   r   r   r   onesr   r:   rh   r   rl   )r<   r   r   r   rL   r   r   rj   r,   r   r   r   r   r   r   M  s&   zTestNSum.test_basicra  )r   r   r   r   r   c              
      s  | j } fdd}dd } jddg jdd d  jf } jdd	 jg jdd d  j jf } jg d
 jdd} || | }	|}
||	|  }|||  } j|| ||  ddd}|||| | }|| || }|| || }|| d }|| d }t	|}|
|||\}}}t|jD ]@}t|| t|| t|| }}}|| | d |kr | j||| | jd}|||< | |jj ||< qd}t|||
||t|dd}t|j|d| d t|j|d	| d |
| | d |k}t|j| || dd t|j| || dd t|||
|dtt|d|d}t |j|j t |j|j d S )Nc                    s   d  |  S rW  rr   r   r   r   r   r  g  rW   z$TestNSum.test_integral.<locals>.logfc                 S   s   d|  S )Nr{   r   r   r   r   r   Fj  r8  z!TestNSum.test_integral.<locals>.Fr   rN   r   r   r   )r   r   r   )r{   r   r   r   r{   T)axiskeepdimsr   r  rx   )r]  ra  r_  r   r   )r]  r   r_  ra  )r>   r   r   newaxisr   reshapefloorrc  r   r   broadcast_arraysr:   ndindexr'   r   finfor   epsr   r  r   rl   r   r   r   )r<   ra  r   r/   r  rg  rL   r   r]  nsteps
b_originalrX  directr   lowhighref_sumref_errr   r&   aibistepiry   r,   r   r   r   r   test_integralb  sN   "*"("zTestNSum.test_integralr'   r   r   r   c                    s`  t jd}|jdd|d}t j}||d }t|fddd_t jdd	 }t	
|
|d

|fd}||||d
d }	g d}
|
D ]$  fdd|	D }t| }tt|
|dd |j|ksuJ qQt
d}||jjdsJ ||jjdsJ ||jjdsJ trt|jjksJ d S d S )Nr   r   r   rU  c                    s8     j | jks| jdkrdn| jd 7  _ d| |  S r   )r   rV  r   r'   r   r   r   r   r/     s   ,z&TestNSum.test_vectorization.<locals>.fr   c                    s   t  fdd| ||dS )Nc                    s   d|    S r8   r   r   r   r   r   r         zBTestNSum.test_vectorization.<locals>.nsum_single.<locals>.<lambda>r`  )r   )rL   r   r   ra  r   r   r   nsum_single  s   z0TestNSum.test_vectorization.<locals>.nsum_singlerG  )ra  r   r`  )rc  rl   r   r   r   c                    s   g | ]
} t| qS r   )r   r   r   )r   r   r   r   r#     s    z/TestNSum.test_vectorization.<locals>.<listcomp>r   rx   r   r   r   )r:   r   r   integersr   r   r)   r   	vectorizer   r   ravelr   r   r   r'   r   r   r   r   r   r   r
   r   r   )r<   r'   r   r   rL   r   r   r}  r,   r   r   r   r   r   r   )r   r/   r   r   r   r     s6   



zTestNSum.test_vectorizationc           
      C   s  | j }g d}|jdddddtjg|jd}|jdtjtjtjtjtjg|jd}t|d}|j||jd}tjdd t	||||fd}W d    n1 sQw   Y  |g d	}|jg d
|j
d}	t|j| t|j|	 t|j|j |||j  d S )N)r   r   g?g?r   r   r   r   r   r   rd   re   r   )FFFFTF)r   r   r   r-  r   r{   )rC   r   r:   r   r   r   r   zetarh   r   r   r   r   r   r   rc  )
r<   r   r/   r   rL   r   rj   r,   ref_success
ref_statusr   r   r   test_status  s   &"zTestNSum.test_statusc                    sx    fdd d _ t |d|d}|j  j ksJ d _ t |d||jtddd}|j  j ks:J d S )	Nc                    s     j t| 7  _ d| d  S rQ   )r   r   r   r.   r   r   r/     s   zTestNSum.test_nfev.<locals>.fr   r   r   ư>rv   r^  )r   r   r   r   r  )r<   r   r,   r   r.   r   	test_nfev  s   $zTestNSum.test_nfevc                 C   s   | ddg}| |j}tdd ||dtddd}td	d ||}||j|j|j ks1J ||j|j|j k s?J d S )
Nr   rT   c                 S      d| d  S rQ   r   rX  r   r   r   r     r|  z)TestNSum.test_inclusive.<locals>.<lambda>i  g?rv   )ra  r_  c                 S   r  rQ   r   r  r   r   r   r     r|  )r   r   r   r  r  rc  rl   )r<   r   rL   r   r,   rj   r   r   r   test_inclusive  s   
 zTestNSum.test_inclusiver   TFc                    sZ   dtj tj g} tjdtjg} g d} fdd}t||||f d} tjddtjdddg} rG|n|} rU|jj	krSd	nd
nd}	t
|jj ||jd|	d  fdd} dtj g} tjdg} ddg}
t||||
f d} rttdntd}t
|jj|j||jd d S )Nr   r{   )r   r   r   c                    sJ    r |d ||   S |d | |   S rA   )r   tanhrg   r   )r   rL   r   r   r   r/     s   &"z(TestNSum.test_infinite_bounds.<locals>.f)r   r   r   r   g|=r%  r   rv   c                    s&    rd ||   S d||  d  S )Nr   r   r   rr   r6  r   r   r   r/     s   &r   )r   r:   r   r   r   dlaplacesfr   r   r   r   rc  r   r  r>  r'   )r<   r   r   rL   r   r7  r/   r,   rj   rw   rd  r   r   r   test_infinite_bounds  s    $ zTestNSum.test_infinite_boundsc                    s`    fdd} j d jd j tj jd}}t|||} j d jd}t|j|dd d S )Nc                    r   rA   r   r   r   r   r   r/     rZ   z)TestNSum.test_decreasing_check.<locals>.fir   gtfԸ\?r   rx   )r   r   r:   r   r   r   rc  r  r   r   r   test_decreasing_check  s
   $zTestNSum.test_decreasing_checkc                 C   st  | j }|d }}t|||}t|j||d t| j|d|tj|dd}t|j|| j j	 |
d}|
d}|
d}t|j|j|j}t| j|||fd}|jj|ksdJ |jj|kslJ |jj|kstJ dd }t||d	|d
d	d}||jsJ ||jsJ |jdksJ t||d	|d
dd}||jsJ ||jsJ |jdksJ ||jdddg}||j|j|j|jg}|dd|jdg}t| j|||fd}t|j||j|j|j| j j	g t|jd d |d|j t|j|jg d|jd t|j|g d t|jd d |jdd|jd d S )Nr   r   r   )r   r   r   )r   r   rT   c                 S   s8   t jdd d|  W  d    S 1 sw   Y  d S )Nrd   re   r   )r:   rh   r   r   r   r   r/   0  s   $z%TestNSum.test_special_case.<locals>.fr   r   r`  r   r   r   r:  )r{   r{   r   r   r   r;  )r   )r>   r   r   r   rc  rC   r:   r   r   rj   r?  broadcast_shapesr'   r   r   rb  rl   r   r>  r   r   )r<   r   r/   rL   r   r,   r   r'   r   r   r   test_special_case  s@   &


$&zTestNSum.test_special_caser   r#  r   c           	         s   t    fdd}jd d}jdjg d}t|||}|jj ks+J |jj ks3J  jkr:dnd}tt	djgd}t
|jj| d|d	 d S )
Nc                    s$   | j  ksJ d| jd d  S )Nr   r   r   )r   r   r  r$  r   r   r/   O  s   zTestNSum.test_dtype.<locals>.fr   r   r   r  r  r   rx   )r   r   r   r   rc  r   rl   r   r   r:   r   )	r<   r   r   r/   rL   r   r,   ry   rj   r   r$  r   r&  K  s   
zTestNSum.test_dtyper   )r   r   )r   r   c                 C   s  |\}}dd }t j}d}|||  }t dd}	||	t |  }
t |
| | }tt|dks5J |j||jd|j|
|jd}}
|j||jd|j||jd}}t	|||
||d}t
||d	k||jd	k t|jd
 |jd	 ||  d S )Nc                 S   r  rQ   r   r  r   r   r   r/   d  r\  z.TestNSum.test_nondivisible_interval.<locals>.fgUUUUUU?r   r   r   r   )r]  ra  r   r{   )r:   er   spacingrl  lensetr   r   r   r   diffrc  r   )r<   r   r   r   ra  r/   rL   r]  b0r&   r   nsr,   r   r   r   test_nondivisible_interval]  s   "" "z#TestNSum.test_nondivisible_intervalzNeeds beta function.r   c                 C   st   t jdd}dd }tjdd t|tjsJ W d    n1 s&w   Y  t|dtj}t|j	| d S )NrT   rN   c                 S   s   t j| d| d  S )NrN   rT   )r   	yulesimon_pmfr   r   r   r   r/   z  r_   z0TestNSum.test_logser_kurtosis_gh20648.<locals>.frd   )invalidr   )
r   r  momentr:   rh   rb  r   r   r   rc  )r<   r   rj   r/   r,   r   r   r   test_logser_kurtosis_gh20648u  s   z%TestNSum.test_logser_kurtosis_gh20648N)*rI  rJ  rK  r:   r   r   r   uniformtolistr   r>   r   rj   rL   r   r   rS  r   rC   r   r  rI   r~  r   r   r   rM  rN  r(   r   r{  r   r  r  r  r  r  r  r&  r  r3   r  r   r   r   r   rT    sL    6

3
(
1

rT  rF   )*r   r   r   numpyr:   numpy.testingr   scipy.conftestr   (scipy._lib._elementwise_iterative_method_lib_elementwise_iterative_methodr  scipy._lib._array_api_no_0dr   r   scipy._lib._array_apir   r   r   r	   r
   scipyr   r   scipy.integrater   r   r   r   scipy.integrate._tanhsinhr   scipy.stats._discrete_distnsr   r   r   r2   rM  usefixturesr3   r7   rT  r   r   r   r   <module>   sF   


     D
