
    ^jH                        d dl Z d dlmZ d dlZd dlmZ d dlmc mZ ddl	m
Z ddlmZmZ ddlmZmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZmZmZ ddlm Z  ddl!m"Z" ddl#m$Z$  G d de      Z%ee G d de                    Z& G d dejN                        Z( G d dejN                        Z) G d de%      Z* G d dejN                        Z+ G d de      Z, G d dejN                        Z- G d  d!ejN                        Z. G d" d#ejN                        Z/ G d$ d%e%      Z0 ed&'       G d( d)e%             Z1g d*Z2y)+    N)	dataclass   )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                   f     e Zd ZU eed<   dZdZdZdZg Z	 e
j                          fd       Z xZS )SLANetPreTrainedModelconfigbackbonepixel_values)imageTc                    t         |   |       t        |t        j                        r|j
                  dkD  r"dt        j                  |j
                        z  nd}t        j                  |j                  | |       t        j                  |j                  | |       |j                  "t        j                  |j                  | |       |j                  "t        j                  |j                  | |       t        |t              rdt        j                  | j                  j
                  dz        z  }|j                   fD ]  }|j#                         D ]n  }t        |t        j$                        st        j                  |j&                  | |       |j(                  Mt        j                  |j(                  | |       p  yy)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        u/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/slanet/modeling_slanet.pyr   z#SLANetPreTrainedModel._init_weights2   sf    	f% fbjj)9?9K9Ka9O#		&"4"455UVCMM&**SD#6MM&**SD#6~~)fnnsdC8~~)fnnsdC8 fm,		$++"9"9C"?@@C$88: A	&//1 AE!%3ellSD#> ::1 MM%**sdC@	AA -    )__name__
__module____qualname__r   __annotations__base_model_prefixmain_input_nameinput_modalitiessupports_gradient_checkpointing_keep_in_fp32_modules_stricttorchno_gradr   __classcell__r6   s   @r7   r   r   *   sB    "$O!&*##% U]]_A Ar8   r   c                   b    e Zd ZU dZdZej                  dz  ed<   dZej                  dz  ed<   y)SLANetForTableRecognitionOutputak  
    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_attentions)	r9   r:   r;   __doc__rH   rB   FloatTensorr<   rI    r8   r7   rG   rG   M   s4     48))D0704OU&&-4r8   rG   c            	       x     e Zd Z fdZdej
                  dej
                  dej
                  dee   fdZ xZ	S )SLANetAttentionGRUCellc                    t         |           t        j                  ||d      | _        t        j                  ||      | _        t        j                  |dd      | _        t        j                  ||z   |      | _        y )NF)r0   r   )	r   __init__r    r.   input_to_hiddenhidden_to_hiddenscorer!   rnn)r1   
input_sizer"   num_embeddingsr6   s       r7   rP   zSLANetAttentionGRUCell.__init__\   sa    !yy[uM "		+{ CYY{AE:
::j>9;Gr8   prev_hiddenbatch_hiddenchar_onehotskwargsc                    | j                  |      }| j                  |      j                  d      }||z   }t        j                  |      }| j                  |      }t        j                  |dt        j                        j                  |j                        }|j                  dd      }t        j                  ||      j                  d      }	t        j                  |	|gd      }
| j                  |
|      }||fS )Nr   dimdtype   )rQ   rR   	unsqueezerB   tanhrS   Fsoftmaxfloat32tor^   	transposematmulsqueezecatrT   )r1   rW   rX   rY   rZ   batch_hidden_projprev_hidden_projattention_scoresattn_weightscontextconcat_contexthidden_statess               r7   forwardzSLANetAttentionGRUCell.forwarde   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>=l**r8   )
r9   r:   r;   rP   rB   rK   r   r   rq   rD   rE   s   @r7   rN   rN   [   sL    H+&&+ ''+ ''	+
 +,+r8   rN   c                   &     e Zd Zd fd	Zd Z xZS )	SLANetMLPc                     t         |           t        j                  ||      | _        t        j                  ||      | _        |t        j                         | _        y t        |          | _        y N)	r   rP   r    r.   fc1fc2Identityr   act_fn)r1   r"   out_channels
activationr6   s       r7   rP   zSLANetMLP.__init__}   sR    99[+699[,7'1'9bkkmwz?R?Tr8   c                 l    | j                  |      }| j                  |      }| j                  |      }|S ru   )rv   rw   ry   r1   rp   s     r7   rq   zSLANetMLP.forward   s2    //M2r8   ru   )r9   r:   r;   rP   rq   rD   rE   s   @r7   rs   rs   |   s    Ur8   rs   c                        e Zd ZdeiZ	 d	dedz  f fdZeee		 d	de
j                  de
j                  dz  dee   fd                     Z xZS )
r+   
attentionsNr   c                     t         |   |       t        |j                  |j                  |j
                        | _        t        |j                  |j
                        | _        | j                          y ru   )
r   rP   rN   post_conv_out_channelsr"   rz   structure_attention_cellrs   r,   	post_init)r1   r   rZ   r6   s      r7   rP   zSLANetSLAHead.__init__   s_    
 	 (>))6+=+=v?R?R)
% $-V-?-?ATAT#U r8   rp   targetsrZ   c                 6   t        j                  |j                  d   | j                  j                  ft         j
                  |j                        }t        j                  |j                  d   gt         j                  |j                        }g }g }t        | j                  j                  dz         D ]  }t        j                  || j                  j                        j                         }	| j                  ||j                         |	      \  }}| j                  |      }
|
j!                  d      }|j#                  |
       |j#                  |       t        j$                  |d      j'                  | j                  j                  dz
        j)                  d      j+                         s n t        j,                  t        j$                  |d      dt         j
                        j/                  |j0                        }t3        ||      S )	Nr   )r^   device)sizer^   r   r   r]   r\   last_hidden_staterp   )rB   zerosshaper   r"   rd   r   longrangemax_text_lengthrb   one_hotrz   floatr   r,   argmaxappendstackeqanyallrc   re   r^   r   )r1   rp   r   rZ   featurespredicted_charsstructure_preds_liststructure_ids_list_embedding_featurestructure_stepstructure_predss               r7   rq   zSLANetSLAHead.forward   s    ;;  #T[[%<%<=U]][h[o[o
  ++M,?,?,B+C5::^k^r^rs!t{{22Q67 		A !		/4;;;S;S T Z Z \77-BUBUBWYjkKHa!55h?N,333:O ''7%%o6{{-15889Q9QTU9UVZZ[]^bbd		 ))EKK0D!$LRT\a\i\ijmm
 Pdeer8   ru   )r9   r:   r;   rN   _can_record_outputsdictrP   r   r   r   rB   rK   Tensorr   r   rq   rD   rE   s   @r7   r+   r+      s    , #t    (,f((f $f +,	f !   fr8   r+   c                        e Zd Z	 	 	 	 	 	 ddedededededeeeef   z  dedef fd	Zd
ej                  dej                  fdZ
 xZS )SLANetConvLayerin_channelsrz   kernel_sizestrider0   dilationgroupsr{   c	           
          t         	|           t        j                  |||||dz  |||      | _        t        j
                  |      | _        |t        |   | _	        y t        j                         | _	        y )Nr_   )r   rz   r   r   paddingr0   r   r   )
r   rP   r    Conv2dconvolutionBatchNorm2dnormalizationr   rx   r{   )
r1   r   rz   r   r   r0   r   r   r{   r6   s
            r7   rP   zSLANetConvLayer.__init__   sn     	99#%#1$	
  ^^L90:0F&,BKKMr8   rp   returnc                 l    | j                  |      }| j                  |      }| j                  |      }|S ru   )r   r   r{   r}   s     r7   rq   zSLANetConvLayer.forward   s6    ((7**=96r8   )r   r   Fr   r   	hardswish)r9   r:   r;   intbooltuplestrrP   rB   r   rq   rD   rE   s   @r7   r   r      s    
 *+%ZZ Z 	Z
 Z Z c3h'Z Z Z2U\\ ell r8   r   c                   (     e Zd ZdZ fdZd Z xZS )!SLANetDepthwiseSeparableConvLayerz
    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         |           t        ||||||j                        | _        t        j                         | _        t        |d|d|j                        | _        y )N)r   rz   r   r   r   r{   r   )r   r   rz   r   r{   )	r   rP   r   
hidden_actdepthwise_convolutionr    rx   squeeze_excitation_modulepointwise_convolution)r1   r   rz   r   r   r   r6   s         r7   rP   z*SLANetDepthwiseSeparableConvLayer.__init__   sg     	%4#$#((&
" *,&%4#%((&
"r8   c                 l    | j                  |      }| j                  |      }| j                  |      }|S ru   )r   r   r   )r1   hidden_states     r7   rq   z)SLANetDepthwiseSeparableConvLayer.forward   s8    11,?55lC11,?r8   )r9   r:   r;   rJ   rP   rq   rD   rE   s   @r7   r   r      s    
4r8   r   c                   V     e Zd Z fdZdej
                  dej
                  fdZ xZS )SLANetBottleneckc                 t    t         |           t        ||d|      | _        t	        |||d|      | _        y )Nr   r   rz   r   r{   )r   rz   r   r   r   )r   rP   r   conv1r   conv2)r1   r   rz   r   r{   r   r6   s         r7   rP   zSLANetBottleneck.__init__	  sC     	$#,AZd

 7$%#

r8   rp   r   c                 J    | j                  |      }| j                  |      }|S ru   )r   r   r}   s     r7   rq   zSLANetBottleneck.forward  s$    

=1

=1r8   )r9   r:   r;   rP   rB   rK   rq   rD   rE   s   @r7   r   r     s'    
(U%6%6 5;L;L r8   r   c                   d     e Zd ZdZ	 	 	 	 d fd	Zdej                  dej                  fdZ xZS )SLANetCSPLayerz
    Cross Stage Partial (CSP) network layer. Similar in structure to DFineCSPRepLayer, but with a different forward computation.
    c                 B   t         
|           t        ||z        }t        ||d|      | _        t        ||d|      | _        t        d|z  |d|      | _        t        j                  t        |      D 	cg c]  }	t        |||||       c}	      | _        y c c}	w )Nr   )r{   r_   )r   rP   r   r   r   r   conv3r    
ModuleListr   r   bottlenecks)r1   r   r   rz   r   	expansion
num_blocksr{   hidden_channelsr   r6   s             r7   rP   zSLANetCSPLayer.__init__)  s     	lY67$[/1Q[\
$[/1Q[\
$Q%8,V`a
== z* !/;PZ\bc
s   9Brp   r   c                     | j                  |      }| j                  |      }| j                  D ]
  } ||      } t        j                  ||fd      }| j                  |      }|S )Nr   r   )r   r   r   rB   ri   r   )r1   rp   residual
bottlenecks       r7   rq   zSLANetCSPLayer.forward?  sh    ::m,

=1** 	6J&}5M	6 		=(";C

=1r8   )r   g      ?r   r   	r9   r:   r;   rJ   rP   rB   rK   rq   rD   rE   s   @r7   r   r   $  s:     
,
U%6%6 
5;L;L 
r8   r   c                   Z     e Zd ZdZ fdZdej                  dej                  fdZ xZS )SLANetCSPPANz;
    CSP-PAN: Path Aggregation Network with CSP layers
    c                 L   t         	|           |j                  }|j                  }|j                  }|j
                  }t        j                  t        t        |            D cg c]  }t        ||   |d|       c}      | _        t        j                  dd      | _        t        j                  t        t        |      dz
  dd      D cg c]  }t        ||dz  ||||       c}      | _        t        j                  t        t        |      dz
        D cg c]  }t!        |||d|	       c}      | _        t        j                  t        t        |      dz
        D cg c]  }t        ||dz  ||||       c}      | _        y c c}w c c}w c c}w c c}w )
Nr   r   r_   nearest)scale_factormoder   r   )r   r   r{   )r   r   r   )r   rP   r   r   csp_kernel_sizecsp_num_blocksr    r   r   lenr   channel_projectorUpsampleupsampler   top_down_blocksr   downsamplesbottom_up_blocks)
r1   r   in_channel_listrz   r{   r   r   ir   r6   s
            r7   rP   zSLANetCSPPAN.__init__Q  s   
 	44&&
,,..!#
 s?34	    / 2[\is"
 C!}} s?3a7B?
   1$  +-)
 
 == s?3a78	  2   +!	
 !# s?3a78
   1$  +-)
!
K
	
s   %FFF*F!rp   r   c                    g }t        t        | j                              D ])  }|j                   | j                  |   ||                + |d   g}t	        | j
                  t        |d d             D ]_  \  }}|d   }t        j                  ||j                  dd  d      } |t        j                  ||gd            }	|j                  |	       a t        t        |            }
|
d   }t	        | j                  | j                  |
dd        D ]-  \  }}} ||      } |t        j                  ||gd            }/ |j                  d      j!                  dd      }|S )	Nr   r   )r   r   r   r   r   r_   )r   r   r   r   zipr   reversedrb   interpolater   rB   ri   listr   r   flattenrf   )r1   rp   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                  r7   rq   zSLANetCSPPAN.forward  s   T3345 	WC%%&Ad&<&<S&A-PSBT&UV	W 03414T5I5I8TfgjhjTkKl1m 	4-N-!22!6 !"&,,RS1!
 +5996GIZ5[ab+cdM$$]3	4  ): ;<)!,EHd335Eab5IF
 	jAo/A #3>"B,UYY8KM_7`fg-hiN		j '..q1;;AqAr8   r   rE   s   @r7   r   r   L  s-    =
~U%6%6 5;L;L r8   r   c            	            e Zd Zdef fdZeedej                  de	e
   deej                     ez  fd              Z xZS )SLANetBackboner   c                     t         |   |       t        |      | _        t	        || j                  j
                  dd        | _        | j                          y )Nr_   )r   rP   r	   vision_backboner   num_featurespost_csp_panr   r1   r   r6   s     r7   rP   zSLANetBackbone.__init__  sK     ,V4(1E1E1R1RSTSU1VWr8   rp   rZ   r   c                      | j                   |fi |}| j                  |j                        }t        ||j                        S )Nr   )r   r   feature_mapsr   rp   )r1   rp   rZ   outputss       r7   rq   zSLANetBackbone.forward  sJ    
 '$&&}??))'*>*>?-+!//
 	
r8   )r9   r:   r;   r   rP   r   r   rB   rK   r   r   r   r   rq   rD   rE   s   @r7   r   r     s`    |  
"..
:@AS:T
	u  	!$B	B
  
r8   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            	            e Zd ZdgZdef fdZeedej                  de
e   deej                     ez  fd              Z xZS )SLANetForTableRecognitionnum_batches_trackedr   c                     t         |   |       t        |      | _        t	        |      | _        | j                          y )N)r   )r   rP   r   r   r+   headr   r   s     r7   rP   z"SLANetForTableRecognition.__init__  s2     &f5!0	r8   r   rZ   r   c                      | j                   |fi |} | j                  |j                  fi |}t        |j                  |j                  |j                  |j
                        S )N)r   rp   rH   rI   )r   r	  r   rG   rp   r   )r1   r   rZ   r  head_outputss        r7   rq   z!SLANetForTableRecognition.forward  se    
  $--77 tyy!:!:EfE.*<<!//+99(33	
 	
r8   )r9   r:   r;   _keys_to_ignore_on_load_missingr   rP   r   r   rB   rK   r   r   r   rG   rq   rD   rE   s   @r7   r  r    sk     (=&=#|  
!--
9?@R9S
	u  	!$C	C
  
r8   r  )r  r   r+   r   )3r#   dataclassesr   rB   torch.nnr    torch.nn.functional
functionalrb    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   rG   ModulerN   rs   r+   r   r   r   r   r   r   r  __all__rL   r8   r7   <module>r     s/  ,  !     & * H 9 O - & I I 7 5 . AO  AF 
	5&D 	5  	5+RYY +B		 1f) 1fhbii B&(B &Rryy 8%RYY %P]299 ]@
* 
* 
 5 

2 dr8   