
    sh                     x    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  S SK	J
r
  S SKJrJr  S/r " S	 S\5      rg)
    N)nanTensor)constraints)Distribution)Gamma)broadcast_all)_Number_sizeFisherSnedecorc                     ^  \ rS rSrSr\R                  \R                  S.r\R                  rSr	SU 4S 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\R$                  " S5      4S\S\4S jjrS rSrU =r$ )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                   > [        X5      u  U l        U l        [        U R                  S-  U R                  5      U l        [        U R                  S-  U R                  5      U l        [        U[        5      (       a+  [        U[        5      (       a  [        R                  " 5       nOU R                  R                  5       n[        TU ]1  XCS9  g )N      ?validate_args)r   r   r   r   _gamma1_gamma2
isinstancer	   torchSizesizesuper__init__)selfr   r   r   batch_shape	__class__s        v/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/torch/distributions/fishersnedecor.pyr   FisherSnedecor.__init__"   s    *34$(TXX^TXX6TXX^TXX6c7##
3(@(@**,K((--/KB    c                   > U R                  [        U5      n[        R                  " U5      nU R                  R                  U5      Ul        U R                  R                  U5      Ul        U R                  R                  U5      Ul        U R                  R                  U5      Ul        [        [        U]+  USS9  U R                  Ul        U$ )NFr   )_get_checked_instancer   r   r   r   expandr   r   r   r   r   _validate_args)r   r   	_instancenewr   s       r   r$   FisherSnedecor.expand-   s    ((Cjj-((//+.((//+.ll))+6ll))+6nc+Ku+M!00
r!   returnc                 t    U R                   R                  [        R                  S9n[        XS:*  '   XS-
  -  $ )Nmemory_format   )r   cloner   contiguous_formatr   r   r   s     r   meanFisherSnedecor.mean8   s3    hhnn5+B+BnC1HAgr!   c                     U R                   S-
  U R                   -  U R                  -  U R                  S-   -  n[        XR                   S:*  '   U$ )Nr-   )r   r   r   )r   modes     r   r4   FisherSnedecor.mode>   sC    1(4883txx!|D!XX]r!   c                    U R                   R                  [        R                  S9n[        XS:*  '   SUR                  S5      -  U R                  U-   S-
  -  U R                  US-
  R                  S5      -  US-
  -  -  $ )Nr+      r-   )r   r.   r   r/   r   powr   r0   s     r   varianceFisherSnedecor.varianceD   s}    hhnn5+B+BnC1Hggajxx#~!# xx37--**cAg68	
r!    sample_shapec                 h   U R                  U5      nU R                  R                  U5      R                  U5      nU R                  R                  U5      R                  U5      n[
        R                  " UR                  5      R                  nUR                  US9  X4-  nUR                  US9  U$ )N)min)
_extended_shaper   rsampleviewr   r   finfodtypetinyclamp_)r   r<   shapeX1X2rD   Ys          r   r@   FisherSnedecor.rsampleO   s    $$\2 \\!!,/44U;\\!!,/44U;{{288$))
		d	G	Tr!   c                    U R                   (       a  U R                  U5        U R                  S-  nU R                  S-  nU R                  U R                  -  nX#-   R	                  5       UR	                  5       -
  UR	                  5       -
  nX$R                  5       -  US-
  [        R
                  " U5      -  -   nX#-   [        R                  " XA-  5      -  nXV-   U-
  $ )Nr      )r%   _validate_sampler   r   lgammalogr   log1p)r   valuect1ct2ct3t1t2t3s           r   log_probFisherSnedecor.log_prob[   s    !!%(hhnhhnhh!i!CJJL03::<?779_a599U+;;;i5;;s{33w|r!   )r   r   r   r   )N)__name__
__module____qualname____firstlineno____doc__r   positivearg_constraintssupporthas_rsampler   r$   propertyr   r1   r4   r9   r   r   r
   r@   rX   __static_attributes____classcell__)r   s   @r   r   r      s     *22;;O;OPO""GK	C	 f  
 f  
 
& 
 
 -2JJrN 
E 
v 
	 	r!   )r   r   r   torch.distributionsr    torch.distributions.distributionr   torch.distributions.gammar   torch.distributions.utilsr   torch.typesr	   r
   __all__r   r;   r!   r   <module>rl      s2      + 9 + 3 & 
V\ Vr!   