o
    i                     @   s   d dl mZ d dlmZmZmZmZmZmZ d dl	Z	d dl
mZmZ edeeZeG dd dee ZeG dd	 d	Ze	d
ddefddZe	d
dddZdS )    )	dataclass)AnyDictGenericListOptionalTypeVarN)Floats2dRagged
TrfOutputTc                   @   s   e Zd ZU dZeee  ed< eed< deee  deddfddZe	dee fd	d
Z
e	dee fddZe	deee  fddZe	defddZdS )TransformerModelOutputzWrapper for PyTorchTransformerOutput consumed by downstream non-PyTorch components.
    Also acts as the accumulator for the outputs of subsequent models in the Transformer pipeline.
    all_outputslast_layer_onlyoutputsreturnNc                C      || _ || _d S Nr   r   )selfr   r    r   \/home/ubuntu/.local/lib/python3.10/site-packages/spacy_curated_transformers/models/output.py__init__   s   
zTransformerModelOutput.__init__c                 C   s   | j rg S dd | jD S )Nc                 S      g | ]}|d  qS )r   r   .0yr   r   r   
<listcomp>'       z;TransformerModelOutput.embedding_layers.<locals>.<listcomp>r   r   r   r   r   r   embedding_layers"   s   z'TransformerModelOutput.embedding_layersc                 C      dd | j D S )Nc                 S   r   )r   r   r   r   r   r   +   r   zCTransformerModelOutput.last_hidden_layer_states.<locals>.<listcomp>r   r   r   r   r   last_hidden_layer_states)      z/TransformerModelOutput.last_hidden_layer_statesc                 C   r!   )Nc                 S   s   g | ]}|d d qS )   Nr   r   r   r   r   r   /   s    zBTransformerModelOutput.all_hidden_layer_states.<locals>.<listcomp>r#   r   r   r   r   all_hidden_layer_states-   r%   z.TransformerModelOutput.all_hidden_layer_statesc                 C   s   t | jd S Nr   lenr   r   r   r   r   num_outputs1      z"TransformerModelOutput.num_outputs)__name__
__module____qualname____doc__r   r   __annotations__boolr   propertyr    r$   r'   intr+   r   r   r   r   r   
   s&   
 

r   c                   @   s   e Zd ZU dZee ed< eed< dee deddfddZe	de
e fdd	Ze	defd
dZe	dee fddZe	defddZdeeef dd fddZdeeef fddZdS )DocTransformerOutputzStored on Doc instances. Each Ragged element corresponds to a layer in
    original TransformerModelOutput, containing representations of piece identifiers.r   r   r   Nc                C   r   r   r   )r   r   r   r   r   r   r   @   s   
zDocTransformerOutput.__init__c                 C   s   | j rd S | jd S r(   r   r   r   r   r   embedding_layerD   s   
z$DocTransformerOutput.embedding_layerc                 C   s
   | j d S )Nr"   r#   r   r   r   r   last_hidden_layer_stateK      
z,DocTransformerOutput.last_hidden_layer_statec                 C   s   | j dd  S )Nr&   r#   r   r   r   r   r'   O   r,   z,DocTransformerOutput.all_hidden_layer_statesc                 C   s
   t | jS r   r)   r   r   r   r   r+   S   r8   z DocTransformerOutput.num_outputsmsgc                 C   s"   dd |d D | _ |d | _| S )Nc                 S   s   g | ]	\}}t ||qS r   )r
   )r   dataXdlengthsr   r   r   r   X   s    z2DocTransformerOutput.from_dict.<locals>.<listcomp>r   r   r   )r   r9   r   r   r   	from_dictW   s
   
zDocTransformerOutput.from_dictc                 C   s   dd | j D | jdS )Nc                 S   s   g | ]}|j |jfqS r   )r:   r;   )r   layerr   r   r   r   `   s    z0DocTransformerOutput.to_dict.<locals>.<listcomp>r   r   r   r   r   r   to_dict^   s
   zDocTransformerOutput.to_dict)r-   r.   r/   r0   r   r
   r1   r2   r   r3   r   r6   r7   r'   r4   r+   r   strr   r<   r>   r   r   r   r   r5   6   s   
 r5   doc_transformer_outputobjc                 C   s*   t | trd|  iS |d u r| S || S )N__doc_transformer_output__)
isinstancer5   r>   rA   chainr   r   r   serialize_transformer_datag   s   
rF   c                 C   s2   d| v rt g dd| d S |d u r| S || S )NrB   Fr   )r5   r<   rD   r   r   r   deserialize_transformer_datan   s
   rG   r   )dataclassesr   typingr   r   r   r   r   r   srslythinc.typesr	   r
   r   r   r5   msgpack_encodersrF   msgpack_decodersrG   r   r   r   r   <module>   s     +0