o
    "j                     @   sr   d dl Z d dlmZ G dd dZG dd deZG dd deZG d	d
 d
eZG dd deZe Ze Z	dS )    N)
constraintc                   @   s:   e Zd ZdZdddZedd Zed	d
 Zdd ZdS )VariablezRandom variable of probability distribution.

    Args:
        is_discrete (bool): Is the variable discrete or continuous.
        event_rank (int): The rank of event dimensions.
    Fr   Nc                 C   s   || _ || _|| _d S N)_is_discrete_event_rank_constraint)selfis_discrete
event_rankr    r   ]/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/distribution/variable.py__init__   s   
zVariable.__init__c                 C      | j S r   )r   r   r   r   r   r	          zVariable.is_discretec                 C   r   r   )r   r   r   r   r   r
   $   r   zVariable.event_rankc                 C   s
   |  |S )zYCheck whether the 'value' meet the constraint conditions of this
        random variable.)r   r   valuer   r   r   r   (   s   
zVariable.constraint)Fr   N)	__name__
__module____qualname____doc__r   propertyr	   r
   r   r   r   r   r   r      s    


r   c                          e Zd Zd fdd	Z  ZS )Realr   c                       t  d|tj d S NF)superr   r   realr   r
   	__class__r   r   r   /      zReal.__init__r   r   r   r   r   __classcell__r   r   r   r   r   .       r   c                       r   )Positiver   c                    r   r   )r   r   r   positiver   r   r   r   r   4   r!   zPositive.__init__r"   r#   r   r   r   r   r&   3   r%   r&   c                       s(   e Zd ZdZ fddZdd Z  ZS )IndependentzReinterprets some of the batch axes of variable as event axes.

    Args:
        base (Variable): Base variable.
        reinterpreted_batch_rank (int): The rightmost batch rank to be
            reinterpreted.
    c                    s&   || _ || _t |j|j|  d S r   )_base_reinterpreted_batch_rankr   r   r	   r
   )r   basereinterpreted_batch_rankr   r   r   r   A   s
   zIndependent.__init__c                 C   sR   | j |}| | jk rtd| j||jd | | j  d 	dS )Nz1Input dimensions must be equal or grater than  {})r-   )
r)   r   dimr*   
ValueErrorformatZreshapeshaper,   all)r   r   retr   r   r   r   H   s   zIndependent.constraint)r   r   r   r   r   r   r$   r   r   r   r   r(   8   s    r(   c                   @   s6   e Zd ZdddZedd Zedd Zdd	 Zd
S )Stackr   c                 C   s   || _ || _d S r   )_vars_axis)r   varsZaxisr   r   r   r   V   s   
zStack.__init__c                 C   s   t dd | jD S )Nc                 s       | ]}|j V  qd S r   )r	   .0varr   r   r   	<genexpr>\       z$Stack.is_discrete.<locals>.<genexpr>)anyr5   r   r   r   r   r	   Z   s   zStack.is_discretec                 C   s.   t dd | jD }| j| dk r|d7 }|S )Nc                 s   r8   r   )r
   r9   r   r   r   r<   `   r=   z#Stack.event_rank.<locals>.<genexpr>r      )maxr5   r6   )r   rankr   r   r   r
   ^   s   zStack.event_rankc              	   C   sh   |   | j  kr|  k sn td|   d| j dtdd t| jt|| jD | jS )NzInput dimensions z- should be grater than stack constraint axis .c                 S   s   g | ]	\}}| |qS r   )check)r:   r;   r   r   r   r   
<listcomp>m   s    z$Stack.constraint.<locals>.<listcomp>)r.   r6   r/   paddlestackzipr5   Zunstackr   r   r   r   r   e   s   "zStack.constraintNr"   )r   r   r   r   r   r	   r
   r   r   r   r   r   r4   U   s    


r4   )
rE   Zpaddle.distributionr   r   r   r&   r(   r4   r   r'   r   r   r   r   <module>   s   "
