
    קg                     x    d dl mZ d dl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gZ G d	 de          ZdS )
    )NumberN)nan)constraints)Distribution)broadcast_all)_sizeUniformc                   \    e Zd ZdZ ej        dd           ej        dd          dZdZed             Z	ed             Z
ed	             Zed
             Zd fd	Zd fd	Z ej        dd          d             Z ej                    fdedej        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).
    Fr   )is_discrete	event_dim)lowhighTc                 &    | j         | j        z   dz  S )N   r   r   selfs    W/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/distributions/uniform.pymeanzUniform.mean&   s    	DH$))    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.stddev.   s    	DH$//r   c                 L    | j         | j        z
                      d          dz  S )Nr      )r   r   powr   s    r   variancezUniform.variance2   s$    	DH$))!,,r11r   Nc                    t          ||          \  | _        | _        t          |t                    r)t          |t                    rt          j                    }n| j                                        }t                      	                    ||           | j
        r@t          j        | j        | j                                                  st          d          d S d S )Nvalidate_argsz&Uniform is not defined when low>= high)r   r   r   
isinstancer   torchSizesizesuper__init___validate_argsltall
ValueError)r   r   r   r"   batch_shape	__class__s        r   r(   zUniform.__init__6   s    +C66$)c6"" 	*z$'?'? 	**,,KK(--//KMBBB 	Gux$)'D'D'H'H'J'J 	GEFFF	G 	G 	G 	Gr   c                 N   |                      t          |          }t          j        |          }| j                            |          |_        | j                            |          |_        t          t          |                              |d           | j	        |_	        |S )NFr!   )
_get_checked_instancer	   r$   r%   r   expandr   r'   r(   r)   )r   r-   	_instancenewr.   s       r   r1   zUniform.expandB   s    (()<<j--(//+..9##K00gs$$[$FFF!0
r   c                 @    t          j        | j        | j                  S r   )r   intervalr   r   r   s    r   supportzUniform.supportK   s    #DHdi888r   sample_shapereturnc                     |                      |          }t          j        || j        j        | j        j                  }| j        || j        | j        z
  z  z   S )N)dtypedevice)_extended_shaper$   randr   r:   r;   r   )r   r7   shaper=   s       r   rsamplezUniform.rsampleO   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   )
r)   _validate_sampler   letype_asr   gtr$   logmul)r   valuelbubs       r   log_probzUniform.log_probT   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)r)   rA   r   r   clampr   rG   results      r   cdfzUniform.cdf[   sQ     	)!!%((($("ty48';<||q|)))r   c                 :    || j         | j        z
  z  | j        z   }|S r   r   rP   s      r   icdfzUniform.icdfa   s!    $)dh./$(:r   c                 D    t          j        | j        | j        z
            S r   )r$   rE   r   r   r   s    r   entropyzUniform.entropye   s    yTX-...r   r   )__name__
__module____qualname____doc__r   	dependentarg_constraintshas_rsamplepropertyr   r   r   r   r(   r1   dependent_propertyr6   r$   r%   r   Tensorr?   rJ   rR   rT   rV   __classcell__)r.   s   @r   r	   r	      s        " %{$!DDD%%%1EEE O K* * X*   X 0 0 X0 2 2 X2
G 
G 
G 
G 
G 
G      $[#CCC9 9 DC9 -7EJLL 8 8E 8U\ 8 8 8 8
G G G* * *  / / / / / / /r   )numbersr   r$   r   torch.distributionsr    torch.distributions.distributionr   torch.distributions.utilsr   torch.typesr   __all__r	    r   r   <module>ri      s                 + + + + + + 9 9 9 9 9 9 3 3 3 3 3 3       +W/ W/ W/ W/ W/l W/ W/ W/ W/ W/r   