U
    9%e                     @   s^   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gZ
G dd deZdS )	    )NumberN)nan)constraints)Distribution)broadcast_allUniformc                       s   e Zd ZdZejdddejddddZdZedd Z	ed	d
 Z
edd Zedd Zd  fdd	Zd! fdd	Zejddddd Z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).
    Fr   )Zis_discreteZ	event_dim)lowhighTc                 C   s   | j | j d S )N   r	   r   self r   Z/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/torch/distributions/uniform.pymean#   s    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   stddev+   s    zUniform.stddevc                 C   s   | j | j dd S )Nr
      )r	   r   powr   r   r   r   variance/   s    zUniform.varianceNc                    sp   t ||\| _| _t|tr0t|tr0t }n
| j }t j	||d | j
rlt| j| j sltd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__r   r   r   3   s    

zUniform.__init__c                    sR   |  t|}t|}| j||_| j||_tt|j|dd | j	|_	|S )NFr   )
Z_get_checked_instancer   r   r   r   expandr	   r   r   r   )r   r#   Z	_instancenewr$   r   r   r&   ?   s    
zUniform.expandc                 C   s   t | j| jS r   )r   intervalr   r	   r   r   r   r   supportH   s    zUniform.supportc                 C   s8   |  |}tj|| jj| jjd}| j|| j| j   S )N)dtypedevice)Z_extended_shaper   randr   r*   r+   r	   )r   Zsample_shapeshaper,   r   r   r   rsampleL   s    
zUniform.rsamplec                 C   sZ   | j r| | | j|| j}| j|| j}t|	|t| j| j  S r   )
r   _validate_sampler   leZtype_asr	   gtr   logmul)r   valueZlbZubr   r   r   log_probQ   s
    
zUniform.log_probc                 C   s4   | j r| | || j | j| j  }|jdddS )Nr      )minmax)r   r/   r   r	   clampr   r4   resultr   r   r   cdfX   s    
zUniform.cdfc                 C   s   || j | j  | j }|S r   r   r:   r   r   r   icdf^   s    zUniform.icdfc                 C   s   t | j| j S r   )r   r2   r	   r   r   r   r   r   entropyb   s    zUniform.entropy)N)N)__name__
__module____qualname____doc__r   Z	dependentZarg_constraintsZhas_rsamplepropertyr   r   r   r   r   r&   Zdependent_propertyr)   r   r   r.   r5   r<   r=   r>   __classcell__r   r   r$   r   r      s,   



	
)numbersr   r   r   Ztorch.distributionsr   Z torch.distributions.distributionr   Ztorch.distributions.utilsr   __all__r   r   r   r   r   <module>   s   