
    קg                     |    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dS )
    )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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        T/var/www/html/ai-engine/env/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.expand8   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.modeD   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.varianceH   s<    #d&99"T%88EIIaLLETUI<VWWr     sample_shapereturnc                 ^    | j                             |                              dd          S )Nr   r   )r   rsampleselect)r   r7   s     r   r:   zBeta.rsampleM   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_probP   sQ     	)!!%(((k5#+"6;;''444r    c                 4    | j                                         S r*   )r   entropyr+   s    r   rB   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   :    .v6ff%% 	<)))Mr    c                 ~    | j         j        d         }t          |t                    rt	          j        |g          S |S )N).r2   rD   rF   s     r   r   zBeta.concentration0a   rH   r    c                     | j         | j        fS r*   r   r+   s    r   _natural_paramszBeta._natural_paramsi   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_normalizerm   s0    |Aa05<A3F3FFFr    r*   )r6   )__name__
__module____qualname____doc__r   positivearg_constraintsunit_intervalsupporthas_rsampler   r$   propertyr,   r/   r5   r	   r   Tensorr:   r>   rB   r   r   rK   rP   __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E C5< 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   torch.typesr	   __all__r
   r6   r    r   <module>rd      s                     + + + + + + 3 3 3 3 3 3 < < < < < < 3 3 3 3 3 3       (_G _G _G _G _G _G _G _G _G _Gr    