
    &Vji^                         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 d dlmZ d dlmZmZ d	gZ G d
 d	e	          ZdS )    )OptionalUnionN)nanTensor)constraints)Distribution)Gamma)broadcast_all)_Number_sizeFisherSnedecorc            	       *    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 ej        d          fdede
fdZd Z xZS )r   a  
    Creates a Fisher-Snedecor distribution parameterized by :attr:`df1` and :attr:`df2`.

    Example::

        >>> # xdoctest: +IGNORE_WANT("non-deterministic")
        >>> m = FisherSnedecor(torch.tensor([1.0]), torch.tensor([2.0]))
        >>> m.sample()  # Fisher-Snedecor-distributed with df1=1 and df2=2
        tensor([ 0.2453])

    Args:
        df1 (float or Tensor): degrees of freedom parameter 1
        df2 (float or Tensor): degrees of freedom parameter 2
    )df1df2TNr   r   validate_argsreturnc                    t          ||          \  | _        | _        t          | j        dz  | j                  | _        t          | j        dz  | j                  | _        t          |t                    r)t          |t                    rt          j	                    }n| j        
                                }t                                          ||           d S )N      ?r   )r
   r   r   r	   _gamma1_gamma2
isinstancer   torchSizesizesuper__init__)selfr   r   r   batch_shape	__class__s        \/root/voice-cloning/.venv/lib/python3.11/site-packages/torch/distributions/fishersnedecor.pyr   zFisherSnedecor.__init__$   s     +344$(TX^TX66TX^TX66c7## 	*
3(@(@ 	**,,KK(--//KMBBBBB    c                    |                      t          |          }t          j        |          }| j                            |          |_        | j                            |          |_        | j                            |          |_        | j                            |          |_        t          t          |          
                    |d           | j        |_        |S )NFr   )_get_checked_instancer   r   r   r   expandr   r   r   r   r   _validate_args)r   r   	_instancenewr    s       r!   r%   zFisherSnedecor.expand4   s    ((CCj--(//+..(//+..l))+66l))+66nc""++Ku+MMM!0
r"   c                 x    | j                             t          j                  }t          ||dk    <   ||dz
  z  S )Nmemory_format   )r   cloner   contiguous_formatr   r   r   s     r!   meanzFisherSnedecor.mean?   s5    hnn5+BnCCC1HcAgr"   c                 v    | j         dz
  | j         z  | j        z  | j        dz   z  }t          || j         dk    <   |S )Nr,   )r   r   r   )r   modes     r!   r2   zFisherSnedecor.modeE   s;    1(483tx!|D!TX]r"   c                    | j                             t          j                  }t          ||dk    <   d|                    d          z  | j        |z   dz
  z  | j        |dz
                      d          z  |dz
  z  z  S )Nr*      r,   )r   r-   r   r.   r   powr   r/   s     r!   variancezFisherSnedecor.varianceK   s~    hnn5+BnCCC1Hggajjx#~!# x37--***cAg68	
r"    sample_shapec                    |                      |          }| j                            |                              |          }| j                            |                              |          }t          j        |j                  j        }|	                    |           ||z  }|	                    |           |S )N)min)
_extended_shaper   rsampleviewr   r   finfodtypetinyclamp_)r   r8   shapeX1X2r@   Ys          r!   r<   zFisherSnedecor.rsampleV   s    $$\22 \!!,//44U;;\!!,//44U;;{28$$)
		d	G	Tr"   c                    | j         r|                     |           | j        dz  }| j        dz  }| j        | j        z  }||z                                   |                                z
  |                                z
  }||                                z  |dz
  t          j        |          z  z   }||z   t          j        ||z            z  }||z   |z
  S )Nr      )r&   _validate_sampler   r   lgammalogr   log1p)r   valuect1ct2ct3t1t2t3s           r!   log_probzFisherSnedecor.log_probb   s     	)!!%(((hnhnh!Ci!!CJJLL03::<<?37799_a59U+;+;;;Ci5;sU{333Bw|r"   )N)__name__
__module____qualname____doc__r   positivearg_constraintssupporthas_rsampler   r   floatr   boolr   r%   propertyr0   r2   r6   r   r   r   r<   rS   __classcell__)r    s   @r!   r   r      s         *2;;OPPO"GK )-	C C65=!C 65=!C  ~	C
 
C C C C C C 	 	 	 	 	 	 f    X
 f    X
 
& 
 
 
 X
 -7EJrNN 
 
E 
v 
 
 
 
	 	 	 	 	 	 	r"   )typingr   r   r   r   r   torch.distributionsr    torch.distributions.distributionr   torch.distributions.gammar	   torch.distributions.utilsr
   torch.typesr   r   __all__r   r7   r"   r!   <module>rg      s    " " " " " " " "          + + + + + + 9 9 9 9 9 9 + + + + + + 3 3 3 3 3 3 & & & & & & & & 
[ [ [ [ [\ [ [ [ [ [r"   