U
    ©Ê¹jU  ã                   @   sb   d dl mZ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 )	é    )ÚNumberÚRealN)Úconstraints)Ú	Dirichlet)ÚExponentialFamily)Úbroadcast_allÚBetac                       s²   e Zd ZdZejejdœZejZdZ	d‡ fdd„	Z
d‡ fdd„	Zed	d
„ ƒZedd„ ƒZedd„ ƒZd dd„Zdd„ Zdd„ Zedd„ ƒZedd„ ƒZedd„ ƒZdd„ Z‡  ZS )!r   aq  
    Beta distribution parameterized by :attr:`concentration1` and :attr:`concentration0`.

    Example::

        >>> # xdoctest: +IGNORE_WANT("non-deterinistic")
        >>> m = Beta(torch.tensor([0.5]), torch.tensor([0.5]))
        >>> m.sample()  # Beta distributed with concentration concentration1 and concentration0
        tensor([ 0.1046])

    Args:
        concentration1 (float or Tensor): 1st concentration parameter of the distribution
            (often referred to as alpha)
        concentration0 (float or Tensor): 2nd concentration parameter of the distribution
            (often referred to as beta)
    ©Úconcentration1Úconcentration0TNc                    sp   t |tƒr,t |tƒr,t t|ƒt|ƒg¡}nt||ƒ\}}t ||gd¡}t||d�| _t	ƒ j
| jj|d� d S )Néÿÿÿÿ©Úvalidate_args)Ú
isinstancer   ÚtorchÚtensorÚfloatr   Ústackr   Ú
_dirichletÚsuperÚ__init__Z_batch_shape)Úselfr
   r   r   Zconcentration1_concentration0©Ú	__class__© úW/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torch/distributions/beta.pyr   $   s"    ÿ ÿ ÿ ÿzBeta.__init__c                    sD   |   t|¡}t |¡}| j |¡|_tt|ƒj|dd� | j|_|S )NFr   )	Z_get_checked_instancer   r   ÚSizer   Úexpandr   r   Ú_validate_args)r   Zbatch_shapeZ	_instanceÚnewr   r   r   r   5   s    
zBeta.expandc                 C   s   | j | j | j  S ©Nr	   ©r   r   r   r   Úmean=   s    z	Beta.meanc                 C   s   | j jd S ©N).r   )r   Úmoder!   r   r   r   r$   A   s    z	Beta.modec                 C   s*   | j | j }| j | j | d¡|d   S )Né   é   )r
   r   Úpow)r   Útotalr   r   r   ÚvarianceE   s    zBeta.variancer   c                 C   s   | j  |¡ dd¡S )Nr   r   )r   ÚrsampleÚselect)r   Zsample_shaper   r   r   r*   J   s    zBeta.rsamplec                 C   s0   | j r|  |¡ t |d| gd¡}| j |¡S )Ng      ð?r   )r   Z_validate_sampler   r   r   Úlog_prob)r   ÚvalueZheads_tailsr   r   r   r,   M   s    
zBeta.log_probc                 C   s
   | j  ¡ S r    )r   Úentropyr!   r   r   r   r.   S   s    zBeta.entropyc                 C   s*   | j jd }t|tƒr"t |g¡S |S d S r#   ©r   Zconcentrationr   r   r   r   ©r   Úresultr   r   r   r
   V   s    
zBeta.concentration1c                 C   s*   | j jd }t|tƒr"t |g¡S |S d S )N).r&   r/   r0   r   r   r   r   ^   s    
zBeta.concentration0c                 C   s   | j | jfS r    r	   r!   r   r   r   Ú_natural_paramsf   s    zBeta._natural_paramsc                 C   s"   t  |¡t  |¡ t  || ¡ S r    )r   Úlgamma)r   ÚxÚyr   r   r   Ú_log_normalizerj   s    zBeta._log_normalizer)N)N)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ZpositiveZarg_constraintsZunit_intervalZsupportZhas_rsampler   r   Úpropertyr"   r$   r)   r*   r,   r.   r
   r   r2   r6   Ú__classcell__r   r   r   r   r      s0   þ






)Únumbersr   r   r   Ztorch.distributionsr   Ztorch.distributions.dirichletr   Ztorch.distributions.exp_familyr   Ztorch.distributions.utilsr   Ú__all__r   r   r   r   r   Ú<module>   s   