U
    -eO                     @   s  d Z ddlZddlmZ ddlmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZmZmZmZ ddlmZm Z  edd Z!ed	d
 Z"edd Z#edd Z$edd Z%edd Z&edd Z'edd Z(edd Z)edd Z*edd Z+edd Z,edd  Z-ed!d" Z.ed#d$ Z/ed%d& Z0ed'd( Z1ed)d* Z2ed+d, Z3ed-d. Z4ed/d0 Z5ed1d2 Z6ed3d4 Z7ed5d6 Z8ed7d8 Z9ed9d: Z:ed;d< Z;ed=d> Z<ed?d@ Z=edAdB Z>edCdD Z?edEdF Z@edGdH ZAedIdJ ZBedKdL ZCedMdN ZDedOdP ZEedQdR ZFedSdT ZGedUdV ZHedWdX ZIedYdZ ZJed[d\ ZKed]d^ ZLed_d` ZMedadb ZNdS )czU
Algorithmic implementations for generating different types
of random distributions.
    N)register_jitable)	wi_double	ki_doubleziggurat_nor_r	fi_doublewi_floatki_floatziggurat_nor_inv_r_fziggurat_nor_r_ffi_float	we_double	ke_doubleziggurat_exp_r	fe_doublewe_floatke_floatziggurat_exp_r_ffe_float	INT64_MAXziggurat_nor_inv_r)next_double
next_floatnext_uint32next_uint64)float32int64c                 C   s
   t | S N)nplog1px r!   ^/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/numba/np/random/distributions.pynp_log1p   s    r#   c                 C   s   t t| S r   )r   r   r   r   r!   r!   r"   	np_log1pf   s    r$   c                 C   s   |t dt|   S N       @)r   sqrtrandom_standard_exponential)bitgenmoder!   r!   r"   random_rayleigh$   s    r+   c                 C   s
   t | S r   )r   expm1r   r!   r!   r"   np_expm1)   s    r-   c                 C   s   t | }|d@ }|dL }|d@ }|d? d@ }|t|  }|d@ rF| }|t| k rV|S |dkrt tt|   }tt|   }|| || kr^|d? d@ rt|  S t| S q^q t|d  t|  t|  t|  t	d| | k r |S q d S )N         l    r   g      )
r   r   r   r   r   r   r   r   r   expr)   ridxsignZrabsr    Zxxyyr!   r!   r"   random_standard_normal.   s2    
r7   c                 C   s  t | }|d@ }|d? d@ }|d? d@ }tt|t|  }|d@ rJ| }|t| k rZ|S |dkrtt tt|   }ttt|   }t|| t|| krb|d? d@ rtt|  S tt| S qbq t|d  t|  t|  t|  tt	
td | | k r |S q d S )Nr.   r/   r0   	   i r         ?)r   r   r   r   r	   r$   r   r
   r   r   r1   r2   r!   r!   r"   random_standard_normal_fK   s0    r:   c                 C   s   t | }|dL }|d@ }|dL }|t|  }|t| k r<|S |dkrVttt|   S t|d  t|  t|  t|  t| k r |S q d S )N   r.   r/   r   r0   )	r   r   r   r   r#   r   r   r   r1   r)   rir4   r    r!   r!   r"   r(   g   s    
r(   c                 C   s   t | }|dL }|d@ }|dL }tt|t|  }|t| k rD|S |dkrfttttt|   S t|d  t|  t|  t|  tt	t| k r |S q d S )Nr0   r.   r/   r   )
r   r   r   r   r   r$   r   r   r   r1   r<   r!   r!   r"   random_standard_exponential_fy   s"    r>   c                 C   s   t t|   S r   )r#   r   r)   r!   r!   r"   random_standard_exponential_inv   s    r@   c                 C   s   t tdt|   S N      ?)r   logr   r   r?   r!   r!   r"   !random_standard_exponential_inv_f   s    rD   c                 C   sL  |dkrt | S |dkrdS |dk rt| }t | }|d| kr\t|d| }||kr|S q$td| |  }td| ||  d| }||| kr$|S q$n|d }dtd|  }t| }d||  }|dkrqq|| | }t| }|dd||  ||   k r|| S t|d| | |d| t|   k r|| S qd S )NrB           r0   UUUUUU?r8   m{?r9   )r(   r   powr   rC   r'   r7   )r)   shapeUVXYbcr!   r!   r"   random_standard_gamma   s6    ,rP   c           	      C   s  t d}t |}||kr t| S |t dkr4t dS ||k rt| }t| }||| kr|t t|t || }||kr|S q<t tt || |  }t t|| t ||  t || }||| kr<|S q<n||t d  }t |t tt d|  }t t| }t |||  }|t dkr q2q t || | }t| }||t d||  ||   k rxt || S t|t d| | ||| t|   k r t || S q d S )NrB   rE         @g      "@rG   r9   )r   r>   r   rH   r   rC   r'   r:   )	r)   rI   Zf32_onerJ   rK   rL   rM   rN   rO   r!   r!   r"   random_standard_gamma_f   sB    
"
rR   c                 C   s   |t |  }|| S r   r7   r)   locscaleZscaled_normalr!   r!   r"   random_normal   s    rW   c                 C   s   t |t|  }t || S r   )r   r:   rT   r!   r!   r"   random_normal_f   s    rX   c                 C   s   |t |  S r   )r(   )r)   rV   r!   r!   r"   random_exponential   s    rY   c                 C   s   |t |  }|| S r   r   )r)   lowerrangeZscaled_uniformr!   r!   r"   random_uniform   s    r]   c                 C   s   |t | | S r   rP   r)   rI   rV   r!   r!   r"   random_gamma   s    r`   c                 C   s   t |t| | S r   )r   rR   r_   r!   r!   r"   random_gamma_f  s    ra   c              	   C   s   |dkr|dkrt | }t | }t|d| }t|d| }|| }|dkr|dkr|| dkrh|| S t|| }t|| }	t||	}
||
8 }|	|
8 }	t|tt|t|	  S qn t| |}t| |}|||  S d S )NrB   rE   r   )r   rH   r   rC   minr1   rP   )r)   arN   rJ   rK   rL   rM   ZXpYZlogXZlogYZlogMZGaZGbr!   r!   r"   random_beta  s$    
(

rd   c                 C   s   dt | |d  S r%   r^   )r)   dfr!   r!   r"   random_chisquare!  s    rf   c                 C   s   t | || t | ||  S r   )rf   )r)   dfnumdfdenr!   r!   r"   random_f&  s    ri   c                 C   s   t | t |  S r   rS   r?   r!   r!   r"   random_standard_cauchy,  s    rj   c                 C   s   t t| | S r   )r-   r(   r)   rc   r!   r!   r"   random_pareto1  s    rl   c                 C   s   |dkrdS t t| d| S NrE   rB   )rH   r(   rk   r!   r!   r"   random_weibull6  s    rn   c                 C   s   t tt|   d| S rA   )rH   r-   r(   rk   r!   r!   r"   random_power=  s    ro   c                 C   s`   t | }|dkrt | }q|dkr>||td| |   }n|dkr\||t||   }|S )Nr   r9   r&   rE   r   r   rC   r)   rU   rV   rJ   r!   r!   r"   random_laplaceB  s    
rr   c                 C   s4   t | }|dkrt | }q||t|d|    S rm   rp   rq   r!   r!   r"   random_logisticN  s    
rs   c                 C   s   t t| ||S r   )r   r1   rW   )r)   meansigmar!   r!   r"   random_lognormalV  s    rv   c                 C   s2   t | }t| |d }t|d | t| S )N   )r7   rP   r   r'   )r)   re   numdenomr!   r!   r"   random_standard_t[  s    rz   c                 C   sr   |d|  }t | }|| | }|||td| | ||     }t| }||||  krb|S || | S d S )Nrw      )r7   r   r'   r   )r)   rt   rV   Zmu_2lrM   rL   rJ   r!   r!   r"   random_waldb  s    &r|   c                 C   sB   d}| }}d| }t | }||kr>||9 }||7 }|d }q|S )Nr0   rB   rZ   )r)   prL   sumprodqrJ   r!   r!   r"   random_geometric_searcho  s    
r   c                 C   s   t t|  t |  S r   )r   ceilr(   r   r)   r}   r!   r!   r"   random_geometric_inversion|  s    r   c                 C   s    |dkrt | |S t| |S d S )NrF   )r   r   r   r!   r!   r"   random_geometric  s    
r   c                 C   s   |d }t d|}dt|  }t| }tt |d| }|tks|dk rLqt dd|  |}|| |d  |d  || kr|S qd S )NrB   r&   g      )rH   r   r   floorr   )r)   rc   Zam1rN   rJ   rK   rL   Tr!   r!   r"   random_zipf  s    
 r   c           
      C   sh   || }|| }|| }|| }|| | }t | }	|	|krN|t|	|  S |td|	 |  S d S rA   )r   r   r'   )
r)   leftr*   rightbaseZleftbaseratioZleftprodZ	rightprodrJ   r!   r!   r"   random_triangular  s    r   c           	   
   C   s   ddddddddd	d
g
}| dks(| dkr,dS | dk rBt d|  }nd}| | }d| d|  }d}|d }tddD ]}||9 }||d|  7 }qt|| d|  |d t|  | }| dk rtd|d D ]}|t|d  }|d }q|S )NgUUUUUU?gllfgJ?g88Cg$+K?g<ٰj_gAAz?gSˆBg8?g5gGrB   r&   rE   g      @   r   gdg?r8   r/   r9   r0   )intr\   r   rC   )	r    rc   nZx0x2Zlg2piZgl0kglr!   r!   r"   random_loggam  s8        &
r   c                 C   s@   t | }d}d}t| }||9 }||kr6|d7 }q|S qd S )Nr   rB   r0   )r   r1   r   )r)   lamZenlamrL   r   rJ   r!   r!   r"   random_poisson_mult  s    
r   c                 C   s
  t |}t |}dd|  }dd|  }dd|d   }dd	|d
   }t| d }t| }	dt | }
td
| |
 | | | d }|
dkr|	|kr|S |dk sL|
dk r|	|
krqLt |	t | t ||
|
  |  | ||  t|d  krL|S qLd S )Ngn?g=
ףp=@gh|?5g[	m?g$~?gr?g333333@gr鷯?gB>٬@rw   r9   gQ?gQ?r   g9v?r0   )r   r'   rC   r   fabsr   r   )r)   r   ZslamZloglamrN   rc   ZinvalphaZvrrJ   rK   usr   r!   r!   r"   random_poisson_ptrs  s$    

 (r   c                 C   s,   |dkrt | |S |dkrdS t| |S d S )N
   r   )r   r   )r)   r   r!   r!   r"   random_poisson  s
    
r   c                 C   s   t | |d| | }t| |S )Nr0   )r`   r   )r)   r   r}   rM   r!   r!   r"   random_negative_binomial  s    r   c                 C   sz   t |rt jS |dkr"t| |S d|k rVt| |d }t| t | }|||  S t| |d }t| |d|  S d S )Nr   r0   r&   rw   )r   isnannanrf   r7   r'   r   )r)   re   noncZChi2r   ir!   r!   r"   random_noncentral_chisquare  s    

r   c                 C   s"   t | ||| }|t| ||  S r   )r   rf   )r)   rg   rh   r   tr!   r!   r"   random_noncentral_f  s    r   c                 C   s   t | }t| }||krdS t| }t||  }||| kr|ttdt|t|  }|dk s
|dkrxq
n|S ||krdS dS q
d S )Nr0   rE   rw   )r#   r   r   r,   r   r   rC   )r)   r}   r3   rK   rJ   r   resultr!   r!   r"   random_logseries  s    
"r   c           '      C   sB  t |d| }d| }|| | }tt|}ttdt|| |  d|  d }|d }|| }	|| }
ddd|   }||	 ||	|   }|d|d   }|
| |
|  }|d|d   }|dd|   }|||  }|||  }d	}d
 }}|d	krX|| | }t| | }t| }||kr6d}qtt|||  | }d}qq|dkr||krrd}q|	|| |  }|| d t|| d |  }|dkrd	}qtt|}d}qq|dkr2||krd}qtt|	t||  }|d
k s|dkrd	}q|||  | }d}qq|dkrtt|
t||  }||ksl|dkrrd	}q|||  | }d}qq|dkr\t|| }|dkr||d d k rd}q|| }||d  }d}||k rt	|d |d D ]}||| |  }qn4||krDt	|d |d D ]}||| |  }q,||krTd	}qd}qq|dkr|| ||d d  d | d  }| | d|  }t|}||| k rd}q||| krd	}q|d }|d } |d | }!|| d }"|| }#| |  }$|!|! }%|"|" }&||t| |  || d t|!|"   || t|"| ||    ddddd|$  |$  |$  |$  |  d  ddddd|%  |%  |%  |%  |! d  ddddd|#  |#  |#  |#  | d  ddddd|&  |&  |&  |&  |" d  kr<d	}qq|dkr|dkr8|| }|S qd S )NrB   g(\@gffffff@r9   gx&?g     4@g.@r&   r   r      <      2   (   rE   r0   4   rQ   g      ?gUUUUUU?rw   g     @g     |@g     `@g     X@g     a@g    MAg     1@)
rb   r   r   r   r'   r   r   rC   absr\   )'r)   r   r}   r3   r   fmmp1ZxmZxlZxrrO   rc   ZlamlZlamrp2Zp3Zp4caseyr   Znrquvr    sFr   rhor   Ax1f1zwr   f2Zz2Zw2r!   r!   r"   random_binomial_btpe2  s   ,



"









,

r   c           
      C   s   d| }t |t | }|| }t||dt || d   }d}|}t| }	|	|kr|d }||kr~d}|}t| }	qT|	|8 }	|| d | | ||  }qT|S )NrB   g      $@r0   r   )r   r1   rC   rb   r'   r   )
r)   r   r}   r   qnZ_npboundrL   ZpxrJ   r!   r!   r"   random_binomial_inversion  s      
r   c                 C   sz   |dks|dkrdS |dkrB|| dkr4t | ||S t| ||S n4d| }|| dkrf|t | || S |t| || S d S )Nr   rE   r9   g      >@rB   )r   r   )r)   r   r}   r   r!   r!   r"   random_binomial  s    r   )O__doc__numpyr   Znumba.core.extendingr   Znumba.np.random._constantsr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   Znumba.np.random.generator_corer   r   r   r   Znumbar   r   r#   r$   r+   r-   r7   r:   r(   r>   r@   rD   rP   rR   rW   rX   rY   r]   r`   ra   rd   rf   ri   rj   rl   rn   ro   rr   rs   rv   rz   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r!   r!   r"   <module>   s   T











%
)























!


	




w
