o
    i                      @   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   ]/home/kim/smarthome/.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   .0Z	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)Z
arg_arraysr&   resZarg_scalarsfr$   r   wrapped    s   
z._vectorize.<locals>.decorator.<locals>.wrappedr   )r,   r-   r   r+   r   	decorator   s   	z_vectorize.<locals>.decoratorr   )r   r.   r   r   r   
_vectorize   s   r/   skip_xp_backendsZ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_dud+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;dsdt Z<d*S )vTestTanhSinhc                 C   s   |t d|  S Nr   npr   selftr   r   r   f19      zTestTanhSinh.f1      ?r   c                 C   s   |d t | S Nr   )r6   arctanr7   r   r   r   f2?   r;   zTestTanhSinh.f2r      c                 C      t |t | S Nr6   r   cosr7   r   r   r   f3E      zTestTanhSinh.f3c                 C   s,   t d|d  }t |d|d  |  S )Nr   r   )r6   sqrtr>   )r8   r9   ar   r   r   f4K   s   zTestTanhSinh.f4   `   c                 C   rA   rB   )r6   rG   r   r7   r   r   r   f5R   rF   zTestTanhSinh.f5gqqܿc                 C   s   t d|d  S Nr   r   r6   rG   r7   r   r   r   f6X   r;   zTestTanhSinh.f6   c                 C   s   t |t d|d   S rM   rN   r7   r   r   r   f7^   s   zTestTanhSinh.f7g      ?c                 C   s   t |d S r=   r5   r7   r   r   r   f8d      zTestTanhSinh.f8c                 C      t t |S rB   )r6   r   rD   r7   r   r   r   f9j      zTestTanhSinh.f9c                 C   rT   rB   )r6   rG   tanr7   r   r   r   f10p   rV   zTestTanhSinh.f10c                 C   s   dd|d   S rM   r   r7   r   r   r   f11v   rV   zTestTanhSinh.f11c                 C   s   t | t | S rB   )r6   r   rG   r7   r   r   r   f12|      zTestTanhSinh.f12c                 C   s   t |d  d S r=   )r6   r   r7   r   r   r   f13   rF   zTestTanhSinh.f13c                 C   s   t | t | S rB   rC   r7   r   r   r   f14   r[   zTestTanhSinh.f14r   c                 C   s   t || S rB   )r6   sinr7   r   r   r   f15   rS   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   absr6   errstatelog10)r8   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)ru   r   )rs   r   z...must be integers.maxlevelzmigratory coconut)minlevelz...must be non-negative.preserve_shapez...must be callable.Z
elderberrycallback)	r:   asarraybpytestraises
ValueError	_tanhsinhinfobject)r8   r   r,   zeroZf_bmessager   r   r   test_input_validation   sr   
$z"TestTanhSinh.test_input_validationzlimits, refr         ?      )r   rw   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缉ؗҜ<)rs   r   )r   floatr   r   r   r   integralr   r   r   isdtyperh   )r8   limitsrf   r   r   r*   logresxp_testr   r   r   test_integral_transforms   s   
z%TestTanhSinh.test_integral_transformsTz!Cumbersome to convert everything.np_onlyr2   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   rt   >      >   
   r@      )
getattrr   r   r   r   rf   rc   rh   successstatus)r8   r   r   r,   ru   r*   Z
true_errorr   r   r   
test_basic   s   
zTestTanhSinh.test_basicz#Distributions aren't xp-compatible.rf   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>   ZdgammaZlaplaceZkstwoZdweibullz0tanh-sinh is not great for non-smooth integrands>   Zstudentized_rangeZlevy_stableZSCIPY_XSLOWr   z%This case passes, but it is too slow.)r   skipintosgetenvr   r   intervalr   Zpdfr   r   )	r8   rf   r   r   distnameparamsdistr   r*   r   r   r   test_accuracy  s   


zTestTanhSinh.test_accuracyr&   r@      rP   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   rw   )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 rB   r   r   r   r   r   <lambda>)  s    zKTestTanhSinh.test_vectorization.<locals>._tanhsinh_single.<locals>.<lambda>)r   )rH   r   r   r   r   r   _tanhsinh_single'  s   z9TestTanhSinh.test_vectorization.<locals>._tanhsinh_singleargsr   rh   r   r   nfevrz   c                    s   g | ]}t | qS r   )r   r!   rf   )attrr   r   r"   1  r   z3TestTanhSinh.test_vectorization.<locals>.<listcomp>V瞯<rt   boolr   r   )r6   randomdefault_rngr   r   r(   r   r   r/   r   r   stackr   r   r   r&   r   r   r   r   r   rz   max)r8   r&   r   rngrH   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 r=   r   r   r   r   r   r   D  s    z4TestTanhSinh.test_flags.<locals>.f.<locals>.<lambda>c                    s
     | S rB   r   r   r   r   r   r   E     
 c                    s     |  jS rB   )	full_likenanr   r   r   r   r   F      .)nitr'   r   r   r   r)   r   )Zxsjsfuncsr*   r%   r   jr,   r   r   r   r,   B  s   



z"TestTanhSinh.test_flags.<locals>.fr   r   r   rJ   )rz   r   r   )	r   arangeZint64r   r   r   int32r   r   )r8   r   r   rH   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   rJ   T)rz   r}   r   r   )r   r   r   r   r   r   )r8   r   r,   rH   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   r^   rD   r   r   r   r   r,   f  s   $z+TestTanhSinh.test_preserve_shape.<locals>.fc                    s
    | t S rB   )r6   r   r+   r   r   r   j  r   z2TestTanhSinh.test_preserve_shape.<locals>.<lambda>r   r   c                    s
    | S rB   r   r   r   r   r   r   k  r   Tr|           r   )r   r   r   r   r   r   )r8   r   rf   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 r4   rn   r9   r   r   r   r,   s  r;   z(TestTanhSinh.test_convergence.<locals>.fr<   r   r   r   r   rP   r{   rz   Tr   r   r   g      /)float64r   r'   r   rh   r   )r8   r   r   r,   rf   rH   r   Zlast_logerrr%   r*   Z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 rM   )callsr   r   r   atanr   r,   r   r   r   r   r,     s   z:TestTanhSinh.test_options_and_result_attributes.<locals>.fr   r@   r   -q=r   )r   r   r   ry   r   ru   rs   rt   )r   r   r   r   r   r   rf   r   r   r   rh   r   r   r   r   r   rz   eimZ	_ECONVERRr6   	nextafterr   r   )r8   r   Zdefault_rtolZdefault_atolrH   r   rf   rz   r*   rs   ru   r   r   r   "test_options_and_result_attributes  s   *
*

*"
&.&&:&z/TestTanhSinh.test_options_and_result_attributesZtorchzAhttps://github.com/scipy/scipy/pull/21149#issuecomment-2330477359r1   ru   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   )rs   ru   r   r   g       @T)r   ru   rt   c                 S   s   t |  t|  S rB   )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>.logfrn   r`   allr   F)dictr   r   r   r   r   r   r   r   r   r   rh   r   r   r6   rd   )
r8   ru   r   Z	test_tolsrH   r   r*   rf   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,     rS   z$TestTanhSinh.test_complex.<locals>.fr   rP   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   rG   r   r   r   r8   r   r,   rH   r   r*   rf   r   r   r   test_complex  s   $zTestTanhSinh.test_complexrz   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 rM   )r   r   r   r   concatr   r   r   r   r   r   r   r,   6  s   z%TestTanhSinh.test_minlevel.<locals>.fr   r   r   r   gؗҼ<rt   rr   )r   r   r   r   r   r   r   sortr'   r   r   r   rh   r   r&   r   r   )
r8   rz   r   rH   r   rf   Z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 r=   )r   isinfr   r   r   r   r   r,   R  s   z/TestTanhSinh.test_improper_integrals.<locals>.fr   i   r   )r   r   r   rG   r   r   r   r   )r8   r   r,   rH   r   rf   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 rB   )r   r   r   r   r   r   r   r,   c  s   
z"TestTanhSinh.test_dtype.<locals>.fr   h㈵>rt   )r   r   r   r   r   r   rh   r   r   r   r   )	r8   r   r   r   rH   r   r,   ru   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 rB   r   r   r   r   r   r,   q  rV   z-TestTanhSinh.test_maxiter_callback.<locals>.f)r   r   r   r   )r{   rz   ru   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>.callbackrw   rz   r   r   r   )	r   r   r   r   r   rz   r  r*   keys)r8   r   rH   r   r,   r{   rz   kwargsr*   Z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  rB   r   r   r   r   r   r,     rV   z&TestTanhSinh.test_jumpstart.<locals>.fc                    s0    j t| jd   jt| jd  d S )Nr   )	integralsr)   r	   r   errorsrh   r  r~   r   r   r     s   z-TestTanhSinh.test_jumpstart.<locals>.callbackrP   r   )r{   rz   r   r   r   r   rt   r   r   )
r   r   r   r  r  r   r'   r   r   rh   )r8   r   rH   r   r,   rz   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   ry   rw   r   c                 S   s   | | S rB   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 rB   r   r   r   r   r   r         r
  c                 S   r#  rB   r   r   r   r   r   r     r$  r   )r   r   r   r   r   r   r   rh   r   rz   fullr   r   r   emptyr   ZxjcZwjindicesZh0zerosr&   )
r8   r   rH   r   r,   r*   r  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     rw   r   )r6   r%  r   r^   )r8   r   r   r   r   r   #test_compress_nodes_weights_gh21496  s   z0TestTanhSinh.test_compress_nodes_weights_gh21496c                    sX   t dd t dd fdd}t|ddddd	d
}|js*J d S )Nr@   i'   c                    s     d|   |   S r4   )r^   r   rH   r   r   r   r   r,     s   z2TestTanhSinh.test_gh_22681_finite_error.<locals>.fr   r   r   r   )rs   ru   rz   )complexr   r   isfiniterh   )r8   r   r,   r*   r   r.  r   test_gh_22681_finite_error  s
   

 z'TestTanhSinh.test_gh_22681_finite_error)FN)=__name__
__module____qualname__r:   rf   r   r?   r6   r   r   rE   r   rI   rL   rO   rQ   rG   r   gammarR   rU   rX   rY   r   rZ   r\   r]   r_   rh   r   r   markparametrizer   r   ZnormZcdfr   r0   r'   r   Z_distr_paramsZdistcontr   tupler   r   r   r   r   r   r   r  r  r	  r  r  r  r)  r,  r1  r   r   r   r   r3   .   s    &

:

(u"
" "C
	r3   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   )r8   kr   r   r   r:     s   zTestNSum.f1r      c                 C      d||  S r4   r   r8   r=  r   r   r   r   r?        zTestNSum.f2r   c                 C   r?  r4   r   r@  r   r   r   rE     rA  zTestNSum.f3rJ   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 )Nri   rj   rl   rm   r   rn   ro   rp   )steprq   rr   
tolerancesrt   r`   r   r   rw   r   g      $@r   rv   rx   T)rD  r   z"...must be a non-negative integer.g      @maxtermsr   )r:   r   rH   r   r   r   r   r   r   r6   rd   r   r   r   r   isnansumrh   r   r   )r8   r   r,   rH   r   r   r*   r   r   r   r   !  s    


$zTestNSum.test_input_validationr   rP   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 rB   r   )r!   argr   r   r   	<genexpr>\  s    z&TestNSum.test_basic.<locals>.<genexpr>r   r   r`   ra   c                     s     |  S rB   rn   r   r   r   r   r   e  r   z%TestNSum.test_basic.<locals>.<lambda>T)r   r   r   rr   )r   r   r   rH   r   r8  r   rf   r   r   rH  r   r   r(  r&   r   r   r   Zonesr   r6   rd   r   rh   )r8   r   r   r   rH   r   r   rf   r*   r   r   r   r   r   r   W  s&   zTestNSum.test_basicrF  )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 r<  rn   r   r   r   r   r   q  rS   z$TestNSum.test_integral.<locals>.logfc                 S   s   d|  S )Nrw   r   r   r   r   r   Ft  r  z!TestNSum.test_integral.<locals>.Fr   rJ   r   r  r   )r   r   r   )rw   r   r   r   rw   T)ZaxisZkeepdimsr   r   rt   )rB  rF  rD  r   r   )rB  r   rD  rF  )r:   r   r   Znewaxisr   ZreshapefloorrH  r   r   Zbroadcast_arraysr6   Zndindexr&   r   Zfinfor   epsr   r   r   rh   r   r   r   )r8   rF  r   r,   r   rK  rH   r   rB  ZnstepsZ
b_originalr=  directr   lowhighZref_sumZref_errr   r%   ZaiZbiZstepiru   r*   r   r   r   r   test_integrall  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   r:  c                    s8     j | jks| jdkrdn| jd 7  _ d| |  S r   )r   r;  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 r4   r   r   r   r   r   r         zBTestNSum.test_vectorization.<locals>.nsum_single.<locals>.<lambda>rE  )r   )rH   r   r   rF  r   r   r   nsum_single  s   z0TestNSum.test_vectorization.<locals>.nsum_singler+  )rF  r   rE  )rH  rh   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   rt   r   r   r   )r6   r   r   integersr   r   r(   r   Z	vectorizer   r   Zravelr   r   r   r&   r   r   r   r   r   r   r
   r   r   )r8   r&   r   r   rH   r   r   rS  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   r`   ra   r   )FFFFTF)r   r   r   r  r   rw   )r?   r   r6   r   r   r   r   zetard   r   r   r   r   r   r   rH  )
r8   r   r,   r   rH   r   rf   r*   Zref_successZ
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 rM   )r   r   r   r+   r   r   r,     s   zTestNSum.test_nfev.<locals>.fr   r   r   ư>rr   rC  )r   r   r   r   r   )r8   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   rP   c                 S      d| d  S rM   r   r=  r   r   r   r     rR  z)TestNSum.test_inclusive.<locals>.<lambda>i  g?rr   )rF  rD  c                 S   rY  rM   r   rZ  r   r   r   r     rR  )r   r   r   r   r   rH  rh   )r8   r   rH   r   r*   rf   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   rw   )r   r   r   c                    sJ    r |d ||   S |d | |   S r=   )r   tanhrc   r   )r   rH   r   r   r   r,     s   &"z(TestNSum.test_infinite_bounds.<locals>.f)r   r   r   r   g|=r  r   rr   c                    s&    rd ||   S d||  d  S )Nr   r   r   rn   r  r   r   r   r,     s   &r   )r   r6   r   r   r   ZdlaplaceZsfr   r   r   r   rH  r   rU  r%  r&   )r8   r   r   rH   r   r  r,   r*   rf   rs   rI  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   r=   r   r   r   r   r   r,     rV   z)TestNSum.test_decreasing_check.<locals>.fir   gtfԸ\?r   rt   )r   r   r6   r   r   r   rH  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   rP   c                 S   s8   t jdd d|  W  d    S 1 sw   Y  d S )Nr`   ra   r   )r6   rd   r   r   r   r   r,   :  s   $z%TestNSum.test_special_case.<locals>.fr   r   rE  r   r   r   r!  )rw   rw   r   r   r   r"  )r   )r:   r   r   r   rH  r?   r6   r   r   rf   r&  Zbroadcast_shapesr&   r   r   rG  rh   r   r%  r   r   )r8   r   r,   rH   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   rZ  r  r   r   r,   Y  s   zTestNSum.test_dtype.<locals>.fr   r   r   r   rW  r   rt   )r   r   r   r   rH  r   rh   r   r   r6   r   )	r8   r   r   r,   rH   r   r*   ru   rf   r   r  r   r  U  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   rY  rM   r   rZ  r   r   r   r,   n  rA  z.TestNSum.test_nondivisible_interval.<locals>.fgUUUUUU?r   r   r   r   )rB  rF  r   rw   )r6   er   spacingrL  lensetr   r   r   r   diffrH  r   )r8   r   r   r   rF  r,   rH   rB  Zb0r%   r   nsr*   r   r   r   test_nondivisible_intervalg  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 )NrP   rJ   c                 S   s   t j| d| d  S )NrJ   rP   )r   	yulesimonZ_pmfr   r   r   r   r,     r[   z0TestNSum.test_logser_kurtosis_gh20648.<locals>.fr`   )invalidr   )
r   rg  Zmomentr6   rd   rG  r   r   r   rH  )r8   r   rf   r,   r*   r   r   r   test_logser_kurtosis_gh20648  s   z%TestNSum.test_logser_kurtosis_gh20648N)*r2  r3  r4  r6   r   r   r   uniformtolistr   r:   r   rf   rH   r   r   r8  r   r?   r   rU  rE   rT  r   r   r   r6  r7  r'   r   rQ  r   rV  rX  r[  r]  r^  r_  r  rf  r0   ri  r   r   r   r   r9    sL    6

3
(
1

r9  rB   )*r   r   r   numpyr6   Znumpy.testingr   Zscipy.conftestr   Z(scipy._lib._elementwise_iterative_methodZ_libZ_elementwise_iterative_methodr   Zscipy._lib._array_api_no_0dr   r   Zscipy._lib._array_apir   r   r   r	   r
   Zscipyr   r   Zscipy.integrater   r   r   r   Zscipy.integrate._tanhsinhr   Zscipy.stats._discrete_distnsr   r   r   r/   r6  Zusefixturesr0   r3   r9  r   r   r   r   <module>   sF   


     N
