a
    h8                     @   s   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
 d
eZdS )    )OptionalUnionN)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ee	e
f ee	e
f ee dd fddZd fdd	Zee	d	d
dZee	d	ddZee	d	ddZdd Z  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concentrationN)r   r   validate_argsreturnc                    sb   t ||\| _| _| j | _tt| j|d}t| jdt	d| jdg}t
 j|||d d S )Nr   exponentr   locr   )r   r   r   
reciprocalconcentration_reciprocalr   torchZ	ones_liker
   r	   super__init__)selfr   r   r   	base_dist
transforms	__class__ I/var/www/auris/lib/python3.9/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   )Z_get_checked_instancer   r   expandr   r   r   r   r
   r	   r   r   Z_validate_args)r   Zbatch_shapeZ	_instancenewr   r   r   r    r!   r"   9   s    
zWeibull.expand)r   c                 C   s   | j ttd| j  S N   )r   r   explgammar   r   r    r    r!   meanG   s    zWeibull.meanc                 C   s    | j | jd | j | j   S r$   )r   r   r   r(   r    r    r!   modeK   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!   varianceS   s
    
zWeibull.variancec                 C   s$   t d| j  t| j| j  d S r$   )r   r   r   logr   r(   r    r    r!   entropyZ   s    zWeibull.entropy)N)N)__name__
__module____qualname____doc__r   ZpositiveZarg_constraintsZsupportr   r   floatr   boolr   r"   propertyr)   r*   r-   r/   __classcell__r    r    r   r!   r      s(    

)typingr   r   r   r   Ztorch.distributionsr   Ztorch.distributions.exponentialr   Ztorch.distributions.gumbelr   Z,torch.distributions.transformed_distributionr   Ztorch.distributions.transformsr	   r
   Ztorch.distributions.utilsr   __all__r   r    r    r    r!   <module>   s   