o
    hQ                     @   sz   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	 d	e	ZdS )    N)Tensor)constraints)Exponential)euler_constant)TransformedDistribution)AffineTransformPowerTransform)broadcast_allWeibullc                       s   e Zd ZdZejejdZejZd fdd	Zd fdd	Z	e
defd	d
Ze
defddZe
defddZdd Z  ZS )r
   a  
    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).
    )scaleconcentrationNc                    sb   t ||\| _| _| j | _tt| j|d}t| jdt	d| jdg}t
 j|||d d S )Nvalidate_argsexponentr   locr   )r	   r   r   
reciprocalconcentration_reciprocalr   torch	ones_liker   r   super__init__)selfr   r   r   	base_dist
transforms	__class__ o/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/torch/distributions/weibull.pyr   %   s   
zWeibull.__init__c                    s|   |  t|}| j||_| j||_|j |_| j|}t|jdt	d|jdg}t
t|j||d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   r   r   r!   1   s   
zWeibull.expandreturnc                 C   s   | j ttd| j  S N   )r   r   explgammar   r   r   r   r   mean?   s   zWeibull.meanc                 C   s    | j | jd | j | j   S r'   )r   r   r   r+   r   r   r   modeC   s   zWeibull.modec              	   C   s@   | j dttdd| j  tdtd| j    S )N   r(   )r   powr   r)   r*   r   r+   r   r   r   varianceK   s
   
zWeibull.variancec                 C   s$   t d| j  t| j| j  d S r'   )r   r   r   logr   r+   r   r   r   entropyR   s   zWeibull.entropy)N)__name__
__module____qualname____doc__r   positivearg_constraintssupportr   r!   propertyr   r,   r-   r0   r2   __classcell__r   r   r   r   r
      s    )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   r   r   <module>   s   