
    j                     |    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 )
    N)Tensor)constraints)	Dirichlet)ExponentialFamily)broadcast_all)_Number_sizeBetac            	       b    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                    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        b/lsinfo/ai/hellotax_ai/base_platform/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    r0   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   r8   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    rB   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`   :    .v6fg&& 	<)))Mr!   c                 ~    | j         j        d         }t          |t                    rt	          j        |g          S |S )N).r3   rD   rF   s     r    r   zBeta.concentration0h   rH   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_normalizeru   s0    |Aa05<A3F3FFFr!   r+   )r7   )__name__
__module____qualname____doc__r   positivearg_constraintsunit_intervalsupporthas_rsampler   r   boolr   r%   propertyr-   r0   r6   r	   r:   r>   rB   r   r   tuplerK   rP   __classcell__)r   s   @r    r
   r
      s4        & &.%. O 'GK &*	T TT T d{	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!   )r   r   torch.distributionsr   torch.distributions.dirichletr   torch.distributions.exp_familyr   torch.distributions.utilsr   torch.typesr   r	   __all__r
   r7   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 gG gG gG gG gGr!   