U
    yh*                     @  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gZdd Zdd Zed'dd	Zed(dd
Zdd ZeZeZed)ddZedd Zed*ddZe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uniformc                  C  s   dd l m  m}  | jS )Nr   )Ztorch._dynamo.configZ_dynamoconfigZuse_numpy_random_stream)r    r   E/var/www/html/venv/lib/python3.8/site-packages/torch/_numpy/random.pyuse_numpy_random%   s    r   c                   s   t   fdd}|S )Nc                    s   t  s| |S dd l}ddlm  t|jj}t fdd| D }  fdd| D }|| |}t	||jr t
|}|S d S )Nr   r   ndarrayc                 3  s&   | ]}t | r|j n|V  qd S N
isinstancetensornumpy).0argr   r   r   	<genexpr>9   s    z-deco_stream.<locals>.inner.<locals>.<genexpr>c                   s*   i | ]"\}}|t | r"|j n|qS r   r   )r!   keyvalr   r   r   
<dictcomp><   s    z.deco_stream.<locals>.inner.<locals>.<dictcomp>)r   r    _ndarrayr   getattrr   __name__tupleitemsr   torchZ	as_tensor)argskwdsr    fvaluefuncr   r   inner-   s    


zdeco_stream.<locals>.inner)	functoolswraps)r2   r3   r   r1   r   deco_stream,   s    r6   c                 C  s   | d k	rt j|  d S r   )r,   r   Zmanual_seed)r   r   r   r   r   L   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   sizer9   valuesr   r   r   r   R   s
    
c                  G  s   | dkrd } t | S )Nr   )r   r@   r   r   r   r   [   s                  ?c                 C  s<   |d krd}t  j}tj||d| |}t||dkdS r7   r;   )lowhighr@   r9   rA   r   r   r   r   e   s
    
c                  G  s(   t  j}tj| |d}t|| dkdS )Nr8   r   r:   )r   r<   r=   r,   r   r   r?   r   r   r   r   n   s    
c                 C  s<   |d krd}t  j}tj||d| |}t||dkdS r7   )r   r<   r=   r,   r>   Znormal_r   )locscaler@   r9   rA   r   r   r   r   u   s
    
c                 C  s^   ddl m} t| tjr| }nt| |r0| j}ntdt|jd }|| }|	| d S )Nr   r   z'We do not random.shuffle lists in-placer   )
r'   r   r   r,   ZTensorr   NotImplementedErrorZrandpermshapeZcopy_)xr   r   permZxpr   r   r   r   ~   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   rB   r:   )r   r*   listr,   r   r   int)rE   rF   r@   rA   r   r   r   r      s    
Tr	   z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   rD   zprobabilities do not sum to 1.)replacement)Znumelr,   Zaranger   Zis_sequenceZ	ones_likerJ   r   Zfinfor9   epsabssum
ValueErrorZmultinomialZreshape)	rO   r@   replacerP   Znum_elelZatolindicesZsamplesr   r   r   r      s&    



)N)N)rC   rD   N)rC   rD   N)NN)NTN)__doc__
__future__r   r4   mathr   typingr   r,    r   r   Z_normalizationsr   r	   r
   __all__r   r6   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sR    

