o
    h*                     @  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 g d	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&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   )torch._dynamo.config_dynamoconfiguse_numpy_random_stream)r    r   g/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/torch/_numpy/random.pyuse_numpy_random%   s   r   c                   s   t   fdd}|S )Nc                    s   t  s
| i |S dd l}ddlm  t|jj}t fdd| D }  fdd| D }|| i |}t	||jrE t
|}|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!   torch	as_tensor)argskwdsr#   fvaluefuncr   r   inner-   s   
zdeco_stream.<locals>.inner)	functoolswraps)r6   r7   r   r5   r   deco_stream,   s   r:   c                 C  s   | d urt j|  d S d S r   )r/   r   manual_seed)r   r   r   r   r   L   s   r   c                 C  s8   | d u rd} t  j}tj| |d }t|| dkdS Nr   dtypereturn_scalarr   default_dtypesfloat_dtyper/   emptyuniform_r   sizer>   valuesr   r   r   r   R   s
   
r   c                  G  s   | dkrd } t | S )Nr   )r   rG   r   r   r   r   [   s   r                 ?c                 C  <   |d u rd}t  j}tj||d| |}t||dkdS r<   rA   )lowhighrG   r>   rH   r   r   r   r   e   
   
r   c                  G  s(   t  j}tj| |d}t|| dkdS )Nr=   r   r?   )r   rB   rC   r/   r   r   rF   r   r   r   r   n   s   
r   c                 C  rL   r<   )r   rB   rC   r/   rD   normal_r   )locscalerG   r>   rH   r   r   r   r   u   rO   r   c                 C  s^   ddl m} t| tjr| }nt| |r| j}ntdt|jd }|| }|	| d S )Nr   r   z'We do not random.shuffle lists in-placer   )
r*   r   r!   r/   Tensorr"   NotImplementedErrorrandpermshapecopy_)xr   r"   permxpr   r   r   r   ~   s   
r   c                 C  sT   |d u rd}t |ttfs|f}|d u rd| } }tj| ||d}t|t|dkdS )Nr   r   rI   r?   )r!   r-   listr/   r   r   int)rM   rN   rG   rH   r   r   r   r      s   
r   Tar	   pOptional[ArrayLike]c           	      C  s   |   dkrt| } |d u rd}nt|r#d}|D ]}||9 }qn|}|d u r3t| | jd  }tt|j	j
}t| d |krJtdtj|||d}t|r\||}| | }|S )Nr   r   rK   zprobabilities do not sum to 1.)replacement)numelr/   aranger   is_sequence	ones_likerV   r   finfor>   epsabssum
ValueErrormultinomialreshape)	r]   rG   replacer^   num_elelatolindicessamplesr   r   r   r      s(   




r   r   )rJ   rK   N)NN)NTN)r]   r	   r^   r_   )__doc__
__future__r   r8   mathr   typingr   r/    r   r   _normalizationsr   r	   r
   __all__r   r:   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s>    

