Ë
    Gêñi<i  ã                   óü  — d dl mZ d dlmZ d dlmZmZm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mZmZmZmZ dd
lmZ ddlmZ ddlmZ ddlmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( ddl)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5  e0«       rddlm6Z6  e.«       rd dl7Z7 e/«       rd dl8m9Z: ddlm;Z;m<Z< ndZ;dZ< e1jz                  e>«      Z? e5d¬«       G d„ de«      «       Z@ e5d¬«       G d„ de«      «       ZAe@ZBy)é    )ÚIterable)Ú	lru_cache)ÚAnyÚOptionalÚUnionNé   )ÚBatchFeature)ÚBaseImageProcessor)Úcenter_crop)Úconvert_to_rgbÚdivide_to_patchesÚget_resize_output_image_sizeÚget_size_with_aspect_ratioÚgroup_images_by_shapeÚreorder_images)Ú	normalize)Úrescale)Úresize)ÚChannelDimensionÚ
ImageInputÚ	ImageTypeÚSizeDictÚget_image_sizeÚ#get_image_size_for_max_height_widthÚget_image_typeÚget_max_height_widthÚinfer_channel_dimension_formatÚis_valid_imageÚload_image_as_tensor)ÚImagesKwargsÚUnpack)Ú
TensorTypeÚis_torch_availableÚis_torchvision_availableÚis_vision_availableÚlogging)Úis_rocm_platformÚis_torchdynamo_compilingÚrequires)ÚPILImageResampling)Ú
functional)Úpil_torch_interpolation_mappingÚtorch_pil_interpolation_mapping)ÚtorchÚtorchvision)Úbackendsc                    óF  ‡ — e Zd ZdZdee   fˆ fd„Zedefd„«       Z	ede
fd„«       Zde
ee
   z  eee
      z  fd„Z	 	 	 d9d
eded	z  de
ez  d	z  ded   dee   ddfd„Zd
edefd„Z	 	 	 	 	 	 d:ded   deded	z  de
d	z  deded	z  ded	z  deed   df   fd„Z	 	 d;d
ddedddeddf
d„Ze	 	 d;d
dd eeef   d!ed"   deddf
d#„«       Zd
dd$eddfd%„Zd
dd&eee   z  d'eee   z  ddfd(„Z ed)¬*«      	 	 	 	 	 	 d<d+ed	z  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   defd0„«       Z ddd.ed/ed+ed,eee   z  d-eee   z  ddfd1„Z!d
ddeddfd2„Z"ded   d3ededdd4ed5ed.ed/ed+ed,eee   z  d	z  d-eee   z  d	z  d6ed	z  ded	z  ded	z  d7e
e#z  d	z  de$f d8„Z%ˆ xZ&S )=ÚTorchvisionBackendzATorchvision backend for GPU-accelerated batched image processing.Úkwargsc                 óH   •— t        ‰| �  di |¤Ž  | j                  di |¤Ž y ©N© ©ÚsuperÚ__init__Ú_set_attributes©Úselfr3   Ú	__class__s     €úh/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/transformers/image_processing_backends.pyr9   zTorchvisionBackend.__init__Y   ó&   ø€ Ü‰ÑÑ"˜6Ò"Øˆ×ÑÑ&˜vÓ&ó    Úreturnc                 ó.   — t         j                  d«       y)á  
        `bool`: Whether or not this image processor is using the fast (Torchvision) backend.
        The `is_fast` property is deprecated and will be removed in v5.3 of Transformers.
        Use the `backend` attribute instead (e.g., `processor.backend == "torchvision"`).
        ú£The `is_fast` property is deprecated and will be removed in v5.3 of Transformers. Use the `backend` attribute instead (e.g., `processor.backend == 'torchvision'`).T©ÚloggerÚwarning_once©r<   s    r>   Úis_fastzTorchvisionBackend.is_fast]   s   € ô 	×Ñð`ô	
ð r@   c                  ó   — y)úB
        `str`: The backend used by this image processor.
        r/   r6   rH   s    r>   ÚbackendzTorchvisionBackend.backendj   s   € ð
 r@   Úimage_url_or_urlsc                 óô   — t        |t        t        f«      r|D �cg c]  }| j                  |«      ‘Œ c}S t        |t        «      rt        |«      S t        |«      r|S t        dt        |«      › �«      ‚c c}w )zû
        Convert a single or a list of URLs / paths into `torch.Tensor` objects.

        Already-valid image objects (tensors, numpy arrays, PIL Images) are passed through
        unchanged so that callers who pre-load images are unaffected.
        z=only a single or a list of entries is supported but got type=)	Ú
isinstanceÚlistÚtupleÚfetch_imagesÚstrr   r   Ú	TypeErrorÚtype)r<   rM   Úxs      r>   rR   zTorchvisionBackend.fetch_imagesq   sv   € ô Ð'¬$´¨Ô7Ø2CÖD¨Q�D×%Ñ% aÕ(ÒDÐDÜÐ)¬3Ô/Ü'Ð(9Ó:Ð:ÜÐ-Ô.Ø$Ð$äÐ[Ô\`ÐarÓ\sÐ[tÐuÓvÐvùò Es   ›A5NÚimageÚdo_convert_rgbÚinput_data_formatÚdeviceztorch.deviceútorch.Tensorc                 óf  — t        |«      }|t        j                  t        j                  t        j                  fvrt        d|› �«      ‚|r| j                  |«      }|t        j                  k(  rt        j                  |«      }n6|t        j                  k(  r#t        j                  |«      j                  «       }|j                  dk(  r|j                  d«      }|€t        |«      }|t        j                   k(  r!|j#                  ddd«      j                  «       }|�|j%                  |«      }|S )z/Process a single image for torchvision backend.úUnsupported input image type é   r   r   )r   r   ÚPILÚTORCHÚNUMPYÚ
ValueErrorr   ÚtvFÚpil_to_tensorr.   Ú
from_numpyÚ
contiguousÚndimÚ	unsqueezer   r   ÚLASTÚpermuteÚto)r<   rW   rX   rY   rZ   r3   Ú
image_types          r>   Úprocess_imagez TorchvisionBackend.process_image�   sý   € ô $ EÓ*ˆ
ØœiŸm™m¬Y¯_©_¼i¿o¹oÐNÑNÜÐ<¸Z¸LÐIÓJÐJáØ×'Ñ'¨Ó.ˆEàœŸ™Ò&Ü×%Ñ% eÓ,‰EØœ9Ÿ?™?Ò*Ü×$Ñ$ UÓ+×6Ñ6Ó8ˆEà�:‰:˜Š?Ø—O‘O AÓ&ˆEàÐ$Ü >¸uÓ EÐàÔ 0× 5Ñ 5Ò5Ø—M‘M ! Q¨Ó*×5Ñ5Ó7ˆEàÐØ—H‘H˜VÓ$ˆEàˆr@   c                 ó   — t        |«      S ©zConvert an image to RGB format.©r   ©r<   rW   s     r>   r   z!TorchvisionBackend.convert_to_rgb¤   ó   € ä˜eÓ$Ð$r@   ÚimagesÚpad_sizeÚ
fill_valueÚpadding_modeÚreturn_maskÚdisable_groupingÚ	is_nested)r[   r[   c                 ó¦  — |�@|j                   r|j                  st        d|› d�«      ‚|j                   |j                  f}nt        |«      }t	        |||¬«      \  }	}
i }i }|	j                  «       D ]¹  \  }}|j                  dd }|d   |d   z
  }|d   |d   z
  }|dk  s|dk  rt        d|› d	|› d�«      ‚||k7  rdd||f}t        j                  ||||¬
«      }|||<   |sŒst        j                  |t        j                  ¬«      dddd…dd…f   }d|dd|d   …d|d   …f<   |||<   Œ» t        ||
|¬«      }|rt        ||
|¬«      }||fS |S )z5Pad images using Torchvision with batched operations.NúCPad size must contain 'height' and 'width' keys only. Got pad_size=ú.)rx   ry   éþÿÿÿr   r   zrPadding dimensions are negative. Please make sure that the `pad_size` is larger than the image size. Got pad_size=z, image_size=)Úfillrv   ©Údtype.)ry   )ÚheightÚwidthrb   r   r   ÚitemsÚshaperc   Úpadr.   Ú
zeros_likeÚint64r   )r<   rs   rt   ru   rv   rw   rx   ry   r3   Úgrouped_imagesÚgrouped_images_indexÚprocessed_images_groupedÚprocessed_masks_groupedr„   Ústacked_imagesÚ
image_sizeÚpadding_heightÚpadding_widthÚpaddingÚstacked_masksÚprocessed_imagesÚprocessed_maskss                         r>   r…   zTorchvisionBackend.pad¨   sÁ  € ð ÐØ—O’O¨¯ªÜ Ð#fÐgoÐfpÐpqÐ!rÓsÐsØ Ÿ™¨¯©Ð8‰Hä+¨FÓ3ˆHä/DØÐ%5Àô0
Ñ,ˆÐ,ð $&Ð Ø"$ÐØ%3×%9Ñ%9Ó%;ò 	?Ñ!ˆE�>Ø'×-Ñ-¨b¨cÐ2ˆJØ% a™[¨:°a©=Ñ8ˆNØ$ Q™K¨*°Q©-Ñ7ˆMØ Ò! ]°QÒ%6Ü ð0Ø08¨z¸ÀzÀlÐRSðUóð ð ˜XÒ%Ø˜a °Ð?�Ü!$§¡¨¸ÀzÐ`lÔ!m�Ø.<Ð$ UÑ+âÜ %× 0Ñ 0°ÄuÇ{Á{Ô SÐTWÐYZÒ\]Ò_`ÐT`Ñ a�ØGH�˜c ? Z°¡] ?°O°jÀ±m°OÐCÑDØ1>Ð'¨Ò.ð#	?ô& *Ð*BÐDXÐdmÔnÐÙÜ,Ð-DÐFZÐfoÔpˆOØ# _Ð4Ð4àÐr@   ÚsizeÚresamplez7PILImageResampling | tvF.InterpolationMode | int | NoneÚ	antialiasc                 ó®  — |�#t        |t        t        f«      r
t        |   }n|}nt        j
                  j                  }|t        j
                  j                  k(  r/t        j                  d«       t        j
                  j                  }|j                  r?|j                  r3t        |j                  «       dd |j                  |j                  «      }n¿|j                  r(t        ||j                  dt         j"                  ¬«      }n‹|j$                  r?|j&                  r3t)        |j                  «       dd |j$                  |j&                  «      }n@|j*                  r%|j,                  r|j*                  |j,                  f}nt/        d|› d�«      ‚t1        «       rt3        «       r| j5                  ||||«      S t	        j6                  ||||¬«      S )	z"Resize an image using Torchvision.Na  You have used a torchvision backend image processor with LANCZOS resample which not yet supported for torch.Tensor. BICUBIC resample will be used as an alternative. Please fall back to a pil backend image processor if you want full consistency with the original model.r}   F©r”   Údefault_to_squarerY   újSize must contain 'height' and 'width' keys, or 'max_height' and 'max_width', or 'shortest_edge' key. Got r|   ©Úinterpolationr–   )rO   r*   Úintr,   rc   ÚInterpolationModeÚBILINEARÚLANCZOSrF   rG   ÚBICUBICÚshortest_edgeÚlongest_edger   r”   r   r   ÚFIRSTÚ
max_heightÚ	max_widthr   r�   r‚   rb   r(   r'   Ú_compile_friendly_resizer   )r<   rW   r”   r•   r–   r3   rœ   Únew_sizes           r>   r   zTorchvisionBackend.resizeÚ   s�  € ð ÐÜ˜(Ô%7¼Ð$=Ô>Ü ?ÀÑ I‘à (‘ä×1Ñ1×:Ñ:ˆMØœC×1Ñ1×9Ñ9Ò9Ü×ÑðAôô
  ×1Ñ1×9Ñ9ˆMà×Ò $×"3Ò"3Ü1Ø—
‘
“˜R˜SÐ!Ø×"Ñ"Ø×!Ñ!ó‰Hð
 ×ÒÜ3ØØ×'Ñ'Ø"'Ü"2×"8Ñ"8ô	‰Hð �_Š_ §¢Ü:¸5¿:¹:»<ÈÈÐ;LÈdÏoÉoÐ_c×_mÑ_mÓn‰HØ�[Š[˜TŸZšZØŸ™ T§Z¡ZÐ0‰HäðØ�6˜ðóð ô $Ô%Ô*:Ô*<Ø×0Ñ0°¸À-ÐQZÓ[Ð[Ü�z‰z˜% ¸ÐR[Ô\Ð\r@   r¨   rœ   ztvF.InterpolationModec                 óš  — | j                   t        j                  k(  r”| j                  «       dz  } t	        j
                  | |||¬«      } | dz  } t        j                  | dkD  d| «      } t        j                  | dk  d| «      } | j                  «       j                  t        j                  «      } | S t	        j
                  | |||¬«      } | S )zOA wrapper around tvF.resize for torch.compile compatibility with uint8 tensors.é   r›   éÿ   r   )	r€   r.   Úuint8Úfloatrc   r   ÚwhereÚroundrk   )rW   r¨   rœ   r–   s       r>   r§   z+TorchvisionBackend._compile_friendly_resize  s«   € ð �;‰;œ%Ÿ+™+Ò%Ø—K‘K“M CÑ'ˆEÜ—J‘J˜u h¸mÐW`ÔaˆEØ˜C‘KˆEÜ—K‘K ¨¡¨S°%Ó8ˆEÜ—K‘K ¨¡	¨1¨eÓ4ˆEØ—K‘K“M×$Ñ$¤U§[¡[Ó1ˆEð ˆô —J‘J˜u h¸mÐW`ÔaˆEØˆr@   Úscalec                 ó   — ||z  S )z5Rescale an image by a scale factor using Torchvision.r6   ©r<   rW   r°   r3   s       r>   r   zTorchvisionBackend.rescale"  s   € ð �u‰}Ðr@   ÚmeanÚstdc                 ó0   — t        j                  |||«      S )z%Normalize an image using Torchvision.)rc   r   ©r<   rW   r³   r´   r3   s        r>   r   zTorchvisionBackend.normalize+  s   € ô �}‰}˜U D¨#Ó.Ð.r@   é
   )ÚmaxsizeÚdo_normalizeÚ
image_meanÚ	image_stdÚ
do_rescaleÚrescale_factorc                 óŒ   — |r>|r<t        j                  ||¬«      d|z  z  }t        j                  ||¬«      d|z  z  }d}|||fS )N)rZ   g      ð?F)r.   Útensor)r<   r¹   rº   r»   r¼   r½   rZ   s          r>   Ú!_fuse_mean_std_and_rescale_factorz4TorchvisionBackend._fuse_mean_std_and_rescale_factor5  sO   € ñ ™,äŸ™ j¸Ô@ÀCÈ.ÑDXÑYˆJÜŸ™ Y°vÔ>À#ÈÑBVÑWˆIØˆJØ˜9 jÐ0Ð0r@   c                 óâ   — | j                  ||||||j                  ¬«      \  }}}|r3| j                  |j                  t        j
                  ¬«      ||«      }|S |r| j                  ||«      }|S )zFRescale and normalize images using Torchvision (fused for efficiency).)r¹   rº   r»   r¼   r½   rZ   r   )rÀ   rZ   r   rk   r.   Úfloat32r   )r<   rs   r¼   r½   r¹   rº   r»   s          r>   Úrescale_and_normalizez(TorchvisionBackend.rescale_and_normalizeF  s   € ð -1×,RÑ,RØ%Ø!ØØ!Ø)Ø—=‘=ð -Só -
Ñ)ˆ
�I˜zñ Ø—^‘^ F§I¡I´E·M±M IÓ$BÀJÐPYÓZˆFð ˆñ Ø—\‘\ &¨.Ó9ˆFàˆr@   c                 ó4  — |j                   �|j                  €t        d|j                  «       › �«      ‚|j                  dd \  }}|j                   |j                  }}||kD  s||kD  rv||kD  r||z
  dz  nd||kD  r||z
  dz  nd||kD  r||z
  dz   dz  nd||kD  r||z
  dz   dz  ndg}t        j                  ||d¬«      }|j                  dd \  }}||k(  r||k(  r|S t        ||z
  dz  «      }	t        ||z
  dz  «      }
t        j                  ||	|
||«      S )	z'Center crop an image using Torchvision.Nú=The size dictionary must have keys 'height' and 'width'. Got r}   r^   r   r   )r~   g       @)	r�   r‚   rb   Úkeysr„   rc   r…   r�   Úcrop)r<   rW   r”   r3   Úimage_heightÚimage_widthÚcrop_heightÚ
crop_widthÚpadding_ltrbÚcrop_topÚ	crop_lefts              r>   r   zTorchvisionBackend.center_crop_  sS  € ð �;‰;Ð $§*¡*Ð"4ÜÐ\Ð]a×]fÑ]fÓ]hÐ\iÐjÓkÐkØ$)§K¡K°°Ð$4Ñ!ˆ�kØ"&§+¡+¨t¯z©z�Zˆà˜Ò# {°\Ò'Aà3=ÀÒ3K�˜kÑ)¨aÒ/ÐQRØ5@À<Ò5O�˜|Ñ+°Ò1ÐUVØ7AÀKÒ7O�˜kÑ)¨AÑ-°!Ò3ÐUVØ9DÀ|Ò9S�˜|Ñ+¨aÑ/°AÒ5ÐYZð	ˆLô —G‘G˜E <°aÔ8ˆEØ(-¯©°B°CÐ(8Ñ%ˆL˜+Ø˜[Ò(¨[¸LÒ-HØ�ä˜ {Ñ2°cÑ9Ó:ˆÜ˜ zÑ1°SÑ8Ó9ˆ	Ü�x‰x˜˜x¨°KÀÓLÐLr@   Ú	do_resizeÚdo_center_cropÚ	crop_sizeÚdo_padÚreturn_tensorsc           	      ó¸  — t        ||¬«      \  }}i }|j                  «       D ]   \  }}|r| j                  |||¬«      }|||<   Œ" t        ||«      }t        ||¬«      \  }}i }|j                  «       D ]4  \  }}|r| j	                  ||«      }| j                  ||||	|
|«      }|||<   Œ6 t        ||«      }|r| j                  |||¬«      }t        d|i|¬«      S )z=Preprocess using Torchvision backend (fast, GPU-accelerated).)rx   ©rW   r”   r•   )rt   rx   Úpixel_values©ÚdataÚtensor_type)r   rƒ   r   r   r   rÃ   r…   r	   )r<   rs   rÏ   r”   r•   rÐ   rÑ   r¼   r½   r¹   rº   r»   rÒ   rt   rx   rÓ   r3   rˆ   r‰   Úresized_images_groupedr„   rŒ   Úresized_imagesrŠ   r’   s                            r>   Ú_preprocesszTorchvisionBackend._preprocess{  s&  € ô* 0EÀVÐ^nÔ/oÑ,ˆÐ,Ø!#ÐØ%3×%9Ñ%9Ó%;ò 	;Ñ!ˆE�>ÙØ!%§¡°>ÈÐW_ Ó!`�Ø,:Ð" 5Ò)ð	;ô (Ð(>Ð@TÓUˆô 0EÀ^ÐfvÔ/wÑ,ˆÐ,Ø#%Ð Ø%3×%9Ñ%9Ó%;ò 	=Ñ!ˆE�>ÙØ!%×!1Ñ!1°.À)Ó!L�à!×7Ñ7Ø 
¨N¸LÈ*ÐV_óˆNð /=Ð$ UÒ+ð	=ô *Ð*BÐDXÓYÐáØ#Ÿx™xÐ(8À8Ð^n˜xÓoÐä .Ð2BÐ!CÐQ_Ô`Ð`r@   )NNN)Nr   ÚconstantFFF)NT)NNNNNN)'Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   r    r9   ÚpropertyÚboolrI   rS   rL   rP   rR   r   r   r   rm   r   r   r�   r   rQ   r…   r   Ústaticmethodr§   r­   r   r   r   r   rÀ   rÃ   r   r"   r	   rÜ   Ú__classcell__©r=   s   @r>   r2   r2   U   s|  ø„ áKð' ¨Ñ!5õ 'ð ð
˜ò 
ó ð
ð ð˜ò ó ððw¨c°D¸±I©oÀÀTÈ#ÁYÁÑ.Oó wð& '+Ø;?Ø+/ñ!àð!ð ˜t™ð!ð Ð!1Ñ1°DÑ8ð	!ð
 ˜Ñ(ð!ð ˜Ñ&ð!ð 
ó!ðF% Jð %°:ó %ð "Ø!"Ø#-Ø!Ø(-Ø!&ñ0 à�^Ñ$ð0 ð ð0 ð ˜$‘Jð	0 ð
 ˜D‘jð0 ð ð0 ð  ™+ð0 ð ˜$‘;ð0 ð 
ˆuÐ3Ñ4°nÐDÑ	Eó0 ðl OSØñ3]àð3]ð ð3]ð Lð	3]ð
 ð3]ð 
ó3]ðj ð <@Øñ	Øðà˜˜S˜‘/ðð  Ð 7Ñ8ðð ð	ð
 
òó ðð$àðð ðð
 
óð/àð/ð �h˜u‘oÑ%ð/ð �X˜e‘_Ñ$ð	/ð 
ó/ñ �rÔð %)Ø15Ø04Ø"&Ø'+Ø+/ñ1à˜T‘kð1ð ˜D ™KÑ'¨$Ñ.ð1ð ˜4 ™;Ñ&¨Ñ-ð	1ð
 ˜4‘Kð1ð  ™ð1ð ˜Ñ(ð1ð 
ò1ó ð1ð àðð ðð ð	ð
 ðð ˜D ™KÑ'ðð ˜4 ™;Ñ&ðð 
óð2MàðMð ðMð
 
óMð8-aà�^Ñ$ð-að ð-að ð	-að
 Lð-að ð-að ð-að ð-að ð-að ð-að ˜D ™KÑ'¨$Ñ.ð-að ˜4 ™;Ñ&¨Ñ-ð-að �t‘ð-að ˜T‘/ð-að  ™+ð-að  ˜jÑ(¨4Ñ/ð!-að$ 
÷%-ar@   r2   )Úvisionc                   ó:  ‡ — e Zd ZdZdee   fˆ fd„Zedefd„«       Z	ede
fd„«       Z	 	 d*ded	edz  d
e
ez  dz  dee   dej                  f
d„Zdedefd„Z	 	 	 	 d+deej                     dededz  de
dz  dedeeej                     eej                     f   eej                     z  fd„Z	 	 d*dej                  dedddedz  dej                  f
d„Zdej                  dedej                  fd„Zdej                  deee   z  deee   z  dej                  fd„Zdej                  dedej                  fd„Zdeej                     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
ez  dz  defd(„Zde e
e!f   fˆ fd)„Z"ˆ xZ#S ),Ú
PilBackendz9PIL/NumPy backend for portable CPU-only image processing.r3   c                 óH   •— t        ‰| �  di |¤Ž  | j                  di |¤Ž y r5   r7   r;   s     €r>   r9   zPilBackend.__init__¯  r?   r@   rA   c                 ó.   — t         j                  d«       y)rC   rD   FrE   rH   s    r>   rI   zPilBackend.is_fast³  s   € ô 	×Ñð`ô	
ð r@   c                  ó   — y)rK   Úpilr6   rH   s    r>   rL   zPilBackend.backendÀ  s   € ð
 r@   NrW   rX   rY   c                 óŠ  — t        |«      }|t        j                  t        j                  t        j                  fvrt        d|› �«      ‚|r| j                  |«      }|t        j                  k(  r9t        j                  |«      }|j                  dk\  r8|€t        j                  n|}n#|t        j                  k(  r|j                  «       }|j                  dk(  rt        j                  |d¬«      }|€t        |«      }|t        j                  k(  r0t        |t        j                   «      rt        j"                  |d«      }|S )z'Process a single image for PIL backend.r]   é   r^   r   )Úaxis)r^   r   r   )r   r   r_   r`   ra   rb   r   ÚnpÚarrayrg   r   ri   ÚnumpyÚexpand_dimsr   rO   ÚndarrayÚ	transpose)r<   rW   rX   rY   r3   rl   s         r>   rm   zPilBackend.process_imageÇ  sý   € ô $ EÓ*ˆ
ØœiŸm™m¬Y¯_©_¼i¿o¹oÐNÑNÜÐ<¸Z¸LÐIÓJÐJáØ×'Ñ'¨Ó.ˆEàœŸ™Ò&Ü—H‘H˜U“OˆEà�z‰z˜QŠØ=NÐ=VÔ$4×$9Ò$9Ð\mÑ!Øœ9Ÿ?™?Ò*Ø—K‘K“MˆEà�:‰:˜Š?Ü—N‘N 5¨qÔ1ˆEàÐ$Ü >¸uÓ EÐàÔ 0× 5Ñ 5Ò5ä˜%¤§¡Ô,ÜŸ™ U¨IÓ6�àˆr@   c                 ó   — t        |«      S ro   rp   rq   s     r>   r   zPilBackend.convert_to_rgbë  rr   r@   rs   rt   ru   rv   rw   c                 óž  — |�@|j                   r|j                  st        d|› d�«      ‚|j                   |j                  }}nt        |«      \  }}g }	g }
|D ]í  }t	        |t
        j                  ¬«      \  }}||z
  }||z
  }|dk  s|dk  rt        d|› d|› d|› d|› d	�	«      ‚||k7  s||k7  r@d
d|fd|ff}|dk(  rt        j                  ||d|¬«      }nt        j                  |||¬«      }|	j                  |«       |sŒ«t        j                  ||ft        j                  ¬«      }d|d|…d|…f<   |
j                  |«       Œï |r|	|
fS |	S )z)Pad images to specified size using NumPy.Nr{   r|   ©Úchannel_dimr   zsPadding dimensions are negative. Please make sure that the `pad_size` is larger than the image size. Got pad_size=(z, z), image_size=(z).)r   r   rÝ   )ÚmodeÚconstant_values)rû   r   r   )r�   r‚   rb   r   r   r   r¤   rñ   r…   ÚappendÚzerosr‡   )r<   rs   rt   ru   rv   rw   r3   Útarget_heightÚtarget_widthr’   r“   rW   r�   r‚   rŽ   r�   Ú	pad_widthÚmasks                     r>   r…   zPilBackend.padï  s–  € ð ÐØ—O’O¨¯ªÜ Ð#fÐgoÐfpÐpqÐ!rÓsÐsØ*2¯/©/¸8¿>¹>˜<‰Mä*>¸vÓ*FÑ'ˆM˜<àÐØˆàò 	-ˆEÜ*¨5Ô>N×>TÑ>TÔU‰MˆF�EØ*¨VÑ3ˆNØ(¨5Ñ0ˆMà Ò! ]°QÒ%6Ü ð1Ø1>°¸rÀ,ÀÈÐ_eÐ^fÐfhÐinÐhoÐoqðsóð ð
 ˜Ò&¨%°<Ò*?ð $ a¨Ð%8¸1¸mÐ:LÐM�	Ø :Ò-ÜŸF™F 5¨)¸*ÐV`Ôa‘EäŸF™F 5¨)¸,ÔG�Eà×#Ñ# EÔ*âÜ—x‘x °Ð =ÄRÇXÁXÔN�Ø()��W�f�W˜f˜u˜f�_Ñ%Ø×&Ñ& tÕ,ð3	-ñ6 Ø# _Ð4Ð4ØÐr@   r”   r•   zPILImageResampling | NoneÚreducing_gapc                 óT  — |�>t        |t        t        f«      s(t        �|t        v r
t        |   }nt        j                  }|�|nt        j                  }|j
                  rN|j                  rBt        |t        j                  ¬«      \  }}t        ||f|j
                  |j                  «      }nÎ|j
                  r(t        ||j
                  dt        j                  ¬«      }nš|j                  rN|j                  rBt        |t        j                  ¬«      \  }}t        ||f|j                  |j                  «      }n@|j                  r%|j                   r|j                  |j                   f}nt#        d|› d�«      ‚t%        ||||t        j                  t        j                  ¬«      S )z Resize an image using PIL/NumPy.rù   Fr˜   rš   r|   )r”   r•   r  Údata_formatrY   )rO   r*   r�   r-   rŸ   r¢   r£   r   r   r¤   r   r   r¥   r¦   r   r�   r‚   rb   Ú	np_resize)	r<   rW   r”   r•   r  r3   r�   r‚   r¨   s	            r>   r   zPilBackend.resize"  su  € ð Ð¬
°8Ô>PÔRUÐ=VÔ(WÜ.Ð:¸xÔKjÑ?jÜ:¸8ÑD‘ä-×6Ñ6�Ø'Ð3‘8Ô9K×9TÑ9Tˆà×Ò $×"3Ò"3Ü*¨5Ô>N×>TÑ>TÔU‰MˆF�EÜ1Ø˜�Ø×"Ñ"Ø×!Ñ!ó‰Hð
 ×ÒÜ3ØØ×'Ñ'Ø"'Ü"2×"8Ñ"8ô	‰Hð �_Š_ §¢Ü*¨5Ô>N×>TÑ>TÔU‰MˆF�EÜ:¸FÀE¸?ÈDÏOÉOÐ]a×]kÑ]kÓl‰HØ�[Š[˜TŸZšZØŸ™ T§Z¡ZÐ0‰HäðØ�6˜ðóð ô
 ØØØØ%Ü(×.Ñ.Ü.×4Ñ4ô
ð 	
r@   r°   c                 óX   — t        ||t        j                  t        j                  ¬«      S )z/Rescale an image by a scale factor using NumPy.)r°   r  rY   )Ú
np_rescaler   r¤   r²   s       r>   r   zPilBackend.rescaleU  s)   € ô ØØÜ(×.Ñ.Ü.×4Ñ4ô	
ð 	
r@   r³   r´   c                 óZ   — t        |||t        j                  t        j                  ¬«      S )zNormalize an image using NumPy.)r³   r´   r  rY   )Únp_normalizer   r¤   r¶   s        r>   r   zPilBackend.normalizec  s,   € ô ØØØÜ(×.Ñ.Ü.×4Ñ4ô
ð 	
r@   c                 óì   — |j                   �|j                  €t        d|j                  «       › �«      ‚t	        ||j                   |j                  ft
        j                  t
        j                  ¬«      S )z!Center crop an image using NumPy.rÅ   )r”   r  rY   )r�   r‚   rb   rÆ   Únp_center_cropr   r¤   )r<   rW   r”   r3   s       r>   r   zPilBackend.center_crops  sg   € ð �;‰;Ð $§*¡*Ð"4ÜÐ\Ð]a×]fÑ]fÓ]hÐ\iÐjÓkÐkäØØ—+‘+˜tŸz™zÐ*Ü(×.Ñ.Ü.×4Ñ4ô	
ð 	
r@   rÏ   rÐ   rÑ   r¼   r½   r¹   rº   r»   rÒ   rÓ   c                 ó$  — g }|D ]f  }|r| j                  |||¬«      }|r| j                  ||«      }|r| j                  ||«      }|	r| j                  ||
|«      }|j	                  |«       Œh |r| j                  ||¬«      }t        d|i|¬«      S )z2Preprocess using PIL backend (portable, CPU-only).rÕ   )rt   rÖ   r×   )r   r   r   r   rý   r…   r	   )r<   rs   rÏ   r”   r•   rÐ   rÑ   r¼   r½   r¹   rº   r»   rÒ   rt   rÓ   r3   r’   rW   s                     r>   rÜ   zPilBackend._preprocess„  s¨   € ð& ÐØò 		+ˆEÙØŸ™¨%°dÀX˜ÓN�ÙØ×(Ñ(¨°	Ó:�ÙØŸ™ U¨NÓ;�ÙØŸ™ u¨j¸)ÓD�Ø×#Ñ# EÕ*ð		+ñ Ø#Ÿx™xÐ(8À8˜xÓLÐä .Ð2BÐ!CÐQ_Ô`Ð`r@   c                 ó|   •— t         ‰| �  «       }|j                  dd«      j                  d«      r|d   d d |d<   |S )NÚimage_processor_typeÚ ÚPiléýÿÿÿ)r8   Úto_dictÚgetÚendswith)r<   Úprocessor_dictr=   s     €r>   r  zPilBackend.to_dict¨  sK   ø€ Ü™™Ó*ˆà×ÑÐ4°bÓ9×BÑBÀ5ÔIØ5CÐDZÑ5[Ð\_Ð]_Ð5`ˆNÐ1Ñ2ØÐr@   )NN)Nr   rÝ   F)$rÞ   rß   rà   rá   r!   r    r9   râ   rã   rI   rS   rL   r   r   rñ   rõ   rm   r   rP   r   r�   rQ   r…   r   r­   r   r   r   r   r"   r	   rÜ   Údictr   r  rå   ræ   s   @r>   ré   ré   «  s  ø„ áCð' ¨Ñ!5õ 'ð ð
˜ò 
ó ð
ð ð˜ò ó ðð '+Ø;?ñ	"àð"ð ˜t™ð"ð Ð!1Ñ1°DÑ8ð	"ð
 ˜Ñ&ð"ð 
�‰ó"ðH% Jð %°:ó %ð "Ø!"Ø#-Ø!ñ1 à�R—Z‘ZÑ ð1 ð ð1 ð ˜$‘Jð	1 ð
 ˜D‘jð1 ð ð1 ð 
ˆt�B—J‘JÑ  b§j¡jÑ!1Ð1Ñ	2°T¸"¿*¹*Ñ5EÑ	Eó1 ðn 15Ø#'ñ1
à�z‰zð1
ð ð1
ð .ð	1
ð
 ˜D‘jð1
ð 
�‰ó1
ðf
à�z‰zð
ð ð
ð
 
�‰ó
ð
à�z‰zð
ð �h˜u‘oÑ%ð
ð �X˜e‘_Ñ$ð	
ð 
�‰ó
ð 
à�z‰zð
ð ð
ð
 
�‰ó
ð""aà�R—Z‘ZÑ ð"að ð"að ð	"að
 .ð"að ð"að ð"að ð"að ð"að ð"að ˜D ™KÑ'¨$Ñ.ð"að ˜4 ™;Ñ&¨Ñ-ð"að �t‘ð"að ˜T‘/ð"að ˜jÑ(¨4Ñ/ð"að" 
ó#"aðH˜˜c 3˜h™÷ ñ r@   ré   )CÚcollections.abcr   Ú	functoolsr   Útypingr   r   r   ró   rñ   Úimage_processing_baser	   Úimage_processing_utilsr
   Úimage_transformsr   r  r   r   r   r   r   r   r   r
  r   r  r   r  Úimage_utilsr   r   r   r   r   r   r   r   r   r   r   Úprocessing_utilsr    r!   Úutilsr"   r#   r$   r%   r&   Úutils.import_utilsr'   r(   r)   r*   r.   Útorchvision.transforms.v2r+   rc   r,   r-   Ú
get_loggerrÞ   rF   r2   ré   ÚBaseImageProcessorFastr6   r@   r>   ú<module>r%     sÿ   ðõ %Ý ß 'Ñ 'ã å /Ý 6õ÷÷ õõõ÷÷ ÷ ñ ÷ 3÷õ ÷ UÑ Tñ ÔÝ/áÔÛáÔÝ;ç]Ð]à&*Ð#Ø&*Ð#ð 
ˆ×	Ñ	˜HÓ	%€ñ 
Ð+Ô,ôRaÐ+ó Raó -ðRañj
 
�;ÔôAÐ#ó Aó  ðAðJ ,Ñ r@   