
    ȅi                     t    S SK r S SK Jr  S SKJr  S SKJr  S SKJr  S SKJ	r	  S SK
JrJr  S/r " S	 S\5      rg)
    N)Tensor)constraints)	Dirichlet)ExponentialFamily)broadcast_all)_Number_sizeBetac            	       x  ^  \ rS rSrSr\R                  \R                  S.r\R                  r	Sr
 SS\\-  S\\-  S\S-  S	S4U 4S
 jjjrSU 4S jjr\S	\4S j5       r\S	\4S j5       r\S	\4S j5       rSS\S	\4S jjrS rS r\S	\4S j5       r\S	\4S j5       r\S	\\\4   4S j5       rS rSrU =r$ )r
      aB  
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                 Z  > [        U[        5      (       a@  [        U[        5      (       a+  [        R                  " [	        U5      [	        U5      /5      nO%[        X5      u  p[        R                  " X/S5      n[        XCS9U l        [        TU ])  U R                  R                  US9  g )Nr   )
isinstancer   torchtensorfloatr   stackr   
_dirichletsuper__init___batch_shape)selfr   r   r   concentration1_concentration0	__class__s        R/home/james-whalen/.local/lib/python3.13/site-packages/torch/distributions/beta.pyr   Beta.__init__)   s     ng..:ng3V3V,1LL~&n(=>-) .;.*N -2KK0"-) $)
 	55]S    c                    > U R                  [        U5      n[        R                  " U5      nU R                  R                  U5      Ul        [        [        U]  USS9  U R                  Ul        U$ )NFr   )	_get_checked_instancer
   r   Sizer   expandr   r   _validate_args)r   batch_shape	_instancenewr    s       r!   r'   Beta.expand?   s`    ((y9jj-//<dC!+U!C!00
r#   c                 N    U R                   U R                   U R                  -   -  $ Nr   r   s    r!   mean	Beta.meanG   s$    ""d&9&9D<O<O&OPPr#   c                 4    U R                   R                  S   $ N).r   )r   moder/   s    r!   r4   	Beta.modeK   s    ##F++r#   c                     U R                   U R                  -   nU R                   U R                  -  UR                  S5      US-   -  -  $ )N      )r   r   pow)r   totals     r!   varianceBeta.varianceO   sF    ##d&9&99""T%8%88EIIaLETUI<VWWr#   sample_shapec                 X    U R                   R                  U5      R                  SS5      $ )Nr   r   )r   rsampleselect)r   r=   s     r!   r?   Beta.rsampleT   s$    &&|4;;BBBr#   c                     U R                   (       a  U R                  U5        [        R                  " USU-
  /S5      nU R                  R                  U5      $ )Ng      ?r   )r(   _validate_sampler   r   r   log_prob)r   valueheads_tailss      r!   rD   Beta.log_probW   sG    !!%(kk5#+"6;''44r#   c                 6    U R                   R                  5       $ r.   )r   entropyr/   s    r!   rI   Beta.entropy]   s    &&((r#   c                     U R                   R                  S   n[        U[        5      (       a  [        R
                  " U/5      $ U$ r3   r   concentrationr   r   r   r   r   results     r!   r   Beta.concentration1`   9    ..v6fg&&<<))Mr#   c                     U R                   R                  S   n[        U[        5      (       a  [        R
                  " U/5      $ U$ )N).r8   rL   rN   s     r!   r   Beta.concentration0h   rQ   r#   c                 2    U R                   U R                  4$ r.   r   r/   s    r!   _natural_paramsBeta._natural_paramsp   s    ##T%8%899r#   c                     [         R                  " U5      [         R                  " U5      -   [         R                  " X-   5      -
  $ r.   )r   lgamma)r   xys      r!   _log_normalizerBeta._log_normalizeru   s-    ||Aa05<<3FFFr#   )r   r.   ) )__name__
__module____qualname____firstlineno____doc__r   positivearg_constraintsunit_intervalsupporthas_rsampler   r   boolr   r'   propertyr0   r4   r;   r	   r?   rD   rI   r   r   tuplerU   r[   __static_attributes____classcell__)r    s   @r!   r
   r
      s^   & &..%..O ''GK &*	TT T d{	T
 
T T, Qf Q Q ,f , , X& X XCE C6 C5)       :vv~!6 : :G Gr#   )r   r   torch.distributionsr   torch.distributions.dirichletr   torch.distributions.exp_familyr   torch.distributions.utilsr   torch.typesr   r	   __all__r
   r]   r#   r!   <module>rs      s6      + 3 < 3 & (gG gGr#   