ó
    pyüi<i  ã                   ó  • S SK Jr  S SKJr  S SKJrJr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JrJrJrJr  SS
KJr  SSKJr  SSKJr  SSKJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(  SSK)J*r*J+r+  SSK,J-r-J.r.J/r/J0r0J1r1  SSK2J3r3J4r4J5r5  \0" 5       (       a  SSKJ6r6  \." 5       (       a  S SK7r7\/" 5       (       a  S SK8J9r:  SSKJ;r;J<r<  OSr;Sr<\1Rz                  " \>5      r?\5" SS9 " S S\5      5       r@\5" SS9 " S S\5      5       rA\@rBg)é    )Ú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                    ór  ^ • \ rS rSrSrS\\   4U 4S jjr\S\	4S j5       r
\S\4S j5       rS\\\   -  \\\      -  4S	 jr   S;S\S\	S
-  S\\-  S
-  S\S   S\\   SS4S jjrS\S\4S jr      S<S\S   S\S\S
-  S\S
-  S\	S\	S
-  S\	S
-  S\\S   S4   4S jjr  S=SSS\SSS\	SS4
S  jjr\  S=SSS!\\\4   S"\S#   S\	SS4
S$ jj5       rSSS%\SS4S& jrSSS'\\\   -  S(\\\   -  SS4S) jr\ " S*S+9      S>S,\	S
-  S-\\\   -  S
-  S.\\\   -  S
-  S/\	S
-  S0\S
-  S\S   S\4S1 jj5       r!SSS/\	S0\S,\	S-\\\   -  S.\\\   -  SS4S2 jr"SSS\SS4S3 jr#S\S   S4\	S\SSS5\	S6\S/\	S0\S,\	S-\\\   -  S
-  S.\\\   -  S
-  S7\	S
-  S\S
-  S\	S
-  S8\\$-  S
-  S\%4 S9 jr&S:r'U =r($ )?ÚTorchvisionBackendéU   zATorchvision backend for GPU-accelerated batched image processing.Úkwargsc                 óJ   >• [         TU ]  " S0 UD6  U R                  " S0 UD6  g ©N© ©ÚsuperÚ__init__Ú_set_attributes©Úselfr4   Ú	__class__s     €Úc/home/mande/repo/quber/.venv/lib/python3.13/site-packages/transformers/image_processing_backends.pyr:   ÚTorchvisionBackend.__init__Y   ó$   ø€ Ü‰ÒÑ"˜6Ò"Ø×ÒÑ&˜vÓ&ó    Úreturnc                 ó.   • [         R                  S5        g)úú
`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_fastÚTorchvisionBackend.is_fast]   s   € ô 	×Ñð`ô	
ð rB   c                 ó   • g)ú2
`str`: The backend used by this image processor.
r/   r7   rJ   s    r?   ÚbackendÚTorchvisionBackend.backendj   s   € ð
 rB   Úimage_url_or_urlsc                 ó  • [        U[        [        45      (       a!  U Vs/ s H  o R                  U5      PM     sn$ [        U[        5      (       a  [        U5      $ [        U5      (       a  U$ [        S[        U5       35      es  snf )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=   rQ   Úxs      r?   rV   ÚTorchvisionBackend.fetch_imagesq   sƒ   € ô Ð'¬$´¨×7Ñ7Ù2CÓDÒ2C¨Q×%Ñ% aÖ(Ñ2CÑDÐDÜÐ)¬3×/Ñ/Ü'Ð(9Ó:Ð:ÜÐ-×.Ñ.Ø$Ð$äÐ[Ô\`ÐarÓ\sÐ[tÐuÓvÐvùò Es    BNÚimageÚdo_convert_rgbÚinput_data_formatÚdeviceztorch.deviceútorch.Tensorc                 ó„  • [        U5      nU[        R                  [        R                  [        R                  4;  a  [        SU 35      eU(       a  U R                  U5      nU[        R                  :X  a  [        R                  " U5      nO8U[        R                  :X  a$  [        R                  " U5      R                  5       nUR                  S:X  a  UR                  S5      nUc  [        U5      nU[        R                   :X  a!  UR#                  SSS5      R                  5       nUb  UR%                  U5      nU$ )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=   r\   r]   r^   r_   r4   Ú
image_types          r?   Úprocess_imageÚ 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àˆrB   c                 ó   • [        U5      $ ©zConvert an image to RGB format.©r   ©r=   r\   s     r?   r   Ú!TorchvisionBackend.convert_to_rgb¤   ó   € ä˜eÓ$Ð$rB   ÚimagesÚpad_sizeÚ
fill_valueÚpadding_modeÚreturn_maskÚdisable_groupingÚ	is_nested)r`   r`   c                 ó°  • UbJ  UR                   (       a  UR                  (       d  [        SU S35      eUR                   UR                  4nO[        U5      n[	        XUS9u  pš0 n0 nU	R                  5        Hº  u  pÞUR                  SS nUS   US   -
  nUS   US   -
  nUS:  d  US:  a  [        SU S	U S35      eXò:w  a  SSUU4n[        R                  " UUX4S
9nXëU'   U(       d  Mv  [        R                  " U[        R                  S9SSSS2SS24   nSUSSUS   2SUS   24'   UXÍ'   M¼     [        XºUS9nU(       a  [        XÊUS9nUU4$ U$ )z5Pad images using Torchvision with batched operations.NúCPad size must contain 'height' and 'width' keys only. Got pad_size=Ú.)r   r€   éþÿÿÿ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=)Úfillr}   ©Údtype.)r€   )ÚheightÚwidthrg   r   r   ÚitemsÚshaperh   Úpadr.   Ú
zeros_likeÚint64r   )r=   rz   r{   r|   r}   r~   r   r€   r4   Ú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Œ   ÚTorchvisionBackend.pad¨   s¦  € ð ÑØ—O—O¨¯¯Ü Ð#fÐgoÐfpÐpqÐ!rÓsÐsØ Ÿ™¨¯©Ð8‰Hä+¨FÓ3ˆHä/DØÀñ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óð ð Ó%Ø˜a °Ð?�Ü!$§¢¨¸ÀzÑ!m�Ø.< UÑ+çˆ{Ü %× 0Ò 0°ÄuÇ{Á{Ñ SÐTWÐYZÒ\]Ò_`ÐT`Ñ a�ØGH�˜c ? Z°¡] ?°O°jÀ±m°OÐCÑDØ1>Ð'Ó.ñ# &<ô& *Ð*BÐdmÑnÐÞÜ,Ð-DÐfoÑpˆOØ# _Ð4Ð4àÐrB   ÚsizeÚresamplez7PILImageResampling | tvF.InterpolationMode | int | NoneÚ	antialiasc                 ó  • Ub(  [        U[        [        45      (       a
  [        U   nOUnO[        R
                  R                  nU[        R
                  R                  :X  a/  [        R                  S5        [        R
                  R                  nUR                  (       aD  UR                  (       a3  [        UR                  5       SS UR                  UR                  5      nOÕUR                  (       a%  [        UUR                  S[         R"                  S9nOŸUR$                  (       aD  UR&                  (       a3  [)        UR                  5       SS UR$                  UR&                  5      nOJUR*                  (       a*  UR,                  (       a  UR*                  UR,                  4nO[/        SU S35      e[1        5       (       a!  [3        5       (       a  U R5                  XXd5      $ [        R6                  " XXdS9$ )	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_squarer^   újSize must contain 'height' and 'width' keys, or 'max_height' and 'max_width', or 'shortest_edge' key. Got rƒ   ©Úinterpolationrž   )rS   r*   Úintr,   rh   ÚInterpolationModeÚBILINEARÚLANCZOSrH   rI   ÚBICUBICÚshortest_edgeÚlongest_edger   rœ   r   r   ÚFIRSTÚ
max_heightÚ	max_widthr   rˆ   r‰   rg   r(   r'   Ú_compile_friendly_resizer   )r=   r\   rœ   r�   rž   r4   r¤   Únew_sizes           r?   r   Ú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°À-Ó[Ð[Ü�zŠz˜%¸Ñ\Ð\rB   r°   r¤   ztvF.InterpolationModec                 ó�  • U R                   [        R                  :X  a’  U R                  5       S-  n [        R
                  " XX#S9n U S-  n [        R                  " U S:„  SU 5      n [        R                  " U S:  SU 5      n U R                  5       R                  [        R                  5      n U $ [        R
                  " XX#S9n U $ )zOA wrapper around tvF.resize for torch.compile compatibility with uint8 tensors.é   r£   éÿ   r   )	r‡   r.   Úuint8Úfloatrh   r   ÚwhereÚroundrp   )r\   r°   r¤   rž   s       r?   r¯   Ú+TorchvisionBackend._compile_friendly_resize  s¡   € ð �;‰;œ%Ÿ+™+Ó%Ø—K‘K“M CÑ'ˆEÜ—J’J˜u¸mÑ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¸mÑaˆEØˆrB   Úscalec                 ó
   • X-  $ )z5Rescale an image by a scale factor using Torchvision.r7   ©r=   r\   rº   r4   s       r?   r   ÚTorchvisionBackend.rescale"  s   € ð ‰}ÐrB   ÚmeanÚstdc                 ó0   • [         R                  " XU5      $ )z%Normalize an image using Torchvision.)rh   r   ©r=   r\   r¾   r¿   r4   s        r?   r   ÚTorchvisionBackend.normalize+  s   € ô �}Š}˜U¨#Ó.Ð.rB   é
   )ÚmaxsizeÚdo_normalizeÚ
image_meanÚ	image_stdÚ
do_rescaleÚrescale_factorc                 ó’   • U(       a=  U(       a6  [         R                  " X&S9SU-  -  n[         R                  " X6S9SU-  -  nSnX#U4$ )N)r_   g      ð?F)r.   Útensor)r=   rÅ   rÆ   rÇ   rÈ   rÉ   r_   s          r?   Ú!_fuse_mean_std_and_rescale_factorÚ4TorchvisionBackend._fuse_mean_std_and_rescale_factor5  sI   € ö ž,äŸš jÑ@ÀCÈ.ÑDXÑYˆJÜŸš YÑ>À#ÈÑBVÑWˆIØˆJØ jÐ0Ð0rB   c           	      óä   • U R                  UUUUUUR                  S9u  pVnU(       a/  U R                  UR                  [        R
                  S9XV5      nU$ U(       a  U R                  X5      nU$ )zFRescale and normalize images using Torchvision (fused for efficiency).)rÅ   rÆ   rÇ   rÈ   rÉ   r_   r†   )rÌ   r_   r   rp   r.   Úfloat32r   )r=   rz   rÈ   rÉ   rÅ   rÆ   rÇ   s          r?   Úrescale_and_normalizeÚ(TorchvisionBackend.rescale_and_normalizeF  sx   € ð -1×,RÑ,RØ%Ø!ØØ!Ø)Ø—=‘=ð -Sð -
Ñ)ˆ
˜zö Ø—^‘^ F§I¡I´E·M±M IÐ$BÀJÓZˆFð ˆö Ø—\‘\ &Ó9ˆFàˆrB   c                 ó  • UR                   b  UR                  c  [        SUR                  5        35      eUR                  SS u  pEUR                   UR                  pvXu:”  d  Xd:”  an  Xu:”  a  Xu-
  S-  OSXd:”  a  Xd-
  S-  OSXu:”  a
  Xu-
  S-   S-  OSXd:”  a
  Xd-
  S-   S-  OS/n[
        R                  " XSS9nUR                  SS u  pEXu:X  a  Xd:X  a  U$ [        XF-
  S-  5      n	[        XW-
  S-  5      n
[
        R                  " XX¦U5      $ )	z'Center crop an image using Torchvision.Nú=The size dictionary must have keys 'height' and 'width'. Got r„   rc   r   r   )r…   g       @)	rˆ   r‰   rg   Úkeysr‹   rh   rŒ   r¥   Úcrop)r=   r\   rœ   r4   Úimage_heightÚimage_widthÚcrop_heightÚ
crop_widthÚpadding_ltrbÚcrop_topÚ	crop_lefts              r?   r   ÚTorchvisionBackend.center_crop_  s+  € ð �;‰;Ñ $§*¡*Ñ"4ÜÐ\Ð]a×]fÑ]fÓ]hÐ\iÐjÓkÐkØ$)§K¡K°°Ð$4Ñ!ˆØ"&§+¡+¨t¯z©z�ZàÓ# {Ó'Aà3=Ó3K�Ñ)¨aÒ/ÐQRØ5@Ó5O�Ñ+°Ò1ÐUVØ7AÓ7O�Ñ)¨AÑ-°!Ò3ÐUVØ9DÓ9S�Ñ+¨aÑ/°AÒ5ÐYZð	ˆLô —G’G˜E°aÑ8ˆEØ(-¯©°B°CÐ(8Ñ%ˆLØÓ(¨[Ó-HØ�ä˜Ñ2°cÑ9Ó:ˆÜ˜Ñ1°SÑ8Ó9ˆ	Ü�xŠx˜¨ÀÓLÐLrB   Ú	do_resizeÚdo_center_cropÚ	crop_sizeÚdo_padÚreturn_tensorsc           	      ó¶  • [        XS9u  nn0 nUR                  5        H"  u  nnU(       a  U R                  UX4S9nUUU'   M$     [        UU5      n[        UUS9u  nn0 nUR                  5        H8  u  nnU(       a  U R	                  UU5      nU R                  UXxXšU5      nUUU'   M:     [        UU5      nU(       a  U R                  UXÞS9n[        SU0US9$ )z=Preprocess using Torchvision backend (fast, GPU-accelerated).)r   ©r\   rœ   r�   )r{   r   Úpixel_values©ÚdataÚtensor_type)r   rŠ   r   r   r   rÐ   rŒ   r	   )r=   rz   rÞ   rœ   r�   rß   rà   rÈ   rÉ   rÅ   rÆ   rÇ   rá   r{   r   râ   r4   r�   r�   Úresized_images_groupedr‹   r“   Úresized_imagesr‘   r™   s                            r?   Ú_preprocessÚTorchvisionBackend._preprocess{  s  € ô* 0EÀVÑ/oÑ,ˆÐ,Ø!#ÐØ%3×%9Ñ%9Ö%;Ñ!ˆE�>ÞØ!%§¡°>È Ð!`�Ø,:Ð" 5Ó)ñ &<ô (Ð(>Ð@TÓUˆô 0EÀ^ÐfvÑ/wÑ,ˆÐ,Ø#%Ð Ø%3×%9Ñ%9Ö%;Ñ!ˆE�>ÞØ!%×!1Ñ!1°.À)Ó!L�à!×7Ñ7Ø 
¸LÐV_óˆNð /=Ð$ UÓ+ñ &<ô *Ð*BÐDXÓYÐæØ#Ÿx™xÐ(8À8˜xÐoÐä .Ð2BÐ!CÐQ_Ñ`Ð`rB   r7   )NNN)Nr   ÚconstantFFF)NT)NNNNNN))Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r!   r    r:   ÚpropertyÚboolrK   rW   rO   rT   rV   r   r   r   rr   r   r   r¥   r   rU   rŒ   r   Ústaticmethodr¯   r¶   r   r   r   r   rÌ   rÐ   r   r"   r	   rë   Ú__static_attributes__Ú__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ò -arB   r2   )Úvisionc                   ód  ^ • \ rS rSrSrS\\   4U 4S jjr\S\	4S j5       r
\S\4S j5       r  S,S	\S
\	S-  S\\-  S-  S\\   S\R                   4
S jjrS	\S\4S jr    S-S\\R                      S\S\S-  S\S-  S\	S\\\R                      \\R                      4   \\R                      -  4S jjr  S,S	\R                   S\SSS\S-  S\R                   4
S jjrS	\R                   S\S\R                   4S jrS	\R                   S\\\   -  S\\\   -  S\R                   4S jrS	\R                   S\S\R                   4S jrS\\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\!\\"4   4U 4S* jjr#S+r$U =r%$ ).Ú
PilBackendi«  z9PIL/NumPy backend for portable CPU-only image processing.r4   c                 óJ   >• [         TU ]  " S0 UD6  U R                  " S0 UD6  g r6   r8   r<   s     €r?   r:   ÚPilBackend.__init__¯  rA   rB   rC   c                 ó.   • [         R                  S5        g)rE   rF   FrG   rJ   s    r?   rK   ÚPilBackend.is_fast³  s   € ô 	×Ñð`ô	
ð rB   c                 ó   • g)rN   Úpilr7   rJ   s    r?   rO   ÚPilBackend.backendÀ  s   € ð
 rB   Nr\   r]   r^   c                 ó°  • [        U5      nU[        R                  [        R                  [        R                  4;  a  [        SU 35      eU(       a  U R                  U5      nU[        R                  :X  a<  [        R                  " U5      nUR                  S:¼  a  Uc  [        R                  OUnO$U[        R                  :X  a  UR                  5       nUR                  S:X  a  [        R                  " USS9nUc  [        U5      nU[        R                  :X  a6  [        U[        R                   5      (       a  [        R"                  " US5      nU$ )z'Process a single image for PIL backend.rb   é   rc   r   )Úaxis)rc   r   r   )r   r   rd   re   rf   rg   r   ÚnpÚarrayrl   r   rn   ÚnumpyÚexpand_dimsr   rS   ÚndarrayÚ	transpose)r=   r\   r]   r^   r4   rq   s         r?   rr   Ú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�àˆrB   c                 ó   • [        U5      $ ru   rv   rw   s     r?   r   ÚPilBackend.convert_to_rgbë  ry   rB   rz   r{   r|   r}   r~   c                 ó´  • UbI  UR                   (       a  UR                  (       d  [        SU S35      eUR                   UR                  p‡O[        U5      u  px/ n	/ n
U Hê  n[	        U[
        R                  S9u  pÍX|-
  nX�-
  nUS:  d  US:  a  [        SU SU SU SU S	3	5      eXÇ:w  d  XØ:w  a=  S
SU4SU44nUS:X  a  [        R                  " UUSUS9nO[        R                  " UUUS9nU	R                  U5        U(       d  Mª  [        R                  " Xx4[        R                  S9nSUSU2SU24'   U
R                  U5        Mì     U(       a  Xš4$ U	$ )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‰   rg   r   r   r   r¬   r  rŒ   ÚappendÚzerosrŽ   )r=   rz   r{   r|   r}   r~   r4   Útarget_heightÚtarget_widthr™   rš   r\   rˆ   r‰   r•   r–   Ú	pad_widthÚmasks                     r?   rŒ   ÚPilBackend.padï  s�  € ð ÑØ—O—O¨¯¯Ü Ð#fÐgoÐfpÐpqÐ!rÓsÐsØ*2¯/©/¸8¿>¹>™<ä*>¸vÓ*FÑ'ˆMàÐØˆãˆEÜ*¨5Ô>N×>TÑ>TÑU‰MˆFØ*Ñ3ˆNØ(Ñ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ØÐrB   rœ   r�   zPILImageResampling | NoneÚreducing_gapc           	      óŽ  • UbF  [        U[        [        45      (       d+  [        b  U[        ;   a
  [        U   nO[        R                  nUb  UO[        R                  nUR
                  (       aN  UR                  (       a=  [        U[        R                  S9u  pg[        Xg4UR
                  UR                  5      nOßUR
                  (       a%  [        UUR
                  S[        R                  S9nO©UR                  (       aN  UR                  (       a=  [        U[        R                  S9u  pg[        Xg4UR                  UR                  5      nOJUR                  (       a*  UR                   (       a  UR                  UR                   4nO[#        SU S35      e[%        UUUU[        R                  [        R                  S9$ )z Resize an image using PIL/NumPy.r  Fr    r¢   rƒ   )rœ   r�   r  Údata_formatr^   )rS   r*   r¥   r-   r§   rª   r«   r   r   r¬   r   r   r­   r®   r   rˆ   r‰   rg   Ú	np_resize)	r=   r\   rœ   r�   r  r4   rˆ   r‰   r°   s	            r?   r   ÚPilBackend.resize"  sp  € ð Ñ¬
°8Ô>PÔRUÐ=V×(WÑ(WÜ.Ñ:¸xÔKjÓ?jÜ:¸8ÑD‘ä-×6Ñ6�Ø'Ñ3‘8Ô9K×9TÑ9Tˆà×× $×"3×"3Ü*¨5Ô>N×>TÑ>TÑU‰MˆFÜ1Ø�Ø×"Ñ"Ø×!Ñ!ó‰Hð
 ××Ü3ØØ×'Ñ'Ø"'Ü"2×"8Ñ"8ñ	‰Hð �_�_ §§Ü*¨5Ô>N×>TÑ>TÑU‰MˆFÜ:¸F¸?ÈDÏOÉOÐ]a×]kÑ]kÓl‰HØ�[�[˜TŸZŸZØŸ™ T§Z¡ZÐ0‰HäðØ�6˜ðóð ô
 ØØØØ%Ü(×.Ñ.Ü.×4Ñ4ñ
ð 	
rB   rº   c                 óR   • [        UU[        R                  [        R                  S9$ )z/Rescale an image by a scale factor using NumPy.)rº   r  r^   )Ú
np_rescaler   r¬   r¼   s       r?   r   ÚPilBackend.rescaleU  s)   € ô ØØÜ(×.Ñ.Ü.×4Ñ4ñ	
ð 	
rB   r¾   r¿   c                 óT   • [        UUU[        R                  [        R                  S9$ )zNormalize an image using NumPy.)r¾   r¿   r  r^   )Únp_normalizer   r¬   rÁ   s        r?   r   ÚPilBackend.normalizec  s,   € ô ØØØÜ(×.Ñ.Ü.×4Ñ4ñ
ð 	
rB   c                 óê   • UR                   b  UR                  c  [        SUR                  5        35      e[	        UUR                   UR                  4[
        R                  [
        R                  S9$ )z!Center crop an image using NumPy.rÓ   )rœ   r  r^   )rˆ   r‰   rg   rÔ   Únp_center_cropr   r¬   )r=   r\   rœ   r4   s       r?   r   ÚPilBackend.center_crops  sg   € ð �;‰;Ñ $§*¡*Ñ"4ÜÐ\Ð]a×]fÑ]fÓ]hÐ\iÐjÓkÐkäØØ—+‘+˜tŸz™zÐ*Ü(×.Ñ.Ü.×4Ñ4ñ	
ð 	
rB   rÞ   rß   rà   rÈ   rÉ   rÅ   rÆ   rÇ   rá   râ   c                 óD  • / nU Hv  nU(       a  U R                  UX4S9nU(       a  U R                  UU5      nU(       a  U R                  UU5      nU	(       a  U R                  UX«5      nUR	                  U5        Mx     U(       a  U R                  UUS9n[        SU0US9$ )z2Preprocess using PIL backend (portable, CPU-only).rä   )r{   rå   ræ   )r   r   r   r   r  rŒ   r	   )r=   rz   rÞ   rœ   r�   rß   rà   rÈ   rÉ   rÅ   rÆ   rÇ   rá   r{   râ   r4   r™   r\   s                     r?   rë   ÚPilBackend._preprocess„  sŸ   € ð& ÐÛˆEÞØŸ™¨%°d˜ÐN�ÞØ×(Ñ(¨°	Ó:�ÞØŸ™ U¨NÓ;�ÞØŸ™ u¨jÓD�Ø×#Ñ# EÖ*ñ ö Ø#Ÿx™xÐ(8À8˜xÐLÐä .Ð2BÐ!CÐQ_Ñ`Ð`rB   c                 ó†   >• [         TU ]  5       nUR                  SS5      R                  S5      (       a  US   S S US'   U$ )NÚimage_processor_typeÚ ÚPiléýÿÿÿ)r9   Úto_dictÚgetÚendswith)r=   Úprocessor_dictr>   s     €r?   r0  ÚPilBackend.to_dict¨  sN   ø€ Ü™™Ó*ˆà×ÑÐ4°bÓ9×BÑBÀ5×IÑIØ5CÐDZÑ5[Ð\_Ð]_Ð5`ˆNÐ1Ñ2ØÐrB   r7   )NN)Nr   rí   F)&rî   rï   rð   rñ   rò   r!   r    r:   ró   rô   rK   rW   rO   r   r   r  r
  rr   r   rT   r   r¥   rU   rŒ   r   r¶   r   r   r   r   r"   r	   rë   Údictr   r0  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™÷ õ rB   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+   rh   r,   r-   Ú
get_loggerrî   rH   r2   rû   ÚBaseImageProcessorFastr7   rB   r?   Ú<module>rC     s  ðõ %Ý ß 'Ñ 'ã å /Ý 6õ÷÷ õõõ÷÷ ÷ ñ ÷ 3÷õ ÷ UÑ Tñ ×ÑÝ/á×ÑÛá×ÑÝ;ç]Ð]à&*Ð#Ø&*Ð#ð 
×	Ò	˜HÓ	%€ñ 
Ð+Ñ,ôRaÐ+ó Raó -ðRañj
 
�;ÑôAÐ#ó Aó  ðAðJ ,Ñ rB   