§
    ‚Štj×i  ã                   ó4  — 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l2m3Z3m4Z4m5Z5m6Z6  e0¦   «         rddlm7Z7  e.¦   «         rd dl8Z8 e/¦   «         rd dl9m:Z; ddlm<Z<m=Z= ndZ<dZ= e1j>        e?¦  «        Z@ e6d¬¦  «         G d„ de¦  «        ¦   «         ZA e6d¬¦  «         G d„ de¦  «        ¦   «         ZBeAZCdS )é    )Ú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Úis_torchvision_greater_or_equalÚrequires)ÚPILImageResampling)Ú
functional)Úpil_torch_interpolation_mappingÚtorch_pil_interpolation_mapping)ÚtorchÚtorchvision)Úbackendsc                    óâ  ‡ — 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	 	 	 d=d
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  d0eee         z  d	z  d1eee         z  d	z  d2ed	z  d3ed	z  ded         defd4„¦   «         Z ddd2ed3ed/ed0eee         z  d1eee         z  ddfd5„Z!d
ddeddfd6„Z"ded         d7eded d!d8ed9ed2ed3ed/ed0eee         z  d	z  d1eee         z  d	z  d:ed	z  ded	z  ded	z  d;e
e#z  d	z  de$f d<„Z%ˆ xZ&S )AÚTorchvisionBackendzATorchvision backend for GPU-accelerated batched image processing.Úkwargsc                 óT   •—  t          ¦   «         j        di |¤Ž  | j        di |¤Ž d S ©N© ©ÚsuperÚ__init__Ú_set_attributes©Úselfr4   Ú	__class__s     €úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/image_processing_backends.pyr:   zTorchvisionBackend.__init__Y   ó?   ø€ Ø�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"ØˆÔÐ&Ð&˜vÐ&Ð&Ð&Ð&Ð&ó    Úreturnc                 ó:   — t                                d¦  «         dS )á  
        `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)   € õ 	×Òð`ñ	
ô 	
ð 	
ð ˆtrA   c                 ó   — dS )úB
        `str`: The backend used by this image processor.
        r0   r7   rI   s    r?   ÚbackendzTorchvisionBackend.backendj   s	   € ð
 ˆ}rA   Úimage_url_or_urlsc                 ó   ‡ — t          |t          t          f¦  «        rˆ fd„|D ¦   «         S t          |t          ¦  «        rt	          |¦  «        S t          |¦  «        r|S t          dt          |¦  «        › �¦  «        ‚)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.
        c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r7   )Úfetch_images)Ú.0Úxr=   s     €r?   ú
<listcomp>z3TorchvisionBackend.fetch_images.<locals>.<listcomp>y   s'   ø€ ÐDÐDÐD¨Q�D×%Ò% aÑ(Ô(ÐDÐDÐDrA   z=only a single or a list of entries is supported but got type=)Ú
isinstanceÚlistÚtupleÚstrr   r   Ú	TypeErrorÚtype)r=   rN   s   ` r?   rQ   zTorchvisionBackend.fetch_imagesq   s”   ø€ õ Ð'­$µ¨Ñ7Ô7ð 	wØDÐDÐDÐDÐ2CÐDÑDÔDÐDÝÐ)­3Ñ/Ô/ð 	wÝ'Ð(9Ñ:Ô:Ð:ÝÐ-Ñ.Ô.ð 	wØ$Ð$åÐuÕ\`ÐarÑ\sÔ\sÐuÐuÑvÔvÐvrA   NÚimageÚdo_convert_rgbÚinput_data_formatÚdeviceztorch.deviceútorch.Tensorc                 óx  — t          |¦  «        }|t          j        t          j        t          j        fvrt          d|› �¦  «        ‚|r|                      |¦  «        }|t          j        k    rt          j        |¦  «        }n6|t          j        k    r&t          j
        |¦  «                             ¦   «         }|j        dk    r|                     d¦  «        }|€t          |¦  «        }|t          j        k    r)|                     ddd¦  «                             ¦   «         }|�|                     |¦  «        }|S )z/Process a single image for torchvision backend.úUnsupported input image type é   r   Nr   )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_imagez TorchvisionBackend.process_image�   s  € õ $ EÑ*Ô*ˆ
Ø�iœm­Y¬_½i¼oÐNÐNÐNÝÐI¸ZÐIÐIÑJÔJÐJàð 	/Ø×'Ò'¨Ñ.Ô.ˆEà�œÒ&Ð&ÝÔ% eÑ,Ô,ˆEˆEØ�9œ?Ò*Ð*ÝÔ$ UÑ+Ô+×6Ò6Ñ8Ô8ˆEàŒ:˜Š?ˆ?Ø—O’O AÑ&Ô&ˆEàÐ$Ý >¸uÑ EÔ EÐàÕ 0Ô 5Ò5Ð5Ø—M’M ! Q¨Ñ*Ô*×5Ò5Ñ7Ô7ˆEàÐØ—H’H˜VÑ$Ô$ˆEàˆrA   c                 ó    — t          |¦  «        S ©zConvert an image to RGB format.©r   ©r=   r[   s     r?   r   z!TorchvisionBackend.convert_to_rgb¤   ó   € å˜eÑ$Ô$Ð$rA   r   ÚconstantFÚimagesÚpad_sizeÚ
fill_valueÚpadding_modeÚreturn_maskÚdisable_groupingÚ	is_nested)r_   r_   c                 óÔ  — |�0|j         r|j        st          d|› d�¦  «        ‚|j         |j        f}nt          |¦  «        }t	          |||¬¦  «        \  }	}
i }i }|	                     ¦   «         D ]Î\  }}|j        dd…         }|d         |d         z
  }|d         |d         z
  }|dk     s|dk     rt          d|› d	|› d�¦  «        ‚||k    rdd||f}t          j        ||||¬
¦  «        }|||<   |rKt          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=ú.)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Úwidthrf   r   r   ÚitemsÚshaperg   Úpadr/   Ú
zeros_likeÚint64r   )r=   rx   ry   rz   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Š   zTorchvisionBackend.pad¨   s  € ð ÐØ”Oð t¨¬ð tÝ Ð!rÐgoÐ!rÐ!rÐ!rÑsÔsÐsØ œ¨¬Ð8ˆHˆHå+¨FÑ3Ô3ˆHå/DØÐ%5Àð0
ñ 0
ô 0
Ñ,ˆÐ,ð $&Ð Ø"$ÐØ%3×%9Ò%9Ñ%;Ô%;ð 	?ð 	?Ñ!ˆE�>Ø'Ô-¨b¨c¨cÔ2ˆJØ% aœ[¨:°a¬=Ñ8ˆNØ$ QœK¨*°Q¬-Ñ7ˆMØ Ò!Ð! ]°QÒ%6Ð%6Ý ðUØ08ðUð UØGQðUð Uð Uñô ð ð ˜XÒ%Ð%Ø˜a °Ð?�Ý!$¤¨¸ÀzÐ`lÐ!mÑ!mÔ!m�Ø.<Ð$ UÑ+àð ?Ý %Ô 0°ÅuÄ{Ð SÑ SÔ SÐTWÐYZÐ\]Ð\]Ð\]Ð_`Ð_`Ð_`ÐT`Ô a�ØGH�˜c ? Z°¤] ?°O°jÀ´m°OÐCÑDØ1>Ð'¨Ñ.øå)Ð*BÐDXÐdmÐnÑnÔnÐØð 	5Ý,Ð-DÐFZÐfoÐpÑpÔpˆOØ# _Ð4Ð4àÐrA   TÚsizeÚresamplez7PILImageResampling | tvF.InterpolationMode | int | NoneÚ	antialiasc                 ó|  — |�-t          |t          t          f¦  «        rt          |         }n|}nt          j        j        }|t          j        j        k    r:t          d¦  «        s+t           
                    d¦  «         t          j        j        }|j        r=|j        r6t          |                     ¦   «         dd…         |j        |j        ¦  «        }nž|j        r#t!          ||j        dt"          j        ¬¦  «        }nt|j        r=|j        r6t+          |                     ¦   «         dd…         |j        |j        ¦  «        }n0|j        r|j        r|j        |j        f}nt1          d|› d�¦  «        ‚t3          ¦   «         r&t5          ¦   «         r|                      ||||¦  «        S t	          j        ||||¬	¦  «        S )
z"Resize an image using Torchvision.Nz0.27aC  You have used a torchvision backend image processor with LANCZOS resample which is not supported for torch.Tensor with torchvision < 0.27. BICUBIC resample will be used as an alternative. Please upgrade torchvision to 0.27+ or 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›   )rU   r+   Úintr-   rg   ÚInterpolationModeÚBILINEARÚLANCZOSr)   rG   rH   ÚBICUBICÚshortest_edgeÚlongest_edger   r™   r   r   ÚFIRSTÚ
max_heightÚ	max_widthr   r†   r‡   rf   r(   r'   Ú_compile_friendly_resizer   )r=   r[   r™   rš   r›   r4   r¡   Únew_sizes           r?   r   zTorchvisionBackend.resizeÚ   sæ  € ð ÐÝ˜(Õ%7½Ð$=Ñ>Ô>ð )Ý ?ÀÔ I��à (��åÔ1Ô:ˆMØ�CÔ1Ô9Ò9Ð9ÕBaÐbhÑBiÔBiÐ9Ý×ÒðAñô ð õ  Ô1Ô9ˆMàÔð 	 $Ô"3ð 	Ý1Ø—
’
‘”˜R˜S˜SÔ!ØÔ"ØÔ!ñô ˆHˆHð
 Ôð 	Ý3ØØÔ'Ø"'Ý"2Ô"8ð	ñ ô ˆHˆHð Œ_ð 	 ¤ð 	Ý:¸5¿:º:¹<¼<ÈÈÈÔ;LÈdÌoÐ_cÔ_mÑnÔnˆHˆHØŒ[ð 	˜TœZð 	Øœ T¤ZÐ0ˆHˆHåðØðð ð ñô ð õ $Ñ%Ô%ð 	\Õ*:Ñ*<Ô*<ð 	\Ø×0Ò0°¸À-ÐQZÑ[Ô[Ð[ÝŒz˜% ¸ÐR[Ð\Ñ\Ô\Ð\rA   r­   r¡   ztvF.InterpolationModec                 ó”  — | j         t          j        k    rš|                      ¦   «         dz  } t	          j        | |||¬¦  «        } | dz  } t          j        | dk    d| ¦  «        } t          j        | dk     d| ¦  «        } |                      ¦   «                              t          j        ¦  «        } nt	          j        | |||¬¦  «        } | S )zOA wrapper around tvF.resize for torch.compile compatibility with uint8 tensors.é   r    éÿ   r   )	r…   r/   Úuint8Úfloatrg   r   ÚwhereÚroundro   )r[   r­   r¡   r›   s       r?   r¬   z+TorchvisionBackend._compile_friendly_resize  s²   € ð Œ;�%œ+Ò%Ð%Ø—K’K‘M”M CÑ'ˆEÝ”J˜u h¸mÐW`ÐaÑaÔaˆEØ˜C‘KˆEÝ”K ¨¢¨S°%Ñ8Ô8ˆEÝ”K ¨¢	¨1¨eÑ4Ô4ˆEØ—K’K‘M”M×$Ò$¥U¤[Ñ1Ô1ˆEˆEå”J˜u h¸mÐW`ÐaÑaÔaˆEØˆrA   Úscalec                 ó   — ||z  S )z5Rescale an image by a scale factor using Torchvision.r7   ©r=   r[   rµ   r4   s       r?   r   zTorchvisionBackend.rescale#  s   € ð �u‰}ÐrA   ÚmeanÚstdc                 ó.   — t          j        |||¦  «        S )z%Normalize an image using Torchvision.)rg   r   ©r=   r[   r¸   r¹   r4   s        r?   r   zTorchvisionBackend.normalize,  s   € õ Œ}˜U D¨#Ñ.Ô.Ð.rA   é
   )Ú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)r^   g      ð?F)r/   Útensor)r=   r¾   r¿   rÀ   rÁ   rÂ   r^   s          r?   Ú!_fuse_mean_std_and_rescale_factorz4TorchvisionBackend._fuse_mean_std_and_rescale_factor6  sa   € ð ð 	˜,ð 	åœ j¸Ð@Ñ@Ô@ÀCÈ.ÑDXÑYˆJÝœ Y°vÐ>Ñ>Ô>À#ÈÑBVÑWˆIØˆJØ˜9 jÐ0Ð0rA   c                 óî   — |                       ||||||j        ¬¦  «        \  }}}|r6|                      |                     t          j        ¬¦  «        ||¦  «        }n|r|                      ||¦  «        }|S )zFRescale and normalize images using Torchvision (fused for efficiency).)r¾   r¿   rÀ   rÁ   rÂ   r^   r„   )rÅ   r^   r   ro   r/   Úfloat32r   )r=   rx   rÁ   rÂ   r¾   r¿   rÀ   s          r?   Úrescale_and_normalizez(TorchvisionBackend.rescale_and_normalizeG  sŒ   € ð -1×,RÒ,RØ%Ø!ØØ!Ø)Ø”=ð -Sñ -
ô -
Ñ)ˆ
�I˜zð ð 	:Ø—^’^ F§I¢IµE´M IÑ$BÔ$BÀJÐPYÑZÔZˆFˆFØð 	:Ø—\’\ &¨.Ñ9Ô9ˆFàˆrA   c                 ó8  — |j         �|j        €$t          d|                     ¦   «         › �¦  «        ‚|j        dd…         \  }}|j         |j        }}||k    s||k    r{||k    r||z
  dz  nd||k    r||z
  dz  nd||k    r||z
  dz   dz  nd||k    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‚   rb   r   r   )rƒ   g       @)	r†   r‡   rf   Úkeysr‰   rg   rŠ   r¢   Úcrop)r=   r[   r™   r4   Úimage_heightÚimage_widthÚcrop_heightÚ
crop_widthÚpadding_ltrbÚcrop_topÚ	crop_lefts              r?   r   zTorchvisionBackend.center_crop`  s€  € ð Œ;Ð $¤*Ð"4ÝÐjÐ]a×]fÒ]fÑ]hÔ]hÐjÐjÑkÔkÐkØ$)¤K°°°Ô$4Ñ!ˆ�kØ"&¤+¨t¬z�Zˆà˜Ò#Ð# {°\Ò'AÐ'Aà3=ÀÒ3KÐ3K�˜kÑ)¨aÑ/Ð/ÐQRØ5@À<Ò5OÐ5O�˜|Ñ+°Ñ1Ð1ÐUVØ7AÀKÒ7OÐ7O�˜kÑ)¨AÑ-°!Ñ3Ð3ÐUVØ9DÀ|Ò9SÐ9S�˜|Ñ+¨aÑ/°AÑ5Ð5ÐYZð	ˆLõ ”G˜E <°aÐ8Ñ8Ô8ˆEØ(-¬°B°C°CÔ(8Ñ%ˆL˜+Ø˜[Ò(Ð(¨[¸LÒ-HÐ-HØ�å˜ {Ñ2°cÑ9Ñ:Ô:ˆÝ˜ zÑ1°SÑ8Ñ9Ô9ˆ	ÝŒx˜˜x¨°KÀÑLÔLÐLrA   Ú	do_resizeÚdo_center_cropÚ	crop_sizeÚdo_padÚreturn_tensorsc           	      ó  — t          ||¬¦  «        \  }}i }|                     ¦   «         D ]$\  }}|r|                      |||¬¦  «        }|||<   Œ%t          ||¦  «        }t          ||¬¦  «        \  }}i }|                     ¦   «         D ]<\  }}|r|                      ||¦  «        }|                      ||||	|
|¦  «        }|||<   Œ=t          ||¦  «        }|r|                      |||¬¦  «        }t          d|i|¬¦  «        S )z=Preprocess using Torchvision backend (fast, GPU-accelerated).)r}   ©r[   r™   rš   )ry   r}   Úpixel_values©ÚdataÚtensor_type)r   rˆ   r   r   r   rÈ   rŠ   r	   )r=   rx   rÔ   r™   rš   rÕ   rÖ   rÁ   rÂ   r¾   r¿   rÀ   r×   ry   r}   rØ   r4   r�   rŽ   Úresized_images_groupedr‰   r‘   Úresized_imagesr�   r—   s                            r?   Ú_preprocesszTorchvisionBackend._preprocess|  sf  € õ* 0EÀVÐ^nÐ/oÑ/oÔ/oÑ,ˆÐ,Ø!#ÐØ%3×%9Ò%9Ñ%;Ô%;ð 	;ð 	;Ñ!ˆE�>Øð aØ!%§¢°>ÈÐW_ Ñ!`Ô!`�Ø,:Ð" 5Ñ)Ð)Ý'Ð(>Ð@TÑUÔUˆõ 0EÀ^ÐfvÐ/wÑ/wÔ/wÑ,ˆÐ,Ø#%Ð Ø%3×%9Ò%9Ñ%;Ô%;ð 	=ð 	=Ñ!ˆE�>Øð MØ!%×!1Ò!1°.À)Ñ!LÔ!L�à!×7Ò7Ø 
¨N¸LÈ*ÐV_ñô ˆNð /=Ð$ UÑ+Ð+Ý)Ð*BÐDXÑYÔYÐàð 	pØ#ŸxšxÐ(8À8Ð^n˜xÑoÔoÐå .Ð2BÐ!CÐQ_Ð`Ñ`Ô`Ð`rA   )NNN)Nr   rw   FFF)NT)NNNNNN)'Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   r    r:   ÚpropertyÚboolrJ   rX   rM   rV   rQ   r   r   r   rq   r   r   r¢   r   rW   rŠ   r   Ústaticmethodr¬   r²   r   r   r   r   rÅ   rÈ   r   r"   r	   rá   Ú__classcell__©r>   s   @r?   r3   r3   U   s­  ø€ € € € € àKÐKð' ¨Ô!5ð 'ð 'ð 'ð 'ð 'ð 'ð ð
˜ð 
ð 
ð 
ñ „Xð
ð ð˜ð ð ð ñ „Xððw¨c°D¸´I©oÀÀTÈ#ÄYÄÑ.Oð wð wð wð wð& '+Ø;?Ø+/ð!ð !àð!ð ˜t™ð!ð Ð!1Ñ1°DÑ8ð	!ð
 ˜Ô(ð!ð ˜Ô&ð!ð 
ð!ð !ð !ð !ðF% Jð %°:ð %ð %ð %ð %ð "Ø!"Ø#-Ø!Ø(-Ø!&ð0 ð 0 à�^Ô$ð0 ð ð0 ð ˜$‘Jð	0 ð
 ˜D‘jð0 ð ð0 ð  ™+ð0 ð ˜$‘;ð0 ð 
ˆuÐ3Ô4°nÐDÔ	Eð0 ð 0 ð 0 ð 0 ðl OSØð4]ð 4]àð4]ð ð4]ð Lð	4]ð
 ð4]ð 
ð4]ð 4]ð 4]ð 4]ðl ð <@Øð	ð Øðà˜˜S˜”/ðð  Ð 7Ô8ðð ð	ð
 
ðð ð ñ „\ðð$àðð ðð
 
ðð ð ð ð/àð/ð �h˜u”oÑ%ð/ð �X˜e”_Ñ$ð	/ð 
ð/ð /ð /ð /ð €Y�rÐÑÔð %)Ø15Ø04Ø"&Ø'+Ø+/ð1ð 1à˜T‘kð1ð ˜D œKÑ'¨$Ñ.ð1ð ˜4 œ;Ñ&¨Ñ-ð	1ð
 ˜4‘Kð1ð  ™ð1ð ˜Ô(ð1ð 
ð1ð 1ð 1ñ Ôð1ð àðð ðð ð	ð
 ðð ˜D œKÑ'ðð ˜4 œ;Ñ&ðð 
ðð ð ð ð2MàðMð ðMð
 
ð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ð -að -að -að -að -að -arA   r3   )Ú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.r4   c                 óT   •—  t          ¦   «         j        di |¤Ž  | j        di |¤Ž d S r6   r8   r<   s     €r?   r:   zPilBackend.__init__°  r@   rA   rB   c                 ó:   — t                                d¦  «         dS )rD   rE   FrF   rI   s    r?   rJ   zPilBackend.is_fast´  s)   € õ 	×Òð`ñ	
ô 	
ð 	
ð ˆurA   c                 ó   — dS )rL   Úpilr7   rI   s    r?   rM   zPilBackend.backendÁ  s	   € ð
 ˆurA   Nr[   r\   r]   c                 ój  — t          |¦  «        }|t          j        t          j        t          j        fvrt          d|› �¦  «        ‚|r|                      |¦  «        }|t          j        k    r0t          j        |¦  «        }|j	        dk    r|€t          j        n|}n$|t          j        k    r|                     ¦   «         }|j	        dk    rt          j        |d¬¦  «        }|€t          |¦  «        }|t          j        k    r/t          |t          j        ¦  «        rt          j        |d¦  «        }|S )z'Process a single image for PIL backend.ra   é   Nrb   r   )Úaxis)rb   r   r   )r   r   rc   rd   re   rf   r   ÚnpÚarrayrk   r   rm   ÚnumpyÚexpand_dimsr   rU   ÚndarrayÚ	transpose)r=   r[   r\   r]   r4   rp   s         r?   rq   zPilBackend.process_imageÈ  s  € õ $ EÑ*Ô*ˆ
Ø�iœm­Y¬_½i¼oÐNÐNÐNÝÐI¸ZÐIÐIÑJÔJÐJàð 	/Ø×'Ò'¨Ñ.Ô.ˆEà�œÒ&Ð&Ý”H˜U‘O”OˆEàŒz˜QŠˆØ=NÐ=VÕ$4Ô$9Ð$9Ð\mÐ!øØ�9œ?Ò*Ð*Ø—K’K‘M”MˆEàŒ:˜Š?ˆ?Ý”N 5¨qÐ1Ñ1Ô1ˆEàÐ$Ý >¸uÑ EÔ EÐàÕ 0Ô 5Ò5Ð5å˜%¥¤Ñ,Ô,ð 7Ýœ U¨IÑ6Ô6�àˆrA   c                 ó    — t          |¦  «        S rs   rt   ru   s     r?   r   zPilBackend.convert_to_rgbì  rv   rA   r   rw   Frx   ry   rz   r{   r|   c                 ó”  — |�0|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	�	¦  «        ‚||k    s||k    r?d
d|fd|ff}|dk    rt          j        ||d|¬¦  «        }nt          j        |||¬¦  «        }|	 	                    |¦  «         |rBt          j
        ||ft          j        ¬¦  «        }d|d|…d|…f<   |
 	                    |¦  «         Œ÷|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   rw   )ÚmodeÚconstant_values)rÿ   r„   r   )r†   r‡   rf   r   r   r   r©   rõ   rŠ   ÚappendÚzerosrŒ   )r=   rx   ry   rz   r{   r|   r4   Útarget_heightÚtarget_widthr—   r˜   r[   r†   r‡   r“   r”   Ú	pad_widthÚmasks                     r?   rŠ   zPilBackend.padð  sø  € ð ÐØ”Oð t¨¬ð tÝ Ð!rÐgoÐ!rÐ!rÐ!rÑsÔsÐsØ*2¬/¸8¼>˜<ˆMˆMå*>¸vÑ*FÔ*FÑ'ˆM˜<àÐØˆàð 	-ð 	-ˆEÝ*¨5Õ>NÔ>TÐUÑUÔU‰MˆF�EØ*¨VÑ3ˆNØ(¨5Ñ0ˆMà Ò!Ð! ]°QÒ%6Ð%6Ý ðsØ1>ðsð sØBNðsð sØ_eðsð sØinðsð sð sñô ð ð
 ˜Ò&Ð&¨%°<Ò*?Ð*?ð $ a¨Ð%8¸1¸mÐ:LÐM�	Ø :Ò-Ð-ÝœF 5¨)¸*ÐV`ÐaÑaÔa�E�EåœF 5¨)¸,ÐGÑGÔG�Eà×#Ò# EÑ*Ô*Ð*àð -Ý”x °Ð =ÅRÄXÐNÑNÔN�Ø()��W�f�W˜f˜u˜f�_Ñ%Ø×&Ò& tÑ,Ô,Ð,øàð 	5Ø# _Ð4Ð4ØÐrA   r™   rš   zPILImageResampling | NoneÚreducing_gapc                 óà  — |�Ft          |t          t          f¦  «        s*t          �|t          v rt          |         }nt          j        }|�|nt          j        }|j        rC|j        r<t          |t          j	        ¬¦  «        \  }}t          ||f|j        |j        ¦  «        }n¤|j        r#t          ||j        dt          j	        ¬¦  «        }nz|j        rC|j        r<t          |t          j	        ¬¦  «        \  }}t          ||f|j        |j        ¦  «        }n0|j        r|j        r|j        |j        f}nt#          d|› d�¦  «        ‚t%          ||||t          j	        t          j	        ¬¦  «        S )z Resize an image using PIL/NumPy.Nrý   Fr�   rŸ   r�   )r™   rš   r  Údata_formatr]   )rU   r+   r¢   r.   r¤   r§   r¨   r   r   r©   r   r   rª   r«   r   r†   r‡   rf   Ú	np_resize)	r=   r[   r™   rš   r  r4   r†   r‡   r­   s	            r?   r   zPilBackend.resize#  s¨  € ð Ð­
°8Õ>PÕRUÐ=VÑ(WÔ(WÐÝ.Ð:¸xÕKjÐ?jÐ?jÝ:¸8ÔD��å-Ô6�Ø'Ð3�8�8Õ9KÔ9TˆàÔð 	 $Ô"3ð 	Ý*¨5Õ>NÔ>TÐUÑUÔU‰MˆF�EÝ1Ø˜�ØÔ"ØÔ!ñô ˆHˆHð
 Ôð 	Ý3ØØÔ'Ø"'Ý"2Ô"8ð	ñ ô ˆHˆHð Œ_ð 		 ¤ð 		Ý*¨5Õ>NÔ>TÐUÑUÔU‰MˆF�EÝ:¸FÀE¸?ÈDÌOÐ]aÔ]kÑlÔlˆHˆHØŒ[ð 	˜TœZð 	Øœ T¤ZÐ0ˆHˆHåðØðð ð ñô ð õ
 ØØØØ%Ý(Ô.Ý.Ô4ð
ñ 
ô 
ð 	
rA   rµ   c                 óP   — t          ||t          j        t          j        ¬¦  «        S )z/Rescale an image by a scale factor using NumPy.)rµ   r	  r]   )Ú
np_rescaler   r©   r·   s       r?   r   zPilBackend.rescaleV  s-   € õ ØØÝ(Ô.Ý.Ô4ð	
ñ 
ô 
ð 	
rA   r¸   r¹   c                 óR   — t          |||t          j        t          j        ¬¦  «        S )zNormalize an image using NumPy.)r¸   r¹   r	  r]   )Únp_normalizer   r©   r»   s        r?   r   zPilBackend.normalized  s0   € õ ØØØÝ(Ô.Ý.Ô4ð
ñ 
ô 
ð 	
rA   c                 óÌ   — |j         �|j        €$t          d|                     ¦   «         › �¦  «        ‚t	          ||j         |j        ft
          j        t
          j        ¬¦  «        S )z!Center crop an image using NumPy.NrÊ   )r™   r	  r]   )r†   r‡   rf   rË   Únp_center_cropr   r©   )r=   r[   r™   r4   s       r?   r   zPilBackend.center_cropt  si   € ð Œ;Ð $¤*Ð"4ÝÐjÐ]a×]fÒ]fÑ]hÔ]hÐjÐjÑkÔkÐkåØØ”+˜tœzÐ*Ý(Ô.Ý.Ô4ð	
ñ 
ô 
ð 	
rA   rÔ   rÕ   rÖ   rÁ   rÂ   r¾   r¿   rÀ   r×   rØ   c                 óX  — g }|D ]z}|r|                       |||¬¦  «        }|r|                      ||¦  «        }|r|                      ||¦  «        }|	r|                      ||
|¦  «        }|                     |¦  «         Œ{|r|                      ||¬¦  «        }t          d|i|¬¦  «        S )z2Preprocess using PIL backend (portable, CPU-only).rÚ   )ry   rÛ   rÜ   )r   r   r   r   r  rŠ   r	   )r=   rx   rÔ   r™   rš   rÕ   rÖ   rÁ   rÂ   r¾   r¿   rÀ   r×   ry   rØ   r4   r—   r[   s                     r?   rá   zPilBackend._preprocess…  sà   € ð& ÐØð 		+ð 		+ˆEØð OØŸš¨%°dÀX˜ÑNÔN�Øð ;Ø×(Ò(¨°	Ñ:Ô:�Øð <ØŸš U¨NÑ;Ô;�Øð EØŸš u¨j¸)ÑDÔD�Ø×#Ò# EÑ*Ô*Ð*Ð*àð 	MØ#ŸxšxÐ(8À8˜xÑLÔLÐå .Ð2BÐ!CÐQ_Ð`Ñ`Ô`Ð`rA   c                 óÀ   •— t          ¦   «                              ¦   «         }|                     dd¦  «                             d¦  «        r|d         d d…         |d<   |S )NÚimage_processor_typeÚ ÚPiléýÿÿÿ)r9   Úto_dictÚgetÚendswith)r=   Úprocessor_dictr>   s     €r?   r  zPilBackend.to_dict©  sa   ø€ Ý™œŸšÑ*Ô*ˆà×ÒÐ4°bÑ9Ô9×BÒBÀ5ÑIÔIð 	aØ5CÐDZÔ5[Ð\_Ð]_Ð\_Ô5`ˆNÐ1Ñ2ØÐrA   )NN)Nr   rw   F)$râ   rã   rä   rå   r!   r    r:   ræ   rç   rJ   rX   rM   r   r   rõ   rù   rq   r   rV   r   r¢   rW   rŠ   r   r²   r   r   r   r   r"   r	   rá   Údictr   r  ré   rê   s   @r?   rí   rí   ¬  sì  ø€ € € € € àCÐCð' ¨Ô!5ð 'ð 'ð 'ð 'ð 'ð 'ð ð
˜ð 
ð 
ð 
ñ „Xð
ð ð˜ð ð ð ñ „Xðð '+Ø;?ð	"ð "àð"ð ˜t™ð"ð Ð!1Ñ1°DÑ8ð	"ð
 ˜Ô&ð"ð 
Œð"ð "ð "ð "ðH% Jð %°:ð %ð %ð %ð %ð "Ø!"Ø#-Ø!ð1 ð 1 à�R”ZÔ ð1 ð ð1 ð ˜$‘Jð	1 ð
 ˜D‘jð1 ð ð1 ð 
ˆt�B”JÔ  b¤jÔ!1Ð1Ô	2°T¸"¼*Ô5EÑ	Eð1 ð 1 ð 1 ð 1 ðn 15Ø#'ð1
ð 1
àŒzð1
ð ð1
ð .ð	1
ð
 ˜D‘jð1
ð 
Œð1
ð 1
ð 1
ð 1
ðf
àŒzð
ð ð
ð
 
Œð
ð 
ð 
ð 
ð
àŒzð
ð �h˜u”oÑ%ð
ð �X˜e”_Ñ$ð	
ð 
Œð
ð 
ð 
ð 
ð 
àŒzð
ð ð
ð
 
Œð
ð 
ð 
ð 
ð""aà�R”ZÔ ð"að ð"að ð	"að
 .ð"að ð"að ð"að ð"að ð"að ð"að ˜D œKÑ'¨$Ñ.ð"að ˜4 œ;Ñ&¨Ñ-ð"að �t‘ð"að ˜T‘/ð"að ˜jÑ(¨4Ñ/ð"að" 
ð#"að "að "að "aðH˜˜c 3˜hœð ð ð ð ð ð ð ð ð ð rA   rí   )DÚ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+   r/   Útorchvision.transforms.v2r,   rg   r-   r.   Ú
get_loggerrâ   rG   r3   rí   ÚBaseImageProcessorFastr7   rA   r?   ú<module>r)     sš  ðð %Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'à Ð Ð Ð à /Ð /Ð /Ð /Ð /Ð /Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6ðð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ðð ð ð ð ð ðð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 3Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2ðð ð ð ð ð ð ð ð ð ð ð ð ð ð vÐ uÐ uÐ uÐ uÐ uÐ uÐ uÐ uÐ uÐ uÐ uð ÐÑÔð 0Ø/Ð/Ð/Ð/Ð/Ð/àÐÑÔð Ø€L€L€LàÐÑÔð +Ø;Ð;Ð;Ð;Ð;Ð;à]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]à&*Ð#Ø&*Ð#ð 
ˆÔ	˜HÑ	%Ô	%€ð 
€Ð+Ð,Ñ,Ô,ðSað Sað Sað Sað SaÐ+ñ Saô Sañ -Ô,ðSaðl
 
€�;ÐÑÔðAð Að Að Að AÐ#ñ Aô Añ  ÔðAðJ ,Ð Ð Ð rA   