
    sg                         d Z ddlmZmZmZ ddlmZ ddlmZ ddl	m
Z
mZmZmZ ddlmZmZ ddlmZ  G d	 d
e
d      Z ej(                  e      Z G d de      Zy)z$
Image/Text processor class for GIT
    )ListOptionalUnion   )BatchFeature)
ImageInput)ProcessingKwargsProcessorMixinUnpack!_validate_images_text_input_order)PreTokenizedInput	TextInput)loggingc                       e Zd Zi Zy)GitProcessorKwargsN)__name__
__module____qualname__	_defaults     Y/var/www/html/venv/lib/python3.12/site-packages/transformers/models/git/processing_git.pyr   r      s    Ir   r   F)totalc                        e Zd ZdZddgZdZdZ fdZ	 	 	 	 ddee	   dee
eeee   ee   f      d	ee   d
efdZd Zd Zed        Z xZS )GitProcessora  
    Constructs a GIT processor which wraps a CLIP image processor and a BERT tokenizer into a single processor.

    [`GitProcessor`] offers all the functionalities of [`CLIPImageProcessor`] and [`BertTokenizerFast`]. See the
    [`~GitProcessor.__call__`] and [`~GitProcessor.decode`] for more information.

    Args:
        image_processor ([`AutoImageProcessor`]):
            The image processor is a required input.
        tokenizer ([`AutoTokenizer`]):
            The tokenizer is a required input.
    image_processor	tokenizerAutoImageProcessorAutoTokenizerc                 H    t         |   ||       | j                  | _        y )N)super__init__r   current_processor)selfr   r   	__class__s      r   r"   zGitProcessor.__init__5   s     )4!%!5!5r   imagestextkwargsreturnc                    |j                  dd      }|rt        j                  d       ||t        d      t	        ||      \  }} | j
                  t        fd| j                  j                  i|}i }|' | j                  |fi |d   }	|j                  |	       |K | j                  |fi |d   }
|j                  |
       |s"|d	   dddd
f   |d	<   |d   dddd
f   |d<   t        ||d   j                  d            S )a	  
        Main method to prepare for the model one or several sequences(s) and image(s). This method forwards the `text`
        and `kwargs` arguments to BertTokenizerFast's [`~BertTokenizerFast.__call__`] if `text` is not `None` to encode
        the text. To prepare the image(s), this method forwards the `images` and `kwrags` arguments to
        CLIPImageProcessor's [`~CLIPImageProcessor.__call__`] if `images` is not `None`. Please refer to the doctsring
        of the above two methods for more information.

        Args:
            images (`PIL.Image.Image`, `np.ndarray`, `torch.Tensor`, `List[PIL.Image.Image]`, `List[np.ndarray]`, `List[torch.Tensor]`):
                The image or batch of images to be prepared. Each image can be a PIL image, NumPy array or PyTorch
                tensor. Both channels-first and channels-last formats are supported.
            text (`TextInput`, `PreTokenizedInput`, `List[TextInput]`, `List[PreTokenizedInput]`, *optional*):
                The sequence or batch of sequences to be encoded. Each sequence can be a string or a list of strings
                (pretokenized string). If the sequences are provided as list of strings (pretokenized), you must set
                `is_split_into_words=True` (to lift the ambiguity with a batch of sequences).

            return_tensors (`str` or [`~utils.TensorType`], *optional*):
                If set, will return tensors of a particular framework. Acceptable values are:

                - `'tf'`: Return TensorFlow `tf.constant` objects.
                - `'pt'`: Return PyTorch `torch.Tensor` objects.
                - `'np'`: Return NumPy `np.ndarray` objects.
                - `'jax'`: Return JAX `jnp.ndarray` objects.

        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`.
            - **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`.
        legacyTa5  Legacy behavior is being used. The current behavior will be deprecated in version 5.0.0. In the new behavior, if both images and text are provided, the last token (EOS token) of the input_ids and attention_mask tensors will be removed. To test the new behavior, set `legacy=False`as a processor call argument.Nz?You have to specify either text or images. Both cannot be none.tokenizer_init_kwargstext_kwargsimages_kwargs	input_idsattention_maskcommon_kwargsreturn_tensors)datatensor_type)poploggerwarning_once
ValueErrorr   _merge_kwargsr   r   init_kwargsupdater   r   get)r$   r&   r'   audiovideosr(   r+   output_kwargsr4   text_featuresimage_featuress              r   __call__zGitProcessor.__call__9   sB   R Hd+\ <FN^__ 9F***
"&.."<"<
 
 *DNN4P=3OPMKK&1T11&[M/<Z[NKK'$($5a"f$=[!)-.>)?3B3)G%&=3Q3U3UVf3ghhr   c                 :     | j                   j                  |i |S )z
        This method forwards all its arguments to BertTokenizerFast's [`~PreTrainedTokenizer.batch_decode`]. Please
        refer to the docstring of this method for more information.
        )r   batch_decoder$   argsr(   s      r   rE   zGitProcessor.batch_decode   s     
 +t~~**D;F;;r   c                 :     | j                   j                  |i |S )z
        This method forwards all its arguments to BertTokenizerFast's [`~PreTrainedTokenizer.decode`]. Please refer to
        the docstring of this method for more information.
        )r   decoderF   s      r   rI   zGitProcessor.decode   s     
 %t~~$$d5f55r   c                 
    g dS )N)r/   r1   pixel_valuesr   )r$   s    r   model_input_nameszGitProcessor.model_input_names   s    >>r   )NNNN)r   r   r   __doc__
attributesimage_processor_classtokenizer_classr"   r   r   r   r   r   r   r   r   r   rC   rE   rI   propertyrL   __classcell__)r%   s   @r   r   r   #   s     $[1J0%O6 (,hlIi$Ii uY(94	?DQbLccdeIi +,Ii 
IiV<6 ? ?r   r   N)rM   typingr   r   r   feature_extraction_utilsr   image_utilsr   processing_utilsr	   r
   r   r   tokenization_utils_baser   r   utilsr   r   
get_loggerr   r7   r   r   r   r   <module>rZ      sU    ) ( 4 % k k C )  
		H	%q?> q?r   