
    ^Mh                         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
c 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
Z"ddZ#d Z$eej%        &                    d          ej%        '                    dd          ej%        '                    dd           G d d                                                          Z(eej%        &                    d          ej%        '                    dd          ej%        '                    dd           G 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                     |t          |           n|}dd|j        z  dz  z  |                    | dz   dz            z  S )N            ?)r   piexpxxps     c/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/integrate/tests/test_tanhsinh.pynorm_pdfr      sF    !z			rBag^bffadU1Woo--    c                 x    |t          |           n|}dt          j        d|j        z            z  | dz  dz  z
  S )Ng      r   )r   mathlogr   r   s     r   norm_logpdfr"      s@    !z			rB25!!!AqDF**r   c                     d }|S )Nc                       fd}|S )Nc                      | d         j         }d | D             } g }t          t          j        |                    D ](fd| D             }|                     |            )|S )Nr   c                 ,    g | ]}t          |          S  )r	   ).0	arg_arrays     r   
<listcomp>zB_vectorize.<locals>.decorator.<locals>.wrapped.<locals>.<listcomp>"   s     JJJ)(9--JJJr   c                      g | ]
}|         S r'   r'   )r(   r)   is     r   r*   zB_vectorize.<locals>.decorator.<locals>.wrapped.<locals>.<listcomp>%   s    HHH	y|HHHr   )shaperanger    prodappend)
arg_arraysr-   resarg_scalarsr,   fs       @r   wrappedz._vectorize.<locals>.decorator.<locals>.wrapped    s    qM'EJJzJJJJC49U++,, , ,HHHHZHHH

11k?++++Jr   r'   )r4   r5   s   ` r   	decoratorz_vectorize.<locals>.decorator   s#    	 	 	 	 	 r   r'   )r   r6   s     r   
_vectorizer7      s    
 
 
 r   skip_xp_backendsarray_api_strictz)Currently uses fancy indexing assignment.reasonz	jax.numpyz*JAX arrays do not support item assignment.c                   	   e Zd Zd Zde_        de_        d Zej        dz
  d ej	        d          z  z   dz  e_        de_        d Z
 ej        ej        dz            dz
  dz  e
_        ej        dz  e
_        d Zd	ej        dz  z  d
z  e_        de_        d Zde_        de_        d Zej        dz  e_        de_        d Zd ej        ej                  z   ej        d          z   ej        d          z  e_        de_        d Zde_        de_        d Zej          ej	        d          z  dz  e_        ej        dz  e_        d Zej         ej        d          z  dz  e_        ej        dz  e_        d Zej        dz  e_        ej        e_        d Z ej        ej                  e_        ej        e_        d Z ej        ej        dz            e_        ej        e_        d Zde_        ej        e_        d Zej        dz  e_        ej        e_        dQdZ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d!gd"e"j#        $                    d!          e"j#        $                    d           z
  gg          d#             Z%ej        &                    d$d%&          ej                             d' e'dd(                    d)                         Z(ej        &                    d$d*&          ej                             d+dd,d-gf          ej                             d.e"j)        j*                  d/                                     Z+ej                             d0 e,            d1d2d3g          d4             Z-d5 Z.d6 Z/d7 Z0d8 Z1d9 Z2ej        &                    d:d;<          ej                             d=d>d?g          d@                         Z3dA Z4ej                             dB e'd                    dC             Z5dD Z6ej                             dEdFe!j         dgdGdGgff          ej                             dHdI          dJ                         Z7dK Z8dL Z9dM Z:ej        &                    d$N          dO             Z;dP Z<dS )RTestTanhSinhc                 6    |t          j        d|z             z  S Nr   npr!   selfts     r   f1zTestTanhSinh.f19   s    26!a%==  r         ?r   c                 6    |dz  t          j        |          z  S Nr   )rA   arctanrB   s     r   f2zTestTanhSinh.f2?   s    Av	!$$r   r      c                 T    t          j        |          t          j        |          z  S NrA   r   cosrB   s     r   f3zTestTanhSinh.f3E   s    vayy26!99$$r   c                 v    t          j        d|dz  z             }t          j        |          d|dz  z   |z  z  S )Nr   r   )rA   sqrtrI   )rC   rD   as      r   f4zTestTanhSinh.f4K   s9    GAQJy||AF
a/00r      `   c                 T    t          j        |          t          j        |          z  S rM   )rA   rR   r!   rB   s     r   f5zTestTanhSinh.f5R   s    wqzzBF1II%%r   gqqܿc                 6    t          j        d|dz  z
            S Nr   r   rA   rR   rB   s     r   f6zTestTanhSinh.f6X   s    wq16z"""r      c                 `    t          j        |          t          j        d|dz  z
            z  S rZ   r[   rB   s     r   f7zTestTanhSinh.f7^   s'    wqzzBGAQJ////r   g      ?c                 0    t          j        |          dz  S rH   r@   rB   s     r   f8zTestTanhSinh.f8d   s    vayyA~r   c                 N    t          j        t          j        |                    S rM   )rA   r!   rO   rB   s     r   f9zTestTanhSinh.f9j   s    vbfQii   r   c                 N    t          j        t          j        |                    S rM   )rA   rR   tanrB   s     r   f10zTestTanhSinh.f10p   s    wrvayy!!!r   c                     dd|dz  z   z  S rZ   r'   rB   s     r   f11zTestTanhSinh.f11v   s    AQJr   c                 V    t          j        |           t          j        |          z  S rM   )rA   r   rR   rB   s     r   f12zTestTanhSinh.f12|   s    vqbzzBGAJJ&&r   c                 8    t          j        |dz   dz            S rH   )rA   r   rB   s     r   f13zTestTanhSinh.f13   s    vqAvgk"""r   c                 V    t          j        |           t          j        |          z  S rM   rN   rB   s     r   f14zTestTanhSinh.f14   s    vqbzzBF1II%%r   r   c                 0    t          j        |          |z  S rM   )rA   sinrB   s     r   f15zTestTanhSinh.f15   s    vayy1}r   FNc                     |t          ||          n|}t          ||z
            }|s|S t          j        d          5  |                    |          cd d d            S # 1 swxY w Y   d S )Nignoredivide)r   absrA   errstatelog10)rC   r2   refr!   r   errs         r   errorzTestTanhSinh.error   s    *,*_S#&&&"#)nn 	J[))) 	! 	!88C==	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s    A""A&)A&c                 .	   | j         }|                    d          }|                    |j                  }d}t          j        t
          |          5  t          d||           d d d            n# 1 swxY w Y   d}t          j        t
          |          5  t          |||d           d d d            n# 1 swxY w Y   d}t          j        t
          |          5  t          ||                    d	          |           d d d            n# 1 swxY w Y   t          j        t
          |          5  t          |||d
           d d d            n# 1 swxY w Y   t          j        t
          |          5  t          |||t                     d d d            n# 1 swxY w Y   d}t          j        t
          |          5  t          |||d           d d d            n# 1 swxY w Y   t          j        t
          |          5  t          ||||j                   d d d            n# 1 swxY w Y   d}t          j        t
          |          5  t          ||||j        d           d d d            n# 1 swxY w Y   t          j        t
          |          5  t          ||||j        d           d d d            n# 1 swxY w Y   d}t          j        t
          |          5  t          |||t                                 d d d            n# 1 swxY w Y   t          j        t
          |          5  t          |||d           d d d            n# 1 swxY w Y   d}t          j        t
          |          5  t          |||d           d d d            n# 1 swxY w Y   t          j        t
          |          5  t          |||d           d d d            n# 1 swxY w Y   d}t          j        t
          |          5  t          |||d           d d d            n# 1 swxY w Y   d}t          j        t
          |          5  t          |||d           d d d            d S # 1 swxY w 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)r   r!   )r   r!   z...must be integers.maxlevelzmigratory coconut)minlevelz...must be non-negative.preserve_shapez...must be callable.
elderberry)callback)	rE   asarraybpytestraises
ValueError	_tanhsinhinfobject)rC   r   r4   zerof_bmessages         r   test_input_validationz"TestTanhSinh.test_input_validation   s*   Gzz!}}jjoo)]:W555 	% 	%b$$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% .]:W555 	+ 	+as****	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ -]:W555 	0 	0aD))3///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0]:W555 	1 	1as0000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1]:W555 	1 	1as0000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 8]:W555 	- 	-as,,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-]:W555 	1 	1as0000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 5]:W555 	; 	;asT::::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;]:W555 	; 	;asT::::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; )]:W555 	7 	7asVXX6666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 ]:W555 	B 	Bas-@AAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B -]:W555 	1 	1asR0000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 ]:W555 	1 	1asR0000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 .]:W555 	6 	6as15555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 )]:W555 	; 	;as\::::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s  A22A69A6B::B>B>"%DDD9EE E?F$$F(+F(G,,G03G0H77H;>H;JJ	J	+KKK9 L%%L),L)M++M/2M/N33N7:N7O99O= O=!QQQ)R

RRzlimits, refr         ?      )r   r   c                 |   fd|D             }                     t          |d                             j        }                     ||          }t          t          g|R  }t          |j        |           t          t          g|R ddi}t                              |j                  |d           t          | }|dk    r!|
                    |j        j        d          s#n |
                    |j        j        d	          sJ t                              |j                  |j        d
d           d S )Nc                 :    g | ]}                     |          S r'   r   )r(   limitr   s     r   r*   z9TestTanhSinh.test_integral_transforms.<locals>.<listcomp>   s%    888"**U##888r   r   dtyper!   TF)check_dtypereal floatingzcomplex floating缉ؗҜ<)r   r   )r   floatr   r   r   r   integralr"   r   r   isdtyper{   )rC   limitsry   r   r   r2   logresxp_tests      `    r   test_integral_transformsz%TestTanhSinh.test_integral_transforms   s9    9888888

5++,,2jjEj***6***c***;::::T::v//%HHHH!6*KNQR77 5GG77__V_%:<NOO LS77 	v|,,cieQVWWWWWWr   Tz!Cumbersome to convert everything.np_onlyr;   f_number   c                 \   t          | d|           }d}t          |d|j        |          }t          |j        |j        |           |dvrBt          |                     |j        |j                  |j        z            }||j        k     sJ |dv rd S |j        sJ |j	        dk    sJ d S )Nr4   g:0yU>r   r   >      >      
   rK   )
getattrr   r   r   r   ry   rv   r{   successstatus)rC   r   r   r4   r   r2   
true_errors          r   
test_basiczTestTanhSinh.test_basic   s     D.h..))1ac---ae$77774TZZae<<S\IJJJ	)))){""F{zQr   z#Distributions aren't xp-compatible.ry   g?g333333?casec                 \   |\  }}|dv rt          j        d           |dv r6t          t          j        dd                    st          j        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   )	rC   ry   r   r   distnameparamsdistr   r2   s	            r   test_accuracyzTestTanhSinh.test_accuracy  s    
  &AAAKJKKK<<<BImQ7788 =K?@@@'wuh''0MM#%1%%%c*****r   r-   rK      r]   r   r   r   c                    t           j                            d          }|                    |                    |                    }|                    |                    |                    }|                    |                    |                    }t	          j        |          fdd_        d_        t          |          d             }t          |||f          } ||||          }	t          |          }
g d}|D ]m|
                    fd|	D                       }t          t          |                    }t          ||d	           t          |          j        |k    sJ n|
                    |j        j        d
          sJ |
                    |j        j        d          sJ |
                    |j        j        d          sJ |
                    |j        j        d          sJ |                    |j                  j        k    sJ |                    |j                  dk    sJ |                    |j                  j        k    sJ d S )N   F*BG c                     xj         dz  c_         xj        t          |           k    s| j        dk    rdn| j        d         z  c_        | |z  S Nr   r   )ncallfevalr   ndimr-   r   pr4   ns     r   r4   z*TestTanhSinh.test_vectorization.<locals>.f   sM    GGqLGGGGWQZZ1__!qq!'"+MGGa4Kr   r   c                 ,    t          fd| |          S )Nc                     | z  S rM   r'   r   r   s    r   <lambda>zKTestTanhSinh.test_vectorization.<locals>._tanhsinh_single.<locals>.<lambda>)  s    q!t r   )r   )rS   r   r   s     `r   _tanhsinh_singlez9TestTanhSinh.test_vectorization.<locals>._tanhsinh_single'  s    ^^^^Q222r   argsr   r{   r   r   nfevr   c                 0    g | ]}t          |          S r'   )r   )r(   ry   attrs     r   r*   z3TestTanhSinh.test_vectorization.<locals>.<listcomp>1  s#    %I%I%ISgc4&8&8%I%I%Ir   V瞯<r   boolr   r   )rA   randomdefault_rngr   r    r/   r   r   r7   r   r   stackr	   r   r   r-   r   r   r   r   r   r   max)rC   r-   r   rngrS   r   r   r   r2   refsr   attrsref_attrres_attrr   r4   r   s                 @@@r   test_vectorizationzTestTanhSinh.test_vectorization  sz    i##$899JJszz%(())JJszz%(())JJszz%(())Ie	 	 	 	 	 	 	B	3 	3 
	3 1aqd+++1a((!!$$NNN 	5 	5D}}%I%I%I%ID%I%I%IJJHT 2 233HHhU;;;;3%%+u44444s{0&99999sz/<<<<<sx~z:::::s|1:>>>>>vvch17****vvcl##q((((vvcl##qw......r   c                 f   fdd_                             dj                  f}                    j        gdz            }                    j         gdz            }t          ||d|          }                    g dj                  }t          |j        |           d S )Nc                 L   xj         dz  c_         fdfdfdg}g }t          t          |                    D ]R}| |df         }t          t	          |          |                   }|                     ||         |                     S                    |          S )Nr   c                 6                         | dz             S rH   r   r   s    r   r   z4TestTanhSinh.test_flags.<locals>.f.<locals>.<lambda>D  s    rvvq!te}} r   c                 .                         |           S rM   r   r   s    r   r   z4TestTanhSinh.test_flags.<locals>.f.<locals>.<lambda>E  s    rvvayy r   c                 :                         | j                  S rM   )	full_likenanr   s    r   r   z4TestTanhSinh.test_flags.<locals>.f.<locals>.<lambda>F  s    r||Arv66 r   .)nitr.   r   r   r	   r0   r   )	xsjsfuncsr2   r,   r   jr4   r   s	          r   r4   z"TestTanhSinh.test_flags.<locals>.fB  s    EEQJEE,,,,((((66668E C72;;'' ( (q#vJQ((

858A;;''''88C== r   r   r   r   rU   )r   r   r   )	r   arangeint64r   r   r   int32r   r   )rC   r   r   rS   r   r2   	ref_flagsr4   s    `     @r   
test_flagszTestTanhSinh.test_flags?  s    
	! 
	! 
	! 
	! 
	! 
	! 		!28	,,.JJxz""JJy1}%%1a!$777JJ{{{"(J;;	
I.....r   c                    fd}                     j        gdz            }                     j         gdz            }t          |||dd          }                     g dj                  }t	          |j        |           d S )Nc                                          | d         dz                                  | d                                       | d         j                  g}                    |          S )Nr   r   r   )r   r   r   r   )r   r2   r   s     r   r4   z1TestTanhSinh.test_flags_preserve_shape.<locals>.fX  s]    661Q47(##66!A$<<<<!bf--/C 88C== r   r   rU   T)r   r   r  r   )r   r   r   r	  r   r   )rC   r   r4   rS   r   r2   r
  s    `     r   test_flags_preserve_shapez&TestTanhSinh.test_flags_preserve_shapeV  s    	! 	! 	! 	! 	! JJx!|$$JJy1}%%1a!DAAAJJ{{{"(J;;	
I.....r   c                 F   d t          fddd          }t          fd                    d                              d          d          }                    d          j        }t	          |j                            |d         |	                     d S )
Nc                    |                     |                     | |                    d| z            g          |                     |                    d| z            | |                    d| z            z  g          g          S )Nr      d   )r   rp   rO   r   s     r   r4   z+TestTanhSinh.test_preserve_shape.<locals>.ff  sw    88RXXq"&&a..&9::XXrvvb1f~~q266#'??7J&KLLN O O Or   c                 &     | t                     S rM   )rA   r   r4   s    r   r   z2TestTanhSinh.test_preserve_shape.<locals>.<lambda>j  s    1b r   r   r   c                      |           S rM   r'   )r   r4   r   s    r   r   z2TestTanhSinh.test_preserve_shape.<locals>.<lambda>k  s    !!Ar(( r   Tr           r   )r   r   r   r   r   r   )rC   r   ry   r2   r   r4   s    `   @r   test_preserve_shapez TestTanhSinh.test_preserve_shaped  s    	O 	O 	O ))))1a00*****BJJqMM2::a=='+- - -

2$bjjQuj&E&EFFFFFr   c                 \   j         }fd}                    d|          }                    d|                              d|          }}d}t          d          D ]G}t          |||d|          }	|                     |	j        |d	
          }
|
|dz  k     s|
dk     sJ |
}Hd S )Nc                 :    |                      d| z             z  S r?   r   )rD   r   s    r   r4   z(TestTanhSinh.test_convergence.<locals>.fs  s    rvva!e}}$$r   rF   r   r  r   r   r]   r   r   T)r!   r   r   g      /)float64r   r.   r   r{   r   )rC   r   r   r4   ry   rS   r   last_logerrr,   r2   logerrs    `         r   test_convergencezTestTanhSinh.test_convergencep  s    
	% 	% 	% 	% 	%jjUj++zz"Ez**BJJrJ,G,G1q 	! 	!AAq!a!<<<CZZctZCCF[1_,, KK		! 	!r   c                 (   t                              d                    fd                    t          j        dz
  dt          j        d          z  z   dz  j                  _        d}j        |z  }                    dj                  }                    dj                  }d\  _        _        t          ||          }| 
                    |j        j                  |j
        cxk     r|k     sn J |j        j        k    sJ j        |_        |j        sJ |j        d	k    sJ d\  _        _        t          |j                  }t          |||
          }j        |_        ||k    sJ d\  _        _        |dz  }|dk    sJ t          |||
          }| 
                    |j        j                  |j
        cxk     r|k    sn J |j        j        cxk    r|j        k     sn J j        |j        dz
  k    sJ |j        rJ |j        t"          j        k    sJ |}j        |_        d\  _        _        t'          j        t+          |j
                  t&          j                  }	t          ||d	|	          }|j        |j        k    sJ |j
        |j
        k    sJ |j        j        cxk    r|j        k    sn J j        |j        k    sJ |j        sJ |j        d	k    sJ d\  _        _        t'          j        t+          |j
                  t&          j                   }	t          ||d	|	          }| 
                    |j        j                  |j
        cxk     r|	k     sn J |j        j        cxk    r|j        k    sn J j        |j        k    sJ |j        sJ |j        d	k    sJ d\  _        _        t'          j        t+          |j
        |j        z            t&          j                  }
t          |||
          }|j        |j        k    sJ |j
        |j
        k    sJ |j        j        cxk    r|j        k    sn J j        |j        k    sJ |j        sJ |j        d	k    sJ d\  _        _        t'          j        t+          |j
        |j        z            t&          j                   }
t          |||
          }| 
                    |j        j                  j        z  |j
        |j        z  cxk     r|
k     sn J |j        j        cxk    r|j        k    sn J j        |j        k    sJ |j        sJ |j        d	k    sJ d S )Nr   c                     xj         dz  c_         xj        t                              |                     z  c_        | dz                      |           z  S rZ   )callsr   r   r   atanr   r4   r   r   s    r   r4   z:TestTanhSinh.test_options_and_result_attributes.<locals>.f  sM    GGqLGGGGwrzz!}}---GGa4',,q//))r   r   rK   r   -q=r  )r   r   r   r   r   r   r   r   )r   r   r    r   r!   r  ry   r   r!  r   r{   r   r   r   r   r   r   eim	_ECONVERRrA   	nextafterr   r   )rC   r   default_rtoldefault_atolrS   r   ry   r   r2   r   r   r4   r   s    `         @@r   "test_options_and_result_attributesz/TestTanhSinh.test_options_and_result_attributes  s    ""**R..11	* 	* 	* 	* 	* 	* 	*
 

DGaK!dhqkk/9R?rz
RRu|+ JJrJ,,JJrJ,,  1a  zz#,..IIII\IIIIIIx17""""G	{zQ  s|$$1a(333G	czzzz  A1}}}}1a(333zz#,..IIII\IIIIIIx17----SX------w#)a-'''';zS]****, G	  |E#),,bf551aad333|s|++++yCI%%%%x17....ch......w#)####{zQ|E#),,rvg661aad333zz#,..AAAATAAAAAAx17----SX------w""""{zQ  |E#)CL"89926BB1ad+++|s|++++yCI%%%%x17....ch......w#)####{zQ|E#)CL"899BF7CC1ad+++zz#,..qu4sy7MTTTTPTTTTTTTx17----SX------w""""{zQr   torchzAhttps://github.com/scipy/scipy/pull/21149#issuecomment-2330477359r:   r   g-C6?g+=c           	         t          dd          }                    dj                  }                    dj                  }t          t          ||dt          j        |                    }t          t          |||	          }t          	                    |j
                  |j
        fi | t          	                    |j                  |j        fi | |j        |j        k    sJ d
 }fd}	                    j         j                  }                    j        j                  }t          |	||d          }t          |||          }t          j        d          5  t          	                    |j
                  |j
        fi |ddi t          	                    |j                  |j        fi |ddi d d d            n# 1 swxY w Y   |j        |j        k    sJ d S )NgC]r2<r   )r   r   r   r   g       @T)r!   r   r   c                 B    t          |            t          |           z  S rM   )r"   r   r   s    r   r4   z TestTanhSinh.test_log.<locals>.f  s    NN?8A;;..r   c                                          t          |           dz             t          |           z   j        dz  z   S )Ny                              ?)r!   r"   r   r   s    r   logfz#TestTanhSinh.test_log.<locals>.logf	  s6    66+a..2-..Q?"%"*LLr   r   rs   allr   F)dictr   r  r   r"   r    r!   r   r   r   r   r{   r   r   rA   rw   )
rC   r   r   	test_tolsrS   r   r2   ry   r4   r2  s
     `       r   test_logzTestTanhSinh.test_log  s{    e%000	 JJs"*J--JJrJ,,Qt$(4..III!QT222s|,,clHHiHHHsy))39BB	BBBx38####	/ 	/ 	/	M 	M 	M 	M 	M JJwbjJ11JJrvRZJ00a---1a   [X&&& 	/ 	/BFF3<00#, / /) / /(-/ / / /BFF39--sy / /I / /(-/ / / /	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/
 x38######s   :AG%%G),G)c                 4   fd}                     d                               j        dz            }}t          |||          }t          j        d          dz  dt          j        d          dz  z
  dz  z   }t          |j                             |                     d }                     j                                       j                   }}t          |||          }t          |j                             d                     d S )	Nc                 4                         d| z            S Nr1  r   r   s    r   r4   z$TestTanhSinh.test_complex.<locals>.f  s    66"q&>>!r   r  r]   r   r   r1  c                 L    t          |           dt          | dz            z  z   S )N              ?r   )r   r/  s    r   r4   z$TestTanhSinh.test_complex.<locals>.f&  s"    A;;hqsmm!333r   y            )r   r   r   r    rR   r   r   r   rC   r   r4   rS   r   r2   ry   s    `     r   test_complexzTestTanhSinh.test_complex  s	   	" 	" 	" 	" 	" zz"~~rzz"%'2211a  ill1n$)A,,q. 0"44bjjoo666	4 	4 	4 zz"&!!2::rvg#6#611a  bjj&9&9:::::r   r   c                   
 t                              d                    
fd
dd                    g           c
_        
_        
_                            dj                  }                    dj                  }t          
||d|          }                    
j                  }t          d|dz             D ]}dd                    g           c
_        
_        
_        t          ||          }t          
||fi |}	t          |	j        |j        d           t          |	j        |j        d|j        z  	           |	j        
j        cxk    r
j        j        d         k    sn J 
j        ||z
  dz   dz   k    sJ |	j        |j        k    sJ t!          |                    
j                             	d S )
Nr   c                    xj         dz  c_         xj        t                              |                     z  c_                            j        t          |           f          _        | dz                      |           z  S rZ   )r!  r   r   r   concatr   r	   r"  r#  s    r   r4   z%TestTanhSinh.test_minlevel.<locals>.f6  sm    GGqLGGGGwrzz!}}---GG..!#x{{!344ACa4',,q//))r   r   r   r   r  gؗҼ<r   r   )r   r   r   r!  r   r  r   sortr.   r5  r   r   r{   r   r-   r   r   )rC   r   r   rS   r   ry   ref_xr   optionsr2   r4   r   s     `       @@r   test_minlevelzTestTanhSinh.test_minlevel-  s    ""**R..11	* 	* 	* 	* 	* 	* 	* !"1bjjnn!#JJq
J++JJq
J++1a!h???QS!!aA.. 	6 	6H$%q"**R..!AGQWacHx@@@GAq!//w//CCL#,UCCCCCIsyus|7KLLLL8qw6666!#)A,6666667h1A599999:++++E7<<#4#45555	6 	6r   c           	         fd}                     j         dj         j        dj         dg          }                     j        j        dj         ddj        g          }t          j        t          j                  }                     ||dz  |dz  | |||g          }t          |||          }t          |j        |           d S )Nc                 p    j         |                     |           <                       | dz             S rH   )r   isinfr   r   s    r   r4   z/TestTanhSinh.test_improper_integrals.<locals>.fR  s.    VAbhhqkkN661a4%== r   r   i   r   )r   r   r    rR   r   r   r   r   )rC   r   r4   rS   r   ry   r2   s    `     r   test_improper_integralsz$TestTanhSinh.test_improper_integralsP  s    	! 	! 	! 	! 	! JJRVGRVS26'3GHHJJBF7BBFCDDi  jj#s1uc!ecT3SABB1a  c*****r   r   r   r   r   r   )float32r  c                    t                                        |          \  }}fd}j        k    rdnd}t          ||||          }|j        j        k    sJ |j        j        k    sJ                     |j                  sJ t          |j        
                    |          
                    |          z
             d S )Nr   c                 H    | j         k    sJ                     |           S rM   )r   r   )r   r   r   s    r   r4   z"TestTanhSinh.test_dtype.<locals>.fc  s&    7e####66!99r   r$  h㈵>r   )r   r   r  r   r   r   r{   r4  r   r   r   )	rC   r   r   r   rS   r   r4   r   r2   s	     ``     r   
test_dtypezTestTanhSinh.test_dtype\  s     E""zz&z..1	 	 	 	 	 	 ++uu1ad+++|!U****y%''''vvck"""""bffQiiq		&9:::::r   c                                          j                                        j                  }}fd}d\  }}||z
  dz   t          ||d          }t          |||fi |}|j        rJ |j        |k    sJ fdd_        d _        |d= t          |||fi |d	i}	|                                D ]M}
|
d
k    r||
         dk    sJ |	|
         dk    sJ %|	|
         j        |
         cxk    r||
         k    sn J Nd S )Nc                 6                         |  | z            S rM   r   r   s    r   r4   z-TestTanhSinh.test_maxiter_callback.<locals>.fq      661"Q$<<r   )r   r   r   r   )r   r   r   c                     xj         dz  c_         | _        t          | d          sJ | j        dk    sJ j         k    rt          d S )Nr   r   )iterr2   hasattrr   StopIteration)r2   r   maxiters    r   r   z4TestTanhSinh.test_maxiter_callback.<locals>.callback{  sZ    MMQMMHL3
+++++:????}''## ('r   r   r   r   r   r  )	r   r   r5  r   r   r   rU  r2   keys)rC   r   rS   r   r4   r   r   kwargsr2   res2keyr   rX  s    `         @@r   test_maxiter_callbackz"TestTanhSinh.test_maxiter_callbackn  s   zz26'""BJJrv$6$61	  	  	  	  	  "(X%)x(GGG1a**6**;|x''''	$ 	$ 	$ 	$ 	$ 	$ :Aq>>F>>X>>> 88:: 	B 	BCh3x2~~~~CyBCyHL$5AAAASAAAAAAA	B 	Br   c                                         j         j                  }                     j        j                  }fd}fdg _        g _        d}t          |||d|           t          |dz             D ]a}t          |||||          }t          j        d|z            |j        d	
           t          j        d|z            |j	        d	d           bd S )Nr   c                 6                         |  | z            S rM   r   r   s    r   r4   z&TestTanhSinh.test_jumpstart.<locals>.f  rS  r   c                     j                             t          | j                  d                    j                            t          | j                  d                    d S )Nr'   )	integralsr0   r
   r   errorsr{   )r2   r   s    r   r   z-TestTanhSinh.test_jumpstart.<locals>.callback  sT    %%gcl&;&;B&?@@@O""739#5#5b#9:::::r   r]   r   )r   r   r   r   r  r   r   r   r%  )
r   r   r  rb  rc  r   r.   r   r   r{   )	rC   r   rS   r   r4   r   r,   r2   r   s	    `      @r   test_jumpstartzTestTanhSinh.test_jumpstart  s(    JJwbjJ11JJrvRZJ00	  	  	  	  	 	; 	; 	; 	; 	;  !QA8LLLLx!|$$ 	U 	UAAq!a!<<<CH.qs3S\NNNNHOAaC0#)%eTTTTT	U 	Ur   c           	        
                      d                               d          }}t          ||          

fd}t          |||          }|j        sJ t	          |j                             d                     t          |||d          }|j        dk    sJ t          |j                             j                             t          |||d          }|j        dk    sJ t          |j                             j                             t          |||          }|j        sJ |j	        dk    sJ t	          |j                             d                     d }t          |||d	
          }t	          |j                             d                                          j        dddg          }                     dj        ddg          }                     ddj        dg          }t          ||||f
          }t	          |j                             j        j        j        dg                     t          |j        d d         
                    dj                             t          |j                             g dj                             t          |j                             g d                     t          |j        d d         
                    ddj                                                 d          t          _                            d          t          _        dgt          _        d t          _                             d                               d          }}t          fd||          }t	          |j                             d                     t          d ||          }t	          |j                             d                     d}t          d                      d                              |                    }g d}|D ]}	||	         j        |k    sJ d S )Nr   r   c                 B                         | j        d          sJ | S )Nr   )r   r   )r   r   s    r   r4   z*TestTanhSinh.test_special_cases.<locals>.f  s$    ??17O<<<<<Hr   r   r   r   r  c                     | |z  S rM   r'   )r   cs     r   r4   z*TestTanhSinh.test_special_cases.<locals>.f  s    a4Kr      r   g?r   r   )r  r  r  r   r   FFFTc                 4                         | dz            S r:  r   r   s    r   r   z1TestTanhSinh.test_special_cases.<locals>.<lambda>  s    "**QrT"2"2 r   r<  c                     | S rM   r'   r/  s    r   r   z1TestTanhSinh.test_special_cases.<locals>.<lambda>      ! r   rK  c                     | S rM   r'   r/  s    r   r   z1TestTanhSinh.test_special_cases.<locals>.<lambda>  rn  r   r   )r   r   r   r   r   r   r   r{   r   r   fullr   r	  r   emptyr   xjcwjindicesh0zerosr-   )rC   r   rS   r   r4   r2   rh  r-   r   r   r   s    `        @r   test_special_caseszTestTanhSinh.test_special_cases  s   zz!}}bjjmm1!!Q''	 	 	 	 	 1a  {bjjoo666 1a!,,,|a	2::bf#5#56661a!,,,|a	2::bf#5#5666 1a  {|r!!!!bjjnn555	 	 	 1ab)))bjj&6&6777 JJ1a())JJ261a())JJ1bfa())1aqd+++bjj"&"&"&#1N&O&OPPP	"1"rwwtRV'<'<===
BJJbhJ$O$OPPPRZZ0K0K0K%L%LMMM!bggdARXg&F&FGGG ((1++! czz!}}bjjmm12222Aq99bjj&8&8999Q**bjjoo666 RZZ]]BHHUOODDNNN 	, 	,Dt9?e+++++	, 	,r   )r   c                 p    t          j        dd          }d|d<   t          t           j        d|           d S )NA   r     r   r   )rA   rp  r   rp   )rC   r   r   s      r   #test_compress_nodes_weights_gh21496z0TestTanhSinh.test_compress_nodes_weights_gh21496  s6     GBNN""&!Qr   c                    t          dd          t          dd          fd}t          |                    d                              d          ddd	          }                    |j                  sJ d S )
NrK   i'   c                 F                         d| z
  z  | z  z             S r?   )rp   )rD   rS   r   r   s    r   r4   z2TestTanhSinh.test_gh_22681_finite_error.<locals>.f  s&    66!q1u+A-...r   r  r   r   r   )r   r   r   )complexr   r   isfiniter{   )rC   r   r4   r2   rS   r   s    `  @@r   test_gh_22681_finite_errorz'TestTanhSinh.test_gh_22681_finite_error  s     BBOO	/ 	/ 	/ 	/ 	/ 	/ 	/2::b>>2::b>>TVWWW{{39%%%%%%%r   )FN)=__name__
__module____qualname__rE   ry   r   rJ   rA   r   r!   rP   r   rT   rX   r\   r_   rR   r   gammara   rc   rf   rh   r   rj   rl   rn   rq   r{   r   r   markparametrizer    r   normcdfr   r8   r.   r   _distr_paramsdistcontr   tupler   r  r  r  r  r+  r7  r>  rE  rJ  rP  r^  rd  rw  r{  r  r'   r   r   r=   r=   .   s       ! ! ! BFBD% % % eai!fbfQii-'2-BFBD% % % bfRUQY!#q(BF519BD1 1 1 !^b BFBD& & & BFBD# # # UQYBFBD0 0 0 -'-"6"66u9M9MMBFBD   BFBD! ! ! eVfbfQii!#BF519BD" " " egbgajj 1$CGEAICE      eaiCGFCE' ' ' bgbennCGFCE# # # bgbeai  CGFCE& & & CGFCE   eaiCGFCE! ! ! !8; 8; 8;t []
TX8)Q8)TX	#
(TXI	$	%*..%%););;<-  X X X( [!!$)L " N N[Zq"66  76N N [!!$)N " P P[US3*$566[VU%8%ABB+ + CB 76P P+ [Wuuwwvy&IJJ&/ &/ KJ&/P/ / /./ / /
G 
G 
G! ! !s s sj [!!'O "   [VdE]33 $  $ 43  $D; ; ;& [Zq22 6  6 32 6D
+ 
+ 
+ [X48)Q!Q0H'IJJ[W&<==; ; >= KJ;  B  B  BDU U U.A, A, A,F [!!$!//    0/ & & & & &r   r=   zNo fancy indexing.zNo mutation.c                   P   e Zd Zej                            d          Ze                    ddd                                          Z	d Z
ej        dz  dz  e
_        de
_        ej        e
_         e            e
_        d Z ej        e	d          e_        d	e_        ej        e_        e	fe_        d
 Zde_        e                    ddd          e_         eej        e	          e_        e	fe_        d Zej                            d edd                    d             Zej                            dg d          d             Zej                            d e            dddg          d             Zd Z d Z!d Z"ej                            dddg          d              Z#d! Z$d" Z%ej                            d#d$d%g          d&             Z&ej                            d'd(d)g          d*             Z'ej        (                    dd+,          d-             Z)d.S )/TestNSuml   Q [ r   r   sizec                     |dz  S Nr  r'   )rC   ks     r   rE   zTestNSum.f1  s     2wr   r      c                     d||z  z  S r?   r'   rC   r  r   s      r   rJ   zTestNSum.f2      1a4xr   r   c                     d||z  z  S r?   r'   r  s      r   rP   zTestNSum.f3  r  r   rU   r   )r   r   c                    | j         }|                    |j                  |                    |j                  }}d}t	          j        t          |          5  t          d||           d d d            n# 1 swxY w Y   d}t	          j        t          |          5  t          |||d           d d d            n# 1 swxY w Y   d}t	          j        t          |          5  t          ||                    d          |           d d d            n# 1 swxY w Y   t	          j        t          |          5  t          |||                    d                     d d d            n# 1 swxY w Y   t	          j        t          |          5  t          ||||                    d          	           d d d            n# 1 swxY w Y   t	          j        t          |          5  t          |||t          d
                     d d d            n# 1 swxY w Y   t	          j        t          |          5  t          |||t          t                               d d d            n# 1 swxY w Y   t          j
        d          5  t          ||                    t          j        t          j        g          |                    d                    }|                    |j        dk    |                    |j                  z  |                    |j                  z  |j         z  |j        z  dk              sJ t          ||                    d          |                    t          j        dg                    }|                    |j        dk    |                    |j                  z  |                    |j                  z  |j         z  |j        z  dk              sJ t          ||                    d          |                    d          |                    |j        |j         |j        ddg          	          }|                    |j        dk    |                    |j                  z  |                    |j                  z  |j         z  |j        z  dk              sJ 	 d d d            n# 1 swxY w Y   d}t	          j        t          |          5  t          |||t          d                     d d d            n# 1 swxY w Y   t	          j        t          |          5  t          |||t          t          j                             d d d            n# 1 swxY w Y   d}t	          j        t          |          5  t          |||t          t          j                  d           d d d            n# 1 swxY w Y   t	          j        t          |          5  t          |||t          t          j                  d           d d d            n# 1 swxY w Y   d}t	          j        t          |          5  t          |||d           d d d            n# 1 swxY w Y   t	          j        t          |          5  t          |||d           d d d            d S # 1 swxY w Y   d S )Nr}   r~   r   r   r   r   r   r   )stepr   r   
tolerancesr   rs   r3  r   r   r   g      $@r   r   r   T)r  r!   z"...must be a non-negative integer.g      @maxtermsr  )rE   r   rS   r   r   r   r   r   r5  rA   rw   r   r   r4  r   isnansumr{   r   r   )rC   r   r4   rS   r   r   r2   s          r   r   zTestNSum.test_input_validation!  s
   Gzz!#

131)]:W555 	 	QNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 .]:W555 	! 	!Aqa    	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! -]:W555 	) 	)BJJt$$a(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)]:W555 	) 	)Arzz$''(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)]:W555 	1 	1Aqrzz$//0000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1]:W555 	8 	8AqTv%6%6%67777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8]:W555 	8 	8AqTv%6%6%67777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 [X&&& 
	P 
	Pq"**bfbf%566

2GGC663:+rxx/@/@@HHSY//036;,?ADJMNO P P P P Pq"**S//2::rvqk+B+BCCC663:+rxx/@/@@HHSY//036;,?ADJMNO P P P P Pq"**R.."**S//JJQ'GHHJ J JC663:+rxx/@/@@HHSY//036;,?ADJMNO P P P P P P
	P 
	P 
	P 
	P 
	P 
	P 
	P 
	P 
	P 
	P 
	P 
	P 
	P 
	P 
	P 8]:W555 	4 	4AqTr]]]3333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4]:W555 	8 	8AqTrv%6%6%67777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 5]:W555 	B 	BAqTrv%6%6%6DAAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B]:W555 	B 	BAqTrv%6%6%6DAAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 7]:W555 	( 	(Aq3''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(]:W555 	' 	'Aq2&&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   A77A;>A;B??CC'%DDD>%E//E36E3'GGG."HH #H 'I55I9<I9H3SSS="T++T/2T/,V		VV1-W**W.1W.-Y		YY1ZZZ7[[[r   r]   c                 ,                        d          j        }t          | d|                                j                                       j                  }}t          fdj        D                       }                     j        |          }t          |||          }t          |j
        |           t          |j                            |j        j                             t!          |          }	t          |j                            |j        |	j                             t)          j        d          5  t          fd||d	|
          }
d d d            n# 1 swxY w Y   t                              |
j
                  |j
                   t                              |
j                  |j        d           t          |
j        |j                   t          |
j        |j                   d S )Nr   r4   c              3   B   K   | ]}                     |          V  d S rM   r   )r(   argr   s     r   	<genexpr>z&TestNSum.test_basic.<locals>.<genexpr>\  s-      77RZZ__777777r   r   r   rs   rt   c                  4                          |            S rM   r   )r   r4   r   s    r   r   z%TestNSum.test_basic.<locals>.<lambda>e  s    qq$x(8(8 r   T)r!   r   r   r   )r   r   r   rS   r   r  r   ry   r   r   r  r   r   rv  r-   r	  r   r   onesr   rA   rw   r   r{   )rC   r   r   r   rS   r   r   ry   r2   r   r   r4   s     `        @r   r   zTestNSum.test_basicW  s   

2$D.h..))zz!#

131777777777jjej,,1a&&&%%%
BHHSYbhH$G$GHHH!!$$RWWSYglW%K%KLLL[))) 	6 	688888aT6 6 6F	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	vz**CG444v|,,cieDDDDsz22244444s   E99E= E=r  )r   r   r   rI  r  c                 ,   | j         }fd}d }                    ddgj                  d d j        f         }                    ddj        gj                  d d j        j        f         }                    g dj                                      d	          }                    ||z
  |z            }	|}
||	|z  z   }|||z  z   }                     ||                    |          |z  z             d
d          } ||           ||          z
  |z  }||z    ||          z   }||z    ||          z   }||z   dz  }||z
  dz  }t          |          }|
                    |||          \  }}}t          j        |j                  D ]}t          ||                   t          ||                   t          ||                   }}}||z
  |z  dz   |k    rg                     |                    |||z   |j                                      }|||<   |                    |j                  j        z  ||<   d}t%          |||
||t'          |                    }t)          |j        |d|z             t)          |j        |d|z             |
|z
  |z  dz   |k    }t)          |j        |         ||         d           t)          |j        |         ||         d           t%          |||
|dt'          t-          j        |                    |          }t)                              |j                  |j                   t)                              |j                  |j                   d S )Nc                 4    d                     |           z  S r  r   r   s    r   r2  z$TestNSum.test_integral.<locals>.logfq  s    bffQii<r   c                     d| z  S )Nr   r'   r/  s    r   Fz!TestNSum.test_integral.<locals>.Ft  s    6Mr   r   rU   r   rI  r  )r   r   r   )r   r   r   r   r   T)axiskeepdimsr   r$  r   )r  r  r  r   r   )r  r!   r  r  )rE   r   r  newaxisr   reshapefloorr  r  r   broadcast_arraysrA   ndindexr-   r   finfor   epsr   r5  r   r{   r    r!   r   )rC   r  r   r4   r2  r  rS   r   r  nsteps
b_originalr  directr   lowhighref_sumref_errr   r,   aibistepir   r2   r   s     `                       r   test_integralzTestNSum.test_integrall  s    G	  	  	  	  	 	 	 	 JJ1vRZJ00BJ?JJC(
J;;AAArz2:<UVzz+++RZz88@@OO1q5$,''
tO!bii11$6677b4PPAaDD11Q44K%x!!A$$& 11Q44':q.#:q. "!$$--aD99
1dAG$$ 	A 	AA!!A$KKqteDGnnEBR"h.."))B5%rz)"R"R S STT#
#bhhv|&<&<&@@
1a$"ooo/ / /r$w7777	7T::::1nd"Q&(2
GAJU;;;;	!gaju====dAz$!%48D>>!:!:!:XO O Ovz**CG444v|,,ci88888r   r-   r   r   r   c           	      r   t           j                            d          }|                    dd|          }t           j        }|                    |          dz   }t          j        |          fdd_        t           j        d             }t          
                    |          
                    |          d
                    |          f	          } ||||d
                                          }	g d}
|
D ]`fd|	D             }t          |          }t          t          |          
                    |          d           |j        |k    sJ at!          
                    d                    }|                    |j        j        d          sJ |                    |j        j        d          sJ |                    |j        j        d          sJ t-                    r2t/                              |j                            j        k    sJ d S d S )Nr   r   r   r  c                 z    xj         | j        k    s| j        dk    rdn| j        d         z  c_         d| |z  z  S r   )r   r  r   r-   r   s     r   r4   z&TestNSum.test_vectorization.<locals>.f  s?    GGQVq[[AFaKKqqagbkIGGqAv:r   r   c                 0    t          fd| ||          S )Nc                     d| z  z  S r?   r'   r   s    r   r   zBTestNSum.test_vectorization.<locals>.nsum_single.<locals>.<lambda>  s    !ad( r   r  )r   )rS   r   r   r  s     ` r   nsum_singlez0TestNSum.test_vectorization.<locals>.nsum_single  s$    ****Aq8DDDDr   rz  )r  r   r  )r  r{   r   r   r   c                 V    g | ]%}                     t          |                    &S r'   )r   r   )r(   ry   r   r   s     r   r*   z/TestNSum.test_vectorization.<locals>.<listcomp>  s/    GGG3

73#5#566GGGr   r   r   r   r   r   )rA   r   r   integersr   r    r/   r   	vectorizer   r   ravelr   r   r	   r-   r   r   r   r   r   r   r   r   r   )rC   r-   r   r   rS   r   r   r  r2   r   r   r   r   r   r   r4   r   s     `           @@@r   r   zTestNSum.test_vectorization  sL    i##$899LLBUL++ FJJu!Ie	 	 	 	 	 	 		E 	E 
	E 1bjjmmRZZ]]TA(* * *{1aT22288::=== 	+ 	+DGGGGG$GGGHsD))HHX..

80D0D5QQQQ>U*****!"**R..11s{0&99999sz/<<<<<sx~z:::::B<< 	4rvvch''((AG3333	4 	433r   c                 :   | j         }g d}|                    dddddt          j        g|j                  }|                    dt          j        t          j        t          j        t          j        t          j        g|j                  }t          j        |d          }|                    ||j                  }t          j        d          5  t          ||||f          }d d d            n# 1 swxY w Y   |                    g d	          }|                    g d
|j
                  }	t          |j        |           t          |j        |	           t          |j        |j                 |                    |          |j                            d S )N)r   r   g?g?r   r   r   r   r   r   rs   rt   r   )FFFFTF)r  r  r  rY  r   r   )rJ   r   rA   r   r  r   r   zetarw   r   r	  r   r   r   r   r  )
rC   r   r4   r   rS   r   ry   r2   ref_success
ref_statuss
             r   test_statuszTestNSum.test_status  s   G"""JJ1aArv.bjJAAJJBFBFBFBFBFC2:JVVl1a  JJq
J++[))) 	+ 	+q!QaT***C	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ jj!J!J!JKKZZ 7 7 7rxZHH
[111
J///,bjjoock.JKKKKKs   C33C7:C7c                 |   fdd_         t          |                    d          |                    d                    }|j         j         k    sJ d_         t          |                    d          |                    |j                  t	          d                    }|j         j         k    sJ d S )Nc                 N    xj         t          |           z  c_         d| dz  z  S rZ   )r   r   r  s    r   r4   zTestNSum.test_nfev.<locals>.f  s&    FFgajj FFq!t8Or   r   r   r   ư>r   r  )r   r   r   r   r5  )rC   r   r2   r4   s      @r   	test_nfevzTestNSum.test_nfev  s    	 	 	 	 	 1bjjmmRZZ^^44x16!!!!1bjjmmRZZ%7%7DdOOOTTTx16!!!!!!r   c           	         |                     ddg          }|                     |j                  }t          d ||dt          d                    }t          d ||          }|                    |j        |j        |j        z
  k              sJ |                    |j        |j        |j        z   k               sJ d S )	Nr   r]   c                     d| dz  z  S rZ   r'   r  s    r   r   z)TestNSum.test_inclusive.<locals>.<lambda>      QaZ r   i  g?r   )r  r  c                     d| dz  z  S rZ   r'   r  s    r   r   z)TestNSum.test_inclusive.<locals>.<lambda>  r  r   )r   r   r   r5  r4  r  r{   )rC   r   rS   r   r2   ry   s         r   test_inclusivezTestNSum.test_inclusive  s     JJ1vJJrv''ADcNNN< < <''A..vvcg39!4566666vvcg39!456666666r   r!   TFc                 Z                        dt          j         t          j         g          }                     t          j        dt          j        g          }                     g d          }fd}t          ||||f          }                     t          j                            dd          t          j                            dd          dg          }r                    |          n|}r|j        j	        k    rdnd	nd}	t          |j                             ||j        
          |	           fd}                     dt          j         g          }                     t          j        dg          }                     ddg          }
t          ||||
f          }r&t          j        t          j        d                    nt          j        d          }t          |j                            |j        ||j        
                     d S )Nr   r   )r   r   r   c                    rD                                         |dz                      |                    |           z  z
  nD                    |dz                                |                     |           z            z  S rH   )r!   tanhrv   r   )r   rS   r!   r   s     r   r4   z(TestNSum.test_infinite_bounds.<locals>.f  st    <? =BFF2771q5>>**Qrvvayy[881r"&&))|(<(<<>r   )r   r!   r   r   g|=rO  r   r   c                 T    rd                     || z            z  n
d|| z  dz  z  S )Nr  r   r   r   )r   rh  r!   r   s     r   r4   z(TestNSum.test_infinite_bounds.<locals>.f  s0    %(:2bffQqSkk>>a1Q3(l:r   r   )r   rA   r   r   r   dlaplacesfr!   r   r  r   r  r   r  rp  r-   )rC   r!   r   rS   r   rh  r4   r2   ry   r   r  s    ``        r   test_infinite_boundszTestNSum.test_infinite_bounds  s   JJBF7RVG,--JJBF+,,JJyyy!!	> 	> 	> 	> 	> 	> 1a!3///jj%.++Aq115>3D3DQ3J3JANOO )bffSkkkc;>E"*,,$$ACqw!?!?dKKKK	; 	; 	; 	; 	; 	; JJBF7|$$JJ|$$jj!R!!1a#S111),AbfW\!__%%%',q//#QW!E!EFFFFFr   c                    fd}                     dj                                       t          j        j                  }}t	          |||          }                     dj                  }t          |j        |d           d S )Nc                 6                         | dz             S rH   r   r   s    r   r4   z)TestNSum.test_decreasing_check.<locals>.f  s    6616'??"r   ir   gtfԸ\?r   r   )r   r  rA   r   r   r   r  r=  s    `     r   test_decreasing_checkzTestNSum.test_decreasing_check  s    	# 	# 	# 	# 	# zz#RZz00"**RV2:*2V2V11amm jj*"*j==5111111r   c           	      d   | j         }|                    d          x}}t          |||          }t          |j        |                     |d                               t          | j        |                    d          |                    t          j                  |                    d                    }t          |j        |                    | j         j	                             |
                    d          }|
                    d          }|
                    d          }t          j        |j        |j        |j                  }t          | j        |||f          }|j        j        |k    sJ |j        j        |k    sJ |j        j        |k    sJ d }t          ||                    d          |                    d	          d
          }|                    |j                  sJ |                    |j                  sJ |j        dk    sJ t          ||                    d          |                    d	          d
          }|                    |j                  sJ |                    |j                  sJ |j        dk    sJ |                    |j        dddg          }|                    |j        |j        |j        |j        g          }|                    dd|j        dg          }t          | j        |||f          }t          |j        |                    |j        |j        |j        | j         j	        g                     t          |j        d d         |                    d|j                             t          |j        |                    g d|j                             t          |j        |                    g d                     t          |j        d d         |                    dd|j                             d S )Nr   r   r   )r   r   r   )r   r   r]   c                 j    t          j        d          5  d| z  cd d d            S # 1 swxY w Y   d S )Nrs   rt   r   )rA   rw   r/  s    r   r4   z%TestNSum.test_special_case.<locals>.f:  s    H---  1u                 s   (,,r   r   r  r  r  r   rj  )r   r   r  r   r   rk  )r   )rE   r   r   r   r  rJ   rA   r   r   ry   rq  broadcast_shapesr-   r   r   r  r{   r   rp  r	  r   )rC   r   r4   rS   r   r2   r   r-   s           r   test_special_casezTestNSum.test_special_case$  s   G

1A1ammAAaDD!1!1222 47BJJqMM2::bf+=+=BJJqMMRRRDGK!8!8999 HHYHHVHHQKK#AGQWag>>47Aqt,,,w}%%%%z5((((x~&&&&	 	 	 1bjjmmRZZ^^a@@@xx     xx	"""""zR1bjjmmRZZ^^a@@@xx     xx	"""""zR JJ1a())JJ788JJ1bfa())47Aqt,,,RVRVRVTW[,Q!R!RSSS	"1"rwwtRV'<'<===
BJJbhJ$O$OPPPRZZ0K0K0K%L%LMMM!bggdARXg&F&FGGGGGr   r   rL  r  c                    t                    fd}                    d          }                    dj        g          }t          |||          }|j        j        k    sJ |j        j        k    sJ j        k    rdnd}t          t          j        dj        g          d          }t          |j                            |          |           d S )	Nc                 X    | j         k    sJ d|                     d          z  z  S )Nr   r   r   )r   r   )r  r   r   s    r   r4   zTestNSum.test_dtype.<locals>.fY  s6    7e####qBJJqJ66666r   r   r   r   r$  r  r   r   )r   r   r   r   r  r   r{   r  r   rA   r   )	rC   r   r   r4   rS   r   r2   r   ry   s	    ``      r   rP  zTestNSum.test_dtypeU  s    E""	7 	7 	7 	7 	7 	7 JJqJ&&JJBF|5J111ammw}%%%%y%''''++uu
B< 8 8!<<Cu!=!=DIIIIIIr   r   )r   r  )r  r   c                 
   |\  }}d }t           j        }d}|||z  z   }t          j        dd          }	||	t          j        |          z  z   }
t          j        |
|z
  |z            }t          t          |                    dk    sJ |                    ||j                  |                    |
|j                  }
}|                    ||j                  |                    ||j                  }}t          |||
||          }t          |                    |          dk    |                    |j                  dk               t          |j        d	         |j        d          ||          z              d S )
Nc                     d| dz  z  S rZ   r'   r  s    r   r4   z.TestNSum.test_nondivisible_interval.<locals>.fn  s    qAv:r   gUUUUUU?r  r   r   r   )r  r  r   r   )rA   er  spacingr  lensetr   r  r   r   diffr  r   )rC   r   r   r   r  r4   rS   r  b0r,   r   nsr2   s                r   test_nondivisible_intervalz#TestNSum.test_nondivisible_intervalg  se   
 8	 	 	 DT\Ib!RZ^^##Xq1un%%3r77||q    zz!2:z..

1BJ
0O0O1::d"*:55rzz"BJz7W7Wb1a999a)9)9A)=>>>SWQZ!!B%%%788888r   zNeeds beta function.r   c                 Z   t           j                            dd          }d }t          j        d          5  t          j         |t          j                            sJ 	 d d d            n# 1 swxY w Y   t          |dt          j                  }t          |j	        |           d S )Nr]   rU   c                 N    t           j                            | d          | dz  z  S )NrU   r]   )r   	yulesimon_pmfr/  s    r   r4   z0TestNSum.test_logser_kurtosis_gh20648.<locals>.f  s#    ?''1--144r   rs   )invalidr   )
r   r  momentrA   rw   r  r   r   r   r  )rC   r   ry   r4   r2   s        r   test_logser_kurtosis_gh20648z%TestNSum.test_logser_kurtosis_gh20648  s     o$$Q**	5 	5 	5 [*** 	' 	'8AAbfII&&&&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 1a  %%%%%s   *A00A47A4N)*r  r  r  rA   r   r   r   uniformtolistr   rE   r   ry   rS   r   r   r  r   rJ   r   r  rP   r  r   r   r   r  r  r.   r   r  r   r  r  r  r  r  r  rP  r  r8   r  r'   r   r   r  r    s       
 )

 3
4
4CAr##**,,A  
 UAXaZBFBD6BDeggBG   W\!QBFBD6BDdBG   BD<<2F<++BDrtQ''BFdBG4' 4' 4'l [Zq!555 5 655( [Z)<)<)<==19 19 >=19f [Wuuwwvy&IJJ&4 &4 KJ&4PL L L$" " "	7 	7 	7 [UT5M22G G 32G42 2 2,/H /H /Hb [Wy)&<==J J >=J" [Vi%;<<9 9 =<9. [!!$7M!NN& & ON& & &r   r  rM   )*r   r   r    numpyrA   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"   r7   r  usefixturesr8   r=   r  r'   r   r   <module>r     s   				       ) ) ) ) ) ) / / / / / / 6 6 6 6 6 6 6 6 6 H H H H H H H H W W W W W W W W W W W W W W                 A A A A A A A A A A 1 1 1 1 1 1 : : : : : :. . . .+ + + +
  $ +,,J    D   F& F& F& F& F& F& F&   -, F&R +,,09MNNk.AAH& H& H& H& H& H& H& BA ON -, H& H& H&r   