
    rh8                         d dl mZ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mZ d d	lmZ d
gZ G d d
e      Zy)    )OptionalUnionN)Tensor)constraints)Exponential)euler_constant)TransformedDistribution)AffineTransformPowerTransform)broadcast_allWeibullc            	            e Zd ZdZej
                  ej
                  dZej
                  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d Z xZS )r   aD  
    Samples from a two-parameter Weibull distribution.

    Example:

        >>> # xdoctest: +IGNORE_WANT("non-deterministic")
        >>> m = Weibull(torch.tensor([1.0]), torch.tensor([1.0]))
        >>> m.sample()  # sample from a Weibull distribution with scale=1, concentration=1
        tensor([ 0.4784])

    Args:
        scale (float or Tensor): Scale parameter of distribution (lambda).
        concentration (float or Tensor): Concentration parameter of distribution (k/shape).
        validate_args (bool, optional): Whether to validate arguments. Default: None.
    )scaleconcentrationNr   r   validate_argsreturnc                 H   t        ||      \  | _        | _        | j                  j                         | _        t        t        j                  | j                        |      }t        | j                        t        d| j                        g}t        | -  |||       y )Nr   exponentr   locr   )r   r   r   
reciprocalconcentration_reciprocalr   torch	ones_liker   r
   super__init__)selfr   r   r   	base_dist
transforms	__class__s         n/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/torch/distributions/weibull.pyr   zWeibull.__init__(   s     *7um)L&
D&(,(:(:(E(E(G%OODJJ'}
	 D$A$AB4

 	JmL    c                    | j                  t        |      }| j                  j                  |      |_        | j                  j                  |      |_        |j                  j                         |_        | j                  j                  |      }t        |j                        t        d|j                        g}t        t        |/  ||d       | j                  |_        |S )Nr   r   r   Fr   )_get_checked_instancer   r   expandr   r   r   r    r   r
   r   r   _validate_args)r   batch_shape	_instancenewr    r!   r"   s         r#   r'   zWeibull.expand9   s    (()<JJ%%k2	 ..55kB'*'8'8'C'C'E$NN))+6	C$@$@A3

 	gs$Y
%$P!00
r$   c                     | j                   t        j                  t        j                  d| j                  z               z  S N   )r   r   explgammar   r   s    r#   meanzWeibull.meanG   s.    zzEIIell1t7T7T3T&UVVVr$   c                     | j                   | j                  dz
  | j                  z  | j                  j                         z  z  S r-   )r   r   r   r1   s    r#   modezWeibull.modeK   sE     JJ""Q&$*<*<<!!,,.//	
r$   c           	         | j                   j                  d      t        j                  t        j                  dd| j
                  z  z               t        j                  dt        j                  d| j
                  z         z        z
  z  S )N   r.   )r   powr   r/   r0   r   r1   s    r#   variancezWeibull.varianceS   sl    zz~~a IIell1q4+H+H'H#HIJiiELLT-J-J)JKKLM
 	
r$   c                     t         d| j                  z
  z  t        j                  | j                  | j                  z        z   dz   S r-   )r   r   r   logr   r1   s    r#   entropyzWeibull.entropyZ   sC    a$"?"??@ii

T%B%BBCD	
r$   )N)__name__
__module____qualname____doc__r   positivearg_constraintssupportr   r   floatr   boolr   r'   propertyr2   r4   r8   r;   __classcell__)r"   s   @r#   r   r      s    " %%$--O ""G )-	MVU]#M VU]+M  ~	M
 
M" Wf W W 
f 
 
 
& 
 

r$   )typingr   r   r   r   torch.distributionsr   torch.distributions.exponentialr   torch.distributions.gumbelr   ,torch.distributions.transformed_distributionr	   torch.distributions.transformsr
   r   torch.distributions.utilsr   __all__r    r$   r#   <module>rP      s8    "   + 7 5 P J 3 +N
% N
r$   