o
    ;ήc                     @   sf   d dl Z d dlmZmZmZmZ d dlZd dlZe e	Z
ddddZG dd dZG d	d
 d
ZdS )    N)DictListTupleUnionzallenai/longformer-base-4096zallenai/longformer-large-4096z'patrickvonplaten/longformer-random-tiny)zlongformer-base-4096zlongformer-large-4096zlongformer-random-tinyc                   @   s>   e Zd Zdd ZdefddZdefddZdefdd	Z	d
S )LongformerInputsc                 C   s   || _ || _|| _d S N	input_idsattention_maskglobal_attention_mask)selfr	   r
   r    r   c/tmp/pip-target-vg8gfxp4/lib/python/onnxruntime/transformers/models/longformer/longformer_helper.py__init__   s   
zLongformerInputs.__init__returnc                 C   s   dd | j | j| jfD S )Nc                 S   s   g | ]}|d ur|qS r   r   .0vr   r   r   
<listcomp>   s    z,LongformerInputs.to_list.<locals>.<listcomp>r   r   r   r   r   to_list   s   zLongformerInputs.to_listc                 C   s   t dd |  D S )Nc                 s   s    | ]}|V  qd S r   r   r   r   r   r   	<genexpr>!   s    z,LongformerInputs.to_tuple.<locals>.<genexpr>)tupler   r   r   r   r   to_tuple    s   zLongformerInputs.to_tuplec                 C   s<   t | j   t | j   t | j   dS )Nr   )numpyascontiguousarrayr	   cpur
   r   r   r   r   r   get_ort_inputs#   s   zLongformerInputs.get_ort_inputsN)
__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r      s
    r   c                   @   sf   e Zd ZdZe	ddedededejdedefd	d
Z	edededede
eee f fddZdS )LongformerHelperzKA helper class for Longformer model conversion, inference and verification.d   
batch_sizesequence_lengthnum_global_tokensdevice
vocab_sizer   c           	      C   sn   t jd|d | |ft j|d}t j|jt j|d}t j|jt j|d}tt|}d|dd|f< t|||S )zCreate random inputs for Longformer model.
        Returns torch tensors of input_ids, attention_mask and global_attention_mask tensors.
        r      )lowhighsizedtyper&   )r,   r&   N)	torchrandintlongonesshapezeroslistranger   )	r#   r$   r%   r&   r'   r	   r
   r   global_token_indexr   r   r   get_dummy_inputs.   s   z!LongformerHelper.get_dummy_inputshidden_sizec                 C   s   | ||g| |gdS )zAReturns a dictionary with output name as key, and shape as value.)
last_statepoolerr   )r#   r$   r7   r   r   r   get_output_shapesG   s   z"LongformerHelper.get_output_shapesN)r"   )r   r   r    __doc__staticmethodintr-   r&   r   r6   r   strr   r:   r   r   r   r   r!   +   s&    ,r!   )loggingtypingr   r   r   r   r   r-   	getLoggerr   loggerPRETRAINED_LONGFORMER_MODELSr   r!   r   r   r   r   <module>   s   
