U
    ©Ê¹j¨  ã                   @   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/bwave/python/venv/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 )NgªLXèz¶@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   