
    }Yh                         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 dlmZmZ d	gZ G d
 d	e
          ZdS )    )OptionalUnionN)Tensor)constraints)	Dirichlet)ExponentialFamily)broadcast_all)_Number_sizeBetac            	       |    e Zd ZdZej        ej        dZej        ZdZ		 dde
eef         de
eef         dee         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                    t          |t                    rFt          |t                    r1t          j        t	          |          t	          |          g          }n*t          ||          \  }}t          j        ||gd          }t          ||          | _        t                      
                    | j        j        |           d S )Nr   )
isinstancer
   torchtensorfloatr	   stackr   
_dirichletsuper__init___batch_shape)selfr   r   r   concentration1_concentration0	__class__s        j/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/torch/distributions/beta.pyr   zBeta.__init__)   s     ng.. 
	:ng3V3V 
	,1L~&&n(=(=>- -)) .;. .*NN -2K0"- -) $)
 
 
 	5]SSSSS    c                    |                      t          |          }t          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?   sq    ((y99j--//<<dC!!+U!CCC!0
r#   c                 0    | j         | j         | j        z   z  S Nr   r   s    r"   meanz	Beta.meanG   s    "d&9D<O&OPPr#   c                 &    | j         j        d         S N).r   )r   moder.   s    r"   r2   z	Beta.modeK   s    #F++r#   c                 v    | j         | j        z   }| j         | j        z  |                    d          |dz   z  z  S )N      )r   r   pow)r   totals     r"   variancezBeta.varianceO   s<    #d&99"T%88EIIaLLETUI<VWWr#    sample_shapec                 ^    | j                             |                              dd          S )Nr   r   )r   rsampleselect)r   r:   s     r"   r<   zBeta.rsampleT   s(    &&|44;;BBBBr#   c                     | j         r|                     |           t          j        |d|z
  gd          }| j                            |          S )Ng      ?r   )r(   _validate_sampler   r   r   log_prob)r   valueheads_tailss      r"   r@   zBeta.log_probW   sQ     	)!!%(((k5#+"6;;''444r#   c                 4    | j                                         S r-   )r   entropyr.   s    r"   rD   zBeta.entropy]   s    &&(((r#   c                 ~    | j         j        d         }t          |t                    rt	          j        |g          S |S r1   r   concentrationr   r
   r   r   r   results     r"   r   zBeta.concentration1`   :    .v6fg&& 	<)))Mr#   c                 ~    | j         j        d         }t          |t                    rt	          j        |g          S |S )N).r5   rF   rH   s     r"   r   zBeta.concentration0h   rJ   r#   c                     | j         | j        fS r-   r   r.   s    r"   _natural_paramszBeta._natural_paramsp   s    #T%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_normalizert   s0    |Aa05<A3F3FFFr#   r-   )r9   )__name__
__module____qualname____doc__r   positivearg_constraintsunit_intervalsupporthas_rsampler   r   r   r   boolr   r'   propertyr/   r2   r8   r   r<   r@   rD   r   r   tuplerM   rR   __classcell__)r!   s   @r"   r   r      s>        $ &.%. O 'GK )-	T Tfem,T fem,T  ~	T
 
T T T T T T,      Qf Q Q Q XQ ,f , , , X, X& X X X XXC CE C6 C C C C5 5 5) ) )     X     X :vv~!6 : : : X:G G G G G G Gr#   )typingr   r   r   r   torch.distributionsr   torch.distributions.dirichletr   torch.distributions.exp_familyr   torch.distributions.utilsr	   torch.typesr
   r   __all__r   r9   r#   r"   <module>rg      s    " " " " " " " "        + + + + + + 3 3 3 3 3 3 < < < < < < 3 3 3 3 3 3 & & & & & & & & (eG eG eG eG eG eG eG eG eG eGr#   