Ë
    ÜÓ^j�4  ã                   óR  — d dl Z d dlmZ ddl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mZ  G d„ dej8                  «      Z G d„ dej8                  «      Z G d„ dej8                  «      Z G d„ dej8                  «      Z  G d„ de	«      Z! G d„ dej8                  «      Z"e G d„ de«      «       Z# G d„ de#«      Z$ ed¬«       G d „ d!ee#«      «       Z% G d"„ d#ej8                  «      Z& ed$¬«       G d%„ d&e#«      «       Z'g d'¢Z(y)(é    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                   ó�   ‡ — e Zd ZdZ	 	 	 	 	 	 	 ddededededededed	ed
efˆ fd„Zdej                  dej                  fd„Z
ˆ xZS )ÚUVDocConvLayerz<Convolutional layer with batch normalization and activation.Úin_channelsÚout_channelsÚkernel_sizeÚstrideÚpaddingÚpadding_modeÚbiasÚdilationÚ
activationc
           
      óî   •— t         ‰
| �  «        t        j                  ||||||||¬«      | _        t        j
                  |«      | _        |	�t        |	   | _	        y t        j                  «       | _	        y )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             €ús/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/uvdoc/modeling_uvdoc.pyr!   zUVDocConvLayer.__init__(   si   ø€ ô 	‰ÑÔäŸ9™9ØØØØ#ØØØ%Øô	
ˆÔô  Ÿ^™^¨LÓ9ˆÔØ0:Ð0Fœ& Ñ,ˆ�ÌBÏKÉKËMˆ�ó    Úhidden_statesÚreturnc                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S ©N)r$   r&   r   ©r(   r,   s     r*   ÚforwardzUVDocConvLayer.forwardC   s6   € Ø×(Ñ(¨Ó7ˆØ×*Ñ*¨=Ó9ˆØŸ™¨Ó6ˆØÐr+   )r   r   r   ÚzerosFr   Úrelu)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintÚstrÚboolr!   ÚtorchÚTensorr1   Ú__classcell__©r)   s   @r*   r   r   %   sŸ   ø„ ÙFð ØØØ#ØØØ ñZàðZð ðZð ð	Zð
 ðZð ðZð ðZð ðZð ðZð õZð6 U§\¡\ð °e·l±l÷ r+   r   c                   óˆ   ‡ — e Zd ZdZ	 	 	 	 	 ddededededededed	efˆ fd
„Zdej                  dej                  fd„Z
ˆ xZS )ÚUVDocResidualBlockz*Base residual block with dilation support.r   r   r   r   r   r   Ú
downsampler   c	           
      ó4  •— t         ‰	| �  «        |rt        |||||dz  dd ¬«      nt        j                  «       | _        t        ||||||d¬«      | _        t        |||d|d|d ¬«      | _        |�t        |   | _	        y t        j                  «       | _	        y )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   rA   r   r)   s
            €r*   r!   zUVDocResidualBlock.__init__M   s³   ø€ ô 	‰ÑÔñ ô Ø'Ø)Ø'ØØ# qÑ(ØØõô —‘“ð 	Œô )Ø#Ø%Ø#ØØØØô
ˆŒô )Ø$Ø%Ø#ØØØØØô	
ˆŒð -7Ð,B”f˜ZÑ(ˆ�ÌÏÉËˆ�r+   r,   r-   c                 ó˜   — | j                  |«      }| j                  |«      }| j                  |«      }||z   }| j                  |«      }|S r/   )rD   rE   rF   rG   )r(   r,   Úresiduals      r*   r1   zUVDocResidualBlock.forward   sJ   € Ø—>‘> -Ó0ˆØŸ™¨Ó6ˆØŸ™¨Ó6ˆØ%¨Ñ0ˆØŸ™ MÓ2ˆØÐr+   )r   r   r   Fr3   )r4   r5   r6   r7   r8   r:   r9   r!   r;   r<   r1   r=   r>   s   @r*   r@   r@   J   s�   ø„ Ù4ð ØØØ Ø ñ0Vàð0Vð ð0Vð ð	0Vð
 ð0Vð ð0Vð ð0Vð ð0Vð õ0Vðd U§\¡\ð °e·l±l÷ r+   r@   c                   óZ   ‡ — e Zd ZdZˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚUVDocResNetStagez3A ResNet stage containing multiple residual blocks.c                 ó  •— t         ‰| �  «        |j                  |   }t        j                  g «      | _        |D ]C  \  }}}}| j
                  j                  t        |||rdnd|dz  |||j                  ¬«      «       ŒE y )NrC   r   )r   r   r   r   r   rA   r   )	r    r!   Úresnet_configsr"   Ú
ModuleListÚlayersÚappendr@   r   )	r(   ÚconfigÚstage_indexÚstagesr   r   r   rA   r)   s	           €r*   r!   zUVDocResNetStage.__init__‹   sƒ   ø€ Ü‰ÑÔà×&Ñ& {Ñ3ˆÜ—m‘m BÓ'ˆŒØ?Eò 	Ñ;ˆK˜ x°Ø�K‰K×ÑÜ"Ø +Ø!-Ù *™1°Ø$ q™LØ%Ø)Ø &× 2Ñ 2ôõ
ñ	r+   r,   r-   c                 ó8   — | j                   D ]
  } ||«      }Œ |S r/   )rO   )r(   r,   Úlayers      r*   r1   zUVDocResNetStage.forward�   s%   € Ø—[‘[ò 	1ˆEÙ! -Ó0‰Mð	1àÐr+   ©	r4   r5   r6   r7   r!   r;   r<   r1   r=   r>   s   @r*   rK   rK   ˆ   s&   ø„ Ù=ôð$ U§\¡\ð °e·l±l÷ r+   rK   c                   óZ   ‡ — e Zd ZdZˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚUVDocResNetz$Initial resnet_head and resnet_down.c                 ó$  •— t         ‰| �  «        t        j                  g «      | _        t        t        |j                  «      «      D ]b  }| j                  j                  t        |j                  |   d   |j                  |   d   |j                  d|j                  dz  ¬«      «       Œd t        j                  g «      | _
        t        t        |j                  «      «      D ])  }t        ||«      }| j                  j                  |«       Œ+ y )Nr   r   rC   )r   r   r   r   r   )r    r!   r"   rN   Úresnet_headÚrangeÚlenrP   r   r   Úresnet_downrM   rK   )r(   rQ   ÚirR   Ústager)   s        €r*   r!   zUVDocResNet.__init__¦   sì   ø€ Ü‰ÑÔÜŸ=™=¨Ó,ˆÔÜ”s˜6×-Ñ-Ó.Ó/ò 		ˆAØ×Ñ×#Ñ#ÜØ &× 2Ñ 2°1Ñ 5°aÑ 8Ø!'×!3Ñ!3°AÑ!6°qÑ!9Ø &× 2Ñ 2ØØ"×.Ñ.°!Ñ3ôõð		ô Ÿ=™=¨Ó,ˆÔÜ ¤ V×%:Ñ%:Ó!;Ó<ò 	+ˆKÜ$ V¨[Ó9ˆEØ×Ñ×#Ñ# EÕ*ñ	+r+   r,   r-   c                 ój   — | j                   D ]
  } ||«      }Œ | j                  D ]
  } ||«      }Œ |S r/   )rZ   r]   )r(   r,   Úheadr_   s       r*   r1   zUVDocResNet.forward¹   sF   € Ø×$Ñ$ò 	0ˆDÙ  Ó/‰Mð	0à×%Ñ%ò 	1ˆEÙ! -Ó0‰Mð	1àÐr+   rV   r>   s   @r*   rX   rX   £   s&   ø„ Ù.ô+ð& U§\¡\ð °e·l±l÷ r+   rX   c                   ód   ‡ — e Zd ZdZˆ fd„Zdej                  dee   dej                  fd„Z	ˆ xZ
S )ÚUVDocBridgeBlockzDBridge module with dilated convolutions for long-range dependencies.c           	      óØ   •— t         ‰| �  «        t        j                  g «      | _        |j
                  |   }|D ]-  \  }}| j                  j                  t        ||||¬«      «       Œ/ y )N)r   r   )r    r!   r"   rN   ÚblocksÚstage_configsrP   r   )r(   rQ   Úbridge_indexÚbridger   r   r)   s         €r*   r!   zUVDocBridgeBlock.__init__Ä   sc   ø€ Ü‰ÑÔÜ—m‘m BÓ'ˆŒØ×%Ñ% lÑ3ˆØ%+ò 	nÑ!ˆK˜Ø�K‰K×Ñœ~¨k¸;ÐPXÐckÔlÕmñ	nr+   r,   Úkwargsr-   c                 ó8   — | j                   D ]
  } ||«      }Œ |S r/   )re   )r(   r,   ri   Úblocks       r*   r1   zUVDocBridgeBlock.forwardË   s'   € ð
 —[‘[ò 	1ˆEÙ! -Ó0‰Mð	1àÐr+   )r4   r5   r6   r7   r!   r;   r<   r   r   r1   r=   r>   s   @r*   rc   rc   Á   s;   ø„ ÙNônðà—|‘|ðð Ð+Ñ,ðð 
�‰÷	r+   rc   c                   óZ   ‡ — e Zd ZdZˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚUVDocPointPositions2DzDModule for predicting 2D point positions for document rectification.c           	      ó¨  •— t         ‰| �  «        t        |j                  d   d   |j                  d   d   |j                  d|j                  dz  |j
                  |j                  ¬«      | _        t        j                  |j                  d   d   |j                  d   d   |j                  d|j                  dz  |j
                  ¬«      | _
        y )Nr   r   rC   )r   r   r   r   r   r   r   )r   r   r   r   r   r   )r    r!   r   Úout_point_positions2Dr   r   Ú
hidden_actrD   r"   r#   Úconv_up©r(   rQ   r)   s     €r*   r!   zUVDocPointPositions2D.__init__Ø   sÇ   ø€ Ü‰ÑÔä'Ø×4Ñ4°QÑ7¸Ñ:Ø×5Ñ5°aÑ8¸Ñ;Ø×*Ñ*ØØ×&Ñ&¨!Ñ+Ø×,Ñ,Ø×(Ñ(ô
ˆŒô —y‘yØ×4Ñ4°QÑ7¸Ñ:Ø×5Ñ5°aÑ8¸Ñ;Ø×*Ñ*ØØ×&Ñ&¨!Ñ+Ø×,Ñ,ô
ˆ�r+   r,   r-   c                 óJ   — | j                  |«      }| j                  |«      }|S r/   )rD   rq   r0   s     r*   r1   zUVDocPointPositions2D.forwardî   s$   € ØŸ™ }Ó5ˆØŸ™ ]Ó3ˆØÐr+   rV   r>   s   @r*   rm   rm   Õ   s&   ø„ ÙNô
ð, U§\¡\ð °e·l±l÷ r+   rm   c                   ór   ‡ — e Zd ZU dZeed<   dZdZdZdZ	dZ
deiZ ej                  «       ˆ fd„«       Zˆ xZS )	ÚUVDocPreTrainedModelzÈ
    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.
    rQ   ÚuvdocÚpixel_values)ÚimageTr,   c                 óz   •— t         ‰| �  |«       t        |t        j                  «      r|j                  «        yy)zInitialize the weights.N)r    Ú_init_weightsÚ
isinstancer"   ÚPReLUÚreset_parameters)r(   Úmoduler)   s     €r*   rz   z"UVDocPreTrainedModel._init_weights  s1   ø€ ô 	‰Ñ˜fÔ%Ü�fœbŸh™hÔ'Ø×#Ñ#Õ%ð (r+   )r4   r5   r6   r7   r   Ú__annotations__Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚ_can_compile_fullgraphÚsupports_gradient_checkpointingrc   Ú_can_record_outputsr;   Úno_gradrz   r=   r>   s   @r*   ru   ru   ô   sW   ø… ñð
 ÓØÐØ$€OØ!ÐØ!ÐØ&*Ð#àÐ)ðÐð €U‡]�]ƒ_ó&ó ô&r+   ru   c                   ót   ‡ — e Zd Zˆ fd„Zeedej                  dee	   dej                  fd„«       «       Z
ˆ xZS )ÚUVDocBridgec                 ó  •— t         ‰| �  |«       t        j                  g «      | _        t        t        |j                  «      «      D ]'  }| j                  j                  t        ||«      «       Œ) | j                  «        y r/   )r    r!   r"   rN   rh   r[   r\   rf   rP   rc   Ú	post_init)r(   rQ   rg   r)   s      €r*   r!   zUVDocBridge.__init__  se   ø€ Ü‰Ñ˜Ô Ü—m‘m BÓ'ˆŒÜ!¤# f×&:Ñ&:Ó";Ó<ò 	GˆLØ�K‰K×ÑÔ/°¸ÓEÕFð	Gà�‰Õr+   r,   ri   r-   c                 óL   — | j                   D ]
  } ||«      }Œ t        ¬«      S )N)Úlast_hidden_state)rh   r	   )r(   r,   ri   rU   Úfeatures        r*   r1   zUVDocBridge.forward  s,   € ð —[‘[ò 	+ˆEÙ˜MÓ*‰Gð	+ä-ÀÔHÐHr+   )r4   r5   r6   r!   r   r   r;   r<   r   r   r1   r=   r>   s   @r*   rˆ   rˆ     sS   ø„ ôð  ØðIà—|‘|ðIð Ð+Ñ,ðIð 
�‰ò	Ió ó  ôIr+   rˆ   z6
    UVDoc backbone model for feature extraction.
    )Úcustom_introc            	       óx   ‡ — e Zd ZdZdZdefˆ fd„Zeee	de
j                  dee   defd„«       «       «       Zˆ xZS )	ÚUVDocBackboneFÚbackbonerQ   c                 ó  •— t         ‰| �  |«       |j                  d   d   g}|j                  D ]  }|j	                  |d   d   «       Œ || _        t        |«      | _        t        |«      | _	        | j                  «        y )Néÿÿÿÿr   r   )r    r!   rZ   rf   rP   Únum_featuresrX   Úresnetrˆ   rh   rŠ   )r(   rQ   r”   r_   r)   s       €r*   r!   zUVDocBackbone.__init__*  s}   ø€ Ü‰Ñ˜Ô à×*Ñ*¨2Ñ.¨rÑ2Ð3ˆØ×)Ñ)ò 	-ˆEØ×Ñ  a¡¨¡Õ,ð	-à(ˆÔä! &Ó)ˆŒÜ! &Ó)ˆŒà�‰Õr+   rw   ri   r-   c                 óú   — | j                  |«      } | j                  |fi |¤Ž}d}t        | j                  «      D ]'  \  }}|| j                  v sŒ||j
                  |   fz  }Œ) t        ||j
                  ¬«      S )N© )Úfeature_mapsr,   )r•   rh   Ú	enumerateÚstage_namesÚout_featuresr,   r   )r(   rw   ri   r,   Úoutputsr˜   Úidxr_   s           r*   r1   zUVDocBackbone.forward7  s‹   € ð Ÿ™ LÓ1ˆØ�$—+‘+˜mÑ6¨vÑ6ˆàˆÜ# D×$4Ñ$4Ó5ò 	>‰JˆC�Ø˜×)Ñ)Ò)Ø ×!6Ñ!6°sÑ!;Ð =Ñ=‘ð	>ô Ø%Ø!×/Ñ/ô
ð 	
r+   )r4   r5   r6   Úhas_attentionsr€   r   r!   r   r   r   r;   ÚFloatTensorr   r   r   r1   r=   r>   s   @r*   r�   r�   !  si   ø„ ð €NØ"ÐðÐ2õ ð Ø Øð
à×'Ñ'ð
ð Ð+Ñ,ð
ð 
ò	
ó ó !ó ô
r+   r�   c                   ót   ‡ — e Zd Zˆ fd„Zdej
                  dee   dej                  j
                  fd„Zˆ xZ	S )Ú	UVDocHeadc                 ó  •— t         ‰| �  «        t        |j                  j                  «      | _        t        |j                  d   | j
                  z  |j                  d   dddd¬«      | _        t        |«      | _	        y )Nr   r   )r   r   r   r   r   r   )
r    r!   r\   Úbackbone_configrf   Únum_bridge_layersr   Úbridge_connectorrm   ro   rr   s     €r*   r!   zUVDocHead.__init__N  sv   ø€ Ü‰ÑÔÜ!$ V×%;Ñ%;×%IÑ%IÓ!JˆÔä .Ø×/Ñ/°Ñ2°T×5KÑ5KÑKØ×0Ñ0°Ñ3ØØØØô!
ˆÔô &;¸6Ó%BˆÕ"r+   r,   ri   r-   c                 óJ   — | j                  |«      }| j                  |«      }|S r/   )r¥   ro   )r(   r,   ri   s      r*   r1   zUVDocHead.forward]  s*   € ð
 ×-Ñ-¨mÓ<ˆØ×2Ñ2°=ÓAˆØÐr+   )
r4   r5   r6   r!   r;   r<   r   r   r1   r=   r>   s   @r*   r¡   r¡   M  s>   ø„ ô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            	       ó†   ‡ — 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 )Ú
UVDocModelrQ   c                 ó˜   •— t         ‰| �  |«       t        |j                  «      | _        t        |«      | _        | j                  «        y r/   )r    r!   r�   r£   r‘   r¡   ra   rŠ   rr   s     €r*   r!   zUVDocModel.__init__n  s8   ø€ Ü‰Ñ˜Ô ä% f×&<Ñ&<Ó=ˆŒÜ˜fÓ%ˆŒ	Ø�‰Õr+   rw   ri   r-   c                 ó¾   —  | j                   |fi |¤Ž}t        j                  |j                  d¬«      } | j                  |fi |¤Ž}t        ||j                  ¬«      S )Nr   )Údim)rŒ   r,   )r‘   r;   Úcatr˜   ra   r	   r,   )r(   rw   ri   Úbackbone_outputsÚfused_outputsrŒ   s         r*   r1   zUVDocModel.forwardu  s`   € ð )˜4Ÿ=™=¨Ñ@¸Ñ@ÐÜŸ	™	Ð"2×"?Ñ"?ÀQÔGˆØ%˜DŸI™I mÑ>°vÑ>Ðä-Ø/Ø*×8Ñ8ô
ð 	
r+   )r4   r5   r6   r   r!   r   r   r;   rŸ   r   r   Útupler	   r1   r=   r>   s   @r*   r¨   r¨   g  sd   ø„ ð˜{õ ð Øð
à×'Ñ'ð
ð Ð+Ñ,ð
ð 
ˆu× Ñ Ñ	!Ð$BÑ	Bò	
ó ó ô
r+   r¨   )rˆ   r�   r¨   ru   ))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   r@   rK   rX   rc   rm   ru   rˆ   r�   r¡   r¨   Ú__all__r—   r+   r*   ú<module>r½      s  ðó, Ý å !ß HÝ 9ß NÝ -Ý &ß IÑ IÝ 7Ý 5ß Aô"�R—Y‘Yô "ôJ;˜Ÿ™ô ;ô|�r—y‘yô ô6�"—)‘)ô ô<Ð1ô ô(˜BŸI™Iô ð> ô&˜?ó &ó ð&ô0IÐ&ô Iñ( ðôô
$
�MÐ#7ó $
óð
$
ôN�—	‘	ô ñ4 ðôô
Ð%ó 
óð
ò2 Q�r+   