
    }YhD                         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dS )    )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        q/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/torch/distributions/kumaraswamy.py_momentsr      sU     q1u9DT""U\!__4u|D1H7M7MMIuy####    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                                                  t          dd          t          | j                                                  g}t                      
                    |||           d S )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
 4
0T0 OD/33OD/33'
 
 
	 D$7$B$B$D$DEEE4000D$7$B$B$D$DEEE


 	JmLLLLLr   c                     |                      t          |          }| j                            |          |_        | j                            |          |_        t                                          ||          S )N)	_instance)_get_checked_instancer   r   expandr   r'   )r)   batch_shaper.   newr,   s       r   r0   zKumaraswamy.expandG   sd    ((i@@!077DD!077DDww~~kS~999r   c                 8    t          | j        | j        d          S Nr   )r   r   r   r)   s    r   meanzKumaraswamy.meanM   s    +T-@!DDDr   c                    | j                                         | j                                          z  | j          | j        z                                  z
  }t          || j         dk     | j        dk     z  <   |                                S r4   )r   r&   log1pr   r   r   )r)   log_modes     r   modezKumaraswamy.modeQ   s     **,,1D0D/K/K/M/MM##d&99@@BBC 	 KN$%)d.AA.EFG||~~r   c                 n    t          | j        | j        d          t          j        | j        d          z
  S )N   )r   r   r   r   powr6   r5   s    r   variancezKumaraswamy.variance[   s8    +T-@!DDuyIqH
 H
 
 	
r   c                 2   d| j                                         z
  }d| 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11]4.233nD2g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      sh        $ &.%. O 'GK )-	M Mfem,M fem,M  ~	M
 
M M M M M M*: : : : : : Ef E E E XE f    X 
& 
 
 
 X

	
 	
 	
 	
 	
 	
 	
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 P P P P P J J J J J J J J / / / / / / C C C C C C C C /$ $ $Q
 Q
 Q
 Q
 Q
) Q
 Q
 Q
 Q
 Q
r   