
     `ik                     j   d Z ddlZddlmZmZ ddl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mZmZmZmZ dd
lmZ ddlmZmZmZ ddlmZmZ ddlmZ  ej         e!          Z" G d dej#                  Z$ G d dej#                  Z% G d dej#                  Z& G d dej#                  Z' G d dej#                  Z( G d dej#                  Z) G d dej#                  Z* G d de          Z+ G d d ej#                  Z, G d! d"ej#                  Z-e G d# d$e                      Z.e G d% d&e.                      Z/ ed'(           G d) d*e.                      Z0e G d+ d,e.                      Z1 G d- d.ej#                  Z2e G d/ d0e.                      Z3g d1Z4dS )2zPyTorch LiLT model.    N)OptionalUnion)nn)BCEWithLogitsLossCrossEntropyLossMSELoss   )ACT2FN)GradientCheckpointingLayer)BaseModelOutputBaseModelOutputWithPoolingQuestionAnsweringModelOutputSequenceClassifierOutputTokenClassifierOutput)PreTrainedModel)apply_chunking_to_forward find_pruneable_heads_and_indicesprune_linear_layer)auto_docstringlogging   )
LiltConfigc                   :     e Zd Z fdZ	 	 	 	 ddZd Zd Z xZS )LiltTextEmbeddingsc                    t                                                       t          j        |j        |j        |j                  | _        t          j        |j        |j                  | _	        t          j        |j
        |j                  | _        t          j        |j        |j                  | _        t          j        |j                  | _        |                     dt%          j        |j                                      d          d           t+          |dd          | _        |j        | _        t          j        |j        |j        | j                  | _	        d S )	Npadding_idxepsposition_ids)r   F)
persistentposition_embedding_typeabsolute)super__init__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dropoutregister_buffertorcharangeexpandgetattrr#   r   selfconfig	__class__s     z/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/transformers/models/lilt/modeling_lilt.pyr&   zLiltTextEmbeddings.__init__+   s:   !|F,=v?Q_e_rsss#%<0NPVPb#c#c %'\&2H&J\%]%]" f&8f>STTTz&"<== 	EL)GHHOOPWXXej 	 	
 	
 	
 (/v7PR\']']$ ".#%<*F,>DL\$
 $
 $
       Nc                 d   |K|4|                      || j                                      |j                  }n|                     |          }||                                }n|                                d d         }|+t          j        |t          j        | j	        j                  }|| 
                    |          }|                     |          }||z   }| j        dk    r|                     |          }||z  }|                     |          }|                     |          }||fS )Nr!   dtypedevicer$   )"create_position_ids_from_input_idsr   torC   &create_position_ids_from_inputs_embedssizer6   zeroslongr    r+   r/   r#   r-   r0   r4   )	r;   	input_idstoken_type_idsr    inputs_embedsinput_shaper/   
embeddingsr-   s	            r>   forwardzLiltTextEmbeddings.forwardB   s=    $#FFyRVRbccff$     $JJ=YY #..**KK',,..ss3K!"[EJtO`OghhhN  00;;M $ : :> J J"%::
':55"&":":<"H"H--J^^J//
\\*--
<''r?   c                     |                     |                                          }t          j        |d                              |          |z  }|                                |z   S )a  
        Args:
        Replace non-padding symbols with their position numbers. Position numbers begin at padding_idx+1. Padding
        symbols are ignored. This is modified from fairseq's `utils.make_positions`.
            x: torch.Tensor x:
        Returns: torch.Tensor
        r   dim)neintr6   cumsumtype_asrI   )r;   rJ   r   maskincremental_indicess        r>   rD   z5LiltTextEmbeddings.create_position_ids_from_input_idsf   s`     ||K((,,..$|Da888@@FF$N"''))K77r?   c                    |                                 dd         }|d         }t          j        | j        dz   || j        z   dz   t          j        |j                  }|                    d                              |          S )z
        Args:
        We are provided embeddings directly. We cannot infer which are padded so just generate sequential position ids.:
            inputs_embeds: torch.Tensor
        Returns: torch.Tensor
        Nr!   r   rA   r   )rG   r6   r7   r   rI   rC   	unsqueezer8   )r;   rL   rM   sequence_lengthr    s        r>   rF   z9LiltTextEmbeddings.create_position_ids_from_inputs_embedss   s     $((**3B3/%a.|q /D4D"Dq"HPUPZcpcw
 
 
 %%a((//<<<r?   )NNNN)__name__
__module____qualname__r&   rO   rD   rF   __classcell__r=   s   @r>   r   r   *   sy        
 
 
 
 
2 "( "( "( "(H8 8 8= = = = = = =r?   r   c                   &     e Zd Z fdZddZ xZS )LiltLayoutEmbeddingsc                    t                                                       t          j        |j        |j        dz            | _        t          j        |j        |j        dz            | _        t          j        |j        |j        dz            | _        t          j        |j        |j        dz            | _	        |j
        | _        t          j        |j        |j        |j        z  | j                  | _        t          j        |j        |j        |j        z            | _        t          j        |j        |j        z  |j                  | _        t          j        |j                  | _        d S )N   r   )in_featuresout_featuresr   )r%   r&   r   r'   max_2d_position_embeddingsr)   x_position_embeddingsy_position_embeddingsh_position_embeddingsw_position_embeddingsr*   r   r,   channel_shrink_ratiobox_position_embeddingsLinearbox_linear_embeddingsr0   r1   r2   r3   r4   r:   s     r>   r&   zLiltLayoutEmbeddings.__init__   sJ    &(\&2SU[UgklUl%m%m"%'\&2SU[UgklUl%m%m"%'\&2SU[UgklUl%m%m"%'\&2SU[UgklUl%m%m"!.')|*&"==((
 (
 (
$
 &(Y*9KvOj9j&
 &
 &
" f&8F<W&W]c]rsssz&"<==r?   Nc                    	 |                      |d d d d df                   }|                     |d d d d df                   }|                      |d d d d df                   }|                     |d d d d df                   }n"# t          $ r}t          d          |d }~ww xY w|                     |d d d d df         |d d d d df         z
            }|                     |d d d d df         |d d d d df         z
            }	t          j        ||||||	gd          }
|                     |
          }
|                     |          }|
|z   }
| 	                    |
          }
| 
                    |
          }
|
S )Nr   r      r	   z;The `bbox` coordinate values should be within 0-1000 range.r!   rQ   )rh   ri   
IndexErrorrj   rk   r6   catro   rm   r0   r4   )r;   bboxr    left_position_embeddingsupper_position_embeddingsright_position_embeddingslower_position_embeddingserj   rk   spatial_position_embeddingsrm   s               r>   rO   zLiltLayoutEmbeddings.forward   s   	c'+'A'A$qqq!!!Qw-'P'P$(,(B(B4111a=(Q(Q%(,(B(B4111a=(Q(Q%(,(B(B4111a=(Q(Q%% 	c 	c 	cZ[[abb	c !% : :4111a=4PQPQPQSTSTSTVWPW=;X Y Y $ : :4111a=4PQPQPQSTSTSTVWPW=;X Y Y&+i()))%% 
'
 
'
 
'
# '+&@&@A\&]&]#"&">">|"L"L&AD[&[#&*nn5P&Q&Q#&*ll3N&O&O#**s   BB 
B*B%%B*NN)r\   r]   r^   r&   rO   r_   r`   s   @r>   rb   rb      sL        > > > > >*+ + + + + + + +r?   rb   c                   6     e Zd Zd fd	ZddZ	 	 	 d	dZ xZS )
LiltSelfAttentionNc                    t                                                       |j        |j        z  dk    r0t	          |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        z  | j        |j        z            | _        t          j
        |j        |j        z  | j        |j        z            | _        t          j
        |j        |j        z  | j        |j        z            | _        t          j        |j                  | _        |pt+          |dd          | _        | j        dk    s| j        d	k    r6|j        | _        t          j        d
|j        z  dz
  | j                  | _        |j        | _        || _        d S )Nr   embedding_sizezThe hidden size (z6) is not a multiple of the number of attention heads ()r#   r$   relative_keyrelative_key_queryrq   r   )r%   r&   r)   num_attention_headshasattr
ValueErrorrT   attention_head_sizeall_head_sizer   rn   querykeyvaluerl   layout_query
layout_keylayout_valuer2   attention_probs_dropout_probr4   r9   r#   r,   r'   distance_embedding	layer_idx)r;   r<   r#   r   r=   s       r>   r&   zLiltSelfAttention.__init__   s2    ::a??PVXhHiHi?8F$6 8 8 48 8 8  
 $*#= #&v'9F<V'V#W#W !58PPYv143EFF
9V/1CDDYv143EFF
I&"==t?QU[Up?p
 
 )&"==t?QU[Up?p
 
 I&"==t?QU[Up?p
 
 z&"EFF'> (
'-zC
 C
$ '>99T=Y]q=q=q+1+ID(&(l1v7U3UXY3Y[_[s&t&tD#$*$?!"r?   r   c                     |                                 d d         | j        | j        |z  fz   } |j        | }|                    dddd          S )Nr!   r   rq   r   r	   )rG   r   r   viewpermute)r;   xrnew_x_shapes       r>   transpose_for_scoresz&LiltSelfAttention.transpose_for_scores   sS    ffhhssmt'?AY]^A^&__AFK yyAq!$$$r?   Fc                    |                      |                     |          | j                  }|                      |                     |          | j                  }|                      |                     |          | j                  }|                     |          }	|                      |                     |                    }
|                      |                     |                    }|                      |	          }t          j	        ||

                    dd                    }t          j	        ||
                    dd                    }| j        dk    s| j        dk    r4|                                d         }t          j        |t          j        |j                                      dd          }t          j        |t          j        |j                                      dd          }||z
  }|                     || j        z   dz
            }|                    |j                  }| j        dk    rt          j        d	||          }||z   }n?| j        dk    r4t          j        d	||          }t          j        d
|
|          }||z   |z   }|t-          j        | j                  z  }|t-          j        | j        | j        z            z  }||z   }||z   }|||z   } t3          j        d          |          }|                     |          }|||z  }t          j	        ||          }|                    dddd                                          }|                                d d         | j        | j        z  fz   } |j        | }|||z   } t3          j        d          |          }|                     |          }|||z  }t          j	        ||          }|                    dddd                                          }|                                d d         | j        fz   } |j        | }|r||f|fn||ff}|S )N)r   r!   r   r   r   rA   )rB   zbhld,lrd->bhlrzbhrd,lrd->bhlrrQ   r   rq   r	   )r   r   rl   r   r   r   r   r   r6   matmul	transposer#   rG   r7   rI   rC   r   r   r,   rE   rB   einsummathsqrtr   r   Softmaxr4   r   
contiguousr   )r;   hidden_stateslayout_inputsattention_mask	head_maskoutput_attentionslayout_value_layerlayout_key_layerlayout_query_layermixed_query_layer	key_layervalue_layerquery_layerattention_scoreslayout_attention_scores
seq_lengthposition_ids_lposition_ids_rdistancepositional_embeddingrelative_position_scoresrelative_position_scores_queryrelative_position_scores_keytmp_attention_scorestmp_layout_attention_scoreslayout_attention_probslayout_context_layernew_context_layer_shapeattention_probscontext_layeroutputss                                  r>   rO   zLiltSelfAttention.forward   s    "66t7H7H7W7W[_[t6uu44T__]5S5SW[Wp4qq!66t7H7H7W7W[_[t6uu JJ}55--dhh}.E.EFF	//

=0I0IJJ//0ABB <Y5H5HR5P5PQQ"',/ACSC]C]^`bdCeCe"f"f'>99T=Y]q=q=q&++--a0J"\*EJ}OcdddiijlnoppN"\*EJ}OcdddiijkmoppN%6H#'#:#:8dFb;bef;f#g#g #7#:#:AR#:#S#S +~==+0<8H+Wk+l+l(#36N#N  -1EEE16>NP[]q1r1r./4|<LiYm/n/n,#36T#TWs#s /$)D<T2U2UU&=	$(AAA
 A
 '
# 02MM"=@T"T%&=&N# "4!3!3!34K!L!L "&.D!E!E  %;i%G"$|,BDVWW3;;Aq!QGGRRTT"6";";"="=crc"BdFX\`\uFuEw"w838:QR%/.@ -"*,,,-=>> ,,77  -	9O_kBB%--aAq99DDFF"/"4"4"6"6ss";t?Q>S"S**,CD !:m12ODD "679 	 r?   r{   )r   NNF)r\   r]   r^   r&   r   rO   r_   r`   s   @r>   r}   r}      sy        ## ## ## ## ## ##J% % % % \ \ \ \ \ \ \ \r?   r}   c                   P     e Zd Z fdZdej        dej        dej        fdZ xZS )LiltSelfOutputc                    t                                                       t          j        |j        |j                  | _        t          j        |j        |j                  | _        t          j        |j	                  | _
        d S Nr   )r%   r&   r   rn   r)   denser0   r1   r2   r3   r4   r:   s     r>   r&   zLiltSelfOutput.__init__G  sf    Yv163EFF
f&8f>STTTz&"<==r?   r   input_tensorreturnc                     |                      |          }|                     |          }|                     ||z             }|S Nr   r4   r0   r;   r   r   s      r>   rO   zLiltSelfOutput.forwardM  @    

=11]33}|'CDDr?   r\   r]   r^   r&   r6   TensorrO   r_   r`   s   @r>   r   r   F  i        > > > > >U\  RWR^        r?   r   c                        e Zd Zd fd	Zd Z	 	 	 ddej        dej        deej                 deej                 d	ee	         d
e
ej                 fdZ xZS )LiltAttentionNc                 0   t                                                       t          |||          | _        t	          |          | _        t                      | _        |j        }|j        |j	        z  |_        t	          |          | _
        ||_        d S )N)r#   r   )r%   r&   r}   r;   r   outputsetpruned_headsr)   rl   layout_output)r;   r<   r#   r   ori_hidden_sizer=   s        r>   r&   zLiltAttention.__init__U  s    %fF]irsss	$V,,EE ,#/63NN+F33,r?   c                    t          |          dk    rd S t          || j        j        | j        j        | j                  \  }}t          | j        j        |          | j        _        t          | j        j        |          | j        _        t          | j        j	        |          | j        _	        t          | j
        j        |d          | j
        _        | j        j        t          |          z
  | j        _        | j        j        | j        j        z  | j        _        | j                            |          | _        d S )Nr   r   rQ   )lenr   r;   r   r   r   r   r   r   r   r   r   r   union)r;   headsindexs      r>   prune_headszLiltAttention.prune_headsa  s    u::??F7490$)2OQUQb
 
u
 -TY_eDD	*49=%@@	,TY_eDD	.t{/@%QOOO )-	(EE

(R	%"&)"?$)B_"_	 -33E::r?   Fr   r   r   r   r   r   c                     |                      |||||          }|                     |d         d         |          }|                     |d         d         |          }||ff|dd          z   }	|	S )Nr   r   )r;   r   r   )
r;   r   r   r   r   r   self_outputsattention_outputlayout_attention_outputr   s
             r>   rO   zLiltAttention.forwards  s     yy
 
  ;;|Aq'9=II"&"4"4\!_Q5G"W"W$&=>@<PQPRPRCSSr?   r{   r   )r\   r]   r^   r&   r   r6   r   r   FloatTensorbooltuplerO   r_   r`   s   @r>   r   r   T  s        	- 	- 	- 	- 	- 	-; ; ;, 7;15,1 | | !!23	
 E-. $D> 
u|	       r?   r   c                   B     e Zd Z fdZdej        dej        fdZ xZS )LiltIntermediatec                    t                                                       t          j        |j        |j                  | _        t          |j        t                    rt          |j                 | _        d S |j        | _        d S r   )r%   r&   r   rn   r)   intermediate_sizer   
isinstance
hidden_actstrr
   intermediate_act_fnr:   s     r>   r&   zLiltIntermediate.__init__  sn    Yv163KLL
f'-- 	9'-f.?'@D$$$'-'8D$$$r?   r   r   c                 Z    |                      |          }|                     |          }|S r   )r   r   )r;   r   s     r>   rO   zLiltIntermediate.forward  s,    

=1100??r?   r   r`   s   @r>   r   r     s^        9 9 9 9 9U\ el        r?   r   c                   P     e Zd Z fdZdej        dej        dej        fdZ xZS )
LiltOutputc                    t                                                       t          j        |j        |j                  | _        t          j        |j        |j                  | _        t          j	        |j
                  | _        d S r   )r%   r&   r   rn   r   r)   r   r0   r1   r2   r3   r4   r:   s     r>   r&   zLiltOutput.__init__  sf    Yv79KLL
f&8f>STTTz&"<==r?   r   r   r   c                     |                      |          }|                     |          }|                     ||z             }|S r   r   r   s      r>   rO   zLiltOutput.forward  r   r?   r   r`   s   @r>   r   r     r   r?   r   c                        e Zd Zd fd	Z	 	 	 ddej        dej        deej                 deej                 dee         d	e	ej                 fd
Z
d Zd Z xZS )	LiltLayerNc                    t                                                       |j        | _        d| _        t	          ||          | _        t          |          | _        t          |          | _	        |j
        }|j        }|j
        |j        z  |_
        |j        |j        z  |_        t          |          | _        t          |          | _        ||_
        ||_        d S )Nr   r   )r%   r&   chunk_size_feed_forwardseq_len_dimr   	attentionr   intermediater   r   r)   r   rl   layout_intermediater   )r;   r<   r   r   ori_intermediate_sizer=   s        r>   r&   zLiltLayer.__init__  s    '-'E$&vCCC,V44 (( , & 8#/63NN#)#;v?Z#Z #3F#;#; '//,#8   r?   Fr   r   r   r   r   r   c                    |                      |||||          }|d         d         }|d         d         }|dd          }	t          | j        | j        | j        |          }
t          | j        | j        | j        |          }|
|ff|	z   }	|	S )N)r   r   r   )r   r   feed_forward_chunkr   r   layout_feed_forward_chunk)r;   r   r   r   r   r   self_attention_outputsr   r   r   layer_outputlayout_layer_outputs               r>   rO   zLiltLayer.forward  s     "&/ "0 "
 "
 2!4Q7"8";A">(,0#T%A4CSUe
 
 8*D,H$JZ\s
 
 !"5687Br?   c                 \    |                      |          }|                     ||          }|S r   )r   r   r;   r   intermediate_outputr   s       r>   r   zLiltLayer.feed_forward_chunk  s2    "//0@AA{{#68HIIr?   c                 \    |                      |          }|                     ||          }|S r   )r   r   r  s       r>   r   z#LiltLayer.layout_feed_forward_chunk  s4    "667GHH))*=?OPPr?   r   r   )r\   r]   r^   r&   r6   r   r   r   r   r   rO   r   r   r_   r`   s   @r>   r   r     s        9 9 9 9 9 9* 7;15,1 | | !!23	
 E-. $D> 
u|	   >  
      r?   r   c                        e Zd Zd fd	Z	 	 	 	 	 ddej        dej        deej                 deej                 d	ee         d
ee         dee         de	e
ej                 ef         fdZ xZS )LiltEncoderNc                     t                                                       | _        t          j        fdt          j                  D                       | _        d| _        d S )Nc                 2    g | ]}t          |           S )r   )r   ).0ir<   s     r>   
<listcomp>z(LiltEncoder.__init__.<locals>.<listcomp>  s&    #l#l#lqIf$B$B$B#l#l#lr?   F)	r%   r&   r<   r   
ModuleListrangenum_hidden_layerslayergradient_checkpointing)r;   r<   r   r=   s    ` r>   r&   zLiltEncoder.__init__  sa    ]#l#l#l#lERXRjLkLk#l#l#lmm
&+###r?   FTr   r   r   r   r   output_hidden_statesreturn_dictr   c                 X   |rdnd }|rdnd }	t          | j                  D ]R\  }
}|r||fz   }|||
         nd } ||||||          }|d         d         }|d         d         }|r|	|d         fz   }	S|r||fz   }|st          d |||	fD                       S t          |||	          S )N r   r   c              3      K   | ]}||V  	d S r   r  )r	  vs     r>   	<genexpr>z&LiltEncoder.forward.<locals>.<genexpr>  s4        
 =  !=== r?   )last_hidden_stater   
attentions)	enumerater  r   r   )r;   r   r   r   r   r   r  r  all_hidden_statesall_self_attentionsr
  layer_modulelayer_head_masklayer_outputss                 r>   rO   zLiltEncoder.forward  sC    #7@BBD$5?bb4(44 	P 	POA|# I$58H$H!.7.CillO(L! M *!,Q/M)!,Q/M  P&9]1=M<O&O# 	E 1]4D D 		   "%'      ++*
 
 
 	
r?   r   )NNFFT)r\   r]   r^   r&   r6   r   r   r   r   r   r   r   rO   r_   r`   s   @r>   r  r    s        , , , , , , 7;15,1/4&*2
 2
|2
 |2
 !!23	2

 E-.2
 $D>2
 'tn2
 d^2
 
uU\"O3	42
 2
 2
 2
 2
 2
 2
 2
r?   r  c                   B     e Zd Z fdZdej        dej        fdZ xZS )
LiltPoolerc                     t                                                       t          j        |j        |j                  | _        t          j                    | _        d S r   )r%   r&   r   rn   r)   r   Tanh
activationr:   s     r>   r&   zLiltPooler.__init__"  sC    Yv163EFF
'))r?   r   r   c                 r    |d d df         }|                      |          }|                     |          }|S Nr   )r   r$  )r;   r   first_token_tensorpooled_outputs       r>   rO   zLiltPooler.forward'  s@     +111a40

#56666r?   r   r`   s   @r>   r!  r!  !  s^        $ $ $ $ $
U\ el        r?   r!  c                   ,    e Zd ZU eed<   dZdZg Zd ZdS )LiltPreTrainedModelr<   liltTc                    t          |t          j                  rT|j        j                            d| j        j                   |j         |j        j        	                                 dS dS t          |t          j
                  r_|j        j                            d| j        j                   |j        +|j        j        |j                 	                                 dS dS t          |t          j                  r?|j        j        	                                 |j        j                            d           dS dS )zInitialize the weightsg        )meanstdNg      ?)r   r   rn   weightdatanormal_r<   initializer_rangebiaszero_r'   r   r0   fill_)r;   modules     r>   _init_weightsz!LiltPreTrainedModel._init_weights7  s)   fbi(( 	* M&&CT[5R&SSS{& &&((((( '&-- 	*M&&CT[5R&SSS!-"6#56<<>>>>> .--- 	*K""$$$M$$S)))))	* 	*r?   N)	r\   r]   r^   r   __annotations__base_model_prefixsupports_gradient_checkpointing_no_split_modulesr7  r  r?   r>   r*  r*  0  sC         &*#* * * * *r?   r*  c                   p    e Zd Zd fd	Zd Zd Zd Ze	 	 	 	 	 	 	 	 	 	 ddee	j
                 dee	j
                 d	ee	j
                 d
ee	j
                 dee	j
                 dee	j
                 dee	j
                 dee         dee         dee         deee	j
                 ef         fd            Z xZS )	LiltModelTc                 (   t                                          |           || _        t          |          | _        t          |          | _        t          |          | _        |rt          |          nd| _
        |                                  dS )zv
        add_pooling_layer (bool, *optional*, defaults to `True`):
            Whether to add a pooling layer
        N)r%   r&   r<   r   rN   rb   layout_embeddingsr  encoderr!  pooler	post_init)r;   r<   add_pooling_layerr=   s      r>   r&   zLiltModel.__init__J  s    
 	   ,V44!5f!=!="6**,=Gj(((4 	r?   c                     | j         j        S r   rN   r+   )r;   s    r>   get_input_embeddingszLiltModel.get_input_embeddings[  s    ..r?   c                     || j         _        d S r   rE  )r;   r   s     r>   set_input_embeddingszLiltModel.set_input_embeddings^  s    */'''r?   c                     |                                 D ]/\  }}| j        j        |         j                            |           0dS )z
        Prunes heads of the model. heads_to_prune: dict of {layer_num: list of heads to prune in this layer} See base
        class PreTrainedModel
        N)itemsr@  r  r   r   )r;   heads_to_pruner  r   s       r>   _prune_headszLiltModel._prune_headsa  sU    
 +0022 	C 	CLE5Lu%/;;EBBBB	C 	Cr?   NrJ   rt   r   rK   r    r   rL   r   r  r  r   c           	      l   ||n| j         j        }|	|	n| j         j        }	|
|
n| j         j        }
||t	          d          |+|                     ||           |                                }n.||                                dd         }nt	          d          |\  }}||j        n|j        }|$t          j	        |dz   t          j
        |          }|t          j        ||f|          }|gt          | j        d          r1| j        j        ddd|f         }|                    ||          }|}n!t          j	        |t          j
        |          }|                     ||          }|                     || j         j                  }|                     ||||	          \  }}|                     ||
          }|                     ||||||	|
          }|d         }| j        |                     |          nd}|
s||f|dd         z   S t-          |||j        |j                  S )a  
        bbox (`torch.LongTensor` of shape `(batch_size, sequence_length, 4)`, *optional*):
            Bounding boxes of each input sequence tokens. Selected in the range `[0,
            config.max_2d_position_embeddings-1]`. Each bounding box should be a normalized version in (x0, y0, x1, y1)
            format, where (x0, y0) corresponds to the position of the upper left corner in the bounding box, and (x1,
            y1) represents the position of the lower right corner. See [Overview](#Overview) for normalization.

        Examples:

        ```python
        >>> from transformers import AutoTokenizer, AutoModel
        >>> from datasets import load_dataset

        >>> tokenizer = AutoTokenizer.from_pretrained("SCUT-DLVCLab/lilt-roberta-en-base")
        >>> model = AutoModel.from_pretrained("SCUT-DLVCLab/lilt-roberta-en-base")

        >>> dataset = load_dataset("nielsr/funsd-layoutlmv3", split="train")
        >>> example = dataset[0]
        >>> words = example["tokens"]
        >>> boxes = example["bboxes"]

        >>> encoding = tokenizer(words, boxes=boxes, return_tensors="pt")

        >>> outputs = model(**encoding)
        >>> last_hidden_states = outputs.last_hidden_state
        ```NzDYou cannot specify both input_ids and inputs_embeds at the same timer!   z5You have to specify either input_ids or inputs_embeds)   rA   )rC   rK   )rJ   r    rK   rL   )rt   r    )r   r   r   r  r  r   r   )r  pooler_outputr   r  )r<   r   r  use_return_dictr   %warn_if_padding_and_no_attention_maskrG   rC   r6   rH   rI   onesr   rN   rK   r8   get_extended_attention_maskget_head_maskr  r?  r@  rA  r   r   r  )r;   rJ   rt   r   rK   r    r   rL   r   r  r  rM   
batch_sizer   rC   buffered_token_type_ids buffered_token_type_ids_expandedextended_attention_maskembedding_outputlayout_embedding_outputencoder_outputssequence_outputr(  s                          r>   rO   zLiltModel.forwardi  s   P 2C1N--TXT_Tq$8$D  $+Jj 	 &1%<kk$+B] ]%>cddd"66y.QQQ#..**KK&',,..ss3KKTUUU!,
J%.%:!!@T<;{T1FSSSD!"Z*j)A6RRRN!t(899 [*./*HKZK*X'3J3Q3QR\^h3i3i0!A!&[
SY!Z!Z!Z 150P0PQ_al0m0m &&y$+2OPP	)-%)'	 *9 *
 *
&, #'"8"8dQ]"8"^"^,,#2/!5# ' 
 
 *!,8<8OO444UY 	J#]3oabb6III)-')7&1	
 
 
 	
r?   )T)
NNNNNNNNNN)r\   r]   r^   r&   rF  rH  rL  r   r   r6   r   r   r   r   r   rO   r_   r`   s   @r>   r=  r=  H  s            "/ / /0 0 0C C C  -1'+1515/3,004,0/3&*p
 p
EL)p
 u|$p
 !.	p

 !.p
 u|,p
 EL)p
  -p
 $D>p
 'tnp
 d^p
 
uU\"$>>	?p
 p
 p
 ^p
 p
 p
 p
 p
r?   r=  z
    LiLT Model transformer with a sequence classification/regression head on top (a linear layer on top of the pooled
    output) e.g. for GLUE tasks.
    )custom_introc                   x    e Zd Z fdZe	 	 	 	 	 	 	 	 	 	 	 ddeej                 deej                 deej	                 deej                 deej                 deej	                 d	eej	                 d
eej                 dee
         dee
         dee
         deeej                 ef         fd            Z xZS )LiltForSequenceClassificationc                     t                                          |           |j        | _        || _        t	          |d          | _        t          |          | _        |                                  d S NF)rC  )	r%   r&   
num_labelsr<   r=  r+  LiltClassificationHead
classifierrB  r:   s     r>   r&   z&LiltForSequenceClassification.__init__  sg        +f>>>	088 	r?   NrJ   rt   r   rK   r    r   rL   labelsr   r  r  r   c                    ||n| j         j        }|                     ||||||||	|
|
  
        }|d         }|                     |          }d}|t|                    |j                  }| j         j        f| j        dk    rd| j         _        nN| j        dk    r7|j        t          j
        k    s|j        t          j        k    rd| j         _        nd| j         _        | j         j        dk    rWt                      }| j        dk    r1 ||                                |                                          }n |||          }n| j         j        dk    rGt                      } ||                    d| j                  |                    d                    }n*| j         j        dk    rt!                      } |||          }|s|f|d	d         z   }||f|z   n|S t#          |||j        |j        
          S )a  
        bbox (`torch.LongTensor` of shape `(batch_size, sequence_length, 4)`, *optional*):
            Bounding boxes of each input sequence tokens. Selected in the range `[0,
            config.max_2d_position_embeddings-1]`. Each bounding box should be a normalized version in (x0, y0, x1, y1)
            format, where (x0, y0) corresponds to the position of the upper left corner in the bounding box, and (x1,
            y1) represents the position of the lower right corner. See [Overview](#Overview) for normalization.
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the sequence classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If
            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).

        Examples:

        ```python
        >>> from transformers import AutoTokenizer, AutoModelForSequenceClassification
        >>> from datasets import load_dataset

        >>> tokenizer = AutoTokenizer.from_pretrained("SCUT-DLVCLab/lilt-roberta-en-base")
        >>> model = AutoModelForSequenceClassification.from_pretrained("SCUT-DLVCLab/lilt-roberta-en-base")

        >>> dataset = load_dataset("nielsr/funsd-layoutlmv3", split="train")
        >>> example = dataset[0]
        >>> words = example["tokens"]
        >>> boxes = example["bboxes"]

        >>> encoding = tokenizer(words, boxes=boxes, return_tensors="pt")

        >>> outputs = model(**encoding)
        >>> predicted_class_idx = outputs.logits.argmax(-1).item()
        >>> predicted_class = model.config.id2label[predicted_class_idx]
        ```N	rt   r   rK   r    r   rL   r   r  r  r   r   
regressionsingle_label_classificationmulti_label_classificationr!   rq   losslogitsr   r  )r<   rP  r+  rd  rE   rC   problem_typerb  rB   r6   rI   rT   r   squeezer   r   r   r   r   r  r;   rJ   rt   r   rK   r    r   rL   re  r   r  r  r   r\  rm  rl  loss_fctr   s                     r>   rO   z%LiltForSequenceClassification.forward  s"   \ &1%<kk$+B]))))%'/!5#  
 
 "!*11YYv}--F{'/?a''/;DK,,_q((flej.H.HFL\a\eLeLe/LDK,,/KDK,{'<77"99?a''#8FNN$4$4fnn6F6FGGDD#8FF33DD)-JJJ+--xB @ @&++b//RR)-III,..x// 	FY,F)-)9TGf$$vE'!/)	
 
 
 	
r?   NNNNNNNNNNN)r\   r]   r^   r&   r   r   r6   
LongTensorr   r   r   r   r   r   rO   r_   r`   s   @r>   r_  r_    sh       	 	 	 	 	  15'+6:59371559-1,0/3&*`
 `
E,-`
 u|$`
 !!23	`

 !!12`
 u/0`
 E-.`
   12`
 )*`
 $D>`
 'tn`
 d^`
 
uU\"$<<	=`
 `
 `
 ^`
 `
 `
 `
 `
r?   r_  c                   x    e Zd Z fdZe	 	 	 	 	 	 	 	 	 	 	 ddeej                 deej                 deej                 deej                 deej                 deej                 d	eej                 d
eej                 dee	         dee	         dee	         de
eej                 ef         fd            Z xZS )LiltForTokenClassificationc                 Z   t                                          |           |j        | _        t          |d          | _        |j        |j        n|j        }t          j        |          | _	        t          j
        |j        |j                  | _        |                                  d S ra  )r%   r&   rb  r=  r+  classifier_dropoutr3   r   r2   r4   rn   r)   rd  rB  r;   r<   rw  r=   s      r>   r&   z#LiltForTokenClassification.__init__W  s        +f>>>	)/)B)NF%%TZTn 	 z"455)F$68IJJ 	r?   NrJ   rt   r   rK   r    r   rL   re  r   r  r  r   c                    ||n| j         j        }|                     ||||||||	|
|
  
        }|d         }|                     |          }|                     |          }d}|`|                    |j                  }t                      } ||                    d| j	                  |                    d                    }|s|f|dd         z   }||f|z   n|S t          |||j        |j                  S )a  
        bbox (`torch.LongTensor` of shape `(batch_size, sequence_length, 4)`, *optional*):
            Bounding boxes of each input sequence tokens. Selected in the range `[0,
            config.max_2d_position_embeddings-1]`. Each bounding box should be a normalized version in (x0, y0, x1, y1)
            format, where (x0, y0) corresponds to the position of the upper left corner in the bounding box, and (x1,
            y1) represents the position of the lower right corner. See [Overview](#Overview) for normalization.
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the token classification loss. Indices should be in `[0, ..., config.num_labels - 1]`.

        Examples:

        ```python
        >>> from transformers import AutoTokenizer, AutoModelForTokenClassification
        >>> from datasets import load_dataset

        >>> tokenizer = AutoTokenizer.from_pretrained("SCUT-DLVCLab/lilt-roberta-en-base")
        >>> model = AutoModelForTokenClassification.from_pretrained("SCUT-DLVCLab/lilt-roberta-en-base")

        >>> dataset = load_dataset("nielsr/funsd-layoutlmv3", split="train")
        >>> example = dataset[0]
        >>> words = example["tokens"]
        >>> boxes = example["bboxes"]

        >>> encoding = tokenizer(words, boxes=boxes, return_tensors="pt")

        >>> outputs = model(**encoding)
        >>> predicted_class_indices = outputs.logits.argmax(-1)
        ```Nrg  r   r!   rq   rk  )r<   rP  r+  r4   rd  rE   rC   r   r   rb  r   r   r  rp  s                     r>   rO   z"LiltForTokenClassification.forwarde  s,   V &1%<kk$+B]))))%'/!5#  
 
 "!*,,7711YYv}--F'))H8FKKDO<<fkk"ooNND 	FY,F)-)9TGf$$vE$!/)	
 
 
 	
r?   rr  )r\   r]   r^   r&   r   r   r6   rs  r   r   r   r   r   r   rO   r_   r`   s   @r>   ru  ru  T  si             15+/6:59371559-1,0/3&*N
 N
E,-N
 u'(N
 !!23	N

 !!12N
 u/0N
 E-.N
   12N
 )*N
 $D>N
 'tnN
 d^N
 
uU\"$99	:N
 N
 N
 ^N
 N
 N
 N
 N
r?   ru  c                   (     e Zd ZdZ fdZd Z xZS )rc  z-Head for sentence-level classification tasks.c                 4   t                                                       t          j        |j        |j                  | _        |j        |j        n|j        }t          j        |          | _	        t          j        |j        |j
                  | _        d S r   )r%   r&   r   rn   r)   r   rw  r3   r2   r4   rb  out_projrx  s      r>   r&   zLiltClassificationHead.__init__  s    Yv163EFF
)/)B)NF%%TZTn 	 z"455	&"4f6GHHr?   c                     |d d dd d f         }|                      |          }|                     |          }t          j        |          }|                      |          }|                     |          }|S r&  )r4   r   r6   tanhr|  )r;   featureskwargsr   s       r>   rO   zLiltClassificationHead.forward  sj    QQQ111WLLOOJJqMMJqMMLLOOMM!r?   )r\   r]   r^   __doc__r&   rO   r_   r`   s   @r>   rc  rc    sR        77I I I I I      r?   rc  c                       e Zd Z fdZe	 	 	 	 	 	 	 	 	 	 	 	 ddeej                 deej                 deej                 deej                 deej                 deej                 d	eej                 d
eej                 deej                 dee	         dee	         dee	         de
eej                 ef         fd            Z xZS )LiltForQuestionAnsweringc                     t                                          |           |j        | _        t          |d          | _        t          j        |j        |j                  | _        | 	                                 d S ra  )
r%   r&   rb  r=  r+  r   rn   r)   
qa_outputsrB  r:   s     r>   r&   z!LiltForQuestionAnswering.__init__  sj        +f>>>	)F$68IJJ 	r?   NrJ   rt   r   rK   r    r   rL   start_positionsend_positionsr   r  r  r   c                    ||n| j         j        }|                     ||||||||
||
  
        }|d         }|                     |          }|                    dd          \  }}|                    d                                          }|                    d                                          }d}||	t          |                                          dk    r|                    d          }t          |	                                          dk    r|	                    d          }	|                    d          }|	                    d|          }|		                    d|          }	t          |          } |||          } |||	          }||z   dz  }|s||f|dd         z   }||f|z   n|S t          ||||j        |j        	          S )
a  
        bbox (`torch.LongTensor` of shape `(batch_size, sequence_length, 4)`, *optional*):
            Bounding boxes of each input sequence tokens. Selected in the range `[0,
            config.max_2d_position_embeddings-1]`. Each bounding box should be a normalized version in (x0, y0, x1, y1)
            format, where (x0, y0) corresponds to the position of the upper left corner in the bounding box, and (x1,
            y1) represents the position of the lower right corner. See [Overview](#Overview) for normalization.

        Examples:

        ```python
        >>> from transformers import AutoTokenizer, AutoModelForQuestionAnswering
        >>> from datasets import load_dataset

        >>> tokenizer = AutoTokenizer.from_pretrained("SCUT-DLVCLab/lilt-roberta-en-base")
        >>> model = AutoModelForQuestionAnswering.from_pretrained("SCUT-DLVCLab/lilt-roberta-en-base")

        >>> dataset = load_dataset("nielsr/funsd-layoutlmv3", split="train")
        >>> example = dataset[0]
        >>> words = example["tokens"]
        >>> boxes = example["bboxes"]

        >>> encoding = tokenizer(words, boxes=boxes, return_tensors="pt")

        >>> outputs = model(**encoding)

        >>> answer_start_index = outputs.start_logits.argmax()
        >>> answer_end_index = outputs.end_logits.argmax()

        >>> predict_answer_tokens = encoding.input_ids[0, answer_start_index : answer_end_index + 1]
        >>> predicted_answer = tokenizer.decode(predict_answer_tokens)
        ```Nrg  r   r   r!   rQ   )ignore_indexrq   )rl  start_logits
end_logitsr   r  )r<   rP  r+  r  splitro  r   r   rG   clampr   r   r   r  )r;   rJ   rt   r   rK   r    r   rL   r  r  r   r  r  r   r\  rm  r  r  
total_lossignored_indexrq  
start_lossend_lossr   s                           r>   rO   z LiltForQuestionAnswering.forward  s   ^ &1%<kk$+B]))))%'/!5#  
 
 "!*11#)<<r<#:#: j#++B//::<<''++6688

&=+D?''))**Q.."1"9"9""="==%%''((1,, - 5 5b 9 9(--a00M-33A}EEO)//=AAM']CCCH!,@@Jx
M::H$x/14J 	R"J/'!""+=F/9/EZMF**6Q+%!!/)
 
 
 	
r?   )NNNNNNNNNNNN)r\   r]   r^   r&   r   r   r6   rs  r   r   r   r   r   r   rO   r_   r`   s   @r>   r  r    s             15+/6:593715596:48,0/3&*_
 _
E,-_
 u'(_
 !!23	_

 !!12_
 u/0_
 E-._
   12_
 "%"23_
   01_
 $D>_
 'tn_
 d^_
 
uU\"$@@	A_
 _
 _
 ^_
 _
 _
 _
 _
r?   r  )r  r_  ru  r=  r*  )5r  r   typingr   r   r6   r   torch.nnr   r   r   activationsr
   modeling_layersr   modeling_outputsr   r   r   r   r   modeling_utilsr   pytorch_utilsr   r   r   utilsr   r   configuration_liltr   
get_loggerr\   loggerModuler   rb   r}   r   r   r   r   r   r  r!  r*  r=  r_  ru  rc  r  __all__r  r?   r>   <module>r     s      " " " " " " " "        A A A A A A A A A A ! ! ! ! ! ! 9 9 9 9 9 9              . - - - - - l l l l l l l l l l , , , , , , , , * * * * * * 
	H	%	%V= V= V= V= V= V= V= V=r5+ 5+ 5+ 5+ 5+29 5+ 5+ 5+pG G G G G	 G G GV    RY   1 1 1 1 1BI 1 1 1j    ry           9 9 9 9 9* 9 9 9x:
 :
 :
 :
 :
") :
 :
 :
|        * * * * */ * * *. Q
 Q
 Q
 Q
 Q
# Q
 Q
 Q
h   n
 n
 n
 n
 n
$7 n
 n
 n
b _
 _
 _
 _
 _
!4 _
 _
 _
F    RY   , l
 l
 l
 l
 l
2 l
 l
 l
^  r?   