Ë
    P/æ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mZ d dl	m
Z
 d dlmZmZ dgZd	„ Z G d
„ de«      Zy)é    N)Únan)Úconstraints)ÚTransformedDistribution)ÚAffineTransformÚPowerTransform)ÚUniform)Úbroadcast_allÚeuler_constantÚKumaraswamyc                 óÊ   — d|| z  z   }t        j                  |«      t        j                  |«      z   t        j                  ||z   «      z
  }|t        j                  |«      z  S )zE
    Computes nth moment of Kumaraswamy using using torch.lgamma
    é   )ÚtorchÚlgammaÚexp)ÚaÚbÚnÚarg1Ú	log_values        úb/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/distributions/kumaraswamy.pyÚ_momentsr      sR   € ð ˆq�1‰u‰9€DÜ—‘˜TÓ"¤U§\¡\°!£_Ñ4´u·|±|ÀDÈ1ÁHÓ7MÑM€IØŒu�y‰y˜Ó#Ñ#Ð#ó    c                   ó´   ‡ — 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	„ Zˆ xZS )r   aS  
    Samples from a Kumaraswamy distribution.

    Example::

        >>> # xdoctest: +IGNORE_WANT("non-deterministic")
        >>> m = Kumaraswamy(torch.tensor([1.0]), torch.tensor([1.0]))
        >>> m.sample()  # sample from a Kumaraswamy distribution with concentration alpha=1 and beta=1
        tensor([ 0.1729])

    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Úconcentration0Tc                 óê  •— t        ||«      \  | _        | _        t        j                  | j                  j
                  «      }t        t        j                  | j                  d«      t        j                  | j                  d«      |¬«      }t        | j                  j                  «       ¬«      t        dd¬«      t        | j                  j                  «       ¬«      g}t        ‰| �1  |||¬«       y )Nr   r   )Úvalidate_args)Úexponentg      ð?g      ð¿)ÚlocÚscale)r	   r   r   r   ÚfinfoÚdtyper   Ú	full_liker   Ú
reciprocalr   ÚsuperÚ__init__)Úselfr   r   r   r!   Ú	base_distÚ
transformsÚ	__class__s          €r   r&   zKumaraswamy.__init__/   sÅ   ø€ Ü3@Ø˜Nó4
Ñ0ˆÔ˜TÔ0ô —‘˜D×/Ñ/×5Ñ5Ó6ˆÜÜ�O‰O˜D×/Ñ/°Ó3Ü�O‰O˜D×/Ñ/°Ó3Ø'ô
ˆ	ô  D×$7Ñ$7×$BÑ$BÓ$DÔEÜ ¨4Ô0Ü D×$7Ñ$7×$BÑ$BÓ$DÔEð
ˆ
ô
 	‰Ñ˜ J¸mÐÕLr   c                 óÒ   •— | j                  t        |«      }| j                  j                  |«      |_        | j                  j                  |«      |_        t
        ‰| �  ||¬«      S )N)Ú	_instance)Ú_get_checked_instancer   r   Úexpandr   r%   )r'   Úbatch_shaper,   Únewr*   s       €r   r.   zKumaraswamy.expand@   sZ   ø€ Ø×(Ñ(¬°iÓ@ˆØ!×0Ñ0×7Ñ7¸ÓDˆÔØ!×0Ñ0×7Ñ7¸ÓDˆÔÜ‰w‰~˜k°Sˆ~Ó9Ð9r   c                 óD   — t        | j                  | j                  d«      S ©Nr   )r   r   r   ©r'   s    r   ÚmeanzKumaraswamy.meanF   s   € ä˜×+Ñ+¨T×-@Ñ-@À!ÓDÐDr   c                 ó,  — | j                   j                  «       | j                    j                  «       z  | j                    | j                  z  j                  «       z
  }t        || j                   dk  | j                  dk  z  <   |j                  «       S r2   )r   r$   Úlog1pr   r   r   )r'   Úlog_modes     r   ÚmodezKumaraswamy.modeJ   s�   € ð ×Ñ×*Ñ*Ó,°×1DÑ1DÐ0D×/KÑ/KÓ/MÑMØ×#Ñ#Ð# d×&9Ñ&9Ñ9×@Ñ@ÓBñCð 	ô KNˆ�$×%Ñ%¨Ñ)¨d×.AÑ.AÀAÑ.EÑFÑGØ�|‰|‹~Ðr   c                 ó†   — t        | j                  | j                  d«      t        j                  | j
                  d«      z
  S )Né   )r   r   r   r   Úpowr4   r3   s    r   ÚvariancezKumaraswamy.varianceT   s9   € ä˜×+Ñ+¨T×-@Ñ-@À!ÓDÄuÇyÁyØ�I‰I�qóH
ñ 
ð 	
r   c                 óX  — d| j                   j                  «       z
  }d| j                  j                  «       z
  }t        j                  | j                  dz   «      t
        z   }|||z  z   t        j                  | j                   «      z
  t        j                  | j                  «      z
  S r2   )r   r$   r   r   Údigammar
   Úlog)r'   Út1Út0ÚH0s       r   ÚentropyzKumaraswamy.entropyZ   s–   € Ø�×$Ñ$×/Ñ/Ó1Ñ1ˆØ�×$Ñ$×/Ñ/Ó1Ñ1ˆÜ�]‰]˜4×.Ñ.°Ñ2Ó3´nÑDˆàØ�2‰gñä�i‰i˜×+Ñ+Ó,ñ-ô �i‰i˜×+Ñ+Ó,ñ-ð	
r   )N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚpositiveÚarg_constraintsÚunit_intervalÚsupportÚhas_rsampler&   r.   Úpropertyr4   r8   r<   rC   Ú__classcell__)r*   s   @r   r   r      sƒ   ø„ ñð" &×.Ñ.Ø%×.Ñ.ñ€Oð ×'Ñ'€GØ€KõMõ":ð ñEó ðEð ñó ðð ñ
ó ð
ö
	
r   )r   r   Útorch.distributionsr   Ú,torch.distributions.transformed_distributionr   Útorch.distributions.transformsr   r   Útorch.distributions.uniformr   Útorch.distributions.utilsr	   r
   Ú__all__r   r   © r   r   ú<module>rV      s7   ðã Ý Ý +Ý Pß JÝ /ß Cð ˆ/€ò$ôL
Ð)õ L
r   