Ë
    ÛÓ^jâ(  ã                   óÄ   — d dl Z d dlZd dlmZ ddlmZ ddlmZm	Z	m
Z
 ddlmZ ddlmZmZmZmZ ddlmZmZ dd	lmZmZ  G d
„ ded¬«      Ze G d„ de«      «       ZdgZy)é    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                   óF   — e Zd ZU dZeed<   eed<   eee      ed<   eed<   y)ÚAriaImageProcessorKwargsa®  
    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_imageN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintÚ__annotations__ÚlistÚbool© ó    úy/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/aria/image_processing_aria.pyr   r   !   s)   … ñ	ð ÓØÓØ˜D ™I‘Ó&ØÔr!   r   F)Útotalc                   óš  ‡ — e Zd Zg d¢ZeZej                  Zg d¢Z	g d¢Z
dZdZdZdZdZdZdZdee   fˆ fd	„Zd
ededee   fd„Zdddeddddfd„Zdddeddfd„Zdddeee      deddded   f
d„Z	 	 	 	 	 d'ded   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ez  dz  ded ed!eee      dz  d"edddefd#„Z d(d$ed%efd&„Z!ˆ xZ"S ))ÚAriaImageProcessor©Úpixel_valuesÚ
pixel_maskÚ	num_crops)ç      à?r*   r*   éÔ  éP  FNTÚkwargsc                 óš   •— |j                  d«      €%g d¢}|D �cg c]  }|d   dz  |d   dz  g‘Œ c}|d<   t        ‰| �  di |¤Ž y c c}w )Nr   ))é   é   )r/   r   )r/   é   )r/   é   )r/   é   )r/   é   )r/   é   )r0   r1   )r0   r   )r0   r0   )r0   r/   )r   r/   )r   r0   )r1   r/   )r1   r0   )r2   r/   )r3   r/   )r4   r/   )r5   r/   r   éê  r/   r    )ÚgetÚsuperÚ__init__)Úselfr-   Údefault_resolutionsÚelÚ	__class__s       €r"   r9   zAriaImageProcessor.__init__C   s]   ø€ Ø�:‰:Ð)Ó*Ð2ò #{ÐØPcÖ*dÈ"¨B¨q©E°C©K¸¸A¹À¹Ò+EÒ*dˆFÐ&Ñ'Ü‰ÑÑ"˜6Ó"ùò +es   ›AÚoriginal_resolutionÚtarget_resolutionÚreturnc                 óv   — |\  }}|\  }}t        ||z
  d«      \  }}t        ||z
  d«      \  }	}
||	||z   |	|
z   gS )zNGet padding size for patching, returns [left, top, right, bottom] for tvF.pad.r0   )Údivmod)r:   r>   r?   Úoriginal_heightÚoriginal_widthÚtarget_heightÚtarget_widthÚpaste_xÚr_xÚpaste_yÚr_ys              r"   Ú_get_padding_sizez$AriaImageProcessor._get_padding_sizeI   sW   € à*=Ñ'ˆ˜Ø&7Ñ#ˆ�|Ü˜l¨^Ñ;¸QÓ?‰ˆ�Ü˜m¨oÑ=¸qÓA‰ˆ�Ø˜ '¨C¡-°¸3±Ð?Ð?r!   Úimageztorch.TensorÚresamplez7PILImageResampling | tvF.InterpolationMode | int | Nonec                 ó|   — t        ||t        j                  ¬«      \  }}| j                  |t	        ||¬«      |«      S )zFResize an image to a target resolution while maintaining aspect ratio.©Úinput_data_format©ÚheightÚwidth)r   r
   ÚFIRSTÚresizer   )r:   rL   r?   rM   Ú
new_heightÚ	new_widths         r"   Ú_resize_for_patchingz'AriaImageProcessor._resize_for_patchingQ   s?   € ô !6ØÐ$Ô8H×8NÑ8Nô!
Ñˆ
�Ið �{‰{˜5¤(°*ÀIÔ"NÐPXÓYÐYr!   c                 óŒ   — t        ||t        j                  ¬«      }| j                  ||«      }t	        j
                  ||¬«      S )zCPad an image to a target resolution while maintaining aspect ratio.rO   )Úpadding)r   r
   rT   rK   ÚtvFÚpad)r:   rL   r?   Únew_resolutionrZ   s        r"   Ú_pad_for_patchingz$AriaImageProcessor._pad_for_patching]   s>   € ô /¨uÐ6GÔ[k×[qÑ[qÔrˆØ×(Ñ(¨Ð9JÓKˆÜ�w‰w�u gÔ.Ð.r!   Úgrid_pinpointsÚ
patch_sizec                 óî   — t        |t        «      st        d«      ‚t        |t        j
                  ¬«      }t        ||«      }| j                  |||«      }| j                  ||«      }t        ||¬«      }	|	S )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)r`   )
Ú
isinstancer   Ú	TypeErrorr   r
   rT   r   rX   r^   r	   )
r:   rL   r_   r`   rM   Ú
image_sizeÚbest_resolutionÚresized_imageÚpadded_imageÚpatchess
             r"   Úget_image_patchesz$AriaImageProcessor.get_image_patchesg   sp   € ô. ˜.¬$Ô/ÜÐTÓUÐUä# EÔ7G×7MÑ7MÔNˆ
Ü0°¸^ÓLˆØ×1Ñ1°%¸È(ÓSˆØ×-Ñ-¨m¸_ÓMˆÜ# L¸ZÔHˆØˆr!   ÚimagesÚ
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanÚ	image_stdÚdisable_groupingÚreturn_tensorsr   r   r   r   c           	      ó^  — |	dvrt        d«      ‚g }g }d }|D �]>  }|r| j                  |||	|«      }n|g}|�t        |«      |kD  rt        |«      }|D �]   }|j                  d   |j                  d   }}|	t	        ||«      z  }||k\  rt	        t        ||z  «      |
«      }|	}n|	}t	        t        ||z  «      |
«      }| j                  |t        ||¬«      |«      }|	|z
  }|	|z
  }t        j                  |dd||g«      }t        j                  |	|	ft        j                  ¬«      }d|d |…d |…f<   |j                  |«       |j                  |«       �Œ �ŒA t        j                  |d¬	«      }| j                  ||||||«      }t        j                  |d¬	«      }t!        |||d
œ|¬«      S )N)r6   r+   z(max_image_size must be either 490 or 980éþÿÿÿéÿÿÿÿrQ   r   )ÚdtypeT)Údimr&   )ÚdataÚtensor_type)Ú
ValueErrorrj   ÚlenÚshapeÚmaxr   rU   r   r[   r\   ÚtorchÚzerosr   ÚappendÚstackÚrescale_and_normalizer   )r:   rk   rl   rm   rn   ro   rp   rq   rr   r   r   r   r   rM   r-   Úpixel_masksÚprocessed_cropsr)   rL   Úcrop_imagesÚ
crop_imageÚhÚwÚscaleÚnew_hÚnew_wÚpadding_bottomÚpadding_rightr(   Ústacked_imagesÚstacked_maskss                                  r"   Ú_preprocesszAriaImageProcessor._preprocessˆ   sã  € ð"  Ñ+ÜÐGÓHÐHàˆØˆØˆ	àó 	3ˆEÙØ"×4Ñ4°UÐ<MÈ~Ð_gÓh‘à$˜g�àÐ ¤C¨Ó$4°yÒ$@Ü Ó,�	à)ó 3�
Ø!×'Ñ'¨Ñ+¨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ô< Ÿ™ _¸!Ô<ˆØ×3Ñ3Ø˜J¨¸ÀjÐR[ó
ˆô Ÿ™ K°QÔ7ˆäà .Ø+Ø&ñð
 'ô
ð 	
r!   rR   rS   c                 ó>  — |j                  d| j                  «      }|j                  d| j                  «      }|j                  d| j                  «      }t	        ||f|«      \  }}|sd}	|	S t        j                  ||z  «      t        j                  ||z  «      z  }	|	S )a­  
        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   r   r/   )r7   r   r   r   r   ÚmathÚceil)
r:   rR   rS   Úimages_kwargsr   r   r   Úresized_heightÚresized_widthÚnum_patchess
             r"   Úget_number_of_image_patchesz.AriaImageProcessor.get_number_of_image_patchesÍ   s°   € ð $×'Ñ'¨°t×7GÑ7GÓHˆØ&×*Ñ*Ð+;¸T×=PÑ=PÓQˆØ)×-Ñ-Ð.AÀ4×CYÑCYÓZÐä(>ÀÈ¸ÐPaÓ(bÑ%ˆ˜ñ ð ð 	ð
 Ðô —‘˜>¨NÑ:Ó;¼d¿i¹iÈÐXfÑHfÓ>gÑgð 	ð
 Ðr!   )r+   r,   NFN)N)#r   r   r   Úmodel_input_namesr   Úvalid_kwargsr   ÚBICUBICrM   ro   rp   r   r   r   r   Údo_convert_rgbrl   rn   r   r9   Útupler   r   rK   rX   r^   rj   r   ÚfloatÚstrr   r   r�   r˜   Ú__classcell__)r=   s   @r"   r%   r%   3   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’   r~   Útorchvision.transforms.v2r   r[   Ú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õ ð$ ôrÐ+ó ró ðrðj  Ð
 �r!   