
    ^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     $TaSS\$Ts   r   )super__init__gettuplebackground_color)selfr$   r1   	__class__s      r   r.   zJanusImageProcessor.__init__;   sP    "6"::l#+.$$T6::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tzz8QGXGWWbcghocpbqr  {{BC(vu%x (uVe^,h7eEEM*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   & RS)||A\\!_
U?Mfe$ &, 01!"l2:<.Hqr  w8U[UbUb
 ""23 	.HAu(-M!Q1*%	.6>v%!+E=CM!Q 69:
  u_*E<BM!Q555=#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!3NUYUjUj!3!k!77
NL*V_N /=$U+	= **BDXY.2B!CQ_``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!     dID#N?T1C7ds   c              3   &   K   | ]	  }d |z    yw)rE   Nr   )r*   rp   s     r   r,   z2JanusImageProcessor.postprocess.<locals>.<genexpr>   s     7c!c'7s   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    $.#9Zt
6D6Lt222R`'3'?|TEVEV#-#9Zt
!*!6IDNN	dZYbIcdd
7Y77	!)%!) ! 

 , 	 FLMUejjC(++EKK8MFMJ>=N+N;AB%c&&u-BF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 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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   