
    8h^                         S SK JrJr  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)    )OptionalUnionN)nanTensor)constraints)Distribution)Gamma)broadcast_all)_Number_sizeFisherSnedecorc            	       D  ^  \ rS rSrSr\R                  \R                  S.r\R                  rSr	 SS\
\\4   S\
\\4   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\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df2TNr   r   validate_argsreturnc                   > [        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      ?r   )r
   r   r   r	   _gamma1_gamma2
isinstancer   torchSizesizesuper__init__)selfr   r   r   batch_shape	__class__s        \/var/www/fran/franai/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.expand4   s    ((Cjj-((//+.((//+.ll))+6ll))+6nc+Ku+M!00
r$   c                 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.mean?   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"   r6   FisherSnedecor.modeE   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   r0   r   r1   r   powr   r2   s     r"   varianceFisherSnedecor.varianceK   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X2rF   Ys          r"   rB   FisherSnedecor.rsampleV   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_probb   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   floatr   boolr   r'   propertyr3   r6   r;   r   r   r   rB   rZ   __static_attributes____classcell__)r!   s   @r"   r   r      s    *22;;O;OPO""GK )-	C65=!C 65=!C  ~	C
 
C C 	 f  
 f  
 
& 
 
 -2JJrN 
E 
v 
	 	r$   )typingr   r   r   r   r   torch.distributionsr    torch.distributions.distributionr   torch.distributions.gammar	   torch.distributions.utilsr
   torch.typesr   r   __all__r   r=   r$   r"   <module>rq      s5    "   + 9 + 3 & 
[\ [r$   