
    rh                         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y)    )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                 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        k/var/www/html/ai-insurance-compliance-backend/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"   r2   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   r9   s     r"   r;   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"   rC   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`   6    ..v6fg&<<))Mr#   c                     | j                   j                  d   }t        |t              rt	        j
                  |g      S |S )N).r5   rE   rG   s     r"   r   zBeta.concentration0h   rI   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_normalizert   s/    ||Aa05<<A3FFFr#   r-   ) )__name__
__module____qualname____doc__r   positivearg_constraintsunit_intervalsupporthas_rsampler   r   r   r   boolr   r'   propertyr/   r2   r8   r   r;   r?   rC   r   r   tuplerL   rQ   __classcell__)r!   s   @r"   r   r      s\   $ &..%..O ''GK )-	Tfem,T fem,T  ~	T
 
T, Qf Q Q ,f , , X& X XCE C6 C5)       :vv~!6 : :Gr#   )typingr   r   r   r   torch.distributionsr   torch.distributions.dirichletr   torch.distributions.exp_familyr   torch.distributions.utilsr	   torch.typesr
   r   __all__r   rR   r#   r"   <module>rg      s7    "   + 3 < 3 & (eG eGr#   