Ë
    ÛÓ^jê  ã                   óÀ   — d Z ddl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mZmZmZ dd	lmZmZ dd
lmZmZ  G d„ ded¬«      Ze G d„ de«      «       ZdgZy)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                   ó&   — e Zd ZU dZeed<   eed<   y)ÚDonutImageProcessorKwargsaI  
    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_axisN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚboolÚ__annotations__© ó    ú{/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/donut/image_processing_donut.pyr   r   !   s   … ñð ÓØÔr   r   F)Útotalc            %       óŠ  ‡ — e Zd ZdZeZej                  Ze	Z
eZdddœZdZdZdZdZdZdZdee   fˆ fd„Zed	edee   d
efˆ fd„«       Zddded
dfd„Z	 d%dddeded
dfd„Z	 d&dddeddd
dfˆ fd„Z	 	 d'd	ed   deded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dz  d edz  d!e!e"z  dz  d"ed#ed
ef$d$„Z#ˆ xZ$S )(ÚDonutImageProcessorzMTorchvision backend for Donut with align_long_axis, thumbnail, and pad_image.i 
  i€  )ÚheightÚwidthTFÚkwargsc                 ó’   •— |j                  dd «      }t        |t        t        f«      r|d d d…   }|�||d<   t	        ‰| �  di |¤Ž y )NÚsizeéÿÿÿÿr   )ÚpopÚ
isinstanceÚtupleÚlistÚsuperÚ__init__)Úselfr$   r&   Ú	__class__s      €r   r-   zDonutImageProcessor.__init__>   sM   ø€ Ø�z‰z˜& $Ó'ˆÜ�dœU¤D˜MÔ*Ø™˜"˜‘:ˆDØÐØ!ˆF�6‰NÜ‰ÑÑ"˜6Ó"r   ÚimagesÚreturnc                 óŽ   •— t        |«      }d|v r&|d   }t        |t        t        f«      r|d d d…   |d<   t	        ‰| �  |fi |¤ŽS )Nr&   r'   )Údictr)   r*   r+   r,   Ú
preprocess)r.   r0   r$   r&   r/   s       €r   r4   zDonutImageProcessor.preprocessF   sS   ø€ ô �f“ˆØ�VÑØ˜&‘>ˆDÜ˜$¤¬ Ô.Ø!%¡d¨ d¡��v‘Ü‰wÑ! &Ñ3¨FÑ3Ð3r   Úimageztorch.Tensorr&   c                 ó  — |j                   dd \  }}|j                  |j                  }}||k  r||kD  s
||kD  rE||k  r@|j                  «       dz
  |j                  «       dz
  }}t	        j
                  |d||g¬«      }|S )zKAlign the long axis of the image to the longest axis of the specified size.éþÿÿÿNé   é   r   )Údims)Úshaper"   r#   ÚdimÚtorchÚrot90)	r.   r5   r&   Úinput_heightÚinput_widthÚoutput_heightÚoutput_widthÚ
height_dimÚ	width_dims	            r   Úalign_long_axisz#DonutImageProcessor.align_long_axisS   s�   € ð %*§K¡K°°Ð$4Ñ!ˆ�kØ&*§k¡k°4·:±:�|ˆà˜=Ò(¨[¸<Ò-GØ˜=Ò(¨[¸<Ò-Gà$)§I¡I£K°!¡O°U·Y±Y³[À1±_˜	ˆJÜ—K‘K  q°
¸IÐ/FÔGˆEàˆr   Úrandom_paddingc                 óp  — |j                   |j                  }}|j                  dd \  }}||z
  }||z
  }	|rQt        j                  d|	dz   d«      j                  «       }
t        j                  d|dz   d«      j                  «       }n
|	dz  }
|dz  }|	|
z
  }||z
  }||
||f}t        j                  ||«      S )z$Pad the image to the specified size.r7   Nr   r9   r   r8   )r"   r#   r;   r=   ÚrandintÚitemÚtvFÚpad)r.   r5   r&   rF   rA   rB   r?   r@   Údelta_widthÚdelta_heightÚpad_topÚpad_leftÚ
pad_bottomÚ	pad_rightÚpaddings                  r   Ú	pad_imagezDonutImageProcessor.pad_imaged   sÇ   € ð '+§k¡k°4·:±:�|ˆØ$)§K¡K°°Ð$4Ñ!ˆ�kà" [Ñ0ˆØ$ |Ñ3ˆáÜ—m‘m A |°aÑ'7¸Ó<×AÑAÓCˆGÜ—}‘} Q¨°a©¸Ó<×AÑAÓC‰Hà" aÑ'ˆGØ" aÑ'ˆHà! GÑ+ˆ
Ø (Ñ*ˆ	à˜W i°Ð<ˆÜ�w‰w�u˜gÓ&Ð&r   NÚresamplez7PILImageResampling | tvF.InterpolationMode | int | Nonec                 ó6  •— |j                   dd \  }}|j                  |j                  }}t        ||«      }	t        ||«      }
|	|k(  r|
|k(  r|S ||kD  rt	        ||	z  |z  «      }
n||kD  rt	        ||
z  |z  «      }	t        ‰| �  |ft        |
|	¬«      |dœ|¤ŽS )z%Resize the image to make a thumbnail.r7   N)r#   r"   )r&   rT   )r;   r"   r#   ÚminÚintr,   Úresizer   )r.   r5   r&   rT   r$   r?   r@   rA   rB   r"   r#   r/   s              €r   Ú	thumbnailzDonutImageProcessor.thumbnail~   s¿   ø€ ð %*§K¡K°°Ð$4Ñ!ˆ�kØ&*§k¡k°4·:±:�|ˆä�\ =Ó1ˆÜ�K Ó.ˆà�\Ò! e¨{Ò&:ØˆLà˜+Ò%Ü˜ fÑ,¨|Ñ;Ó<‰EØ˜<Ò'Ü˜¨Ñ-°Ñ;Ó<ˆFä‰w‰~Øð
ä ¨fÔ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           	      ó\  — t        ||¬«      \  }}i }|j                  «       D ]ˆ  \  }}|r| j                  ||«      }|r=t        |j                  |j
                  «      }| j                  |t        |¬«      |«      }|r| j                  |||«      }|r| j                  ||d¬«      }|||<   ŒŠ t        ||«      }t        ||¬«      \  }}i }|j                  «       D ]4  \  }}|r| j                  ||«      }| j                  ||||	|
|«      }|||<   Œ6 t        ||«      }t        d|i|¬«      S )zCustom preprocessing for Donut.)rd   )Úshortest_edgeF)rF   Úpixel_values)ÚdataÚtensor_type)r   ÚitemsrE   rV   r"   r#   rX   r   rY   rS   r   Úcenter_cropÚrescale_and_normalizer   )r.   r0   rZ   r&   rT   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   r   r   r$   Úgrouped_imagesÚgrouped_images_indexÚresized_images_groupedr;   Ústacked_imagesrg   Úresized_imagesÚprocessed_images_groupedÚprocessed_imagess                               r   Ú_preprocesszDonutImageProcessor._preprocess›   sc  € ô, 0EÀVÐ^nÔ/oÑ,ˆÐ,Ø!#ÐØ%3×%9Ñ%9Ó%;ò 
	;Ñ!ˆE�>Ù!Ø!%×!5Ñ!5°nÀdÓ!K�ÙÜ # D§K¡K°·±Ó <�Ø!%§¡¨^¼XÐTaÔ=bÐdlÓ!m�ÙØ!%§¡°ÀÀhÓ!O�ÙØ!%§¡°ÀÐUZ Ó![�Ø,:Ð" 5Ò)ð
	;ô (Ð(>Ð@TÓUˆä/DÀ^ÐfvÔ/wÑ,ˆÐ,Ø#%Ð Ø%3×%9Ñ%9Ó%;ò 	=Ñ!ˆE�>ÙØ!%×!1Ñ!1°.À)Ó!L�Ø!×7Ñ7Ø 
¨N¸LÈ*ÐV_óˆNð /=Ð$ UÒ+ð	=ô *Ð*BÐDXÓYÐÜ .Ð2BÐ!CÐQ_Ô`Ð`r   )F)N)TF)%r   r   r   r   r   Úvalid_kwargsr   ÚBILINEARrT   r	   r`   r
   ra   r&   rZ   r]   r_   r   r   rb   r   r-   r   r   r   r4   r   rE   r   rS   rY   r+   ÚfloatÚstrr   ru   Ú__classcell__)r/   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r   r!   )r   r=   Útorchvision.transforms.v2r   rJ   Ú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   