
    3j4                     F   S SK r S SKJr  SSK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Jr   " S S\R8                  5      r " S S\R8                  5      r " S S\R8                  5      r " S S\R8                  5      r  " S S\	5      r! " S S\R8                  5      r"\ " S S\5      5       r# " S S\#5      r$\" SS9 " S  S!\\#5      5       r% " S" S#\R8                  5      r&\" S$S9 " S% S&\#5      5       r'/ S'Qr(g)(    N   )ACT2FN)BackboneMixinfilter_output_hidden_states)GradientCheckpointingLayer)BackboneOutputBaseModelOutputWithNoAttention)PreTrainedModel)Unpack)TransformersKwargsauto_docstringcan_return_tuple)merge_with_config_defaults)capture_outputs   )UVDocBackboneConfigUVDocConfigc                      ^  \ rS rSrSr       SS\S\S\S\S\S\S	\S
\S\4U 4S jjjrS\	R                  S\	R                  4S jrSrU =r$ )UVDocConvLayer%   z<Convolutional layer with batch normalization and activation.in_channelsout_channelskernel_sizestridepaddingpadding_modebiasdilation
activationc
                    > [         T
U ]  5         [        R                  " UUUUUUUUS9U l        [        R
                  " U5      U l        U	b  [        U	   U l	        g [        R                  " 5       U l	        g )N)r   r   r   r   r   r   )
super__init__nnConv2dconvolutionBatchNorm2dnormalizationr   Identityr   )selfr   r   r   r   r   r   r   r   r   	__class__s             b/home/wildlama/miniconda3/lib/python3.13/site-packages/transformers/models/uvdoc/modeling_uvdoc.pyr"   UVDocConvLayer.__init__(   si     	99#%	
  ^^L90:0F&,BKKM    hidden_statesreturnc                 l    U R                  U5      nU R                  U5      nU R                  U5      nU$ N)r%   r'   r   r)   r.   s     r+   forwardUVDocConvLayer.forwardC   s6    ((7**=96r-   )r   r%   r'   )r   r   r   zerosFr   relu)__name__
__module____qualname____firstlineno____doc__intstrboolr"   torchTensorr3   __static_attributes____classcell__r*   s   @r+   r   r   %   s    F # ZZ Z 	Z
 Z Z Z Z Z Z Z6U\\ ell  r-   r   c                      ^  \ rS rSrSr     SS\S\S\S\S\S\S	\S
\4U 4S jjjrS\	R                  S\	R                  4S jrSrU =r$ )UVDocResidualBlockJ   z*Base residual block with dilation support.r   r   r   r   r   r   
downsampler   c	                 2  > [         T	U ]  5         U(       a  [        UUUUUS-  SS S9O[        R                  " 5       U l        [        UUUUUUSS9U l        [        UUUSUSUS S9U l        Ub  [        U   U l	        g [        R                  " 5       U l	        g )N   T)r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )
r!   r"   r   r#   r(   	conv_down
conv_start
conv_finalr   act_fn)
r)   r   r   r   r   r   r   rG   r   r*   s
            r+   r"   UVDocResidualBlock.__init__M   s     	  ')'#q(  	 )#%#
 )$%#	
 -7,BfZ(r-   r.   r/   c                     U R                  U5      nU R                  U5      nU R                  U5      nX-   nU R                  U5      nU$ r1   )rJ   rK   rL   rM   )r)   r.   residuals      r+   r3   UVDocResidualBlock.forward   sH    >>-066%0M2r-   )rM   rJ   rL   rK   )r   r   r   Fr6   )r7   r8   r9   r:   r;   r<   r>   r=   r"   r?   r@   r3   rA   rB   rC   s   @r+   rE   rE   J   s    4   0V0V 0V 	0V
 0V 0V 0V 0V 0V 0VdU\\ ell  r-   rE   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
$ )UVDocResNetStage   z3A ResNet stage containing multiple residual blocks.c                 
  > [         TU ]  5         UR                  U   n[        R                  " / 5      U l        U HD  u  pEpgU R
                  R                  [        UUU(       a  SOSUS-  UUUR                  S95        MF     g )NrI   r   )r   r   r   r   r   rG   r   )	r!   r"   resnet_configsr#   
ModuleListlayersappendrE   r   )	r)   configstage_indexstagesr   r   r   rG   r*   s	           r+   r"   UVDocResNetStage.__init__   s|    &&{3mmB'?E;KxKK" +!- *1$qL%) & 2 2
 @Fr-   r.   r/   c                 <    U R                    H  nU" U5      nM     U$ r1   rX   )r)   r.   layers      r+   r3   UVDocResNetStage.forward   s     [[E!-0M !r-   r_   r7   r8   r9   r:   r;   r"   r?   r@   r3   rA   rB   rC   s   @r+   rS   rS      s+    =$U\\ ell  r-   rS   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
$ )UVDocResNet   z$Initial resnet_head and resnet_down.c                 (  > [         TU ]  5         [        R                  " / 5      U l        [        [        UR                  5      5       H`  nU R                  R                  [        UR                  U   S   UR                  U   S   UR                  SUR                  S-  S95        Mb     [        R                  " / 5      U l
        [        [        UR                  5      5       H)  n[        X5      nU R                  R                  U5        M+     g )Nr   r   rI   )r   r   r   r   r   )r!   r"   r#   rW   resnet_headrangelenrY   r   r   resnet_downrV   rS   )r)   rZ   ir[   stager*   s        r+   r"   UVDocResNet.__init__   s    ==,s6--./A## & 2 21 5a 8!'!3!3A!6q!9 & 2 2"..!3 0 ==, V%:%:!;<K$V9E##E* =r-   r.   r/   c                 r    U R                    H  nU" U5      nM     U R                   H  nU" U5      nM     U$ r1   )rg   rj   )r)   r.   headrl   s       r+   r3   UVDocResNet.forward   s<    $$D /M %%%E!-0M &r-   )rj   rg   rb   rC   s   @r+   rd   rd      s+    .+&U\\ ell  r-   rd   c                   p   ^  \ rS rSrSrU 4S jrS\R                  S\\	   S\R                  4S jr
SrU =r$ )	UVDocBridgeBlock   zDBridge module with dilated convolutions for long-range dependencies.c           
         > [         TU ]  5         [        R                  " / 5      U l        UR
                  U   nU H(  u  pEU R                  R                  [        XDXUS95        M*     g )N)r   r   )r!   r"   r#   rW   blocksstage_configsrY   r   )r)   rZ   bridge_indexbridger   r   r*   s         r+   r"   UVDocBridgeBlock.__init__   sU    mmB'%%l3%+!KKK~kPXlm &,r-   r.   kwargsr/   c                 <    U R                    H  nU" U5      nM     U$ r1   ru   )r)   r.   rz   blocks       r+   r3   UVDocBridgeBlock.forward   s"    
 [[E!-0M !r-   r|   )r7   r8   r9   r:   r;   r"   r?   r@   r   r   r3   rA   rB   rC   s   @r+   rr   rr      s@    Nn|| +, 
	 r-   rr   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
$ )UVDocPointPositions2D   zDModule for predicting 2D point positions for document rectification.c           
        > [         TU ]  5         [        UR                  S   S   UR                  S   S   UR                  SUR                  S-  UR
                  UR                  S9U l        [        R                  " UR                  S   S   UR                  S   S   UR                  SUR                  S-  UR
                  S9U l
        g )Nr   r   rI   )r   r   r   r   r   r   r   )r   r   r   r   r   r   )r!   r"   r   out_point_positions2Dr   r   
hidden_actrJ   r#   r$   conv_upr)   rZ   r*   s     r+   r"   UVDocPointPositions2D.__init__   s    '44Q7:55a8;**&&!+,,((
 yy44Q7:55a8;**&&!+,,
r-   r.   r/   c                 J    U R                  U5      nU R                  U5      nU$ r1   rJ   r   r2   s     r+   r3   UVDocPointPositions2D.forward   s$    }5]3r-   r   rb   rC   s   @r+   r   r      s+    N
,U\\ ell  r-   r   c                   |   ^  \ rS rSr% Sr\\S'   SrSrSr	Sr
SrS\0r\R                  " 5       U 4S	 j5       rS
rU =r$ )UVDocPreTrainedModel   z
Base class for all PPOCRV5 Server Det pre-trained models. Handles model initialization,
configuration, and loading of pre-trained weights, following the Transformers library conventions.
rZ   uvdocpixel_values)imageTr.   c                    > [         TU ]  U5         [        U[        R                  5      (       a  UR                  5         g g r1   )r!   _init_weights
isinstancer#   PReLUreset_parameters)r)   moduler*   s     r+   r   "UVDocPreTrainedModel._init_weights  s5    f%%fbhh''##% (r-    )r7   r8   r9   r:   r;   r   __annotations__base_model_prefixmain_input_nameinput_modalities_can_compile_fullgraphsupports_gradient_checkpointingrr   _can_record_outputsr?   no_gradr   rA   rB   rC   s   @r+   r   r      sU    
 $O!!&*#) ]]_& &r-   r   c                      ^  \ rS rSrU 4S jr\\S\R                  S\	\
   S\R                  4S j5       5       rSrU =r$ )UVDocBridgei  c                   > [         TU ]  U5        [        R                  " / 5      U l        [        [        UR                  5      5       H'  nU R                  R                  [        X5      5        M)     U R                  5         g r1   )r!   r"   r#   rW   rx   rh   ri   rv   rY   rr   	post_init)r)   rZ   rw   r*   s      r+   r"   UVDocBridge.__init__  s\     mmB'!#f&:&:";<LKK/EF =r-   r.   rz   r/   c                 J    U R                    H  nU" U5      nM     [        WS9$ )N)last_hidden_state)rx   r	   )r)   r.   rz   r`   features        r+   r3   UVDocBridge.forward  s'     [[EM*G !-HHr-   )rx   )r7   r8   r9   r:   r"   r   r   r?   r@   r   r   r3   rA   rB   rC   s   @r+   r   r     sS      I||I +,I 
	I   Ir-   r   z6
    UVDoc backbone model for feature extraction.
    )custom_introc            	          ^  \ rS rSrSrSrS\4U 4S jjr\\	\
S\R                  S\\   S\4S	 j5       5       5       rS
rU =r$ )UVDocBackbonei!  FbackbonerZ   c                 
  > [         TU ]  U5        UR                  S   S   /nUR                   H  nUR	                  US   S   5        M     X l        [        U5      U l        [        U5      U l	        U R                  5         g )Nr   r   )r!   r"   rg   rv   rY   num_featuresrd   resnetr   rx   r   )r)   rZ   r   rl   r*   s       r+   r"   UVDocBackbone.__init__*  sv     **2.r23))Ea, *(!&)!&)r-   r   rz   r/   c                     U R                  U5      nU R                  " U40 UD6nSn[        U R                  5       H(  u  pgXpR                  ;   d  M  XTR
                  U   4-  nM*     [        UUR
                  S9$ )Nr   )feature_mapsr.   )r   rx   	enumeratestage_namesout_featuresr.   r   )r)   r   rz   r.   outputsr   idxrl   s           r+   r3   UVDocBackbone.forward7  s~     L1++m6v6#D$4$45JC)))!6!6s!; == 6 %!//
 	
r-   )rx   r   r   )r7   r8   r9   r:   has_attentionsr   r   r"   r   r   r   r?   FloatTensorr   r   r   r3   rA   rB   rC   s   @r+   r   r   !  si     N"2   
''
 +,
 
	
  ! 
r-   r   c                      ^  \ rS rSrU 4S jrS\R                  S\\   S\R
                  R                  4S jr	Sr
U =r$ )	UVDocHeadiM  c           	         > [         TU ]  5         [        UR                  R                  5      U l        [        UR                  S   U R
                  -  UR                  S   SSSSS9U l        [        U5      U l	        g )Nr   r   )r   r   r   r   r   r   )
r!   r"   ri   backbone_configrv   num_bridge_layersr   bridge_connectorr   r   r   s     r+   r"   UVDocHead.__init__N  sv    !$V%;%;%I%I!J .//2T5K5KK003!
 &;6%B"r-   r.   rz   r/   c                 J    U R                  U5      nU R                  U5      nU$ r1   )r   r   )r)   r.   rz   s      r+   r3   UVDocHead.forward]  s*    
 --m<22=Ar-   )r   r   r   )r7   r8   r9   r:   r"   r?   r@   r   r   r3   rA   rB   rC   s   @r+   r   r   M  sC    C|| +, 
			 r-   r   z
    The model takes raw document images (pixel values) as input, processes them through the UVDoc backbone to predict spatial transformation parameters,
    and outputs the rectified (corrected) document image tensor.
    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$ )	
UVDocModelig  rZ   c                    > [         TU ]  U5        [        UR                  5      U l        [        U5      U l        U R                  5         g r1   )r!   r"   r   r   r   r   ro   r   r   s     r+   r"   UVDocModel.__init__n  s8     %f&<&<=f%	r-   r   rz   r/   c                     U R                   " U40 UD6n[        R                  " UR                  SS9nU R                  " U40 UD6n[        UUR                  S9$ )Nr   )dim)r   r.   )r   r?   catr   ro   r	   r.   )r)   r   rz   backbone_outputsfused_outputsr   s         r+   r3   UVDocModel.forwardu  s\      ==@@		"2"?"?QG IIm>v>-/*88
 	
r-   )r   ro   )r7   r8   r9   r:   r   r"   r   r   r?   r   r   r   tupler	   r3   rA   rB   rC   s   @r+   r   r   g  sd    {  
''
 +,
 
u  	!$B	B	
  
r-   r   )r   r   r   r   ))r?   torch.nnr#   activationsr   backbone_utilsr   r   modeling_layersr   modeling_outputsr   r	   modeling_utilsr
   processing_utilsr   utilsr   r   r   utils.genericr   utils.output_capturingr   configuration_uvdocr   r   Moduler   rE   rS   rd   rr   r   r   r   r   r   r   __all__r   r-   r+   <module>r      s  ,   ! H 9 N - & I I 7 5 A"RYY "J; ;|ryy 6")) <1 (BII > &? & &0I& I( 
$
M#7 $

$
N		 4 
% 

2 Qr-   