Ë
    ÜÓ^j:U  ã                   ó‚  — 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 ddlmZmZmZmZ ddlmZ ddl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+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6  e(d¬«      e	 G d„ dee«      «       «       Z7 e(d¬«      e	 G d„ de«      «       «       Z8e( e.d¬«       G d „ d!e«      «       «       Z9 G d"„ d#e4«      Z: G d$„ d%ejv                  «      Z< G d&„ d'ejv                  «      Z= G d(„ d)ejv                  «      Z> G d*„ d+e«      Z? G d,„ d-ejv                  «      Z@e( G d.„ d/e6«      «       ZA G d0„ d1eA«      ZB e(d2¬3«       G d4„ d5eeA«      «       ZC G d6„ d7ejv                  «      ZD e(d8¬3«       G d9„ d:eA«      «       ZEg d;¢ZFy)<é    )ÚSequenceN)Ústricté   )ÚACT2FN)ÚBackboneConfigMixinÚBackboneMixinÚ%consolidate_backbone_kwargs_to_configÚfilter_output_hidden_states)ÚPreTrainedConfig)ÚBatchFeature)ÚTorchvisionBackend)Úgroup_images_by_shapeÚreorder_images)ÚPILImageResamplingÚSizeDict)ÚGradientCheckpointingLayer)ÚBackboneOutputÚBaseModelOutputWithNoAttention)ÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tuple)Ú
TensorTypeÚmerge_with_config_defaults)Úrequires)Úcapture_outputsé   )Ú
AutoConfig)ÚPPLCNetConvLayer)ÚPPOCRV5ServerDetPreTrainedModelzPaddlePaddle/UVDoc_safetensors)Ú
checkpointc                   óþ   ‡ — e Zd ZU dZdZdZee   dz  ed<   dZ	ee
   dz  ed<   dZeee
   ee
df   z     ed<   d	Zeeee
e
e
ef   ee
ez     z        ed
<   dZeeee
df   ee
   z        ed<   dZe
ed<   ˆ fd„Zˆ xZS )ÚUVDocBackboneConfiga˜  
    resnet_head (`Sequence[list[int] | tuple[int, ...]]`, *optional*, defaults to `((3, 32), (32, 32))`):
        Configuration for the ResNet head layers in format [in_channels, out_channels].
    resnet_configs (`Sequence[Sequence[tuple[int, int, int, bool] | list[int | bool]]]`, *optional*, defaults to `(((32, 32, 1, False),
        (32, 32, 3, False), (32, 32, 3, False)), ((32, 64, 1, True), (64, 64, 3, False), (64, 64, 3, False), (64, 64, 3, False)), ((64, 128, 1, True),
        (128, 128, 3, False), (128, 128, 3, False), (128, 128, 3, False), (128, 128, 3, False), (128, 128, 3, False)))`):
        Configuration for the ResNet stages in format [in_channels, out_channels, dilation_value, downsample].
    stage_configs (Sequence[Sequence[tuple[int, ...] | list[int]]], *optional*, defaults to `(((128, 1),), ((128, 2),),
        ((128, 5),), ((128, 8),(128, 3),(128, 2),), ((128, 12), (128, 7), (128, 4),), ((128, 18), (128, 12), (128, 6),),)`):
        Configuration for the bridge module stages in format [in_channels, dilation_value].
        Each inner sequence corresponds to a single bridge block, and the outer sequence groups blocks by bridge stage.
    Úuvdoc_backboneNÚ_out_featuresÚ_out_indices))r   é    )r(   r(   .Úresnet_head)))r(   r(   é   F©r(   r(   r   Fr+   ))r(   é@   r*   T©r,   r,   r   Fr-   r-   ))r,   é€   r*   T©r.   r.   r   Fr/   r/   r/   r/   Úresnet_configs)))r.   r*   )©r.   r   ))r.   é   ))r.   é   )r.   r   r1   )©r.   é   )r.   é   )r.   é   ))r.   é   r4   )r.   é   Ústage_configsr2   Úkernel_sizec                 óf  •— | j                   D �cg c]  }t        |«      ‘Œ c}| _        dgt        dt        | j                   «      dz   «      D �cg c]  }d|› �‘Œ	 c}z   | _        | j                  |j                  dd «      |j                  dd «      ¬«       t        ‰| �   di |¤Ž y c c}w c c}w )NÚstemr*   ÚstageÚout_indicesÚout_features)r?   r@   © )	r:   ÚlenÚdepthsÚrangeÚstage_namesÚ"set_output_features_output_indicesÚpopÚsuperÚ__post_init__)ÚselfÚkwargsÚstagesÚidxÚ	__class__s       €úr/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/uvdoc/modular_uvdoc.pyrI   z!UVDocBackboneConfig.__post_init__w   s¢   ø€ Ø15×1CÑ1CÖD v”s˜6•{ÒDˆŒØ"˜8ÄÀaÌÈT×M_ÑM_ÓI`ÐcdÑIdÓ@eÖ&f¸¨¨s¨e¢}Ò&fÑfˆÔØ×/Ñ/ØŸ
™
 =°$Ó7ÀfÇjÁjÐQ_ÐaeÓFfð 	0ô 	
ô 	‰ÑÑ' Ó'ùò EùÚ&fs   �B)ÁB.)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
model_typer&   ÚlistÚstrÚ__annotations__r'   Úintr)   r   Útupler0   Úboolr:   r;   rI   Ú__classcell__©rN   s   @rO   r$   r$   0   sÎ   ø… ñð "€Jà&*€M�4˜‘9˜tÑ#Ó*Ø%)€L�$�s‘)˜dÑ"Ó)ð:€K�˜$˜s™) e¨C°¨H¡oÑ5Ñ6ó ð
Y€N�H˜X e¨C°°c¸4Ð,?Ñ&@À4ÈÈdÉ
ÑCSÑ&SÑTÑUó ð,F€M�8˜H U¨3°¨8¡_°t¸C±yÑ%@ÑAÑBó ð* €K�Ó÷(ð (ó    r$   c                   óÂ   ‡ — e Zd ZU dZdZdeiZdZee	z  dz  e
d<   dZee
d<   dZee
d<   d	Zee
d
<   dZee   eedf   z  e
d<   dZeee   eedf   z     e
d<   ˆ fd„Zˆ xZS )ÚUVDocConfiga»  
    padding_mode (`str`, *optional*, defaults to `"reflect"`):
        Padding mode for convolutional layers. Supported modes are `"reflect"`, `"constant"`, and `"replicate"`.
    kernel_size (`int`, *optional*, defaults to 5):
        Kernel size for convolutional layers in the backbone network.
    bridge_connector (`list[int] | tuple[int, ...]`, *optional*, defaults to `(128, 128)`):
        Configuration for the bridge connector in format [in_channels, out_channels].
    out_point_positions2D (`Sequence[list[int] | tuple[int, ...]]`, *optional*, defaults to `((128, 32), (32, 2))`):
        Configuration for the output point positions 2D layer in format [in_channels, out_channels].
    ÚuvdocÚbackbone_configNÚpreluÚ
hidden_actÚreflectÚpadding_moder2   r;   )r.   r.   .Úbridge_connector))r.   r(   )r(   r   Úout_point_positions2Dc                 ód   •— t        d| j                  ddœ|¤Ž\  | _        }t        ‰| �  di |¤Ž y )Nr%   )ra   Údefault_config_typerA   )r	   ra   rH   rI   )rJ   rK   rN   s     €rO   rI   zUVDocConfig.__post_init__˜   sB   ø€ Ü'Lð (
Ø ×0Ñ0Ø 0ñ(
ð ñ(
Ñ$ˆÔ˜fô
 	‰ÑÑ' Ó'r]   )rP   rQ   rR   rS   rT   r   Úsub_configsra   Údictr   rW   rc   rV   re   r;   rX   rf   rU   rY   rg   r   rI   r[   r\   s   @rO   r_   r_   €   s“   ø… ñ	ð €JØ$ jÐ1€KØ6:€O�TÐ,Ñ,¨tÑ3Ó:à€J�ÓØ!€L�#Ó!Ø€K�ÓØ4>Ð�d˜3‘i %¨¨S¨¡/Ñ1Ó>ØCWÐ˜8 D¨¡I°°c¸3°h±Ñ$?Ñ@ÓW÷(ð (r]   r_   )Útorch)Úbackendsc                   ó  — e Zd ZdZdZdddœZej                  Zde	d   de
ded	e
d
ede
dee	e   z  dz  dee	e   z  dz  de
dz  deez  dz  defd„Z	 ddej$                  de	ej$                     dede	eeej$                  f      fd„Zy)ÚUVDocImageProcessorTiÈ  iè  )ÚheightÚwidthÚimagesztorch.TensorÚ	do_resizeÚsizeÚ
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanNÚ	image_stdÚdisable_groupingÚreturn_tensorsÚreturnc           	      óâ  — t        ||	¬«      \  }}i }|j                  «       D ]1  \  }}| j                  ||||||«      }|d d …g d¢d d …d d …f   }|||<   Œ3 t        ||«      }|j	                  «       }t        ||	¬«      \  }}i }|j                  «       D ];  \  }}|r/t        j                  ||j                  |j                  fdd¬«      }|||<   Œ= t        ||«      }t        ||dœ|
dg¬«      S )	N)rz   )r   r*   r   ÚbilinearT©rt   ÚmodeÚalign_corners)Úpixel_valuesÚoriginal_imagesrƒ   )ÚdataÚtensor_typeÚskip_tensor_conversion)
r   ÚitemsÚrescale_and_normalizer   ÚcopyÚFÚinterpolaterp   rq   r   )rJ   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   rK   Úgrouped_imagesÚgrouped_images_indexÚprocessed_images_groupedÚshapeÚstacked_imagesÚrescale_and_normalize_imagesrƒ   Úinterpolated_images_groupedr‚   s                        rO   Ú_preprocesszUVDocImageProcessor._preprocess©   s9  € ô 0EÀVÐ^nÔ/oÑ,ˆÐ,Ø#%Ð Ø%3×%9Ñ%9Ó%;ò 	=Ñ!ˆE�>Ø!×7Ñ7Ø 
¨N¸LÈ*ÐV_óˆNð ,ªAªyº!ºQÐ,>Ñ?ˆNØ.<Ð$ UÒ+ð	=ô (6Ð6NÐPdÓ'eÐ$à6×;Ñ;Ó=ˆä/DØ(Ð;Kô0
Ñ,ˆÐ,ð ')Ð#à%3×%9Ñ%9Ó%;ò 	@Ñ!ˆE�>áÜ!"§¡Ø"¨$¯+©+°t·z±zÐ)BÈÐcgô"�ð 2@Ð'¨Ò.ð	@ô &Ð&AÐCWÓXˆäØ".À?ÑSØ&Ø$5Ð#6ô
ð 	
r]   Ú
predictionrƒ   Úscalec                 ó¬  — t        |«      }t        j                  t        |«      |j                  ¬«      }g }t        |«      D �]  \  }}|j                  dk(  r|j                  d«      }|j                  |j                  «      }|j                  dd \  }}	t        j                  |||dz    ||	fdd¬	«      }
|
j                  dddd«      }t        j                  ||d¬
«      }|j                  d«      j                  ddd«      }||z  }|j                  dg¬«      j                  t        j                   dd¬«      }|j#                  d|i«       �Œ |S )až  
        Post-process document rectification predictions to convert them into rectified images.

        Args:
            prediction: Predicted 2D Bezier mesh coordinates, shape (B, 2, H, W)
            original_images: List of original input tensors, each of shape (C, H_i, W_i). Images may have different sizes.
            scale: Scaling factor for output images (default: 255.0)

        Returns:
            List of dictionaries containing rectified images. Each dictionary has:
                - "images": Rectified image tensor of shape (H, W, 3) with dtype torch.uint8
                          and BGR channel order (suitable for OpenCV visualization)
        )Údevicer   r   r   Nr*   r~   Tr   )r�   éÿÿÿÿ)ÚdimsF)ÚdtypeÚnon_blockingr‰   rr   )rU   rl   ÚtensorÚfloatr—   Ú	enumerateÚndimÚ	unsqueezeÚtor�   rŠ   r‹   ÚpermuteÚgrid_sampleÚsqueezeÚflipÚuint8Úappend)rJ   r”   rƒ   r•   Ú
image_listÚresultsÚiÚoriginal_imageÚoriginal_heightÚoriginal_widthÚupsampled_meshÚrearranged_meshÚ	rectifiedÚimages                 rO   Ú#post_process_document_rectificationz7UVDocImageProcessor.post_process_document_rectificationÚ   sW  € ô& ˜/Ó*ˆ
Ü—‘œU 5›\°*×2CÑ2CÔDˆØˆä!*¨:Ó!6ó 	.ÑˆAˆ~à×"Ñ" aÒ'Ø!/×!9Ñ!9¸!Ó!<�Ø+×.Ñ.¨z×/@Ñ/@ÓAˆNØ.<×.BÑ.BÀ1À2Ð.FÑ+ˆO˜^ô Ÿ]™]Ø˜1˜q 1™uÐ%Ø% ~Ð6ØØ"ô	ˆNð -×4Ñ4°Q¸¸1¸aÓ@ˆOô Ÿ™ n°oÐUYÔZˆIð ×%Ñ% aÓ(×0Ñ0°°A°qÓ9ˆEð ˜E‘MˆEà—J‘J R D�JÓ)×,Ñ,´5·;±;ÈTÐX]Ð,Ó^ˆEà�N‰N˜H eÐ,Ö-ð9	.ð< ˆr]   )g     ào@)rP   rQ   rR   ru   rs   rt   r   ÚBILINEARÚresamplerU   rZ   r   r�   rV   r   r   r“   rl   ÚTensorrk   r²   rA   r]   rO   ro   ro   ¡   s  „ ð €JØ€IØ CÑ(€DØ!×*Ñ*€Hð/
à�^Ñ$ð/
ð ð/
ð ð	/
ð
 ð/
ð ð/
ð ð/
ð ˜D ™KÑ'¨$Ñ.ð/
ð ˜4 ™;Ñ&¨Ñ-ð/
ð  ™+ð/
ð ˜jÑ(¨4Ñ/ð/
ð 
ó/
ðj ñ	5à—L‘Lð5ð ˜eŸl™lÑ+ð5ð ð	5ð
 
ˆd�3˜Ÿ™Ð$Ñ%Ñ	&ô5r]   ro   c                   óX   ‡ — 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ˆ xZS )ÚUVDocConvLayerz<Convolutional layer with batch normalization and activation.Úin_channelsÚout_channelsr;   ÚstrideÚpaddingre   ÚbiasÚdilationÚ
activationc
           
      óf   •— t         ‰
| �  «        t        j                  ||||||||¬«      | _        y )N)r¼   r;   rº   r»   re   r½   )rH   Ú__init__ÚnnÚConv2dÚconvolution)rJ   r¸   r¹   r;   rº   r»   re   r¼   r½   r¾   rN   s             €rO   rÀ   zUVDocConvLayer.__init__  s9   ø€ ô 	‰ÑÔäŸ9™9ØØØØ#ØØØ%Øô	
ˆÕr]   )r   r*   r   ÚzerosFr*   Úrelu)	rP   rQ   rR   rS   rX   rV   rZ   rÀ   r[   r\   s   @rO   r·   r·     s   ø„ ÙFð ØØØ#ØØØ ñ
àð
ð ð
ð ð	
ð
 ð
ð ð
ð ð
ð ð
ð ð
ð ÷
ñ 
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 )Nr   T)r¸   r¹   r;   rº   r»   r¼   r¾   )r¸   r¹   r;   rº   r»   r½   r¼   r*   )r¸   r¹   r;   rº   r»   r¼   r½   r¾   )
rH   rÀ   r·   rÁ   ÚIdentityÚ	conv_downÚ
conv_startÚ
conv_finalr   Úact_fn)
rJ   r¸   r¹   r;   rº   r»   r½   rÈ   r¾   rN   s
            €rO   rÀ   zUVDocResidualBlock.__init__2  s³   ø€ ô 	‰ÑÔñ ô Ø'Ø)Ø'ØØ# qÑ(ØØõô —‘“ð 	Œô )Ø#Ø%Ø#ØØØØô
ˆŒô )Ø$Ø%Ø#ØØØØØô	
ˆŒð -7Ð,B”f˜ZÑ(ˆ�ÌÏÉËˆ�r]   Úhidden_statesr|   c                 ó˜   — | j                  |«      }| j                  |«      }| j                  |«      }||z   }| j                  |«      }|S ©N)rË   rÌ   rÍ   rÎ   )rJ   rÏ   Úresiduals      rO   ÚforwardzUVDocResidualBlock.forwardd  sJ   € Ø—>‘> -Ó0ˆØŸ™¨Ó6ˆØŸ™¨Ó6ˆØ%¨Ñ0ˆØŸ™ MÓ2ˆØÐr]   )r*   r   r*   FrÅ   )rP   rQ   rR   rS   rX   rZ   rV   rÀ   rl   rµ   rÓ   r[   r\   s   @rO   rÇ   rÇ   /  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 )Nr   r*   )r¸   r¹   rº   r»   r½   rÈ   r;   )	rH   rÀ   r0   rÁ   Ú
ModuleListÚlayersr§   rÇ   r;   )	rJ   ÚconfigÚstage_indexrL   r¸   r¹   r½   rÈ   rN   s	           €rO   rÀ   zUVDocResNetStage.__init__p  sƒ   ø€ Ü‰ÑÔà×&Ñ& {Ñ3ˆÜ—m‘m BÓ'ˆŒØ?Eò 	Ñ;ˆK˜ x°Ø�K‰K×ÑÜ"Ø +Ø!-Ù *™1°Ø$ q™LØ%Ø)Ø &× 2Ñ 2ôõ
ñ	r]   rÏ   r|   c                 ó8   — | j                   D ]
  } ||«      }Œ |S rÑ   )rØ   )rJ   rÏ   Úlayers      rO   rÓ   zUVDocResNetStage.forward‚  s%   € Ø—[‘[ò 	1ˆEÙ! -Ó0‰Mð	1àÐr]   ©	rP   rQ   rR   rS   rÀ   rl   rµ   rÓ   r[   r\   s   @rO   rÕ   rÕ   m  s&   ø„ Ù=ôð$ 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 )Ú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*   r   )r¸   r¹   r;   rº   r»   )rH   rÀ   rÁ   r×   r)   rD   rB   r§   r·   r;   Úresnet_downr0   rÕ   )rJ   rÙ   rª   rÚ   r>   rN   s        €rO   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Ñ   )r)   rá   )rJ   rÏ   Úheadr>   s       rO   rÓ   zUVDocResNet.forwardž  sF   € Ø×$Ñ$ò 	0ˆDÙ  Ó/‰Mð	0à×%Ñ%ò 	1ˆEÙ! -Ó0‰Mð	1àÐr]   rÝ   r\   s   @rO   rß   rß   ˆ  s&   ø„ Ù.ô+ð& U§\¡\ð °e·l±l÷ r]   rß   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½   )rH   rÀ   rÁ   r×   Úblocksr:   r§   r·   )rJ   rÙ   Úbridge_indexÚbridger¸   r½   rN   s         €rO   rÀ   zUVDocBridgeBlock.__init__©  sc   ø€ Ü‰ÑÔÜ—m‘m BÓ'ˆŒØ×%Ñ% lÑ3ˆØ%+ò 	nÑ!ˆK˜Ø�K‰K×Ñœ~¨k¸;ÐPXÐckÔlÕmñ	nr]   rÏ   rK   r|   c                 ó8   — | j                   D ]
  } ||«      }Œ |S rÑ   )rç   )rJ   rÏ   rK   Úblocks       rO   rÓ   zUVDocBridgeBlock.forward°  s'   € ð
 —[‘[ò 	1ˆEÙ! -Ó0‰Mð	1àÐr]   )rP   rQ   rR   rS   rÀ   rl   rµ   r   r   rÓ   r[   r\   s   @rO   rå   rå   ¦  s;   ø„ ÙNônðà—|‘|ðð Ð+Ñ,ðð 
�‰÷	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 )Ú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*   r   )r¸   r¹   r;   rº   r»   re   r¾   )r¸   r¹   r;   rº   r»   re   )rH   rÀ   r·   rg   r;   re   rc   rË   rÁ   rÂ   Úconv_up©rJ   rÙ   rN   s     €rO   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Ñ   )rË   rï   )rJ   rÏ   s     rO   rÓ   zUVDocPointPositions2D.forwardÓ  s$   € ØŸ™ }Ó5ˆØŸ™ ]Ó3ˆØÐr]   rÝ   r\   s   @rO   rí   rí   º  s&   ø„ ÙNô
ð, U§\¡\ð °e·l±l÷ r]   rí   c                   óF   — e Zd ZdZdeiZ ej                  «       d„ «       Zy)ÚUVDocPreTrainedModelTrÏ   c                 ó†   — t        j                  | |«       t        |t        j                  «      r|j                  «        yy)zInitialize the weights.N)r   Ú_init_weightsÚ
isinstancerÁ   ÚPReLUÚreset_parameters)rJ   Úmodules     rO   rõ   z"UVDocPreTrainedModel._init_weightsà  s3   € ô 	×%Ñ% d¨FÔ3Ü�fœbŸh™hÔ'Ø×#Ñ#Õ%ð (r]   N)	rP   rQ   rR   Úsupports_gradient_checkpointingrå   Ú_can_record_outputsrl   Úno_gradrõ   rA   r]   rO   ró   ró   Ù  s2   „ à&*Ð#àÐ)ðÐð €U‡]�]ƒ_ñ&ó ñ&r]   ró   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Ñ   )rH   rÀ   rÁ   r×   ré   rD   rB   r:   r§   rå   Ú	post_init)rJ   rÙ   rè   rN   s      €rO   rÀ   zUVDocBridge.__init__é  se   ø€ Ü‰Ñ˜Ô Ü—m‘m BÓ'ˆŒÜ!¤# f×&:Ñ&:Ó";Ó<ò 	GˆLØ�K‰K×ÑÔ/°¸ÓEÕFð	Gà�‰Õr]   rÏ   rK   r|   c                 óL   — | j                   D ]
  } ||«      }Œ t        ¬«      S )N)Úlast_hidden_state)ré   r   )rJ   rÏ   rK   rÜ   Úfeatures        rO   rÓ   zUVDocBridge.forwardð  s,   € ð —[‘[ò 	+ˆEÙ˜MÓ*‰Gð	+ä-ÀÔHÐHr]   )rP   rQ   rR   rÀ   r   r   rl   rµ   r   r   rÓ   r[   r\   s   @rO   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ÚbackbonerÙ   c                 ó  •— t         ‰| �  |«       |j                  d   d   g}|j                  D ]  }|j	                  |d   d   «       Œ || _        t        |«      | _        t        |«      | _	        | j                  «        y )Nr˜   r   r*   )rH   rÀ   r)   r:   r§   Únum_featuresrß   Úresnetrþ   ré   r   )rJ   rÙ   r	  r>   rN   s       €rO   rÀ   zUVDocBackbone.__init__  s}   ø€ Ü‰Ñ˜Ô à×*Ñ*¨2Ñ.¨rÑ2Ð3ˆØ×)Ñ)ò 	-ˆEØ×Ñ  a¡¨¡Õ,ð	-à(ˆÔä! &Ó)ˆŒÜ! &Ó)ˆŒà�‰Õr]   r‚   rK   r|   c                 óú   — | j                  |«      } | j                  |fi |¤Ž}d}t        | j                  «      D ]'  \  }}|| j                  v sŒ||j
                  |   fz  }Œ) t        ||j
                  ¬«      S )NrA   )Úfeature_mapsrÏ   )r
  ré   rž   rE   r@   rÏ   r   )rJ   r‚   rK   rÏ   Úoutputsr  rM   r>   s           rO   rÓ   zUVDocBackbone.forward  s‹   € ð Ÿ™ LÓ1ˆØ�$—+‘+˜mÑ6¨vÑ6ˆàˆÜ# D×$4Ñ$4Ó5ò 	>‰JˆC�Ø˜×)Ñ)Ò)Ø ×!6Ñ!6°sÑ!;Ð =Ñ=‘ð	>ô Ø%Ø!×/Ñ/ô
ð 	
r]   )rP   rQ   rR   Úhas_attentionsÚbase_model_prefixr$   rÀ   r   r
   r   rl   ÚFloatTensorr   r   r   rÓ   r[   r\   s   @rO   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½   )
rH   rÀ   rB   ra   r:   Únum_bridge_layersr·   rf   rí   rg   rð   s     €rO   rÀ   zUVDocHead.__init__)  sv   ø€ Ü‰ÑÔÜ!$ V×%;Ñ%;×%IÑ%IÓ!JˆÔä .Ø×/Ñ/°Ñ2°T×5KÑ5KÑKØ×0Ñ0°Ñ3ØØØØô!
ˆÔô &;¸6Ó%BˆÕ"r]   rÏ   rK   r|   c                 óJ   — | j                  |«      }| j                  |«      }|S rÑ   )rf   rg   )rJ   rÏ   rK   s      rO   rÓ   zUVDocHead.forward8  s*   € ð
 ×-Ñ-¨mÓ<ˆØ×2Ñ2°=ÓAˆØÐr]   )
rP   rQ   rR   rÀ   rl   rµ   r   r   rÓ   r[   r\   s   @rO   r  r  (  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 )Ú
UVDocModelrÙ   c                 ó˜   •— t         ‰| �  |«       t        |j                  «      | _        t        |«      | _        | j                  «        y rÑ   )rH   rÀ   r  ra   r  r  rã   r   rð   s     €rO   rÀ   zUVDocModel.__init__I  s8   ø€ Ü‰Ñ˜Ô ä% f×&<Ñ&<Ó=ˆŒÜ˜fÓ%ˆŒ	Ø�‰Õr]   r‚   rK   r|   c                 ó¾   —  | j                   |fi |¤Ž}t        j                  |j                  d¬«      } | j                  |fi |¤Ž}t        ||j                  ¬«      S )Nr*   )Údim)r  rÏ   )r  rl   Úcatr  rã   r   rÏ   )rJ   r‚   rK   Úbackbone_outputsÚfused_outputsr  s         rO   rÓ   zUVDocModel.forwardP  s`   € ð )˜4Ÿ=™=¨Ñ@¸Ñ@ÐÜŸ	™	Ð"2×"?Ñ"?ÀQÔGˆØ%˜DŸI™I mÑ>°vÑ>Ðä-Ø/Ø*×8Ñ8ô
ð 	
r]   )rP   rQ   rR   r_   rÀ   r   r   rl   r  r   r   rY   r   rÓ   r[   r\   s   @rO   r  r  B  sd   ø„ ð˜{õ ð Øð
à×'Ñ'ð
ð Ð+Ñ,ð
ð 
ˆu× Ñ Ñ	!Ð$BÑ	Bò	
ó ó ô
r]   r  )rþ   r  r$   ro   r_   r  ró   )GÚcollections.abcr   rl   Útorch.nnrÁ   Útorch.nn.functionalÚ
functionalrŠ   Úhuggingface_hub.dataclassesr   Úactivationsr   Úbackbone_utilsr   r   r	   r
   Úconfiguration_utilsr   Úfeature_extraction_utilsr   Úimage_processing_backendsr   Úimage_transformsr   r   Úimage_utilsr   r   Úmodeling_layersr   Úmodeling_outputsr   r   Úmodeling_utilsr   Úprocessing_utilsr   Úutilsr   r   r   Úutils.genericr   r   Úutils.import_utilsr   Úutils.output_capturingr   Úautor   Úpp_lcnet.modeling_pp_lcnetr    Ú0pp_ocrv5_server_det.modeling_pp_ocrv5_server_detr!   r$   r_   ro   r·   ÚModulerÇ   rÕ   rß   rå   rí   ró   rþ   r  r  r  Ú__all__rA   r]   rO   ú<module>r7     sÏ  ðõ  %ã Ý ß Ð Ý .å !÷ó õ 4Ý 4Ý ;ß Eß 7Ý 9ß NÝ -Ý &ß IÑ Iß CÝ *Ý 5Ý Ý 9Ý ^ñ Ð;Ô<ØôK(Ð-Ð/?ó K(ó ó =ðK(ñ\ Ð;Ô<Øô(Ð"ó (ó ó =ð(ð> Ù	�:ÔôlÐ,ó ló ó ðlô^
Ð%ô 
ô:;˜Ÿ™ô ;ô|�r—y‘yô ô6�"—)‘)ô ô<Ð1ô ô(˜BŸI™Iô ð> ô&Ð:ó &ó ð&ôIÐ&ô Iñ( ðôô
$
�MÐ#7ó $
óð
$
ôN�—	‘	ô ñ4 ðôô
Ð%ó 
óð
ò2�r]   