ó
    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  SS
KJrJr  SrSr " S S\SS9r\ " S S\5      5       rS/rg)zImage processor class for Vilt.é    N)Ú
functionalé   )ÚTorchvisionBackend)ÚBatchFeature)Úgroup_images_by_shapeÚreorder_images)ÚIMAGENET_STANDARD_MEANÚIMAGENET_STANDARD_STDÚPILImageResamplingÚSizeDictÚget_max_height_width)ÚImagesKwargs)Ú
TensorTypeÚauto_docstringi5  i   c                   ó$   • \ rS rSr% Sr\\S'   Srg)ÚViltImageProcessorKwargsé)   zÉ
size_divisor (`int`, *optional*, defaults to `self.size_divisor`):
    The size by which to make sure both the height and width can be divided. Only has an effect if `do_resize`
    is set to `True`.
Úsize_divisor© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚintÚ__annotations__Ú__static_attributes__r   ó    Úk/home/mande/repo/quber/.venv/lib/python3.13/site-packages/transformers/models/vilt/image_processing_vilt.pyr   r   )   s   ‡ ñð Ör   r   F)Útotalc                   ó\  ^ • \ rS rSr\r\R                  r\	r
\rSS0rSrSrSrSrSrSrSS/r  SS
SS\SSS\S	-  SS4
U 4S jjjrS
\S   S\\-  S	-  S\S	-  S\4S 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\4S jjr Sr!U =r"$ ) ÚViltImageProcessoré3   Úshortest_edgei€  Té    FÚpixel_valuesÚ
pixel_maskNÚimagesztorch.TensorÚsizeÚresamplez7PILImageResampling | tvF.InterpolationMode | int | Noner   Úreturnc                 óŠ  >• UR                   n[        [        [        -  U-  5      nUR                  S   nUR                  S   nXx:  a
  Un	X…U-  -  n
O	XuU-  -  n	Un
[        Xš5      U:”  a  U[        Xš5      -  nX›-  n	X«-  n
[        U	S-   5      n	[        U
S-   5      n
Ub  X”-  U-  n	X¤-  U-  n
[        TU ]  U[        XšS9US9$ )a¿  
Resize an image or batch of images to specified size.

Args:
    images (`torch.Tensor`): Image or batch of images to resize.
    size (`SizeDict`): Size dictionary with shortest_edge key.
    resample (`PILImageResampling | tvF.InterpolationMode | int`, *optional*): Interpolation method to use.
    size_divisor (`int`, *optional*): Value to ensure height/width are divisible by.

Returns:
    `torch.Tensor`: Resized image or batch of images.
éþÿÿÿéÿÿÿÿg      à?)ÚheightÚwidth)r*   )	r$   r   ÚMAX_LONGER_EDGEÚMAX_SHORTER_EDGEÚshapeÚmaxÚsuperÚresizer   )Úselfr(   r)   r*   r   ÚshorterÚlongerÚheightsÚwidthsÚnew_heightsÚ
new_widthsÚscaleÚ	__class__s               €r   r6   ÚViltImageProcessor.resizeB   sø   ø€ ð* ×$Ñ$ˆÜ”_Ô'7Ñ7¸'ÑAÓBˆà—,‘,˜rÑ"ˆØ—‘˜bÑ!ˆð ÓØ!ˆKØ¨WÑ#4Ñ5‰Jà!¨vÑ%5Ñ6ˆKØ ˆJô ˆ{Ó'¨&Ó0ØœS Ó9Ñ9ˆEØ%Ñ-ˆKØ#Ñ+ˆJä˜+¨Ñ+Ó,ˆÜ˜ cÑ)Ó*ˆ
ð Ñ#Ø%Ñ5¸ÑDˆKØ#Ñ3°lÑBˆJô ‰w‰~˜f¤h°kÑ&TÐ_gˆ~ÐhÐhr   Úreturn_tensorsÚdisable_groupingc                 óP  • [        U5      n[        XS9u  pV0 n0 nUR                  5        GH^  u  pšUS:X  a?  [        U
5      S:”  a0  U
R                  n[
        R                  " U[
        R                  US9nU
R                  SS nUS   US   :g  =(       d    US   US   :g  nU(       a’  US   US   -
  nUS   US   -
  nSSUU/n[        R                  " U
USS9nWR                  5       nUSUS   2SUS   24   R                  S5        UR                  S5      R                  U
R                  S   SS5      nOFU
n[
        R                  " U
R                  S   US   US   4[
        R                  U
R                  S9nUXy'   UX‰'   GMa     [!        Xv5      n[!        X†5      nUU4$ )	a(  
Pad a batch of images to the same size based on the maximum dimensions.

Args:
    images (`list[torch.Tensor]`): List of images to pad.
    return_tensors (`str` or `TensorType`, *optional*): The type of tensors to return.

Returns:
    `tuple`: Tuple containing padded images and pixel masks.
©rB   Úptr   )ÚdtypeÚdevicer-   Né   )Úfill)r   r   ÚitemsÚlenrG   ÚtorchÚzerosÚint64r3   ÚtvFÚpadÚcloneÚfill_Ú	unsqueezeÚrepeatÚonesr   )r7   r(   rA   rB   Úmax_sizeÚgrouped_imagesÚgrouped_images_indexÚprocessed_imagesÚprocessed_masksr3   Ústacked_imagesrG   Úmask_templateÚoriginal_sizeÚneeds_paddingÚpadding_bottomÚpadding_rightÚpaddingÚpadded_imagesr'   Úpixel_maskss                        r   Ú
_pad_batchÚViltImageProcessor._pad_batchv   s×  € ô" (¨Ó/ˆô 0EÀVÑ/oÑ,ˆØÐØˆà%3×%9Ñ%9×%;Ñ!ˆEà Ó%¬#¨nÓ*=ÀÓ*AØ'×.Ñ.�Ü %§¢¨H¼E¿K¹KÐPVÑ W�à*×0Ñ0°°Ð5ˆMØ)¨!Ñ,°¸±Ñ;×^¸}ÈQÑ?OÐS[Ð\]ÑS^Ñ?^ˆMæØ!)¨!¡¨}¸QÑ/?Ñ!?�Ø (¨¡¨m¸AÑ.>Ñ >�Ø˜a °Ð?�ä #§¢¨¸ÀaÑ H�Ø*×0Ñ0Ó2�
ØÐ-˜]¨1Ñ-Ð-Ð/A°¸qÑ1AÐ/AÐAÑB×HÑHÈÔKØ(×2Ñ2°1Ó5×<Ñ<¸^×=QÑ=QÐRSÑ=TÐVWÐYZÓ[‘à .�Ü#ŸjšjØ#×)Ñ)¨!Ñ,¨h°q©k¸8ÀA¹;ÐGÜŸ+™+Ø)×0Ñ0ñ�ð '4ÐÑ#Ø%0ˆOÔ"ñ9 &<ô> 'Ð'7ÓNˆÜ$ _ÓKˆà˜kÐ)Ð)r   Ú	do_resizeÚ
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanÚ	image_stdÚdo_padc           	      óÜ  • [        XS9u  nn0 nUR                  5        H%  u  nnU(       a  U R                  UX4U5      nUUU'   M'     [        UU5      n[        UUS9u  nn0 nUR                  5        H  u  nnU R	                  UXVXxU	5      nUUU'   M!     [        UU5      n0 nU
(       a  U R                  UXËS9u  nnUUS.nO US:X  a  [        R                  " U5      nSU0n[        UUS9$ )NrD   )r&   r'   rE   r&   )ÚdataÚtensor_type)	r   rJ   r6   r   Úrescale_and_normalizerd   rL   Ústackr   )r7   r(   rf   r)   r*   rg   rh   ri   rj   rk   rl   rB   rA   r   ÚkwargsrW   rX   Úresized_images_groupedr3   r[   Úresized_imagesÚprocessed_images_groupedrY   rn   r&   r'   s                             r   Ú_preprocessÚViltImageProcessor._preprocess²   s4  € ô$ 0EÀVÑ/oÑ,ˆÐ,Ø!#Ðà%3×%9Ñ%9Ö%;Ñ!ˆE�>ÞØ!%§¡¨^¸TÈ\Ó!Z�Ø,:Ð" 5Ó)ñ &<ô (Ð(>Ð@TÓUˆô 0EÀ^ÐfvÑ/wÑ,ˆÐ,Ø#%Ð à%3×%9Ñ%9Ö%;Ñ!ˆE�>à!×7Ñ7Ø 
¸LÐV_óˆNð /=Ð$ UÓ+ñ &<ô *Ð*BÐDXÓYÐð ˆÞØ'+§¡Ø  .ð (7ð (Ñ$ˆL˜*ð %1À
ÑK‰Dð  Ó%Ü#(§;¢;Ð/?Ó#@Ð Ø"Ð$4Ð5ˆDä °>ÑBÐBr   r   )NN)N)#r   r   r   r   r   Úvalid_kwargsr   ÚBICUBICr*   r	   rj   r
   rk   r)   rf   rg   ri   r   rl   Údefault_to_squareÚmodel_input_namesr   r   r6   ÚlistÚstrr   ÚboolÚtuplerd   Úfloatr   rv   r   Ú__classcell__)r?   s   @r   r"   r"   3   sÂ  ø† à+€LØ!×)Ñ)€HØ'€JØ%€IØ˜SÐ!€DØ€IØ€JØ€LØ€LØ€FØÐØ'¨Ð6Ðð OSØ#'ñ2iàð2ið ð2ið Lð	2ið
 ˜D‘jð2ið 
÷2ið 2iðh:*à�^Ñ$ð:*ð ˜jÑ(¨4Ñ/ð:*ð  ™+ð	:*ð
 
ô:*ðT $(ñ5Cà�^Ñ$ð5Cð ð5Cð ð	5Cð
 Lð5Cð ð5Cð ð5Cð ð5Cð ˜D ™KÑ'¨$Ñ.ð5Cð ˜4 ™;Ñ&¨Ñ-ð5Cð �t‘ð5Cð  ™+ð5Cð ˜jÑ(¨4Ñ/ð5Cð ˜D‘jð5Cð  
÷!5Có 5Cr   r"   )r   rL   Útorchvision.transforms.v2r   rO   Úimage_processing_backendsr   Úimage_processing_utilsr   Úimage_transformsr   r   Úimage_utilsr	   r
   r   r   r   Úprocessing_utilsr   Úutilsr   r   r1   r2   r   r"   Ú__all__r   r   r   Ú<module>rŠ      su   ðñ &ã Ý 7å ;Ý 2ß E÷õ õ -÷ð €ØÐ ô˜|°5ò ð ôsCÐ+ó sCó ðsCðl  Ð
 �r   