


# Copyright 2023 The HuggingFace Team. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from typing import TYPE_CHECKING

# rely on isort to merge the imports
from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_torch_available, is_vision_available


_snake_case  :	Union[str, Any]			      =       {
    "configuration_vivit": ["VIVIT_PRETRAINED_CONFIG_ARCHIVE_MAP", "VivitConfig"],
}
try:
   if not is_vision_available():
      raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
   pass
else:
   _snake_case  :	str			      =       ["VivitImageProcessor"]


try:
   if not is_torch_available():
      raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
   pass
else:
   _snake_case  :	List[str]			      =       [
       "VIVIT_PRETRAINED_MODEL_ARCHIVE_LIST",
       "VivitModel",
       "VivitPreTrainedModel",
       "VivitForVideoClassification",
   ]


if TYPE_CHECKING:
   from .configuration_vivit import VIVIT_PRETRAINED_CONFIG_ARCHIVE_MAP, VivitConfig

   try:
      if not is_vision_available():
         raise OptionalDependencyNotAvailable()
   except OptionalDependencyNotAvailable:
      pass
   else:
      from .image_processing_vivit import VivitImageProcessor

   try:
      if not is_torch_available():
         raise OptionalDependencyNotAvailable()
   except OptionalDependencyNotAvailable:
      pass
   else:
      from .modeling_vivit import (
          VIVIT_PRETRAINED_MODEL_ARCHIVE_LIST,
          VivitForVideoClassification,
          VivitModel,
          VivitPreTrainedModel,
      )


else:
   import sys

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





def        lowerCAmelCase_  (      __lowerCamelCase							,			__lowerCamelCase			):
							if number < 0 or shift_amount < 0:
														raise ValueError("both inputs must be positive integers"			)

							__snake_case	:    Dict											=     str(bin(__lowerCamelCase			)			)
							binary_number += "0" * shift_amount
							return binary_number







def        lowerCAmelCase_  (      __lowerCamelCase							,			__lowerCamelCase			):
							if number < 0 or shift_amount < 0:
														raise ValueError("both inputs must be positive integers"			)

							__snake_case	:    List[str]											=     str(bin(__lowerCamelCase			)			)[2:]
							if shift_amount >= len(__lowerCamelCase			):
														return "0b0"
							__snake_case	:    Union[str, Any]											=     binary_number[: len(__lowerCamelCase			) - shift_amount]
							return "0b" + shifted_binary_number







def        lowerCAmelCase_  (      __lowerCamelCase							,			__lowerCamelCase			):
							if number >= 0:  # Get binary representation of positive number
														__snake_case	:    Optional[int]											=     "0" + str(bin(__lowerCamelCase			)			).strip("-"			)[2:]
							else:  # Get binary (2's complement) representation of negative number
														__snake_case	:    Tuple											=     len(bin(__lowerCamelCase			)[3:]			)  # Find 2's complement of number
														__snake_case	:    Any											=     bin(abs(__lowerCamelCase			) - (1 << binary_number_length)			)[3:]
														__snake_case	:    Optional[Any]											=     (
														    "1" + "0" * (binary_number_length - len(__lowerCamelCase			)) + binary_number
														)

							if shift_amount >= len(__lowerCamelCase			):
														return "0b" + binary_number[0] * len(__lowerCamelCase			)
							return (
							    "0b"
							    + binary_number[0] * shift_amount
							    + binary_number[: len(__lowerCamelCase			) - shift_amount]
							)


if __name__ == "__main__":
			import doctest

			doctest.testmod()

