
    cCiwf                         S SK Jr  S SKJrJr  S SKrSSKJrJ	r	J
r
  SSKJrJrJr  SSKJrJrJrJrJrJrJrJrJrJrJrJr  SSKJrJrJrJ r   \" 5       (       a  S SK!r!\ RD                  " \#5      r$ " S	 S
\5      r%S
/r&g)    )Iterable)OptionalUnionN   )BaseImageProcessorBatchFeatureget_size_dict)convert_to_rgbresizeto_channel_dimension_format)OPENAI_CLIP_MEANOPENAI_CLIP_STDChannelDimension
ImageInputPILImageResamplingget_image_sizeinfer_channel_dimension_formatis_scaled_imagemake_flat_list_of_imagesto_numpy_arrayvalid_imagesvalidate_preprocess_arguments)
TensorTypefilter_out_non_signature_kwargsis_vision_availableloggingc            #       R  ^  \ rS rSrSrS/rSSS\R                  SSSSSSS4S\S	\	\
\\4      S
\S\S\S\\\4   S\S\	\\\\   4      S\	\\\\   4      S\	\   S\	\   SS4U 4S jjjr\R                  SS4S\R$                  S	\\
\\4   \4   S\S\	\\\4      S\	\\\4      S\R$                  4S jjr\" 5       SSSSSSSSSSSS\R,                  S4S\S\	\   S	\	\
\\4      S\	\   S\	\   S\	\   S\	\   S\	\\\\   4      S\	\\\\   4      S\	\\\4      S\	\   S\	\\\\\\4   4      S\	\   S\S\	\\\4      S\R6                  R6                  4 S jj5       r   S!S\R$                  S\\\\\\4   4   S\	\\\4      S\	\\\4      S\R$                  4
S jjr       S"S\S\	\   S\	\   S\	\   S\	\\      S\	\\      S\	\   S\	\   4S jjr S#S\R$                  S\\\\   4   S\\\\   4   S\	\\\4      S\R$                  4
S jjr S r!U =r"$ )$JanusImageProcessor5   a
  
Constructs a JANUS image processor.

Args:
    do_resize (`bool`, *optional*, defaults to `True`):
        Whether to resize the image's (height, width) dimensions to the specified `size`. Can be overridden by the
        `do_resize` parameter in the `preprocess` method.
    size (`dict`, *optional*, defaults to `{"height": 384, "width": 384}`):
        Size of the output image after resizing. Can be overridden by the `size` parameter in the `preprocess`
        method.
    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.
    resample (`PILImageResampling`, *optional*, defaults to `Resampling.BICUBIC`):
        Resampling filter to use if resizing the image. Only has an effect if `do_resize` is set to `True`. Can be
        overridden by the `resample` parameter in the `preprocess` method.
    do_rescale (`bool`, *optional*, defaults to `True`):
        Whether to rescale the image by the specified scale `rescale_factor`. Can be overridden by the
        `do_rescale` parameter in the `preprocess` method.
    rescale_factor (`int` or `float`, *optional*, defaults to `1/255`):
        Scale factor to use if rescaling the image. Only has an effect if `do_rescale` is set to `True`. Can be
        overridden by the `rescale_factor` parameter in the `preprocess` method.
    do_normalize (`bool`, *optional*, defaults to `True`):
        Whether to normalize the image. Can be overridden by the `do_normalize` parameter in the `preprocess`
        method. Can be overridden by the `do_normalize` parameter in the `preprocess` method.
    image_mean (`float` or `list[float]`, *optional*, defaults to `IMAGENET_STANDARD_MEAN`):
        Mean to use if normalizing the image. This is a float or list of floats the length of the number of
        channels in the image. Can be overridden by the `image_mean` parameter in the `preprocess` method. Can be
        overridden by the `image_mean` parameter in the `preprocess` method.
    image_std (`float` or `list[float]`, *optional*, defaults to `IMAGENET_STANDARD_STD`):
        Standard deviation to use if normalizing the image. This is a float or list of floats the length of the
        number of channels in the image. Can be overridden by the `image_std` parameter in the `preprocess` method.
        Can be overridden by the `image_std` parameter in the `preprocess` method.
    do_convert_rgb (`bool`, *optional*, defaults to `True`):
        Whether to convert the image to RGB.
    do_pad (`bool`, *optional*, defaults to `True`):
        Whether to pad the image to square or not.
pixel_valuesTN   gp?	do_resizesizemin_sizeresample
do_rescalerescale_factordo_normalize
image_mean	image_stddo_convert_rgbdo_padreturnc                 >  > [         TU ]  " S0 UD6  Ub  UOSSS.n[        USS9nXl        X l        X@l        XPl        X`l        Xpl        Ub  UO[        U l
        U	b  U	O[        U l        Xl        Xl        X0l        Uc  SU l        g [#        S U 5       5      U l        g )Ni  )heightwidthTdefault_to_square)   r3   r3   c              3   >   #    U  H  n[        US -  5      v   M     g7f)   N)int).0xs     j/home/james-whalen/.local/lib/python3.13/site-packages/transformers/models/janus/image_processing_janus.py	<genexpr>/JanusImageProcessor.__init__.<locals>.<genexpr>   s     )K
1#a#g,,
s    )super__init__r	   r"   r#   r%   r&   r'   r(   r   r)   r   r*   r+   r,   r$   background_colortuple)selfr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   kwargs	__class__s                r9   r>   JanusImageProcessor.__init___   s     	"6"'tc-JTT:"	 $,((2(>*DT&/&;, $3D!$))K
)K$KD!    imagedata_formatinput_data_formatc                 d   Uc  [        U5      n[        X5      u  px[        Xx5      n	[        USS9nUS   US   :w  a  [	        SUS    SUS    35      eUS   nX)-  n
[        [        Xz-  5      U R                  5      [        [        X-  5      U R                  5      /n[        U4UUUUS.UD6nU$ )a  
Resize an image to dynamically calculated size.

Args:
    image (`np.ndarray`):
        Image to resize.
    size (`dict[str, int]` or `int`):
        The size to resize the image to. If a dictionary, it should have the keys `"height"` and `"width"`.
    resample (`PILImageResampling`, *optional*, defaults to `PILImageResampling.BICUBIC`):
        `PILImageResampling` filter to use when resizing the image e.g. `PILImageResampling.BICUBIC`.
    data_format (`ChannelDimension` or `str`, *optional*):
        The channel dimension format for the output image. If unset, the channel dimension format of the input
        image is used. Can be one of:
        - `"channels_first"` or `ChannelDimension.FIRST`: image in (num_channels, height, width) format.
        - `"channels_last"` or `ChannelDimension.LAST`: image in (height, width, num_channels) format.
        - `None`: will be inferred from input
    input_data_format (`ChannelDimension` or `str`, *optional*):
        The channel dimension format for the input image. If unset, the channel dimension format is inferred
        from the input image. Can be one of:
        - `"channels_first"` or `ChannelDimension.FIRST`: image in (num_channels, height, width) format.
        - `"channels_last"` or `ChannelDimension.LAST`: image in (height, width, num_channels) format.
        - `"none"` or `ChannelDimension.NONE`: image in (height, width) format.

Returns:
    `np.ndarray`: The resized image.
Tr1   r/   r0   z5Output height and width must be the same. Got height=z and width=)r#   r%   rG   rH   )r   r   maxr	   
ValueErrorr6   r$   r   )rA   rF   r#   r%   rG   rH   rB   r/   r0   max_sizedeltaoutput_size_nonpaddeds               r9   r   JanusImageProcessor.resize   s    F $ >u E&u@v%TT:>T']*GXGWWbcghocpbqr  H~ FN#T]]3EM"DMM2!

 
&#/
 
 rE   imagesreturn_tensorsr?   c                    Ub  UOU R                   nUb  UOU R                  nUb  UOU R                  nUb  UOU R                  nUb  UOU R                  nUb  UOU R
                  nU	b  U	OU R                  n	Ub  UOU R                  nUb  UOU R                  nUb  UOU R                  nUb  UOU R                  n[        USS9nU R                  U5      n[        U5      n[        U5      (       d  [        S5      e[!        UUUUU	UUUS9  U(       a  U Vs/ s H  n[#        U5      PM     nnU Vs/ s H  n[%        U5      PM     nnU(       a(  ['        US   5      (       a  [(        R+                  S5        Uc  [-        US   5      nU(       a!  U Vs/ s H  nU R/                  UX4US9PM     nnU(       a!  U Vs/ s H  nU R1                  UUUS9PM     nnU(       a   U Vs/ s H  nU R3                  UXoS	9PM     nnU(       a!  U Vs/ s H  nU R5                  UXUS
9PM     nnU Vs/ s H  n[7        UXS9PM     nn[9        SU0U
S9nU$ s  snf s  snf s  snf s  snf s  snf s  snf s  snf )a  
Preprocess an image or batch of images.

Args:
    images (`ImageInput`):
        Image to preprocess. Expects a single or batch of images with pixel values ranging from 0 to 255. If
        passing in images with pixel values between 0 and 1, set `do_rescale=False`.
    do_resize (`bool`, *optional*, defaults to `self.do_resize`):
        Whether to resize the image.
    size (`dict[str, int]`, *optional*, defaults to `self.size`):
        Controls the size of the image after `resize`. The shortest edge of the image is resized to
        `size["shortest_edge"]` whilst preserving the aspect ratio. If the longest edge of this resized image
        is > `int(size["shortest_edge"] * (1333 / 800))`, then the image is resized again to make the longest
        edge equal to `int(size["shortest_edge"] * (1333 / 800))`.
    resample (`PILImageResampling`, *optional*, defaults to `self.resample`):
        Resampling filter to use if resizing the image. Only has an effect if `do_resize` is set to `True`.
    do_rescale (`bool`, *optional*, defaults to `self.do_rescale`):
        Whether to rescale the image values between [0 - 1].
    rescale_factor (`float`, *optional*, defaults to `self.rescale_factor`):
        Rescale factor to rescale the image by if `do_rescale` is set to `True`.
    do_normalize (`bool`, *optional*, defaults to `self.do_normalize`):
        Whether to normalize the image.
    image_mean (`float` or `list[float]`, *optional*, defaults to `self.image_mean`):
        Image mean to normalize the image by if `do_normalize` is set to `True`.
    image_std (`float` or `list[float]`, *optional*, defaults to `self.image_std`):
        Image standard deviation to normalize the image by if `do_normalize` is set to `True`.
    do_convert_rgb (`bool`, *optional*, defaults to `self.do_convert_rgb`):
        Whether to convert the image to RGB.
    background_color (`tuple[int, int, int]`):
        The background color to use for the padding.
    do_pad (`bool`, *optional*, defaults to `self.do_pad`):
        Whether to pad the image to square or not.
    return_tensors (`str` or `TensorType`, *optional*):
        The type of tensors to return. Can be one of:
            - Unset: Return a list of `np.ndarray`.
            - `TensorType.TENSORFLOW` or `'tf'`: Return a batch of type `tf.Tensor`.
            - `TensorType.PYTORCH` or `'pt'`: Return a batch of type `torch.Tensor`.
            - `TensorType.NUMPY` or `'np'`: Return a batch of type `np.ndarray`.
            - `TensorType.JAX` or `'jax'`: Return a batch of type `jax.numpy.ndarray`.
    data_format (`ChannelDimension` or `str`, *optional*, defaults to `ChannelDimension.FIRST`):
        The channel dimension format for the output image. Can be one of:
        - `"channels_first"` or `ChannelDimension.FIRST`: image in (num_channels, height, width) format.
        - `"channels_last"` or `ChannelDimension.LAST`: image in (height, width, num_channels) format.
        - Unset: Use the channel dimension format of the input image.
    input_data_format (`ChannelDimension` or `str`, *optional*):
        The channel dimension format for the input image. If unset, the channel dimension format is inferred
        from the input image. Can be one of:
        - `"channels_first"` or `ChannelDimension.FIRST`: image in (num_channels, height, width) format.
        - `"channels_last"` or `ChannelDimension.LAST`: image in (height, width, num_channels) format.
        - `"none"` or `ChannelDimension.NONE`: image in (height, width) format.
Fr1   zkInvalid image type. Must be of type PIL.Image.Image, numpy.ndarray, torch.Tensor, tf.Tensor or jax.ndarray.)r&   r'   r(   r)   r*   r"   r#   r%   r   zIt looks like you are trying to rescale already rescaled images. If the input images have pixel values between 0 and 1, set `do_rescale=False` to avoid rescaling them again.)rF   r#   r%   rH   )rF   r?   rH   )rF   scalerH   rF   meanstdrH   input_channel_dimr    datatensor_type)r"   r%   r&   r'   r(   r)   r*   r+   r,   r?   r#   r	   fetch_imagesr   r   rK   r   r
   r   r   loggerwarning_oncer   r   pad_to_squarerescale	normalizer   r   )rA   rP   r"   r#   r%   r&   r'   r(   r)   r*   rQ   r+   r?   r,   rG   rH   rF   encoded_outputss                     r9   
preprocessJanusImageProcessor.preprocess   s   L "+!6IDNN	'38#-#9Zt
+9+E4K^K^'3'?|TEVEV#-#9Zt
!*!6IDNN	+9+E4K^K^!-4;;/?/K+QUQfQf'tTYYTU;""6*)&1F##: 
 	&!)%!		
 9?@nU+F@ 6<<VE.'V</&)44s
 $ >vay I $#E %dYjk#  
  $ $E ""%5&7 # 
 $    $#E 5d#  
  $#E U^op#   ou
ntej'{`nt 	 
 '^V,DR`ae A =

s*   I3II=I %I%I*-I/c                 6   [        X5      u  pVU[        R                  :X  a  UR                  S   OUR                  S   nXV:X  a  Ub  [	        XU5      nU$ UnU$ [        XV5      n[        U[        5      (       a  U/nO[        U5      U:w  a  [        SU S35      eU[        R                  :X  av  [        R                  " XxU4UR                  S9n	[        U5       H  u  pXU
SS2SS24'   M     Xe:  a  X-
  S-  nXSS2XU-   2SS24'   U	$ X-
  S-  nXSS2SS2XU-   24'    U	$ [        R                  " XU4UR                  S9n	[        U5       H  u  pXSS2SS2U
4'   M     Xe:  a  X-
  S-  nXXU-   2SS2SS24'   U	$ X-
  S-  nXSS2XU-   2SS24'   U	$ )a  
Pads an image to a square based on the longest edge.

Args:
    image (`np.ndarray`):
        The image 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.
    data_format (`str` or `ChannelDimension`, *optional*):
        The channel dimension format for the output image. Can be one of:
            - `"channels_first"` or `ChannelDimension.FIRST`: image in (num_channels, height, width) format.
            - `"channels_last"` or `ChannelDimension.LAST`: image in (height, width, num_channels) format.
        If unset, will use same as the input image.
    input_data_format (`str` or `ChannelDimension`, *optional*):
        The channel dimension format for the input image. Can be one of:
            - `"channels_first"` or `ChannelDimension.FIRST`: image in (num_channels, height, width) format.
            - `"channels_last"` or `ChannelDimension.LAST`: image in (height, width, num_channels) format.

Returns:
    `np.ndarray`: The padded image.
r   Nz(background_color must have no more than z) elements to match the number of channels)dtype   )r   r   FIRSTshaper   rJ   
isinstancer6   lenrK   npzerosrg   	enumerate)rA   rF   r?   rG   rH   r/   r0   num_channelsmax_dimresulticolorstarts                r9   r_   !JanusImageProcessor.pad_to_square`  s   < 'u@):>N>T>T)Tu{{1~Z_ZeZefhZi? * ,E@QR 
 L  
 Lf$ &,, 01!"l2:<.Hqr   0 6 66XX|g>ekkRF%&67"'q!Qw 8~ )a/7<q%&.0!34  !Q.6;q!UU]223  XXw>ekkRF%&67"'q!Qw 8~ )a/7<uv~-q!34
  !Q.6;q%%-/23rE   c	                 <   Ub  UOU R                   nUc  SU R                  -  OUnUb  UOU R                  nUb  UOU R                  nUb  UOU R                  n[        U5      n[        US   [        R                  R                  5      (       a  [        U5      S:  a  U$ US   $ Uc  [        US   5      n/ n	U H  n
[        U
5      n
U(       a  U R                  XXgS9n
U(       a?  U R                  XUS9n
U
R                  SS5      R                  [         R"                  5      n
U(       aE  U(       a>  US:X  a8  [%        U
[&        R(                  US	9n
[        R                  R+                  U
5      n
U	R-                  U
5        M     S
U	0nUS:w  a  UOSn[/        XS9$ )znApplies post-processing to the decoded image tokens by reversing transformations applied during preprocessing.Ng      ?r      )rF   r)   r*   rH   )rS   rH   r5   zPIL.Image.ImagerW   r    rY   )r&   r'   r(   r)   r*   r   rk   PILImagerl   r   r   unnormalizer`   clipastyperm   uint8r   r   LAST	fromarrayappendr   )rA   rP   r&   r'   r(   r)   r*   rH   rQ   r    rF   rZ   s               r9   postprocessJanusImageProcessor.postprocess  s    $.#9Zt
6D6Lt222R`'3'?|TEVEV#-#9Zt
!*!6IDNN	)&1fQi11 [1_6;&);$ >vay IE"5)E(() )  UTef

1c*11"((;
~AR/R3E;K;P;Pduv		++E2&! $ -+9=N+NTXBBrE   c                    Sn[        U[        5      (       a*  [        U5      U:w  a  [        SU S[        U5       35      eOU/U-  n[        U[        5      (       a*  [        U5      U:w  a  [        SU S[        U5       35      eOU/U-  n[	        S [        X#5       5       5      n[	        S U 5       5      nU R                  XXtS9nU$ )a  
Unnormalizes `image` using the mean and standard deviation specified by `mean` and `std`.
image = (image * image_std) + image_mean
Args:
    image (`torch.Tensor` of shape `(batch_size, num_channels, image_size, image_size)` or `(num_channels, image_size, image_size)`):
        Batch of pixel values to postprocess.
    image_mean (`float` or `Iterable[float]`):
        The mean to use for unnormalization.
    image_std (`float` or `Iterable[float]`):
        The standard deviation to use for unnormalization.
    input_data_format (`ChannelDimension` or `str`, *optional*):
        The channel dimension format for the input image. If unset, the channel dimension format is inferred
        from the input image. Can be one of:
        - `"channels_first"` or `ChannelDimension.FIRST`: image in (num_channels, height, width) format.
        - `"channels_last"` or `ChannelDimension.LAST`: image in (height, width, num_channels) format.
        - `"none"` or `ChannelDimension.NONE`: image in (height, width) format.
r   zmean must have z$ elements if it is an iterable, got zstd must have c              3   2   #    U  H  u  pU* U-  v   M     g 7fNr<   )r7   rU   rV   s      r9   r:   2JanusImageProcessor.unnormalize.<locals>.<genexpr>  s     W<Vytus{<Vs   c              3   ,   #    U  H
  nS U-  v   M     g7f)rx   Nr<   )r7   rV   s     r9   r:   r     s     ;#a#gs   rT   )rk   r   rl   rK   r@   zipra   )rA   rF   r)   r*   rH   rp   rev_image_meanrev_image_stds           r9   r{   JanusImageProcessor.unnormalize  s    0 j(++:,. ?<.@dehisetdu!vww / %4Ji**9~- >,?cdghqdrcs!tuu . #l2IWC
<VWW;;;-  
 rE   )r?   r+   r(   r,   r&   r"   r)   r*   r$   r%   r'   r#   )r   NN)NNNNNNNr   )#__name__
__module____qualname____firstlineno____doc__model_input_namesr   BICUBICboolr   dictstrr6   r   floatlistr>   rm   ndarrayr   r   r   ri   r   r   r@   ry   rz   rc   r_   r   r   r{   __static_attributes____classcell__)rC   s   @r9   r   r   5   s   %N (( )-'9'A'A,3!:>9=)-!%"L"L tCH~&"L 	"L
 %"L "L c5j)"L "L U5$u+#567"L E%e"456"L !"L "L 
"L "LP (:'A'A>BDH?zz? DcNC'(? %	?
 eC)9$9:;? $E#/?*?$@A? 
?B %& %))-15%)*.'+:>9=;?)-GK!%(8(>(>DH!YY D>Y tCH~&	Y
 -.Y TNY !Y tnY U5$u+#567Y E%e"456Y !sJ!78Y !Y #5eCcM.B)B#CDY Y &Y  $E#/?*?$@A!Y" 
#Y 'Y| >?>BDHHzzH  U3S=%9 9:H eC)9$9:;	H
 $E#/?*?$@AH 
HZ &**.'+,0+/+/(,1C1C TN1C !	1C
 tn1C T%[)1C DK(1C $C=1C !1Cp EI+zz+ %%01+ /0	+
 $E#/?*?$@A+ 
+ +rE   r   )'collections.abcr   typingr   r   numpyrm   image_processing_utilsr   r   r	   image_transformsr
   r   r   image_utilsr   r   r   r   r   r   r   r   r   r   r   r   utilsr   r   r   r   ry   
get_loggerr   r]   r   __all__r<   rE   r9   <module>r      ss   , % "  U U S S    _ ^  
		H	%S, Sl !
!rE   