ó
    qyüi¢  ã                   óÆ   • S r SSKJ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 ViTMatte.é    )ÚUnionN)Ú
functionalé   )ÚTorchvisionBackend)ÚBatchFeature)Úgroup_images_by_shapeÚreorder_images)ÚIMAGENET_STANDARD_MEANÚIMAGENET_STANDARD_STDÚChannelDimensionÚ
ImageInputÚget_image_size)ÚImagesKwargsÚUnpack)Ú
TensorTypeÚauto_docstringc                   ó$   • \ rS rSr% Sr\\S'   Srg)ÚVitMatteImageProcessorKwargsé#   z™
size_divisor (`int`, *optional*, defaults to `self.size_divisor`):
    The width and height of the image will be padded to be divisible by this number.
Úsize_divisor© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚintÚ__annotations__Ú__static_attributes__r   ó    Ús/home/mande/repo/quber/.venv/lib/python3.13/site-packages/transformers/models/vitmatte/image_processing_vitmatte.pyr   r   #   s   ‡ ñð
 Ör    r   F)Útotalc                   óp  ^ • \ rS rSrSrSrSr\r\	r
SrSr\rS\\   SS4U 4S jjr SS	S
S\SS
4S jjr\S	\S\S\\   S\4U 4S jj5       r SS	\S\S\S\S\\S4   S-  S\\   S\4S jjrS	\S
   S\S
   S\S\S\S\\\   -  S-  S\\\   -  S-  S\S-  S\S-  S\S-  S\\-  S-  S\4S jrSr U =r!$ ) ÚVitMatteImageProcessoré,   Tgp?é    ÚkwargsÚreturnNc                 ót   >• UR                  SS 5      nUb  UR                  SU5        [        TU ]  " S0 UD6  g )NÚsize_divisibilityr   r   )ÚpopÚ
setdefaultÚsuperÚ__init__)Úselfr'   r*   Ú	__class__s      €r!   r.   ÚVitMatteImageProcessor.__init__7   s<   ø€ à"ŸJ™JÐ':¸DÓAÐØÑ(Ø×Ñ˜nÐ.?Ô@Ü‰ÒÑ"˜6Ó"r    Úimagesztorch.Tensorr   c                 óÄ   • [        U[        R                  S9u  p4X2-  S:X  a  SOX#U-  -
  nXB-  S:X  a  SOX$U-  -
  nXe-   S:”  a  SSXe4n[        R                  " X5      nU$ )a,  
Pads an image or batched images constantly so that width and height are divisible by size_divisor

Args:
    images (`torch.Tensor`):
        Image to pad.
    size_divisor (`int`, *optional*, defaults to 32):
        The width and height of the image will be padded to be divisible by this number.
)Úchannel_dimr   )r   r   ÚFIRSTÚtvFÚpad)r/   r2   r   ÚheightÚwidthÚ
pad_heightÚ	pad_widthÚpaddings           r!   Ú
_pad_imageÚ!VitMatteImageProcessor._pad_image>   sv   € ô ' vÔ;K×;QÑ;QÑR‰ˆà Ñ/°1Ó4‘Q¸,ÐR^ÑI^Ñ:^ˆ
ØÑ-°Ó2‘A¸È|ÑG[Ñ8[ˆ	àÑ! AÓ%Ø˜!˜YÐ3ˆGÜ—W’W˜VÓ-ˆFàˆr    Útrimapsc                 ó&   >• [         TU ]  " X40 UD6$ )z8
trimaps (`ImageInput`):
    The trimaps to preprocess.
)r-   Ú
preprocess)r/   r2   r?   r'   r0   s       €r!   rA   Ú!VitMatteImageProcessor.preprocessW   s   ø€ ô ‰wÒ! &Ñ<°VÑ<Ð<r    Údo_convert_rgbÚinput_data_formatÚdeviceztorch.devicec                 ój   • U R                  XXES9nU R                  USUS9nU R                  " X40 UD6$ )z
Preprocess image-like inputs.
)r2   rC   rD   rE   é   )r2   Úexpected_ndimsrE   )Ú_prepare_image_like_inputsÚ_preprocess)r/   r2   r?   rC   rD   rE   r'   s          r!   Ú_preprocess_image_like_inputsÚ4VitMatteImageProcessor._preprocess_image_like_inputsd   sP   € ð ×0Ñ0ØÐL]ð 1ð 
ˆð ×1Ñ1¸ÐQRÐ[aÐ1Ðbˆà×Ò Ñ:°6Ñ:Ð:r    Ú
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanÚ	image_stdÚdo_padÚdisable_groupingÚreturn_tensorsc           	      óD  • [        XS9u  pÞ[        X*S9u  nn0 nU Hj  nUU   nUU   nU R                  UX4XVU5      nU R                  UX4SXg5      n[        R                  " UU/SS9nU(       a  U R	                  UU	5      nUUU'   Ml     [        UU5      n[        SU0US9$ )N)rS   Fé   )ÚdimÚpixel_values)ÚdataÚtensor_type)r   Úrescale_and_normalizeÚtorchÚcatr=   r	   r   )r/   r2   r?   rM   rN   rO   rP   rQ   rR   r   rS   rT   r'   Úgrouped_imagesÚgrouped_images_indexÚgrouped_trimapsÚgrouped_trimaps_indexÚprocessed_images_groupedÚshapeÚstacked_imagesÚstacked_trimapsÚprocessed_imagess                         r!   rJ   Ú"VitMatteImageProcessor._preprocessw   sÕ   € ô 0EÀVÑ/oÑ,ˆÜ1FÀwÑ1rÑ.ˆÐ.Ø#%Ð Û#ˆEØ+¨EÑ2ˆNØ-¨eÑ4ˆOà!×7Ñ7Ø 
¸LÐV_óˆNð #×8Ñ8Ø ¸UÀJóˆOô #ŸYšY¨¸Ð'HÈaÑPˆNÞØ!%§¡°ÀÓ!N�Ø.<Ð$ UÓ+ñ $ô *Ð*BÐDXÓYÐä .Ð2BÐ!CÐQ_Ñ`Ð`r    r   )r&   )N)"r   r   r   r   rM   rN   rO   r
   rP   r   rQ   rR   r   r   Úvalid_kwargsr   r.   r   r=   r   r   r   rA   Úboolr   r   ÚstrrK   ÚlistÚfloatr   rJ   r   Ú__classcell__)r0   s   @r!   r$   r$   ,   s×  ø† à€JØ€NØ€LØ'€JØ%€IØ€FØ€LØ/€Lð# Ð(DÑ!Eð #È$÷ #ð ñàðð ðð 
õ	ð2 ð
=àð
=ð ð
=ð Ð5Ñ6ð	
=ð
 
ö
=ó ð
=ð$ 59ñ;àð;ð ð;ð ð	;ð
 ,ð;ð �c˜>Ð)Ñ*¨TÑ1ð;ð Ð5Ñ6ð;ð 
õ;ð&#aà�^Ñ$ð#að �nÑ%ð#að ð	#að
 ð#að ð#að ˜D ™KÑ'¨$Ñ.ð#að ˜4 ™;Ñ&¨Ñ-ð#að �t‘ð#að ˜D‘jð#að  ™+ð#að ˜jÑ(¨4Ñ/ð#að 
÷#aò #ar    r$   )r   Útypingr   r\   Útorchvision.transforms.v2r   r6   Ú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>rw      si   ðñ *å ã Ý 7å ;Ý 2ß E÷õ ÷ 5ß /ô <°uò ð ômaÐ/ó maó ðmað` $Ð
$�r    