Ë
    ÛÓ^j¼"  ã                   óÈ   — d dl Z d dlmc mc mZ ddlmZ ddlm	Z	 ddl
mZmZ ddlmZ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é   )ÚTorchvisionBackend)ÚBatchFeature)Úgroup_images_by_shapeÚreorder_images)ÚOPENAI_CLIP_MEANÚOPENAI_CLIP_STDÚ
ImageInputÚPILImageResamplingÚSizeDict)ÚImagesKwargsÚUnpack)Ú
TensorTypeÚauto_docstringc                   ó   — e Zd ZU dZeed<   y)ÚJanusImageProcessorKwargszÈ
    min_size (`int`, *optional*, defaults to 14):
        The minimum allowed size for the resized image. Ensures that neither the height nor width
        falls below this value after resizing.
    Úmin_sizeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintÚ__annotations__© ó    ú{/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/janus/image_processing_janus.pyr   r   $   s   … ñð „Mr   r   F)Útotalc                   ó¤  ‡ — e Zd Zej                  ZeZeZ	dddœZ
dZdZdZdZdZeZdee   fˆ fd„Z	 dddd	ed
edddeddfˆ fd„Z	 d dddeeeeef   z  ddfd„Z	 dded   ded	ed
ed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fd„Z	 	 	 	 	 	 d!de dedz  dedz  dedz  dee   dz  dee   dz  dedz  ddfd„Z!ˆ xZ"S )"ÚJanusImageProcessori€  ©ÚheightÚwidthé   TÚkwargsc                 ó®   •— t        ‰| �  di |¤Ž |j                  d«      €d}n!t        d„ |j                  d«      D «       «      }t        |«      | _        y )NÚ
image_mean)é   r'   r'   c              3   ó8   K  — | ]  }t        |d z  «      –— Œ y­w)éÿ   N)r   )Ú.0Úxs     r   ú	<genexpr>z/JanusImageProcessor.__init__.<locals>.<genexpr>@   s   è ø€ Ò$T°a¤S¨¨S©§\Ñ$Tùs   ‚r   )ÚsuperÚ__init__ÚgetÚtupleÚbackground_color)Úselfr$   r1   Ú	__class__s      €r   r.   zJanusImageProcessor.__init__;   sP   ø€ Ü‰ÑÑ"˜6Ò"Ø�:‰:�lÓ#Ð+Ø.Ñä$Ñ$T¸6¿:¹:ÀlÓ;SÔ$TÓTÐÜ %Ð&6Ó 7ˆÕr   Úimageztorch.TensorÚsizer   Úresamplez7PILImageResampling | tvF.InterpolationMode | int | NoneÚ	antialiasÚreturnc           	      óŠ  •— |j                   �%|j                  �|j                   |j                  k7  rt        d|d   › d|d   › �«      ‚|j                   }|j                  dd  \  }}t	        ||«      }	||	z  }
t        t	        t        ||
z  «      |«      t	        t        ||
z  «      |«      ¬«      }t        ‰| �!  ||||¬«      S )Nz5Output height and width must be the same. Got height=r!   z and width=r"   éþÿÿÿr    )r5   r6   r7   )	r!   r"   Ú
ValueErrorÚshapeÚmaxr   Úroundr-   Úresize)r2   r4   r5   r   r6   r7   r$   r!   r"   Úmax_sizeÚdeltaÚoutput_size_nonpaddedr3   s               €r   r?   zJanusImageProcessor.resizeC   sÒ   ø€ ð �;‰;Ð $§*¡*Ð"4¸¿¹ÀtÇzÁzÒ8QÜØGÈÈXÉÐGWÐWbÐcgÐhoÑcpÐbqÐróð ð �{‰{ˆàŸ™ B CÐ(‰ˆ�Ü�v˜uÓ%ˆà�x‘ˆä (Ü”u˜V e™^Ó,¨hÓ7Ü”e˜E E™MÓ*¨HÓ5ô!
Ðô
 ‰w‰~˜eÐ*?È(Ð^gˆ~ÓhÐhr   Úimagesr1   c                 ó  — |j                   dd \  }}|j                   d   }|j                   d   }||k(  r|S t        ||«      }t        |t        «      r|g}nt	        |«      |k7  rt        d|› d�«      ‚t        j                  ||||f|j                  |j                  ¬«      }t        |«      D ]  \  }	}
|
|dd…|	dd…dd…f<   Œ ||kD  r||z
  dz  }||dd…dd…|||z   …dd…f<   |S ||z
  dz  }||dd…dd…dd…|||z   …f<   |S )	aI  
        Pads an image to a square based on the longest edge.

        Args:
            images (`torch.Tensor`):
                The images to pad.
            background_color (`int` or `tuple[int, int, int]`, *optional*, defaults to 0):
                The color to use for the padding. Can be an integer for single channel or a
                tuple of integers representing for multi-channel images. If passed as integer
                in multi-channel mode, it will default to `0` in subsequent channels.

        Returns:
            `torch.Tensor`: The padded images.
        r:   Né   r   z(background_color must have no more than z) elements to match the number of channels)ÚdtypeÚdeviceé   )r<   r=   Ú
isinstancer   Úlenr;   ÚtorchÚzerosrF   rG   Ú	enumerate)r2   rC   r1   r!   r"   Únum_channelsÚ
batch_sizeÚmax_dimÚpadded_imagesÚiÚcolorÚstarts               r   Úpad_to_squarez!JanusImageProcessor.pad_to_square^   sL  € ð& Ÿ™ R SÐ)‰ˆ�Ø—|‘| A‘ˆØ—\‘\ !‘_ˆ
à�UŠ?ØˆMä�f˜eÓ$ˆô Ð&¬Ô,Ø 0Ð1ÑÜÐ!Ó" lÒ2ÜØ:¸<¸.ÐHqÐróð ô Ÿ™Ø˜ w°Ð8ÀÇÁÐU[×UbÑUbô
ˆô "Ð"2Ó3ò 	.‰HˆAˆuØ(-ˆMš!˜Q¢¢1˜*Ò%ð	.à�6Š>Ø˜vÑ%¨!Ñ+ˆEØ=CˆMš!šQ ¨°©Ð 6ºÐ9Ñ:ð
 Ðð ˜u‘_¨Ñ*ˆEØ<BˆMš!šQ¢ 5¨5°5©=Ð#8Ð8Ñ9àÐr   Ú	do_resizeÚ
do_rescaleÚrescale_factorÚdo_normalizer&   NÚ	image_stdÚdisable_groupingÚreturn_tensorsÚdo_padc           	      ó¤  — t        ||¬«      \  }}i }|j                  «       D ]!  \  }}|r| j                  ||||¬«      }|||<   Œ# t        ||«      }t        ||¬«      \  }}i }|j                  «       D ]?  \  }}|r| j	                  || j
                  ¬«      }| j                  |||||	|
«      }|||<   ŒA t        ||«      }t        d|i|¬«      S )N)r[   )r4   r5   r   r6   )r1   Úpixel_values©ÚdataÚtensor_type)r   Úitemsr?   r   rU   r1   Úrescale_and_normalizer   )r2   rC   rV   r5   r   r6   rW   rX   rY   r&   rZ   r[   r\   r]   r$   Úgrouped_imagesÚgrouped_images_indexÚresized_images_groupedr<   Ústacked_imagesÚresized_imagesÚprocessed_images_groupedÚprocessed_imagess                          r   Ú_preprocesszJanusImageProcessor._preprocess�   s  € ô$ 0EÀVÐ^nÔ/oÑ,ˆÐ,Ø!#ÐØ%3×%9Ñ%9Ó%;ò 	;Ñ!ˆE�>ÙØ!%§¡°>ÈÐW_Ðjr Ó!s�Ø,:Ð" 5Ò)ð	;ô (Ð(>Ð@TÓUˆô 0EÀ^ÐfvÔ/wÑ,ˆÐ,Ø#%Ð Ø%3×%9Ñ%9Ó%;ò 	=Ñ!ˆE�>ÙØ!%×!3Ñ!3°NÐUY×UjÑUjÐ!3Ó!k�à!×7Ñ7Ø 
¨N¸LÈ*ÐV_óˆNð /=Ð$ UÒ+ð	=ô *Ð*BÐDXÓYÐä .Ð2BÐ!CÐQ_Ô`Ð`r   c                 ó¤  ‡— |�|n| j                   }‰€d| j                  z  n‰Š|�|n| j                  }|�|n| j                  }|�|n| j                  }t        ˆfd„t        ||«      D «       «      }t        d„ |D «       «      }| j                  ||‰|||dd|¬«	      j                  }|r<|D �cg c]1  }|j                  dd«      j                  t        j                  «      ‘Œ3 }}|r)|r'|dk(  r"|D �cg c]  }t        j                  |«      ‘Œ }}|dk7  r|nd }|d	k(  rt        j                  |d¬
«      n|}t!        d|i|¬«      S c c}w c c}w )Ng      ð?c              3   ó6   •K  — | ]  \  }}‰ |z  |z  –— Œ y ­w)Nr   )r*   ÚmeanÚstdrX   s      €r   r,   z2JanusImageProcessor.postprocess.<locals>.<genexpr>Ê   s!   øè ø€ Òd¹I¸DÀ#˜N˜?¨TÑ1°CÕ7Ñdùs   ƒc              3   ó&   K  — | ]	  }d |z  –— Œ y­w)rE   Nr   )r*   rp   s     r   r,   z2JanusImageProcessor.postprocess.<locals>.<genexpr>Ë   s   è ø€ Ò7 c˜!˜c�'Ñ7ùs   ‚F)rW   rX   rY   r&   rZ   rV   r]   r\   r   r)   zPIL.Image.ImageÚpt)Údimr_   r`   )rW   rX   rY   r&   rZ   r0   ÚzipÚ
preprocessr_   ÚclipÚtorK   Úuint8ÚtvFÚto_pil_imageÚstackr   )	r2   rC   rW   rX   rY   r&   rZ   r\   r4   s	      `     r   ÚpostprocesszJanusImageProcessor.postprocess»   sc  ø€ ð $.Ð#9‘Z¸t¿¹ˆ
Ø6DÐ6L˜˜t×2Ñ2Ò2ÐR`ˆØ'3Ð'?‘|ÀT×EVÑEVˆØ#-Ð#9‘Z¸t¿¹ˆ
Ø!*Ð!6‘I¸D¿N¹Nˆ	ÜÓdÌÈZÐYbÓIcÔdÓdˆ
ÜÑ7¨YÔ7Ó7ˆ	à—‘ØØ!Ø)Ø%Ø!ØØØØ)ð !ó 

÷ ‰,ð 	ñ ØFLÖM¸U�e—j‘j  CÓ(×+Ñ+¬E¯K©KÕ8ÐMˆFÐMá™J¨>Ð=NÒ+NØ;AÖB°%”c×&Ñ& uÕ-ÐBˆFÐBà+9Ð=NÒ+N™ÐTXˆØ/=ÀÒ/E”—‘˜V¨Õ+È6ˆä .°&Ð!9À~ÔVÐVùò Nùò Cs   Â/6EÃ4E)T)r   )NNNNNN)#r   r   r   r   ÚBICUBICr6   r   r&   r	   rZ   r5   r   rV   rW   rY   r]   r   Úvalid_kwargsr   r.   r   r   Úboolr?   r0   rU   ÚlistÚfloatÚstrr   r   rl   r
   r|   Ú__classcell__)r3   s   @r   r   r   .   s;  ø„ à!×)Ñ)€HØ!€JØ€IØ CÑ(€DØ€HØ€IØ€JØ€LØ€FØ,€Lð8 Ð(AÑ!Bõ 8ð ñiàðið ðið ð	ið
 Lðið ðið 
õið< 89ñ0àð0ð   c¨3° mÑ 4Ñ4ð0ð 
ó	0ð@ ñ)aà�^Ñ$ð)að ð)að ð	)að
 ð)að Lð)að ð)að ð)að ð)að ˜D ™KÑ'¨$Ñ.ð)að ˜4 ™;Ñ&¨Ñ-ð)að  ™+ð)að ˜jÑ(¨4Ñ/ð)að ð)að  
ó!)að\ #'Ø'+Ø$(Ø)-Ø(,Ø%)ñ&Wàð&Wð ˜4‘Kð&Wð  ™ð	&Wð
 ˜T‘kð&Wð ˜‘K $Ñ&ð&Wð ˜‘; Ñ%ð&Wð ˜d™
ð&Wð 
÷&Wr   r   )rK   Ú$torchvision.transforms.v2.functionalÚ
transformsÚv2Ú
functionalry   Úimage_processing_backendsr   Úimage_processing_utilsr   Úimage_transformsr   r   Úimage_utilsr   r	   r
   r   r   Úprocessing_utilsr   r   Úutilsr   r   r   r   Ú__all__r   r   r   ú<module>r�      sh   ðó  ß 2Ó 2å ;Ý 2ß E÷õ ÷ 5÷ô °Eõ ð ôrWÐ,ó rWó ðrWðj !Ð
!�r   