

'''simple docstring'''

from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_tf_available,
    is_torch_available,
    is_vision_available,
)


UpperCAmelCase							=					{
    '''configuration_sam''': [
        '''SAM_PRETRAINED_CONFIG_ARCHIVE_MAP''',
        '''SamConfig''',
        '''SamMaskDecoderConfig''',
        '''SamPromptEncoderConfig''',
        '''SamVisionConfig''',
    ],
    '''processing_sam''': ['''SamProcessor'''],
}


try:
       if not is_torch_available():
              raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
       pass
else:
       UpperCAmelCase							=					[
           '''SAM_PRETRAINED_MODEL_ARCHIVE_LIST''',
           '''SamModel''',
           '''SamPreTrainedModel''',
       ]
try:
       if not is_tf_available():
              raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
       pass
else:
       UpperCAmelCase							=					[
           '''TF_SAM_PRETRAINED_MODEL_ARCHIVE_LIST''',
           '''TFSamModel''',
           '''TFSamPreTrainedModel''',
       ]
try:
       if not is_vision_available():
              raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
       pass
else:
       UpperCAmelCase							=					['''SamImageProcessor''']


if TYPE_CHECKING:
       from .configuration_sam import (
           SAM_PRETRAINED_CONFIG_ARCHIVE_MAP,
           SamConfig,
           SamMaskDecoderConfig,
           SamPromptEncoderConfig,
           SamVisionConfig,
       )
       from .processing_sam import SamProcessor

       try:
              if not is_torch_available():
                     raise OptionalDependencyNotAvailable()
       except OptionalDependencyNotAvailable:
              pass
       else:
              from .modeling_sam import SAM_PRETRAINED_MODEL_ARCHIVE_LIST, SamModel, SamPreTrainedModel

       try:
              if not is_tf_available():
                     raise OptionalDependencyNotAvailable()
       except OptionalDependencyNotAvailable:
              pass
       else:
              from .modeling_tf_sam import TF_SAM_PRETRAINED_MODEL_ARCHIVE_LIST, TFSamModel, TFSamPreTrainedModel

       try:
              if not is_vision_available():
                     raise OptionalDependencyNotAvailable()
       except OptionalDependencyNotAvailable:
              pass
       else:
              from .image_processing_sam import SamImageProcessor

else:
       import sys

       UpperCAmelCase							=					_LazyModule(__name__, globals()['''__file__'''], _import_structure, module_spec=__spec__)




'''simple docstring'''

from __future__ import annotations

def 			__UpperCamelCase							(		lowercase__  :					list[int]	):






     '''simple docstring'''





     if not list_of_ints:
          return []

     if min(lowercase__	) < 0:
          raise ValueError('All numbers must be positive'	)

     __lowercase     						=max(len(bin(lowercase__	)[2:]	) for x in list_of_ints	)
     return _msd_radix_sort(lowercase__,   lowercase__	)

def 			__UpperCamelCase							(		lowercase__  :					list[int],   lowercase__  :					int	):






     '''simple docstring'''





     if bit_position == 0 or len(lowercase__	) in [0, 1]:
          return list_of_ints

     __lowercase     						=[]
     __lowercase     						=[]
     # Split numbers based on bit at bit_position from the right
     for number in list_of_ints:
          if (number >> (bit_position - 1)) & 1:
               # number has a one at bit bit_position
               ones.append(lowercase__	)
          else:
               # number has a zero at bit bit_position
               zeros.append(lowercase__	)

    # recursively split both lists further
     __lowercase     						=_msd_radix_sort(lowercase__,   bit_position - 1	)
     __lowercase     						=_msd_radix_sort(lowercase__,   bit_position - 1	)

     # recombine lists
     __lowercase     						=zeros
     res.extend(lowercase__	)

     return res

def 			__UpperCamelCase							(		lowercase__  :					list[int]	):






     '''simple docstring'''





     __lowercase     						=len(lowercase__	)
     if not list_of_ints or length == 1:
          return

     if min(lowercase__	) < 0:
          raise ValueError('All numbers must be positive'	)

     __lowercase     						=max(len(bin(lowercase__	)[2:]	) for x in list_of_ints	)
     _msd_radix_sort_inplace(lowercase__,   lowercase__,   0,   lowercase__	)

def 			__UpperCamelCase							(		lowercase__  :					list[int],   lowercase__  :					int,   lowercase__  :					int,   lowercase__  :					int	):






     '''simple docstring'''





     if bit_position == 0 or end_index - begin_index <= 1:
          return

     bit_position -= 1

     __lowercase     						=begin_index
     __lowercase     						=end_index - 1
     while i <= j:
          __lowercase     						=False
          if not (list_of_ints[i] >> bit_position) & 1:
               # found zero at the beginning
               i += 1
               __lowercase     						=True
          if (list_of_ints[j] >> bit_position) & 1:
               # found one at the end
               j -= 1
               __lowercase     						=True

          if changed:
               continue

          __lowercase						,       __lowercase     						=list_of_ints[j], list_of_ints[i]
          j -= 1
          if j != i:
               i += 1

     _msd_radix_sort_inplace(lowercase__,   lowercase__,   lowercase__,   lowercase__	)
     _msd_radix_sort_inplace(lowercase__,   lowercase__,   lowercase__,   lowercase__	)


if __name__ == "__main__":
       import doctest

       doctest.testmod()


