Ë
    ÜÓ^j8'  ã                   óŒ  — d dl Zd dlZd dlmc 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 ddlmZmZmZ ddlmZmZ ddlmZ  ej4                  e«      Z G d	„ d
ed¬«      ZdZ ed«      D � cg c]	  } d| d›d�‘Œ c}  ed«      D � cg c]	  } d| d›d�‘Œ c} z   Z e ed¬«       G d„ de«      «       «       Z!dgZ"yc c} w c c} w )é    Né   )ÚBatchFeature)Ú
ImageInputÚmake_nested_list_of_images)ÚMultiModalDataÚProcessingKwargsÚProcessorMixinÚUnpack)Ú
AddedTokenÚPreTokenizedInputÚ	TextInput)Úauto_docstringÚlogging)Úrequiresc                   ó"   — e Zd ZddddœddidœZy)	ÚPI0ProcessorKwargsÚ
max_lengthé0   Úright)Úpaddingr   Úpadding_sideÚreturn_tensorsÚpt)Útext_kwargsÚcommon_kwargsN)Ú__name__Ú
__module__Ú__qualname__Ú	_defaults© ó    úq/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/pi0/processing_pi0.pyr   r   $   s#   „ ð $ØØ#ñ
ð
 +¨DÐ1ñ�Ir!   r   F)Útotalz<image>i   z<locz0>4ú>é€   z<segz0>3)ÚvisionÚtorch)Úbackendsc                   ó0  ‡ — e Zd Zdˆ fd„	Ze	 	 	 ddeee   z  eee      z  dz  deez  ee   z  ee   z  dz  dee	j                  z  ej                  z  dz  dee	j                  z  ej                  z  dz  dee   defd	„«       Zdd
„Zeˆ fd„«       Zˆ xZS )ÚPI0ProcessorNc                 óÖ  •— |j                   d   |j                   d   c| _        | _        |j                  dg d¢«      }|j                  dg d¢«      }|j                  dg d¢«      }|j                  d	g d
¢«      }t	        j
                  |«      | _        t	        j
                  |«      | _        t	        j
                  |«      | _        t	        j
                  |«      | _	        |j                  dd«      | _
        |j                  dd«      | _        t        |d«      st        d«      ‚|j                  | _        t        |d«      sNt        t         dd¬«      }	d|	gi}
|j#                  |
«       |j%                  t         «      | _        t         | _        n"|j&                  | _        |j(                  | _        |j+                  t,        «       d|_        d|_        t2        ‰| �i  |||¬«       y )NÚheightÚwidthÚ
state_mean)gù g³ês¥¿grŠŽäò¢?g•Ô	h"lê?g‡§WÊ2D@g\ AñcÌá¿gZd;ßOÅ¿gB>èÙ¬úœ?g“©‚QI�¿Ú	state_std)gt$—ÿ�~»?gL¦
F%uÂ?g.ÿ!ýöuÐ?g/n£¼Ö?gëâ6Àó?g¶óýÔxéÖ?gÌ]KÈ=‹?gF%uš‹?Úactions_mean)gÂ&S£’?gâX·Ñ ®?gW[±¿ìž¬¿gHPüs×r?gàœ¥½Ág?gÒ Þ	Š¿gHPüs·¿Úactions_std)g®GázÒ?g`åÐ"ÛùÖ?gÁ9#J{ƒ×?gvOjM£?g>yX¨5Í«?g46<½R¶?gèj+ö—Ýï?Úmax_state_dimé    Ú
chunk_sizeé2   Úimage_seq_lengthz;Image processor is missing an `image_seq_length` attribute.Úimage_tokenFT)Ú
normalizedÚspecialÚadditional_special_tokens)Úchat_template)Úsizer,   r-   Úgetr'   Útensorr.   r/   r0   r1   r2   r4   ÚhasattrÚ
ValueErrorr6   r   ÚIMAGE_TOKENÚadd_special_tokensÚconvert_tokens_to_idsÚimage_token_idr7   Ú
add_tokensÚEXTRA_TOKENSÚadd_bos_tokenÚadd_eos_tokenÚsuperÚ__init__)ÚselfÚimage_processorÚ	tokenizerr;   Úkwargsr.   r/   r0   r1   r7   Útokens_to_addÚ	__class__s              €r"   rJ   zPI0Processor.__init__6   s•  ø€ Ø"1×"6Ñ"6°xÑ"@À/×BVÑBVÐW^ÑB_ÐˆŒ�T”ZØ—Z‘Z Ò.rÓsˆ
Ø—J‘J˜{Ò,lÓmˆ	Ø—z‘z .Ò2mÓnˆØ—j‘j Ò0hÓiˆäŸ,™, zÓ2ˆŒÜŸ™ iÓ0ˆŒÜ!ŸL™L¨Ó6ˆÔÜ Ÿ<™<¨Ó4ˆÔØ#ŸZ™Z¨¸Ó<ˆÔØ Ÿ*™* \°2Ó6ˆŒÜ�Ð(:Ô;ÜÐZÓ[Ð[à /× @Ñ @ˆÔä�y -Ô0Ü$¤[¸UÈDÔQˆKØ8¸;¸-ÐHˆMØ×(Ñ(¨Ô7Ø"+×"AÑ"AÄ+Ó"NˆDÔÜ*ˆDÕà"+×":Ñ":ˆDÔØ(×4Ñ4ˆDÔà×Ñœ\Ô*Ø"'ˆ	ÔØ"'ˆ	Ôä‰Ñ˜¨)À=ÐÕQr!   ÚimagesÚtextÚactionsÚstaterN   Úreturnc                 óÚ  —  | j                   t        fd| j                  j                  i|¤Ž}|€t        j                  d«       d}t        |t        «      r|g}t        |«      }t        |«      t        |«      k7  r$t        dt        |«      › dt        |«      › d�«      ‚|d   j                  d	d«      }|d
   j                  d	d«       g }	t        ||«      D ]V  \  }
}| j                  | j                  z  t        |«      z  › | j                  j                  › |
› d�}
|	j!                  |
«       ŒX  | j                  |	fi |d   ¤Ž}t#        d„ |D «       «      }t%        j&                  t        |«      |ft$        j(                  ¬«      }t%        j&                  t        |«      |d| j*                  | j,                  «      }t/        |«      D ]=  \  }} | j0                  |fd	di|d
   ¤Ž}t        |«      }d||d|…f<   |d   ||d|…f<   Œ? i |¥||dœ¥}|�ªt%        j2                  |«      | j4                  z
  | j6                  dz   z  }|j8                  d   | j:                  k  r2t=        j>                  |d| j:                  |j8                  d   z
  f«      }|jA                  d| jB                  | j:                  «      |d<   |�Ÿt%        j2                  |«      | jD                  z
  | jF                  dz   z  }|j8                  d   | j:                  k  r2t=        j>                  |d| j:                  |j8                  d   z
  f«      }|jA                  d| j:                  «      |d<   tI        ||¬«      S )aC  
        actions (`list | np.ndarray | torch.Tensor`, *optional*):
            Actions to be predicted by the model. If provided, padding, mean and std normalization will be applied.
        state (`list | np.ndarray | torch.Tensor`, *optional*):
            Robotic states to be predicted by the model. If provided, padding, mean and std normalization will be applied.

        Returns:
            [`BatchFeature`]: A [`BatchFeature`] with the following fields:

            - **input_ids** -- List of token ids to be fed to a model. Returned when `text` is not `None`. If `suffix`
              is provided, the `input_ids` will also contain the suffix input ids.
            - **attention_mask** -- List of indices specifying which tokens should be attended to by the model (when
              `return_attention_mask=True` or if *"attention_mask"* is in `self.model_input_names` and if `text` is not
              `None`).
            - **pixel_values** -- Pixel values to be fed to a model. Returned when `images` is not `None`.
            - **pixel_attention_mask** -- Pixel values padding mask to be fed to a model. Returned when `images` is not `None`.
            - **state** -- Robot state compatible with model if `state` is not None
            - **actions** -- Label-actions compatible with training if `actions` is not None
        Útokenizer_init_kwargsNzPYou are using PI0 without a text prefix. The processor will use an empty prompt.Ú z	Received z image samples for z\ prompts. Each prompt should be associated with one sample (with one or more camera images).r   r   Úimages_kwargsú
c              3   ó2   K  — | ]  }t        |«      –— Œ y ­w©N)Úlen)Ú.0Úsample_imagess     r"   ú	<genexpr>z(PI0Processor.__call__.<locals>.<genexpr>“   s   è ø€ ÒU°]œc -×0ÑUùs   ‚)Údtyper   r   TÚpixel_values)rb   Úpixel_attention_maskg:Œ0âŽyE>éÿÿÿÿr   rS   rT   )ÚdataÚtensor_type)%Ú_merge_kwargsr   rM   Úinit_kwargsÚloggerÚwarning_onceÚ
isinstanceÚstrr   r]   r@   ÚpopÚzipr7   r6   Ú	bos_tokenÚappendÚmaxr'   ÚzerosÚboolr,   r-   Ú	enumeraterL   r>   r0   r1   Úshaper2   ÚFÚpadÚviewr4   r.   r/   r   )rK   rQ   rR   rS   rT   rN   Úoutput_kwargsÚbatched_imagesr   Úprompt_stringsÚsampleÚ
image_listÚtext_inputsÚmax_num_camerasrc   Úpadded_pixel_valuesÚbatchr_   Ú	processedÚnum_camerasÚreturn_datas                        r"   Ú__call__zPI0Processor.__call__X   s|  € ð8 +˜×*Ñ*Üñ
Ø6:·n±n×6PÑ6Pð
ØTZñ
ˆð ˆ<Ü×ÑÐ rÔsØˆDä�dœCÔ Ø�6ˆDä3°FÓ;ˆÜˆ~Ó¤# d£)Ò+ÜØœC Ó/Ð0Ð0CÄCÈÃIÀ;ð Oeð eóð ð
 ' }Ñ5×9Ñ9Ð:JÈDÓQˆØ�oÑ&×*Ñ*Ð+;¸TÔBàˆÜ"% d¨NÓ";ò 	*ÑˆF�Jà×#Ñ# d×&;Ñ&;Ñ;¼cÀ*»oÑMÐNÈtÏ~É~×OgÑOgÐNhÐioÐhpÐprÐsð ð ×!Ñ! &Õ)ð		*ð %�d—n‘n ^ÑT°}À]Ñ7SÑTˆô ÑUÀnÔUÓUˆÜ$Ÿ{™{¬C°Ó,?ÀÐ+QÔY^×YcÑYcÔdÐÜ#Ÿk™k¬#¨nÓ*=¸ÐPQÐSW×S^ÑS^Ð`d×`jÑ`jÓkÐä$-¨nÓ$=ò 	QÑ ˆE�=Ø,˜×,Ñ,¨]ÑrÈ4ÐrÐS`ÐapÑSqÑrˆIä˜mÓ,ˆKØ8<Ð  ¨¨¨Ð!4Ñ5Ø7@ÀÑ7PÐ  |¨ |Ð 3Ò4ð	Qð
Øð
à/Ø$8ò
ˆð ÐÜ—|‘| GÓ,¨t×/@Ñ/@Ñ@ÀT×EUÑEUÐX]ÑE]Ñ^ˆGØ�}‰}˜RÑ  4×#5Ñ#5Ò5ÜŸ%™% ¨!¨T×-?Ñ-?À'Ç-Á-ÐPRÑBSÑ-SÐ)TÓU�Ø%,§\¡\°"°d·o±oÀt×GYÑGYÓ%ZˆK˜	Ñ"àÐÜ—\‘\ %Ó(¨4¯?©?Ñ:¸t¿~¹~ÐPUÑ?UÑVˆEØ�{‰{˜2‰ ×!3Ñ!3Ò3ÜŸ™˜e a¨×);Ñ);¸e¿k¹kÈ"¹oÑ)MÐ%NÓO�Ø#(§:¡:¨b°$×2DÑ2DÓ#EˆK˜Ñ ä ¸.ÔIÐIr!   c                 ó˜   — i }|�<| j                   gt        |«      z  }dgt        |«      z  }|j                  ||dœ«       t        di |¤ŽS )a¸  
        Computes the number of placeholder tokens needed for multimodal inputs with the given sizes.

        Args:
            image_sizes (list[list[str]], *optional*):
                The input sizes formatted as (height, width) per each image.
        Returns:
            `MultiModalData`: A `MultiModalData` object holding number of tokens per each of the provided
            input modalities, along with other useful data.
        é   )Únum_image_tokensÚnum_image_patchesr    )r6   r]   Úupdater   )rK   Úimage_sizesrN   Úvision_datarˆ   r‰   s         r"   Ú_get_num_multimodal_tokensz'PI0Processor._get_num_multimodal_tokens²   s]   € ð ˆØÐ"Ø $× 5Ñ 5Ð6¼¸[Ó9IÑIÐØ!" ¤c¨+Ó&6Ñ 6ÐØ×ÑÐ4DÐ[lÑmÔnÜÑ, Ñ,Ð,r!   c                 ó    •— t         ‰| �  dgz   S )Nrc   )rI   Úmodel_input_names)rK   rP   s    €r"   r�   zPI0Processor.model_input_namesÄ   s   ø€ ä‰wÑ(Ð,BÐ+CÑCÐCr!   )NNNr\   )r   r   r   rJ   r   r   Úlistr   r   ÚnpÚndarrayr'   ÚTensorr
   r   r   r…   r�   Úpropertyr�   Ú__classcell__)rP   s   @r"   r*   r*   3   s  ø„ õ RðD ð bfØ;?Ø9=ñWJà˜T *Ñ-Ñ-°°T¸*Ñ5EÑ0FÑFÈÑMðWJð Ð+Ñ+¨d°9©oÑ=ÀÐEVÑ@WÑWÐZ^Ñ^ðWJð ˜Ÿ
™
Ñ" U§\¡\Ñ1°DÑ8ð	WJð
 �b—j‘jÑ  5§<¡<Ñ/°$Ñ6ðWJð Ð+Ñ,ðWJð 
òWJó ðWJór-ð$ óDó ôDr!   r*   )#Únumpyr‘   r'   Útorch.nn.functionalÚnnÚ
functionalrv   Úfeature_extraction_utilsr   Úimage_utilsr   r   Úprocessing_utilsr   r   r	   r
   Útokenization_utils_baser   r   r   Úutilsr   r   Úutils.import_utilsr   Ú
get_loggerr   ri   r   rA   ÚrangerF   r*   Ú__all__)Úis   0r"   ú<module>r¤      s×   ðó* Û ß Ð å 4ß Aß XÓ Xß OÑ Oß ,Ý *ð 
ˆ×	Ñ	˜HÓ	%€ôÐ)°õ ð €Ù).¨t«Ö5 A�$�q˜�g˜Q’Ò5ÑRWÐX[ÓR\Ö8]ÈQ¸4ÀÀ#¸wÀaºÒ8]Ñ]€ð Ù	Ð&Ô'ôQD�>ó QDó (ó ðQDðh Ð
�ùòs 6ùÒ8]s   Á/B<Â	C