o
    ei                     @   sf   d dl Z d dl mZmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
mZ dgZG dd deZdS )	    N)nanTensor)constraints)Distribution)broadcast_all)_Number_sizeUniformc                	       s   e Zd ZdZdZedd ZedefddZedefdd	Z	edefd
dZ
edefddZ	d&deeB deeB dedB ddf fddZd& fdd	Zejddddd Ze fdedefddZdd Zd d! Zd"d# Zd$d% Z  ZS )'r	   a  
    Generates uniformly distributed random samples from the half-open interval
    ``[low, high)``.

    Example::

        >>> m = Uniform(torch.tensor([0.0]), torch.tensor([5.0]))
        >>> m.sample()  # uniformly distributed in the range [0.0, 5.0)
        >>> # xdoctest: +SKIP
        tensor([ 2.3418])

    Args:
        low (float or Tensor): lower range (inclusive).
        high (float or Tensor): upper range (exclusive).
    Tc                 C   s   t | jt | jdS )N)lowhigh)r   	less_thanr   greater_thanr
   self r   e/var/www/addictedbytheproject.nl/epg/venv/lib/python3.10/site-packages/torch/distributions/uniform.pyarg_constraints!   s   

zUniform.arg_constraintsreturnc                 C   s   | j | j d S )N   r   r
   r   r   r   r   mean)      zUniform.meanc                 C   s
   t | j S N)r   r   r   r   r   r   mode-   s   
zUniform.modec                 C   s   | j | j d S )NgLXz@r   r   r   r   r   stddev1   r   zUniform.stddevc                 C   s   | j | j dd S )Nr      )r   r
   powr   r   r   r   variance5   s   zUniform.varianceNr
   r   validate_argsc                    sN   t ||\| _| _t|trt|trt }n| j }t j	||d d S )Nr   )
r   r
   r   
isinstancer   torchSizesizesuper__init__)r   r
   r   r   batch_shape	__class__r   r   r%   9   s
   

zUniform.__init__c                    sR   |  t|}t|}| j||_| j||_tt|j|dd | j	|_	|S )NFr   )
_get_checked_instancer	   r!   r"   r
   expandr   r$   r%   _validate_args)r   r&   	_instancenewr'   r   r   r*   G   s   
zUniform.expandFr   )is_discrete	event_dimc                 C   s   t | j| jS r   )r   intervalr
   r   r   r   r   r   supportP   s   zUniform.supportsample_shapec                 C   s8   |  |}tj|| jj| jjd}| j|| j| j   S )N)dtypedevice)_extended_shaper!   randr
   r3   r4   r   )r   r2   shaper6   r   r   r   rsampleU   s   
zUniform.rsamplec                 C   sZ   | j r| | | j|| j}| j|| j}t|	|t| j| j  S r   )
r+   _validate_sampler
   letype_asr   gtr!   logmul)r   valuelbubr   r   r   log_probZ   s
   
"zUniform.log_probc                 C   s4   | j r| | || j | j| j  }|jdddS )Nr      )minmax)r+   r9   r
   r   clampr   r?   resultr   r   r   cdfa   s   
zUniform.cdfc                 C   s   || j | j  | j }|S r   r   rG   r   r   r   icdfg   s   zUniform.icdfc                 C   s   t | j| j S r   )r!   r=   r   r
   r   r   r   r   entropyk   s   zUniform.entropyr   )__name__
__module____qualname____doc__has_rsamplepropertyr   r   r   r   r   r   floatboolr%   r*   r   dependent_propertyr1   r!   r"   r   r8   rB   rI   rJ   rK   __classcell__r   r   r'   r   r	      s>    
	
)r!   r   r   torch.distributionsr    torch.distributions.distributionr   torch.distributions.utilsr   torch.typesr   r   __all__r	   r   r   r   r   <module>   s   