o
    Me8                     @   sl   d dl m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G d
d deZe Ze Z	dS )    )
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   LD:\Projects\ConvertPro\env\Lib\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 )zZCheck 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 t| d|tj d S NF)superr   r   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   r   positiver   r   r   r   r   5   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t| |j|j|  d S r   )_base_reinterpreted_batch_rankr   r(   r   r	   r
   )r   basereinterpreted_batch_rankr   r   r   r   B   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   I   s   zIndependent.constraint)r   r   r   r   r   r   r$   r   r   r   r   r(   9   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   Z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>k   s    z$Stack.constraint.<locals>.<listcomp>)r.   r6   r/   Z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   T   s    


r4   N)
Zpaddle.distributionr   objectr   r   r&   r(   r4   r   r'   r   r   r   r   <module>   s   
