U
    9%e                     @  s  d Z ddlmZ ddlZddlmZ ddlmZ ddlZddl	m
Z
mZ ddlmZmZmZ d	d
ddddddddddgZdZdd Zed(dd	Zed)dd
Zedd ZeZeZed*ddZedd Zed+ddZeed d!d"dZed,d#dZeed-d d%d&d'dZdS ).zWrapper to mimic (parts of) np.random API surface.

NumPy has strict guarantees on reproducibility etc; here we don't give any.

Q: default dtype is float64 in numpy

    )annotationsN)sqrt)Optional   )_dtypes_impl_util)array_or_scalar	ArrayLike
normalizerseedrandom_samplesamplerandomrandrandnnormalchoicerandintshuffleuniformUSE_NUMPY_RANDOMFc                   s   t   fdd}|S )Nc                    sP   t dkr | |S t dkr<ddlm} t| j}|| |S tdt  dd S )NFTr   )r   zUSE_NUMPY_RANDOM=z not understood.)r   numpyr   getattr__name__
ValueError)argskwdsnrffunc R/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/torch/_numpy/random.pyinner(   s    

zdeco_stream.<locals>.inner)	functoolswraps)r    r#   r!   r   r"   deco_stream'   s    r&   c                 C  s   | d k	rt j|  d S N)torchr   Zmanual_seed)r   r!   r!   r"   r   7   s    c                 C  s8   | d krd} t  j}tj| |d }t|| d kdS Nr!   dtypeZreturn_scalarr   default_dtypesfloat_dtyper(   emptyZuniform_r   sizer+   valuesr!   r!   r"   r   =   s
    
c                  G  s   t | S r'   )r   r2   r!   r!   r"   r   F   s                  ?c                 C  s<   |d krd}t  j}tj||d| |}t||d kdS r)   r-   )lowhighr2   r+   r3   r!   r!   r"   r   O   s
    
c                  G  s(   t  j}tj| |d}t|| d kdS )Nr*   r,   )r   r.   r/   r(   r   r   r1   r!   r!   r"   r   X   s    
c                 C  s<   |d krd}t  j}tj||d| |}t||d kdS r)   )r   r.   r/   r(   r0   Znormal_r   )locscaler2   r+   r3   r!   r!   r"   r   _   s
    
r	   )xc                 C  s&   t | jd }| | }| | d S )Nr   )r(   ZrandpermshapeZcopy_)r;   permZxpr!   r!   r"   r   h   s    c                 C  sT   |d krd}t |ttfs |f}|d kr2d|  } }tj| ||d}t|t|d kdS )Nr!   r   r4   r,   )
isinstancetuplelistr(   r   r   int)r7   r8   r2   r3   r!   r!   r"   r   p   s    
TzOptional[ArrayLike])apc           	      C  s   |   dkrt| } |d kr$d}n&t|rFd}|D ]}||9 }q6n|}|d krft| | jd  }tt|j	j
}t| d |krtdtj|||d}t|r||}| | }|S )Nr   r   r6   zprobabilities do not sum to 1.)replacement)Znumelr(   Zaranger   Zis_sequenceZ	ones_liker<   r   Zfinfor+   Zepsabssumr   ZmultinomialZreshape)	rB   r2   replacerC   Znum_elelZatolindicesZsamplesr!   r!   r"   r   |   s&    



)N)N)r5   r6   N)r5   r6   N)NN)NTN)__doc__
__future__r   r$   mathr   typingr   r(    r   r   Z_normalizationsr   r	   r
   __all__r   r&   r   r   r   r   r   r   r   r   r   r   r   r!   r!   r!   r"   <module>   sX   

