a
    MSicI                     @   sT   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
 G dd deZdS )	    )constraints)Exponential)TransformedDistribution)AffineTransformExpTransform)broadcast_allc                       s   e Zd ZdZejejdZd fdd	Zd fdd	Ze	dd	 Z
e	d
d Ze	dd Zejddddd Zdd Z  ZS )Paretoa  
    Samples from a Pareto Type 1 distribution.

    Example::

        >>> m = Pareto(torch.tensor([1.0]), torch.tensor([1.0]))
        >>> m.sample()  # sample from a Pareto distribution with scale=1 and alpha=1
        tensor([ 1.5623])

    Args:
        scale (float or Tensor): Scale parameter of the distribution
        alpha (float or Tensor): Shape parameter of the distribution
    )alphascaleNc                    sN   t ||\| _| _t| j|d}t td| jdg}tt| j|||d d S )N)validate_argsr   )locr
   )	r   r
   r	   r   r   r   superr   __init__)selfr
   r	   r   	base_dist
transforms	__class__ V/var/www/html/django/DPS/env/lib/python3.9/site-packages/torch/distributions/pareto.pyr      s    zPareto.__init__c                    s<   |  t|}| j||_| j||_tt| j||dS )N)	_instance)_get_checked_instancer   r
   expandr	   r   )r   batch_shaper   newr   r   r   r      s    zPareto.expandc                 C   s    | j jdd}|| j |d  S )N   min)r	   clampr
   r   ar   r   r   mean$   s    zPareto.meanc                 C   s   | j S N)r
   r   r   r   r   mode*   s    zPareto.modec                 C   s4   | j jdd}| jd| |d d|d   S )N   r   r   )r	   r   r
   powr   r   r   r   variance.   s    zPareto.varianceFr   )is_discrete	event_dimc                 C   s   t | jS r"   )r   greater_than_eqr
   r#   r   r   r   support4   s    zPareto.supportc                 C   s   | j | j  d| j   S )Nr   )r
   r	   log
reciprocalr#   r   r   r   entropy8   s    zPareto.entropy)N)N)__name__
__module____qualname____doc__r   positivearg_constraintsr   r   propertyr!   r$   r'   dependent_propertyr+   r.   __classcell__r   r   r   r   r      s   



r   N)Ztorch.distributionsr   Ztorch.distributions.exponentialr   ,torch.distributions.transformed_distributionr   Ztorch.distributions.transformsr   r   torch.distributions.utilsr   r   r   r   r   r   <module>   s
   