
    9j                     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            	       V    e Zd ZdZej
                  ej
                  dZej                  ZdZ		 dde
ez  de
ez  dedz  ddf 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concentration0TNr   r   validate_argsreturnc                 V   t        |t              r:t        |t              r*t        j                  t	        |      t	        |      g      }n't        ||      \  }}t        j                  ||gd      }t        ||      | _        t        | )  | j                  j                  |       y )Nr   )
isinstancer   torchtensorfloatr   stackr   
_dirichletsuper__init___batch_shape)selfr   r   r   concentration1_concentration0	__class__s        X/media/conek/DATA/Code/OCR/venv/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.expand?   s`    ((y9jj-//<dC!+U!C!00
r!   c                 N    | j                   | j                   | j                  z   z  S Nr   r   s    r    meanz	Beta.meanG   s$    ""d&9&9D<O<O&OPPr!   c                 4    | j                   j                  d   S N).r   )r   moder,   s    r    r0   z	Beta.modeK   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.varianceO   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.rsampleT   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_probW   sG    !!%(kk5#+"6;''44r!   c                 6    | j                   j                         S r+   )r   entropyr,   s    r    rA   zBeta.entropy]   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.concentration1`   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.concentration0h   rG   r!   c                 2    | j                   | j                  fS r+   r   r,   s    r    _natural_paramszBeta._natural_paramsp   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_normalizeru   s/    ||Aa05<<A3FFFr!   r+   ) )__name__
__module____qualname____doc__r   positivearg_constraintsunit_intervalsupporthas_rsampler   r   boolr   r%   propertyr-   r0   r6   r	   r9   r=   rA   r   r   tuplerJ   rO   __classcell__)r   s   @r    r
   r
      sR   & &..%..O ''GK &*	TT T d{	T
 
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>rd      s6      + 3 < 3 & (gG gGr!   