
    Z j"                         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       ځ/root/GenerationalWealth/GenerationalWealth/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;SaSS\\;Ss   r   )super__init__gettuplebackground_color)selfr(   r6   	__class__s      r   r3   JanusImageProcessor.__init__;   sP    "6"::l#+.$$T6::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tzz8QGXGWWbcghocpbqr  {{BC(v% (uV^,h7eEM*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  pXSS2U	SS2SS24'   M     XC:  a  Xs-
  S-  nXSS2SS2XU-   2SS24'   U$ Xt-
  S-  nXSS2SS2SS2XU-   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.   & RS)||A\\!_
?Mf$ &,, 01!"l2:<.Hqr  w8U[UbUb
 ""23HA(-!Q1*% 4>%!+E=C!Q 69:
  _*E<B!Q55=#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XgXU
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!3NUYUjUj!3!k!77
LV_N /=$U+ &< **BDXY.2B!CQ_``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  oR                  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!     dIcIDN?T1C7Ics   c              3   ,   #    U  H
  nS U-  v   M     g7f)rL   Nr   )r.   rz   s     r   r0   r{      s     7Yc!c'Ys   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`    $.#9Zt
6D6Lt222R`'3'?|TEVEV#-#9Zt
!*!6IDNN	dZIcdd
7Y77	!)%!) ! 

 , 	 FLMfUjjC(++EKK8fFMJ>=N+N;AB6%c&&u-6F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 c3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 4K&W 	&W
 Tk&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   