Ë
    ÜÓ^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 dd
lmZmZ dZdZ G d„ ded¬«      Ze G d„ de«      «       ZdgZy)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                   ó   — e Zd ZU dZeed<   y)ÚViltImageProcessorKwargszÙ
    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_divisorN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintÚ__annotations__© ó    úy/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/vilt/image_processing_vilt.pyr   r   )   s   … ñð Ôr   r   F)Útotalc                   óH  ‡ — e Zd ZeZej                  ZeZ	e
ZddiZdZdZdZdZdZdZddgZ	 	 dd	d
dedddedz  dd
f
ˆ fd„Zd	ed
   deez  dz  dedz  defd„Z	 dd	ed
   dededd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ez  dz  dedz  defd„Zˆ xZ S )ÚViltImageProcessorÚshortest_edgei€  Té    FÚpixel_valuesÚ
pixel_maskNÚimagesztorch.TensorÚsizeÚresamplez7PILImageResampling | tvF.InterpolationMode | int | Noner   Úreturnc                 ó¤  •— |j                   }t        t        t        z  |z  «      }|j                  d   }|j                  d   }||k  r|}	|||z  z  }
n
|||z  z  }	|}
t        |	|
«      |kD  r|t        |	|
«      z  }|	|z  }	|
|z  }
t        |	dz   «      }	t        |
dz   «      }
|�|	|z  |z  }	|
|z  |z  }
t        ‰| �  |t        |	|
¬«      |¬«      S )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   r2   zViltImageProcessor.resizeB   s  ø€ ð* ×$Ñ$ˆÜ”_Ô'7Ñ7¸'ÑAÓBˆà—,‘,˜rÑ"ˆØ—‘˜bÑ!ˆð �VÒØ!ˆKØ 7¨WÑ#4Ñ5‰Jà! W¨vÑ%5Ñ6ˆKØ ˆJô ˆ{˜JÓ'¨&Ò0ØœS ¨jÓ9Ñ9ˆEØ%¨Ñ-ˆKØ# eÑ+ˆJä˜+¨Ñ+Ó,ˆÜ˜ cÑ)Ó*ˆ
ð Ð#Ø%¨Ñ5¸ÑDˆKØ# |Ñ3°lÑBˆJô ‰w‰~˜f¤h°kÈÔ&TÐ_gˆ~ÓhÐhr   Úreturn_tensorsÚdisable_groupingc                 óT  — t        |«      }t        ||¬«      \  }}i }i }|j                  «       D �]Z  \  }	}
|dk(  r@t        |
«      dkD  r2|
j                  }t        j                  |t
        j                  |¬«      }|
j                  dd }|d   |d   k7  xs |d   |d   k7  }|r”|d   |d   z
  }|d   |d   z
  }dd||g}t        j                  |
|d¬«      }j                  «       }|d|d   …d|d   …f   j                  d«       |j                  d«      j                  |
j                  d   dd«      }nH|
}t        j                  |
j                  d   |d   |d   ft
        j                  |
j                  ¬«      }|||	<   |||	<   �Œ] t!        ||«      }t!        ||«      }||fS )	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.
        ©r=   Úptr   )ÚdtypeÚdevicer)   Né   )Úfill)r   r   ÚitemsÚlenrB   ÚtorchÚzerosÚint64r/   ÚtvFÚpadÚcloneÚfill_Ú	unsqueezeÚrepeatÚonesr   )r3   r$   r<   r=   Úmax_sizeÚgrouped_imagesÚgrouped_images_indexÚprocessed_imagesÚprocessed_masksr/   Ústacked_imagesrB   Úmask_templateÚoriginal_sizeÚneeds_paddingÚpadding_bottomÚpadding_rightÚpaddingÚpadded_imagesr#   Úpixel_maskss                        r   Ú
_pad_batchzViltImageProcessor._pad_batchv   sî  € ô" (¨Ó/ˆô 0EÀVÐ^nÔ/oÑ,ˆÐ,ØÐØˆà%3×%9Ñ%9Ó%;ó 	1Ñ!ˆ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Ð˜UÑ#Ø%0ˆO˜EÓ"ð9	1ô> 'Ð'7Ð9MÓNˆÜ$ _Ð6JÓKˆà˜kÐ)Ð)r   Ú	do_resizeÚ
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanÚ	image_stdÚdo_padc           	      óÞ  — t        ||¬«      \  }}i }|j                  «       D ]   \  }}|r| j                  ||||«      }|||<   Œ" t        ||«      }t        ||¬«      \  }}i }|j                  «       D ]   \  }}| j	                  ||||||	«      }|||<   Œ" t        ||«      }i }|
r| j                  |||¬«      \  }}||dœ}n|dk(  rt        j                  |«      }d|i}t        ||¬«      S )Nr?   )r"   r#   r@   r"   )ÚdataÚtensor_type)	r   rE   r2   r   Úrescale_and_normalizer_   rG   Ústackr   )r3   r$   r`   r%   r&   ra   rb   rc   rd   re   rf   r=   r<   r   ÚkwargsrR   rS   Úresized_images_groupedr/   rV   Úresized_imagesÚprocessed_images_groupedrT   rh   r"   r#   s                             r   Ú_preprocesszViltImageProcessor._preprocess²   sJ  € ô$ 0EÀVÐ^nÔ/oÑ,ˆÐ,Ø!#Ðà%3×%9Ñ%9Ó%;ò 	;Ñ!ˆE�>ÙØ!%§¡¨^¸TÀ8È\Ó!Z�Ø,:Ð" 5Ò)ð	;ô (Ð(>Ð@TÓUˆô 0EÀ^ÐfvÔ/wÑ,ˆÐ,Ø#%Ð à%3×%9Ñ%9Ó%;ò 	=Ñ!ˆE�>à!×7Ñ7Ø 
¨N¸LÈ*ÐV_óˆNð /=Ð$ UÒ+ð	=ô *Ð*BÐDXÓYÐð ˆÙØ'+§¡Ø  .ÐCSð (7ó (Ñ$ˆL˜*ð %1À
ÑK‰Dð  Ò%Ü#(§;¡;Ð/?Ó#@Ð Ø"Ð$4Ð5ˆDä °>ÔBÐBr   )NN)N)!r   r   r   r   Úvalid_kwargsr   ÚBICUBICr&   r	   rd   r
   re   r%   r`   ra   rc   r   rf   Údefault_to_squareÚmodel_input_namesr   r   r2   ÚlistÚstrr   ÚboolÚtupler_   Úfloatr   rp   Ú__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ð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r   r   )r   rG   Útorchvision.transforms.v2r   rJ   Úimage_processing_backendsr   Úimage_processing_utilsr   Úimage_transformsr   r   Úimage_utilsr	   r
   r   r   r   Úprocessing_utilsr   Úutilsr   r   r-   r.   r   r   Ú__all__r   r   r   ú<module>rƒ      su   ðñ &ã Ý 7å ;Ý 2ß E÷õ õ -÷ð €ØÐ ô˜|°5õ ð ôsCÐ+ó sCó ðsCðl  Ð
 �r   