o
    پi                     @   s   d dl Z d dlmZ d dlmZ d dlmZ dZdZ	de
eeef de
eeef fdd	Zd
d Zdejdededededeej fddZdee	ddejdedededede
eeef de
eeef de jfddZdS )    N)Image)InterpolationMode)g
ףp=
?gv/?gCl?)gZd;O?gy&1?g?meanstdc             	   C   s>   t t dd t j| | ftjdt  t j||dg}|S )Nc                 S   s   | j dkr
| dS | S )NRGB)modeconvert)img r
   X/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/multimodal/internvl_utils.py<lambda>   s    z!build_transform.<locals>.<lambda>)interpolationr   r   )TComposeLambdaResizer   BICUBICToTensor	Normalize)
input_sizer   r   	transformr
   r
   r   build_transform   s   r   c                 C   s|   t d}d}|| }|D ]/}|d |d  }	t| |	 }
|
|k r%|
}|}q|
|kr;|d| | |d  |d  kr;|}q|S )Ninf)   r   r   r   g      ?)floatabs)aspect_ratiotarget_ratioswidthheight
image_sizebest_ratio_diff
best_ratioarearatiotarget_aspect_ratio
ratio_diffr
   r
   r   find_closest_aspect_ratio   s    r(   imagemin_nummax_numr!   use_thumbnailreturnc                   s0  | j \}}|| }t fddt d D }t|dd d}t|||||}	||	d  }
||	d  }|	d |	d  }| |
|f}g }t|D ].}||
|  | ||
|  | ||
|  d | ||
|  d | f}||}|| qKt||ksJ |rt|dkr| ||f}|| |S )Nc                 3   sX    | ]'}t d |d  D ]}t d |d  D ]}||  kr|| kr||fV  qqqdS )r   N)range).0nijr+   r*   r
   r   	<genexpr>8   s    
z%dynamic_preprocess.<locals>.<genexpr>r   c                 S   s   | d | d  S )Nr   r   r
   )xr
   r
   r   r   ?   s    z$dynamic_preprocess.<locals>.<lambda>)keyr   )	sizesetr.   sortedr(   resizecropappendlen)r)   r*   r+   r!   r,   
orig_widthorig_heightr   r   r&   target_widthtarget_heightblocksresized_imgprocessed_imagesr1   box	split_imgthumbnail_imgr
   r3   r   dynamic_preprocess,   s6   



rH   r   )min_num_tilesr   r   r   rI   max_num_tilesc          	         s@   t | ||||d}t|||d  fdd|D }t|}|S )N)r*   r+   r!   r,   r   c                    s   g | ]} |qS r
   r
   )r/   r)   r   r
   r   
<listcomp>q   s    z)image_to_pixel_values.<locals>.<listcomp>)rH   r   torchstack)	r)   r   rI   rJ   r,   r   r   imagespixel_valuesr
   rK   r   image_to_pixel_values_   s   

rQ   )rM   torchvision.transforms
transformsr   PILr   !torchvision.transforms.functionalr   IMAGENET_MEANIMAGENET_STDtupler   r   r(   intboollistrH   TensorrQ   r
   r
   r
   r   <module>   sZ   

7	