
    }Yh!                         d dl mZmZ 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e	          ZdS )
    )OptionalUnionN)nanTensor)constraints)Distribution)broadcast_all)_Number_sizeUniformc            	       v    e Zd ZdZdZed             Zedefd            Zedefd            Z	edefd            Z
edefd            Z	 dd
eeef         deeef         dee         dd	f fdZd fd	Z ej        dd          d             Z ej                    fdedefdZd Zd Zd Zd Z x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                 h    t          j        | j                  t          j        | j                  dS )N)lowhigh)r   	less_thanr   greater_thanr   selfs    m/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/torch/distributions/uniform.pyarg_constraintszUniform.arg_constraints"   s3     (33,TX66
 
 	
    returnc                 &    | j         | j        z   dz  S )N   r   r   r   s    r   meanzUniform.mean*   s    	DH$))r   c                      t           | j        z  S N)r   r   r   s    r   modezUniform.mode.   s    TYr   c                 &    | j         | j        z
  dz  S )NgLXz@r   r   s    r   stddevzUniform.stddev2   s    	DH$//r   c                 L    | j         | j        z
                      d          dz  S )Nr      )r   r   powr   s    r   variancezUniform.variance6   s$    	DH$))!,,r11r   Nr   r   validate_argsc                 6   t          ||          \  | _        | _        t          |t                    r)t          |t                    rt          j                    }n| j                                        }t                      	                    ||           d S )Nr&   )
r	   r   r   
isinstancer
   torchSizesizesuper__init__)r   r   r   r&   batch_shape	__class__s        r   r.   zUniform.__init__:   s     ,C66$)c7## 	*
4(A(A 	**,,KK(--//KMBBBBBr   c                 N   |                      t          |          }t          j        |          }| j                            |          |_        | j                            |          |_        t          t          |                              |d           | j	        |_	        |S )NFr(   )
_get_checked_instancer   r*   r+   r   expandr   r-   r.   _validate_args)r   r/   	_instancenewr0   s       r   r3   zUniform.expandH   s    (()<<j--(//+..9##K00gs$$[$FFF!0
r   Fr   )is_discrete	event_dimc                 @    t          j        | j        | j                  S r   )r   intervalr   r   r   s    r   supportzUniform.supportQ   s    #DHdi888r   sample_shapec                     |                      |          }t          j        || j        j        | j        j                  }| j        || j        | j        z
  z  z   S )N)dtypedevice)_extended_shaper*   randr   r>   r?   r   )r   r<   shaperA   s       r   rsamplezUniform.rsampleU   sN    $$\22z%tx~dhoNNNx$$)dh"6777r   c                    | j         r|                     |           | j                            |                              | j                  }| j                            |                              | j                  }t          j        |	                    |                    t          j        | j        | j        z
            z
  S r   )
r4   _validate_sampler   letype_asr   gtr*   logmul)r   valuelbubs       r   log_probzUniform.log_probZ   s     	)!!%(((X[[''11Y\\%  ((22y$$uyTX1E'F'FFFr   c                     | j         r|                     |           || j        z
  | j        | j        z
  z  }|                    dd          S )Nr      )minmax)r4   rE   r   r   clampr   rK   results      r   cdfzUniform.cdfa   sQ     	)!!%((($("ty48';<||q|)))r   c                 :    || j         | j        z
  z  | j        z   }|S r   r   rT   s      r   icdfzUniform.icdfg   s!    $)dh./$(:r   c                 D    t          j        | j        | j        z
            S r   )r*   rI   r   r   r   s    r   entropyzUniform.entropyk   s    yTX-...r   r   )__name__
__module____qualname____doc__has_rsamplepropertyr   r   r   r   r!   r%   r   floatr   boolr.   r3   r   dependent_propertyr;   r*   r+   r   rC   rN   rV   rX   rZ   __classcell__)r0   s   @r   r   r      s          K
 
 X
 *f * * * X* f    X 0 0 0 0 X0 2& 2 2 2 X2 )-	C C65=!C FEM"C  ~	C
 
C C C C C C      $[#CCC9 9 DC9 -7EJLL 8 8E 8V 8 8 8 8
G G G* * *  / / / / / / /r   )typingr   r   r*   r   r   torch.distributionsr    torch.distributions.distributionr   torch.distributions.utilsr	   torch.typesr
   r   __all__r    r   r   <module>rl      s    " " " " " " " "          + + + + + + 9 9 9 9 9 9 3 3 3 3 3 3 & & & & & & & & +]/ ]/ ]/ ]/ ]/l ]/ ]/ ]/ ]/ ]/r   