



"""simple docstring"""






from typing import List, Optional, Union

from ...image_utils import ImageInput
from ...processing_utils import ProcessorMixin
from ...tokenization_utils_base import BatchEncoding, PaddingStrategy, PreTokenizedInput, TextInput, TruncationStrategy
from ...utils import TensorType



class     UpperCAmelCase    (	__SCREAMING_SNAKE_CASE  ):
   A__		:	str           =  ['''image_processor''', '''tokenizer''']
   A__		:	str           =  '''BlipImageProcessor'''
   A__		:	Optional[Any]           =  '''AutoTokenizer'''



   def __init__(       self    :	Union[str, Any]							,       __lowerCamelCase    :	Tuple							,       __lowerCamelCase    :	str				):



     """simple docstring"""
     _snake_case   	=      False
     super().__init__(__lowerCamelCase							,       __lowerCamelCase				)
     _snake_case   	=      self.image_processor



   def __call__(       self    :	List[Any]							,       __lowerCamelCase    :	ImageInput = None							,       __lowerCamelCase    :	Union[TextInput, PreTokenizedInput, List[TextInput], List[PreTokenizedInput]] = None							,       __lowerCamelCase    :	bool = True							,       __lowerCamelCase    :	Union[bool, str, PaddingStrategy] = False							,       __lowerCamelCase    :	Union[bool, str, TruncationStrategy] = None							,       __lowerCamelCase    :	Optional[int] = None							,       __lowerCamelCase    :	int = 0							,       __lowerCamelCase    :	Optional[int] = None							,       __lowerCamelCase    :	Optional[bool] = None							,       __lowerCamelCase    :	bool = False							,       __lowerCamelCase    :	bool = False							,       __lowerCamelCase    :	bool = False							,       __lowerCamelCase    :	bool = False							,       __lowerCamelCase    :	bool = False							,       __lowerCamelCase    :	bool = True							,       __lowerCamelCase    :	Optional[Union[str, TensorType]] = None							,       **__lowerCamelCase    :	Dict							,       ):



     """simple docstring"""
     if images is None and text is None:
       raise ValueError('''You have to specify either images or text.'''				)

     # Get only text
     if images is None:
       _snake_case   	=      self.tokenizer
       _snake_case   	=      self.tokenizer(
           text=__lowerCamelCase							,       add_special_tokens=__lowerCamelCase							,       padding=__lowerCamelCase							,       truncation=__lowerCamelCase							,       max_length=__lowerCamelCase							,       stride=__lowerCamelCase							,       pad_to_multiple_of=__lowerCamelCase							,       return_attention_mask=__lowerCamelCase							,       return_overflowing_tokens=__lowerCamelCase							,       return_special_tokens_mask=__lowerCamelCase							,       return_offsets_mapping=__lowerCamelCase							,       return_token_type_ids=__lowerCamelCase							,       return_length=__lowerCamelCase							,       verbose=__lowerCamelCase							,       return_tensors=__lowerCamelCase							,       **__lowerCamelCase							,       )
       return text_encoding

     # add pixel_values
     _snake_case   	=      self.image_processor(__lowerCamelCase							,       return_tensors=__lowerCamelCase				)

     if text is not None:
       _snake_case   	=      self.tokenizer(
           text=__lowerCamelCase							,       add_special_tokens=__lowerCamelCase							,       padding=__lowerCamelCase							,       truncation=__lowerCamelCase							,       max_length=__lowerCamelCase							,       stride=__lowerCamelCase							,       pad_to_multiple_of=__lowerCamelCase							,       return_attention_mask=__lowerCamelCase							,       return_overflowing_tokens=__lowerCamelCase							,       return_special_tokens_mask=__lowerCamelCase							,       return_offsets_mapping=__lowerCamelCase							,       return_token_type_ids=__lowerCamelCase							,       return_length=__lowerCamelCase							,       verbose=__lowerCamelCase							,       return_tensors=__lowerCamelCase							,       **__lowerCamelCase							,       )
     else:
       _snake_case   	=      None

     if text_encoding is not None:
       encoding_image_processor.update(__lowerCamelCase				)

     return encoding_image_processor



   def    __UpperCAmelCase    (       self    :	List[Any]							,       *__lowerCamelCase    :	Tuple							,       **__lowerCamelCase    :	str				):



     """simple docstring"""
     return self.tokenizer.batch_decode(*__lowerCamelCase							,       **__lowerCamelCase				)



   def    __UpperCAmelCase    (       self    :	Optional[int]							,       *__lowerCamelCase    :	Optional[int]							,       **__lowerCamelCase    :	Union[str, Any]				):



     """simple docstring"""
     return self.tokenizer.decode(*__lowerCamelCase							,       **__lowerCamelCase				)





   @property
   # Copied from transformers.models.blip.processing_blip.BlipProcessor.model_input_names
   def    __UpperCAmelCase    (       self    :	Optional[int]				):



     """simple docstring"""
     _snake_case   	=      self.tokenizer.model_input_names
     _snake_case   	=      self.image_processor.model_input_names
     return list(dict.fromkeys(tokenizer_input_names + image_processor_input_names				)				)










"""simple docstring"""






import os
from pathlib import Path




def 			snake_case		(		)						->				Tuple:
  from torch.utils.cpp_extension import load

  _snake_case   	=      Path(lowerCAmelCase_	).resolve().parent.parent.parent / '''kernels''' / '''deformable_detr'''
  _snake_case   	=      [
      root / filename
      for filename in [
          '''vision.cpp''',
          os.path.join('''cpu'''  ,						'''ms_deform_attn_cpu.cpp'''	),
          os.path.join('''cuda'''  ,						'''ms_deform_attn_cuda.cu'''	),
      ]
  ]

  load(
      '''MultiScaleDeformableAttention'''  ,						lowerCAmelCase_  ,						with_cuda=lowerCAmelCase_  ,						extra_include_paths=[str(lowerCAmelCase_	)]  ,						extra_cflags=['''-DWITH_CUDA=1''']  ,						extra_cuda_cflags=[
          '''-DCUDA_HAS_FP16=1''',
          '''-D__CUDA_NO_HALF_OPERATORS__''',
          '''-D__CUDA_NO_HALF_CONVERSIONS__''',
          '''-D__CUDA_NO_HALF2_OPERATORS__''',
      ]  ,						)

  import MultiScaleDeformableAttention as MSDA

  return MSDA





