
    Ǆg                     |    d dl mZ d dl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 d dlmZ d	gZ G d
 d	e      Zy)    )NumberN)nan)constraints)Distribution)Gamma)broadcast_all)_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        Zed        Zed        Z ej                   d	      fd
edej$                  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        j/home/mcse/projects/flask_80/flask-venv/lib/python3.12/site-packages/torch/distributions/fishersnedecor.pyr   zFisherSnedecor.__init__#   s    *34$(TXX^TXX6TXX^TXX6c6"z#v'>**,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   c                 ~    | j                   j                  t        j                        }t        ||dk  <   ||dz
  z  S )Nmemory_format   )r   cloner   contiguous_formatr   r   r   s     r   meanzFisherSnedecor.mean9   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   r.   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.varianceE   s    hhnn5+B+BnCC1Hggajxx#~!# xx37--**cAg68	
r    sample_shapereturnc                 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   r4   shapeX1X2r=   Ys          r   r9   zFisherSnedecor.rsampleP   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.   r2   r   r   r	   Tensorr9   rP   __classcell__)r   s   @r   r
   r
      s     *22;;O;OPO""GK	C	  
  
 
 
 -7EJJrN 
E 
u|| 
	r   )numbersr   r   r   torch.distributionsr    torch.distributions.distributionr   torch.distributions.gammar   torch.distributions.utilsr   torch.typesr	   __all__r
   r3   r   r   <module>rc      s5       + 9 + 3  
U\ Ur   