
    Z jG                        S SK r S SKJr  S SKrS SKJr  S SKJs  Jr  S SKJ	r	  SSK
Jr  SSKJrJr  SSKJrJr  SSKJr  SS	KJr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\5      r&\\ " S S\5      5       5       r' " S S\RP                  5      r) " S S\RP                  5      r* " S S\&5      r+ " S S\RP                  5      r, " S S\5      r- " S S \RP                  5      r. " S! S"\RP                  5      r/ " S# S$\RP                  5      r0 " S% S&\&5      r1\" S'S(9 " S) S*\&5      5       r2/ S+Qr3g),    N)	dataclass)Tensor   )initialization)ACT2CLSACT2FN)filter_output_hidden_statesload_backbone)GradientCheckpointingLayer)BaseModelOutputBaseModelOutputWithNoAttention)PreTrainedModel)Unpack)TransformersKwargsauto_docstringcan_return_tuple)merge_with_config_defaults)capture_outputs   )SLANetConfigc                   p   ^  \ rS rSr% \\S'   SrSrSrSr	/ r
\R                  " 5       U 4S j5       rSrU =r$ )	SLANetPreTrainedModel+   configbackbonepixel_values)imageTc                   > [         TU ]  U5        [        U[        R                  5      (       a  UR
                  S:  a#  S[        R                  " UR
                  5      -  OSn[        R                  " UR                  U* U5        [        R                  " UR                  U* U5        UR                  b#  [        R                  " UR                  U* U5        UR                  b#  [        R                  " UR                  U* U5        [        U[        5      (       a  S[        R                  " U R                  R
                  S-  5      -  nUR                   4 H  nUR#                  5        Hy  n[        U[        R$                  5      (       d  M$  [        R                  " UR&                  U* U5        UR(                  c  MV  [        R                  " UR(                  U* U5        M{     M     gg)zInitialize the weightsr   g      ?N)super_init_weights
isinstancennGRUCellhidden_sizemathsqrtinituniform_	weight_ih	weight_hhbias_ihbias_hhSLANetSLAHeadr   structure_generatorchildrenLinearweightbias)selfmodulestd	generatorlayer	__class__s        {/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/transformers/models/slanet/modeling_slanet.pyr    #SLANetPreTrainedModel._init_weights3   sa    	f% fbjj))9?9K9Ka9O#		&"4"455UVCMM&**SD#6MM&**SD#6~~)fnnsdC8~~)fnnsdC8 fm,,		$++"9"9C"?@@C$88:	&//1E!%33ellSD#> ::1 MM%**sdC@	 2 ; -     )__name__
__module____qualname____firstlineno__r   __annotations__base_model_prefixmain_input_nameinput_modalitiessupports_gradient_checkpointing_keep_in_fp32_modules_stricttorchno_gradr    __static_attributes____classcell__r8   s   @r9   r   r   +   s@    "$O!&*##% 
]]_A Ar;   r   c                   j    \ rS rSr% SrSr\R                  S-  \S'   Sr	\R                  S-  \S'   Sr
g)SLANetForTableRecognitionOutputN   aW  
head_hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
    Hidden-states of the SLANetSLAHead at each prediction step, varies up to max `self.config.max_text_length` states (depending on early exits).
head_attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
    Attentions of the SLANetSLAHead at each prediction step, varies up to max `self.config.max_text_length` attentions (depending on early exits).
Nhead_hidden_stateshead_attentionsr<   )r=   r>   r?   r@   __doc__rO   rG   FloatTensorrA   rP   rI   r<   r;   r9   rM   rM   N   s4     48))D0704OU&&-4r;   rM   c            	          ^  \ rS rSrU 4S jrS\R                  S\R                  S\R                  S\\   4S jr	Sr
U =r$ )	SLANetAttentionGRUCell\   c                    > [         TU ]  5         [        R                  " XSS9U l        [        R                  " X"5      U l        [        R                  " USSS9U l        [        R                  " X-   U5      U l        g )NF)r2   r   )	r   __init__r"   r0   input_to_hiddenhidden_to_hiddenscorer#   rnn)r3   
input_sizer$   num_embeddingsr8   s       r9   rW   SLANetAttentionGRUCell.__init__]   s[    !yyuM "		+ CYY{AE:
::j9;Gr;   prev_hiddenbatch_hiddenchar_onehotskwargsc                    U R                  U5      nU R                  U5      R                  S5      nXV-   n[        R                  " U5      nU R                  U5      n[        R                  " US[        R                  S9R                  UR                  5      nUR                  SS5      n[        R                  " X5      R                  S5      n	[        R                  " X/S5      n
U R                  X5      nX4$ )Nr   dimdtype   )rX   rY   	unsqueezerG   tanhrZ   Fsoftmaxfloat32torf   	transposematmulsqueezecatr[   )r3   r_   r`   ra   rb   batch_hidden_projprev_hidden_projattention_scoresattn_weightscontextconcat_contexthidden_statess               r9   forwardSLANetAttentionGRUCell.forwardf   s     !00>00=GGJ,? ::&67::&67yy!1qNQQRbRhRhi#--a3,,|:BB1EG#:A>=**r;   )rY   rX   r[   rZ   )r=   r>   r?   r@   rW   rG   rR   r   r   ry   rI   rJ   rK   s   @r9   rT   rT   \   sQ    H+&&+ ''+ ''	+
 +,+ +r;   rT   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )	SLANetMLP}   c                    > [         TU ]  5         [        R                  " X5      U l        [        R                  " X5      U l        Uc  [        R                  " 5       U l        g [        U   " 5       U l        g N)	r   rW   r"   r0   fc1fc2Identityr   act_fn)r3   r$   out_channels
activationr8   s       r9   rW   SLANetMLP.__init__~   sN    99[699[7'1'9bkkmwz?R?Tr;   c                 l    U R                  U5      nU R                  U5      nU R                  U5      nU$ r   )r   r   r   r3   rx   s     r9   ry   SLANetMLP.forward   s2    //M2r;   )r   r   r   r   )r=   r>   r?   r@   rW   ry   rI   rJ   rK   s   @r9   r|   r|   }   s    U r;   r|   c                      ^  \ rS rSrS\0r SS\S-  4U 4S jjjr\\	\
 SS\R                  S\R                  S-  S\\   4S	 jj5       5       5       rS
rU =r$ )r-      
attentionsNr   c                    > [         TU ]  U5        [        UR                  UR                  UR
                  5      U l        [        UR                  UR
                  5      U l        U R                  5         g r   )
r   rW   rT   post_conv_out_channelsr$   r   structure_attention_cellr|   r.   	post_init)r3   r   rb   r8   s      r9   rW   SLANetSLAHead.__init__   s_    
 	 (>))6+=+=v?R?R)
% $-V-?-?ATAT#U r;   rx   targetsrb   c                    [         R                  " UR                  S   U R                  R                  4[         R
                  UR                  S9n[         R                  " UR                  S   /[         R                  UR                  S9n/ n/ n[        U R                  R                  S-   5       H  n[        R                  " XPR                  R                  5      R                  5       n	U R                  XAR                  5       U	5      u  pHU R                  U5      n
U
R!                  SS9nUR#                  U
5        UR#                  U5        [         R$                  " USS9R'                  U R                  R                  S-
  5      R)                  S5      R+                  5       (       d  M    O   [        R,                  " [         R$                  " USS9S[         R
                  S9R/                  UR0                  5      n[3        XS9$ )	Nr   )rf   device)sizerf   r   r   re   rd   last_hidden_staterx   )rG   zerosshaper   r$   rl   r   longrangemax_text_lengthrj   one_hotr   floatr   r.   argmaxappendstackeqanyallrk   rm   rf   r   )r3   rx   r   rb   featurespredicted_charsstructure_preds_liststructure_ids_list_embedding_featurestructure_stepstructure_predss               r9   ry   SLANetSLAHead.forward   s    ;;  #T[[%<%<=U]][h[o[o
  ++M,?,?,B+C5::^k^r^rs!t{{22Q67A !		/;;;S;S T Z Z \77BUBUBWYjkKH!55h?N,333:O ''7%%o6{{-15889Q9QTU9UVZZ[]^bbdd 8 ))EKK0D!$LRT\a\i\ijmm
 eer;   )r   r.   r   )r=   r>   r?   r@   rT   _can_record_outputsdictrW   r   r   r	   rG   rR   r   r   r   ry   rI   rJ   rK   s   @r9   r-   r-      s    , #t     (,f((f $f +,	f !   fr;   r-   c                   b   ^  \ rS rSr    SS\S\S\S\S\S\4U 4S jjjrS	\S
\4S jrSr	U =r
$ )SLANetConvLayer   in_channelsr   kernel_sizestrider   groupsc           
         > [         TU ]  5         [        R                  " UUUUUS-  SUS9U l        [        R
                  " U5      U l        Ub  [        U   U l	        g [        R                  " 5       U l	        g )Nrg   F)r   r   paddingr2   r   )
r   rW   r"   Conv2dconvolutionBatchNorm2dnormalizationr   r   r   )r3   r   r   r   r   r   r   r8   s          r9   rW   SLANetConvLayer.__init__   sk     	99#1$
  ^^L90:0F&,BKKMr;   inputreturnc                 l    U R                  U5      nU R                  U5      nU R                  U5      nU$ r   )r   r   r   )r3   r   hidden_states      r9   ry   SLANetConvLayer.forward   s6    ''.)),7|4r;   )r   r   r   )r   r   	hardswishr   )r=   r>   r?   r@   intstrrW   r   ry   rI   rJ   rK   s   @r9   r   r      su    
 %ZZ Z 	Z
 Z Z Z Z,V   r;   r   c                   2   ^  \ rS rSrSrU 4S jrS rSrU =r$ )!SLANetDepthwiseSeparableConvLayer   z
Depthwise Separable Convolution Layer: Depthwise Conv -> Pointwise Conv
Core component of lightweight models (e.g., MobileNet, PP-LCNet) that significantly reduces
the number of parameters and computational cost.
c           	         > [         TU ]  5         [        UUUUUUR                  S9U l        [
        R                  " 5       U l        [        USUSUR                  S9U l        g )N)r   r   r   r   r   r   r   )r   r   r   r   r   )	r   rW   r   
hidden_actdepthwise_convolutionr"   r   squeeze_excitation_modulepointwise_convolution)r3   r   r   r   r   r   r8   s         r9   rW   *SLANetDepthwiseSeparableConvLayer.__init__   sg     	%4#$#((&
" *,&%4#%((&
"r;   c                 l    U R                  U5      nU R                  U5      nU R                  U5      nU$ r   )r   r   r   )r3   r   s     r9   ry   )SLANetDepthwiseSeparableConvLayer.forward   s8    11,?55lC11,?r;   )r   r   r   )	r=   r>   r?   r@   rQ   rW   ry   rI   rJ   rK   s   @r9   r   r      s    
4 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	$ )SLANetBottlenecki  c                 f   > [         TU ]  5         [        XSUS9U l        [	        UUUSUS9U l        g )Nr   r   r   r   r   )r   r   r   r   r   )r   rW   r   conv1r   conv2)r3   r   r   r   r   r   r8   s         r9   rW   SLANetBottleneck.__init__  sA     	$#AZd

 7$%#

r;   rx   r   c                 J    U R                  U5      nU R                  U5      nU$ r   r   r   r   s     r9   ry   SLANetBottleneck.forward  s$    

=1

=1r;   r   )
r=   r>   r?   r@   rW   rG   rR   ry   rI   rJ   rK   s   @r9   r   r     s,    
(U%6%6 5;L;L  r;   r   c                   r   ^  \ rS rSrSr    SU 4S jjrS\R                  S\R                  4S jrSr	U =r
$ )	SLANetCSPLayeri"  z~
Cross Stage Partial (CSP) network layer. Similar in structure to DFineCSPRepLayer, but with a different forward computation.
c                 .  > [         T
U ]  5         [        X5-  5      n[        X(SUS9U l        [        X(SUS9U l        [        SU-  USUS9U l        [        R                  " [        U5       V	s/ s H  n	[        XXGU5      PM     sn	5      U l        g s  sn	f )Nr   )r   rg   )r   rW   r   r   r   r   conv3r"   
ModuleListr   r   bottlenecks)r3   r   r   r   r   	expansion
num_blocksr   hidden_channelsr   r8   s             r9   rW   SLANetCSPLayer.__init__'  s     	l67$[1Q[\
$[1Q[\
$Q%8,V`a
== z**A !;\bc*
s   .Brx   r   c                     U R                  U5      nU R                  U5      nU R                   H  nU" U5      nM     [        R                  " X4SS9nU R                  U5      nU$ )Nr   r   )r   r   r   rG   rq   r   )r3   rx   residual
bottlenecks       r9   ry   SLANetCSPLayer.forward=  sa    ::m,

=1**J&}5M + 		=";C

=1r;   )r   r   r   r   )r   g      ?r   r   r=   r>   r?   r@   rQ   rW   rG   rR   ry   rI   rJ   rK   s   @r9   r   r   "  s?     
,
U%6%6 
5;L;L 
 
r;   r   c                   f   ^  \ rS rSrSrU 4S jrS\R                  S\R                  4S jrSr	U =r
$ )SLANetCSPPANiJ  z3
CSP-PAN: Path Aggregation Network with CSP layers
c                 N  > [         T	U ]  5         UR                  nUR                  nUR                  nUR
                  n[        R                  " [        [        U5      5       Vs/ s H  n[        X'   USUS9PM     sn5      U l        [        R                  " SSS9U l        [        R                  " [        [        U5      S-
  SS5       Vs/ s H  n[        UUS-  UUUUS9PM     sn5      U l        [        R                  " [        [        U5      S-
  5       Vs/ s H  n[!        UUUSUS	9PM     sn5      U l        [        R                  " [        [        U5      S-
  5       Vs/ s H  n[        UUS-  UUUUS9PM     sn5      U l        g s  snf s  snf s  snf s  snf )
Nr   r   rg   nearest)scale_factormoder   r   )r   r   r   )r   r   r   )r   rW   r   r   csp_kernel_sizecsp_num_blocksr"   r   r   lenr   channel_projectorUpsampleupsampler   top_down_blocksr   downsamplesbottom_up_blocks)
r3   r   in_channel_listr   r   r   r   ir   r8   s
            r9   rW   SLANetCSPPAN.__init__O  s   
 	44&&
,,..!#
 s?34	 5A   / 2[\is 5	"
 C!}} s?3a7B?
 @A  1$  +-) @
 
 == s?3a78	 9A 2   +! 9	
 !# s?3a78
 9A  1$  +-) 9
!
K
	
s   &FFF+F"rx   r   c                    / n[        [        U R                  5      5       H)  nUR                  U R                  U   " X   5      5        M+     US   /n[	        U R
                  [        US S 5      5       HZ  u  pVUS   n[        R                  " UUR                  SS  SS9nU" [        R                  " X/SS95      n	UR                  U	5        M\     [        [        U5      5      n
U
S   n[	        U R                  U R                  U
SS  5       H*  u  pnU" U5      nU" [        R                  " X/SS95      nM,     UR                  S5      R!                  SS5      nU$ )	Nr   r   )r   r   r   r   r   rg   )r   r   r   r   zipr   reversedrj   interpolater   rG   rq   listr   r   flattenrn   )r3   rx   projected_featuresidxtop_down_featurestop_down_blocklow_level_featurehigh_level_featureupsampled_featurefused_featurepyramid_featuresoutput_featuredownsample_layerbottom_up_blockdownsampled_features                  r9   ry   SLANetCSPPAN.forward  ss   T3345C%%d&<&<S&A-BT&UV 6 03414T5I5I8TfgjhjTkKl1m-N!22!6 !"&,,RS1!
 +5996G5[ab+cdM$$]3 2n  ): ;<)!,EHd335Eab5IF
A/A #3>"B,UYY8K7`fg-hiN	F
 '..q1;;AqAr;   )r   r   r   r   r   r   rK   s   @r9   r   r   J  s2    =
~U%6%6 5;L;L  r;   r   c            	          ^  \ rS rSrS\4U 4S jjr\\S\R                  S\
\   S\\R                     \-  4S j5       5       rSrU =r$ )	SLANetBackbonei  r   c                    > [         TU ]  U5        [        U5      U l        [	        XR                  R
                  SS  5      U l        U R                  5         g )Nrg   )r   rW   r
   vision_backboner   num_featurespost_csp_panr   r3   r   r8   s     r9   rW   SLANetBackbone.__init__  sI     ,V4(1E1E1R1RSTSU1VWr;   rx   rb   r   c                     U R                   " U40 UD6nU R                  UR                  5      n[        UUR                  S9$ )Nr   )r  r  feature_mapsr   rx   )r3   rx   rb   outputss       r9   ry   SLANetBackbone.forward  sH    
 &&}??))'*>*>?-+!//
 	
r;   )r  r  )r=   r>   r?   r@   r   rW   r   r   rG   rR   r   r   tupler   ry   rI   rJ   rK   s   @r9   r  r    s`    |  
"..
:@AS:T
	u  	!$B	B
  
r;   r  z
    SLANet Table Recognition model for table recognition tasks. Wraps the core SLANetPreTrainedModel
    and returns outputs compatible with the Transformers table recognition API.
    )custom_introc            	          ^  \ rS rSrS/rS\4U 4S jjr\\S\	R                  S\\   S\\	R                     \-  4S j5       5       rS	rU =r$ )
SLANetForTableRecognitioni  num_batches_trackedr   c                 |   > [         TU ]  U5        [        US9U l        [	        US9U l        U R                  5         g )N)r   )r   rW   r  r   r-   headr   r  s     r9   rW   "SLANetForTableRecognition.__init__  s2     &f5!0	r;   r   rb   r   c                     U R                   " U40 UD6nU R                  " UR                  40 UD6n[        UR                  UR                  UR                  UR
                  S9$ )N)r   rx   rO   rP   )r   r%  r   rM   rx   r   )r3   r   rb   r  head_outputss        r9   ry   !SLANetForTableRecognition.forward  sa    
 --77yy!:!:EfE.*<<!//+99(33	
 	
r;   )r   r%  )r=   r>   r?   r@   _keys_to_ignore_on_load_missingr   rW   r   r   rG   rR   r   r   r  rM   ry   rI   rJ   rK   s   @r9   r"  r"    sk     (=&=#|  
!--
9?@R9S
	u  	!$C	C
  
r;   r"  )r"  r   r-   r  )4r%   dataclassesr   rG   torch.nnr"   torch.nn.functional
functionalrj   r    r   r'   activationsr   r   backbone_utilsr	   r
   modeling_layersr   modeling_outputsr   r   modeling_utilsr   processing_utilsr   utilsr   r   r   utils.genericr   utils.output_capturingr   configuration_slanetr   r   rM   ModulerT   r|   r-   r   r   r   r   r   r  r"  __all__r<   r;   r9   <module>r<     s1  ,  !      & * H 9 O - & I I 7 5 . AO  AF 
	5&D 	5  	5+RYY +B		 1f) 1fhbii <&(B &Rryy 8%RYY %P]299 ]@
* 
* 
 5 

2 dr;   