
    rh^                         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y)    )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                  j                         }t        | 1  ||       y )N      ?r   )r
   r   r   r	   _gamma1_gamma2
isinstancer   torchSizesizesuper__init__)selfr   r   r   batch_shape	__class__s        u/var/www/html/ai-insurance-compliance-backend/venv/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.expand4   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.mean?   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!   r2   zFisherSnedecor.modeE   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.varianceK   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   r8   shapeX1X2r@   Ys          r!   r<   zFisherSnedecor.rsampleV   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_probb   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   floatr   boolr   r%   propertyr0   r2   r6   r   r   r   r<   rS   __classcell__)r    s   @r!   r   r      s     *22;;O;OPO""GK )-	C65=!C 65=!C  ~	C
 
C 	 f  
 f  
 
& 
 
 -7EJJrN 
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      s5    "   + 9 + 3 & 
[\ [r"   