
    '}hV                     h    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e	      Zy)	    )NumberRealN)constraints)	Dirichlet)ExponentialFamily)broadcast_allBetac                        e Zd ZdZej
                  ej
                  dZej                  ZdZ	d fd	Z
d fd	Zed        Zed        Zed        Zdd	Zd
 Zd Zed        Zed        Zed        Zd Z xZS )r	   ar  
    Beta distribution parameterized by :attr:`concentration1` and :attr:`concentration0`.

    Example::

        >>> # xdoctest: +IGNORE_WANT("non-deterministic")
        >>> 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concentration0Tc                 V   t        |t              r:t        |t              r*t        j                  t	        |      t	        |      g      }n't        ||      \  }}t        j                  ||gd      }t        ||      | _        t        | )  | j                  j                  |       y )Nvalidate_args)
isinstancer   torchtensorfloatr   stackr   
_dirichletsuper__init___batch_shape)selfr   r   r   concentration1_concentration0	__class__s        W/var/www/html/test/engine/venv/lib/python3.12/site-packages/torch/distributions/beta.pyr   zBeta.__init__$   s    nd+
>40P,1LL~&n(=>-) .;.*NN -2KK0"-) $)
 	55]S    c                     | j                  t        |      }t        j                  |      }| j                  j                  |      |_        t        t        |  |d       | j                  |_        |S )NFr   )	_get_checked_instancer	   r   Sizer   expandr   r   _validate_args)r   batch_shape	_instancenewr   s       r   r#   zBeta.expand5   s`    ((y9jj-//<dC!+U!C!00
r   c                 N    | j                   | j                   | j                  z   z  S Nr   r   s    r   meanz	Beta.mean=   s$    ""d&9&9D<O<O&OPPr   c                 4    | j                   j                  d   S N).r   )r   moder*   s    r   r.   z	Beta.modeA   s    ##F++r   c                     | j                   | j                  z   }| j                   | j                  z  |j                  d      |dz   z  z  S )N      )r   r   pow)r   totals     r   variancezBeta.varianceE   sF    ##d&9&99""T%8%88EIIaLETUI<VWWr   c                 X    | j                   j                  |      j                  dd      S )Nr   r   )r   rsampleselect)r   sample_shapes     r   r6   zBeta.rsampleJ   s$    &&|4;;BBBr   c                     | j                   r| j                  |       t        j                  |d|z
  gd      }| j                  j                  |      S )Ng      ?r   )r$   _validate_sampler   r   r   log_prob)r   valueheads_tailss      r   r;   zBeta.log_probM   sG    !!%(kk5#+"6;''44r   c                 6    | j                   j                         S r)   )r   entropyr*   s    r   r?   zBeta.entropyS   s    &&((r   c                     | j                   j                  d   }t        |t              rt	        j
                  |g      S |S r-   r   concentrationr   r   r   r   r   results     r   r   zBeta.concentration1V   6    ..v6ff%<<))Mr   c                     | j                   j                  d   }t        |t              rt	        j
                  |g      S |S )N).r1   rA   rC   s     r   r   zBeta.concentration0^   rE   r   c                 2    | j                   | j                  fS r)   r   r*   s    r   _natural_paramszBeta._natural_paramsf   s    ##T%8%899r   c                     t        j                  |      t        j                  |      z   t        j                  ||z         z
  S r)   )r   lgamma)r   xys      r   _log_normalizerzBeta._log_normalizerj   s/    ||Aa05<<A3FFFr   r)   ) )__name__
__module____qualname____doc__r   positivearg_constraintsunit_intervalsupporthas_rsampler   r#   propertyr+   r.   r4   r6   r;   r?   r   r   rH   rM   __classcell__)r   s   @r   r	   r	      s    " &..%..O ''GKT" Q Q , , X XC5)     : :Gr   )numbersr   r   r   torch.distributionsr   torch.distributions.dirichletr   torch.distributions.exp_familyr   torch.distributions.utilsr   __all__r	   rN   r   r   <module>r`      s/       + 3 < 3(_G _Gr   