Ë
    #täi   ã                   ót   — 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)
é    N)ÚTensor)Úconstraints)Ú	Dirichlet)ÚExponentialFamily)Úbroadcast_all)Ú_NumberÚ_sizeÚBetac            	       óV  ‡ — 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                 ó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        €úg/Volumes/fast/ai/experiments/MLX_z-image/.venv/lib/python3.12/site-packages/torch/distributions/beta.pyr   zBeta.__init__)   s›   ø€ ô �n¤gÔ.´:¸nÌgÔ3VÜ,1¯L©LÜ�~Ó&¬¨nÓ(=Ð>ó-Ñ)ô .;Ø ó.Ñ*ˆN˜Nô -2¯K©KØ Ð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ˆÜ—j‘j Ó-ˆØŸ™×/Ñ/°Ó<ˆŒÜŒd�CÑ! +¸UÐ!ÔCØ!×0Ñ0ˆÔØˆ
r!   c                 óN   — | j                   | j                   | j                  z   z  S ©Nr   ©r   s    r    Úmeanz	Beta.meanG   s$   € à×"Ñ" d×&9Ñ&9¸D×<OÑ<OÑ&OÑPÐPr!   c                 ó4   — | j                   j                  d   S ©N).r   )r   Úmoder,   s    r    r0   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Ñ8¸E¿I¹IÀa»LÈEÐTUÉIÑ<VÑWÐWr!   Úsample_shapec                 óX   — | j                   j                  |«      j                  dd«      S )Nr   r   )r   ÚrsampleÚselect)r   r7   s     r    r9   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   € Ø×ÒØ×!Ñ! %Ô(Ü—k‘k 5¨#°©+Ð"6¸Ó;ˆØ�‰×'Ñ'¨Ó4Ð4r!   c                 ó6   — | j                   j                  «       S r+   )r   Úentropyr,   s    r    rA   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`   ó6   € à—‘×.Ñ.¨vÑ6ˆÜ�fœgÔ&Ü—<‘<  Ó)Ð)àˆMr!   c                 ó„   — | j                   j                  d   }t        |t        «      rt	        j
                  |g«      S |S )N).r3   rC   rE   s     r    r   zBeta.concentration0h   rG   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_normalizeru   s/   € Ü�|‰|˜A‹¤§¡¨a£Ñ0´5·<±<ÀÀAÁÓ3FÑFÐFr!   r+   )© )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚpositiveÚarg_constraintsÚunit_intervalÚsupportÚhas_rsampler   r   Úboolr   r%   Úpropertyr-   r0   r6   r	   r9   r=   rA   r   r   ÚtuplerJ   rO   Ú__classcell__)r   s   @r    r
   r
      sR  ø„ ñð& &×.Ñ.Ø%×.Ñ.ñ€Oð ×'Ñ'€GØ€Kð &*ñ	Tà ™ðTð  ™ðTð ˜d‘{ð	Tð
 
õTõ,ð ðQ�fò Qó ðQð ð,�fò ,ó ð,ð ðX˜&ò Xó ðXñC Eð C°6ó Cò5ò)ð ð ò ó ðð ð ò ó ðð ð:  v¨v ~Ñ!6ò :ó ð:öGr!   )r   r   Útorch.distributionsr   Útorch.distributions.dirichletr   Útorch.distributions.exp_familyr   Útorch.distributions.utilsr   Útorch.typesr   r	   Ú__all__r
   rP   r!   r    Ú<module>rd      s6   ðó Ý Ý +Ý 3Ý <Ý 3ß &ð ˆ(€ôgGÐõ gGr!   