
    Vh                     t    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 dl
mZmZ dgZ G d	 de      Zy)
    N)Tensor)constraints)	Dirichlet)ExponentialFamily)broadcast_all)_Number_sizeBetac                   0    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efd       Zedefd       Zedefd	       Zdd
edefdZd Zd Zedefd       Zedefd       Zedeeef   f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        H/home/dcms/DCMS/lib/python3.12/site-packages/torch/distributions/beta.pyr   zBeta.__init__'   s    ng.:ng3V,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.expand8   s`    ((y9jj-//<dC!+U!C!00
r    returnc                 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   r0   z	Beta.modeD   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.varianceH   sF    ##d&9&99""T%8%88EIIaLETUI<VWWr    sample_shapec                 X    | j                   j                  |      j                  dd      S )Nr   r   )r   rsampleselect)r   r7   s     r   r9   zBeta.rsampleM   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_probP   sG    !!%(kk5#+"6;''44r    c                 6    | j                   j                         S r+   )r   entropyr,   s    r   rA   zBeta.entropyV   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.concentration1Y   6    ..v6fg&<<))Mr    c                     | j                   j                  d   }t        |t              rt	        j
                  |g      S |S )N).r3   rC   rE   s     r   r   zBeta.concentration0a   rG   r    c                 2    | j                   | j                  fS r+   r   r,   s    r   _natural_paramszBeta._natural_paramsi   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_normalizerm   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-   r0   r6   r	   r9   r=   rA   r   r   tuplerJ   rO   __classcell__)r   s   @r   r
   r
      s   $ &..%..O ''GKT" Qf Q Q ,f , , X& X XCE C6 C5)       :vv~!6 : :Gr    )r   r   torch.distributionsr   torch.distributions.dirichletr   torch.distributions.exp_familyr   torch.distributions.utilsr   torch.typesr   r	   __all__r
   rP   r    r   <module>rc      s4      + 3 < 3 & (`G `Gr    