§
    ‚Štj: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j;        ¦  «        Z< G d&„ d'ej;        ¦  «        Z= G d(„ d)ej;        ¦  «        Z> G d*„ d+e¦  «        Z? G d,„ d-ej;        ¦  «        Z@e( G d.„ d/e6¦  «        ¦   «         ZA G d0„ d1eA¦  «        ZB e(d2¬3¦  «         G d4„ d5eeA¦  «        ¦   «         ZC G d6„ d7ej;        ¦  «        ZD e(d8¬3¦  «         G d9„ d:eA¦  «        ¦   «         ZEg d;¢ZFdS )<é    )Ú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                   óL  ‡ — 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                 óT  •— d„ | j         D ¦   «         | _        dgd„ t          dt          | j         ¦  «        dz   ¦  «        D ¦   «         z   | _        |                      |                     dd ¦  «        |                     dd ¦  «        ¬¦  «          t          ¦   «         j        di |¤Ž d S )	Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS © )Úlen)Ú.0Ústagess     úe/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/uvdoc/modular_uvdoc.pyú
<listcomp>z5UVDocBackboneConfig.__post_init__.<locals>.<listcomp>x   s   € ÐDÐDÐD v•s˜6‘{”{ÐDÐDÐDó    Ústemc                 ó   — g | ]}d |› �‘ŒS )Ústager>   )r@   Úidxs     rB   rC   z5UVDocBackboneConfig.__post_init__.<locals>.<listcomp>y   s   € Ð&fÐ&fÐ&f¸ }¨s } }Ð&fÐ&fÐ&frD   r*   Úout_indicesÚout_features)rI   rJ   r>   )	r:   ÚdepthsÚranger?   Ústage_namesÚ"set_output_features_output_indicesÚpopÚsuperÚ__post_init__©ÚselfÚkwargsÚ	__class__s     €rB   rQ   z!UVDocBackboneConfig.__post_init__w   s¹   ø€ ØDÐD°Ô1CÐDÑDÔDˆŒØ"˜8Ð&fÐ&fÅÀaÍÈTÔM_ÑI`ÔI`ÐcdÑIdÑ@eÔ@eÐ&fÑ&fÔ&fÑfˆÔØ×/Ò/ØŸ
š
 =°$Ñ7Ô7ÀfÇjÂjÐQ_ÐaeÑFfÔFfð 	0ñ 	
ô 	
ð 	
ð 	�‰ŒÔÐ'Ð' Ð'Ð'Ð'Ð'Ð'rD   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
model_typer&   ÚlistÚstrÚ__annotations__r'   Úintr)   r   Útupler0   Úboolr:   r;   rQ   Ú__classcell__©rU   s   @rB   r$   r$   0   s0  ø€ € € € € € ðð ð "€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�ÐÐÑð(ð (ð (ð (ð (ð (ð (ð (ð (rD   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                 ór   •— t          d| j        ddœ|¤Ž\  | _        } t          ¦   «         j        di |¤Ž d S )Nr%   )rf   Údefault_config_typer>   )r	   rf   rP   rQ   rR   s     €rB   rQ   zUVDocConfig.__post_init__˜   s\   ø€ Ý'Lð (
Ø Ô0Ø 0ð(
ð (
ð ð(
ð (
Ñ$ˆÔ˜fð
 	�‰ŒÔÐ'Ð' Ð'Ð'Ð'Ð'Ð'rD   )rV   rW   rX   rY   rZ   r   Úsub_configsrf   Údictr   r]   rh   r\   rj   r;   r^   rk   r[   r_   rl   r   rQ   ra   rb   s   @rB   rd   rd   €   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ÐWÑWð(ð (ð (ð (ð (ð (ð (ð (ð (rD   rd   )Ú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dS )Ú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 }|                     ¦   «         D ]8\  }}|                      ||||||¦  «        }|d d …g d¢d d …d d …f         }|||<   Œ9t          ||¦  «        }|                     ¦   «         }t          ||	¬¦  «        \  }}i }|                     ¦   «         D ]0\  }}|r$t          j        ||j        |j        fdd¬¦  «        }|||<   Œ1t          ||¦  «        }t          ||dœ|
dg¬¦  «        S )	N)r   )r   r*   r   ÚbilinearT©ry   ÚmodeÚalign_corners)Úpixel_valuesÚoriginal_imagesrˆ   )ÚdataÚtensor_typeÚskip_tensor_conversion)
r   ÚitemsÚrescale_and_normalizer   ÚcopyÚFÚinterpolateru   rv   r   )rS   rw   rx   ry   rz   r{   r|   r}   r~   r   r€   rT   Úgrouped_imagesÚgrouped_images_indexÚprocessed_images_groupedÚshapeÚstacked_imagesÚrescale_and_normalize_imagesrˆ   Úinterpolated_images_groupedr‡   s                        rB   Ú_preprocesszUVDocImageProcessor._preprocess©   s…  € õ 0EÀVÐ^nÐ/oÑ/oÔ/oÑ,ˆÐ,Ø#%Ð Ø%3×%9Ò%9Ñ%;Ô%;ð 	=ð 	=Ñ!ˆE�>Ø!×7Ò7Ø 
¨N¸LÈ*ÐV_ñô ˆNð ,¨A¨A¨A¨y¨y¨y¸!¸!¸!¸Q¸Q¸QÐ,>Ô?ˆNØ.<Ð$ UÑ+Ð+å'5Ð6NÐPdÑ'eÔ'eÐ$à6×;Ò;Ñ=Ô=ˆå/DØ(Ð;Kð0
ñ 0
ô 0
Ñ,ˆÐ,ð ')Ð#à%3×%9Ò%9Ñ%;Ô%;ð 	@ð 	@Ñ!ˆE�>àð Ý!"¤Ø"¨$¬+°t´zÐ)BÈÐcgð"ñ "ô "�ð 2@Ð'¨Ñ.Ð.å%Ð&AÐCWÑXÔXˆåØ".À?ÐSÐSØ&Ø$5Ð#6ð
ñ 
ô 
ð 	
rD   ç     ào@Ú
predictionrˆ   Úscalec                 óà  — t          |¦  «        }t          j        t          |¦  «        |j        ¬¦  «        }g }t          |¦  «        D �]#\  }}|j        dk    r|                     d¦  «        }|                     |j        ¦  «        }|j	        dd…         \  }}	t          j        |||dz   …         ||	fdd¬	¦  «        }
|
                     dddd¦  «        }t          j        ||d¬
¦  «        }|                     d¦  «                             ddd¦  «        }||z  }|                     dg¬¦  «                             t          j        dd¬¦  «        }|                     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Ž   rw   )r[   rq   ÚtensorÚfloatr�   Ú	enumerateÚndimÚ	unsqueezeÚtor”   r�   r�   ÚpermuteÚgrid_sampleÚsqueezeÚflipÚuint8Úappend)rS   rš   rˆ   r›   Ú
image_listÚresultsÚiÚoriginal_imageÚoriginal_heightÚoriginal_widthÚupsampled_meshÚrearranged_meshÚ	rectifiedÚimages                 rB   Ú#post_process_document_rectificationz7UVDocImageProcessor.post_process_document_rectificationÚ   s„  € õ& ˜/Ñ*Ô*ˆ
Ý”�U 5™\œ\°*Ô2CÐDÑDÔDˆØˆå!*¨:Ñ!6Ô!6ð 	.ñ 	.ÑˆAˆ~àÔ" aÒ'Ð'Ø!/×!9Ò!9¸!Ñ!<Ô!<�Ø+×.Ò.¨zÔ/@ÑAÔAˆNØ.<Ô.BÀ1À2À2Ô.FÑ+ˆO˜^õ œ]Ø˜1˜q 1™u˜9Ô%Ø% ~Ð6ØØ"ð	ñ ô ˆNð -×4Ò4°Q¸¸1¸aÑ@Ô@ˆOõ œ n°oÐUYÐZÑZÔZˆIð ×%Ò% aÑ(Ô(×0Ò0°°A°qÑ9Ô9ˆEð ˜E‘MˆEà—J’J R D�JÑ)Ô)×,Ò,µ5´;ÈTÐX]Ð,Ñ^Ô^ˆEà�NŠN˜H eÐ,Ñ-Ô-Ð-Ñ-àˆrD   )r™   )rV   rW   rX   rz   rx   ry   r   ÚBILINEARÚresampler[   r`   r   r£   r\   r   r   r˜   rq   ÚTensorrp   r¸   r>   rD   rB   rt   rt   ¡   sC  € € € € € ð €JØ€IØ CÐ(Ð(€DØ!Ô*€Hð/
à�^Ô$ð/
ð ð/
ð ð	/
ð
 ð/
ð ð/
ð ð/
ð ˜D œKÑ'¨$Ñ.ð/
ð ˜4 œ;Ñ&¨Ñ-ð/
ð  ™+ð/
ð ˜jÑ(¨4Ñ/ð/
ð 
ð/
ð /
ð /
ð /
ðj ð	5ð 5à”Lð5ð ˜eœlÔ+ð5ð ð	5ð
 
ˆd�3˜œÐ$Ô%Ô	&ð5ð 5ð 5ð 5ð 5ð 5rD   rt   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.r   r*   r   ÚzerosFÚreluÚin_channelsÚout_channelsr;   ÚstrideÚpaddingrj   ÚbiasÚdilationÚ
activationc
           
      óŠ   •— t          ¦   «                              ¦   «          t          j        ||||||||¬¦  «        | _        d S )N)rÄ   r;   rÂ   rÃ   rj   rÅ   )rP   Ú__init__ÚnnÚConv2dÚconvolution)rS   rÀ   rÁ   r;   rÂ   rÃ   rj   rÄ   rÅ   rÆ   rU   s             €rB   rÈ   zUVDocConvLayer.__init__  sR   ø€ õ 	‰Œ×ÒÑÔÐåœ9ØØØØ#ØØØ%Øð	
ñ 	
ô 	
ˆÔÐÐrD   )r   r*   r   r¾   Fr*   r¿   )	rV   rW   rX   rY   r^   r\   r`   rÈ   ra   rb   s   @rB   r½   r½     s·   ø€ € € € € ØFÐFð ØØØ#ØØØ ð
ð 
àð
ð ð
ð ð	
ð
 ð
ð ð
ð ð
ð ð
ð ð
ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
rD   r½   c                   ót   ‡ — 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   Fr¿   rÀ   rÁ   r;   rÂ   rÃ   rÅ   Ú
downsamplerÆ   c	           
      ój  •— t          ¦   «                              ¦   «          |rt          |||||dz  dd ¬¦  «        nt          j        ¦   «         | _        t          ||||||d¬¦  «        | _        t          |||d|d|d ¬¦  «        | _        |�t          |         nt          j        ¦   «         | _	        d S )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Æ   )
rP   rÈ   r½   rÉ   ÚIdentityÚ	conv_downÚ
conv_startÚ
conv_finalr   Úact_fn)
rS   rÀ   rÁ   r;   rÂ   rÃ   rÅ   rÎ   rÆ   rU   s
            €rB   rÈ   zUVDocResidualBlock.__init__2  sæ   ø€ õ 	‰Œ×ÒÑÔÐð ð
�NØ'Ø)Ø'ØØ# qÑ(ØØðñ ô ð õ ”‘”ð 	Œõ )Ø#Ø%Ø#ØØØØð
ñ 
ô 
ˆŒõ )Ø$Ø%Ø#ØØØØØð	
ñ 	
ô 	
ˆŒð -7Ð,B•f˜ZÔ(Ð(ÍÌÉÌˆŒˆˆrD   Úhidden_statesr�   c                 ó¸   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }||z   }|                      |¦  «        }|S ©N)rÑ   rÒ   rÓ   rÔ   )rS   rÕ   Úresiduals      rB   ÚforwardzUVDocResidualBlock.forwardd  sV   € Ø—>’> -Ñ0Ô0ˆØŸš¨Ñ6Ô6ˆØŸš¨Ñ6Ô6ˆØ%¨Ñ0ˆØŸš MÑ2Ô2ˆØÐrD   )r*   r   r*   Fr¿   )rV   rW   rX   rY   r^   r`   r\   rÈ   rq   r»   rÙ   ra   rb   s   @rB   rÍ   rÍ   /  sÝ   ø€ € € € € Ø4Ð4ð ØØØ Ø ð0Vð 0Vàð0Vð ð0Vð ð	0Vð
 ð0Vð ð0Vð ð0Vð ð0Vð ð0Vð 0Vð 0Vð 0Vð 0Vð 0Vðd U¤\ð °e´lð ð ð ð ð ð ð ð rD   rÍ   c                   óF   ‡ — 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 ]A\  }}}}| j                             t          |||rdnd|dz  |||j        ¬¦  «        ¦  «         ŒBd S )Nr   r*   )rÀ   rÁ   rÂ   rÃ   rÅ   rÎ   r;   )	rP   rÈ   r0   rÉ   Ú
ModuleListÚlayersr­   rÍ   r;   )	rS   ÚconfigÚstage_indexrA   rÀ   rÁ   rÅ   rÎ   rU   s	           €rB   rÈ   zUVDocResNetStage.__init__p  s¯   ø€ Ý‰Œ×ÒÑÔÐàÔ& {Ô3ˆÝ”m BÑ'Ô'ˆŒØ?Eð 	ð 	Ñ;ˆK˜ x°ØŒK×ÒÝ"Ø +Ø!-Ø *Ð1˜1˜1°Ø$ q™LØ%Ø)Ø &Ô 2ðñ ô ñ
ô 
ð 
ð 
ð	ð 	rD   rÕ   r�   c                 ó0   — | j         D ]} ||¦  «        }Œ|S r×   )rÞ   )rS   rÕ   Úlayers      rB   rÙ   zUVDocResNetStage.forward‚  s*   € Ø”[ð 	1ð 	1ˆEØ!˜E -Ñ0Ô0ˆMˆMØÐrD   ©	rV   rW   rX   rY   rÈ   rq   r»   rÙ   ra   rb   s   @rB   rÛ   rÛ   m  sd   ø€ € € € € Ø=Ð=ðð ð ð ð ð$ U¤\ð °e´lð ð ð ð ð ð ð ð rD   rÛ   c                   óF   ‡ — 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                 óF  •— t          ¦   «                              ¦   «          t          j        g ¦  «        | _        t          t          |j        ¦  «        ¦  «        D ]]}| j                             t          |j        |         d         |j        |         d         |j	        d|j	        dz  ¬¦  «        ¦  «         Œ^t          j        g ¦  «        | _
        t          t          |j        ¦  «        ¦  «        D ],}t          ||¦  «        }| j
                             |¦  «         Œ-d S )Nr   r*   r   )rÀ   rÁ   r;   rÂ   rÃ   )rP   rÈ   rÉ   rÝ   r)   rL   r?   r­   r½   r;   Úresnet_downr0   rÛ   )rS   rß   r°   rà   rG   rU   s        €rB   rÈ   zUVDocResNet.__init__‹  s  ø€ Ý‰Œ×ÒÑÔÐÝœ=¨Ñ,Ô,ˆÔÝ•s˜6Ô-Ñ.Ô.Ñ/Ô/ð 		ð 		ˆAØÔ×#Ò#ÝØ &Ô 2°1Ô 5°aÔ 8Ø!'Ô!3°AÔ!6°qÔ!9Ø &Ô 2ØØ"Ô.°!Ñ3ðñ ô ñô ð ð õ œ=¨Ñ,Ô,ˆÔÝ ¥ VÔ%:Ñ!;Ô!;Ñ<Ô<ð 	+ð 	+ˆKÝ$ V¨[Ñ9Ô9ˆEØÔ×#Ò# EÑ*Ô*Ð*Ð*ð	+ð 	+rD   rÕ   r�   c                 óZ   — | j         D ]} ||¦  «        }Œ| j        D ]} ||¦  «        }Œ|S r×   )r)   rç   )rS   rÕ   ÚheadrG   s       rB   rÙ   zUVDocResNet.forwardž  sN   € ØÔ$ð 	0ð 	0ˆDØ ˜D Ñ/Ô/ˆMˆMØÔ%ð 	1ð 	1ˆEØ!˜E -Ñ0Ô0ˆMˆMØÐrD   rã   rb   s   @rB   rå   rå   ˆ  sd   ø€ € € € € Ø.Ð.ð+ð +ð +ð +ð +ð& U¤\ð °e´lð ð ð ð ð ð ð ð rD   rå   c                   óV   ‡ — 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 ]0\  }}| j                             t          ||||¬¦  «        ¦  «         Œ1d S )N)rÃ   rÅ   )rP   rÈ   rÉ   rÝ   Úblocksr:   r­   r½   )rS   rß   Úbridge_indexÚbridgerÀ   rÅ   rU   s         €rB   rÈ   zUVDocBridgeBlock.__init__©  s…   ø€ Ý‰Œ×ÒÑÔÐÝ”m BÑ'Ô'ˆŒØÔ% lÔ3ˆØ%+ð 	nð 	nÑ!ˆK˜ØŒK×Ò�~¨k¸;ÐPXÐckÐlÑlÔlÑmÔmÐmÐmð	nð 	nrD   rÕ   rT   r�   c                 ó0   — | j         D ]} ||¦  «        }Œ|S r×   )rí   )rS   rÕ   rT   Úblocks       rB   rÙ   zUVDocBridgeBlock.forward°  s,   € ð
 ”[ð 	1ð 	1ˆEØ!˜E -Ñ0Ô0ˆMˆMØÐrD   )rV   rW   rX   rY   rÈ   rq   r»   r   r   rÙ   ra   rb   s   @rB   rë   rë   ¦  s}   ø€ € € € € ØNÐNðnð nð nð nð nðà”|ðð Ð+Ô,ðð 
Œð	ð ð ð ð ð ð ð rD   rë   c                   óF   ‡ — 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        ¬¦  «        | _
        d S )Nr   r*   r   )rÀ   rÁ   r;   rÂ   rÃ   rj   rÆ   )rÀ   rÁ   r;   rÂ   rÃ   rj   )rP   rÈ   r½   rl   r;   rj   rh   rÑ   rÉ   rÊ   Úconv_up©rS   rß   rU   s     €rB   rÈ   zUVDocPointPositions2D.__init__½  sÇ   ø€ Ý‰Œ×ÒÑÔÐå'ØÔ4°QÔ7¸Ô:ØÔ5°aÔ8¸Ô;ØÔ*ØØÔ&¨!Ñ+ØÔ,ØÔ(ð
ñ 
ô 
ˆŒõ ”yØÔ4°QÔ7¸Ô:ØÔ5°aÔ8¸Ô;ØÔ*ØØÔ&¨!Ñ+ØÔ,ð
ñ 
ô 
ˆŒˆˆrD   rÕ   r�   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S r×   )rÑ   rõ   )rS   rÕ   s     rB   rÙ   zUVDocPointPositions2D.forwardÓ  s*   € ØŸš }Ñ5Ô5ˆØŸš ]Ñ3Ô3ˆØÐrD   rã   rb   s   @rB   ró   ró   º  sd   ø€ € € € € ØNÐNð
ð 
ð 
ð 
ð 
ð, U¤\ð °e´lð ð ð ð ð ð ð ð rD   ró   c                   óJ   — e Zd ZdZdeiZ ej        ¦   «         d„ ¦   «         ZdS )ÚUVDocPreTrainedModelTrÕ   c                 ó�   — t          j        | |¦  «         t          |t          j        ¦  «        r|                     ¦   «          dS dS )zInitialize the weights.N)r   Ú_init_weightsÚ
isinstancerÉ   ÚPReLUÚreset_parameters)rS   Úmodules     rB   rû   z"UVDocPreTrainedModel._init_weightsà  sM   € õ 	Ô% d¨FÑ3Ô3Ð3Ý�f�bœhÑ'Ô'ð 	&Ø×#Ò#Ñ%Ô%Ð%Ð%Ð%ð	&ð 	&rD   N)	rV   rW   rX   Úsupports_gradient_checkpointingrë   Ú_can_record_outputsrq   Úno_gradrû   r>   rD   rB   rù   rù   Ù  sK   € € € € € à&*Ð#àÐ)ðÐð €U„]�_„_ð&ð &ñ „_ð&ð &ð &rD   rù   c                   ór   ‡ — 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                             t          ||¦  «        ¦  «         Œ+|  
                    ¦   «          d S r×   )rP   rÈ   rÉ   rÝ   rï   rL   r?   r:   r­   rë   Ú	post_init)rS   rß   rî   rU   s      €rB   rÈ   zUVDocBridge.__init__é  sŠ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý”m BÑ'Ô'ˆŒÝ!¥# fÔ&:Ñ";Ô";Ñ<Ô<ð 	Gð 	GˆLØŒK×ÒÕ/°¸ÑEÔEÑFÔFÐFÐFØ�ŠÑÔÐÐÐrD   rÕ   rT   r�   c                 óL   — | j         D ]} ||¦  «        }Œt          |¬¦  «        S )N)Úlast_hidden_state)rï   r   )rS   rÕ   rT   râ   Úfeatures        rB   rÙ   zUVDocBridge.forwardð  s7   € ð ”[ð 	+ð 	+ˆEØ�e˜MÑ*Ô*ˆGˆGÝ-ÀÐHÑHÔHÐHrD   )rV   rW   rX   rÈ   r   r   rq   r»   r   r   rÙ   ra   rb   s   @rB   r  r  è  s”   ø€ € € € € ðð ð ð ð ð  ØðIà”|ðIð Ð+Ô,ðIð 
Œð	Ið Ið Iñ „_ñ  ÔðIð Ið Ið Ið IrD   r  z6
    UVDoc backbone model for feature extraction.
    )Úcustom_introc            	       ó†   ‡ — 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                 óN  •— t          ¦   «                              |¦  «         |j        d         d         g}|j        D ]#}|                     |d         d         ¦  «         Œ$|| _        t          |¦  «        | _        t          |¦  «        | _	        |  
                    ¦   «          d S )Nrž   r   r*   )rP   rÈ   r)   r:   r­   Únum_featuresrå   Úresnetr  rï   r  )rS   rß   r  rG   rU   s       €rB   rÈ   zUVDocBackbone.__init__  s�   ø€ Ý‰Œ×Ò˜Ñ Ô Ð àÔ*¨2Ô.¨rÔ2Ð3ˆØÔ)ð 	-ð 	-ˆEØ×Ò  a¤¨¤Ñ,Ô,Ð,Ð,Ø(ˆÔå! &Ñ)Ô)ˆŒÝ! &Ñ)Ô)ˆŒà�ŠÑÔÐÐÐrD   r‡   rT   r�   c                 óà   — |                       |¦  «        } | j        |fi |¤Ž}d}t          | j        ¦  «        D ]\  }}|| j        v r||j        |         fz  }Œ t          ||j        ¬¦  «        S )Nr>   )Úfeature_mapsrÕ   )r  rï   r¤   rM   rJ   rÕ   r   )rS   r‡   rT   rÕ   Úoutputsr  rH   rG   s           rB   rÙ   zUVDocBackbone.forward  s•   € ð Ÿš LÑ1Ô1ˆØ�$”+˜mÐ6Ð6¨vÐ6Ð6ˆàˆÝ# DÔ$4Ñ5Ô5ð 	>ð 	>‰JˆC�Ø˜Ô)Ð)Ð)Ø Ô!6°sÔ!;Ð =Ñ=�øåØ%Ø!Ô/ð
ñ 
ô 
ð 	
rD   )rV   rW   rX   Úhas_attentionsÚbase_model_prefixr$   rÈ   r   r
   r   rq   ÚFloatTensorr   r   r   rÙ   ra   rb   s   @rB   r  r  ü  s­   ø€ € € € € ð €NØ"ÐðÐ2ð ð ð ð ð ð ð Ø Øð
àÔ'ð
ð Ð+Ô,ð
ð 
ð	
ð 
ð 
ñ „^ñ !Ô ñ Ôð
ð 
ð 
ð 
ð 
rD   r  c                   ó\   ‡ — 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          |¦  «        | _	        d S )Nr   r*   )rÀ   rÁ   r;   rÂ   rÃ   rÅ   )
rP   rÈ   r?   rf   r:   Únum_bridge_layersr½   rk   ró   rl   rö   s     €rB   rÈ   zUVDocHead.__init__)  sˆ   ø€ Ý‰Œ×ÒÑÔÐÝ!$ VÔ%;Ô%IÑ!JÔ!JˆÔå .ØÔ/°Ô2°TÔ5KÑKØÔ0°Ô3ØØØØð!
ñ !
ô !
ˆÔõ &;¸6Ñ%BÔ%BˆÔ"Ð"Ð"rD   rÕ   rT   r�   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S r×   )rk   rl   )rS   rÕ   rT   s      rB   rÙ   zUVDocHead.forward8  s0   € ð
 ×-Ò-¨mÑ<Ô<ˆØ×2Ò2°=ÑAÔAˆØÐrD   )
rV   rW   rX   rÈ   rq   r»   r   r   rÙ   ra   rb   s   @rB   r  r  (  sz   ø€ € € € € ðCð Cð Cð Cð Cðà”|ðð Ð+Ô,ðð 
ŒÔ	ð	ð ð ð ð ð ð ð rD   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          |¦  «        | _        |                      ¦   «          d S r×   )rP   rÈ   r  rf   r  r  ré   r  rö   s     €rB   rÈ   zUVDocModel.__init__I  sR   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å% fÔ&<Ñ=Ô=ˆŒÝ˜fÑ%Ô%ˆŒ	Ø�ŠÑÔÐÐÐrD   r‡   rT   r�   c                 óœ   —  | j         |fi |¤Ž}t          j        |j        d¬¦  «        } | j        |fi |¤Ž}t          ||j        ¬¦  «        S )Nr*   )Údim)r  rÕ   )r  rq   Úcatr  ré   r   rÕ   )rS   r‡   rT   Úbackbone_outputsÚfused_outputsr  s         rB   rÙ   zUVDocModel.forwardP  sp   € ð )˜4œ=¨Ð@Ð@¸Ð@Ð@ÐÝœ	Ð"2Ô"?ÀQÐGÑGÔGˆØ%˜DœI mÐ>Ð>°vÐ>Ð>Ðå-Ø/Ø*Ô8ð
ñ 
ô 
ð 	
rD   )rV   rW   rX   rd   rÈ   r   r   rq   r  r   r   r_   r   rÙ   ra   rb   s   @rB   r  r  B  s¢   ø€ € € € € ð˜{ð ð ð ð ð ð ð Øð
àÔ'ð
ð Ð+Ô,ð
ð 
ˆuÔ Ô	!Ð$BÑ	Bð	
ð 
ð 
ñ „^ñ Ôð
ð 
ð 
ð 
ð 
rD   r  )r  r  r$   rt   rd   r  rù   )GÚcollections.abcr   rq   Ú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$   rd   rt   r½   ÚModulerÍ   rÛ   rå   rë   ró   rù   r  r  r  r  Ú__all__r>   rD   rB   ú<module>r=     sN  ðð  %Ð $Ð $Ð $Ð $Ð $à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .à !Ð !Ð !Ð !Ð !Ð !ðð ð ð ð ð ð ð ð ð ð ð ð 4Ð 3Ð 3Ð 3Ð 3Ð 3Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø NÐ NÐ NÐ NÐ NÐ NÐ NÐ NØ -Ð -Ð -Ð -Ð -Ð -Ø &Ð &Ð &Ð &Ð &Ð &Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ *Ð *Ð *Ð *Ð *Ð *Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø Ð Ð Ð Ð Ð Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø ^Ð ^Ð ^Ð ^Ð ^Ð ^ð €Ð;Ð<Ñ<Ô<ØðK(ð K(ð K(ð K(ð K(Ð-Ð/?ñ K(ô K(ñ „ñ =Ô<ðK(ð\ €Ð;Ð<Ñ<Ô<Øð(ð (ð (ð (ð (Ð"ñ (ô (ñ „ñ =Ô<ð(ð> Ø	€�:ÐÑÔðlð lð lð lð lÐ,ñ lô lñ Ôñ „ðlð^
ð 
ð 
ð 
ð 
Ð%ñ 
ô 
ð 
ð:;ð ;ð ;ð ;ð ;˜œñ ;ô ;ð ;ð|ð ð ð ð �r”yñ ô ð ð6ð ð ð ð �"”)ñ ô ð ð<ð ð ð ð Ð1ñ ô ð ð(ð ð ð ð ˜BœIñ ô ð ð> ð&ð &ð &ð &ð &Ð:ñ &ô &ñ „ð&ðIð Ið Ið Ið IÐ&ñ Iô Ið Ið( €ððñ ô ð
$
ð $
ð $
ð $
ð $
�MÐ#7ñ $
ô $
ñô ð
$
ðNð ð ð ð �”	ñ ô ð ð4 €ððñ ô ð
ð 
ð 
ð 
ð 
Ð%ñ 
ô 
ñô ð
ð2ð ð €€€rD   