ó
    pyüi;(  ã                   ó¶   • S SK r S SKJr  SSKJr  SSKJrJrJ	r	  SSK
Jr  SSK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)é    N)Ú
functionalé   )ÚTorchvisionBackend)ÚBatchFeatureÚget_patch_output_sizeÚselect_best_resolution)Údivide_to_patches)ÚChannelDimensionÚPILImageResamplingÚSizeDictÚget_image_size)ÚImagesKwargsÚUnpack)Ú
TensorTypeÚauto_docstringc                   óN   • \ rS rSr% Sr\\S'   \\S'   \\\      \S'   \\S'   Sr	g)	ÚAriaImageProcessorKwargsé   aŠ  
max_image_size (`int`, *optional*, defaults to `self.max_image_size`):
    Maximum image size. Must be either 490 or 980.
min_image_size (`int`, *optional*, defaults to `self.min_image_size`):
    Minimum image size. Images smaller than this in any dimension will be scaled up.
split_resolutions (`list[list[int]]`, *optional*, defaults to `self.split_resolutions`):
    A list of possible resolutions as (height, width) pairs for splitting high-resolution images into patches.
split_image (`bool`, *optional*, defaults to `self.split_image`):
    Whether to split the image into patches using the best matching resolution from `split_resolutions`.
Úmax_image_sizeÚmin_image_sizeÚsplit_resolutionsÚsplit_image© N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚintÚ__annotations__ÚlistÚboolÚ__static_attributes__r   ó    Úk/home/mande/repo/quber/.venv/lib/python3.13/site-packages/transformers/models/aria/image_processing_aria.pyr   r      s)   ‡ ñ	ð ÓØÓØ˜D ™I‘Ó&ØÖr$   r   F)Útotalc                   ó¶  ^ • \ rS rSr/ SQr\r\R                  r	/ SQr
/ SQrSrSrSrSrSrSrSrS	\\   4U 4S
 jjrS\S\S\\   4S jrSSS\SSSS4S jrSSS\SS4S jrSSS\\\      S\SSS\S   4
S jr     S)S\S   S\S\S\S\\\   -  S-  S\\\   -  S-  S\S-  S\\-  S-  S \S!\S"\\\      S-  S#\SSS\ 4S$ jjr!S*S%\S&\4S' jjr"S(r#U =r$$ )+ÚAriaImageProcessoré1   ©Úpixel_valuesÚ
pixel_maskÚ	num_crops)ç      à?r.   r.   éÔ  éP  FNTÚkwargsc                 ó¢   >• UR                  S5      c'  / SQnU Vs/ s H  o3S   S-  US   S-  /PM     snUS'   [        TU ]  " S0 UD6  g s  snf )Nr   ))é   é   )r3   r   )r3   é   )r3   é   )r3   é   )r3   é   )r3   é   )r4   r5   )r4   r   )r4   r4   )r4   r3   )r   r3   )r   r4   )r5   r3   )r5   r4   )r6   r3   )r7   r3   )r8   r3   )r9   r3   r   éê  r3   r   )ÚgetÚsuperÚ__init__)Úselfr1   Údefault_resolutionsÚelÚ	__class__s       €r%   r=   ÚAriaImageProcessor.__init__A   sa   ø€ Ø�:‰:Ð)Ó*Ñ2ò #{ÐÙPcÓ*dÒPcÈ"¨q©E°C©K¸¸A¹À¹Ó+EÑPcÑ*dˆFÐ&Ñ'Ü‰ÒÑ"˜6Ó"ùò +es   œAÚoriginal_resolutionÚtarget_resolutionÚreturnc                 ód   • Uu  p4Uu  pV[        Xd-
  S5      u  px[        XS-
  S5      u  pšXyXx-   Xš-   /$ )zNGet padding size for patching, returns [left, top, right, bottom] for tvF.pad.r4   )Údivmod)r>   rC   rD   Úoriginal_heightÚoriginal_widthÚtarget_heightÚtarget_widthÚpaste_xÚr_xÚpaste_yÚr_ys              r%   Ú_get_padding_sizeÚ$AriaImageProcessor._get_padding_sizeG   sE   € à*=Ñ'ˆØ&7Ñ#ˆÜ˜lÑ;¸QÓ?‰ˆÜ˜mÑ=¸qÓA‰ˆØ '¡-°±Ð?Ð?r$   Úimageztorch.TensorÚresamplez7PILImageResampling | tvF.InterpolationMode | int | Nonec                 ój   • [        X[        R                  S9u  pEU R                  U[	        XES9U5      $ )zFResize an image to a target resolution while maintaining aspect ratio.©Úinput_data_format©ÚheightÚwidth)r   r
   ÚFIRSTÚresizer   )r>   rR   rD   rS   Ú
new_heightÚ	new_widths         r%   Ú_resize_for_patchingÚ'AriaImageProcessor._resize_for_patchingO   s8   € ô !6ØÔ8H×8NÑ8Nñ!
Ñˆ
ð �{‰{˜5¤(°*Ñ"NÐPXÓYÐYr$   c                 ó|   • [        X[        R                  S9nU R                  X25      n[        R
                  " XS9$ )zCPad an image to a target resolution while maintaining aspect ratio.rU   )Úpadding)r   r
   rZ   rP   ÚtvFÚpad)r>   rR   rD   Únew_resolutionra   s        r%   Ú_pad_for_patchingÚ$AriaImageProcessor._pad_for_patching[   s6   € ô /¨uÔ[k×[qÑ[qÑrˆØ×(Ñ(¨ÓKˆÜ�wŠw�uÑ.Ð.r$   Úgrid_pinpointsÚ
patch_sizec                 óä   • [        U[        5      (       d  [        S5      e[        U[        R
                  S9n[        XR5      nU R                  XU5      nU R                  Xv5      n[        XƒS9n	U	$ )a:  
Process an image with variable resolutions by dividing it into patches.

Args:
    image (`torch.Tensor`):
        The input image to be processed (channels-first format).
    grid_pinpoints (`list[list[int]]`):
        A list of possible resolutions as (height, width) pairs.
    patch_size (`int`):
        Size of each square patch to divide the image into.
    resample (`PILImageResampling | tvF.InterpolationMode | int | None`):
        Resampling filter to use when resizing.

Returns:
    `list[torch.Tensor]`: A list of image patches in channels-first format.
z6grid_pinpoints must be a list of possible resolutions.)Úchannel_dim)rh   )
Ú
isinstancer!   Ú	TypeErrorr   r
   rZ   r   r^   re   r	   )
r>   rR   rg   rh   rS   Ú
image_sizeÚbest_resolutionÚresized_imageÚpadded_imageÚpatchess
             r%   Úget_image_patchesÚ$AriaImageProcessor.get_image_patchese   sk   € ô. ˜.¬$×/Ñ/ÜÐTÓUÐUä# EÔ7G×7MÑ7MÑNˆ
Ü0°ÓLˆØ×1Ñ1°%È(ÓSˆØ×-Ñ-¨mÓMˆÜ# LÑHˆØˆr$   ÚimagesÚ
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanÚ	image_stdÚdisable_groupingÚreturn_tensorsr   r   r   r   c           
      óX  • U	S;  a  [        S5      e/ n/ nS nU GHA  nU(       a  U R                  UX¹U5      nOU/nUb  [        U5      U:”  a  [        U5      nU Hü  nUR                  S   UR                  S   nnU	[	        UU5      -  nUU:¼  a  [	        [        UU-  5      U
5      nU	nOU	n[	        [        UU-  5      U
5      nU R                  U[        UUS9U5      nU	U-
  nU	U-
  n[        R                  " USSUU/5      n[        R                  " X™4[        R                  S9nSUS U2S U24'   UR                  U5        UR                  U5        Mþ     GMD     [        R                  " USS	9nU R                  UX#XEU5      n[        R                  " USS	9n[!        UUUS
.US9$ )N)r:   r/   z(max_image_size must be either 490 or 980éþÿÿÿéÿÿÿÿrW   r   )ÚdtypeT)Údimr*   )ÚdataÚtensor_type)Ú
ValueErrorrr   ÚlenÚshapeÚmaxr   r[   r   rb   rc   ÚtorchÚzerosr"   ÚappendÚstackÚrescale_and_normalizer   )r>   rt   ru   rv   rw   rx   ry   rz   r{   r   r   r   r   rS   r1   Úpixel_masksÚprocessed_cropsr-   rR   Úcrop_imagesÚ
crop_imageÚhÚwÚscaleÚnew_hÚnew_wÚpadding_bottomÚpadding_rightr,   Ústacked_imagesÚstacked_maskss                                  r%   Ú_preprocessÚAriaImageProcessor._preprocess†   sÑ  € ð"  Ó+ÜÐGÓHÐHàˆØˆØˆ	äˆEÞØ"×4Ñ4°UÐ<MÐ_gÓh‘à$˜g�àÑ ¤C¨Ó$4°yÓ$@Ü Ó,�	ã)�
Ø!×'Ñ'¨Ñ+¨Z×-=Ñ-=¸bÑ-A�1�Ø&¬¨Q°«Ñ2�Ø˜“6Ü¤ A¨¡I£°Ó?�EØ*‘Eà*�EÜ¤ A¨¡I£°Ó?�Eà!Ÿ[™[¨´XÀUÐRWÑ5XÐZbÓc�
à!/°%Ñ!7�Ø .°Ñ 6�Ü ŸWšW Z°!°Q¸À~Ð1VÓW�
ä"Ÿ[š[¨.Ð)IÔQV×Q[ÑQ[Ñ\�
Ø-1�
˜6˜E˜6 6 E 6˜>Ñ*Ø×"Ñ" :Ô.Ø×&Ñ& zÖ2ô' *ñ ô< Ÿš _¸!Ñ<ˆØ×3Ñ3Ø˜J¸ÐR[ó
ˆô Ÿš K°QÑ7ˆäà .Ø+Ø&ñð
 'ñ
ð 	
r$   rX   rY   c                 óÒ   • UR                  SU R                  5      nUR                  SU R                  5      n[        X4U R                  5      u  pgU(       d  SnU$ Xe-  U-  U-  nU$ )aU  
A utility that returns number of image patches for a given image size.

Args:
    height (`int`):
        Height of the input image.
    width (`int`):
        Width of the input image.
    images_kwargs (`dict`, *optional*):
        Any kwargs to override defaults of the image processor.

Returns:
    `int`: Number of patches per image.
r   r   r3   )r;   r   r   r   r   )	r>   rX   rY   Úimages_kwargsr   r   Úresized_heightÚresized_widthÚnum_patchess	            r%   Úget_number_of_image_patchesÚ.AriaImageProcessor.get_number_of_image_patchesË   sv   € ð $×'Ñ'¨°t×7GÑ7GÓHˆØ&×*Ñ*Ð+;¸T×=PÑ=PÓQˆä(>À¸ÐPT×PfÑPfÓ(gÑ%ˆÞ*�aˆØÐð 1?Ñ0PÐS`Ñ0`ÐdrÑ0rˆØÐr$   r   )r/   r0   NFN)N)%r   r   r   r   Úmodel_input_namesr   Úvalid_kwargsr   ÚBICUBICrS   rx   ry   r   r   r   r   Údo_convert_rgbru   rw   r   r=   Útupler!   r   rP   r^   re   rr   r"   ÚfloatÚstrr   r   r™   r    r#   Ú__classcell__)rA   s   @r%   r(   r(   1   s  ø† âCÐØ+€Là!×)Ñ)€HÚ €JÚ€IØ€NØ€NØ€KØÐØ€NØ€JØ€Lð# Ð(@Ñ!A÷ #ð@°Uð @Èuð @ÐY]Ð^aÑYbô @ð
Zàð
Zð !ð
Zð Lð	
Zð
 
ô
Zð/àð/ð !ð/ð 
ô	/ðàðð ˜T #™Y™ðð ð	ð
 Lðð 
ˆnÑ	ôðV "Ø!Ø48Ø!ØNRñC
à�^Ñ$ðC
ð ðC
ð ð	C
ð
 ðC
ð ˜D ™KÑ'¨$Ñ.ðC
ð ˜4 ™;Ñ&¨Ñ-ðC
ð  ™+ðC
ð ˜jÑ(¨4Ñ/ðC
ð ðC
ð ðC
ð    S¡	™?¨TÑ1ðC
ð ðC
ð LðC
ð  
õ!C
ñJ°#ð ¸c÷ ó r$   r(   )r‡   Útorchvision.transforms.v2r   rb   Úimage_processing_backendsr   Úimage_processing_utilsr   r   r   Úimage_transformsr	   Úimage_utilsr
   r   r   r   Úprocessing_utilsr   r   Úutilsr   r   r   r(   Ú__all__r   r$   r%   Ú<module>r²      s]   ðó( Ý 7å ;ß aÑ aÝ 1ß YÓ Yß 4ß /ô˜|°5ò ð$ ômÐ+ó mó ðmð`  Ð
 �r$   