a
    ‡ù»jB‰  ã                   @   sŽ   d dl Z d dlZd dlmZmZ d dlm  mZ	 d dl
mZmZ d dlmZ d dlmZmZmZ d dlmZ G dd„ dƒZG d	d
„ d
ƒZdS )é    N)Úassert_allcloseÚassert_equal)ÚspecialÚstats)Úquad_vec)Ú	_tanhsinhÚ_pair_cacheÚ_nsum)Ú_gen_harmonic_gt1c                   @   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_dgd*d+„Zd,d-„ Zej  d.d/ejfd&gej d/fd&gej ejfdgejej fd0gd1e!j" #d0¡e!j" #d¡ gg¡d2d3„ ƒZ$ej  d4e%dd5ƒ¡d6d7„ ƒZ&ej  d8d&d9d:gf¡ej  d;e!j'j(¡d<d=„ ƒƒZ)ej  d>e*ƒ d?d@dAg¡dBdC„ ƒZ+dDdE„ Z,dFdG„ Z-dHdI„ Z.dJdK„ Z/dLdM„ Z0ej  dNdOdPg¡dQdR„ ƒZ1dSdT„ Z2ej  dUe%dƒ¡dVdW„ ƒZ3dXdY„ Z4ej  dZd[ej d/gd\d\gff¡ej  d]ej5ej6f¡d^d_„ ƒƒZ7d`da„ Z8dbdc„ Z9ddde„ Z:dfS )hÚTestTanhSinhc                 C   s   |t  d| ¡ S ©Né   ©ÚnpÚlog©ÚselfÚt© r   úIE:\soccer\ml_env\Lib\site-packages\scipy/integrate/tests/test_tanhsinh.pyÚf1   s    zTestTanhSinh.f1g      Ð?r   c                 C   s   |d t  |¡ S ©Né   )r   Úarctanr   r   r   r   Úf2   s    zTestTanhSinh.f2r   é   c                 C   s   t  |¡t  |¡ S ©N©r   ÚexpÚcosr   r   r   r   Úf3   s    zTestTanhSinh.f3c                 C   s,   t  d|d  ¡}t  |¡d|d  |  S )Nr   r   )r   Úsqrtr   )r   r   Úar   r   r   Úf4"   s    zTestTanhSinh.f4é   é`   c                 C   s   t  |¡t  |¡ S r   )r   r!   r   r   r   r   r   Úf5)   s    zTestTanhSinh.f5gÇqÇqÜ¿c                 C   s   t  d|d  ¡S ©Nr   r   ©r   r!   r   r   r   r   Úf6/   s    zTestTanhSinh.f6é   c                 C   s   t  |¡t  d|d  ¡ S r'   r(   r   r   r   r   Úf75   s    zTestTanhSinh.f7g      è?c                 C   s   t  |¡d S r   r   r   r   r   r   Úf8;   s    zTestTanhSinh.f8c                 C   s   t  t  |¡¡S r   )r   r   r   r   r   r   r   Úf9A   s    zTestTanhSinh.f9c                 C   s   t  t  |¡¡S r   )r   r!   Útanr   r   r   r   Úf10G   s    zTestTanhSinh.f10c                 C   s   dd|d   S r'   r   r   r   r   r   Úf11M   s    zTestTanhSinh.f11c                 C   s   t  | ¡t  |¡ S r   )r   r   r!   r   r   r   r   Úf12S   s    zTestTanhSinh.f12c                 C   s   t  |d  d ¡S r   ©r   r   r   r   r   r   Úf13Y   s    zTestTanhSinh.f13c                 C   s   t  | ¡t  |¡ S r   r   r   r   r   r   Úf14_   s    zTestTanhSinh.f14ç      à?c                 C   s   t  |¡| S r   )r   Úsinr   r   r   r   Úf15e   s    zTestTanhSinh.f15Fc                 C   sN   t || ƒ}|s|S tjdd�� t |¡W  d   ƒ S 1 s@0    Y  d S )NÚignore©Údivide)Úabsr   ÚerrstateÚlog10)r   ÚresÚrefr   Úerrr   r   r   Úerrork   s
    zTestTanhSinh.errorc                 C   sŽ  | j }d}tjt|d�� tdd|jƒ W d   ƒ n1 s<0    Y  d}tjt|d��" t|d|jdd� W d   ƒ n1 s€0    Y  d}tjt|d�� t|d	|jƒ W d   ƒ n1 sÀ0    Y  tjt|d��" t|d|jd
d� W d   ƒ n1 �s0    Y  tjt|d��" t|d|jtd� W d   ƒ n1 �sD0    Y  d}tjt|d��" t|d|jdd� W d   ƒ n1 �sŠ0    Y  tjt|d��$ t|d|jtjd� W d   ƒ n1 �sÎ0    Y  d}tjt|d��& t|d|jtjdd� W d   ƒ n1 �s0    Y  tjt|d��& t|d|jtjdd� W d   ƒ n1 �s^0    Y  d}tjt|d��$ t|d|jtƒ d� W d   ƒ n1 �s¦0    Y  tjt|d��" t|d|jd	d� W d   ƒ n1 �sè0    Y  tjt|d��" t|d|jdd� W d   ƒ n1 �s*0    Y  d}tjt|d��" t|d|jdd� W d   ƒ n1 �sp0    Y  tjt|d��" t|d|jdd� W d   ƒ n1 �s²0    Y  tjt|d��" t|d|jdd� W d   ƒ n1 �sô0    Y  d}tjt|d��" t|d|jdd� W d   ƒ n1 �s:0    Y  d}tjt|d��" t|d|jdd� W d   ƒ n1 �s€0    Y  d S )Nú`f` must be callable.©Úmatché*   r   ú...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©rN   r   ©rL   r   z...must be integers.©Úmaxlevel)Zmaxfunzmigratory coconut)Úminlevelz...must be non-negative.©Úpreserve_shapez...must be callable.Z
elderberry©Úcallback)	r   ÚpytestÚraisesÚ
ValueErrorr   Úbr   ÚinfÚobject)r   ÚfÚmessager   r   r   Útest_input_validationt   sX    ,0,2224664222222z"TestTanhSinh.test_input_validationzlimits, refr   rP   )r   rP   c                 C   sž   t  ¡ }t|jg|¢R Ž }t|j|ƒ t|jg|¢R ddiŽ}tt |j¡|ƒ |dkrlt 	|jj
tj¡s‚nt 	|jj
tj¡s‚J ‚tt |j¡|jdd� d S )Nr   Tr   ç¼‰Ø—²Òœ<rK   )r   Únormr   Úpdfr   ÚintegralÚlogpdfr   r   Ú
issubdtypeÚdtypeÚfloatingZcomplexfloatingrA   )r   Úlimitsr?   Údistr>   Úlogresr   r   r   Útest_integral_transforms«   s    
ÿz%TestTanhSinh.test_integral_transformsÚf_numberé   c                 C   s�   t | d|› �ƒ}d}t|d|j|d�}t|j|j|d� |dvrht|  |j|j¡|j ƒ}||jk shJ ‚|dv rtd S |js~J ‚|j	dksŒJ ‚d S )Nra   g:Œ0âŽyU>r   rM   >   é   >   é
   r   é   )
Úgetattrr   r^   r   rg   r?   r;   rA   ÚsuccessÚstatus)r   rp   ra   rN   r>   Z
true_errorr   r   r   Ú
test_basicÃ   s    
zTestTanhSinh.test_basicr?   gš™™™™™Ù?g333333ã?Úcasec                 C   sT   |\}}|dv r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)	r[   Úskipru   r   Úintervalr   rf   r   rg   )r   r?   ry   ÚdistnameÚparamsrm   Úxr>   r   r   r   Útest_accuracyÓ   s    

zTestTanhSinh.test_accuracyÚshape©r   ©é   r*   ©rƒ   r   r   c                    sh  t j d¡}| |¡}| |¡}| |¡}t  |¡‰‡‡fdd„‰dˆ_dˆ_t jdd„ ƒ}tˆ|||fd�}||||ƒ ¡ }g d¢}	|	D ]>‰ ‡ fd	d
„|D ƒ}
t	|ˆ ƒ}t
| ¡ |
dd� t|j|ƒ qŠt  |jjt j¡sàJ ‚t  |jjt j¡söJ ‚t  |jjt j¡�sJ ‚t  |jjt j¡�s&J ‚tt  |j¡ˆjƒ t  |j¡dk�sPJ ‚tt  |j¡ˆjƒ d S )Nì   F»*ŒBG c                    sB   ˆ  j d7  _ ˆ  j| jˆks(| jdkr,dn| jd 7  _| | S ©Nr   rP   )ÚncallÚfevalÚsizeÚndimr€   ©r~   Úp©ra   Únr   r   ra   é   s    ,z*TestTanhSinh.test_vectorization.<locals>.fr   c                    s   t ‡ fdd„| |ƒS )Nc                    s   | ˆ  S r   r   ©r~   ©rŒ   r   r   Ú<lambda>ò   ó    zKTestTanhSinh.test_vectorization.<locals>._tanhsinh_single.<locals>.<lambda>)r   )r"   r^   rŒ   r   r�   r   Ú_tanhsinh_singleð   s    z9TestTanhSinh.test_vectorization.<locals>._tanhsinh_single©Úargs©rg   rA   rv   rw   ÚnfevrU   c                    s   g | ]}t |ˆ ƒ‘qS r   ©ru   ©Ú.0r?   ©Úattrr   r   Ú
<listcomp>ù   r’   z3TestTanhSinh.test_vectorization.<locals>.<listcomp>çVçž¯Ò<rM   r   )r   ÚrandomÚdefault_rngÚprodr‡   rˆ   Ú	vectorizer   Úravelru   r   r   r€   ri   rv   rj   Úbool_rw   Úintegerr—   rU   Úmax)r   r€   Úrngr"   r^   rŒ   r“   r>   ÚrefsÚattrsÚref_attrÚres_attrr   ©rœ   ra   rŽ   r   Útest_vectorizationß   s2    





zTestTanhSinh.test_vectorizationc                    sf   ‡ fdd„‰ dˆ _ tjdtjd�f}tˆ tjgd tj gd d|d�}t g d¢¡}t|j|ƒ d S )	Nc                    sD   ˆ j d7  _ dd„ dd„ dd„ g‰ ‡ fdd„t| | ¡ ƒD ƒ}|S )Nr   c                 S   s   t  | d  ¡S r   r2   r�   r   r   r   r‘     r’   z4TestTanhSinh.test_flags.<locals>.f.<locals>.<lambda>c                 S   s
   t  | ¡S r   r2   r�   r   r   r   r‘     r’   c                 S   s   t  | t j¡d S )Nr   )r   Ú	full_likeÚnanr�   r   r   r   r‘     r’   c                    s   g | ]\}}ˆ | |ƒ‘qS r   r   )rš   r~   Új©Úfuncsr   r   r�     r’   z6TestTanhSinh.test_flags.<locals>.f.<locals>.<listcomp>)ÚnitÚzipr£   )ZxsÚjsr>   ©ra   r±   r   ra   
  s    þz"TestTanhSinh.test_flags.<locals>.fr   rƒ   ©rj   r$   )rU   r•   ©r   éþÿÿÿéýÿÿÿ)	r³   r   ÚarangeZint64r   r_   Úarrayr   rw   )r   r•   r>   Ú	ref_flagsr   r¶   r   Ú
test_flags  s    $zTestTanhSinh.test_flagsc                 C   sJ   dd„ }t |tjgd tj gd ddd�}t g d¢¡}t|j|ƒ d S )Nc                 S   s6   t  | d d  ¡t  | d ¡t  | d t j¡d gS )Nr   r   r   r   )r   r   r®   r¯   r�   r   r   r   ra     s    þz1TestTanhSinh.test_flags_preserve_shape.<locals>.frƒ   r$   T)rU   rX   r¸   )r   r   r_   r¼   r   rw   )r   ra   r>   r½   r   r   r   Útest_flags_preserve_shape  s    $z&TestTanhSinh.test_flags_preserve_shapec                 C   s8   dd„ }t |ddƒ}t|dddd�}t|j|d ƒ d S )Nc              	   S   s8   t  | t  d|  ¡gt  d|  ¡| t  d|  ¡ gg¡S )Nrs   é   éd   )r   Úasarrayr6   r   r�   r   r   r   ra   %  s    ÿz+TestTanhSinh.test_preserve_shape.<locals>.fr   r   TrW   )r   r   r   rg   )r   ra   r?   r>   r   r   r   Útest_preserve_shape#  s    z TestTanhSinh.test_preserve_shapec                 C   s`   | j }d}tdƒD ]H}t|d|jd|d�}| j|j|jdd�}||d k sV|dk sVJ ‚|}qd S )Nr   r*   ©rV   rU   TrG   r   g      /À)r   Úranger   r^   rA   rg   r?   )r   ra   Zlast_logerrÚir>   Zlogerrr   r   r   Útest_convergence-  s    zTestTanhSinh.test_convergencec                    s`  ‡ ‡fdd„‰ ˆj jˆ _ˆj jˆ _d}ˆ j| }d\ˆ _ˆ _tˆ dˆ jƒ}ˆ |jˆ j¡|j  k rl|k srn J ‚|jˆ jks‚J ‚ˆ j|_|j	s”J ‚|j
dks¢J ‚d\ˆ _ˆ _|j}tˆ dˆ j|d�}ˆ j|_||ksÚJ ‚d\ˆ _ˆ _|d8 }|dksúJ ‚tˆ dˆ j|d�}ˆ |jˆ j¡|j  k �r2|k�s8n J ‚|jˆ j  k�rV|jk �s\n J ‚ˆ j|jd k�srJ ‚|j	�r~J ‚|j
tjk�s�J ‚|}ˆ j|_d\ˆ _ˆ _t |jtj¡}tˆ dˆ jd|d	�}|j|jk�sÞJ ‚|j|jk�sðJ ‚|jˆ j  k�r|jk�sn J ‚ˆ j|jk�s&J ‚|j	�s2J ‚|j
dk�sBJ ‚d\ˆ _ˆ _t |jtj ¡}tˆ dˆ jd|d	�}ˆ |jˆ j¡|j  k �rš|k �s n J ‚|jˆ j  k�r¾|jk�sÄn J ‚ˆ j|jk�sÖJ ‚|j	�sâJ ‚|j
dk�sòJ ‚d\ˆ _ˆ _t |j|j tj¡}tˆ dˆ j|d
�}|j|jk�s8J ‚|j|jk�sJJ ‚|jˆ j  k�rh|jk�snn J ‚ˆ j|jk�s€J ‚|j	�sŒJ ‚|j
dk�sœJ ‚d\ˆ _ˆ _t |j|j tj ¡}tˆ dˆ j|d
�}ˆ |jˆ j¡ˆ j |j|j   k �r|k �s
n J ‚|jˆ j  k�r(|jk�s.n J ‚ˆ j|jk�s@J ‚|j	�sLJ ‚|j
dk�s\J ‚d S )Nc                    s,   ˆ  j d7  _ ˆ  jt | ¡7  _ˆ | ¡S r   )Úcallsrˆ   r   r‰   r   r�   ©ra   r   r   r   ra   :  s    z:TestTanhSinh.test_options_and_result_attributes.<locals>.fçê-�™—q=)r   r   r   rT   r   r   ©rN   rL   rM   )r   r?   r^   rˆ   rÈ   r   rA   rg   r—   rv   rw   rU   ÚeimZ	_ECONVERRr   Ú	nextafterr_   )r   Zdefault_rtolZdefault_atolr?   rU   r>   rL   rN   r   rÉ   r   Ú"test_options_and_result_attributes7  s|    


(
,$$,$$8$z/TestTanhSinh.test_options_and_result_attributesrN   g-Cëâ6?g›+¡†›„=c                    sD  t  ¡ ‰ tddd�}tˆ jdddt |¡d�}tˆ jdd|d�}tt 	|j
¡|j
fi |¤Ž tt 	|j¡|jfi |¤Ž |j|jksˆJ ‚‡ fd	d
„}‡ fdd„}t|tj tjdd�}t|tj tjƒ}tjdd��H tt 	|j
¡|j
fi |¤Ž tt 	|j¡|jfi |¤Ž W d   ƒ n1 �s$0    Y  |j|jk�s@J ‚d S )Ng¬CÒÑ]r2<rž   )rL   rN   rP   r   T)r   rN   rM   c                    s   ˆ   | ¡ ˆ  | ¡ S r   )rh   rf   r�   ©rm   r   r   ra   ³  s    z TestTanhSinh.test_log.<locals>.fc                    s(   t  ˆ  | ¡d ¡ˆ  | ¡ t jd  S )Ny                ù              ð?)r   r   rh   Úpir�   rÏ   r   r   Úlogf¶  s    z#TestTanhSinh.test_log.<locals>.logfrG   r8   ©Úall)r   re   Údictr   rh   r   r   rf   r   r   rg   rA   r—   r_   r<   )r   rN   Z	test_tolsr>   r?   ra   rÒ   r   rÏ   r   Útest_log¤  s    <zTestTanhSinh.test_logc                    s’   dd„ }t |dtjd ƒ}t d¡d dt d¡d  d  }t|j|ƒ tjdd�‰ tjdd�‰‡ ‡fd	d„}t |tjtj ƒ}t|jd
ƒ d S )Nc                 S   s   t  d|  ¡S ©NrÐ   r2   r�   r   r   r   ra   Æ  s    z$TestTanhSinh.test_complex.<locals>.fr   r*   r   r   rÐ   )Úscalec                    s   ˆ   | ¡dˆ  | ¡  S r×   )rf   r�   ©Zdist1Zdist2r   r   ra   Ð  s    y      ð¿      ð¿)	r   r   rÑ   r!   r   rg   r   re   r_   )r   ra   r>   r?   r   rÙ   r   Útest_complexÃ  s    $zTestTanhSinh.test_complexrU   c                    s2  ‡ ‡fdd„‰ ddt  g ¡  ˆ _ˆ _ˆ _tˆ dˆjjd|d�}t  ˆ j¡}t	d|d ƒD ]Ò}ddt  g ¡  ˆ _ˆ _ˆ _t
||d�}tˆ dˆjjfi |¤Ž}t|j|jdd� t|j|jd|j d� |jˆ j  krætˆ jƒksìn J ‚ˆ j|| d d k�sJ ‚|j|jk�sJ ‚t|t  ˆ j¡ƒ qZd S )	Nc                    sB   ˆ  j d7  _ ˆ  jt | ¡7  _t ˆ j|  ¡ f¡ˆ _ˆ | ¡S r   )rÈ   rˆ   r   r‰   Zconcatenater~   r£   r   r�   rÉ   r   r   ra   Û  s    z%TestTanhSinh.test_minlevel.<locals>.fr   rÄ   r   g¼‰Ø—²Ò¼<rM   rK   )r   r¼   rˆ   rÈ   r~   r   r   r^   ÚsortrÅ   rÕ   r   rg   rA   r—   Úlenrw   r   )r   rU   r?   Zref_xrV   Úoptionsr>   r   rÉ   r   Útest_minlevelÖ  s    $zTestTanhSinh.test_minlevelc              	   C   s„   dd„ }t j dt j t jdt j dg}t jt jdt j ddt jg}t  t j¡}t|||ƒ}t|j||d |d | |||gƒ d S )Nc                 S   s    t j| t  | ¡< t  | d  ¡S r   )r   r¯   Úisinfr   r�   r   r   r   ra   ô  s    z/TestTanhSinh.test_improper_integrals.<locals>.fr   iìÿÿÿé   r   )r   r_   r!   rÑ   r   r   rg   )r   ra   r"   r^   r?   r>   r   r   r   Útest_improper_integralsò  s     z$TestTanhSinh.test_improper_integralsrl   ©r   rƒ   rƒ   rj   c                    s˜   t j|ˆ d�d \}}‡ fdd„}ˆ t jkr0dnd}t||||d�}|jjˆ ksTJ ‚|jjˆ ksdJ ‚t  |j¡stJ ‚t	|jt  
|¡t  
|¡ |d� d S )Nr·   r   c                    s   | j ˆ ksJ ‚t | ¡S r   )rj   r   r   r�   r·   r   r   ra     s    z"TestTanhSinh.test_dtype.<locals>.frÊ   gñhãˆµøä>rM   )r   rÂ   Úfloat64r   rg   rj   rA   rÔ   rv   r   r   )r   rl   rj   r"   r^   ra   rN   r>   r   r·   r   Ú
test_dtypeý  s    zTestTanhSinh.test_dtypec           
         s  t j t j }}dd„ }d\}}|| d ‰t||dd�}t|||fi |¤Ž}|jrXJ ‚|j|ksfJ ‚‡ ‡fdd„‰ d	ˆ _d ˆ _|d
= t|||fi |¤dˆ i¤Ž}| ¡ D ]j}	|	dkrêˆ j|	 dksÈJ ‚||	 dksØJ ‚||	 dksèJ ‚qª||	 ˆ j|	   k�r||	 ksªn J ‚qªd S )Nc                 S   s   t  |  |  ¡S r   r2   r�   r   r   r   ra     s    z-TestTanhSinh.test_maxiter_callback.<locals>.f)r   r   r   rž   )rV   rU   rN   c                    sB   ˆ  j d7  _ | ˆ _t| dƒs"J ‚| jdks0J ‚ˆ j ˆkr>t‚d S )Nr   rg   )Úiterr>   Úhasattrrw   ÚStopIteration©r>   ©rZ   Úmaxiterr   r   rZ     s    
z4TestTanhSinh.test_maxiter_callback.<locals>.callbackrP   rU   rZ   rw   r¹   éüÿÿÿ)	r   r_   rÕ   r   rv   rU   rå   r>   Úkeys)
r   r"   r^   ra   rV   rU   Úkwargsr>   Zres2Úkeyr   ré   r   Útest_maxiter_callback  s&    
z"TestTanhSinh.test_maxiter_callbackc           	         sÂ   t j t j }}dd„ }‡ fdd„‰ g ˆ _g ˆ _d}t|||d|ˆ d� g }g }t|d ƒD ].}t|||||d	�}| |j¡ | |j¡ q\t	ˆ jdd … |d
d� t	ˆ jdd … |d
dd� d S )Nc                 S   s   t  |  |  ¡S r   r2   r�   r   r   r   ra   5  s    z&TestTanhSinh.test_jumpstart.<locals>.fc                    s    ˆ j  | j¡ ˆ j | j¡ d S r   )Ú	integralsÚappendrg   ÚerrorsrA   rè   rY   r   r   rZ   8  s    z-TestTanhSinh.test_jumpstart.<locals>.callbackr*   r   )rV   rU   rZ   r   rÄ   rž   rM   rd   rË   )
r   r_   rð   rò   r   rÅ   rñ   rg   rA   r   )	r   r"   r^   ra   rU   rð   rò   rÆ   r>   r   rY   r   Útest_jumpstart1  s    zTestTanhSinh.test_jumpstartc           	      C   s  dd„ }t |ddƒ}|jsJ ‚t|jdƒ t |dddd�}|jdksHJ ‚t|jtjƒ t |dddd�}|jdkstJ ‚t|jtjƒ t |ddƒ}|js˜J ‚|jdks¦J ‚t|jdƒ dd„ }t |ddd	d
�}t|jdƒ tjdddg}dtjddg}ddtjdg}t ||||fd
�}t|jtjtjtjdgƒ t|jd d… tjƒ t|j	g d¢ƒ t|jg d¢ƒ t|j
d d… dƒ t d¡t_t d¡t_dgt_d t_t dd„ ddƒ}t|jdƒ t dd„ ddƒ}t|jdƒ d}t dd„ dt |¡ƒ}g d¢}|D ]}t|| j|ƒ �qúd S )Nc                 S   s   t  | jt j¡sJ ‚| d S )Néc   )r   ri   rj   rk   r�   r   r   r   ra   P  s    z*TestTanhSinh.test_special_cases.<locals>.fr   r   g{®Gáz„?rT   rP   c                 S   s   | | S r   r   )r~   Úcr   r   r   ra   g  s    rô   r”   r5   rƒ   )rº   rº   rº   r   ©FFFTc                 S   s   | d S r×   r   r�   r   r   r   r‘   �  r’   z1TestTanhSinh.test_special_cases.<locals>.<lambda>y              à?c                 S   s   | S r   r   r�   r   r   r   r‘   ƒ  r’   râ   c                 S   s   | S r   r   r�   r   r   r   r‘   ˆ  r’   r–   )r   rv   r   rg   r   rA   r   r¯   rU   rw   r—   Úemptyr   ZxjcZwjÚindicesZh0Zzerosr€   )	r   ra   r>   r"   r^   rõ   r€   r©   rœ   r   r   r   Útest_special_casesK  sN    

zTestTanhSinh.test_special_casesN)F);Ú__name__Ú
__module__Ú__qualname__r   r?   r^   r   r   rÑ   r   r    r   r#   r&   r)   r+   r!   r   Úgammar,   r-   r/   r0   r_   r1   r3   r4   r7   rA   rc   r[   ÚmarkÚparametrizer   re   Zcdfro   rÅ   rx   Z_distr_paramsZdistcontr   Útupler­   r¾   r¿   rÃ   rÇ   rÎ   rÖ   rÚ   rÞ   rá   Úfloat32rã   rä   rï   ró   rù   r   r   r   r   r      sž   &
	7û



'

m

 #r   c                   @   sT  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!d&d'„ Z"ej d(ej#ej$g¡d)d*„ ƒZ%d+S ),ÚTestNSuml   ºQ º[† r   rs   ©r‰   c                 C   s   |d S ©Nr¹   r   )r   Úkr   r   r   r   ’  s    zTestNSum.f1r   é   c                 C   s   d||  S r   r   ©r   r  rŒ   r   r   r   r   œ  s    zTestNSum.f2c                 C   s   d||  S r   r   r  r   r   r   r    ¤  s    zTestNSum.f3r$   rq   )rƒ   r   c              
   C   sÊ  | j }d}tjt|d��  td|j|jƒ W d   ƒ n1 s>0    Y  d}tjt|d��$ t||j|jdd� W d   ƒ n1 s„0    Y  d}tjt|d�� t|d|jƒ W d   ƒ n1 sÄ0    Y  tjt|d�� t||jd ƒ W d   ƒ n1 �s0    Y  tjt|d��& t||j|jtƒ d	� W d   ƒ n1 �sH0    Y  tjt|d��$ t||j|jd
d� W d   ƒ n1 �sŒ0    Y  tjt|d��$ t||j|jtd� W d   ƒ n1 �sÐ0    Y  tj	dd��� t|tj
tj tjgdƒ}t |jdkt |j¡@ t |j¡@ |j @ |j@ dk¡�sDJ ‚t|dtj
dgƒ}t |jdkt |j¡@ t |j¡@ |j @ |j@ dk¡�s–J ‚t|ddtj
tj tjddgd	�}t |jdkt |j¡@ t |j¡@ |j @ |j@ dk¡�søJ ‚W d   ƒ n1 �s0    Y  d}tjt|d��$ t||j|jdd� W d   ƒ n1 �sV0    Y  tjt|d��& t||j|jtjd� W d   ƒ n1 �sœ0    Y  d}tjt|d��( t||j|jtjdd� W d   ƒ n1 �sè0    Y  tjt|d��( t||j|jtjdd� W d   ƒ n1 �s00    Y  d}tjt|d��$ t||j|jdd� W d   ƒ n1 �sx0    Y  tjt|d��$ t||j|jdd� W d   ƒ n1 �s¼0    Y  d S )NrB   rC   rE   rF   r   rG   rH   rI   )ÚsteprJ   rK   rM   r8   rÓ   r   rP   rs   r   rO   rQ   TrR   rS   z"...must be a non-negative integer.g      @©Úmaxtermsr¹   )r   r[   r\   r]   r	   r"   r^   r`   r   r<   r¯   r_   rÔ   rw   ÚisnanÚsumrA   rv   r—   )r   ra   rb   r>   r   r   r   rc   ¬  s€    .2,.644
ÿÿÿÿ
ÿÿÿÿ"
ÿÿÿÿ,46884zTestNSum.test_input_validationrp   r*   c                    sÜ   t | d|› �ƒ‰ tˆ ˆ jˆ jˆ jd�}t|jˆ jƒ t|j	dƒ t|j
dƒ tjdd��0 t‡ fdd„ˆ jˆ jdˆ jd	�}W d   ƒ n1 sŽ0    Y  tt |j¡|jƒ tt |j¡|jƒ t|j	dƒ t|j
dƒ d S )
Nra   r”   r   Tr8   r9   c                     s   t  ˆ | Ž ¡S r   r   r”   r¶   r   r   r‘   é  r’   z%TestNSum.test_basic.<locals>.<lambda>)r   r•   )ru   r	   r"   r^   r•   r   r  r?   r   rw   rv   r   r<   r   rA   )r   rp   r>   rn   r   r¶   r   rx   à  s    ÿ$zTestNSum.test_basicr
  )r   r   rs   rà   rÁ   c              	   C   s�  | j }dd„ }dd„ }t ddg¡d d …tjf }t ddtjg¡d d …tjtjf }t g d	¢¡ d
¡}t || | ¡}|}	|||  }|||  }
||t |¡|  ƒjddd�}||ƒ||
ƒ | }|| ||ƒ }|| ||
ƒ }|| d }|| d }t 	|||¡\}}}t 
|j¡D ]n}|| || ||   }}}|| | d |k�r$|t ||| |¡ƒ ¡ }|||< |t |¡j ||< �q$d}t|||	|||d�}t|j|d| d� t|j|d| d� t|jdƒ t|jdƒ |	| | d |k}t|j| || dd� t|j| || dd� t|||	|dt |¡|d�}tt |j¡|jƒ tt |j¡|jƒ t|jdƒ t|jdƒ d S )Nc                 S   s   dt  | ¡ S r  r   r�   r   r   r   rÒ   õ  s    z$TestNSum.test_integral.<locals>.logfc                 S   s   d|  S )NrP   r   r�   r   r   r   ÚFø  s    z!TestNSum.test_integral.<locals>.Fr   r$   rà   rÁ   )r5   r   r   )rP   r   r   r   rP   T)ZaxisZkeepdimsr   rÊ   )r  r
  rN   rs   rM   r   rž   )r  r   rN   r
  )r   r   rÂ   Znewaxisr_   ZreshapeÚfloorr»   r  Zbroadcast_arraysZndindexr€   ZfinfoÚepsr	   r   rA   r   rw   rv   r   r   )r   r
  ra   rÒ   r  r"   r^   r  ZnstepsZ
b_originalr  Údirectrg   ÚlowÚhighZref_sumZref_errrÆ   ZaiZbiZstepirN   r>   rn   r   r   r   Útest_integralð  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| 	¡ |
dd� t|j|ƒ q�t  |jjt j¡sæJ ‚t  |jjt j¡süJ ‚t  |jjt j¡�sJ ‚tt  |j¡ˆjƒ d S )Nr…   r   rs   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   ra   3  s    ,z&TestNSum.test_vectorization.<locals>.fr   c                    s   t ‡ fdd„| ||d�S )Nc                    s   d| ˆ   S r   r   r�   r�   r   r   r‘   ;  r’   zCTestNSum.test_vectorization.<locals>._nsum_single.<locals>.<lambda>r	  )r	   )r"   r^   rŒ   r
  r   r�   r   Ú_nsum_single9  s    z1TestNSum.test_vectorization.<locals>._nsum_singleiè  )r
  r•   r	  )r  rA   rv   rw   r—   c                    s   g | ]}t |ˆ ƒ‘qS r   r˜   r™   r›   r   r   r�   B  r’   z/TestNSum.test_vectorization.<locals>.<listcomp>rž   rM   )r   rŸ   r    Úintegersr_   r¡   rˆ   r¢   r	   r£   ru   r   r   r€   ri   rv   rj   r¤   rw   r¥   r—   r¦   )r   r€   r§   r"   r^   rŒ   r  r>   r¨   r©   rª   r«   r   r¬   r   r­   &  s*    


zTestNSum.test_vectorizationc                 C   s®   | j }g d¢}g d¢}dtjtjtjg}t |d¡}tjdd��" t||||fd�}W d   ƒ n1 sh0    Y  t|jg d¢ƒ t|j	g d	¢ƒ t
|j|j ||j ƒ d S )
N)r   r   gÍÌÌÌÌÌì?gš™™™™™ñ?)r   r   r   r   rs   r   r8   r9   r”   rö   )rº   rº   r¹   r   )r   r   r_   r   Úzetar<   r	   r   rv   rw   r   r  )r   ra   rŒ   r"   r^   r?   r>   r   r   r   Útest_statusL  s    0zTestNSum.test_statusc                    sV   ‡ fdd„‰ dˆ _ tˆ ddƒ}t|j ˆ j ƒ dˆ _ tˆ dtjdd�}t|j ˆ j ƒ d S )Nc                    s    ˆ  j t | ¡7  _ d| d  S r'   )r—   r   r‰   r�   r¶   r   r   ra   \  s    zTestNSum.test_nfev.<locals>.fr   r   rs   ç�íµ ÷Æ°>rK   )r—   r	   r   r   r_   )r   r>   r   r¶   r   Ú	test_nfev[  s    zTestNSum.test_nfevc                 C   sn   t dd„ ddgtjddd�}t dd„ ddgtjƒ}t |j|j|j k¡sNJ ‚t |j|j|j k ¡sjJ ‚d S )	Nc                 S   s   d| d  S r'   r   ©r  r   r   r   r‘   k  r’   z)TestNSum.test_inclusive.<locals>.<lambda>r   r*   iô  gš™™™™™¹?)r
  rL   c                 S   s   d| d  S r'   r   r  r   r   r   r‘   l  r’   )r	   r   r_   rÔ   r  rA   )r   r>   r?   r   r   r   Útest_inclusiveh  s    zTestNSum.test_inclusivec                 C   s   | j }d }}t|||ƒ}t|j||ƒƒ t| jdtjdd�}t|j| j jƒ t 	d¡}t 	d¡}t 	d¡}t 
|j|j|j¡}t| j|||fd�}|jj|ks¤J ‚|jj|ks´J ‚|jj|ksÄJ ‚dd„ }t|d	d
d	d�}t |j¡sìJ ‚t |j¡süJ ‚|jdk�sJ ‚t|d	d
dd�}t |j¡�s.J ‚t |j¡�s@J ‚|jdk�sPJ ‚tjdddg}tjtjtjtjg}ddtjdg}t| j|||fd�}t|jtjtjtj| j jgƒ t|jd d… tjƒ t|jg d¢ƒ t|jg d¢ƒ t|jd d… dƒ d S )Nr   r   r”   )rƒ   r   r   )r   r   r*   c                 S   s8   t jdd�� d|  W  d   ƒ S 1 s*0    Y  d S )Nr8   r9   r   )r   r<   r�   r   r   r   ra   †  s    z%TestNSum.test_special_case.<locals>.fr   rs   r	  r¹   rº   rƒ   )rP   rP   rº   r   rö   )r   r	   r   r  r   r   r_   r   r?   r÷   Zbroadcast_shapesr€   rw   r—   r  rA   r¯   rv   )r   ra   r"   r^   r>   rŒ   r€   r   r   r   Útest_special_casep  s@    


zTestNSum.test_special_caserj   c                    sŠ   ‡ fdd„}t jdˆ d�}t jdt jgˆ d�}t|||ƒ}|jjˆ ksJJ ‚|jjˆ ksZJ ‚ˆ t jkrhdnd}t|dƒ}t	|j||d	� d S )
Nc                    s(   | j ˆ ksJ ‚d| tjdˆ d�d   S )Nr   r   r·   r   )rj   r   rÂ   r  r·   r   r   ra   £  s    zTestNSum.test_dtype.<locals>.fr   r·   rs   rÊ   r  r   rM   )
r   rÂ   r_   r	   r  rj   rA   rã   r
   r   )r   rj   ra   r"   r^   r>   rN   r?   r   r·   r   rä   ¡  s    
zTestNSum.test_dtypeN)&rú   rû   rü   r   rŸ   r    r§   ÚuniformrŒ   r   rÑ   r?   r"   r_   r^   r   r•   r   r   r  r    r  r
   rc   r[   rþ   rÿ   rÅ   rx   r  r­   r  r  r  r  r  rã   rä   r   r   r   r   r  Ž  s<   4

5
%1r  )r[   Únumpyr   Znumpy.testingr   r   Z(scipy._lib._elementwise_iterative_methodZ_libZ_elementwise_iterative_methodrÌ   Zscipyr   r   Zscipy.integrater   Zscipy.integrate._tanhsinhr   r   r	   Zscipy.stats._discrete_distnsr
   r   r  r   r   r   r   Ú<module>   s        