o
    2hd                      @   s   d dl Z d dlmZ d dlm  mZ d dlm	Z	 d dl
mZ d dl
mZ d dl
mZ d dlmZ d dlmZ d dlmZ e d	d
 Zd$ddZd%ddZd$ddZd%ddZd$ddZdd Zd&ddZd'ddZd&ddZd&d d!Zd&d"d#ZdS )(    N)floatx)convert_to_tensor)
get_device)to_torch_dtype)SeedGenerator)	draw_seed)make_default_seedc                 C   sB   t | \}}t }|dkrd S tjt d}|t||  |S )Nmetadevice)r   r   torch	Generatormanual_seedint)seed
first_seedsecond_seedr   	generator r   Y/var/www/html/chatgem/venv/lib/python3.10/site-packages/keras/src/backend/torch/random.pytorch_seed_generator   s   r                 ?c                 C   sR   |pt  }t|}t dkrtj||| |t dS t|}tj||| ||t dS )Nr	   sizedtyper   r   r   r   r   )r   r   r   r   normalr   )shapemeanstddevr   r   r   r   r   r   r      s   

r   int32c                 C   s^   t | } t|}tj| dd}t dkrtj||dd|S t|}tj||d|d|S )N)dimr	   T)replacement)r$   r   )r   r   r   softmaxr   multinomialtyper   )logitsnum_samplesr   r   probsr   r   r   r   categorical/   s(   
r+   c           	      C   s   |pt  }t|}| }t|dkrd} t dkr"tj| |t d}nt|}tj| ||t d}|| | | }t|dkrB|d S |S )Nr      r	   r   r   )r   r   lenr   r   randr   )	r   minvalmaxvalr   r   requested_shaperand_tensorr   outputr   r   r   uniformC   s   


r5   c                 C   sH   t |}t dkrtj||| |t dS t|}tj||| ||t dS )Nr	   )lowhighr   r   r   )r6   r7   r   r   r   r   )r   r   r   randintr   )r   r0   r1   r   r   r   r   r   r   r8   Y   s$   
r8   c           	      C   s   t |}tt| d dd||d}|dk|dk @ }|jddd	d }tj| |t d
}|j|	d|
d |j|| |S )N)   r   r-   )r   r    r   r      r"   T)keepdim)r   r   )r   r   tuplemaxr   emptyr   datacopy_gathersqueezemul_add_)	r   r   r    r   r   xvalidindexestrunc_xr   r   r   truncated_normalo   s   rJ   c                 C   sH   |d u r| j S | j }g }t|D ]\}}||d u r|| n| q|S )N)r   	enumerateappend)inputsnoise_shapeconcrete_inputs_shapeconcrete_noise_shapeivaluer   r   r   _get_concrete_noise_shape|   s   rS   c                 C   s   |d urt |tr|jd u r|d urTd| }t| |}tj||t d}t|}t dkr3t|}ntj||d}|	 }t
|| j}t|| | tj| | jdS tjjj| |dddS )	Nr   r
   r	   )r   )r   TF)ptraininginplace)
isinstancer   _initial_seedrS   r   fullr   r   	bernoulliboolbroadcast_tor   where
zeros_liker   nn
functionaldropout)rM   raterN   r   	keep_probkeep_prob_matrixr   maskr   r   r   ra      s0   


ra   c                 C   s   t | } t dkrtj| jd |d  t d|}nt|}tj| jd |d  |t d|}t| j| d D ]}|	d q<|j
g dd t|d D | j|d d  R  }| ||S )Nr	   r-   r
   )r   r   r"   c                 S   s   g | ]}d qS r,   r   ).0_r   r   r   
<listcomp>   s    zshuffle.<locals>.<listcomp>)r   r   r   r/   r   argsortr   rangendim
unsqueeze_repeatrB   )rF   axisr   row_permr   rg   r   r   r   shuffle   s&   
rp   c           
      C   s   |pt  }t|}tt|| }tj| t d}tj }t dks0t	|\}}t
||  tjj||}| |}	tj| |	S )Nr
   r	   )r   r   r   r\   r   onesr   randomget_rng_stater   r   distributionsgammaGammasampler'   set_rng_state)
r   alphar   r   betaprev_rng_stater   r   gamma_distributionrw   r   r   r   ru      s   


ru   c           
      C      |pt  }t|}tt|| }tt|| }tj }t dks0t|\}}t	||  tj
jj||d}| |}	tj| |	S )Nr	   )total_countr*   )r   r   r   r\   r   rr   rs   r   r   r   rt   binomialBinomialrw   r'   rx   )
r   countsprobabilitiesr   r   r{   r   r   binomial_distributionrw   r   r   r   r         


r   c           
      C   r}   )Nr	   )concentration1concentration0)r   r   r   r\   r   rr   rs   r   r   r   rt   rz   Betarw   r'   rx   )
r   ry   rz   r   r   r{   r   r   beta_distributionrw   r   r   r   rz      r   rz   )r   r   NN)r!   N)NN)r   N)r   torch._dynamo_dynamodynamotorch.nn.functionalr_   r`   tnnkeras.src.backend.configr   keras.src.backend.torch.corer   r   r   keras.src.random.seed_generatorr   r   r   disabler   r   r+   r5   r8   rJ   rS   ra   rp   ru   r   rz   r   r   r   r   <module>   s.    







!

