

"""simple docstring"""






import copy
from collections import OrderedDict
from typing import Mapping

from packaging import version

from ...configuration_utils import PretrainedConfig
from ...onnx import OnnxConfig
from ...utils import logging
from ..auto import CONFIG_MAPPING


__lowerCamelCase										=		logging.get_logger(__name__)

__lowerCamelCase										=		{
    "microsoft/conditional-detr-resnet-50": (
        "https://huggingface.co/microsoft/conditional-detr-resnet-50/resolve/main/config.json"
    ),
}
class        _lowercase					(     __UpperCAmelCase     ):
     _lowerCamelCase     =       '''conditional_detr'''
     _lowerCamelCase     =       ['''past_key_values''']
     _lowerCamelCase     =       {
         '''hidden_size''': '''d_model''',
         '''num_attention_heads''': '''encoder_attention_heads''',
     }







     def __init__(      self ,						UpperCamelCase_=True ,						UpperCamelCase_=None ,						UpperCamelCase_=3 ,						UpperCamelCase_=300 ,						UpperCamelCase_=6 ,						UpperCamelCase_=2048 ,						UpperCamelCase_=8 ,						UpperCamelCase_=6 ,						UpperCamelCase_=2048 ,						UpperCamelCase_=8 ,						UpperCamelCase_=0.0 ,						UpperCamelCase_=0.0 ,						UpperCamelCase_=True ,						UpperCamelCase_="relu" ,						UpperCamelCase_=256 ,						UpperCamelCase_=0.1 ,						UpperCamelCase_=0.0 ,						UpperCamelCase_=0.0 ,						UpperCamelCase_=0.0_2 ,						UpperCamelCase_=1.0 ,						UpperCamelCase_=False ,						UpperCamelCase_="sine" ,						UpperCamelCase_="resnet50" ,						UpperCamelCase_=True ,						UpperCamelCase_=False ,						UpperCamelCase_=2 ,						UpperCamelCase_=5 ,						UpperCamelCase_=2 ,						UpperCamelCase_=1 ,						UpperCamelCase_=1 ,						UpperCamelCase_=2 ,						UpperCamelCase_=5 ,						UpperCamelCase_=2 ,						UpperCamelCase_=0.2_5 ,						**UpperCamelCase_ ,						):
      if backbone_config is not None and use_timm_backbone:
       raise ValueError('''You can\'t specify both `backbone_config` and `use_timm_backbone`.'''       )

      if not use_timm_backbone:
       if backbone_config is None:
        logger.info('''`backbone_config` is `None`. Initializing the config with the default `ResNet` backbone.'''       )
        __magic_name__     =      CONFIG_MAPPING['''resnet'''](out_features=['''stage4''']       )
       elif isinstance(UpperCamelCase_ ,						UpperCamelCase_       ):
        __magic_name__     =      backbone_config.get('''model_type'''       )
        __magic_name__     =      CONFIG_MAPPING[backbone_model_type]
        __magic_name__     =      config_class.from_dict(UpperCamelCase_       )

      __magic_name__     =      use_timm_backbone
      __magic_name__     =      backbone_config
      __magic_name__     =      num_channels
      __magic_name__     =      num_queries
      __magic_name__     =      d_model
      __magic_name__     =      encoder_ffn_dim
      __magic_name__     =      encoder_layers
      __magic_name__     =      encoder_attention_heads
      __magic_name__     =      decoder_ffn_dim
      __magic_name__     =      decoder_layers
      __magic_name__     =      decoder_attention_heads
      __magic_name__     =      dropout
      __magic_name__     =      attention_dropout
      __magic_name__     =      activation_dropout
      __magic_name__     =      activation_function
      __magic_name__     =      init_std
      __magic_name__     =      init_xavier_std
      __magic_name__     =      encoder_layerdrop
      __magic_name__     =      decoder_layerdrop
      __magic_name__     =      encoder_layers
      __magic_name__     =      auxiliary_loss
      __magic_name__     =      position_embedding_type
      __magic_name__     =      backbone
      __magic_name__     =      use_pretrained_backbone
      __magic_name__     =      dilation
      # Hungarian matcher
      __magic_name__     =      class_cost
      __magic_name__     =      bbox_cost
      __magic_name__     =      giou_cost
      # Loss coefficients
      __magic_name__     =      mask_loss_coefficient
      __magic_name__     =      dice_loss_coefficient
      __magic_name__     =      cls_loss_coefficient
      __magic_name__     =      bbox_loss_coefficient
      __magic_name__     =      giou_loss_coefficient
      __magic_name__     =      focal_alpha
      super().__init__(is_encoder_decoder=UpperCamelCase_ ,						**UpperCamelCase_       )







     @property
     def 	lowerCAmelCase__    (      self       ):
      return self.encoder_attention_heads







     @property
     def 	lowerCAmelCase__    (      self       ):
      return self.d_model







     def 	lowerCAmelCase__    (      self       ):
      __magic_name__     =      copy.deepcopy(self.__dict__       )
      if self.backbone_config is not None:
       __magic_name__     =      self.backbone_config.to_dict()
      __magic_name__     =      self.__class__.model_type
      return output


class        _lowercase					(     __UpperCAmelCase     ):
     _lowerCamelCase     =       version.parse('''1.11'''     )







     @property
     def 	lowerCAmelCase__    (      self       ):
      return OrderedDict(
          [
              ('''pixel_values''', {0: '''batch''', 1: '''num_channels''', 2: '''height''', 3: '''width'''}),
              ('''pixel_mask''', {0: '''batch'''}),
          ]       )







     @property
     def 	lowerCAmelCase__    (      self       ):
      return 1E-5







     @property
     def 	lowerCAmelCase__    (      self       ):
      return 12




"""simple docstring"""






import json
import os
import tempfile
import unittest
import unittest.mock as mock
from pathlib import Path

from requests.exceptions import HTTPError

from transformers.utils import (
    CONFIG_NAME,
    FLAX_WEIGHTS_NAME,
    TF2_WEIGHTS_NAME,
    TRANSFORMERS_CACHE,
    WEIGHTS_NAME,
    cached_file,
    get_file_from_repo,
    has_file,
)


__lowerCamelCase										=		"hf-internal-testing/tiny-random-bert"
__lowerCamelCase										=		os.path.join(TRANSFORMERS_CACHE, "models--hf-internal-testing--tiny-random-bert")
__lowerCamelCase										=		"9b8c223d42b2188cb49d29af482996f9d0f3e5a6"
class        _lowercase					(     unittest.TestCase     ):







     def 	lowerCAmelCase__    (      self       ):
      __magic_name__     =      cached_file(UpperCamelCase_ ,						UpperCamelCase_       )
      # Should have downloaded the file in here
      self.assertTrue(os.path.isdir(UpperCamelCase_       )       )
      # Cache should contain at least those three subfolders:
      for subfolder in ["blobs", "refs", "snapshots"]:
       self.assertTrue(os.path.isdir(os.path.join(UpperCamelCase_ ,						UpperCamelCase_       )       )       )
      with open(os.path.join(UpperCamelCase_ ,						'''refs''' ,						'''main'''       )       ) as f:
       __magic_name__     =      f.read()
      self.assertEqual(UpperCamelCase_ ,						os.path.join(UpperCamelCase_ ,						'''snapshots''' ,						UpperCamelCase_ ,						UpperCamelCase_       )       )
      self.assertTrue(os.path.isfile(UpperCamelCase_       )       )

      # File is cached at the same place the second time.
      __magic_name__     =      cached_file(UpperCamelCase_ ,						UpperCamelCase_       )
      self.assertEqual(UpperCamelCase_ ,						UpperCamelCase_       )

      # Using a specific revision to test the full commit hash.
      __magic_name__     =      cached_file(UpperCamelCase_ ,						UpperCamelCase_ ,						revision='''9b8c223'''       )
      self.assertEqual(UpperCamelCase_ ,						os.path.join(UpperCamelCase_ ,						'''snapshots''' ,						UpperCamelCase_ ,						UpperCamelCase_       )       )







     def 	lowerCAmelCase__    (      self       ):
      with self.assertRaisesRegex(UpperCamelCase_ ,						'''is not a valid model identifier'''       ):
       __magic_name__     =      cached_file('''tiny-random-bert''' ,						UpperCamelCase_       )

      with self.assertRaisesRegex(UpperCamelCase_ ,						'''is not a valid git identifier'''       ):
       __magic_name__     =      cached_file(UpperCamelCase_ ,						UpperCamelCase_ ,						revision='''aaaa'''       )

      with self.assertRaisesRegex(UpperCamelCase_ ,						'''does not appear to have a file named'''       ):
       __magic_name__     =      cached_file(UpperCamelCase_ ,						'''conf'''       )







     def 	lowerCAmelCase__    (      self       ):
      with self.assertRaisesRegex(UpperCamelCase_ ,						'''does not appear to have a file named'''       ):
       __magic_name__     =      cached_file(UpperCamelCase_ ,						'''conf'''       )

      with open(os.path.join(UpperCamelCase_ ,						'''refs''' ,						'''main'''       )       ) as f:
       __magic_name__     =      f.read()
      self.assertTrue(os.path.isfile(os.path.join(UpperCamelCase_ ,						'''.no_exist''' ,						UpperCamelCase_ ,						'''conf'''       )       )       )

      __magic_name__     =      cached_file(UpperCamelCase_ ,						'''conf''' ,						_raise_exceptions_for_missing_entries=UpperCamelCase_       )
      self.assertIsNone(UpperCamelCase_       )

      __magic_name__     =      cached_file(UpperCamelCase_ ,						'''conf''' ,						local_files_only=UpperCamelCase_ ,						_raise_exceptions_for_missing_entries=UpperCamelCase_       )
      self.assertIsNone(UpperCamelCase_       )

      __magic_name__     =      mock.Mock()
      __magic_name__     =      500
      __magic_name__     =      {}
      __magic_name__     =      HTTPError
      __magic_name__     =      {}

      # Under the mock environment we get a 500 error when trying to reach the tokenizer.
      with mock.patch('''requests.Session.request''' ,						return_value=UpperCamelCase_       ) as mock_head:
       __magic_name__     =      cached_file(UpperCamelCase_ ,						'''conf''' ,						_raise_exceptions_for_connection_errors=UpperCamelCase_       )
       self.assertIsNone(UpperCamelCase_       )
       # This check we did call the fake head request
       mock_head.assert_called()







     def 	lowerCAmelCase__    (      self       ):
      self.assertTrue(has_file('''hf-internal-testing/tiny-bert-pt-only''' ,						UpperCamelCase_       )       )
      self.assertFalse(has_file('''hf-internal-testing/tiny-bert-pt-only''' ,						UpperCamelCase_       )       )
      self.assertFalse(has_file('''hf-internal-testing/tiny-bert-pt-only''' ,						UpperCamelCase_       )       )







     def 	lowerCAmelCase__    (      self       ):
      # `get_file_from_repo` returns None if the file does not exist
      self.assertIsNone(get_file_from_repo('''bert-base-cased''' ,						'''ahah.txt'''       )       )

      # The function raises if the repository does not exist.
      with self.assertRaisesRegex(UpperCamelCase_ ,						'''is not a valid model identifier'''       ):
       get_file_from_repo('''bert-base-case''' ,						UpperCamelCase_       )

      # The function raises if the revision does not exist.
      with self.assertRaisesRegex(UpperCamelCase_ ,						'''is not a valid git identifier'''       ):
       get_file_from_repo('''bert-base-cased''' ,						UpperCamelCase_ ,						revision='''ahaha'''       )

      __magic_name__     =      get_file_from_repo('''bert-base-cased''' ,						UpperCamelCase_       )
      # The name is the cached name which is not very easy to test, so instead we load the content.
      __magic_name__     =      json.loads(open(UpperCamelCase_ ,						'''r'''       ).read()       )
      self.assertEqual(config['''hidden_size'''] ,						768       )







     def 	lowerCAmelCase__    (      self       ):
      with tempfile.TemporaryDirectory() as tmp_dir:
       __magic_name__     =      Path(UpperCamelCase_       ) / '''a.txt'''
       filename.touch()
       self.assertEqual(get_file_from_repo(UpperCamelCase_ ,						'''a.txt'''       ) ,						str(UpperCamelCase_       )       )

       self.assertIsNone(get_file_from_repo(UpperCamelCase_ ,						'''b.txt'''       )       )

