ó
    ˆŽ¡j|.  ã                   ó(  • S SK r S SKJ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  SS	KJrJr  SS
KJrJr  SSKJrJr  SSKJr   " S S\SS9rSSS\SS4S jrS\S\S\S-  S\S-  S\ \\4   4
S jr!\ " S S\5      5       r"S/r#g)é    N)Ú	Annotated)Ú
functionalé   )ÚTorchvisionBackend)ÚBatchFeature)Úgroup_images_by_shapeÚreorder_images)Ú
ImageInputÚPILImageResamplingÚSizeDict)ÚImagesKwargsÚUnpack)Ú
TensorTypeÚauto_docstring)ÚIMAGENET_STANDARD_MEANÚIMAGENET_STANDARD_STD)Úpositive_intc                   ó\   • \ rS rSr% Sr\\\" 5       4   \S'   \\S-  \" 5       4   \S'   Sr	g)ÚNeoMMEImageProcessorKwargsé%   zú
patch_size (`int`, *optional*, defaults to `self.patch_size`):
    Side, in pixels, of one patch token. The image is padded to a whole multiple of it.
max_side (`int`, *optional*):
    Longest-side cap in pixels. Unset means no longest-side resize.
Ú
patch_sizeNÚmax_side© )
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Úintr   Ú__annotations__Ú__static_attributes__r   ó    ÚÀC:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\transformers/models/neomme/image_processing_neomme.pyr   r   %   s1   ‡ ñð ˜#™|›~Ð-Ñ.Ó.Ø˜˜d™
¡L£NÐ2Ñ3Ö3r"   r   F)ÚtotalÚimagesútorch.Tensorr   Úreturnc                 ó°   • U R                   u  p#pEXA-  nXQ-  nU R                  X#XaXq5      nUR                  SSSSSS5      nUR                  X&U-  S5      nU$ )z¿
Convert 3D array image of shape (image_height, image_width, num_channels) into 2D array of patches of shape
(num_patches_height * num_patches_width, patch_size * patch_size * num_channels).
r   é   é   r   é   é   éÿÿÿÿ)ÚshapeÚreshapeÚpermute)	r%   r   Ú
batch_sizeÚnum_channelsÚimage_heightÚimage_widthÚnum_patches_heightÚnum_patches_widthÚpatched_images	            r#   Úconvert_image_to_patchesr8   1   sw   € ð
 ;A¿,¹,Ñ7€J˜lØ%Ñ3ÐØ#Ñ1ÐØ—N‘NØÐ"4ÐBSó€Mð "×)Ñ)¨!¨Q°°1°a¸Ó;€MØ!×)Ñ)¨*ÐK\Ñ6\Ð^`Óa€MØÐr"   ÚheightÚwidthr   Úsizec                 óÒ  • Ub  UR                   OSnUb  UR                  OSnUb  X-  U:  a
  X@U-  -  S-  OSnUb  [        Xb[        X5      -  5      nUb  [        XeX-  -  S-  5      nUS:X  a  X4$ [        S[	        X-  5      5      n[        S[	        X-  5      5      nUSL=(       a    [        Xx5      U:„  =(       d    USL=(       a    Xx-  U:„  n	U	(       av  [        S[
        R                  " X-  5      5      n[        S[
        R                  " X-  5      5      nUb,  Xx-  U:”  a$  Xx:¼  a  [        SXX-  5      nXx4$ [        SXW-  5      nXx4$ Ub“  X-  U:  a‹  Xx-  U:¼  a  Xx4$ [        S[
        R                  " X-  5      5      n
[        S[
        R                  " X-  5      5      nUSL=(       a    [        X«5      U:„  =(       d    USL=(       a    X«-  U:„  n	U	(       d  X«4$ Xx4$ )zHCompute integer height and width from the configured image size targets.Ng      à?g      ð?r,   )Ú
min_pixelsÚ
max_pixelsÚminÚmaxÚroundÚmathÚfloorÚceil)r9   r:   r   r;   r=   r>   ÚscaleÚresized_heightÚresized_widthÚexceeds_capÚceiled_heightÚceiled_widths               r#   Úget_resize_output_sizerK   A   s  € à$(Ñ$4�—’¸$€JØ$(Ñ$4�—’¸$€JØ6@Ñ6LÐQWÑQ_ÐblÓQlˆZ E™>Ñ*¨sÒ2Ðru€EØÑÜ�E¤c¨&Ó&8Ñ8Ó9ˆØÑÜ�E¨&©.Ñ9¸cÑAÓBˆØ�ƒ|Øˆ}Ðä˜œE &¡.Ó1Ó2€NÜ˜œ5 ¡Ó/Ó0€MØ 4Ð'×Y¬C°Ó,NÐQYÑ,Y÷ Ø˜$Ð×N >Ñ#AÀJÑ#Nð ö Ü˜Q¤§
¢
¨6©>Ó :Ó;ˆÜ˜AœtŸzšz¨%©-Ó8Ó9ˆØÑ! nÑ&DÀzÓ&QØÓ.Ü!$ Q¨
Ñ(CÓ!D�ð Ð,Ð,ô !$ A zÑ'CÓ D�ØÐ,Ð,àÑ &¡.°:Ó"=ØÑ)¨ZÓ7Ø!Ð0Ð0Ü˜AœtŸyšy¨©Ó8Ó9ˆÜ˜1œdŸiši¨©Ó6Ó7ˆØ tÐ+×[´°MÓ0PÐS[Ñ0[÷ 
Ø˜dÐ"×P }Ñ'CÀjÑ'Pð 	ö Ø Ð.Ð.àÐ(Ð(r"   c                   ó¶  ^ • \ rS rSrSr\r\R                  r	\
r\rSrSrSrSrSrSrSrSrSS/rS	\\   4U 4S
 jjr\S\S	\\   S\4U 4S jj5       rS\4U 4S jjrSSS\S-  S\ S-  SSSS4
S jr!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-  S\4S  jr(S%S!\S"\S\4S# jjr)S$r*U =r+$ )&ÚNeoMMEImageProcessoréj   a{  
Constructs an image processor for NeoMME.

The processor converts each image to RGB and splits it into row-major patches. It preserves the original size by
default, but `max_side` or a pixel-area `size` can resize images. It pads the bottom and right edges to complete
the final patch. A batch returns one concatenated patch tensor and one grid height and width pair per image.
Tgp?é    NÚpixel_valuesÚimage_grid_hwÚkwargsc                 ó&   >• [         TU ]  " S0 UD6  g )Nr   )ÚsuperÚ__init__)ÚselfrR   Ú	__class__s     €r#   rU   ÚNeoMMEImageProcessor.__init__…   s   ø€ Ü‰ÒÑ"˜6Ó"r"   r%   r'   c                 ó&   >• [         TU ]  " U40 UD6$ )zÞ
Returns:
    [`BatchFeature`] with `pixel_values` of shape `(total_patches, 3 * patch_size ** 2)` and
    `image_grid_hw` of shape `(batch_size, 2)`. `pixel_values` concatenates patches from every image in the
    batch.
)rT   Ú
preprocess)rV   r%   rR   rW   s      €r#   rZ   ÚNeoMMEImageProcessor.preprocessˆ   s   ø€ ô ‰wÒ! &Ñ3¨FÑ3Ð3r"   c                 ó®   >• US   nUb%  [        [        U5      5      SS1:w  a  [        S5      eUS   c  UR                  SS 5        [        TU ]  " S0 UD6$ )Nr;   r=   r>   z4size must contain exactly min_pixels and max_pixels.Ú	do_resizer   )ÚsetÚdictÚ
ValueErrorÚpoprT   Ú_validate_preprocess_kwargs)rV   rR   r;   rW   s      €r#   rb   Ú0NeoMMEImageProcessor._validate_preprocess_kwargs’   s]   ø€ Ø�f‰~ˆØÑ¤¤D¨£J£°LÀ,Ð3OÓ OÜÐSÓTÐTà�&‰>Ñ!à�J‰J�{ DÔ)Ü‰wÒ2Ñ<°VÑ<Ð<r"   Úimager&   r   r;   Úresamplez7PILImageResampling | tvF.InterpolationMode | int | Nonec                 ó    • UR                   S   UR                   S   pe[        XVX#5      u  pxXx4XV4:X  a  U$ [        XxS9nU R                  XUSS9$ )Néþÿÿÿr-   )r9   r:   T)rd   r;   re   Ú	antialias)r.   rK   r   Úresize)	rV   rd   r   r;   re   r9   r:   rF   rG   s	            r#   Ú_resize_to_budgetÚ&NeoMMEImageProcessor._resize_to_budgetœ   s\   € ð Ÿ™ B™¨¯©°R©�Ü(>¸vÈhÓ(]Ñ%ˆØÐ*¨v¨oÓ=ØˆLÜ˜~ÑCˆØ�{‰{ ¸HÐPTˆ{ÐUÐUr"   r   c                 óÈ   • UR                   S   UR                   S   pCU* U-  * U* U-  * peXR-  U-
  nXb-  U-
  nU(       d  U(       a  [        R                  " USSX‡/SS9nXU4$ )Nrg   r-   r   )Úfill)r.   ÚtvFÚpad)	rV   rd   r   r9   r:   Úgrid_heightÚ
grid_widthÚ
pad_heightÚ	pad_widths	            r#   Ú_pad_to_patch_gridÚ'NeoMMEImageProcessor._pad_to_patch_gridª   sw   € ØŸ™ B™¨¯©°R©�Ø%+ G¨zÑ$9Ð":¸u¸fÈ
Ñ>RÐ<S�ZØ Ñ-°Ñ6ˆ
ØÑ+¨eÑ3ˆ	ÞžÜ—G’G˜E A q¨)Ð#@ÀqÑIˆEà :Ð-Ð-r"   r]   Ú
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanÚ	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XEU5      nUUU'   M'     [        UU5      n[        UUS9u  nn0 n0 nUR                  5        Ht  u  nnU R	                  UU5      u  nnnU R                  UXxXšU5      n[        UU5      UU'   [        R                  " UU//[        U5      -  [        R                  S9UU'   Mv     [        UU5      n[        UU5      n[        [        R                  " USS9[        R                  " U5      S.US9$ )N)r{   )Údtyper   )Údim)rP   rQ   )ÚdataÚtensor_type)r   Úitemsrj   r	   rt   Úrescale_and_normalizer8   ÚtorchÚtensorÚlenÚint64r   ÚcatÚstack)rV   r%   r]   r   r   r;   re   rv   rw   rx   ry   rz   r{   r|   rR   Úgrouped_imagesÚgrouped_images_indexÚresized_images_groupedr.   Ústacked_imagesÚresized_imagesÚprocessed_images_groupedÚimage_grids_groupedrp   rq   rP   rQ   s                              r#   Ú_preprocessÚ NeoMMEImageProcessor._preprocess´   sg  € ô" 0EÀVÑ/oÑ,ˆÐ,Ø!#ÐØ%3×%9Ñ%9Ö%;Ñ!ˆE�>ÞØ!%×!7Ñ!7¸ÈÐX`Ó!a�Ø,:Ð" 5Ó)ñ &<ô (Ð(>Ð@TÓUˆä/DÀ^ÐfvÑ/wÑ,ˆÐ,Ø#%Ð Ø ÐØ%3×%9Ñ%9Ö%;Ñ!ˆE�>ð 7;×6MÑ6MÈnÐ^hÓ6iÑ3ˆN˜K¨Ø!×7Ñ7Ø 
¸LÐV_óˆNô /GÀ~ÐWaÓ.bÐ$ UÑ+Ü).¯ªØ˜zÐ*Ð+¬c°.Ó.AÑAÌÏÉñ*Ð Ó&ñ &<ô &Ð&>Ð@TÓUˆÜ&Ð':Ð<PÓQˆÜä %§	¢	¨,¸AÑ >Ü!&§¢¨]Ó!;ñð 'ñ
ð 	
r"   r9   r:   c                 ó\  • U=(       d    0 nUR                  SU R                  5      nUR                  SU R                  5      nU R                  UR                  SU R                  5      S9S   nUR                  SU R
                  5      (       a  [        XXV5      u  pU* U-  * U* U-  * -  $ )zî
Return the number of image patches for one image, excluding row markers.

The method applies the effective resize settings, then rounds each image dimension up to a whole patch.
Values in `images_kwargs` override the processor settings.
r   r   r;   )r;   r]   )Úgetr   r   Ú_standardize_kwargsr;   r]   rK   )rV   r9   r:   Úimages_kwargsr   r   r;   s          r#   Úget_number_of_image_patchesÚ0NeoMMEImageProcessor.get_number_of_image_patchesæ   s¨   € ð &×+¨ˆØ"×&Ñ& |°T·_±_ÓEˆ
Ø ×$Ñ$ Z°·±Ó?ˆØ×'Ñ'¨]×->Ñ->¸vÀtÇyÁyÓ-QÐ'ÐRÐSYÑZˆà×Ñ˜[¨$¯.©.×9Ñ9Ü2°6À(ÓQ‰MˆFà�˜JÑ&Ð'¨e¨V°zÑ-AÐ+BÑCÐCr"   r   )N),r   r   r   r   r   r   Úvalid_kwargsr   ÚBILINEARre   r   ry   r   rz   Údo_convert_rgbr]   rv   rw   rx   r   r   r;   Úmodel_input_namesr   rU   r   r
   r   rZ   Útuplerb   r   r   rj   rt   ÚlistÚboolÚfloatÚstrr   r‘   r—   r!   Ú__classcell__)rW   s   @r#   rM   rM   j   sÿ  ø† ñð .€Là!×*Ñ*€HØ'€JØ%€IØ€NØ€IØ€JØ€NØ€LØ€Jà€HØ€Dà'¨Ð9Ðð# Ð(BÑ!C÷ #ð ð4 ð 4°vÐ>XÑ7Yð 4Ð^jö 4ó ð4ð=°u÷ =ðVàðVð ˜‘*ðVð ˜‰oð	Vð
 LðVð 
ôVð.¨ð .ÀCð .ÈEÐR`ÐbeÐgjÐRjÑLkô .ð0
à�^Ñ$ð0
ð ð0
ð ð	0
ð
 ˜‘*ð0
ð ˜‰oð0
ð Lð0
ð ð0
ð ð0
ð ð0
ð ˜D ™KÑ'¨$Ñ.ð0
ð ˜4 ™;Ñ&¨Ñ-ð0
ð  ™+ð0
ð ˜jÑ(¨4Ñ/ð0
ð  
ô!0
ñdD°#ð D¸cð DÐZ]÷ Dó Dr"   rM   )$rB   Útypingr   r„   Útorchvision.transforms.v2r   rn   Úimage_processing_backendsr   Úimage_processing_utilsr   Úimage_transformsr   r	   Úimage_utilsr
   r   r   Úprocessing_utilsr   r   Úutilsr   r   Úutils.constantsr   r   Úutils.type_validatorsr   r   r   r8   r�   rK   rM   Ú__all__r   r"   r#   Ú<module>r®      sÄ   ðó* Ý ã Ý 7å ;Ý 2ß Eß CÑ Cß 4ß /ß LÝ 1ô	4 °Uò 	4ð ^ð Àð Èô ð &) 3ð &)¨sð &)¸cÀD¹jð &)ÐPXÐ[_ÑP_ð &)ÐdiÐjmÐorÐjrÑdsô &)ðR ôJDÐ-ó JDó ðJDðZ "Ð
"�r"   