ó
    qyüiê  ã                   óº   • S r SSKrSSKJr  SSKJr  SSKJr  SSK	J
r
Jr  SSKJrJrJrJrJr  SS	KJrJr  SS
KJrJr   " S S\SS9r\ " S S\5      5       rS/rg)z Image processor class for Donut.é    N)Ú
functionalé   )ÚTorchvisionBackend)ÚBatchFeature)Úgroup_images_by_shapeÚreorder_images)ÚIMAGENET_STANDARD_MEANÚIMAGENET_STANDARD_STDÚ
ImageInputÚPILImageResamplingÚSizeDict)ÚImagesKwargsÚUnpack)Ú
TensorTypeÚauto_docstringc                   ó.   • \ rS rSr% Sr\\S'   \\S'   Srg)ÚDonutImageProcessorKwargsé!   a5  
do_thumbnail (`bool`, *optional*, defaults to `self.do_thumbnail`):
    Whether to resize the image using thumbnail method.
do_align_long_axis (`bool`, *optional*, defaults to `self.do_align_long_axis`):
    Whether to align the long axis of the image with the long axis of `size` by rotating by 90 degrees.
Údo_thumbnailÚdo_align_long_axis© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚboolÚ__annotations__Ú__static_attributes__r   ó    Úm/home/mande/repo/quber/.venv/lib/python3.13/site-packages/transformers/models/donut/image_processing_donut.pyr   r   !   s   ‡ ñð ÓØÖr    r   F)Útotalc            %       óª  ^ • \ rS rSrSr\r\R                  r	\
r\rSSS.rSrSrSrSrSrSrS\\   4U 4S	 jjr\S
\S\\   S\4U 4S jj5       rSSS\SS4S jr S'SSS\S\SS4S jjr S(SSS\SSSS4U 4S jjjr  S)S
\ S   S\S\SSS\S\S\S\!S\S\!\ \!   -  S-  S\!\ \!   -  S-  S\S-  S \S-  S!\S-  S"\"\#-  S-  S#\S$\S\4$S% jjr$S&r%U =r&$ )*ÚDonutImageProcessoré-   zMTorchvision backend for Donut with align_long_axis, thumbnail, and pad_image.i 
  i€  )ÚheightÚwidthTFÚkwargsc                 óž   >• UR                  SS 5      n[        U[        [        45      (       a  US S S2   nUb  X!S'   [        TU ]  " S0 UD6  g )NÚsizeéÿÿÿÿr   )ÚpopÚ
isinstanceÚtupleÚlistÚsuperÚ__init__)Úselfr(   r*   Ú	__class__s      €r!   r1   ÚDonutImageProcessor.__init__>   sN   ø€ Ø�z‰z˜& $Ó'ˆÜ�dœU¤D˜M×*Ñ*Ø™˜"˜‘:ˆDØÑØ!�6‰NÜ‰ÒÑ"˜6Ó"r    ÚimagesÚreturnc                 óž   >• [        U5      nSU;   a+  US   n[        U[        [        45      (       a  US S S2   US'   [        TU ]  " U40 UD6$ )Nr*   r+   )Údictr-   r.   r/   r0   Ú
preprocess)r2   r5   r(   r*   r3   s       €r!   r9   ÚDonutImageProcessor.preprocessF   sV   ø€ ô �f“ˆØ�VÓØ˜&‘>ˆDÜ˜$¤¬ ×.Ñ.Ø!%¡d¨ d¡��v‘Ü‰wÒ! &Ñ3¨FÑ3Ð3r    Úimageztorch.Tensorr*   c                 óö   • UR                   SS u  p4UR                  UR                  peXe:  a  XC:”  d
  Xe:”  aA  XC:  a<  UR                  5       S-
  UR                  5       S-
  p‡[        R
                  " USXx/S9nU$ )zKAlign the long axis of the image to the longest axis of the specified size.éþÿÿÿNé   é   r   )Údims)Úshaper&   r'   ÚdimÚtorchÚrot90)	r2   r;   r*   Úinput_heightÚinput_widthÚoutput_heightÚoutput_widthÚ
height_dimÚ	width_dims	            r!   Úalign_long_axisÚ#DonutImageProcessor.align_long_axisS   sq   € ð %*§K¡K°°Ð$4Ñ!ˆØ&*§k¡k°4·:±:�|àÓ(¨[Ó-GØÓ(¨[Ó-Gà$)§I¡I£K°!¡O°U·Y±Y³[À1±_˜	Ü—K’K  q°
Ð/FÑGˆEàˆr    Úrandom_paddingc                 ón  • UR                   UR                  pTUR                  SS u  pgXW-
  nXF-
  n	U(       aS  [        R                  " SU	S-   S5      R                  5       n
[        R                  " SUS-   S5      R                  5       nO
U	S-  n
US-  nXš-
  nX‹-
  nXºXÜ4n[        R                  " X5      $ )z$Pad the image to the specified size.r=   Nr   r?   r   r>   )r&   r'   rA   rC   ÚrandintÚitemÚtvFÚpad)r2   r;   r*   rM   rG   rH   rE   rF   Údelta_widthÚdelta_heightÚpad_topÚpad_leftÚ
pad_bottomÚ	pad_rightÚpaddings                  r!   Ú	pad_imageÚDonutImageProcessor.pad_imaged   sµ   € ð '+§k¡k°4·:±:�|Ø$)§K¡K°°Ð$4Ñ!ˆà"Ñ0ˆØ$Ñ3ˆæÜ—m’m A |°aÑ'7¸Ó<×AÑAÓCˆGÜ—}’} Q¨°a©¸Ó<×AÑAÓC‰Hà" aÑ'ˆGØ" aÑ'ˆHà!Ñ+ˆ
ØÑ*ˆ	à iÐ<ˆÜ�wŠw�uÓ&Ð&r    NÚresamplez7PILImageResampling | tvF.InterpolationMode | int | Nonec                 ó$  >• UR                   SS u  pVUR                  UR                  p‡[        XW5      n	[        Xh5      n
X•:X  a  X¦:X  a  U$ XV:”  a  [	        Xi-  U-  5      n
OXe:”  a  [	        XZ-  U-  5      n	[
        TU ]  " U4[        X©S9US.UD6$ )z%Resize the image to make a thumbnail.r=   N)r'   r&   )r*   r\   )rA   r&   r'   ÚminÚintr0   Úresizer   )r2   r;   r*   r\   r(   rE   rF   rG   rH   r&   r'   r3   s              €r!   Ú	thumbnailÚDonutImageProcessor.thumbnail~   s©   ø€ ð %*§K¡K°°Ð$4Ñ!ˆØ&*§k¡k°4·:±:�|ä�\Ó1ˆÜ�KÓ.ˆàÓ! eÓ&:ØˆLàÓ%Ü˜Ñ,¨|Ñ;Ó<‰EØÓ'Ü˜Ñ-°Ñ;Ó<ˆFä‰wŠ~Øð
ä Ñ5Øñ
ð ñ	
ð 	
r    Ú	do_resizeÚdo_center_cropÚ	crop_sizeÚ
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanÚ	image_stdÚdo_padÚpad_sizeÚdisable_groupingÚreturn_tensorsr   r   c           	      óp  • [        XS9u  nn0 nUR                  5        H–  u  nnU(       a  U R                  UU5      nU(       a:  [        UR                  UR
                  5      nU R                  U[        US9U5      nU(       a  U R                  UX45      nU(       a  U R                  UUSS9nUUU'   M˜     [        UU5      n[        UUS9u  nn0 nUR                  5        H8  u  nnU(       a  U R                  UU5      nU R                  UXxXšU5      nUUU'   M:     [        UU5      n[        SU0US9$ )zCustom preprocessing for Donut.)rm   )Úshortest_edgeF)rM   Úpixel_values)ÚdataÚtensor_type)r   ÚitemsrK   r^   r&   r'   r`   r   ra   rZ   r   Úcenter_cropÚrescale_and_normalizer   )r2   r5   rc   r*   r\   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   r   r   r(   Úgrouped_imagesÚgrouped_images_indexÚresized_images_groupedrA   Ústacked_imagesrp   Úresized_imagesÚprocessed_images_groupedÚprocessed_imagess                               r!   Ú_preprocessÚDonutImageProcessor._preprocess›   sP  € ô, 0EÀVÑ/oÑ,ˆÐ,Ø!#ÐØ%3×%9Ñ%9Ö%;Ñ!ˆE�>Þ!Ø!%×!5Ñ!5°nÀdÓ!K�ÞÜ # D§K¡K°·±Ó <�Ø!%§¡¨^¼XÐTaÑ=bÐdlÓ!m�ÞØ!%§¡°ÀÓ!O�ÞØ!%§¡°ÀÐUZ Ð![�Ø,:Ð" 5Ó)ñ &<ô (Ð(>Ð@TÓUˆä/DÀ^ÐfvÑ/wÑ,ˆÐ,Ø#%Ð Ø%3×%9Ñ%9Ö%;Ñ!ˆE�>ÞØ!%×!1Ñ!1°.À)Ó!L�Ø!×7Ñ7Ø 
¸LÐV_óˆNð /=Ð$ UÓ+ñ &<ô *Ð*BÐDXÓYÐÜ .Ð2BÐ!CÐQ_Ñ`Ð`r    r   )F)N)TF)'r   r   r   r   r   r   Úvalid_kwargsr   ÚBILINEARr\   r	   ri   r
   rj   r*   rc   rf   rh   r   r   rk   r   r1   r   r   r   r9   r   rK   r   rZ   ra   r/   ÚfloatÚstrr   r~   r   Ú__classcell__)r3   s   @r!   r$   r$   -   s+  ø† áWà,€Là!×*Ñ*€HØ'€JØ%€IØ TÑ*€DØ€IØ€JØ€LØ€LØÐØ€Fð# Ð(AÑ!B÷ #ð ð
4àð
4ð Ð2Ñ3ð
4ð 
ö	
4ó ð
4ðàðð ðð 
ô	ð*  %ñ	'àð'ð ð'ð ð	'ð
 
õ'ð< OSñ	
àð
ð ð
ð Lð	
ð 
÷
ð 
ð\ "Ø#(ñ%0aà�^Ñ$ð0að ð0að ð	0að
 Lð0að ð0að ð0að ð0að ð0að ð0að ˜D ™KÑ'¨$Ñ.ð0að ˜4 ™;Ñ&¨Ñ-ð0að �t‘ð0að ˜T‘/ð0að  ™+ð0að  ˜jÑ(¨4Ñ/ð!0að" ð#0að$ !ð%0að( 
÷)0aó 0ar    r$   )r   rC   Útorchvision.transforms.v2r   rQ   Úimage_processing_backendsr   Úimage_processing_utilsr   Úimage_transformsr   r   Úimage_utilsr	   r
   r   r   r   Úprocessing_utilsr   r   Úutilsr   r   r   r$   Ú__all__r   r    r!   Ú<module>r�      sf   ðñ 'ã Ý 7å ;Ý 2ß E÷õ ÷ 5ß /ô	 °Eò 	ð ô]aÐ,ó ]aó ð]að@ !Ð
!�r    