

import unittest

from transformers.testing_utils import require_bsa
from transformers.utils import is_bsa_available

from ...test_feature_extraction_common import FeatureExtractionSavingTestMixin


if is_bsa_available():
					from transformers import MarkupLMFeatureExtractor






class        A_		(       unittest.TestCase				):
							def __init__(		self		:			str   ,SCREAMING_SNAKE_CASE__		:			str):
								__lowerCamelCase				:				Union[str, Any]					       = parent


							def     lowerCAmelCase     (		self		:			Union[str, Any]):
								return {}






def    SCREAMING_SNAKE_CASE__       (  )  ->     Dict:
	__lowerCamelCase				:				Tuple					       = '<HTML>\n\n    <HEAD>\n    <TITLE>sample document</TITLE>\n    </HEAD>\n\n    <BODY BGCOLOR="FFFFFF">\n    <HR>\n    <a href="http://google.com">Goog</a>\n    <H1>This is one header</H1>\n    <H2>This is a another Header</H2>\n    <P>Travel from\n        <P>\n        <B>SFO to JFK</B>\n        <BR>\n        <B><I>on May 2, 2015 at 2:00 pm. For details go to confirm.com </I></B>\n        <HR>\n        <div style="color:#0000FF">\n            <h3>Traveler <b> name </b> is\n            <p> John Doe </p>\n        </div>'

	__lowerCamelCase				:				Any					       = '\n    <!DOCTYPE html>\n    <html>\n    <body>\n\n    <h1>My First Heading</h1>\n    <p>My first paragraph.</p>\n\n    </body>\n    </html>\n    '

	return [html_string_a, html_string_a]






@require_bsa
class        A_		(       _UpperCAmelCase			,							unittest.TestCase				):
							_UpperCAmelCase    :  str						      =      MarkupLMFeatureExtractor if is_bsa_available() else None
							def     lowerCAmelCase     (		self		:			List[str]):
								__lowerCamelCase				:				Tuple					       = MarkupLMFeatureExtractionTester(self)
							@property
							def     lowerCAmelCase     (		self		:			Union[str, Any]):
								return self.feature_extract_tester.prepare_feat_extract_dict()


							def     lowerCAmelCase     (		self		:			str):
								__lowerCamelCase				:				Optional[Any]					       = self.feature_extraction_class()

								# Test not batched input
								__lowerCamelCase				:				str					       = get_html_strings()[0]
								__lowerCamelCase				:				List[Any]					       = feature_extractor(lowerCAmelCase__)

								# fmt: off
								__lowerCamelCase				:				str					       = [['sample document', 'Goog', 'This is one header', 'This is a another Header', 'Travel from', 'SFO to JFK', 'on May 2, 2015 at 2:00 pm. For details go to confirm.com', 'Traveler', 'name', 'is', 'John Doe']]
								__lowerCamelCase				:				str					       = [['/html/head/title', '/html/body/a', '/html/body/h1', '/html/body/h2', '/html/body/p', '/html/body/p/p/b[1]', '/html/body/p/p/b[2]/i', '/html/body/p/p/div/h3', '/html/body/p/p/div/h3/b', '/html/body/p/p/div/h3', '/html/body/p/p/div/h3/p']]
								# fmt: on

								self.assertEqual(encoding.nodes   ,lowerCAmelCase__)
								self.assertEqual(encoding.xpaths   ,lowerCAmelCase__)

								# Test batched
								__lowerCamelCase				:				List[str]					       = get_html_strings()
								__lowerCamelCase				:				List[Any]					       = feature_extractor(lowerCAmelCase__)

								# fmt: off
								__lowerCamelCase				:				List[str]					       = expected_nodes + [['My First Heading', 'My first paragraph.']]
								__lowerCamelCase				:				str					       = expected_xpaths + [['/html/body/h1', '/html/body/p']]

								self.assertEqual(len(encoding.nodes)   ,2)
								self.assertEqual(len(encoding.xpaths)   ,2)

								self.assertEqual(encoding.nodes   ,lowerCAmelCase__)
								self.assertEqual(encoding.xpaths   ,lowerCAmelCase__)





import copy

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


__a  :     int       =  logging.get_logger(__name__)

__a  :     str       =  {
    """ut/deta""": """https://huggingface.co/ut/deta/resolve/main/config.json""",
}




class    _UpperCamelCase      (						_UpperCAmelCase ):


			"""simple docstring"""






			__a  : Optional[int]			 =						'''deta'''
			__a  : Optional[int]			 =						{
			    '''hidden_size''': '''d_model''',
			    '''num_attention_heads''': '''encoder_attention_heads''',
			}





			def __init__(   self      ,   lowerCAmelCase__=None      ,   lowerCAmelCase__=9_00      ,   lowerCAmelCase__=20_48      ,   lowerCAmelCase__=6      ,   lowerCAmelCase__=20_48      ,   lowerCAmelCase__=8      ,   lowerCAmelCase__=6      ,   lowerCAmelCase__=10_24      ,   lowerCAmelCase__=8      ,   lowerCAmelCase__=0.0      ,   lowerCAmelCase__=True      ,   lowerCAmelCase__="relu"      ,   lowerCAmelCase__=2_56      ,   lowerCAmelCase__=0.1      ,   lowerCAmelCase__=0.0      ,   lowerCAmelCase__=0.0      ,   lowerCAmelCase__=0.02      ,   lowerCAmelCase__=1.0      ,   lowerCAmelCase__=True      ,   lowerCAmelCase__=False      ,   lowerCAmelCase__="sine"      ,   lowerCAmelCase__=5      ,   lowerCAmelCase__=4      ,   lowerCAmelCase__=4      ,   lowerCAmelCase__=True      ,   lowerCAmelCase__=3_00      ,   lowerCAmelCase__=True      ,   lowerCAmelCase__=True      ,   lowerCAmelCase__=1      ,   lowerCAmelCase__=5      ,   lowerCAmelCase__=2      ,   lowerCAmelCase__=1      ,   lowerCAmelCase__=1      ,   lowerCAmelCase__=5      ,   lowerCAmelCase__=2      ,   lowerCAmelCase__=0.1      ,   lowerCAmelCase__=0.25      ,   **lowerCAmelCase__      ,   )     ->					List[Any]:

							'''simple docstring'''


							if backbone_config is None:
											logger.info('''`backbone_config` is `None`. Initializing the config with the default `ResNet` backbone.'''						)
											__lowercase 			=							CONFIG_MAPPING['''resnet'''](out_features=['''stage2''', '''stage3''', '''stage4''']						)
							else:
											if isinstance(lowerCAmelCase__      ,   lowerCAmelCase__						):
															__lowercase 			=							backbone_config.pop('''model_type'''						)
															__lowercase 			=							CONFIG_MAPPING[backbone_model_type]
															__lowercase 			=							config_class.from_dict(lowerCAmelCase__						)

							__lowercase 			=							backbone_config
							__lowercase 			=							num_queries
							__lowercase 			=							max_position_embeddings
							__lowercase 			=							d_model
							__lowercase 			=							encoder_ffn_dim
							__lowercase 			=							encoder_layers
							__lowercase 			=							encoder_attention_heads
							__lowercase 			=							decoder_ffn_dim
							__lowercase 			=							decoder_layers
							__lowercase 			=							decoder_attention_heads
							__lowercase 			=							dropout
							__lowercase 			=							attention_dropout
							__lowercase 			=							activation_dropout
							__lowercase 			=							activation_function
							__lowercase 			=							init_std
							__lowercase 			=							init_xavier_std
							__lowercase 			=							encoder_layerdrop
							__lowercase 			=							auxiliary_loss
							__lowercase 			=							position_embedding_type
							# deformable attributes
							__lowercase 			=							num_feature_levels
							__lowercase 			=							encoder_n_points
							__lowercase 			=							decoder_n_points
							__lowercase 			=							two_stage
							__lowercase 			=							two_stage_num_proposals
							__lowercase 			=							with_box_refine
							__lowercase 			=							assign_first_stage
							if two_stage is True and with_box_refine is False:
											raise ValueError('''If two_stage is True, with_box_refine must be True.'''						)
							# Hungarian matcher
							__lowercase 			=							class_cost
							__lowercase 			=							bbox_cost
							__lowercase 			=							giou_cost
							# Loss coefficients
							__lowercase 			=							mask_loss_coefficient
							__lowercase 			=							dice_loss_coefficient
							__lowercase 			=							bbox_loss_coefficient
							__lowercase 			=							giou_loss_coefficient
							__lowercase 			=							eos_coefficient
							__lowercase 			=							focal_alpha
							super().__init__(is_encoder_decoder=lowerCAmelCase__      ,   **lowerCAmelCase__						)





			@property
			def        _SCREAMING_SNAKE_CASE			(   self						)     ->					int:

							'''simple docstring'''


							return self.encoder_attention_heads





			@property
			def        _SCREAMING_SNAKE_CASE			(   self						)     ->					int:

							'''simple docstring'''


							return self.d_model





			def        _SCREAMING_SNAKE_CASE			(   self						)     ->					List[str]:

							'''simple docstring'''


							__lowercase 			=							copy.deepcopy(self.__dict__						)
							__lowercase 			=							self.backbone_config.to_dict()
							__lowercase 			=							self.__class__.model_type
							return output