
    #hV                     p    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dS )	    )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concentration0TNc                    t          |t                    rFt          |t                    r1t          j        t	          |          t	          |          g          }n*t          ||          \  }}t          j        ||gd          }t          ||          | _        t                      
                    | j        j        |           d S )Nvalidate_args)
isinstancer   torchtensorfloatr   stackr   
_dirichletsuper__init___batch_shape)selfr   r   r   concentration1_concentration0	__class__s        X/var/www/html/auto_sub_bot/venv/lib/python3.11/site-packages/torch/distributions/beta.pyr   zBeta.__init__$   s    nd++ 
	
>40P0P 
	,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.expand5   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.mean=   s    "d&9D<O&OPPr   c                 &    | j         j        d         S N).r   )r   moder*   s    r   r.   z	Beta.modeA   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.varianceE   s<    #d&99"T%88EIIaLLETUI<VWWr    c                 ^    | j                             |                              dd          S )Nr   r   )r   rsampleselect)r   sample_shapes     r   r7   zBeta.rsampleJ   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_probM   sQ     	)!!%(((k5#+"6;;''444r   c                 4    | 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   :    .v6ff%% 	<)))Mr   c                 ~    | j         j        d         }t          |t                    rt	          j        |g          S |S )N).r1   rB   rD   s     r   r   zBeta.concentration0^   rF   r   c                     | j         | j        fS r)   r   r*   s    r   _natural_paramszBeta._natural_paramsf   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_normalizerj   s0    |Aa05<A3F3FFFr   r)   )r5   )__name__
__module____qualname____doc__r   positivearg_constraintsunit_intervalsupporthas_rsampler   r#   propertyr+   r.   r4   r7   r<   r@   r   r   rI   rN   __classcell__)r   s   @r   r	   r	      s        " &.%. O 'GKT T T T T T"      Q Q XQ , , X, X X XXC C C C5 5 5) ) )   X   X : : X:G G G G G G Gr   )numbersr   r   r   torch.distributionsr   torch.distributions.dirichletr   torch.distributions.exp_familyr   torch.distributions.utilsr   __all__r	   r5   r   r   <module>r`      s                     + + + + + + 3 3 3 3 3 3 < < < < < < 3 3 3 3 3 3(_G _G _G _G _G _G _G _G _G _Gr   