ó
    ‡Ž¡j{)  ã                   óð   • S SK r S SKrS SK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\S\S\S\S\S\S\4S jjr\ " S S\5      5       rS/rg)é    N)Ú
functionalé   )ÚTorchvisionBackend)ÚBatchFeature)Úgroup_images_by_shapeÚreorder_images)ÚOPENAI_CLIP_MEANÚOPENAI_CLIP_STDÚ
ImageInputÚPILImageResamplingÚSizeDict)ÚImagesKwargsÚUnpack)Ú
TensorTypeÚauto_docstringc                   ó8   • \ rS rSr% Sr\\S'   \\S'   \\S'   Srg)ÚGlm46VImageProcessorKwargsé"   a6  
patch_size (`int`, *optional*, defaults to 14):
    The spatial patch size of the vision encoder.
temporal_patch_size (`int`, *optional*, defaults to 2):
    The temporal patch size of the vision encoder.
merge_size (`int`, *optional*, defaults to 2):
    The merge size of the vision encoder to llm encoder.
Ú
patch_sizeÚtemporal_patch_sizeÚ
merge_size© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚintÚ__annotations__Ú__static_attributes__r   ó    ÚÀC:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\transformers/models/glm46v/image_processing_glm46v.pyr   r   "   s   ‡ ñð ƒOØÓØ†Or!   r   F)ÚtotalÚ
num_framesÚheightÚwidthÚtemporal_factorÚfactorÚ
min_pixelsÚ
max_pixelsc                 ó:  • X:  a  [        SU  SU 35      eX:  d  X$:  a*  [        XA-  XB-  5      n[        X-  5      n[        X'-  5      n[        X5      [        X5      -  S:”  a#  [        S[        X5      [        X5      -   35      e[	        X-  5      U-  n[	        X$-  5      U-  n	[	        X-  5      U-  n
X¨-  U	-  U:”  aq  [
        R                  " X-  U-  U-  5      n[        U[
        R                  " X-  U-  5      U-  5      n[        U[
        R                  " X+-  U-  5      U-  5      n	X‰4$ X¨-  U	-  U:  aZ  [
        R                  " XPU-  U-  -  5      n[
        R                  " X-  U-  5      U-  n[
        R                  " X+-  U-  5      U-  n	X‰4$ )Nzt:z% must be larger than temporal_factor:éÈ   z4absolute aspect ratio must be smaller than 200, got )	Ú
ValueErrorÚmaxr   ÚminÚroundÚmathÚsqrtÚfloorÚceil)r$   r%   r&   r'   r(   r)   r*   ÚscaleÚh_barÚw_barÚt_barÚbetas               r"   Úsmart_resizer:   1   s©  € ð Ó#Ü˜2˜j˜\Ð)NÈÐN_Ð`ÓaÐaØƒ˜%›.Ü�F‘O V¡^Ó4ˆÜ�V‘^Ó$ˆÜ�E‘MÓ"ˆä
ˆ6ÓœC Ó.Ñ.°Ó4ÜØBÄ3ÀvÓCUÔX[Ð\bÓXjÑCjÐBkÐló
ð 	
ô �&‘/Ó" VÑ+€EÜ�%‘.Ó! FÑ*€EÜ�*Ñ.Ó/°/ÑA€Eà�}�uÑ˜zÓ)Ü�yŠy˜*Ñ-°Ñ5¸ÑCÓDˆÜ�FœDŸJšJ v¡}°vÑ'=Ó>ÀÑGÓHˆÜ�FœDŸJšJ u¡|°fÑ'<Ó=ÀÑFÓGˆð ˆ<Ðð 
‰˜Ñ	 Ó	+Ü�yŠy˜°FÑ':¸UÑ'BÑCÓDˆÜ—	’	˜&™-¨&Ñ0Ó1°FÑ:ˆÜ—	’	˜%™,¨Ñ/Ó0°6Ñ9ˆàˆ<Ðr!   c                   óš  ^ • \ rS rSrSr\R                  rSSS.rSr	Sr
SrSr\r\rSrSrS	rS	r\rS
S/r\S\S\\   S\4U 4S jj5       rSSS\SSS\S\SS4U 4S jjrSSS\S\S\S\ S\\4   4
S 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r'S*S%\S&\S'\(S -  S\4S( jjr)S)r*U =r+$ )+ÚGlm46VImageProcessoréU   Té 1  i€q³ )Úshortest_edgeÚlongest_edgeFgp?é   é   Úpixel_valuesÚimage_grid_thwÚimagesÚkwargsÚreturnc                 ó&   >• [         TU ]  " U40 UD6$ ©N)ÚsuperÚ
preprocess)ÚselfrE   rF   Ú	__class__s      €r"   rK   ÚGlm46VImageProcessor.preprocessg   s   ø€ ä‰wÒ! &Ñ3¨FÑ3Ð3r!   ztorch.TensorÚsizeÚresamplez7PILImageResampling | tvF.InterpolationMode | int | Noner(   r'   c           
      óþ   >• UR                   (       a  UR                  (       d  [        SU S35      eUR                  SS u  px[	        UUUUUUR                   UR                  S9u  pš[
        TU ]  U[        XšS9US9$ )z5Resize dynamically based on input image aspect ratio.zI`size` dict must contain 'shortest_edge' and 'longest_edge' keys but got Ú.éþÿÿÿN)r%   r&   r$   r(   r'   r)   r*   )r%   r&   )ÚimagerO   rP   )r?   r@   r-   Úshaper:   rJ   Úresizer   )rL   rE   rO   rP   r(   r'   rF   r%   r&   Úresized_heightÚresized_widthrM   s              €r"   rV   ÚGlm46VImageProcessor.resizek   s”   ø€ ð ×!×!¨×):×):ÜÐhÐimÐhnÐnoÐpÓqÐqàŸ™ R SÐ)‰ˆÜ(4ØØØ&ØØ+Ø×)Ñ)Ø×(Ñ(ñ)
Ñ%ˆô ‰w‰~ØÜ ÑEØð ð 
ð 	
r!   r   r   r   c                 ó$  • UR                   u  pVpxXr-  X‚-  p©UR                  UUX“-  UUX£-  UU5      nUR                  SSSSSSSS5      nUR                  S5      R	                  S	S	S	S	S	S	US	S	5	      R                  UXš-  Xd-  U-  U-  5      nXÉU
4$ )
ztPatchifies each image into flat layout of shape (`seq_len`, `patch_dim`) so we can concat dynamically shaped pixels.r   rB   é   r   é   é   é   é   éÿÿÿÿ)rU   ÚreshapeÚpermuteÚ	unsqueezeÚexpand)rL   rE   r   r   r   Ú
batch_sizeÚchannelrW   rX   Úgrid_hÚgrid_wÚpatchesÚflatten_patchess                r"   ÚpatchifyÚGlm46VImageProcessor.patchifyˆ   sÇ   € ð >D¿\¹\Ñ:ˆ
˜^Ø'Ñ5°}Ñ7R�Ø—.‘.ØØØÑ ØØØÑ ØØó	
ˆð —/‘/ ! Q¨¨1¨a°°A°qÓ9ˆà×Ñ˜aÓ ß‰V�B˜˜B  B¨Ð,?ÀÀRÓHß‰WØØ‘ØÑ-°
Ñ:¸ZÑGóð 	ð ¨Ð.Ð.r!   Ú	do_resizeÚ
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanNÚ	image_stdÚdisable_groupingÚreturn_tensorsc           	      óR  • [        XS9u  nn0 nUR                  5        H'  u  nnU(       a  U R                  UUUX¬-  US9nUUU'   M)     [        UU5      n[        UUS9u  nn0 n0 nUR                  5        HJ  u  nnU R	                  UXVXxU	5      nU R                  UU
UUS9u  nnnUUU'   SUU//[        U5      -  UU'   ML     [        UU5      n[        UU5      n[        U5      S:X  a  US   O[        R                  " USS9n[        R                  " U5      n[        UUS.US9$ )	z)
Preprocess an image or batch of images.
)rs   )rE   rO   rP   r(   r'   )r   r   r   r]   r   )Údim)rC   rD   )ÚdataÚtensor_type)r   ÚitemsrV   r   Úrescale_and_normalizerk   ÚlenÚtorchÚcatÚtensorr   )rL   rE   rm   rO   rP   rn   ro   rp   rq   rr   r   r   r   rs   rt   rF   Úgrouped_imagesÚgrouped_images_indexÚresized_images_groupedrU   Ústacked_imagesÚresized_imagesÚprocessed_images_groupedÚprocessed_gridsri   rg   rh   Úprocessed_imagesrC   rD   s                                 r"   Ú_preprocessÚ Glm46VImageProcessor._preprocess¨   s†  € ô, 0EÀVÑ/oÑ,ˆÐ,Ø!#ÐØ%3×%9Ñ%9Ö%;Ñ!ˆE�>ÞØ!%§¡Ø)ØØ%Ø%Ñ2Ø$7ð "-ð "�ð -;Ð" 5Ó)ñ &<ô (Ð(>Ð@TÓUˆä/DÀ^ÐfvÑ/wÑ,ˆÐ,Ø#%Ð Øˆà%3×%9Ñ%9Ö%;Ñ!ˆE�>Ø!×7Ñ7Ø 
¸LÐV_óˆNð '+§m¡mØØ%Ø%Ø$7ð	 '4ð 'Ñ#ˆG�V˜Vð /6Ð$ UÑ+Ø'(¨&°&Ð&9Ð%:¼SÀÓ=PÑ%PˆO˜EÓ"ñ &<ô *Ð*BÐDXÓYÐÜ(¨Ð:NÓOˆä.1Ð2BÓ.CÀqÓ.HÐ'¨Ò*ÌeÏiÊiÐXhÐnoÑNpˆÜŸš oÓ6ˆäØ".À.ÑQÐ_mñ
ð 	
r!   r%   r&   Úimages_kwargsc           
      ó4  • U=(       d    0 nUR                  SU R                  5      nUR                  SU R                  5      nUR                  SU R                  5      nXE-  n[	        U R
                  UUUUS   US   U R
                  S9u  p‰X„-  X”-  pºX«-  $ )aY  
A utility that returns number of image patches for a given image size.

Args:
    height (`int`):
        Height of the input image.
    width (`int`):
        Width of the input image.
    images_kwargs (`dict`, *optional*)
        Any kwargs to override defaults of the image processor.
Returns:
    `int`: Number of image patches per image.
r   r   rO   r?   r@   )r$   r%   r&   r(   r)   r*   r'   )Úgetr   r   rO   r:   r   )rL   r%   r&   r‰   r   r   rO   r(   rW   rX   rg   rh   s               r"   Úget_number_of_image_patchesÚ0Glm46VImageProcessor.get_number_of_image_patchesê   s§   € ð &×+¨ˆØ"×&Ñ& |°T·_±_ÓEˆ
Ø"×&Ñ& |°T·_±_ÓEˆ
Ø× Ñ  ¨¯©Ó3ˆàÑ(ˆÜ(4Ø×/Ñ/ØØØØ˜OÑ,Ø˜NÑ+Ø ×4Ñ4ñ)
Ñ%ˆð (Ñ5°}Ñ7R�Ø‰Ðr!   r   rI   ),r   r   r   r   rm   r   ÚBICUBICrP   rO   Údefault_to_squarern   ro   rp   r	   rq   r
   rr   Údo_convert_rgbr   r   r   r   Úvalid_kwargsÚmodel_input_namesr   r   r   r   rK   r   r   rV   Útuplerk   ÚlistÚboolÚfloatÚstrr   r‡   ÚdictrŒ   r    Ú__classcell__)rM   s   @r"   r<   r<   U   s  ø† à€IØ!×)Ñ)€HØ&¸ÑH€DØÐØ€JØ€NØ€LØ!€JØ€IØ€NØ€JØÐØ€JØ-€LØ'Ð)9Ð:Ðàð4 ð 4°vÐ>XÑ7Yð 4Ð^jö 4ó ð4ð
àð
ð ð
ð Lð	
ð
 ð
ð ð
ð 
÷
ð:/àð/ð ð/ð ð	/ð
 !ð/ð 
ˆ~˜s CÐ'Ñ	(ô/ð@@
à�^Ñ$ð@
ð ð@
ð ð	@
ð
 Lð@
ð ð@
ð ð@
ð ð@
ð ˜D ™KÑ'¨$Ñ.ð@
ð ˜4 ™;Ñ&¨Ñ-ð@
ð ð@
ð !ð@
ð ð@
ð  ™+ð@
ð ˜jÑ(¨4Ñ/ð@
ð" 
ô#@
ñD°#ð ¸cð ÐRVÐY]ÑR]ð Ðil÷ ó r!   r<   )rB   é   r>   i  “ )r1   r|   Útorchvision.transforms.v2r   ÚtvFÚimage_processing_backendsr   Úimage_processing_utilsr   Úimage_transformsr   r   Úimage_utilsr	   r
   r   r   r   Úprocessing_utilsr   r   Úutilsr   r   r   r   r:   r<   Ú__all__r   r!   r"   Ú<module>r¤      s³   ðó* ã Ý 7å ;Ý 2ß Eß fÕ fß 4ß /ô °Uò ð& ØØØ0ñ!Øð!àð!ð ð!ð ð	!ð
 ð!ð ð!ð õ!ðH ôrÐ-ó ró ðrðj "Ð
"�r!   