ó
    qyüi¼"  ã                   óÂ   • S SK r S SKJs  Js  Jr  SSKJr  SSKJ	r	  SSK
JrJr  SSKJr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é   )ÚTorchvisionBackend)ÚBatchFeature)Úgroup_images_by_shapeÚreorder_images)ÚOPENAI_CLIP_MEANÚOPENAI_CLIP_STDÚ
ImageInputÚPILImageResamplingÚSizeDict)ÚImagesKwargsÚUnpack)Ú
TensorTypeÚauto_docstringc                   ó$   • \ rS rSr% Sr\\S'   Srg)ÚJanusImageProcessorKwargsé$   z¸
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_size© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚintÚ__annotations__Ú__static_attributes__r   ó    Úm/home/mande/repo/quber/.venv/lib/python3.13/site-packages/transformers/models/janus/image_processing_janus.pyr   r   $   s   ‡ ñð †Mr   r   F)Útotalc                   óÂ  ^ • \ rS rSr\R
                  r\r\	r
SSS.rSrSrSrSrSr\rS\\   4U 4S jjr S!SS	S
\S\SSS\SS	4U 4S jjjr S"SS	S\\\\\4   -  SS	4S jjr 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\S-  S\S-  S\S-  S\\   S-  S\\   S-  S\S-  SS	4S jjr"S r#U =r$$ )$ÚJanusImageProcessoré.   i€  ©ÚheightÚwidthé   TÚkwargsc                 ó²   >• [         TU ]  " S0 UD6  UR                  S5      c  SnO![        S UR                  S5       5       5      n[        U5      U l        g )NÚ
image_mean)é   r+   r+   c              3   ó>   #   • U  H  n[        US -  5      v •  M     g7f)éÿ   N)r   )Ú.0Úxs     r   Ú	<genexpr>Ú/JanusImageProcessor.__init__.<locals>.<genexpr>@   s   é € Ð$TÒ;S°a¤S¨¨S©§\ \Ò;Sùs   ‚r   )ÚsuperÚ__init__ÚgetÚtupleÚbackground_color)Úselfr(   r6   Ú	__class__s      €r   r3   Ú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           	      óv  >• UR                   b'  UR                  b  UR                   UR                  :w  a  [        SUS    SUS    35      eUR                   nUR                  SS  u  px[	        Xx5      n	X)-  n
[        [	        [        Xz-  5      U5      [	        [        XŠ-  5      U5      S9n[        TU ]!  XXES9$ )Nz5Output height and width must be the same. Got height=r%   z and width=r&   éþÿÿÿr$   )r;   r<   r=   )	r%   r&   Ú
ValueErrorÚshapeÚmaxr   Úroundr2   Úresize)r7   r:   r;   r   r<   r=   r(   r%   r&   Úmax_sizeÚdeltaÚoutput_size_nonpaddedr8   s               €r   rE   ÚJanusImageProcessor.resizeC   sÂ   ø€ ð �;‰;Ñ $§*¡*Ñ"4¸¿¹ÀtÇzÁzÓ8QÜØGÈÈXÉÐGWÐWbÐcgÐhoÑcpÐbqÐróð ð �{‰{ˆàŸ™ B CÐ(‰ˆÜ�vÓ%ˆà‘ˆä (Ü”u˜V™^Ó,¨hÓ7Ü”e˜E™MÓ*¨HÓ5ñ!
Ðô
 ‰w‰~˜eÈ(ˆ~ÐhÐhr   Úimagesr6   c                 ó  • UR                   SS u  p4UR                   S   nUR                   S   nX4:X  a  U$ [        X45      n[        U[        5      (       a  U/nO[	        U5      U:w  a  [        SU S35      e[        R                  " XeXw4UR                  UR                  S9n[        U5       H  u  pšX¨SS2U	SS2SS24'   M     XC:”  a  Xs-
  S-  nXSS2SS2X»U-   2SS24'   U$ Xt-
  S-  nXSS2SS2SS2X»U-   24'   U$ )	añ  
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é   )rB   rC   Ú
isinstancer   ÚlenrA   ÚtorchÚzerosrM   rN   Ú	enumerate)r7   rJ   r6   r%   r&   Únum_channelsÚ
batch_sizeÚmax_dimÚpadded_imagesÚiÚcolorÚstarts               r   Úpad_to_squareÚ!JanusImageProcessor.pad_to_square^   s.  € ð& Ÿ™ R SÐ)‰ˆØ—|‘| A‘ˆØ—\‘\ !‘_ˆ
à‹?ØˆMä�fÓ$ˆô Ð&¬×,Ñ,Ø 0Ð1ÑÜÐ!Ó" lÓ2ÜØ:¸<¸.ÐHqÐróð ô ŸšØ wÐ8ÀÇÁÐU[×UbÑUbñ
ˆô "Ð"2Ö3‰HˆAØ(-š!˜Q¢¢1˜*Ó%ñ 4à‹>ØÑ%¨!Ñ+ˆEØ=Cš!šQ °©Ð 6ºÐ9Ñ:ð
 Ðð ‘_¨Ñ*ˆEØ<Bš!šQ¢ 5°5©=Ð#8Ð8Ñ9àÐr   Ú	do_resizeÚ
do_rescaleÚrescale_factorÚdo_normalizer*   NÚ	image_stdÚdisable_groupingÚreturn_tensorsÚdo_padc           	      óš  • [        XS9u  nn0 nUR                  5        H#  u  nnU(       a  U R                  UX4US9nUUU'   M%     [        UU5      n[        UUS9u  nn0 nUR                  5        H@  u  nnU(       a  U R	                  UU R
                  S9nU R                  UXgX‰U
5      nUUU'   MB     [        UU5      n[        SU0US9$ )N)rc   )r:   r;   r   r<   ©r6   Úpixel_values©ÚdataÚtensor_type)r   ÚitemsrE   r   r\   r6   Úrescale_and_normalizer   )r7   rJ   r^   r;   r   r<   r_   r`   ra   r*   rb   rc   rd   re   r(   Úgrouped_imagesÚgrouped_images_indexÚresized_images_groupedrB   Ústacked_imagesÚresized_imagesÚprocessed_images_groupedÚprocessed_imagess                          r   Ú_preprocessÚJanusImageProcessor._preprocess�   s  € ô$ 0EÀVÑ/oÑ,ˆÐ,Ø!#ÐØ%3×%9Ñ%9Ö%;Ñ!ˆE�>ÞØ!%§¡°>ÈÐjr Ð!s�Ø,:Ð" 5Ó)ñ &<ô (Ð(>Ð@TÓUˆô 0EÀ^ÐfvÑ/wÑ,ˆÐ,Ø#%Ð Ø%3×%9Ñ%9Ö%;Ñ!ˆE�>ÞØ!%×!3Ñ!3°NÐUY×UjÑUjÐ!3Ð!k�à!×7Ñ7Ø 
¸LÐV_óˆNð /=Ð$ UÓ+ñ &<ô *Ð*BÐDXÓYÐä .Ð2BÐ!CÐQ_Ñ`Ð`r   c                 óÎ  ^• Ub  UOU R                   nTc  SU R                  -  OTmUb  UOU R                  nUb  UOU R                  nUb  UOU R                  n[        U4S j[        XV5       5       5      n[        S U 5       5      nU R                  UUTUUUSSUS9	R                  nU(       a>  U Vs/ s H1  oˆR                  SS5      R                  [        R                  5      PM3     nnU(       a3  U(       a,  US:X  a&  U Vs/ s H  n[        R                  " U5      PM     nnUS:w  a  UOS nUS	:X  a  [        R                  " USS
9OUn[!        SU0US9$ s  snf s  snf )Ng      ð?c              3   ó:   >#   • U  H  u  pT* U-  U-  v •  M     g 7f)Nr   )r.   ÚmeanÚstdr`   s      €r   r0   Ú2JanusImageProcessor.postprocess.<locals>.<genexpr>Ê   s!   øé € ÐdÒIc¹I¸D˜N˜?¨TÑ1°CÖ7ÒIcùs   ƒc              3   ó,   #   • U  H
  nS U-  v •  M     g7f)rL   Nr   )r.   rz   s     r   r0   r{   Ë   s   é € Ð7ªY c˜!˜cž'ªYùs   ‚F)r_   r`   ra   r*   rb   r^   re   rd   r   r-   zPIL.Image.ImageÚpt)Údimrh   ri   )r_   r`   ra   r*   rb   r5   ÚzipÚ
preprocessrh   ÚclipÚtorR   Úuint8ÚtvFÚto_pil_imageÚstackr   )	r7   rJ   r_   r`   ra   r*   rb   rd   r:   s	      `     r   ÚpostprocessÚJanusImageProcessor.postprocess»   s`  ø€ ð $.Ñ#9‘Z¸t¿¹ˆ
Ø6DÑ6L˜˜t×2Ñ2Ò2ÐR`ˆØ'3Ñ'?‘|ÀT×EVÑEVˆØ#-Ñ#9‘Z¸t¿¹ˆ
Ø!*Ñ!6‘I¸D¿N¹Nˆ	ÜÔdÌÈZÔIcÓdÓdˆ
ÜÑ7©YÓ7Ó7ˆ	à—‘ØØ!Ø)Ø%Ø!ØØØØ)ð !ð 

÷ ‰,ð 	ö ÙFLÓMÂf¸U—j‘j  CÓ(×+Ñ+¬E¯K©KÖ8ÁfˆFÐMæžJ¨>Ð=NÓ+NÙ;AÓBº6°%”c×&Ò& uÖ-¹6ˆFÐBà+9Ð=NÓ+N™ÐTXˆØ/=ÀÓ/E”—’˜V¨Ò+È6ˆä .°&Ð!9À~ÑVÐVùò Nùò Cs   Â68EÄ E"rg   )T)r   )NNNNNN)%r   r   r   r   r   ÚBICUBICr<   r   r*   r	   rb   r;   r   r^   r_   ra   re   r   Úvalid_kwargsr   r3   r   r   ÚboolrE   r5   r\   ÚlistÚfloatÚstrr   r   ru   r
   r‡   r   Ú__classcell__)r8   s   @r   r"   r"   .   sG  ø† à!×)Ñ)€HØ!€JØ€IØ CÑ(€DØ€HØ€IØ€JØ€LØ€FØ,€Lð8 Ð(AÑ!B÷ 8ð ñiàðið ðið ð	ið
 Lðið ð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ó &Wr   r"   )rR   Ú$torchvision.transforms.v2.functionalÚ
transformsÚv2Ú
functionalr„   Ú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   