
    Vh                     x    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y)
    N)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 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df2Tc                    t        ||      \  | _        | _        t        | j                  dz  | j                        | _        t        | j                  dz  | j                        | _        t        |t              r%t        |t              rt        j                         }n| j                  j                         }t        | 1  ||       y )N      ?validate_args)r   r   r   r   _gamma1_gamma2
isinstancer	   torchSizesizesuper__init__)selfr   r   r   batch_shape	__class__s        R/home/dcms/DCMS/lib/python3.12/site-packages/torch/distributions/fishersnedecor.pyr   zFisherSnedecor.__init__"   s    *34$(TXX^TXX6TXX^TXX6c7#
3(@**,K((--/KMB    c                    | j                  t        |      }t        j                  |      }| j                  j                  |      |_        | j                  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.expand-   s    ((Cjj-((//+.((//+.ll))+6ll))+6nc+Ku+M!00
r   returnc                 ~    | j                   j                  t        j                        }t        ||dk  <   ||dz
  z  S )Nmemory_format   )r   cloner   contiguous_formatr   r   r   s     r   meanzFisherSnedecor.mean8   s7    hhnn5+B+BnCC1HcAgr   c                     | j                   dz
  | j                   z  | j                  z  | j                  dz   z  }t        || j                   dk  <   |S )Nr*   )r   r   r   )r   modes     r   r0   zFisherSnedecor.mode>   sE    1(4883txx!|D!TXX]r   c                    | j                   j                  t        j                        }t        ||dk  <   d|j                  d      z  | j                  |z   dz
  z  | j                  |dz
  j                  d      z  |dz
  z  z  S )Nr(      r*   )r   r+   r   r,   r   powr   r-   s     r   variancezFisherSnedecor.varianceD   s    hhnn5+B+BnCC1Hggajxx#~!# xx37--**cAg68	
r    sample_shapec                 t   | j                  |      }| j                  j                  |      j                  |      }| j                  j                  |      j                  |      }t        j                  |j                        j                  }|j                  |       ||z  }|j                  |       |S )N)min)
_extended_shaper   rsampleviewr   r   finfodtypetinyclamp_)r   r6   shapeX1X2r>   Ys          r   r:   zFisherSnedecor.rsampleO   s    $$\2 \\!!,/44U;\\!!,/44U;{{288$))
		d	G	Tr   c                    | j                   r| j                  |       | j                  dz  }| j                  dz  }| j                  | j                  z  }||z   j	                         |j	                         z
  |j	                         z
  }||j                         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_prob[   s    !!%(hhnhhnhh!Ci!CJJL03::<?3779_a599U+;;;Ci5;;sU{33Bw|r   )N)__name__
__module____qualname____doc__r   positivearg_constraintssupporthas_rsampler   r"   propertyr   r.   r0   r4   r   r   r
   r:   rQ   __classcell__)r   s   @r   r   r      s     *22;;O;OPO""GK	C	 f  
 f  
 
& 
 
 -7EJJrN 
E 
v 
	r   )r   r   r   torch.distributionsr    torch.distributions.distributionr   torch.distributions.gammar   torch.distributions.utilsr   torch.typesr	   r
   __all__r   r5   r   r   <module>rb      s2      + 9 + 3 & 
V\ Vr   