
    Ǆg                     t    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 dlmZ dgZ G d	 de	      Zy)
    )NumberRealN)constraints)	Dirichlet)ExponentialFamily)broadcast_all)_size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	ed
ej$                  f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        `/home/mcse/projects/flask_80/flask-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.expand8   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.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_shapereturnc                 X    | j                   j                  |      j                  dd      S )Nr   r   )r   rsampleselect)r   r6   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ff%<<))Mr    c                     | j                   j                  d   }t        |t              rt	        j
                  |g      S |S )N).r2   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/   r5   r	   r   Tensorr9   r=   rA   r   r   rJ   rO   __classcell__)r   s   @r   r
   r
      s    " &..%..O ''GKT" Q Q , , X XCE C5<< C5)     : :Gr    )numbersr   r   r   torch.distributionsr   torch.distributions.dirichletr   torch.distributions.exp_familyr   torch.distributions.utilsr   torch.typesr	   __all__r
   rP   r    r   <module>rd      s4       + 3 < 3  (_G _Gr    