
    Z j                        S r SSKrSSKJr  SSKrSSKJr  SSKJr  SSKJ	r
  SSKJr  SS	KJr  SS
KJrJrJr  SSKJr  SSKJr  SSKJr  SSKJrJrJrJrJr  SSKJ r   SSK!J"r"J#r#  SSK$J%r%  \RL                  " \'5      r(\" SS9\ " S S\5      5       5       r) " S S\RT                  5      r+ " S S\RT                  5      r, " S S\RT                  5      r- " S S\RT                  5      r. " S S \RT                  5      r/ " S! S"\RT                  5      r0 " S# S$\RT                  5      r1 " S% S&\RT                  5      r2 " S' S(\RT                  5      r3 " S) S*\5      r4 " S+ S,\RT                  5      r5 " S- S.\RT                  5      r6\ " S/ S0\5      5       r7 " S1 S2\75      r8\ " S3 S4\75      5       r9\ " S5 S6\75      5       r:\" S7S9 " S8 S9\75      5       r;\" S:S9 " S; S<\75      5       r</ S=Qr=g)>zPyTorch Bros model.    N)	dataclass)nn)CrossEntropyLoss   )initialization)ACT2FN)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                       \ rS rSr% SrSr\R                  S-  \S'   Sr	\R                  S-  \S'   Sr
\R                  S-  \S'   Sr\\R                     S-  \S'   Sr\\R                     S-  \S'   S	rg)
BrosSpadeOutput+   a  
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____firstlineno____doc__r   torchFloatTensor__annotations__r   r    r!   tupler"   __static_attributes__r#       w/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/transformers/models/bros/modeling_bros.pyr   r   +   s~     &*D%

d
")59%++d298<U..5<59M5**+d2926Je''(4/6r.   r   c                   b   ^  \ rS rSrU 4S jrS\R                  S\R                  4S jrSrU =r	$ )BrosPositionalEmbedding1DB   c                    > [         TU ]  5         UR                  U l        SS[        R                  " SU R                  S5      U R                  -  -  -  nU R                  SU5        g )Nr   '                 @inv_freq)super__init__dim_bbox_sinusoid_emb_1dr)   arangeregister_buffer)selfconfigr7   	__class__s      r/   r9   "BrosPositionalEmbedding1D.__init__E   s^    (.(G(G%ell3(E(EsKdNkNkkl
 	Z2r.   pos_seqreturnc                    UR                  5       nUu  p4nUR                  X4US5      U R                  R                  SSSU R                  S-  5      -  n[        R
                  " UR                  5       UR                  5       /SS9nU$ )Nr      dim)sizeviewr7   r:   r)   catsincos)r=   rA   seq_sizeb1b2b3sinusoid_inppos_embs           r/   forward!BrosPositionalEmbedding1D.forwardO   s{    <<>
||BB2T]]5G5G1aQUQnQnrsQs5tt))\--/1A1A1CD"Mr.   )r:   
r$   r%   r&   r'   r9   r)   TensorrS   r-   __classcell__r?   s   @r/   r1   r1   B   s(    3u||   r.   r1   c                   b   ^  \ rS rSrU 4S jrS\R                  S\R                  4S jrSrU =r	$ )BrosPositionalEmbedding2DW   c                    > [         TU ]  5         UR                  U l        [        U5      U l        [        U5      U l        g N)r8   r9   dim_bboxr1   	x_pos_emb	y_pos_embr=   r>   r?   s     r/   r9   "BrosPositionalEmbedding2D.__init__X   s1    26:26:r.   bboxrB   c                    / n[        U R                  5       HX  nUS-  S:X  a'  UR                  U R                  USU4   5      5        M3  UR                  U R	                  USU4   5      5        MZ     [
        R                  " USS9nU$ )NrD   r   .rE   rF   )ranger^   appendr_   r`   r)   rJ   )r=   rc   stackibbox_pos_embs        r/   rS   !BrosPositionalEmbedding2D.forward_   sw    t}}%A1uzT^^DaL9:T^^DaL9:	 &
 yyB/r.   )r^   r_   r`   rU   rX   s   @r/   rZ   rZ   W   s(    ;ELL U\\  r.   rZ   c                   J   ^  \ rS rSrU 4S jrS\R                  4S jrSrU =r	$ )BrosBboxEmbeddingsj   c                    > [         TU ]  5         [        U5      U l        [        R
                  " UR                  UR                  SS9U l        g )NF)bias)	r8   r9   rZ   bbox_sinusoid_embr   Lineardim_bbox_sinusoid_emb_2ddim_bbox_projectionbbox_projectionra   s     r/   r9   BrosBboxEmbeddings.__init__k   s=    !:6!B!yy)H)H&JdJdkpqr.   rc   c                     UR                  SS5      nUS S S 2S S 2S S 24   US S 2S S S 2S S 24   -
  nU R                  U5      nU R                  U5      nU$ )Nr   r   )	transposerp   rt   )r=   rc   bbox_tbbox_posri   s        r/   rS   BrosBboxEmbeddings.forwardp   s\    1%$1a-(6!T1a-+@@--h7++L9r.   )rt   rp   rU   rX   s   @r/   rl   rl   j   s    r
ELL  r.   rl   c                      ^  \ rS rSrSrU 4S jr    SS\R                  S-  S\R                  S-  S\R                  S-  S\R                  S-  S	\R                  4
S
 jjrSr	U =r
$ )BrosTextEmbeddingsy   zGConstruct the embeddings from word, position and token_type embeddings.c           	      6  > [         TU ]  5         [        R                  " UR                  UR
                  UR                  S9U l        [        R                  " UR                  UR
                  5      U l	        [        R                  " UR                  UR
                  5      U l        [        R                  " UR
                  UR                  S9U l        [        R                  " UR                  5      U l        U R#                  S[$        R&                  " UR                  5      R)                  S5      5        U R#                  S[$        R*                  " U R,                  R/                  5       [$        R0                  U R,                  R2                  S9SS9  g )	N)padding_idxepsposition_idsr   rE   token_type_idsdtypedeviceF)
persistent)r8   r9   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dropoutr<   r)   r;   expandzerosr   rH   longr   ra   s     r/   r9   BrosTextEmbeddings.__init__|   s#   !||F,=,=v?Q?Q_e_r_rs#%<<0N0NPVPbPb#c %'\\&2H2H&J\J\%]"f&8&8f>S>STzz&"<"<=^U\\&:X:X-Y-`-`ah-ijKK!!&&(jj((//
  	 	
r.   N	input_idsr   r   inputs_embedsrB   c                 @   Ub  UR                  5       nOUR                  5       S S nUS   nUc  U R                  S S 2S U24   nUcv  [        U S5      (       a-  U R                  S S 2S U24   nUR	                  US   U5      nUnO8[
        R                  " U[
        R                  U R                  R                  S9nUc  U R                  U5      nU R                  U5      n	XI-   n
U R                  U5      nX-  n
U R                  U
5      n
U R                  U
5      n
U
$ )NrE   r   r   r   r   )rH   r   hasattrr   r   r)   r   r   r   r   r   r   r   r   )r=   r   r   r   r   input_shape
seq_lengthbuffered_token_type_ids buffered_token_type_ids_expandedr   
embeddingsr   s               r/   rS   BrosTextEmbeddings.forward   s,     #..*K',,.s3K ^
,,Q^<L!t-..*.*=*=a*n*M'3J3Q3QR]^_R`bl3m0!A!&[

SWSdSdSkSk!l  00;M $ : :> J":
"66|D)
^^J/
\\*-
r.   )r   r   r   r   r   )NNNN)r$   r%   r&   r'   r(   r9   r)   rV   rS   r-   rW   rX   s   @r/   r|   r|   y   s{    Q
. *..2,0-1#<<$&# t+# llT)	#
 ||d*# 
# #r.   r|   c                      ^  \ rS rSrU 4S jr   SS\R                  S\R                  S\R                  S-  S\R                  S-  S\R                  S-  S	\\R                     4S
 jjrSr	U =r
$ )BrosSelfAttention   c                   > [         TU ]  5         UR                  UR                  -  S:w  a7  [	        US5      (       d&  [        SUR                   SUR                   S35      eUR                  U l        [        UR                  UR                  -  5      U l        U R                  U R                  -  U l        [        R                  " UR                  U R                  5      U l        [        R                  " UR                  U R                  5      U l        [        R                  " UR                  U R                  5      U l        [        R                  " UR                  5      U l        UR"                  U l        g )Nr   embedding_sizezThe hidden size (z6) is not a multiple of the number of attention heads ())r8   r9   r   num_attention_headsr   
ValueErrorintattention_head_sizeall_head_sizer   rq   querykeyvaluer   attention_probs_dropout_probr   
is_decoderra   s     r/   r9   BrosSelfAttention.__init__   s,    : ::a?PVXhHiHi#F$6$6#7 8 445Q8 
 $*#=#= #&v'9'9F<V<V'V#W !558P8PPYYv1143E3EF
99V//1C1CDYYv1143E3EF
zz&"E"EF ++r.   Nr!   ri   attention_maskencoder_hidden_statesencoder_attention_maskrB   c                    UR                   S   SU R                  U R                  4nU R                  U5      R	                  U5      R                  SS5      nUS LnU(       ac  U R                  U5      R	                  U5      R                  SS5      n	U R                  U5      R	                  U5      R                  SS5      n
UnO`U R                  U5      R	                  U5      R                  SS5      n	U R                  U5      R	                  U5      R                  SS5      n
[        R                  " XyR                  SS5      5      nUR                   u  ppUR	                  XX5      nUR                  / SQ5      n[        R                  " SXr45      nUU-   nU[        R                  " U R                  5      -  nUb  X-   n[        R                  " SS9" U5      nU R!                  U5      n[        R                  " UU
5      nUR                  SSSS	5      R#                  5       nUR%                  5       S S U R&                  4-   nUR                  " U6 nUU4$ )
Nr   rE   r   rD   )rD   r   r   r   zbnid,bijd->bnijrF   r   )shaper   r   r   rI   rw   r   r   r)   matmulpermuteeinsummathsqrtr   Softmaxr   
contiguousrH   r   )r=   r!   ri   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/   rS   BrosSelfAttention.forward   s5    &++A.D4L4LdNfNfgjj/44\BLLQPQR
 3$>!67<<\JTTUVXYZI**%:;@@NXXYZ\]^K3N/44\BLLQPQRI**]388FPPQRTUVK !<<5H5HR5PQ 2=1B1B.
J#((T#++L9,,'8;:UV+o=+dii8P8P.QQ%/@ **,-=> ,,7_kB%--aAq9DDF"/"4"4"6s";t?Q?Q>S"S%**,CDo--r.   )r   r   r   r   r   r   r   r   NNN)r$   r%   r&   r'   r9   r)   rV   r,   rS   r-   rW   rX   s   @r/   r   r      s    ,0 /3596:5.||5. ll5. t+	5.
  %||d25. !&t 35. 
u||	5. 5.r.   r   c                   z   ^  \ rS rSrU 4S jrS\R                  S\R                  S\R                  4S jrSrU =r	$ )BrosSelfOutputi  c                 (  > [         TU ]  5         [        R                  " UR                  UR                  5      U l        [        R                  " UR                  UR                  S9U l        [        R                  " UR                  5      U l
        g Nr   )r8   r9   r   rq   r   denser   r   r   r   r   ra   s     r/   r9   BrosSelfOutput.__init__  s`    YYv1163E3EF
f&8&8f>S>STzz&"<"<=r.   r!   input_tensorrB   c                 p    U R                  U5      nU R                  U5      nU R                  X-   5      nU$ r]   r   r   r   r=   r!   r   s      r/   rS   BrosSelfOutput.forward  5    

=1]3}'CDr.   r   r   r   rU   rX   s   @r/   r   r     6    >U\\  RWR^R^  r.   r   c                      ^  \ rS rSrU 4S jr   SS\R                  S\R                  S\R                  S-  S\R                  S-  S\R                  S-  S	\R                  4S
 jjrSrU =r	$ )BrosAttentioni  c                 b   > [         TU ]  5         [        U5      U l        [	        U5      U l        g r]   )r8   r9   r   r=   r   outputra   s     r/   r9   BrosAttention.__init__  s&    %f-	$V,r.   Nr!   ri   r   r   r   rB   c                 V    UnU R                  UUUUUS9u  pU R                  X5      nU$ )Nri   r   r   r   )r=   r   )r=   r!   ri   r   r   r   residual_s           r/   rS   BrosAttention.forward  sD     !99%)"7#9 % 
 M<r.   )r   r=   r   rU   rX   s   @r/   r   r     s~    - /3596:|| ll t+	
  %||d2 !&t 3 
 r.   r   c                   b   ^  \ rS rSrU 4S jrS\R                  S\R                  4S jrSrU =r	$ )BrosIntermediatei.  c                   > [         TU ]  5         [        R                  " UR                  UR
                  5      U l        [        UR                  [        5      (       a  [        UR                     U l        g UR                  U l        g r]   )r8   r9   r   rq   r   intermediate_sizer   
isinstance
hidden_actstrr   intermediate_act_fnra   s     r/   r9   BrosIntermediate.__init__/  s`    YYv1163K3KL
f''--'-f.?.?'@D$'-'8'8D$r.   r!   rB   c                 J    U R                  U5      nU R                  U5      nU$ r]   r   r   )r=   r!   s     r/   rS   BrosIntermediate.forward7  s&    

=100?r.   r   rU   rX   s   @r/   r   r   .  s(    9U\\ ell  r.   r   c                   z   ^  \ rS rSrU 4S jrS\R                  S\R                  S\R                  4S jrSrU =r	$ )
BrosOutputi=  c                 (  > [         TU ]  5         [        R                  " UR                  UR
                  5      U l        [        R                  " UR
                  UR                  S9U l        [        R                  " UR                  5      U l        g r   )r8   r9   r   rq   r   r   r   r   r   r   r   r   ra   s     r/   r9   BrosOutput.__init__>  s`    YYv779K9KL
f&8&8f>S>STzz&"<"<=r.   r!   r   rB   c                 p    U R                  U5      nU R                  U5      nU R                  X-   5      nU$ r]   r   r   s      r/   rS   BrosOutput.forwardD  r   r.   r   rU   rX   s   @r/   r   r   =  r   r.   r   c                      ^  \ rS rSrU 4S jr   SS\R                  S\R                  S\R                  S-  S\R                  S-  S\R                  S-  S	\\	   S
\R                  4S jjr
S rSrU =r$ )	BrosLayeriK  c                 v  > [         TU ]  5         UR                  U l        SU l        [	        U5      U l        UR                  U l        UR                  U l        U R                  (       a/  U R                  (       d  [        U  S35      e[	        U5      U l	        [        U5      U l        [        U5      U l        g )Nr   z> should be used as a decoder model if cross attention is added)r8   r9   chunk_size_feed_forwardseq_len_dimr   	attentionr   add_cross_attention	Exceptioncrossattentionr   intermediater   r   ra   s     r/   r9   BrosLayer.__init__L  s    '-'E'E$&v. ++#)#=#= ##??4&(f ghh"/"7D,V4 (r.   Nr!   ri   r   r   r   kwargsrB   c                    U R                  UUUS9nU R                  (       a<  Ub9  [        U S5      (       a  [        SU  S35      eU R                  " U4UUUS.UD6u  p[        U R                  U R                  U R                  U5      nU$ )N)ri   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!   ri   r   r   r   r  r   s           r/   rS   BrosLayer.forwardZ  s     %) ' 
 ??4@t-..=dV  Dd  e   $22 -&;'=	 
  M 2##((	
 r.   c                 J    U R                  U5      nU R                  X!5      nU$ r]   )r  r   )r=   attention_outputintermediate_outputlayer_outputs       r/   r	  BrosLayer.feed_forward_chunk  s)    "//0@A{{#6Ir.   )r  r  r   r  r  r   r   r   r   )r$   r%   r&   r'   r9   r)   rV   r*   r   r   rS   r	  r-   rW   rX   s   @r/   r   r   K  s    )$ 48:>;?$||$ ll$ ))D0	$
  %0047$ !& 1 1D 8$ +,$ 
$L r.   r   c                   b   ^  \ rS rSrU 4S jrS\R                  S\R                  4S jrSrU =r	$ )
BrosPooleri  c                    > [         TU ]  5         [        R                  " UR                  UR                  5      U l        [        R                  " 5       U l        g r]   )r8   r9   r   rq   r   r   Tanh
activationra   s     r/   r9   BrosPooler.__init__  s9    YYv1163E3EF
'')r.   r!   rB   c                 \    US S 2S4   nU R                  U5      nU R                  U5      nU$ )Nr   )r   r  )r=   r!   first_token_tensorpooled_outputs       r/   rS   BrosPooler.forward  s6     +1a40

#566r.   )r  r   rU   rX   s   @r/   r  r    s(    $
U\\ ell  r.   r  c                   b   ^  \ rS rSrU 4S jrS\R                  S\R                  4S jrSrU =r	$ )BrosRelationExtractori  c                 \  > [         TU ]  5         UR                  U l        UR                  U l        UR                  U l        UR                  U l        [        R                  " U R                  5      U l	        [        R                  " U R                  U R                  U R
                  -  5      U l        [        R                  " U R                  U R                  U R
                  -  5      U l        [        R                  " [        R                  " SU R                  5      5      U l        g )Nr   )r8   r9   n_relationsr   backbone_hidden_sizehead_hidden_sizeclassifier_dropout_probr   r   droprq   r   r   	Parameterr)   r   
dummy_nodera   s     r/   r9   BrosRelationExtractor.__init__  s    !--$*$6$6! & 2 2'-'E'E$JJt;;<	YYt88$:J:JTMbMb:bc
99T668H8H4K`K`8`a,,u{{1d6O6O'PQr.   r   r   c           	         U R                  U R                  U5      5      nU R                  R                  S5      R	                  SUR                  S5      S5      n[        R                  " X#/SS9nU R                  U R                  U5      5      nUR                  UR                  S5      UR                  S5      U R                  U R                  5      nUR                  UR                  S5      UR                  S5      U R                  U R                  5      n[        R                  " UR                  SSSS5      UR                  SSSS5      5      nU$ )Nr   r   axisrD   r   )r   r!  r#  	unsqueezerepeatrH   r)   rJ   r   rI   r  r  r   r   )r=   r   r   	dummy_vecrelation_scores        r/   rS   BrosRelationExtractor.forward  s   jj;!78OO--a0779>>!;LaP	IIy41=	HHTYYy12	!&&Q!1!1!!4d6F6FH]H]
 NN9>>!#4innQ6GIYIY[_[p[pq	1a+Y->->q!Q-J
 r.   )r  r   r!  r#  r  r   r  r   rU   rX   s   @r/   r  r    s)    R5<< ELL  r.   r  c                      ^  \ rS rSr% \\S'   Sr\\" \	SSS9\" \	SSS9S.r
\R                  " 5       S	\R                  4U 4S
 jj5       rSrU =r$ )BrosPreTrainedModeli  r>   brosr   r  )index
layer_namer  )r!   r"   cross_attentionsmodulec                   > [         TU ]  U5        U R                  R                  n[	        U[
        5      (       a   [        R                  " UR                  US9  g[	        U[        5      (       a|  [        R                  " UR                  [        R                  " UR                  R                  S   5      R                  S5      5        [        R                   " UR"                  5        g[	        U[$        5      (       aW  SS[        R                  " SUR&                  S5      UR&                  -  -  -  n[        R                  " UR(                  U5        gg)	zInitialize the weights)stdrE   r   r   r4   r5   r6   N)r8   _init_weightsr>   initializer_ranger   r  initnormal_r#  r|   copy_r   r)   r;   r   r   zeros_r   r1   r:   r7   )r=   r3  r5  r7   r?   s       r/   r6  !BrosPreTrainedModel._init_weights  s     	f%kk++f344LL**4 233JJv**ELL9L9L9R9RSU9V,W,^,^_f,ghKK--. 9::%,,sF,K,KSQTZTsTsstH JJv1	 ;r.   r#   )r$   r%   r&   r'   r   r+   base_model_prefixr   r   r   _can_record_outputsr)   no_gradr   Moduler6  r-   rW   rX   s   @r/   r.  r.    sZ    "$%6aKX*+<ARbc ]]_2BII 2 2r.   r.  c                     ^  \ rS rSrU 4S jr\\   SS\R                  S\R                  S\R                  S-  S\R                  S-  S\R                  S-  S	\
\   S
\\R                     \-  4S jj5       5       rSrU =r$ )BrosEncoderi  c                    > [         TU ]  U5        [        R                  " [	        UR
                  5       Vs/ s H  n[        U5      PM     sn5      U l        U R                  5         g s  snf r]   )	r8   r9   r   
ModuleListre   num_hidden_layersr   layer	post_init)r=   r>   r   r?   s      r/   r9   BrosEncoder.__init__  sQ     ]]uVE]E]?^#_?^!If$5?^#_`
 $`s   A*Nr!   ri   r   r   r   r  rB   c           	      V    U R                    H  nU" U4UUUUS.UD6nM     [        US9$ )Nr   )last_hidden_state)rF  r
   )r=   r!   ri   r   r   r   r  layer_modules           r/   rS   BrosEncoder.forward  sL     !JJL()-&;'= M ' 2+
 	
r.   )rF  r   )r$   r%   r&   r'   r9   r   r   r)   rV   r*   r   r   r,   r
   rS   r-   rW   rX   s   @r/   rB  rB    s    
  
 48:>;?
||
 ll
 ))D0	

  %0047
 !& 1 1D 8
 +,
 
u||	A	A
   
r.   rB  c                     ^  \ rS rSrSU 4S jjrS rS r\\        SS\	R                  S-  S\	R                  S-  S\	R                  S-  S	\	R                  S-  S
\	R                  S-  S\	R                  S-  S\	R                  S-  S\	R                  S-  S\\   S\\	R                     \-  4S jj5       5       rSrU =r$ )	BrosModeli  c                    > [         TU ]  U5        Xl        [        U5      U l        [        U5      U l        [        U5      U l        U(       a  [        U5      OSU l
        U R                  5         g)z^
add_pooling_layer (bool, *optional*, defaults to `True`):
    Whether to add a pooling layer
N)r8   r9   r>   r|   r   rl   bbox_embeddingsrB  encoderr  poolerrG  )r=   r>   add_pooling_layerr?   s      r/   r9   BrosModel.__init__  sV    
 	 ,V41&9"6*,=j(4r.   c                 .    U R                   R                  $ r]   r   r   )r=   s    r/   get_input_embeddingsBrosModel.get_input_embeddings  s    ...r.   c                 $    XR                   l        g r]   rV  )r=   r   s     r/   set_input_embeddingsBrosModel.set_input_embeddings  s    */'r.   Nr   rc   r   r   r   r   r   r   r  rB   c	                    USL USL-  (       a  [        S5      eUc  [        S5      eU R                  UUUUS9n
U
R                  SS nU
R                  nUc  [        R
                  " XS9nU R                  X;5      nU R                  R                  (       aC  Ub@  UR                  5       u  pnX4nUc  [        R
                  " UUS9nU R                  U5      nOSnUR                  S   S:X  a  USS2SS2/ SQ4   nX R                  R                  -  nU R                  U5      nU R                  " U
4UUUUS	.U	D6nUS
   nU R                  b  U R                  U5      OSn[        UUUR                   UR"                  UR$                  S9$ )aM  
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   r   r   r   rE   )r      )r   r   rD   r   rD   r   r   r   r   r   )rJ  pooler_outputr!   r"   r2  )r   r   r   r   r)   onesget_extended_attention_maskr>   r   rH   invert_attention_mask
bbox_scalerP  rQ  rR  r   r!   r"   r2  )r=   r   rc   r   r   r   r   r   r   r  embedding_outputr   r   extended_attention_maskencoder_batch_sizeencoder_sequence_lengthr   encoder_hidden_shapeencoder_extended_attention_maskscaled_bboxbbox_position_embeddingsencoder_outputssequence_outputr  s                           r/   rS   BrosModel.forward  s   J -t";<YZZ<788??%)'	 + 
 ',,Sb1!((!"ZZCN 150P0PQ_0m ;;!!&;&G=R=W=W=Y:$6#P %-).4HQW)X&.2.H.HI_.`+.2+ ::b>Q1667D[[333#'#7#7#D >Bll?
12"7#B?
 ?
 *!,8<8OO4UY;-')77&11,==
 	
r.   )rP  r>   r   rQ  rR  )TNNNNNNNN)r$   r%   r&   r'   r9   rW  rZ  r   r   r)   rV   r   r   r,   r   rS   r-   rW   rX   s   @r/   rN  rN    s    /0  *.$(.2.2,0-1596:\
<<$&\
 llT!\
 t+	\

 t+\
 llT)\
 ||d*\
  %||d2\
 !&t 3\
 +,\
 
u||	K	K\
  \
r.   rN  c                   ~  ^  \ rS rSrS/rU 4S jr\\        SS\R                  S-  S\R                  S-  S\R                  S-  S\R                  S-  S	\R                  S-  S
\R                  S-  S\R                  S-  S\R                  S-  S\
\   S\\R                     \-  4S jj5       5       rSrU =r$ )BrosForTokenClassificationil  rR  c                 n  > [         TU ]  U5        UR                  U l        [        U5      U l        [        US5      (       a  UR                  OUR                  n[        R                  " U5      U l
        [        R                  " UR                  UR                  5      U l        U R                  5         g Nclassifier_dropout)r8   r9   
num_labelsrN  r/  r   rs  r   r   r   r   rq   r   
classifierrG  r=   r>   rs  r?   s      r/   r9   #BrosForTokenClassification.__init__p  s      ++f%	)09M)N)NF%%TZTnTn 	 zz"45))F$6$68I8IJr.   Nr   rc   r   bbox_first_token_maskr   r   r   labelsr  rB   c	           	         U R                   " U4UUUUUS.U	D6n
U
S   nU R                  U5      nU R                  U5      nSnUb  [        5       nUbJ  UR	                  S5      nU" UR	                  SU R
                  5      U   UR	                  S5      U   5      nO2U" UR	                  SU R
                  5      UR	                  S5      5      n[        UUU
R                  U
R                  S9$ )aP  
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)
```)rc   r   r   r   r   r   NrE   r   logitsr!   r"   )	r/  r   ru  r   rI   rt  r   r!   r"   )r=   r   rc   r   rx  r   r   r   ry  r  outputsrl  r|  r   loss_fcts                  r/   rS   "BrosForTokenClassification.forward}  s   R AE		A
))%'A
 A
 "!*,,71')H$0(=(B(B2(F%KKDOO45JKV[[Y[_]rMs  B @&++b/R$!//))	
 	
r.   )r/  ru  r   rt  rn  r$   r%   r&   r'   "_keys_to_ignore_on_load_unexpectedr9   r   r   r)   rV   r   r   r,   r   rS   r-   rW   rX   s   @r/   rp  rp  l  s   *3&  *.$(.259.2,0-1&*F
<<$&F
 llT!F
 t+	F

  %||d2F
 t+F
 llT)F
 ||d*F
 t#F
 +,F
 
u||	4	4F
  F
r.   rp  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                     ^  \ rS rSrS/rU 4S jr\\         SS\R                  S-  S\R                  S-  S\R                  S-  S\R                  S-  S	\R                  S-  S
\R                  S-  S\R                  S-  S\R                  S-  S\R                  S-  S\
\   S\\R                     \-  4S jj5       5       rSrU =r$ )!BrosSpadeEEForTokenClassificationi  rR  c           	      x  > [         TU ]  U5        Xl        UR                  U l        UR                  U l        UR
                  U l        [        U5      U l        [        US5      (       a  UR                  OUR                  n[        R                  " [        R                  " U5      [        R                  " UR
                  UR
                  5      [        R                  " U5      [        R                  " UR
                  UR                  5      5      U l        [#        U5      U l        U R'                  5         g rr  )r8   r9   r>   rt  r  r   r  rN  r/  r   rs  r   r   
Sequentialr   rq   initial_token_classifierr  subsequent_token_classifierrG  rv  s      r/   r9   *BrosSpadeEEForTokenClassification.__init__  s      ++!--$*$6$6!f%	)09M)N)NF%%TZTnTn 	
 )+JJ)*IIf((&*<*<=JJ)*IIf((&*;*;<	)
% ,A+H(r.   Nr   rc   r   rx  r   r   r   initial_token_labelssubsequent_token_labelsr  rB   c
           
      b   U R                   " S	UUUUUUS.U
D6nUS   nUR                  SS5      R                  5       nU R                  U5      R                  SS5      R                  5       nU R	                  X5      R                  S5      nSU-
  nUR                  u  nnUR                  n[        R                  " U[        R                  " US/5      R                  U5      /SS9R                  5       nUR                  USS2SSS24   [        R                  " UR                  5      R                   5      n[        R"                  " UUS-   5      R                  U[        R                  S9nUR                  USSS2SS24   [        R                  " UR                  5      R                   5      nUR%                  S5      R                  5       nSnUb  U	b  ['        5       nUR%                  S5      nUb:  UR%                  S5      nU" UR%                  SU R(                  5      U   X   5      nO#U" UR%                  SU R(                  5      U5      nU	R%                  S5      n	U" UR%                  SUS-   5      U   U	U   5      nUU-   n[+        UUUUR,                  UR.                  S9$ )
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   rc   r   r   r   r   r   r   r&  Nr   r   rE   )r   r   r    r!   r"   r#   )r/  rw   r   r  r  squeezer   r   r)   rJ   r   toboolmasked_fillfinfor   mineyerI   r   rt  r   r!   r"   )r=   r   rc   r   rx  r   r   r   r  r  r  r}  last_hidden_statesr   r    inv_attention_maskr   max_seq_lengthr   invalid_token_maskself_token_masksubsequent_token_maskr   r~  initial_token_losssubsequent_token_losss                             r/   rS   )BrosSpadeEEForTokenClassification.forward  s   \ AE		 A
))%'A
 A
 %QZ/99!Q?JJL#<<=OPZZ[\^_`kkm"&"B"BCU"j"r"rst"u /%7%=%="
N#**"YY(:EKKUV<X<[<[\b<c'dklmrrt"9"E"Eq$z*EKK8O8U8U,V,Z,Z#
  ))NNQ4FGJJRX`e`j`jJk"9"E"ED!QJ'5L5R5R)S)W)W#
 !/ 3 3B 7 < < >+0G0S')H $8#<#<R#@ $0(=(B(B2(F%%-(--b$//BCXY(?&"
 &..B.G.GDOO.\^r%s"&=&B&B2&F#$,',,R!1CDEZ['(=>%!
 &(==D!5$;!//))
 	
r.   )r  r/  r>   r  r  rt  r  )	NNNNNNNNN)r$   r%   r&   r'   r  r9   r   r   r)   rV   r   r   r,   r   rS   r-   rW   rX   s   @r/   r  r    s)    +4&2  *.$(.259.2,0-1487;f
<<$&f
 llT!f
 t+	f

  %||d2f
 t+f
 llT)f
 ||d*f
 $llT1f
 "'!4f
 +,f
 
u||		.f
  f
r.   r  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                   ~  ^  \ rS rSrS/rU 4S jr\\        SS\R                  S-  S\R                  S-  S\R                  S-  S\R                  S-  S	\R                  S-  S
\R                  S-  S\R                  S-  S\R                  S-  S\
\   S\\R                     \-  4S jj5       5       rSrU =r$ )!BrosSpadeELForTokenClassificationiX  rR  c                 H  > [         TU ]  U5        Xl        UR                  U l        UR                  U l        UR
                  U l        [        U5      U l        [        US5      (       a  UR                  OUR                    [        U5      U l        U R                  5         g rr  )r8   r9   r>   rt  r  r   r  rN  r/  r   rs  r   r  entity_linkerrG  ra   s     r/   r9   *BrosSpadeELForTokenClassification.__init__a  s      ++!--$*$6$6!f%	&-f6J&K&K	"	"QWQkQk26:r.   Nr   rc   r   rx  r   r   r   ry  r  rB   c	           
         U R                   " S
UUUUUUS.U	D6n
U
S   nUR                  SS5      R                  5       nU R                  X5      R	                  S5      nSnUGba  [        5       nUR                  u  nnUR                  n[        R                  " UUS-   5      R                  U[        R                  S9nUR                  S5      n[        R                  " U) [        R                  " US/[        R                  US9/SS9nUR                  USS2SSS24   [        R                   " UR"                  5      R$                  5      nUR                  USSS2SS24   [        R                   " UR"                  5      R$                  5      nU" UR                  SUS-   5      U   UR                  S5      U   5      n['        UUU
R(                  U
R*                  S	9$ )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)
```r  r   r   Nr  rE   r   r&  r{  r#   )r/  rw   r   r  r  r   r   r   r)   r  r  r  rI   rJ   r   r  r  r   r  r   r!   r"   )r=   r   rc   r   rx  r   r   r   ry  r  r}  r  r|  r   r~  r   r  r   r  masks                       r/   rS   )BrosSpadeELForTokenClassification.forwardo  s   R AE		 A
))%'A
 A
 %QZ/99!Q?JJL##$6KSSTUV')H)7)=)=&J#**F#ii8JKNNV\didndnNoO(--b1D$)II**KKQuzz&Q %! ''(=aqj(I5;;W]WcWcKdKhKhiF''a
(CU[[QWQ]Q]E^EbEbcFFKKNQ,>?Ev{{SUW[G\]D$!//))	
 	
r.   )r  r/  r>   r  r  rt  rn  r  rX   s   @r/   r  r  X  s    +4&  *.$(.259.2,0-1&*Q
<<$&Q
 llT!Q
 t+	Q

  %||d2Q
 t+Q
 llT)Q
 ||d*Q
 t#Q
 +,Q
 
u||	4	4Q
  Q
r.   r  )r.  rN  rp  r  r  )>r(   r   dataclassesr   r)   r   torch.nnr    r   r8  activationsr   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@  r1   rZ   rl   r|   r   r   r   r   r   r   r  r  r.  rB  rN  rp  r  r  __all__r#   r.   r/   <module>r     s     !   % & ! 9 
 . & 6 _ _ 7 E * 
		H	% 
 7k 7 7"		 *		 & ; ;|J.		 J.\RYY BII 6ryy  8* 8x BII D 2/ 2 24
% 
@ u
# u
 u
p X
!4 X
 X
v D
(; D
D
N d
(; d
d
Nr.   