
    Z j4                     R   S SK r S SKJr  S SK Jr  SSKJr  SSKJr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\R:                  5      r " S S\R:                  5      r " S S\R:                  5      r  " S S\R:                  5      r! " S S\
5      r" " S S\R:                  5      r#\ " S S\5      5       r$ " S S\$5      r%\" SS 9 " S! S"\\$5      5       r& " S# S$\R:                  5      r'\" S%S 9 " S& S'\$5      5       r(/ S(Qr)g))    N)Tensor   )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                   x   ^  \ 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\	S\	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             y/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/transformers/models/uvdoc/modeling_uvdoc.pyr#   UVDocConvLayer.__init__)   si     	99#%	
  ^^L90:0F&,BKKM    inputreturnc                 l    U R                  U5      nU R                  U5      nU R                  U5      nU$ N)r&   r(   r    )r*   r/   hidden_states      r,   forwardUVDocConvLayer.forwardD   s6    ''.)),7|4r.   )r    r&   r(   )r   r   r   zerosFr   relu)__name__
__module____qualname____firstlineno____doc__intstrboolr#   r   r4   __static_attributes____classcell__r+   s   @r,   r   r   &   s    F # ZZ Z 	Z
 Z Z Z Z Z Z Z6V   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$ )UVDocResidualBlockK   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   rF   r    r+   s
            r,   r#   UVDocResidualBlock.__init__N   s     	  ')'#q(  	 )#%#
 )$%#	
 -7,BfZ(r.   hidden_statesr0   c                     U R                  U5      nU R                  U5      nU R                  U5      nX-   nU R                  U5      nU$ r2   )rI   rJ   rK   rL   )r*   rN   residuals      r,   r4   UVDocResidualBlock.forward   sH    >>-066%0M2r.   )rL   rI   rK   rJ   )r   r   r   Fr7   )r8   r9   r:   r;   r<   r=   r?   r>   r#   torchr   r4   r@   rA   rB   s   @r,   rD   rD   K   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.   rD   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 )NrH   r   )r   r   r   r   r   rF   r   )	r"   r#   resnet_configsr$   
ModuleListlayersappendrD   r   )	r*   configstage_indexstagesr   r   r   rF   r+   s	           r,   r#   UVDocResNetStage.__init__   s|    &&{3mmB'?E;KxKK" +!- *1$qL%) & 2 2
 @Fr.   rN   r0   c                 <    U R                    H  nU" U5      nM     U$ r2   rY   )r*   rN   layers      r,   r4   UVDocResNetStage.forward   s     [[E!-0M !r.   r`   r8   r9   r:   r;   r<   r#   rR   r   r4   r@   rA   rB   s   @r,   rT   rT      s+    =$U\\ ell  r.   rT   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   rH   )r   r   r   r   r   )r"   r#   r$   rX   resnet_headrangelenrZ   r   r   resnet_downrW   rT   )r*   r[   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.   rN   r0   c                 r    U R                    H  nU" U5      nM     U R                   H  nU" U5      nM     U$ r2   )rh   rk   )r*   rN   headrm   s       r,   r4   UVDocResNet.forward   s<    $$D /M %%%E!-0M &r.   )rk   rh   rc   rB   s   @r,   re   re      s+    .+&U\\ ell  r.   re   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$   rX   blocksstage_configsrZ   r   )r*   r[   bridge_indexbridger   r   r+   s         r,   r#   UVDocBridgeBlock.__init__   sU    mmB'%%l3%+!KKK~kPXlm &,r.   rN   kwargsr0   c                 <    U R                    H  nU" U5      nM     U$ r2   rv   )r*   rN   r{   blocks       r,   r4   UVDocBridgeBlock.forward   s"    
 [[E!-0M !r.   r}   )r8   r9   r:   r;   r<   r#   rR   r   r   r   r4   r@   rA   rB   s   @r,   rs   rs      s@    Nn|| +, 
	 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
$ )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   rH   )r   r   r   r   r   r   r    )r   r   r   r   r   r   )r"   r#   r   out_point_positions2Dr   r   
hidden_actrI   r$   r%   conv_upr*   r[   r+   s     r,   r#   UVDocPointPositions2D.__init__   s    '44Q7:55a8;**&&!+,,((
 yy44Q7:55a8;**&&!+,,
r.   rN   r0   c                 J    U R                  U5      nU R                  U5      nU$ r2   rI   r   )r*   rN   s     r,   r4   UVDocPointPositions2D.forward   s$    }5]3r.   r   rc   rB   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.
r[   uvdocpixel_values)imageTrN   c                    > [         TU ]  U5         [        U[        R                  5      (       a  UR                  5         g g r2   )r"   _init_weights
isinstancer$   PReLUreset_parameters)r*   moduler+   s     r,   r   "UVDocPreTrainedModel._init_weights  s5    f%%fbhh''##% (r.    )r8   r9   r:   r;   r<   r   __annotations__base_model_prefixmain_input_nameinput_modalities_can_compile_fullgraphsupports_gradient_checkpointingrs   _can_record_outputsrR   no_gradr   r@   rA   rB   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 r2   )r"   r#   r$   rX   ry   ri   rj   rw   rZ   rs   	post_init)r*   r[   rx   r+   s      r,   r#   UVDocBridge.__init__  s\     mmB'!#f&:&:";<LKK/EF =r.   rN   r{   r0   c                 J    U R                    H  nU" U5      nM     [        WS9$ )N)last_hidden_state)ry   r
   )r*   rN   r{   ra   features        r,   r4   UVDocBridge.forward  s'     [[EM*G !-HHr.   )ry   )r8   r9   r:   r;   r#   r   r   rR   r   r   r   r4   r@   rA   rB   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backboner[   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#   rh   rw   rZ   num_featuresre   resnetr   ry   r   )r*   r[   r   rm   r+   s       r,   r#   UVDocBackbone.__init__+  sv     **2.r23))Ea, *(!&)!&)r.   r   r{   r0   c                    SUS'   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$ )NToutput_hidden_statesr   )feature_mapsrN   )r   ry   	enumeratestage_namesout_featuresrN   r	   )r*   r   r{   rN   outputsr   idxrm   s           r,   r4   UVDocBackbone.forward8  s     *.%&L1++m6v6#D$4$45JC)))!6!6s!; == 6 %!//
 	
r.   )ry   r   r   )r8   r9   r:   r;   has_attentionsr   r   r#   r   r   r   rR   FloatTensorr   r   r	   r4   r@   rA   rB   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$ )	UVDocHeadiO  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#   rj   backbone_configrw   num_bridge_layersr   bridge_connectorr   r   r   s     r,   r#   UVDocHead.__init__P  sv    !$V%;%;%I%I!J .//2T5K5KK003!
 &;6%B"r.   rN   r{   r0   c                 J    U R                  U5      nU R                  U5      nU$ r2   )r   r   )r*   rN   r{   s      r,   r4   UVDocHead.forward_  s*    
 --m<22=Ar.   )r   r   r   )r8   r9   r:   r;   r#   rR   r   r   r   r4   r@   rA   rB   s   @r,   r   r   O  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$ )	
UVDocModelii  r[   c                    > [         TU ]  U5        [        UR                  5      U l        [        U5      U l        U R                  5         g r2   )r"   r#   r   r   r   r   rp   r   r   s     r,   r#   UVDocModel.__init__p  s8     %f&<&<=f%	r.   r   r{   r0   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   rN   )r   rR   catr   rp   r
   rN   )r*   r   r{   backbone_outputsfused_outputsr   s         r,   r4   UVDocModel.forwardw  s\      ==@@		"2"?"?QG IIm>v>-/*88
 	
r.   )r   rp   )r8   r9   r:   r;   r   r#   r   r   rR   r   r   r   tupler
   r4   r@   rA   rB   s   @r,   r   r   i  sd    {  
''
 +,
 
u  	!$B	B	
  
r.   r   )r   r   r   r   )*rR   torch.nnr$   r   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   rD   rT   re   rs   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 %

%
P		 4 
% 

2 Qr.   