Ë
    f^(h³  ã                   ó‚   — d dl Z d dl mZ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ÚTensor)Ú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        ú]/var/www/skyplay_api_hub/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efd„«       Zedefd„«       Zedef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        t	        j
                  | j                  d«      t	        j
                  | j                  d«      |¬«      }t        | j                  j                  «       ¬«      t        dd¬«      t        | j                  j                  «       ¬«      g}t        ‰| �)  |||¬«       y )Nr   r   )Úvalidate_args)Úexponentg      ð?g      ð¿)ÚlocÚscale)r
   r   r   r	   r   Ú	full_liker   Ú
reciprocalr   ÚsuperÚ__init__)Úselfr   r   r   Ú	base_distÚ
transformsÚ	__class__s         €r   r%   zKumaraswamy.__init__0   s«   ø€ Ü3@Ø˜Nó4
Ñ0ˆÔ˜TÔ0ô Ü�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   Úreturnc                 ó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-   Úpropertyr   r4   r8   r<   rC   Ú__classcell__)r)   s   @r   r   r      s™   ø„ ñð$ &×.Ñ.Ø%×.Ñ.ñ€Oð ×'Ñ'€GØ€KõMõ :ð ðE�fò Eó ðEð ð�fò ó ðð ð
˜&ò 
ó ð
ö
	
r   )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   