o
    * i                     @  s   d dl mZ d dlmZ d dlZd dlmZ er*d dlmZ d dlm	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 )    )annotations)TYPE_CHECKINGN)
constraint)Sequence)Tensor)
Constraintc                   @  sH   e Zd ZdZ			ddddZedddZedddZdddZdS )Variablea  Random variable of probability distribution.

    Args:
        is_discrete (bool): Is the variable discrete or continuous.
        event_rank (int): The rank of event dimensions.
        constraint (Constraint|None, optional): The constraint of the variable.
    Fr   Nis_discretebool
event_rankintr   Constraint | NonereturnNonec                 C  s   || _ || _|| _d S N)_is_discrete_event_rank_constraint)selfr	   r   r    r   h/home/app/PaddleOCR-VL-test/.venv_paddleocr/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	   0      zVariable.is_discretec                 C  r   r   )r   r   r   r   r   r   4   r   zVariable.event_rankvaluer   c                 C  s   | j dusJ | j |S )zYCheck whether the 'value' meet the constraint conditions of this
        random variable.N)r   checkr   r   r   r   r   r   8   s   zVariable.constraint)Fr   N)r	   r
   r   r   r   r   r   r   r   r
   r   r   r   r   r   r   )	__name__
__module____qualname____doc__r   propertyr	   r   r   r   r   r   r   r      s    

r   c                          e Zd Zdd	 fddZ  ZS )
Realr   r   r   r   r   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   r!   r"   r#   r   __classcell__r   r   r-   r   r'   ?       r'   c                      r&   )
Positiver   r   r   r   r   c                   r(   r)   )r*   r   r   positiver,   r-   r   r   r   E   r/   zPositive.__init__r0   r1   r2   r   r   r-   r   r5   D   r4   r5   c                      s,   e Zd ZdZd fdd	Zd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.
    baser   reinterpreted_batch_rankr   r   r   c                   s&   || _ || _t |j|j|  d S r   )_base_reinterpreted_batch_rankr*   r   r	   r   )r   r8   r9   r-   r   r   r   R   s
   zIndependent.__init__r   r   c                 C  sX   | j |}| | jk rtd| j |g |jd | | j  dR dS )Nz/Input dimensions must be equal or grater than  )	r:   r   dimr;   
ValueErrorZreshapeshaper9   all)r   r   retr   r   r   r   Y   s   
 zIndependent.constraint)r8   r   r9   r   r   r   r    )r!   r"   r#   r$   r   r   r3   r   r   r-   r   r7   I   s    r7   c                   @  s>   e Zd Zdddd	ZedddZedddZdddZdS )Stackr   varsSequence[Variable]axisr   r   r   c                 C  s   || _ || _d S r   )_vars_axis)r   rC   rE   r   r   r   r   e   s   
zStack.__init__r
   c                 C  s   t dd | jD S )Nc                 s      | ]}|j V  qd S r   )r	   .0varr   r   r   	<genexpr>k       z$Stack.is_discrete.<locals>.<genexpr>)anyrF   r   r   r   r   r	   i   s   zStack.is_discretec                 C  s.   t dd | jD }| j| dk r|d7 }|S )Nc                 s  rH   r   )r   rI   r   r   r   rL   o   rM   z#Stack.event_rank.<locals>.<genexpr>r      )maxrF   rG   )r   Zrankr   r   r   r   m   s   zStack.event_rankr   r   c              	   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   )r   )rJ   rK   r   r   r   r   
<listcomp>|   s    z$Stack.constraint.<locals>.<listcomp>)r=   rG   r>   paddlestackziprF   Zunstackr   r   r   r   r   t   s   "zStack.constraintNr0   )rC   rD   rE   r   r   r   r   r   r    )r!   r"   r#   r   r%   r	   r   r   r   r   r   r   rB   d   s    rB   )
__future__r   typingr   rS   Zpaddle.distributionr   collections.abcr   r   Zpaddle.distribution.constraintr   r   r'   r5   r7   rB   r+   r6   r   r   r   r   <module>   s   ""
