+
    œ°³j\U  ã                   ó„  € ^ RI Ht ^ RIt^ RIHt ^ RIHu Ht ^ RIH	t	 ^RI
Ht ^RIHtHtHtHt ^RIHt ^RIHt ^RIHt ^R	IHtHt ^R
IHtHt ^RIHt ^RIH t H!t! ^RI"H#t# ^RI$H%t% ^RI&H't'H(t(H)t) ^RI*H+t+H,t, ^RI-H.t. ^RI/H0t0 ^RI1H2t2 ^RI3H4t4 ^RI5H6t6 ](! RR7      ]	 ! R R]]4      4       4       t7](! RR7      ]	 ! R R]4      4       4       t8](].! R8R7       ! R R]4      4       4       t9 ! R R ]44      t: ! R! R"]Pv                  4      t< ! R# R$]Pv                  4      t= ! R% R&]Pv                  4      t> ! R' R(]4      t? ! R) R*]Pv                  4      t@]( ! R+ R,]64      4       tA ! R- R.]A4      tB](! R/R07       ! R1 R2]]A4      4       tC ! R3 R4]Pv                  4      tD](! R5R07       ! R6 R7]A4      4       tE. R9OtFR# ):é    )Ú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                   ó^   a a€ ] tR t^0t oRtRtRtRtRtRt	R	t
^tV 3R ltV3R ltRtVtV ;t# )
ÚUVDocBackboneConfigal  
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_backboneNc                ó‚  <€ V P                    Uu. uF  p\        V4      NK  	  upV n        R .\        ^\        V P                   4      ^,           4       Uu. uF  pRV 2NK
  	  up,           V n        V P                  VP                  RR4      VP                  RR4      R7       \        SV `   ! R/ VB  R# u upi u upi )ÚstemÚstageÚout_indicesNÚout_features)r'   r(   © )	Ústage_configsÚlenÚdepthsÚrangeÚstage_namesÚ"set_output_features_output_indicesÚpopÚsuperÚ__post_init__)ÚselfÚkwargsÚstagesÚidxÚ	__class__s   &,  €Úh/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/models/uvdoc/modular_uvdoc.pyr2   Ú!UVDocBackboneConfig.__post_init__w   s®   ø€ Ø15×1CÒ1CÓDÑ1C v”s˜6–{Ñ1CÑDˆŒØ"˜8ÄÀaÌÈT×M_ÑM_ÓI`ÐcdÕIdÔ@eÓ&fÑ@e¸¨¨s¨e£}Ñ@eÑ&fÕfˆÔØ×/Ñ/ØŸ
™
 =°$Ó7ÀfÇjÁjÐQ_ÐaeÓFfð 	0ô 	
ô 	‰ÒÑ' Ô'ùò EùÚ&fs   �B7ÁB<c                ó¤  <€ V ^8„  d   Qh/ S[ S[,          R,          ;R&   S[ S[,          R,          ;R&   S[S[ S[,          S[S[R3,          ,          ,          ;R&   S[S[S[S[S[S[S[3,          S[ S[S[,          ,          ,          ,          ,          ;R&   S[S[S[S[R3,          S[ S[,          ,          ,          ,          ;R&   S[;R&   # )	é   NÚ_out_featuresÚ_out_indices.Úresnet_headÚresnet_configsr*   Úkernel_size)ÚlistÚstrÚintr   ÚtupleÚbool)ÚformatÚ__classdict__s   "€r8   Ú__annotate__Ú UVDocBackboneConfig.__annotate__0   sÆ   ø‡ ‚ ñ$ ™•9˜tÕ#Ñ*ñ% ñ& ‘s•)˜dÕ"Ñ)ñ' ñ* ™$™s�)¡e©C°¨H¥oÕ5Õ6ñ ñ+ ñ4 ™X¡e©C±±c¹4Ð,?Õ&@Á4ÉÉdÍ
ÕCSÕ&SÕTÕUñ ñ5 ñ` ™H¡U©3°¨8¥_±t¹CµyÕ%@ÕAÕBñ ña ñJ ÑòK ó    )r,   r.   ))é   é    )rL   rL   )))rL   rL   é   F©rL   rL   rK   FrN   ))rL   é@   rM   T©rO   rO   rK   FrP   rP   ))rO   é€   rM   T©rQ   rQ   rK   FrR   rR   rR   rR   )))rQ   rM   )©rQ   r;   ))rQ   é   ))rQ   é   )rQ   rK   rS   )©rQ   é   )rQ   é   )rQ   é   ))rQ   é   rV   )rQ   é   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú
model_typer<   r=   r>   r?   r*   r@   r2   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__Ú__classcell__©r7   rG   s   @@r8   r"   r"   0   sF   ù‡ € ñð "€Jà&*€MØ%)€Lð:€Kð
Y€Nð,F€Mð* €Kõ(÷O … rJ   r"   c                   óf   a a€ ] tR t^€t oRtRtR]/tRtRt	Rt
^tR
tRtV 3R ltV3R ltR	tVtV ;t# )Ú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Úreflectc                ój   <€ \        RR V P                  RR/VB w  V n        p\        SV `  ! R/ VB  R# )rj   Údefault_config_typer#   Nr)   )r   rj   r1   r2   )r3   r4   r7   s   &,€r8   r2   ÚUVDocConfig.__post_init__˜   sG   ø€ Ü'Lñ (
Ø ×0Ñ0ð(
à 0ð(
ð ñ(
Ñ$ˆÔ˜fô
 	‰ÒÑ' Ô'rJ   c                óø   <€ V ^8„  d   Qh/ S[ S[,          R,          ;R&   S[;R&   S[;R&   S[;R&   S[S[,          S[S[R3,          ,          ;R&   S[S[S[,          S[S[R3,          ,          ,          ;R&   # )	r;   Nrj   Ú
hidden_actÚpadding_moder@   .Úbridge_connectorÚout_point_positions2D)Údictr
   rB   rC   rA   rD   r   )rF   rG   s   "€r8   rH   ÚUVDocConfig.__annotate__€   s…   ø‡ ‚ ñ  Ñ,Õ,¨tÕ3Ñ:ñ! ñ$ Ññ% ñ& Ñ!ñ' ñ( Ññ) ñ* ™3•i¡%©¨S¨¥/Õ1Ñ>ñ+ ñ, $¡D©¥I±±c¸3°hµÕ$?Õ@ÑWò- rJ   )rj   )rQ   rQ   ))rQ   rL   )rL   r;   )r\   r]   r^   r_   r`   ra   r   Úsub_configsrj   rq   rr   r@   rs   rt   r2   rb   rc   rd   re   rf   s   @@r8   rh   rh   €   sG   ù‡ € ñ	ð €JØ$ jÐ1€KØ6:€Oà€JØ!€LØ€KØ4>ÐØCWÐõ(÷1 … rJ   rh   )Úbackendsc                   ót   a € ] tR t^¡t o RtRtRRRR/t]P                  t	V 3R lR lt
RV 3R lR	 lltR
tV tR# )ÚUVDocImageProcessorTÚheightiÈ  Úwidthéè  c                óò   <€ V ^8„  d   QhRS[ R,          RS[RS[RS[RS[RS[RS[S[ S[,          ,          R	,          R
S[S[ S[,          ,          R	,          RS[R	,          RS[S[,          R	,          RS[/# )r;   Úimagesztorch.TensorÚ	do_resizeÚsizeÚ
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanNÚ	image_stdÚdisable_groupingÚreturn_tensorsÚreturn)rA   rE   r   ÚfloatrB   r   r   )rF   rG   s   "€r8   rH   Ú UVDocImageProcessor.__annotate__©   s¨   ø€ ÷ /
ñ /
á�^Õ$ð/
ñ ð/
ñ ð	/
ñ
 ð/
ñ ð/
ñ ð/
ñ ™D¡�KÕ'¨$Õ.ð/
ñ ™4¡�;Õ&¨Õ-ð/
ñ  �+ð/
ñ ™jÕ(¨4Õ/ð/
ñ 
ñ/
rJ   c           	     óè  € \        WR 7      w  rÍ/ pVP                  4        F-  w  ppV P                  VWEWgV4      pVR. RORR3,          pVWï&   K/  	  \        Wí4      pVP	                  4       p\        VV	R 7      w  rÍ/ pVP                  4        FC  w  ppV'       d1   \
        P                  ! VVP                  VP                  3RRR7      pVVV&   KE  	  \        VV4      p\        RVRV/V
R.R7      # )	)r‡   :NNNÚbilinearT©r�   ÚmodeÚalign_cornersÚpixel_valuesÚoriginal_images)ÚdataÚtensor_typeÚskip_tensor_conversion)r;   rM   r   )
r   ÚitemsÚrescale_and_normalizer   ÚcopyÚFÚinterpolater{   r|   r   )r3   r   r€   r�   r‚   rƒ   r„   r…   r†   r‡   rˆ   r4   Úgrouped_imagesÚgrouped_images_indexÚprocessed_images_groupedÚshapeÚstacked_imagesÚrescale_and_normalize_imagesr’   Úinterpolated_images_groupedr‘   s   &&&&&&&&&&&,         r8   Ú_preprocessÚUVDocImageProcessor._preprocess©   s   € ô 0EÀVÔ/oÑ,ˆØ#%Ð Ø%3×%9Ñ%9Ö%;Ñ!ˆE�>Ø!×7Ñ7Ø 
¸LÐV_óˆNð ,¨Aªy¸!¸QÐ,>Õ?ˆNØ.<Ð$Ó+ñ &<ô (6Ð6NÓ'eÐ$à6×;Ñ;Ó=ˆä/DØ(Ð;Kô0
Ñ,ˆð ')Ð#à%3×%9Ñ%9Ö%;Ñ!ˆE�>çÜ!"§¢Ø"¨$¯+©+°t·z±zÐ)BÈÐcgô"�ð 2@Ð'¨Ó.ñ &<ô &Ð&AÐCWÓXˆäØ  ,Ð0AÀ?ÐSØ&Ø$5Ð#6ô
ð 	
rJ   c                ó¤   <€ V ^8„  d   QhRS[ P                  RS[S[ P                  ,          RS[RS[S[S[S[ P                  3,          ,          /# )r;   Ú
predictionr’   Úscaler‰   )ÚtorchÚTensorrA   rŠ   ru   rB   )rF   rG   s   "€r8   rH   r‹   Ú   sS   ø€ ÷ 5ñ 5á—L‘Lð5ñ ™eŸl™lÕ+ð5ñ ð	5ñ
 
‰d‘3™Ÿ™Ð$Õ%Õ	&ñ5rJ   c                óÈ  € \        V4      p\        P                  ! R\        V4      VP                  R7      p. p\        V4       EF  w  rgVP                  ^8X  d   VP                  ^ 4      pVP                  VP                  4      pVP                  R,          w  r‰\        P                  ! WV^,            W‰3RRR7      p
V
P                  ^ ^^^4      p\        P                  ! W{RR7      pVP                  ^ 4      P                  ^^^ 4      pWÓ,          pVP                  R.R7      P                  \        P                   RRR	7      pVP#                  R
V/4       EK  	  V# )aN  
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)
)Údevice:r;   NNr�   TrŽ   )r�   )ÚdimsF)ÚdtypeÚnon_blockingr˜   r   r)   éÿÿÿÿ)rA   r§   ÚfullrŠ   rª   Ú	enumerateÚndimÚ	unsqueezeÚtorž   r™   rš   ÚpermuteÚgrid_sampleÚsqueezeÚflipÚuint8Úappend)r3   r¥   r’   r¦   Ú
image_listÚresultsÚiÚoriginal_imageÚoriginal_heightÚoriginal_widthÚupsampled_meshÚrearranged_meshÚ	rectifiedÚimages   &&&&          r8   Ú#post_process_document_rectificationÚ7UVDocImageProcessor.post_process_document_rectificationÚ   sF  € ô& ˜/Ó*ˆ
Ü—
’
˜2œu U›|°J×4EÑ4EÔFˆØˆä!*¨:×!6ÑˆAà×"Ñ" aÔ'Ø!/×!9Ñ!9¸!Ó!<�Ø+×.Ñ.¨z×/@Ñ/@ÓAˆNØ.<×.BÑ.BÀ2Õ.FÑ+ˆOô Ÿ]š]Ø˜q 1�uÐ%Ø%Ð6ØØ"ô	ˆNð -×4Ñ4°Q¸¸1¸aÓ@ˆOô Ÿš nÐUYÔZˆIð ×%Ñ% aÓ(×0Ñ0°°A°qÓ9ˆEð •MˆEà—J‘J R D�JÓ)×,Ñ,´5·;±;ÈTÐX]Ð,Ó^ˆEà�N‰N˜H eÐ,×-ñ9 "7ð< ˆrJ   r)   N)g     ào@)r\   r]   r^   r_   r‚   r€   r�   r   ÚBILINEARÚresampler¢   rÄ   rc   rd   ©rG   s   @r8   rz   rz   ¡   sD   ø‡ € ð €JØ€IØ�c˜7 CÐ(€DØ!×*Ñ*€H÷/
ð /
÷b5÷ 5ð 5rJ   rz   c                   óF   a a€ ] tR tRt oRtRV3R lV 3R llltRtVtV ;t# )ÚUVDocConvLayeri  z<Convolutional layer with batch normalization and activation.c                óP   <€ V ^8„  d   QhRS[ RS[ RS[ RS[ RS[ RS[RS[RS[ R	S[/	# )
r;   Úin_channelsÚout_channelsr@   ÚstrideÚpaddingrr   ÚbiasÚdilationÚ
activation)rC   rB   rE   )rF   rG   s   "€r8   rH   ÚUVDocConvLayer.__annotate__  se   ø€ ÷ 
ñ 
áð
ñ ð
ñ ð	
ñ
 ð
ñ ð
ñ ð
ñ ð
ñ ð
ñ ñ
rJ   c
                ój   <€ \         S
V `  4        \        P                  ! VVVVVVVVR 7      V n        R# ))rÐ   r@   rÎ   rÏ   rr   rÑ   N)r1   Ú__init__ÚnnÚConv2dÚconvolution)r3   rÌ   rÍ   r@   rÎ   rÏ   rr   rÐ   rÑ   rÒ   r7   s   &&&&&&&&&&€r8   rÕ   ÚUVDocConvLayer.__init__  s9   ø€ ô 	‰ÑÔäŸ9š9ØØØØ#ØØØ%Øô	
ˆÖrJ   )rØ   )rK   rM   r   ÚzerosFrM   Úrelu)	r\   r]   r^   r_   r`   rÕ   rc   rd   re   rf   s   @@r8   rÊ   rÊ     s   ù‡ € ÙF÷
÷ 
õ 
rJ   rÊ   c                   óX   a a€ ] tR tRt oRtRV3R lV 3R llltV3R lR ltRtVtV ;t	# )	ÚUVDocResidualBlocki/  z*Base residual block with dilation support.c                óJ   <€ V ^8„  d   QhRS[ RS[ RS[ RS[ RS[ RS[ RS[RS[/# )	r;   rÌ   rÍ   r@   rÎ   rÏ   rÑ   Ú
downsamplerÒ   )rC   rE   rB   )rF   rG   s   "€r8   rH   ÚUVDocResidualBlock.__annotate__2  se   ø€ ÷ 0Vñ 0Váð0Vñ ð0Vñ ð	0Vñ
 ð0Vñ ð0Vñ ð0Vñ ð0Vñ ñ0VrJ   c	                ó\  <€ \         S	V `  4        V'       d   \        VVVVV^,          RRR7      M\        P                  ! 4       V n        \        VVVVVVRR7      V n        \        VVV^VRVRR7      V n        Ve   \        V,          V n	        R# \        P                  ! 4       V n	        R# )r;   TN)rÌ   rÍ   r@   rÎ   rÏ   rÐ   rÒ   )rÌ   rÍ   r@   rÎ   rÏ   rÑ   rÐ   )rÌ   rÍ   r@   rÎ   rÏ   rÐ   rÑ   rÒ   )
r1   rÕ   rÊ   rÖ   ÚIdentityÚ	conv_downÚ
conv_startÚ
conv_finalr   Úact_fn)
r3   rÌ   rÍ   r@   rÎ   rÏ   rÑ   rß   rÒ   r7   s
   &&&&&&&&&€r8   rÕ   ÚUVDocResidualBlock.__init__2  s³   ø€ ô 	‰ÑÔ÷ ô Ø'Ø)Ø'ØØ# qÕ(ØØõô —’“ð 	Œô )Ø#Ø%Ø#ØØØØô
ˆŒô )Ø$Ø%Ø#ØØØØØô	
ˆŒð -7Ò,B”f˜ZÕ(ˆŽÌÏÊËˆŽrJ   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# ©r;   Úhidden_statesr‰   ©r§   r¨   )rF   rG   s   "€r8   rH   rà   d  s#   ø€ ÷ ñ ¡U§\¡\ð ±e·l±lñ rJ   c                óž   € V P                  V4      pV P                  V4      pV P                  V4      pW,           pV P                  V4      pV# ©N)rã   rä   rå   ræ   )r3   rê   Úresiduals   && r8   ÚforwardÚUVDocResidualBlock.forwardd  sH   € Ø—>‘> -Ó0ˆØŸ™¨Ó6ˆØŸ™¨Ó6ˆØ%Õ0ˆØŸ™ MÓ2ˆØÐrJ   )ræ   rã   rå   rä   )rM   r   rM   FrÛ   ©
r\   r]   r^   r_   r`   rÕ   rï   rc   rd   re   rf   s   @@r8   rÝ   rÝ   /  s$   ù‡ € Ù4÷0Võ 0V÷d÷ ð rJ   rÝ   c                   óH   a a€ ] tR tRt oRtV 3R ltV3R lR ltRtVtV ;t	# )ÚUVDocResNetStageim  z3A ResNet stage containing multiple residual blocks.c                ó$  <€ \         SV `  4        VP                  V,          p\        P                  ! . 4      V n        V FL  w  rErgV P
                  P                  \        TTV'       d   ^M^V^,          VVVP                  R7      4       KN  	  R# )r;   )rÌ   rÍ   rÎ   rÏ   rÑ   rß   r@   N)	r1   rÕ   r?   rÖ   Ú
ModuleListÚlayersr¹   rÝ   r@   )	r3   ÚconfigÚstage_indexr5   rÌ   rÍ   rÑ   rß   r7   s	   &&&     €r8   rÕ   ÚUVDocResNetStage.__init__p  s|   ø€ Ü‰ÑÔà×&Ñ& {Õ3ˆÜ—m’m BÓ'ˆŒÛ?EÑ;ˆK xØ�K‰K×ÑÜ"Ø +Ø!-ß *™1°Ø$ q�LØ%Ø)Ø &× 2Ñ 2ôö
ó @FrJ   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# ré   rë   )rF   rG   s   "€r8   rH   ÚUVDocResNetStage.__annotate__‚  ó#   ø€ ÷ ñ ¡U§\¡\ð ±e·l±lñ rJ   c                ó<   € V P                    F  pV! V4      pK  	  V# rí   ©rö   )r3   rê   Úlayers   && r8   rï   ÚUVDocResNetStage.forward‚  s    € Ø—[”[ˆEÙ! -Ó0ŠMñ !àÐrJ   rþ   rñ   rf   s   @@r8   ró   ró   m  s   ù‡ € Ù=õ÷$÷ ð rJ   ró   c                   óH   a a€ ] tR tRt oRtV 3R ltV3R lR ltRtVtV ;t	# )ÚUVDocResNetiˆ  z$Initial resnet_head and resnet_down.c                óX  <€ \         SV `  4        \        P                  ! . 4      V n        \        \        VP                  4      4       Fw  pV P                  P                  \        VP                  V,          ^ ,          VP                  V,          ^,          VP                  ^VP                  ^,          R7      4       Ky  	  \        P                  ! . 4      V n
        \        \        VP                  4      4       F)  p\        W4      pV P                  P                  V4       K+  	  R# )r   )rÌ   rÍ   r@   rÎ   rÏ   N)r1   rÕ   rÖ   rõ   r>   r-   r+   r¹   rÊ   r@   Úresnet_downr?   ró   )r3   r÷   r¼   rø   r&   r7   s   &&   €r8   rÕ   ÚUVDocResNet.__init__‹  sà   ø€ Ü‰ÑÔÜŸ=š=¨Ó,ˆÔÜ”s˜6×-Ñ-Ó.Ö/ˆAØ×Ñ×#Ñ#ÜØ &× 2Ñ 2°1Õ 5°aÕ 8Ø!'×!3Ñ!3°AÕ!6°qÕ!9Ø &× 2Ñ 2ØØ"×.Ñ.°!Õ3ôöñ 0ô Ÿ=š=¨Ó,ˆÔÜ ¤ V×%:Ñ%:Ó!;Ö<ˆKÜ$ VÓ9ˆEØ×Ñ×#Ñ# EÖ*ó =rJ   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# ré   rë   )rF   rG   s   "€r8   rH   ÚUVDocResNet.__annotate__ž  s#   ø€ ÷ ñ ¡U§\¡\ð ±e·l±lñ rJ   c                ór   € V P                    F  pV! V4      pK  	  V P                   F  pV! V4      pK  	  V# rí   )r>   r  )r3   rê   Úheadr&   s   &&  r8   rï   ÚUVDocResNet.forwardž  s<   € Ø×$Ô$ˆDÙ  Ó/ŠMñ %à×%Ô%ˆEÙ! -Ó0ŠMñ &àÐrJ   )r  r>   rñ   rf   s   @@r8   r  r  ˆ  s   ù‡ € Ù.õ+÷&÷ ð rJ   r  c                   óH   a a€ ] tR tRt oRtV 3R ltV3R lR ltRtVtV ;t	# )ÚUVDocBridgeBlocki¦  zDBridge module with dilated convolutions for long-range dependencies.c           
     óâ   <€ \         SV `  4        \        P                  ! . 4      V n        VP
                  V,          pV F+  w  rEV P                  P                  \        WDWUR 7      4       K-  	  R# ))rÏ   rÑ   N)r1   rÕ   rÖ   rõ   Úblocksr*   r¹   rÊ   )r3   r÷   Úbridge_indexÚbridgerÌ   rÑ   r7   s   &&&   €r8   rÕ   ÚUVDocBridgeBlock.__init__©  sU   ø€ Ü‰ÑÔÜ—m’m BÓ'ˆŒØ×%Ñ% lÕ3ˆÛ%+Ñ!ˆKØ�K‰K×Ñœ~¨kÐPXÔlÖmó &,rJ   c                ód   <€ V ^8„  d   QhRS[ P                  RS[S[,          RS[ P                  /# ©r;   rê   r4   r‰   ©r§   r¨   r   r   )rF   rG   s   "€r8   rH   ÚUVDocBridgeBlock.__annotate__°  s7   ø€ ÷ ñ á—|‘|ðñ Ñ+Õ,ðñ 
�‰ñ	rJ   c                ó<   € V P                    F  pV! V4      pK  	  V# rí   ©r  )r3   rê   r4   Úblocks   &&, r8   rï   ÚUVDocBridgeBlock.forward°  s"   € ð
 —[”[ˆEÙ! -Ó0ŠMñ !àÐrJ   r  rñ   rf   s   @@r8   r  r  ¦  s   ù‡ € ÙNõn÷÷ ð rJ   r  c                   óH   a a€ ] tR tRt oRtV 3R ltV3R lR ltRtVtV ;t	# )ÚUVDocPointPositions2Diº  zDModule for predicting 2D point positions for document rectification.c           
     óü  <€ \         SV `  4        \        VP                  ^ ,          ^ ,          VP                  ^ ,          ^,          VP                  ^VP                  ^,          VP
                  VP                  R7      V n        \        P                  ! VP                  ^,          ^ ,          VP                  ^,          ^,          VP                  ^VP                  ^,          VP
                  R7      V n
        R# )r   )rÌ   rÍ   r@   rÎ   rÏ   rr   rÒ   )rÌ   rÍ   r@   rÎ   rÏ   rr   N)r1   rÕ   rÊ   rt   r@   rr   rq   rã   rÖ   r×   Úconv_up©r3   r÷   r7   s   &&€r8   rÕ   ÚUVDocPointPositions2D.__init__½  sÇ   ø€ Ü‰ÑÔä'Ø×4Ñ4°QÕ7¸Õ:Ø×5Ñ5°aÕ8¸Õ;Ø×*Ñ*ØØ×&Ñ&¨!Õ+Ø×,Ñ,Ø×(Ñ(ô
ˆŒô —y’yØ×4Ñ4°QÕ7¸Õ:Ø×5Ñ5°aÕ8¸Õ;Ø×*Ñ*ØØ×&Ñ&¨!Õ+Ø×,Ñ,ô
ˆŽrJ   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# ré   rë   )rF   rG   s   "€r8   rH   Ú"UVDocPointPositions2D.__annotate__Ó  rü   rJ   c                óJ   € V P                  V4      pV P                  V4      pV# rí   ©rã   r  )r3   rê   s   &&r8   rï   ÚUVDocPointPositions2D.forwardÓ  s$   € ØŸ™ }Ó5ˆØŸ™ ]Ó3ˆØÐrJ   r#  rñ   rf   s   @@r8   r  r  º  s   ù‡ € ÙNõ
÷,÷ ð rJ   r  c                   óZ   a € ] tR tRt o RtR]/t]P                  ! 4       R 4       t	Rt
V tR# )ÚUVDocPreTrainedModeliÙ  Trê   c                ó–   € \         P                  ! W4       \        V\        P                  4      '       d   VP                  4        R# R# )zInitialize the weights.N)r   Ú_init_weightsÚ
isinstancerÖ   ÚPReLUÚreset_parameters)r3   Úmodules   &&r8   r(  Ú"UVDocPreTrainedModel._init_weightsà  s4   € ô 	×%Ò% dÔ3Ü�fœbŸh™h×'Ò'Ø×#Ñ#Ö%ñ (rJ   r)   N)r\   r]   r^   r_   Úsupports_gradient_checkpointingr  Ú_can_record_outputsr§   Úno_gradr(  rc   rd   rÈ   s   @r8   r&  r&  Ù  s3   ø‡ € à&*Ð#àÐ)ðÐð ‡]‚]ƒ_ñ&ó ö&rJ   r&  c                   óX   a a€ ] tR tRt oV 3R lt]]V3R lR l4       4       tRtVt	V ;t
# )ÚUVDocBridger}   c                ó  <€ \         SV `  V4       \        P                  ! . 4      V n        \        \        VP                  4      4       F'  pV P                  P                  \        W4      4       K)  	  V P                  4        R # rí   )r1   rÕ   rÖ   rõ   r  r-   r+   r*   r¹   r  Ú	post_init)r3   r÷   r  r7   s   && €r8   rÕ   ÚUVDocBridge.__init__é  s\   ø€ Ü‰Ñ˜Ô Ü—m’m BÓ'ˆŒÜ!¤# f×&:Ñ&:Ó";Ö<ˆLØ�K‰K×ÑÔ/°ÓEÖFñ =à�‰ÖrJ   c                ód   <€ V ^8„  d   QhRS[ P                  RS[S[,          RS[ P                  /# r  r  )rF   rG   s   "€r8   rH   ÚUVDocBridge.__annotate__ò  s<   ø€ ÷ Iñ Iá—|‘|ðIñ Ñ+Õ,ðIñ 
�‰ñ	IrJ   c                óP   € V P                    F  pV! V4      pK  	  \        XR 7      # ))Úlast_hidden_state)r  r   )r3   rê   r4   rÿ   Úfeatures   &&,  r8   rï   ÚUVDocBridge.forwardð  s'   € ð —[”[ˆEÙ˜MÓ*ŠGñ !ä-ÀÔHÐHrJ   )r  )r\   r]   r^   r_   rÕ   r   r   rï   rc   rd   re   rf   s   @@r8   r2  r2  è  s.   ù‡ € õð  Ø÷Ió ó  ÷Ið IrJ   r2  z6
    UVDoc backbone model for feature extraction.
    )Úcustom_introc                   ó‚   a a€ ] tR tRt oRtRtV3R lV 3R llt]]]	V3R lR l4       4       4       t
V3R ltR	tVtV ;t# )
ÚUVDocBackboneiü  FÚbackbonec                ó    <€ V ^8„  d   QhRS[ /# ©r;   r÷   ©r"   )rF   rG   s   "€r8   rH   ÚUVDocBackbone.__annotate__  s   ø€ ÷ ñ Ñ2ñ rJ   c                ó,  <€ \         SV `  V4       VP                  R,          R,          .pVP                   F"  pVP	                  V^ ,          ^,          4       K$  	  W n        \        V4      V n        \        V4      V n	        V P                  4        R# )rM   Nr®   )r1   rÕ   r>   r*   r¹   Únum_featuresr  Úresnetr2  r  r4  )r3   r÷   rE  r&   r7   s   &&  €r8   rÕ   ÚUVDocBackbone.__init__  sv   ø€ Ü‰Ñ˜Ô à×*Ñ*¨2Õ.¨rÕ2Ð3ˆØ×)Ô)ˆEØ×Ñ  a¥¨¥Ö,ñ *à(Ôä! &Ó)ˆŒÜ! &Ó)ˆŒà�‰ÖrJ   c                óP   <€ V ^8„  d   QhRS[ P                  RS[S[,          RS[/# ©r;   r‘   r4   r‰   )r§   ÚFloatTensorr   r   r   )rF   rG   s   "€r8   rH   rC    s5   ø€ ÷ 
ñ 
á×'Ñ'ð
ñ Ñ+Õ,ð
ñ 
ñ	
rJ   c                ó  € V P                  V4      pV P                  ! V3/ VB pRp\        V P                  4       F1  w  rgWpP                  9   g   K  WTP
                  V,          3,          pK3  	  \        VVP
                  R 7      # ))Úfeature_mapsrê   r)   )rF  r  r°   r.   r(   rê   r   )r3   r‘   r4   rê   ÚoutputsrL  r6   r&   s   &&,     r8   rï   ÚUVDocBackbone.forward  s~   € ð Ÿ™ LÓ1ˆØ—+’+˜mÑ6¨vÑ6ˆàˆÜ# D×$4Ñ$4Ö5‰JˆCØ×)Ñ)Ö)Ø×!6Ñ!6°sÕ!;Ð =Õ=’ñ 6ô Ø%Ø!×/Ñ/ô
ð 	
rJ   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # rA  rB  )rF   rG   s   "€r8   rH   rC  ü  s   ø‡ ‚ ñ  Ñò rJ   )r  rE  rF  )r\   r]   r^   r_   Úhas_attentionsÚbase_model_prefixrÕ   r   r	   r   rï   rb   rc   rd   re   rf   s   @@r8   r>  r>  ü  sG   ù‡ € ð €NØ"Ð÷ó ð Ø Ø÷
ó ó !ó ð
÷5 … rJ   r>  c                   óD   a a€ ] tR tRt oV 3R ltV3R lR ltRtVtV ;t# )Ú	UVDocHeadi)  c           	     ó  <€ \         SV `  4        \        VP                  P                  4      V n        \        VP                  ^ ,          V P
                  ,          VP                  ^,          ^^^ ^R7      V n        \        V4      V n	        R# )r   )rÌ   rÍ   r@   rÎ   rÏ   rÑ   N)
r1   rÕ   r+   rj   r*   Únum_bridge_layersrÊ   rs   r  rt   r  s   &&€r8   rÕ   ÚUVDocHead.__init__*  sv   ø€ Ü‰ÑÔÜ!$ V×%;Ñ%;×%IÑ%IÓ!JˆÔä .Ø×/Ñ/°Õ2°T×5KÑ5KÕKØ×0Ñ0°Õ3ØØØØô!
ˆÔô &;¸6Ó%BˆÖ"rJ   c                óx   <€ V ^8„  d   QhRS[ P                  RS[S[,          RS[ P                   P                  /# r  r  )rF   rG   s   "€r8   rH   ÚUVDocHead.__annotate__9  s=   ø€ ÷ ñ á—|‘|ðñ Ñ+Õ,ðñ 
�‰×	Ñ	ñ	rJ   c                óJ   € V P                  V4      pV P                  V4      pV# rí   )rs   rt   )r3   rê   r4   s   &&,r8   rï   ÚUVDocHead.forward9  s*   € ð
 ×-Ñ-¨mÓ<ˆØ×2Ñ2°=ÓAˆØÐrJ   )rs   rU  rt   )	r\   r]   r^   r_   rÕ   rï   rc   rd   re   rf   s   @@r8   rS  rS  )  s   ù‡ € õC÷÷ ð rJ   rS  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                   ód   a a€ ] tR tRt oV3R lV 3R llt]]V3R lR l4       4       tRtVt	V ;t
# )Ú
UVDocModeliC  c                ó    <€ V ^8„  d   QhRS[ /# rA  )rh   )rF   rG   s   "€r8   rH   ÚUVDocModel.__annotate__J  s   ø€ ÷ ñ ™{ñ rJ   c                óš   <€ \         SV `  V4       \        VP                  4      V n        \        V4      V n        V P                  4        R # rí   )r1   rÕ   r>  rj   r?  rS  r	  r4  r  s   &&€r8   rÕ   ÚUVDocModel.__init__J  s8   ø€ Ü‰Ñ˜Ô ä% f×&<Ñ&<Ó=ˆŒÜ˜fÓ%ˆŒ	Ø�‰ÖrJ   c                ó„   <€ V ^8„  d   QhRS[ P                  RS[S[,          RS[S[ P                  ,          S[,          /# rI  )r§   rJ  r   r   rD   r   )rF   rG   s   "€r8   rH   r^  S  sF   ø€ ÷ 
ñ 
á×'Ñ'ð
ñ Ñ+Õ,ð
ñ 
‰u× Ñ Õ	!Ñ$BÕ	Bñ	
rJ   c                óÀ   € V P                   ! V3/ VB p\        P                  ! VP                  ^R7      pV P                  ! V3/ VB p\        VVP                  R7      # )rM   )Údim)r9  rê   )r?  r§   ÚcatrL  r	  r   rê   )r3   r‘   r4   Úbackbone_outputsÚfused_outputsr9  s   &&,   r8   rï   ÚUVDocModel.forwardQ  s\   € ð  Ÿ=š=¨Ñ@¸Ñ@ÐÜŸ	š	Ð"2×"?Ñ"?ÀQÔGˆØ ŸIšI mÑ>°vÑ>Ðä-Ø/Ø*×8Ñ8ô
ð 	
rJ   )r?  r	  )r\   r]   r^   r_   rÕ   r   r   rï   rc   rd   re   rf   s   @@r8   r\  r\  C  s0   ù‡ € ÷ó ð Ø÷
ó ó ÷
ð 
rJ   r\  )r§   )r2  r>  r"   rz   rh   r\  r&  )GÚcollections.abcr   r§   Ú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"   rh   rz   rÊ   ÚModulerÝ   ró   r  r  r  r&  r2  r>  rS  r\  Ú__all__r)   rJ   r8   Ú<module>r�     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ó %
óð
%
ôP�—	‘	ô ñ4 ðôô
Ð%ó 
óð
ò2‚rJ   