
    rhD                         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        r/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/torch/distributions/kumaraswamy.py_momentsr      sR     q1u9DT"U\\!_4u||D1H7MMIuyy###    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 OOD//3OOD//3'
	 D$7$7$B$B$DE40D$7$7$B$B$DE


 	Jm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~kS~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     **,1D1D0D/K/K/MM###d&9&99@@BC 	 KN$%%)d.A.AA.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-@-@!DuyyIIq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3nD2gii++,- ii++,-	
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fem,M fem,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   