Ë
    ÛÓ^jœ  ã                   ó  — d Z ddlZddlmZ ddlZddlmZ ddlmZ ddlm	Z
 ddlmZ dd	lmZ dd
lmZ ddlmZmZmZ ddlmZ ddlmZ ddlmZ ddlmZmZmZmZm Z  ddl!m"Z" ddl#m$Z$m%Z% ddl&m'Z'  e jP                  e)«      Z* ed¬«      e G d„ de«      «       «       Z+ G d„ dejX                  «      Z- G d„ dejX                  «      Z. G d„ dejX                  «      Z/ G d„ dejX                  «      Z0 G d „ d!ejX                  «      Z1 G d"„ d#ejX                  «      Z2 G d$„ d%ejX                  «      Z3 G d&„ d'ejX                  «      Z4 G d(„ d)ejX                  «      Z5 G d*„ d+e«      Z6 G d,„ d-ejX                  «      Z7 G d.„ d/ejX                  «      Z8e G d0„ d1e«      «       Z9 G d2„ d3e9«      Z:e G d4„ d5e9«      «       Z;e G d6„ d7e9«      «       Z< ed8¬«       G d9„ d:e9«      «       Z= ed;¬«       G d<„ d=e9«      «       Z>g d>¢Z?y)?zPyTorch Bros model.é    N)Ú	dataclass)Únn)ÚCrossEntropyLossé   )Úinitialization)ÚACT2FN)Úcreate_bidirectional_mask)ÚGradientCheckpointingLayer)Ú"BaseModelOutputWithCrossAttentionsÚ,BaseModelOutputWithPoolingAndCrossAttentionsÚTokenClassifierOutput)ÚPreTrainedModel)ÚUnpack)Úapply_chunking_to_forward)ÚModelOutputÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚlogging)Úmerge_with_config_defaults)ÚOutputRecorderÚcapture_outputsé   )Ú
BrosConfigz@
    Base class for outputs of token classification models.
    )Úcustom_introc                   óæ   — e Zd ZU dZdZej                  dz  ed<   dZej                  dz  ed<   dZ	ej                  dz  ed<   dZ
eej                     dz  ed<   dZeej                     dz  ed<   y)ÚBrosSpadeOutputaò  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Classification loss.
    initial_token_logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.num_labels)`):
        Classification scores for entity initial tokens (before SoftMax).
    subsequent_token_logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, sequence_length+1)`):
        Classification scores for entity sequence tokens (before SoftMax).
    NÚlossÚinitial_token_logitsÚsubsequent_token_logitsÚhidden_statesÚ
attentions)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚtorchÚFloatTensorÚ__annotations__r   r    r!   Útupler"   © ó    úq/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/bros/modeling_bros.pyr   r   ,   s~   … ñð &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø59Ð˜%×+Ñ+¨dÑ2Ó9Ø8<Ð˜U×.Ñ.°Ñ5Ó<Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ó9Ø26€J��e×'Ñ'Ñ(¨4Ñ/Ô6r,   r   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚBrosPositionalEmbedding1Dc                 óÐ   •— t         ‰| �  «        |j                  | _        ddt        j                  d| j                  d«      | j                  z  z  z  }| j                  d|«       y )Nr   é'  ç        ç       @Úinv_freq)ÚsuperÚ__init__Údim_bbox_sinusoid_emb_1dr'   ÚarangeÚregister_buffer)ÚselfÚconfigr4   Ú	__class__s      €r-   r6   z"BrosPositionalEmbedding1D.__init__F   s^   ø€ Ü‰ÑÔà(.×(GÑ(GˆÔ%àØ”e—l‘l 3¨×(EÑ(EÀsÓKÈd×NkÑNkÑkÑlñ
ˆð 	×Ñ˜Z¨Õ2r,   Úpos_seqÚreturnc                 ó  — |j                  «       }|\  }}}|j                  |||d«      | j                  j                  ddd| j                  dz  «      z  }t	        j
                  |j                  «       |j                  «       gd¬«      }|S )Nr   é   éÿÿÿÿ©Údim)ÚsizeÚviewr4   r7   r'   ÚcatÚsinÚcos)r:   r=   Úseq_sizeÚb1Úb2Úb3Úsinusoid_inpÚpos_embs           r-   Úforwardz!BrosPositionalEmbedding1D.forwardP   s   € Ø—<‘<“>ˆØ‰
ˆˆB�Ø—|‘| B¨¨B°Ó2°T·]±]×5GÑ5GÈÈ1ÈaÐQU×QnÑQnÐrsÑQsÓ5tÑtˆÜ—)‘)˜\×-Ñ-Ó/°×1AÑ1AÓ1CÐDÈ"ÔMˆØˆr,   ©r#   r$   r%   r6   r'   ÚTensorrO   Ú__classcell__©r<   s   @r-   r/   r/   C   s#   ø„ ô3ð˜uŸ|™|ð °·±÷ r,   r/   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚBrosPositionalEmbedding2Dc                 ó„   •— t         ‰| �  «        |j                  | _        t        |«      | _        t        |«      | _        y ©N)r5   r6   Údim_bboxr/   Ú	x_pos_embÚ	y_pos_emb©r:   r;   r<   s     €r-   r6   z"BrosPositionalEmbedding2D.__init__Y   s1   ø€ Ü‰ÑÔàŸ™ˆŒÜ2°6Ó:ˆŒÜ2°6Ó:ˆ�r,   Úbboxr>   c                 ó  — g }t        | j                  «      D ]U  }|dz  dk(  r&|j                  | j                  |d|f   «      «       Œ1|j                  | j	                  |d|f   «      «       ŒW t        j                  |d¬«      }|S )Nr@   r   .rA   rB   )ÚrangerX   ÚappendrY   rZ   r'   rF   )r:   r\   ÚstackÚiÚbbox_pos_embs        r-   rO   z!BrosPositionalEmbedding2D.forward`   s|   € ØˆÜ�t—}‘}Ó%ò 	;ˆAØ�1‰u˜ŠzØ—‘˜TŸ^™^¨D°°a°©LÓ9Õ:à—‘˜TŸ^™^¨D°°a°©LÓ9Õ:ð		;ô
 —y‘y ¨BÔ/ˆØÐr,   rP   rS   s   @r-   rU   rU   X   s#   ø„ ô;ð˜EŸL™Lð ¨U¯\©\÷ r,   rU   c                   ó>   ‡ — e Zd Zˆ fd„Zdej
                  fd„Zˆ xZS )ÚBrosBboxEmbeddingsc                 ó¤   •— t         ‰| �  «        t        |«      | _        t	        j
                  |j                  |j                  d¬«      | _        y )NF)Úbias)	r5   r6   rU   Úbbox_sinusoid_embr   ÚLinearÚdim_bbox_sinusoid_emb_2dÚdim_bbox_projectionÚbbox_projectionr[   s     €r-   r6   zBrosBboxEmbeddings.__init__l   s=   ø€ Ü‰ÑÔÜ!:¸6Ó!BˆÔÜ!Ÿy™y¨×)HÑ)HÈ&×JdÑJdÐkpÔqˆÕr,   r\   c                 ó¬   — |j                  dd«      }|d d d …d d …d d …f   |d d …d d d …d d …f   z
  }| j                  |«      }| j                  |«      }|S )Nr   r   )Ú	transposerg   rk   )r:   r\   Úbbox_tÚbbox_posrb   s        r-   rO   zBrosBboxEmbeddings.forwardq   s\   € Ø—‘  1Ó%ˆØ˜$¢¢1¢a˜-Ñ(¨6²!°Tº1ºa°-Ñ+@Ñ@ˆØ×-Ñ-¨hÓ7ˆØ×+Ñ+¨LÓ9ˆàÐr,   rP   rS   s   @r-   rd   rd   k   s   ø„ ôrð
˜EŸL™L÷ r,   rd   c                   óÄ   ‡ — e Zd ZdZˆ fd„Z	 	 	 	 d
dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  f
d	„Zˆ xZS )ÚBrosTextEmbeddingszGConstruct the embeddings from word, position and token_type embeddings.c                 ó@  •— t         ‰| �  «        t        j                  |j                  |j
                  |j                  ¬«      | _        t        j                  |j                  |j
                  «      | _	        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        | j#                  dt%        j&                  |j                  «      j)                  d«      «       | j#                  dt%        j*                  | j,                  j/                  «       t$        j0                  | j,                  j2                  ¬«      d¬«       y )	N)Úpadding_idx©ÚepsÚposition_ids©r   rA   Útoken_type_ids©ÚdtypeÚdeviceF)Ú
persistent)r5   r6   r   Ú	EmbeddingÚ
vocab_sizeÚhidden_sizeÚpad_token_idÚword_embeddingsÚmax_position_embeddingsÚposition_embeddingsÚtype_vocab_sizeÚtoken_type_embeddingsÚ	LayerNormÚlayer_norm_epsÚDropoutÚhidden_dropout_probÚdropoutr9   r'   r8   ÚexpandÚzerosrv   rD   Úlongr{   r[   s     €r-   r6   zBrosTextEmbeddings.__init__}   s#  ø€ Ü‰ÑÔä!Ÿ|™|¨F×,=Ñ,=¸v×?QÑ?QÐ_e×_rÑ_rÔsˆÔÜ#%§<¡<°×0NÑ0NÐPV×PbÑPbÓ#cˆÔ Ü%'§\¡\°&×2HÑ2HÈ&×J\ÑJ\Ó%]ˆÔ"äŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆŒà×Ñ˜^¬U¯\©\¸&×:XÑ:XÓ-Y×-`Ñ-`ÐahÓ-iÔjØ×ÑØÜ�K‰KØ×!Ñ!×&Ñ&Ó(Ü—j‘jØ×(Ñ(×/Ñ/ôð
 ð 	õ 	
r,   NÚ	input_idsrx   rv   Úinputs_embedsr>   c                 ó6  — |�|j                  «       }n|j                  «       d d }|d   }|€| j                  d d …d |…f   }|€st        | d«      r-| j                  d d …d |…f   }|j	                  |d   |«      }|}n:t        j                  |t
        j                  | j                  j                  ¬«      }|€| j                  |«      }| j                  |«      }	||	z   }
| j                  |«      }|
|z  }
| j                  |
«      }
| j                  |
«      }
|
S )NrA   r   rx   r   ry   )rD   rv   Úhasattrrx   r‹   r'   rŒ   r�   r{   r�   r…   rƒ   r†   rŠ   )r:   rŽ   rx   rv   r�   Úinput_shapeÚ
seq_lengthÚbuffered_token_type_idsÚ buffered_token_type_ids_expandedr…   Ú
embeddingsrƒ   s               r-   rO   zBrosTextEmbeddings.forward’   s/  € ð Ð Ø#Ÿ.™.Ó*‰Kà'×,Ñ,Ó.¨s°Ð3ˆKà  ‘^ˆ
àÐØ×,Ñ,ªQ°°°¨^Ñ<ˆLàÐ!Ü�tÐ-Ô.Ø*.×*=Ñ*=ºaÀÀ*À¸nÑ*MÐ'Ø3J×3QÑ3QÐR]Ð^_ÑR`ÐblÓ3mÐ0Ø!A‘ä!&§¡¨[ÄÇ
Á
ÐSW×SdÑSd×SkÑSkÔ!l�àÐ Ø ×0Ñ0°Ó;ˆMØ $× :Ñ :¸>Ó JÐØ"Ð%:Ñ:ˆ
à"×6Ñ6°|ÓDÐØÐ)Ñ)ˆ
à—^‘^ JÓ/ˆ
Ø—\‘\ *Ó-ˆ
ØÐr,   )NNNN)	r#   r$   r%   r&   r6   r'   rQ   rO   rR   rS   s   @r-   rq   rq   z   sv   ø„ ÙQô
ð. *.Ø.2Ø,0Ø-1ñ#à—<‘< $Ñ&ð#ð Ÿ™ tÑ+ð#ð —l‘l TÑ)ð	#ð
 —|‘| dÑ*ð#ð 
�‰÷#r,   rq   c                   óÖ   ‡ — e Zd Zˆ fd„Z	 	 	 d
dej
                  dej
                  dej
                  dz  dej
                  dz  dej
                  dz  deej
                     fd	„Zˆ xZS )ÚBrosSelfAttentionc                 óî  •— t         ‰| �  «        |j                  |j                  z  dk7  r2t	        |d«      s&t        d|j                  › d|j                  › d�«      ‚|j                  | _        t        |j                  |j                  z  «      | _        | j                  | j                  z  | _        t        j                  |j                  | j                  «      | _        t        j                  |j                  | j                  «      | _        t        j                  |j                  | j                  «      | _        t        j                  |j                  «      | _        |j"                  | _        y )Nr   Úembedding_sizezThe hidden size (z6) is not a multiple of the number of attention heads (ú))r5   r6   r   Únum_attention_headsr‘   Ú
ValueErrorÚintÚattention_head_sizeÚall_head_sizer   rh   ÚqueryÚkeyÚvaluerˆ   Úattention_probs_dropout_probrŠ   Ú
is_decoderr[   s     €r-   r6   zBrosSelfAttention.__init__¹   s)  ø€ Ü‰ÑÔØ×Ñ × :Ñ :Ñ:¸aÒ?ÌÐPVÐXhÔHiÜØ# F×$6Ñ$6Ð#7ð 8Ø ×4Ñ4Ð5°Qð8óð ð
 $*×#=Ñ#=ˆÔ Ü#& v×'9Ñ'9¸F×<VÑ<VÑ'VÓ#WˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔä—Y‘Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
Ü—9‘9˜V×/Ñ/°×1CÑ1CÓDˆŒÜ—Y‘Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
ä—z‘z &×"EÑ"EÓFˆŒà ×+Ñ+ˆ�r,   Nr!   rb   Úattention_maskÚencoder_hidden_statesÚencoder_attention_maskr>   c                 ó¼  — |j                   d   d| j                  | j                  f}| j                  |«      j	                  |«      j                  dd«      }|d u}|rc| j                  |«      j	                  |«      j                  dd«      }	| j                  |«      j	                  |«      j                  dd«      }
|}n`| j                  |«      j	                  |«      j                  dd«      }	| j                  |«      j	                  |«      j                  dd«      }
t        j                  ||	j                  dd«      «      }|j                   \  }}}}|j	                  ||||«      }|j                  g d¢«      }t        j                  d||f«      }||z   }|t        j                  | j                  «      z  }|�||z   } t        j                  d¬«      |«      }| j!                  |«      }t        j                  ||
«      }|j                  dddd	«      j#                  «       }|j%                  «       d d | j&                  fz   } |j                  |Ž }||fS )
Nr   rA   r   r@   éþÿÿÿ)r@   r   r   r   zbnid,bijd->bnijrB   r   )Úshaperœ   rŸ   r¡   rE   rm   r¢   r£   r'   ÚmatmulÚpermuteÚeinsumÚmathÚsqrtr   ÚSoftmaxrŠ   Ú
contiguousrD   r    )r:   r!   rb   r¦   r§   r¨   Úhidden_shapeÚquery_layerÚis_cross_attentionÚ	key_layerÚvalue_layerÚattention_scoresÚ
batch_sizeÚn_headr“   Úd_headÚbbox_pos_scoresÚattention_probsÚcontext_layerÚnew_context_layer_shapes                       r-   rO   zBrosSelfAttention.forwardÍ   sG  € ð &×+Ñ+¨AÑ.°°D×4LÑ4LÈd×NfÑNfÐgˆØ—j‘j Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆð
 3¸$Ð>ÐáØŸ™Ð!6Ó7×<Ñ<¸\ÓJ×TÑTÐUVÐXYÓZˆIØŸ*™*Ð%:Ó;×@Ñ@ÀÓN×XÑXÐYZÐ\]Ó^ˆKØ3‰NàŸ™ Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆIØŸ*™* ]Ó3×8Ñ8¸ÓF×PÑPÐQRÐTUÓVˆKô !Ÿ<™<¨°Y×5HÑ5HÈÈRÓ5PÓQÐð 2=×1BÑ1BÑ.ˆ
�F˜J¨Ø#×(Ñ(¨°ZÀÈVÓTˆØ#×+Ñ+ªLÓ9ˆÜŸ,™,Ð'8¸;ÈÐ:UÓVˆà+¨oÑ=Ðà+¬d¯i©i¸×8PÑ8PÓ.QÑQÐØÐ%à/°.Ñ@Ðð -œ"Ÿ*™*¨Ô,Ð-=Ó>ˆð Ÿ,™, Ó7ˆäŸ™ _°kÓBˆà%×-Ñ-¨a°°A°qÓ9×DÑDÓFˆØ"/×"4Ñ"4Ó"6°s¸Ð";¸t×?QÑ?QÐ>SÑ"SÐØ*˜×*Ñ*Ð,CÐDˆà˜oÐ-Ð-r,   ©NNN)	r#   r$   r%   r6   r'   rQ   r*   rO   rR   rS   s   @r-   r˜   r˜   ¸   s~   ø„ ô,ð0 /3Ø59Ø6:ñ5.à—|‘|ð5.ð —l‘lð5.ð Ÿ™ tÑ+ð	5.ð
  %Ÿ|™|¨dÑ2ð5.ð !&§¡¨tÑ 3ð5.ð 
ˆu�|‰|Ñ	÷5.r,   r˜   c                   ón   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  fd„Zˆ xZS )ÚBrosSelfOutputc                 ó(  •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  «      | _
        y ©Nrt   )r5   r6   r   rh   r   Údenser†   r‡   rˆ   r‰   rŠ   r[   s     €r-   r6   zBrosSelfOutput.__init__  s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�r,   r!   Úinput_tensorr>   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S rW   ©rÅ   rŠ   r†   ©r:   r!   rÆ   s      r-   rO   zBrosSelfOutput.forward  ó7   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ }°|Ñ'CÓDˆØÐr,   rP   rS   s   @r-   rÂ   rÂ     ó1   ø„ ô>ð U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ r,   rÂ   c                   óÐ   ‡ — e Zd Zˆ fd„Z	 	 	 d
dej
                  dej
                  dej
                  dz  dej
                  dz  dej
                  dz  dej
                  fd	„Zˆ xZS )ÚBrosAttentionc                 ób   •— t         ‰| �  «        t        |«      | _        t	        |«      | _        y rW   )r5   r6   r˜   r:   rÂ   Úoutputr[   s     €r-   r6   zBrosAttention.__init__  s&   ø€ Ü‰ÑÔÜ% fÓ-ˆŒ	Ü$ VÓ,ˆ�r,   Nr!   rb   r¦   r§   r¨   r>   c                 ó`   — |}| j                  |||||¬«      \  }}| j                  ||«      }|S )N©rb   r¦   r§   r¨   )r:   rÏ   )r:   r!   rb   r¦   r§   r¨   ÚresidualÚ_s           r-   rO   zBrosAttention.forward  sH   € ð !ˆØŸ9™9ØØ%Ø)Ø"7Ø#9ð %ó 
Ñˆ�qð Ÿ™ M°8Ó<ˆØÐr,   rÀ   rP   rS   s   @r-   rÍ   rÍ     sy   ø„ ô-ð /3Ø59Ø6:ñà—|‘|ðð —l‘lðð Ÿ™ tÑ+ð	ð
  %Ÿ|™|¨dÑ2ðð !&§¡¨tÑ 3ðð 
�‰÷r,   rÍ   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚBrosIntermediatec                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                  t        «      rt        |j                     | _        y |j                  | _        y rW   )r5   r6   r   rh   r   Úintermediate_sizerÅ   Ú
isinstanceÚ
hidden_actÚstrr   Úintermediate_act_fnr[   s     €r-   r6   zBrosIntermediate.__init__0  s]   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3KÑ3KÓLˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$r,   r!   r>   c                 óJ   — | j                  |«      }| j                  |«      }|S rW   )rÅ   rÛ   )r:   r!   s     r-   rO   zBrosIntermediate.forward8  s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐr,   rP   rS   s   @r-   rÕ   rÕ   /  s#   ø„ ô9ð U§\¡\ð °e·l±l÷ r,   rÕ   c                   ón   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  fd„Zˆ xZS )Ú
BrosOutputc                 ó(  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        y rÄ   )r5   r6   r   rh   r×   r   rÅ   r†   r‡   rˆ   r‰   rŠ   r[   s     €r-   r6   zBrosOutput.__init__?  s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×7Ñ7¸×9KÑ9KÓLˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�r,   r!   rÆ   r>   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S rW   rÈ   rÉ   s      r-   rO   zBrosOutput.forwardE  rÊ   r,   rP   rS   s   @r-   rÞ   rÞ   >  rË   r,   rÞ   c                   óà   ‡ — e Zd Zˆ fd„Z	 	 	 ddej
                  dej
                  dej                  dz  dej                  dz  dej                  dz  dee   d	ej
                  fd
„Z	d„ Z
ˆ xZS )Ú	BrosLayerc                 ób  •— t         ‰| �  «        |j                  | _        d| _        t	        |«      | _        |j                  | _        |j                  | _        | j                  r*| j                  st        | › d�«      ‚t	        |«      | _	        t        |«      | _        t        |«      | _        y )Nr   z> should be used as a decoder model if cross attention is added)r5   r6   Úchunk_size_feed_forwardÚseq_len_dimrÍ   Ú	attentionr¥   Úadd_cross_attentionÚ	ExceptionÚcrossattentionrÕ   ÚintermediaterÞ   rÏ   r[   s     €r-   r6   zBrosLayer.__init__M  s”   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$ØˆÔÜ& vÓ.ˆŒØ ×+Ñ+ˆŒØ#)×#=Ñ#=ˆÔ Ø×#Ò#Ø—?’?Ü 4 &Ð(fÐ gÓhÐhÜ"/°Ó"7ˆDÔÜ,¨VÓ4ˆÔÜ  Ó(ˆ�r,   Nr!   rb   r¦   r§   r¨   Úkwargsr>   c                 ó  — | j                  |||¬«      }| j                  r7|�5t        | d«      rt        d| › d�«      ‚ | j                  |f|||dœ|¤Ž\  }}t        | j                  | j                  | j                  |«      }|S )N)rb   r¦   ré   z'If `encoder_hidden_states` are passed, z` has to be instantiated with cross-attention layers by setting `config.add_cross_attention=True`)r¦   r§   r¨   )	ræ   r¥   r‘   rè   ré   r   Úfeed_forward_chunkrä   rå   )r:   r!   rb   r¦   r§   r¨   rë   rÓ   s           r-   rO   zBrosLayer.forward[  sÁ   € ð Ÿ™ØØ%Ø)ð 'ó 
ˆð �?Š?Ð4Ð@Ü�tÐ-Ô.ÜØ=¸d¸Vð  Ddð  eóð ð  3˜t×2Ñ2Øð à-Ø&;Ø'=ñ	 ð
 ñ ÑˆM˜1ô 2Ø×#Ñ#Ø×(Ñ(Ø×ÑØó	
ˆð Ðr,   c                 óL   — | j                  |«      }| j                  ||«      }|S rW   )rê   rÏ   )r:   Úattention_outputÚintermediate_outputÚlayer_outputs       r-   rí   zBrosLayer.feed_forward_chunk�  s,   € Ø"×/Ñ/Ð0@ÓAÐØ—{‘{Ð#6Ð8HÓIˆØÐr,   rÀ   )r#   r$   r%   r6   r'   rQ   r(   r   r   rO   rí   rR   rS   s   @r-   râ   râ   L  s•   ø„ ô)ð$ 48Ø:>Ø;?ñ$à—|‘|ð$ð —l‘lð$ð ×)Ñ)¨DÑ0ð	$ð
  %×0Ñ0°4Ñ7ð$ð !&× 1Ñ 1°DÑ 8ð$ð Ð+Ñ,ð$ð 
�‰ó$öLr,   râ   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )Ú
BrosPoolerc                 ó²   •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  «       | _        y rW   )r5   r6   r   rh   r   rÅ   ÚTanhÚ
activationr[   s     €r-   r6   zBrosPooler.__init__‰  s9   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ'™'›)ˆ�r,   r!   r>   c                 ó\   — |d d …df   }| j                  |«      }| j                  |«      }|S )Nr   )rÅ   rö   )r:   r!   Úfirst_token_tensorÚpooled_outputs       r-   rO   zBrosPooler.forwardŽ  s6   € ð +ª1¨a¨4Ñ0ÐØŸ
™
Ð#5Ó6ˆØŸ™¨Ó6ˆØÐr,   rP   rS   s   @r-   ró   ró   ˆ  s#   ø„ ô$ð
 U§\¡\ð °e·l±l÷ r,   ró   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚBrosRelationExtractorc                 óR  •— t         ‰| �  «        |j                  | _        |j                  | _        |j                  | _        |j                  | _        t        j                  | j                  «      | _	        t        j                  | j                  | j                  | j
                  z  «      | _        t        j                  | j                  | j                  | j
                  z  «      | _        t        j                  t        j                  d| j                  «      «      | _        y )Nr   )r5   r6   Ún_relationsr   Úbackbone_hidden_sizeÚhead_hidden_sizeÚclassifier_dropout_probr   rˆ   Údroprh   r¡   r¢   Ú	Parameterr'   rŒ   Ú
dummy_noder[   s     €r-   r6   zBrosRelationExtractor.__init__˜  sÏ   ø€ Ü‰ÑÔØ!×-Ñ-ˆÔØ$*×$6Ñ$6ˆÔ!Ø &× 2Ñ 2ˆÔØ'-×'EÑ'EˆÔ$ä—J‘J˜t×;Ñ;Ó<ˆŒ	Ü—Y‘Y˜t×8Ñ8¸$×:JÑ:JÈT×MbÑMbÑ:bÓcˆŒ
ä—9‘9˜T×6Ñ6¸×8HÑ8HÈ4×K`ÑK`Ñ8`ÓaˆŒäŸ,™,¤u§{¡{°1°d×6OÑ6OÓ'PÓQˆ�r,   r´   r¶   c           	      óº  — | j                  | j                  |«      «      }| j                  j                  d«      j	                  d|j                  d«      d«      }t        j                  ||gd¬«      }| j                  | j                  |«      «      }|j                  |j                  d«      |j                  d«      | j                  | j                  «      }|j                  |j                  d«      |j                  d«      | j                  | j                  «      }t        j                  |j                  dddd«      |j                  dddd«      «      }|S )Nr   r   ©Úaxisr@   r   )r¡   r  r  Ú	unsqueezeÚrepeatrD   r'   rF   r¢   rE   rý   rÿ   r¬   r­   )r:   r´   r¶   Ú	dummy_vecÚrelation_scores        r-   rO   zBrosRelationExtractor.forward¦  s  € Ø—j‘j §¡¨;Ó!7Ó8ˆà—O‘O×-Ñ-¨aÓ0×7Ñ7¸¸9¿>¹>È!Ó;LÈaÓPˆ	Ü—I‘I˜y¨)Ð4¸1Ô=ˆ	Ø—H‘H˜TŸY™Y yÓ1Ó2ˆ	à!×&Ñ&Ø×Ñ˜QÓ ×!1Ñ!1°!Ó!4°d×6FÑ6FÈ×H]ÑH]ó
ˆð —N‘N 9§>¡>°!Ó#4°i·n±nÀQÓ6GÈ×IYÑIYÐ[_×[pÑ[pÓqˆ	äŸ™Ø×Ñ  1 a¨Ó+¨Y×->Ñ->¸qÀ!ÀQÈÓ-Jó
ˆð Ðr,   rP   rS   s   @r-   rû   rû   —  s$   ø„ ôRð 5§<¡<ð ¸E¿L¹L÷ r,   rû   c                   ó    ‡ — e Zd ZU eed<   dZe eedd¬«       eedd¬«      dœZ	 e
j                  «       dej                  fˆ fd	„«       Zˆ xZS )
ÚBrosPreTrainedModelr;   Úbrosr   ræ   )ÚindexÚ
layer_nameré   )r!   r"   Úcross_attentionsÚmodulec                 ó�  •— t         ‰| �  |«       | j                  j                  }t	        |t
        «      r"t        j                  |j                  |¬«       yt	        |t        «      ryt        j                  |j                  t        j                  |j                  j                  d   «      j                  d«      «       t        j                   |j"                  «       yt	        |t$        «      rUddt        j                  d|j&                  d«      |j&                  z  z  z  }t        j                  |j(                  |«       yy)	zInitialize the weights)ÚstdrA   rw   r   r1   r2   r3   N)r5   Ú_init_weightsr;   Úinitializer_rangerØ   rû   ÚinitÚnormal_r  rq   Úcopy_rv   r'   r8   r«   r‹   Úzeros_rx   r/   r7   r4   )r:   r  r  r4   r<   s       €r-   r  z!BrosPreTrainedModel._init_weightsÃ  sí   ø€ ô 	‰Ñ˜fÔ%Ø�k‰k×+Ñ+ˆÜ�fÔ3Ô4Ü�L‰L˜×*Ñ*°Ö4Ü˜Ô 2Ô3Ü�J‰J�v×*Ñ*¬E¯L©L¸×9LÑ9L×9RÑ9RÐSUÑ9VÓ,W×,^Ñ,^Ð_fÓ,gÔhÜ�K‰K˜×-Ñ-Õ.Ü˜Ô 9Ô:ØØœ%Ÿ,™, s¨F×,KÑ,KÈSÓQÐTZ×TsÑTsÑsÑtñˆHô �J‰J�v—‘¨Õ1ð	 ;r,   )r#   r$   r%   r   r)   Úbase_model_prefixrâ   r   r˜   Ú_can_record_outputsr'   Úno_gradr   ÚModuler  rR   rS   s   @r-   r  r  ¹  s\   ø… àÓØÐà"Ù$Ð%6¸aÈKÔXÙ*Ð+<ÀAÐRbÔcñÐð €U‡]�]ƒ_ð2 B§I¡Iô 2ó ô2r,   r  c                   óú   ‡ — e Zd Zˆ fd„Zee	 	 	 ddej                  dej                  dej                  dz  dej                  dz  dej                  dz  de	e
   d	eej                     ez  fd
„«       «       Zˆ xZS )ÚBrosEncoderc                 óÖ   •— t         ‰| �  |«       t        j                  t	        |j
                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        | j                  «        y c c}w rW   )	r5   r6   r   Ú
ModuleListr^   Únum_hidden_layersrâ   ÚlayerÚ	post_init)r:   r;   rÓ   r<   s      €r-   r6   zBrosEncoder.__init__Õ  sK   ø€ Ü‰Ñ˜Ô Ü—]‘]¼uÀV×E]ÑE]Ó?^Ö#_¸!¤I¨fÕ$5Ò#_Ó`ˆŒ
Ø�‰Õùò $`s   ·A&Nr!   rb   r¦   r§   r¨   rë   r>   c           	      óX   — | j                   D ]  } ||f||||dœ|¤Ž}Œ t        |¬«      S )NrÑ   )Úlast_hidden_state)r#  r   )r:   r!   rb   r¦   r§   r¨   rë   Úlayer_modules           r-   rO   zBrosEncoder.forwardÚ  sQ   € ð !ŸJ™Jò 	ˆLÙ(Øðà)Ø-Ø&;Ø'=ñð ñ‰Mð	ô 2Ø+ô
ð 	
r,   rÀ   )r#   r$   r%   r6   r   r   r'   rQ   r(   r   r   r*   r   rO   rR   rS   s   @r-   r  r  Ô  s±   ø„ ôð
  Øð
 48Ø:>Ø;?ñ
à—|‘|ð
ð —l‘lð
ð ×)Ñ)¨DÑ0ð	
ð
  %×0Ñ0°4Ñ7ð
ð !&× 1Ñ 1°DÑ 8ð
ð Ð+Ñ,ð
ð 
ˆu�|‰|Ñ	ÐAÑ	Aò
ó ó  ô
r,   r  c                   óx  ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Zee	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ej                  dz  d
ej                  dz  dej                  dz  dej                  dz  de
e   deej                     ez  fd„«       «       Zˆ xZS )Ú	BrosModelc                 óÚ   •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        t        |«      | _        |rt        |«      nd| _
        | j                  «        y)zv
        add_pooling_layer (bool, *optional*, defaults to `True`):
            Whether to add a pooling layer
        N)r5   r6   r;   rq   r–   rd   Úbbox_embeddingsr  Úencoderró   Úpoolerr$  )r:   r;   Úadd_pooling_layerr<   s      €r-   r6   zBrosModel.__init__ö  sX   ø€ ô
 	‰Ñ˜Ô ØˆŒä,¨VÓ4ˆŒÜ1°&Ó9ˆÔÜ" 6Ó*ˆŒá,=”j Ô(À4ˆŒà�‰Õr,   c                 ó.   — | j                   j                  S rW   ©r–   r�   )r:   s    r-   Úget_input_embeddingszBrosModel.get_input_embeddings  s   € Ø�‰×.Ñ.Ð.r,   c                 ó&   — || j                   _        y rW   r0  )r:   r£   s     r-   Úset_input_embeddingszBrosModel.set_input_embeddings	  s   € Ø*/ˆ�‰Õ'r,   NrŽ   r\   r¦   rx   rv   r�   r§   r¨   rë   r>   c	                 ó¤  — |du |duz  rt        d«      ‚|€t        d«      ‚| j                  ||||¬«      }
|
j                  dd }|
j                  }|€t	        j
                  ||¬«      }t        | j                  |
|¬«      }|�t        | j                  |
||¬«      }|j                  d   d	k(  r|dd…dd…g d
¢f   }|| j                  j                  z  }| j                  |«      } | j                  |
f||||dœ|	¤Ž}|d   }| j                  �| j                  |«      nd}t        |||j                  |j                  |j                  ¬«      S )aÍ  
        bbox ('torch.FloatTensor' of shape '(batch_size, num_boxes, 4)'):
            Bounding box coordinates for each token in the input sequence. Each bounding box is a list of four values
            (x1, y1, x2, y2), where (x1, y1) is the top left corner, and (x2, y2) is the bottom right corner of the
            bounding box.

        Examples:

        ```python
        >>> import torch
        >>> from transformers import BrosProcessor, BrosModel

        >>> processor = BrosProcessor.from_pretrained("jinho8345/bros-base-uncased")

        >>> model = BrosModel.from_pretrained("jinho8345/bros-base-uncased")

        >>> encoding = processor("Hello, my dog is cute", add_special_tokens=False, return_tensors="pt")
        >>> bbox = torch.tensor([[[0, 0, 1, 1]]]).repeat(1, encoding["input_ids"].shape[-1], 1)
        >>> encoding["bbox"] = bbox

        >>> outputs = model(**encoding)
        >>> last_hidden_states = outputs.last_hidden_state
        ```Nz:You must specify exactly one of input_ids or inputs_embedszYou have to specify bbox)rŽ   rv   rx   r�   rA   )r{   )r;   r�   r¦   )r;   r�   r¦   r§   é   )r   r   r@   r   r@   r   r   r   rÑ   r   )r&  Úpooler_outputr!   r"   r  )r�   r–   r«   r{   r'   Úonesr	   r;   Ú
bbox_scaler+  r,  r-  r   r!   r"   r  )r:   rŽ   r\   r¦   rx   rv   r�   r§   r¨   rë   Úembedding_outputr’   r{   Úscaled_bboxÚbbox_position_embeddingsÚencoder_outputsÚsequence_outputrù   s                     r-   rO   zBrosModel.forward  sŽ  € ðJ ˜Ð -°tÐ";Ò<ÜÐYÓZÐZàˆ<ÜÐ7Ó8Ð8àŸ?™?ØØ%Ø)Ø'ð	 +ó 
Ðð '×,Ñ,¨S¨bÐ1ˆØ!×(Ñ(ˆàÐ!Ü"ŸZ™Z¨¸FÔCˆNä2Ø—;‘;Ø*Ø)ô
ˆð "Ð-Ü%>Ø—{‘{Ø.Ø5Ø&;ô	&Ð"ð �:‰:�b‰>˜QÒØšš1Ò6Ð6Ñ7ˆDØ˜TŸ[™[×3Ñ3Ñ3ˆØ#'×#7Ñ#7¸Ó#DÐ à>J¸d¿l¹lØð?
à1Ø)Ø"7Ø#9ñ?
ð ñ?
ˆð *¨!Ñ,ˆØ8<¿¹Ð8O˜Ÿ™ OÔ4ÐUYˆä;Ø-Ø'Ø)×7Ñ7Ø&×1Ñ1Ø,×=Ñ=ô
ð 	
r,   )T©NNNNNNNN)r#   r$   r%   r6   r1  r3  r   r   r'   rQ   r   r   r*   r   rO   rR   rS   s   @r-   r)  r)  ô  s  ø„ õò /ò0ð Øð *.Ø$(Ø.2Ø.2Ø,0Ø-1Ø59Ø6:ñ[
à—<‘< $Ñ&ð[
ð �l‰l˜TÑ!ð[
ð Ÿ™ tÑ+ð	[
ð
 Ÿ™ tÑ+ð[
ð —l‘l TÑ)ð[
ð —|‘| dÑ*ð[
ð  %Ÿ|™|¨dÑ2ð[
ð !&§¡¨tÑ 3ð[
ð Ð+Ñ,ð[
ð 
ˆu�|‰|Ñ	ÐKÑ	Kò[
ó ó ô[
r,   r)  c                   óp  ‡ — e Zd ZdgZˆ fd„Zee	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ej                  dz  d
ej                  dz  dej                  dz  de	e
   deej                     ez  fd„«       «       Zˆ xZS )ÚBrosForTokenClassificationr-  c                 ó`  •— t         ‰| �  |«       |j                  | _        t        |«      | _        t        |d«      r|j                  n|j                  }t        j                  |«      | _
        t        j                  |j                  |j                  «      | _        | j                  «        y ©NÚclassifier_dropout)r5   r6   Ú
num_labelsr)  r  r‘   rC  r‰   r   rˆ   rŠ   rh   r   Ú
classifierr$  ©r:   r;   rC  r<   s      €r-   r6   z#BrosForTokenClassification.__init__p  s…   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒä˜fÓ%ˆŒ	ä)0°Ð9MÔ)NˆF×%Ò%ÐTZ×TnÑTnð 	ô —z‘zÐ"4Ó5ˆŒÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒà�‰Õr,   NrŽ   r\   r¦   Úbbox_first_token_maskrx   rv   r�   Úlabelsrë   r>   c	           	      óà  —  | j                   |f|||||dœ|	¤Ž}
|
d   }| j                  |«      }| j                  |«      }d}|�ˆt        «       }|�J|j	                  d«      } ||j	                  d| j
                  «      |   |j	                  d«      |   «      }n2 ||j	                  d| j
                  «      |j	                  d«      «      }t        |||
j                  |
j                  ¬«      S )aè  
        bbox ('torch.FloatTensor' of shape '(batch_size, num_boxes, 4)'):
            Bounding box coordinates for each token in the input sequence. Each bounding box is a list of four values
            (x1, y1, x2, y2), where (x1, y1) is the top left corner, and (x2, y2) is the bottom right corner of the
            bounding box.
        bbox_first_token_mask (`torch.FloatTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Mask to indicate the first token of each bounding box. Mask values selected in `[0, 1]`:

            - 1 for tokens that are **not masked**,
            - 0 for tokens that are **masked**.

        Examples:

        ```python
        >>> import torch
        >>> from transformers import BrosProcessor, BrosForTokenClassification

        >>> processor = BrosProcessor.from_pretrained("jinho8345/bros-base-uncased")

        >>> model = BrosForTokenClassification.from_pretrained("jinho8345/bros-base-uncased")

        >>> encoding = processor("Hello, my dog is cute", add_special_tokens=False, return_tensors="pt")
        >>> bbox = torch.tensor([[[0, 0, 1, 1]]]).repeat(1, encoding["input_ids"].shape[-1], 1)
        >>> encoding["bbox"] = bbox

        >>> outputs = model(**encoding)
        ```)r\   r¦   rx   rv   r�   r   NrA   ©r   Úlogitsr!   r"   )	r  rŠ   rE  r   rE   rD  r   r!   r"   )r:   rŽ   r\   r¦   rG  rx   rv   r�   rH  rë   Úoutputsr=  rK  r   Úloss_fcts                  r-   rO   z"BrosForTokenClassification.forward}  s	  € ðR AJÀÇ	Á	ØðA
àØ)Ø)Ø%Ø'ñA
ð ñA
ˆð " !™*ˆàŸ,™, Ó7ˆØ—‘ Ó1ˆàˆØÐÜ'Ó)ˆHØ$Ð0Ø(=×(BÑ(BÀ2Ó(FÐ%ÙØ—K‘K  D§O¡OÓ4Ð5JÑKÈVÏ[É[ÐY[Ë_Ð]rÑMsó‘ñ   §¡¨B°·±Ó @À&Ç+Á+ÈbÃ/ÓR�ä$ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r,   r>  ©r#   r$   r%   Ú"_keys_to_ignore_on_load_unexpectedr6   r   r   r'   rQ   r   r   r*   r   rO   rR   rS   s   @r-   r@  r@  l  s  ø„ à*3¨Ð&ôð Øð *.Ø$(Ø.2Ø59Ø.2Ø,0Ø-1Ø&*ñF
à—<‘< $Ñ&ðF
ð �l‰l˜TÑ!ðF
ð Ÿ™ tÑ+ð	F
ð
  %Ÿ|™|¨dÑ2ðF
ð Ÿ™ tÑ+ðF
ð —l‘l TÑ)ðF
ð —|‘| dÑ*ðF
ð —‘˜tÑ#ðF
ð Ð+Ñ,ðF
ð 
ˆu�|‰|Ñ	Ð4Ñ	4òF
ó ó ôF
r,   r@  a  
    Bros Model with a token classification head on top (initial_token_layers and subsequent_token_layer on top of the
    hidden-states output) e.g. for Named-Entity-Recognition (NER) tasks. The initial_token_classifier is used to
    predict the first token of each entity, and the subsequent_token_classifier is used to predict the subsequent
    tokens within an entity. Compared to BrosForTokenClassification, this model is more robust to serialization errors
    since it predicts next token from one token.
    c                   ó�  ‡ — e Zd ZdgZˆ fd„Zee	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ej                  dz  d
ej                  dz  dej                  dz  dej                  dz  de	e
   deej                     ez  fd„«       «       Zˆ xZS )Ú!BrosSpadeEEForTokenClassificationr-  c           	      óf  •— t         ‰| �  |«       || _        |j                  | _        |j                  | _        |j
                  | _        t        |«      | _        t        |d«      r|j                  n|j                  }t        j                  t        j                  |«      t        j                  |j
                  |j
                  «      t        j                  |«      t        j                  |j
                  |j                  «      «      | _        t#        |«      | _        | j'                  «        y rB  )r5   r6   r;   rD  rý   r   rþ   r)  r  r‘   rC  r‰   r   Ú
Sequentialrˆ   rh   Úinitial_token_classifierrû   Úsubsequent_token_classifierr$  rF  s      €r-   r6   z*BrosSpadeEEForTokenClassification.__init__Ô  sè   ø€ Ü‰Ñ˜Ô ØˆŒØ ×+Ñ+ˆŒØ!×-Ñ-ˆÔØ$*×$6Ñ$6ˆÔ!ä˜fÓ%ˆŒ	ä)0°Ð9MÔ)NˆF×%Ò%ÐTZ×TnÑTnð 	ô
 )+¯©Ü�J‰JÐ)Ó*Ü�I‰I�f×(Ñ(¨&×*<Ñ*<Ó=Ü�J‰JÐ)Ó*Ü�I‰I�f×(Ñ(¨&×*;Ñ*;Ó<ó	)
ˆÔ%ô ,AÀÓ+HˆÔ(à�‰Õr,   NrŽ   r\   r¦   rG  rx   rv   r�   Úinitial_token_labelsÚsubsequent_token_labelsrë   r>   c
           
      ód  —  | j                   d
||||||dœ|
¤Ž}|d   }|j                  dd«      j                  «       }| j                  |«      j                  dd«      j                  «       }| j	                  ||«      j                  d«      }d|z
  }|j                  \  }}|j                  }t        j                  |t        j                  |dg|j                  |¬«      gd¬«      j                  «       }|j                  |dd…ddd…f   t        j                  |j                  «      j                  «      }t        j                   ||dz   «      j#                  |t        j                  ¬«      }|j                  |ddd…dd…f   t        j                  |j                  «      j                  «      }|j%                  d«      j                  «       }d}|�µ|	�³t'        «       }|j%                  d«      }|�;|j%                  d«      } ||j%                  d| j(                  «      |   ||   «      }n# ||j%                  d| j(                  «      |«      }|	j%                  d«      }	 ||j%                  d|dz   «      |   |	|   «      }||z   }t+        ||||j,                  |j.                  ¬	«      S )a>  
        bbox ('torch.FloatTensor' of shape '(batch_size, num_boxes, 4)'):
            Bounding box coordinates for each token in the input sequence. Each bounding box is a list of four values
            (x1, y1, x2, y2), where (x1, y1) is the top left corner, and (x2, y2) is the bottom right corner of the
            bounding box.
        bbox_first_token_mask (`torch.FloatTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Mask to indicate the first token of each bounding box. Mask values selected in `[0, 1]`:

            - 1 for tokens that are **not masked**,
            - 0 for tokens that are **masked**.
        initial_token_labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for the initial token classification.
        subsequent_token_labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for the subsequent token classification.

        Examples:

        ```python
        >>> import torch
        >>> from transformers import BrosProcessor, BrosSpadeEEForTokenClassification

        >>> processor = BrosProcessor.from_pretrained("jinho8345/bros-base-uncased")

        >>> model = BrosSpadeEEForTokenClassification.from_pretrained("jinho8345/bros-base-uncased")

        >>> encoding = processor("Hello, my dog is cute", add_special_tokens=False, return_tensors="pt")
        >>> bbox = torch.tensor([[[0, 0, 1, 1]]]).repeat(1, encoding["input_ids"].shape[-1], 1)
        >>> encoding["bbox"] = bbox

        >>> outputs = model(**encoding)
        ```©rŽ   r\   r¦   rx   rv   r�   r   r   ry   r  N©r{   rz   rA   )r   r   r    r!   r"   r+   )r  rm   r²   rT  rU  Úsqueezer«   r{   r'   rF   rŒ   rz   ÚboolÚmasked_fillÚfinfoÚminÚeyeÚtorE   r   rD  r   r!   r"   )r:   rŽ   r\   r¦   rG  rx   rv   r�   rV  rW  rë   rL  Úlast_hidden_statesr   r    Úinv_attention_maskr¹   Úmax_seq_lengthr{   Úinvalid_token_maskÚself_token_maskÚsubsequent_token_maskr   rM  Úinitial_token_lossÚsubsequent_token_losss                             r-   rO   z)BrosSpadeEEForTokenClassification.forwardí  sÕ  € ð\ AJÀÇ	Á	ð A
ØØØ)Ø)Ø%Ø'ñA
ð ñA
ˆð % Q™ZÐØ/×9Ñ9¸!¸QÓ?×JÑJÓLÐØ#×<Ñ<Ð=OÓP×ZÑZÐ[\Ð^_Ó`×kÑkÓmÐØ"&×"BÑ"BÐCUÐWiÓ"j×"rÑ"rÐstÓ"uÐð  Ñ/ÐØ%7×%=Ñ%=Ñ"ˆ
�NØ#×*Ñ*ˆÜ"ŸY™YØ¤§¡¨j¸!¨_ÐDV×D\ÑD\ÐekÔ!lÐmÐtuô
ç
‰$‹&ð 	ð #:×"EÑ"EØšq $ª˜zÑ*¬E¯K©KÐ8O×8UÑ8UÓ,V×,ZÑ,Zó#
Ðô  Ÿ)™) N°NÀQÑ4FÓG×JÑJÐRXÔ`e×`jÑ`jÐJÓkˆØ"9×"EÑ"EØ˜D¢!¢Q˜JÑ'¬¯©Ð5L×5RÑ5RÓ)S×)WÑ)Wó#
Ðð !/× 3Ñ 3°BÓ 7× <Ñ <Ó >ÐàˆØÐ+Ð0GÐ0SÜ'Ó)ˆHð $8×#<Ñ#<¸RÓ#@Ð Ø$Ð0Ø(=×(BÑ(BÀ2Ó(FÐ%Ù%-Ø(×-Ñ-¨b°$·/±/ÓBÐCXÑYØ(Ð)>Ñ?ó&Ñ"ñ
 &.Ð.B×.GÑ.GÈÈDÏOÉOÓ.\Ð^rÓ%sÐ"à&=×&BÑ&BÀ2Ó&FÐ#Ù$,Ø'×,Ñ,¨R°À!Ñ1CÓDÐEZÑ[Ø'Ð(=Ñ>ó%Ð!ð
 &Ð(=Ñ=ˆDäØØ!5Ø$;Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r,   )	NNNNNNNNN)r#   r$   r%   rO  r6   r   r   r'   rQ   r   r   r*   r   rO   rR   rS   s   @r-   rQ  rQ  È  s)  ø„ ð +4¨Ð&ôð2 Øð *.Ø$(Ø.2Ø59Ø.2Ø,0Ø-1Ø48Ø7;ñh
à—<‘< $Ñ&ðh
ð �l‰l˜TÑ!ðh
ð Ÿ™ tÑ+ð	h
ð
  %Ÿ|™|¨dÑ2ðh
ð Ÿ™ tÑ+ðh
ð —l‘l TÑ)ðh
ð —|‘| dÑ*ðh
ð $Ÿl™l¨TÑ1ðh
ð "'§¡°Ñ!4ðh
ð Ð+Ñ,ðh
ð 
ˆu�|‰|Ñ	˜Ñ	.òh
ó ó ôh
r,   rQ  zì
    Bros Model with a token classification head on top (a entity_linker layer on top of the hidden-states output) e.g.
    for Entity-Linking. The entity_linker is used to predict intra-entity links (one entity to another entity).
    c                   óp  ‡ — e Zd ZdgZˆ fd„Zee	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ej                  dz  d
ej                  dz  dej                  dz  de	e
   deej                     ez  fd„«       «       Zˆ xZS )Ú!BrosSpadeELForTokenClassificationr-  c                 ó@  •— t         ‰| �  |«       || _        |j                  | _        |j                  | _        |j
                  | _        t        |«      | _        t        |d«      r|j                  n|j                   t        |«      | _        | j                  «        y rB  )r5   r6   r;   rD  rý   r   rþ   r)  r  r‘   rC  r‰   rû   Úentity_linkerr$  r[   s     €r-   r6   z*BrosSpadeELForTokenClassification.__init__c  s€   ø€ Ü‰Ñ˜Ô ØˆŒØ ×+Ñ+ˆŒØ!×-Ñ-ˆÔØ$*×$6Ñ$6ˆÔ!ä˜fÓ%ˆŒ	Ü&-¨fÐ6JÔ&Kˆ×	"Ò	"ÐQW×QkÑQkøä2°6Ó:ˆÔà�‰Õr,   NrŽ   r\   r¦   rG  rx   rv   r�   rH  rë   r>   c	           
      óÚ  —  | j                   d
||||||dœ|	¤Ž}
|
d   }|j                  dd«      j                  «       }| j                  ||«      j	                  d«      }d}|��et        «       }|j                  \  }}|j                  }t        j                  ||dz   «      j                  |t        j                  ¬«      }|j                  d«      }t        j                  | t        j                  |dgt        j                  |¬«      gd¬«      }|j                  |dd…ddd…f   t        j                   |j"                  «      j$                  «      }|j                  |ddd…dd…f   t        j                   |j"                  «      j$                  «      } ||j                  d|dz   «      |   |j                  d«      |   «      }t'        |||
j(                  |
j*                  ¬	«      S )aö  
        bbox ('torch.FloatTensor' of shape '(batch_size, num_boxes, 4)'):
            Bounding box coordinates for each token in the input sequence. Each bounding box is a list of four values
            (x1, y1, x2, y2), where (x1, y1) is the top left corner, and (x2, y2) is the bottom right corner of the
            bounding box.
        bbox_first_token_mask (`torch.FloatTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Mask to indicate the first token of each bounding box. Mask values selected in `[0, 1]`:

            - 1 for tokens that are **not masked**,
            - 0 for tokens that are **masked**.

        Examples:

        ```python
        >>> import torch
        >>> from transformers import BrosProcessor, BrosSpadeELForTokenClassification

        >>> processor = BrosProcessor.from_pretrained("jinho8345/bros-base-uncased")

        >>> model = BrosSpadeELForTokenClassification.from_pretrained("jinho8345/bros-base-uncased")

        >>> encoding = processor("Hello, my dog is cute", add_special_tokens=False, return_tensors="pt")
        >>> bbox = torch.tensor([[[0, 0, 1, 1]]]).repeat(1, encoding["input_ids"].shape[-1], 1)
        >>> encoding["bbox"] = bbox

        >>> outputs = model(**encoding)
        ```rY  r   r   NrZ  rA   ry   r  rJ  r+   )r  rm   r²   rm  r[  r   r«   r{   r'   r`  ra  r\  rE   rF   rŒ   r]  r^  rz   r_  r   r!   r"   )r:   rŽ   r\   r¦   rG  rx   rv   r�   rH  rë   rL  rb  rK  r   rM  r¹   rd  r{   rf  Úmasks                       r-   rO   z)BrosSpadeELForTokenClassification.forwardq  sã  € ðR AJÀÇ	Á	ð A
ØØØ)Ø)Ø%Ø'ñA
ð ñA
ˆð % Q™ZÐØ/×9Ñ9¸!¸QÓ?×JÑJÓLÐà×#Ñ#Ð$6Ð8JÓK×SÑSÐTUÓVˆàˆØÑÜ'Ó)ˆHà)7×)=Ñ)=Ñ&ˆJ˜Ø#×*Ñ*ˆFä#Ÿi™i¨¸ÈÑ8JÓK×NÑNÐV\Ôdi×dnÑdnÐNÓoˆOà(×-Ñ-¨bÓ1ˆDÜ$)§I¡Ià*Ð*Ü—K‘K ¨Q ´u·z±zÈ&ÔQðð ô%Ð!ð ×'Ñ'Ð(=ºaÀÂq¸jÑ(IÌ5Ï;É;ÐW]×WcÑWcÓKd×KhÑKhÓiˆFØ×'Ñ'¨¸ºaÂ¸
Ñ(CÄUÇ[Á[ÐQW×Q]ÑQ]ÓE^×EbÑEbÓcˆFá˜FŸK™K¨¨N¸QÑ,>Ó?ÀÑEÀvÇ{Á{ÐSUÃÐW[ÑG\Ó]ˆDä$ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r,   r>  rN  rS   s   @r-   rk  rk  Z  s  ø„ ð +4¨Ð&ôð Øð *.Ø$(Ø.2Ø59Ø.2Ø,0Ø-1Ø&*ñQ
à—<‘< $Ñ&ðQ
ð �l‰l˜TÑ!ðQ
ð Ÿ™ tÑ+ð	Q
ð
  %Ÿ|™|¨dÑ2ðQ
ð Ÿ™ tÑ+ðQ
ð —l‘l TÑ)ðQ
ð —|‘| dÑ*ðQ
ð —‘˜tÑ#ðQ
ð Ð+Ñ,ðQ
ð 
ˆu�|‰|Ñ	Ð4Ñ	4òQ
ó ó ôQ
r,   rk  )r  r)  r@  rQ  rk  )@r&   r¯   Údataclassesr   r'   r   Útorch.nnr   Ú r   r  Úactivationsr   Úmasking_utilsr	   Úmodeling_layersr
   Úmodeling_outputsr   r   r   Úmodeling_utilsr   Úprocessing_utilsr   Úpytorch_utilsr   Úutilsr   r   r   r   r   Úutils.genericr   Úutils.output_capturingr   r   Úconfiguration_brosr   Ú
get_loggerr#   Úloggerr   r  r/   rU   rd   rq   r˜   rÂ   rÍ   rÕ   rÞ   râ   ró   rû   r  r  r)  r@  rQ  rk  Ú__all__r+   r,   r-   ú<module>r�     s  ðñ ã Ý !ã Ý Ý %å &Ý !Ý 6Ý 9÷ñ õ
 .Ý &Ý 6ß _Õ _Ý 7ß EÝ *ð 
ˆ×	Ñ	˜HÓ	%€ñ ðôð
 ô7�kó 7ó óð7ô" §	¡	ô ô* §	¡	ô ô&˜Ÿ™ô ô;˜Ÿ™ô ;ô|J.˜Ÿ	™	ô J.ô\�R—Y‘Yô ô�B—I‘Iô ô6�r—y‘yô ô�—‘ô ô8Ð*ô 8ôx�—‘ô ô˜BŸI™Iô ðD ô2˜/ó 2ó ð2ô4
Ð%ô 
ð@ ôt
Ð#ó t
ó ðt
ðn ôX
Ð!4ó X
ó ðX
ñv ðôôF
Ð(;ó F
óðF
ñR ðôôd
Ð(;ó d
óðd
òN�r,   