a
    Qe                     @   s   d Z ddlmZ ddlZddlmZ ddlZddlmZ zddl	Z
W n eyV   Y n0 dZeddd	d
 ZdddZdd Zedkre  dS )zCompute a grid of values for Wright's generalized Bessel function
and save the values to data files for use in tests. Using mpmath directly in
tests would take too long.

This takes about 10 minutes to run on a 2.7 GHz i7 Macbook Pro.
    )	lru_cacheN)time)	mpf2float9B.@順 )maxsizec                 C   s8   t | t | W  d    S 1 s*0    Y  d S )N)mpworkdpsZrgamma)xdps r   `/var/www/sunrise/env/lib/python3.9/site-packages/scipy/special/_precompute/wright_bessel_data.pyrgamma_cached   s    r   2     c                    s   t d t  t t    t j fdddt jgd|gd}t|W  d   S 1 st0    Y  dS )zHCompute Wright's generalized Bessel function as Series with mpmath.
    c                    s&   |  t |  t |   d S )N)r   )r   Zfacr   )kabr   r
   r   r   <lambda>#   s   z"mp_wright_bessel.<locals>.<lambda>r   s)ZtolmethodZstepsN)r   r	   ZmpfZnsuminfr   )r   r   r
   r   maxtermsresr   r   r   mp_wright_bessel   s    "r   c                  C   s  t  } tt tjt}tt	j
d }t|dd|  ddd|  dd|  ddd|  dddd|  ddd|  ddd	d
dg}td|ddddddddg
}td|d| dd| dd| dd| d| dd| dd|  ddd|  dd|  ddd|  dtddddg}tj|||dd\}}}| }| }| }|dk |tk@  }||dk |tk@  @ }||dk |dk@  @ }||dk |dk@  @ }||dk |dk@  @ }||dk |dk@  @ }||dk |dk@  @ }||d k |d!k@  @ }||d"k |d#k@  @ }||d$k |d%k@  @ }||d&k |dk@  @ }||d'k |d(k@  @ }||d)k |d*k@  @ }||d+k |d,k@  @ }||d-k |d.k@  @ }||d/k |d0k@  @ }||d1k |d2k@  @ }||d3k |d4k@  @ }||d5k |d6k@  @ }||d5k |d6k@  @ }||d7k |d8k@  @ }||d9k |dk@  @ }tg d:g d;g d<g d=g d>g d?g d@g dAg dBg dCg dDg dEg dFg dGg dHg }tj|dItdJ}t|jD ]*}	||	 ||	 ||	 g|v rdK||	< q|| }|| }|| }|| }g }
tdL|j dM tdN t|jD ]}	||	 }||	 }||	 }dO}|dPk rX|td krXdQ}t||||dR}||	 rtdS| dT| dT| dT| dU	 n|
||||f qt|
}
tj|dVdWdXdYdZ}t||
 tt  |  d[ d\d] d S )^Nd   g-C6?   gMbP?皙?      ?      ?   g"@   
   r   绽|=h㈵>   	     g     @@g     j@g    _Bg@xDZij)Zindexingg{Gzt?g?gQ?g     @g     @gffffff?g?g    .Ag@g    cAg      @g    חAg333333@g    eAgffffff
@g@g   vH7B   g   mBg@g  @0Bg@g  ļBgffffff@g  4&kCg@g 7yACg333333@g ؅W4vCg@g NgmCg      @g =`XCg@)r   r   r   )r   r#   r   )r   r#     )r   r   r*   )r   r&   r   )r   r   r   )d     ?r&   r   )r+   r   r   )r    r   r(   )r    g      =r(   )r    r$   r(   )r    r%   r(   )r    r   r(   )r    r&   r   )r    r   r   F)ZdtypeTz
Computing z single points.z.Tests will fail for the following data points:r*   gư>r   )r   z%failing data point a, b, x, value = [z, ]z..testsdatalocalzwright_bessel.txt<   z.1fz minutes elapsed)r   print__doc__ospathdirname__file__npZfinfofloatepsarrayexp_infZmeshgridflattentolistZ	full_likeboolrangesizer   appendjoinZsavetxt)t0pwdr9   Za_rangeZb_rangeZx_rangeZbool_filterZfailingZ	does_failiZdatasetr   r   r
   r   ffilenamer   r   r   main+   s    




rH   __main__)r   r   )r2   	functoolsr   r3   r   numpyr7   Zscipy.special._mptestutilsr   Zmpmathr   ImportErrorr;   r   r   rH   __name__r   r   r   r   <module>   s    

l