o
    i                     @   sX   d dl Z d dlZd dlZd dlmZmZ e eZG dd dej	j
ZG dd dZdS )    N)	MT5ConfigT5Configc                       s2   e Zd ZdZdeeB f fddZdd Z  ZS )	T5Encoderz-T5 encoder outputs only the last hidden stateconfigc                    s   t    || _|| _d S N)super__init__encoderr   )selfr	   r   	__class__ g/home/kim/smarthome/.venv/lib/python3.10/site-packages/onnxruntime/transformers/models/t5/t5_encoder.pyr      s   

zT5Encoder.__init__c                 C   s   |  ||d S )Nr   )r	   r
   	input_idsattention_maskr   r   r   forward   s   zT5Encoder.forward)	__name__
__module____qualname____doc__r   r   r   r   __classcell__r   r   r   r   r      s    r   c                   @   sJ   e Zd Zdd Ze	ddedededejdef
d	d
Z	de
fddZdS )T5EncoderInputsc                 C   s   || _ || _d S r   r   r   r   r   r   r   r      s   
zT5EncoderInputs.__init__F
batch_sizesequence_length
vocab_sizedeviceuse_int32_inputsc           
      C   s   |rt jnt j}t jd|d | |f||d}t j| |g||d}|dkr;t| D ]}td|d }	d||d|	f< q(t||S )aI  Create dummy inputs for T5 encoder.

        Args:
            batch_size (int): batch size
            sequence_length (int): sequence length
            vocab_size (int): vocabulary size
            device (torch.device): device of output tensors

        Returns:
            T5EncoderInputs: dummy inputs for encoder
        r      )lowhighsizedtyper   )r#   r      N)torchZint32Zint64randintZonesrangerandomr   )
r   r   r   r   r   r#   r   r   iZpadding_positionr   r   r   create_dummy    s   
zT5EncoderInputs.create_dummyreturnc                 C   s   dd | j | jfD }|S )Nc                 S   s   g | ]}|d ur|qS r   r   ).0vr   r   r   
<listcomp>E   s    z+T5EncoderInputs.to_list.<locals>.<listcomp>r   )r
   Z
input_listr   r   r   to_listD   s   zT5EncoderInputs.to_listN)F)r   r   r   r   staticmethodintr%   r   boolr*   listr/   r   r   r   r   r      s     #r   )loggingr(   r%   Ztransformersr   r   	getLoggerr   loggernnModuler   r   r   r   r   r   <module>   s   
