
    ȅie                         S SK r S SK JrJr  S SKJr  S SKJr  S SKJrJ	r	  S SK
Jr  S SKJrJr  S/rS	 r " S
 S\5      rg)    N)nanTensor)constraints)TransformedDistribution)AffineTransformPowerTransform)Uniform)broadcast_alleuler_constantKumaraswamyc                     SX -  -   n[         R                  " U5      [         R                  " U5      -   [         R                  " X1-   5      -
  nU[         R                  " U5      -  $ )z=
Computes nth moment of Kumaraswamy using using torch.lgamma
   )torchlgammaexp)abnarg1	log_values        Y/home/james-whalen/.local/lib/python3.13/site-packages/torch/distributions/kumaraswamy.py_momentsr      sN     qu9DT"U\\!_4u||DH7MMIuyy###    c            	         ^  \ rS rSrSr\R                  \R                  S.r\R                  r	Sr
 SS\\-  S\\-  S\S-  S	S4U 4S
 jjjrSU 4S jjr\S	\4S j5       r\S	\4S j5       r\S	\4S j5       rS rSrU =r$ )r      a#  
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                 z  > [        X5      u  U l        U l        [        [        R
                  " U R                  S5      [        R
                  " U R                  S5      US9n[        U R                  R                  5       S9[        SSS9[        U R                  R                  5       S9/n[        TU ])  XEUS9  g )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'   Kumaraswamy.__init__2   s     4A4
0T0 OOD//3OOD//3'
	 D$7$7$B$B$DE40D$7$7$B$B$DE

 	mLr   c                    > U R                  [        U5      nU R                  R                  U5      Ul        U R                  R                  U5      Ul        [
        TU ]  XS9$ )N)	_instance)_get_checked_instancer   r   expandr   r&   )r(   batch_shaper.   newr+   s       r   r0   Kumaraswamy.expandH   sX    ((i@!0077D!0077Dw~k~99r   c                 D    [        U R                  U R                  S5      $ Nr   )r   r   r   r(   s    r   meanKumaraswamy.meanN   s    ++T-@-@!DDr   c                 *   U R                   R                  5       U R                   * R                  5       -  U R                   * U R                  -  R                  5       -
  n[        XR                   S:  U R                  S:  -  '   UR                  5       $ r5   )r   r%   log1pr   r   r   )r(   log_modes     r   modeKumaraswamy.modeR   s     **,1D1D0D/K/K/MM###d&9&99@@BC 	 KN%%)d.A.AA.EFG||~r   c                     [        U R                  U R                  S5      [        R                  " U R
                  S5      -
  $ )N   )r   r   r   r   powr7   r6   s    r   varianceKumaraswamy.variance\   s9    ++T-@-@!DuyyIIqH
 
 	
r   c                 \   SU R                   R                  5       -
  nSU R                  R                  5       -
  n[        R                  " U R                  S-   5      [
        -   nUX-  -   [        R                  " U R                   5      -
  [        R                  " U R                  5      -
  $ r5   )r   r%   r   r   digammar   log)r(   t1t0H0s       r   entropyKumaraswamy.entropyb   s    $$//11$$//11]]4..23nDgii++,- ii++,-	
r   )r   r   )N)__name__
__module____qualname____firstlineno____doc__r   positivearg_constraintsunit_intervalsupporthas_rsampler   floatboolr'   r0   propertyr7   r<   rA   rI   __static_attributes____classcell__)r+   s   @r   r   r      s    $ &..%..O
 ''GK &*	MM M d{	M
 
M 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>ra      s9      + P J / C /$S
) S
r   