Ë
    óÍ:jD  ã                   ó’   — d dl mZmZ 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)é    )ÚOptionalÚUnionN)Ú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        út/home/mcse/projects/srt_converter/srt-converter-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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„ 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Úconcentration0TNr   r   Úvalidate_argsÚreturnc                 ó˜  •— t        ||«      \  | _        | _        t        t	        j
                  | j                  d«      t	        j
                  | j                  d«      |¬«      }t        | j                  j                  «       ¬«      t        dd¬«      t        | j                  j                  «       ¬«      g}t        ‰| �)  |||¬«       y )Nr   r   )r   )Ú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__2   s®   ø€ ô 4AØ˜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   r0   zKumaraswamy.expandG   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.meanM   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 r4   )r   r&   Úlog1pr   r   r   )r)   Úlog_modes     r   ÚmodezKumaraswamy.modeQ   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   Úpowr6   r5   s    r   ÚvariancezKumaraswamy.variance[   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 r4   )r   r&   r   r   Údigammar   Úlog)r)   Út1Út0ÚH0s       r   ÚentropyzKumaraswamy.entropya   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   Úfloatr   Úboolr(   r0   Úpropertyr6   r:   r>   rE   Ú__classcell__)r,   s   @r   r   r      sÞ   ø„ ñð$ &×.Ñ.Ø%×.Ñ.ñ€Oð ×'Ñ'€GØ€Kð )-ñ	Mà˜f e˜mÑ,ðMð ˜f e˜mÑ,ðMð   ‘~ð	Mð
 
õMõ*:ð ðE�fò Eó ðEð ð�fò ó ðð ð
˜&ò 
ó ð
ö
	
r   )Útypingr   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>r[      s:   ðç "ã ß Ý +Ý Pß JÝ /ß Cð ˆ/€ò$ôQ
Ð)õ Q
r   