

from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_flax_available,
    is_sentencepiece_available,
    is_tf_available,
    is_tokenizers_available,
    is_torch_available,
)


UpperCamelCase__	:   Dict								=     {
    "configuration_big_bird": ["BIG_BIRD_PRETRAINED_CONFIG_ARCHIVE_MAP", "BigBirdConfig", "BigBirdOnnxConfig"],
}

try:
       if not is_sentencepiece_available():
              raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
       pass
else:
       UpperCamelCase__	:   Dict								=     ["BigBirdTokenizer"]

try:
       if not is_tokenizers_available():
              raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
       pass
else:
       UpperCamelCase__	:   Dict								=     ["BigBirdTokenizerFast"]

try:
       if not is_torch_available():
              raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
       pass
else:
       UpperCamelCase__	:   int								=     [
           "BIG_BIRD_PRETRAINED_MODEL_ARCHIVE_LIST",
           "BigBirdForCausalLM",
           "BigBirdForMaskedLM",
           "BigBirdForMultipleChoice",
           "BigBirdForPreTraining",
           "BigBirdForQuestionAnswering",
           "BigBirdForSequenceClassification",
           "BigBirdForTokenClassification",
           "BigBirdLayer",
           "BigBirdModel",
           "BigBirdPreTrainedModel",
           "load_tf_weights_in_big_bird",
       ]

try:
       if not is_flax_available():
              raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
       pass
else:
       UpperCamelCase__	:   Any								=     [
           "FlaxBigBirdForCausalLM",
           "FlaxBigBirdForMaskedLM",
           "FlaxBigBirdForMultipleChoice",
           "FlaxBigBirdForPreTraining",
           "FlaxBigBirdForQuestionAnswering",
           "FlaxBigBirdForSequenceClassification",
           "FlaxBigBirdForTokenClassification",
           "FlaxBigBirdModel",
           "FlaxBigBirdPreTrainedModel",
       ]

if TYPE_CHECKING:
       from .configuration_big_bird import BIG_BIRD_PRETRAINED_CONFIG_ARCHIVE_MAP, BigBirdConfig, BigBirdOnnxConfig

       try:
              if not is_sentencepiece_available():
                     raise OptionalDependencyNotAvailable()
       except OptionalDependencyNotAvailable:
              pass
       else:
              from .tokenization_big_bird import BigBirdTokenizer

       try:
              if not is_tokenizers_available():
                     raise OptionalDependencyNotAvailable()
       except OptionalDependencyNotAvailable:
              pass
       else:
              from .tokenization_big_bird_fast import BigBirdTokenizerFast

       try:
              if not is_torch_available():
                     raise OptionalDependencyNotAvailable()
       except OptionalDependencyNotAvailable:
              pass
       else:
              from .modeling_big_bird import (
                  BIG_BIRD_PRETRAINED_MODEL_ARCHIVE_LIST,
                  BigBirdForCausalLM,
                  BigBirdForMaskedLM,
                  BigBirdForMultipleChoice,
                  BigBirdForPreTraining,
                  BigBirdForQuestionAnswering,
                  BigBirdForSequenceClassification,
                  BigBirdForTokenClassification,
                  BigBirdLayer,
                  BigBirdModel,
                  BigBirdPreTrainedModel,
                  load_tf_weights_in_big_bird,
              )

       try:
              if not is_flax_available():
                     raise OptionalDependencyNotAvailable()
       except OptionalDependencyNotAvailable:
              pass
       else:
              from .modeling_flax_big_bird import (
                  FlaxBigBirdForCausalLM,
                  FlaxBigBirdForMaskedLM,
                  FlaxBigBirdForMultipleChoice,
                  FlaxBigBirdForPreTraining,
                  FlaxBigBirdForQuestionAnswering,
                  FlaxBigBirdForSequenceClassification,
                  FlaxBigBirdForTokenClassification,
                  FlaxBigBirdModel,
                  FlaxBigBirdPreTrainedModel,
              )

else:
       import sys

       UpperCamelCase__	:   List[Any]								=     _LazyModule(__name__, globals()["__file__"], _import_structure, module_spec=__spec__)





from typing import Dict, List, Optional, Union

import numpy as np

from ...image_processing_utils import BaseImageProcessor, BatchFeature, get_size_dict
from ...image_transforms import normalize, rescale, resize, to_channel_dimension_format
from ...image_utils import (
    IMAGENET_STANDARD_MEAN,
    IMAGENET_STANDARD_STD,
    ChannelDimension,
    ImageInput,
    PILImageResampling,
    make_list_of_images,
    to_numpy_array,
    valid_images,
)
from ...utils import TensorType, logging


UpperCamelCase__	:   Union[str, Any]								=     logging.get_logger(__name__)



class    __snake_case	(     lowerCAmelCase__							):
  __lowerCAmelCase  :						Tuple    			=	['pixel_values']

  def __init__(       self    ,		_A = True    ,		_A = None    ,		_A = PILImageResampling.BILINEAR    ,		_A = True    ,		_A = 1 / 255    ,		_A = True    ,		_A = None    ,		_A = None    ,		**_A    ,		):
      super().__init__(**_A)
      SCREAMING_SNAKE_CASE_						=    size if size is not None else {'height': 224, 'width': 224}
      SCREAMING_SNAKE_CASE_						=    get_size_dict(_A)
      SCREAMING_SNAKE_CASE_						=    do_resize
      SCREAMING_SNAKE_CASE_						=    do_rescale
      SCREAMING_SNAKE_CASE_						=    do_normalize
      SCREAMING_SNAKE_CASE_						=    size
      SCREAMING_SNAKE_CASE_						=    resample
      SCREAMING_SNAKE_CASE_						=    rescale_factor
      SCREAMING_SNAKE_CASE_						=    image_mean if image_mean is not None else IMAGENET_STANDARD_MEAN
      SCREAMING_SNAKE_CASE_						=    image_std if image_std is not None else IMAGENET_STANDARD_STD

  def     lowerCAmelCase__  (       self    ,		_A    ,		_A    ,		_A = PILImageResampling.BILINEAR    ,		_A = None    ,		**_A    ,		):
      SCREAMING_SNAKE_CASE_						=    get_size_dict(_A)
      if "height" not in size or "width" not in size:
          raise ValueError(f"""The `size` dictionary must contain the keys `height` and `width`. Got {size.keys()}""")
      return resize(
          _A    ,		size=(size['height'], size['width'])    ,		resample=_A    ,		data_format=_A    ,		**_A)

  def     lowerCAmelCase__  (       self    ,		_A    ,		_A    ,		_A = None    ,		**_A):
      return rescale(_A    ,		scale=_A    ,		data_format=_A    ,		**_A)

  def     lowerCAmelCase__  (       self    ,		_A    ,		_A    ,		_A    ,		_A = None    ,		**_A    ,		):
      return normalize(_A    ,		mean=_A    ,		std=_A    ,		data_format=_A    ,		**_A)


  def     lowerCAmelCase__  (       self    ,		_A    ,		_A = None    ,		_A = None    ,		_A = None    ,		_A = None    ,		_A = None    ,		_A = None    ,		_A = None    ,		_A = None    ,		_A = None    ,		_A = ChannelDimension.FIRST    ,		**_A    ,		):
      SCREAMING_SNAKE_CASE_						=    do_resize if do_resize is not None else self.do_resize
      SCREAMING_SNAKE_CASE_						=    do_rescale if do_rescale is not None else self.do_rescale
      SCREAMING_SNAKE_CASE_						=    do_normalize if do_normalize is not None else self.do_normalize
      SCREAMING_SNAKE_CASE_						=    resample if resample is not None else self.resample
      SCREAMING_SNAKE_CASE_						=    rescale_factor if rescale_factor is not None else self.rescale_factor
      SCREAMING_SNAKE_CASE_						=    image_mean if image_mean is not None else self.image_mean
      SCREAMING_SNAKE_CASE_						=    image_std if image_std is not None else self.image_std

      SCREAMING_SNAKE_CASE_						=    size if size is not None else self.size
      SCREAMING_SNAKE_CASE_						=    get_size_dict(_A)

      SCREAMING_SNAKE_CASE_						=    make_list_of_images(_A)

      if not valid_images(_A):
          raise ValueError(
              'Invalid image type. Must be of type PIL.Image.Image, numpy.ndarray, '
              'torch.Tensor, tf.Tensor or jax.ndarray.')

      if do_resize and size is None:
          raise ValueError('Size must be specified if do_resize is True.')

      if do_rescale and rescale_factor is None:
          raise ValueError('Rescale factor must be specified if do_rescale is True.')

      # All transformations expect numpy arrays.
      SCREAMING_SNAKE_CASE_						=    [to_numpy_array(_A) for image in images]

      if do_resize:
          SCREAMING_SNAKE_CASE_						=    [self.resize(image=_A    ,		size=_A    ,		resample=_A) for image in images]

      if do_rescale:
          SCREAMING_SNAKE_CASE_						=    [self.rescale(image=_A    ,		scale=_A) for image in images]

      if do_normalize:
          SCREAMING_SNAKE_CASE_						=    [self.normalize(image=_A    ,		mean=_A    ,		std=_A) for image in images]

      SCREAMING_SNAKE_CASE_						=    [to_channel_dimension_format(_A    ,		_A) for image in images]

      SCREAMING_SNAKE_CASE_						=    {'pixel_values': images}
      return BatchFeature(data=_A    ,		tensor_type=_A)


