


'''simple docstring'''




import collections
import inspect
import unittest

from transformers import DinatConfig
from transformers.testing_utils import require_natten, require_torch, require_vision, slow, torch_device
from transformers.utils import cached_property, is_torch_available, is_vision_available

from ...test_backbone_common import BackboneTesterMixin
from ...test_configuration_common import ConfigTester
from ...test_modeling_common import ModelTesterMixin, _config_zero_init, floats_tensor, ids_tensor
from ...test_pipeline_mixin import PipelineTesterMixin


if is_torch_available():
				import torch
				from torch import nn

				from transformers import DinatBackbone, DinatForImageClassification, DinatModel
				from transformers.models.dinat.modeling_dinat import DINAT_PRETRAINED_MODEL_ARCHIVE_LIST

if is_vision_available():
				from PIL import Image

				from transformers import AutoImageProcessor





class _snake_case :
							"""simple docstring"""





							def __init__( self      ,					__A      ,					__A=13      ,					__A=64      ,					__A=4      ,					__A=3      ,					__A=16      ,					__A=[1, 2, 1]      ,					__A=[2, 4, 8]      ,					__A=3      ,					__A=[[3], [1, 2], [1]]      ,					__A=2.0      ,					__A=True      ,					__A=0.0      ,					__A=0.0      ,					__A=0.1      ,					__A="gelu"      ,					__A=True      ,					__A=0.02      ,					__A=1E-5      ,					__A=True      ,					__A=None      ,					__A=True      ,					__A=10      ,					__A=["stage1", "stage2"]      ,					__A=[1, 2]      ,					)  ->Dict:



											"""simple docstring"""







											__lowerCamelCase		:   Dict           =       parent
											__lowerCamelCase		:   Tuple           =       batch_size
											__lowerCamelCase		:   Dict           =       image_size
											__lowerCamelCase		:   Optional[int]           =       patch_size
											__lowerCamelCase		:   Optional[Any]           =       num_channels
											__lowerCamelCase		:   str           =       embed_dim
											__lowerCamelCase		:   int           =       depths
											__lowerCamelCase		:   List[str]           =       num_heads
											__lowerCamelCase		:   Tuple           =       kernel_size
											__lowerCamelCase		:   Tuple           =       dilations
											__lowerCamelCase		:   List[Any]           =       mlp_ratio
											__lowerCamelCase		:   Any           =       qkv_bias
											__lowerCamelCase		:   List[Any]           =       hidden_dropout_prob
											__lowerCamelCase		:   Union[str, Any]           =       attention_probs_dropout_prob
											__lowerCamelCase		:   int           =       drop_path_rate
											__lowerCamelCase		:   Any           =       hidden_act
											__lowerCamelCase		:   List[str]           =       patch_norm
											__lowerCamelCase		:   Tuple           =       layer_norm_eps
											__lowerCamelCase		:   List[str]           =       initializer_range
											__lowerCamelCase		:   Optional[int]           =       is_training
											__lowerCamelCase		:   List[str]           =       scope
											__lowerCamelCase		:   Tuple           =       use_labels
											__lowerCamelCase		:   Dict           =       num_labels
											__lowerCamelCase		:   Optional[Any]           =       out_features
											__lowerCamelCase		:   str           =       out_indices







							def 		__SCREAMING_SNAKE_CASE( self						)  ->List[Any]:



											"""simple docstring"""







											__lowerCamelCase		:   Optional[Any]           =       floats_tensor([self.batch_size, self.num_channels, self.image_size, self.image_size]						)

											__lowerCamelCase		:   Union[str, Any]           =       None
											if self.use_labels:
															__lowerCamelCase		:   List[str]           =       ids_tensor([self.batch_size]      ,					self.num_labels						)

											__lowerCamelCase		:   str           =       self.get_config()

											return config, pixel_values, labels







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



											"""simple docstring"""







											return DinatConfig(
											    num_labels=self.num_labels      ,					image_size=self.image_size      ,					patch_size=self.patch_size      ,					num_channels=self.num_channels      ,					embed_dim=self.embed_dim      ,					depths=self.depths      ,					num_heads=self.num_heads      ,					kernel_size=self.kernel_size      ,					dilations=self.dilations      ,					mlp_ratio=self.mlp_ratio      ,					qkv_bias=self.qkv_bias      ,					hidden_dropout_prob=self.hidden_dropout_prob      ,					attention_probs_dropout_prob=self.attention_probs_dropout_prob      ,					drop_path_rate=self.drop_path_rate      ,					hidden_act=self.hidden_act      ,					patch_norm=self.patch_norm      ,					layer_norm_eps=self.layer_norm_eps      ,					initializer_range=self.initializer_range      ,					out_features=self.out_features      ,					out_indices=self.out_indices      ,					)







							def 		__SCREAMING_SNAKE_CASE( self      ,					__A      ,					__A      ,					__A						)  ->int:



											"""simple docstring"""







											__lowerCamelCase		:   List[Any]           =       DinatModel(config=A_						)
											model.to(A_						)
											model.eval()
											__lowerCamelCase		:   Union[str, Any]           =       model(A_						)

											__lowerCamelCase		:   Any           =       (config.image_size // config.patch_size) // (2 ** (len(config.depths						) - 1))
											__lowerCamelCase		:   Tuple           =       int(config.embed_dim * 2 ** (len(config.depths						) - 1)						)

											self.parent.assertEqual(
											    result.last_hidden_state.shape      ,					(self.batch_size, expected_height, expected_width, expected_dim)						)







							def 		__SCREAMING_SNAKE_CASE( self      ,					__A      ,					__A      ,					__A						)  ->Any:



											"""simple docstring"""







											__lowerCamelCase		:   str           =       DinatForImageClassification(A_						)
											model.to(A_						)
											model.eval()
											__lowerCamelCase		:   List[Any]           =       model(A_      ,					labels=A_						)
											self.parent.assertEqual(result.logits.shape      ,					(self.batch_size, self.num_labels)						)

											# test greyscale images
											__lowerCamelCase		:   Tuple           =       1
											__lowerCamelCase		:   List[Any]           =       DinatForImageClassification(A_						)
											model.to(A_						)
											model.eval()

											__lowerCamelCase		:   Tuple           =       floats_tensor([self.batch_size, 1, self.image_size, self.image_size]						)
											__lowerCamelCase		:   List[str]           =       model(A_						)
											self.parent.assertEqual(result.logits.shape      ,					(self.batch_size, self.num_labels)						)







							def 		__SCREAMING_SNAKE_CASE( self      ,					__A      ,					__A      ,					__A						)  ->int:



											"""simple docstring"""







											__lowerCamelCase		:   int           =       DinatBackbone(config=A_						)
											model.to(A_						)
											model.eval()
											__lowerCamelCase		:   Tuple           =       model(A_						)

											# verify hidden states
											self.parent.assertEqual(len(result.feature_maps						)      ,					len(config.out_features						)						)
											self.parent.assertListEqual(list(result.feature_maps[0].shape						)      ,					[self.batch_size, model.channels[0], 16, 16]						)

											# verify channels
											self.parent.assertEqual(len(model.channels						)      ,					len(config.out_features						)						)

											# verify backbone works with out_features=None
											__lowerCamelCase		:   Union[str, Any]           =       None
											__lowerCamelCase		:   Any           =       DinatBackbone(config=A_						)
											model.to(A_						)
											model.eval()
											__lowerCamelCase		:   Dict           =       model(A_						)

											# verify feature maps
											self.parent.assertEqual(len(result.feature_maps						)      ,					1						)
											self.parent.assertListEqual(list(result.feature_maps[0].shape						)      ,					[self.batch_size, model.channels[-1], 4, 4]						)

											# verify channels
											self.parent.assertEqual(len(model.channels						)      ,					1						)







							def 		__SCREAMING_SNAKE_CASE( self						)  ->str:



											"""simple docstring"""







											__lowerCamelCase		:   List[str]           =       self.prepare_config_and_inputs()
											__lowerCamelCase    ,       __lowerCamelCase    ,       __lowerCamelCase		:   Optional[int]           =       config_and_inputs
											__lowerCamelCase		:   int           =       {"pixel_values": pixel_values}
											return config, inputs_dict





@require_natten
@require_torch
class _snake_case (			A_     , A_     , unittest.TestCase ):
							"""simple docstring"""





							__a				       =  (
							    (
							        DinatModel,
							        DinatForImageClassification,
							        DinatBackbone,
							    )
							    if is_torch_available()
							    else ()
							)
							__a				       =  (
							    {"feature-extraction": DinatModel, "image-classification": DinatForImageClassification}
							    if is_torch_available()
							    else {}
							)
							__a				       =  False

							__a				       =  False
							__a				       =  False
							__a				       =  False
							__a				       =  False







							def 		__SCREAMING_SNAKE_CASE( self						)  ->Optional[int]:



											"""simple docstring"""







											__lowerCamelCase		:   Tuple           =       DinatModelTester(self						)
											__lowerCamelCase		:   List[str]           =       ConfigTester(self      ,					config_class=A_      ,					embed_dim=37						)







							def 		__SCREAMING_SNAKE_CASE( self						)  ->Optional[Any]:



											"""simple docstring"""







											self.create_and_test_config_common_properties()
											self.config_tester.create_and_test_config_to_json_string()
											self.config_tester.create_and_test_config_to_json_file()
											self.config_tester.create_and_test_config_from_and_save_pretrained()
											self.config_tester.create_and_test_config_with_num_labels()
											self.config_tester.check_config_can_be_init_without_params()
											self.config_tester.check_config_arguments_init()







							def 		__SCREAMING_SNAKE_CASE( self						)  ->Optional[int]:



											"""simple docstring"""







											return







							def 		__SCREAMING_SNAKE_CASE( self						)  ->List[Any]:



											"""simple docstring"""







											__lowerCamelCase		:   List[Any]           =       self.model_tester.prepare_config_and_inputs()
											self.model_tester.create_and_check_model(*A_						)







							def 		__SCREAMING_SNAKE_CASE( self						)  ->Dict:



											"""simple docstring"""







											__lowerCamelCase		:   Tuple           =       self.model_tester.prepare_config_and_inputs()
											self.model_tester.create_and_check_for_image_classification(*A_						)







							def 		__SCREAMING_SNAKE_CASE( self						)  ->str:



											"""simple docstring"""







											__lowerCamelCase		:   Dict           =       self.model_tester.prepare_config_and_inputs()
											self.model_tester.create_and_check_backbone(*A_						)







							@unittest.skip(reason="Dinat does not use inputs_embeds"						)
							def 		__SCREAMING_SNAKE_CASE( self						)  ->Tuple:



											"""simple docstring"""







											pass







							@unittest.skip(reason="Dinat does not use feedforward chunking"						)
							def 		__SCREAMING_SNAKE_CASE( self						)  ->Optional[Any]:



											"""simple docstring"""







											pass







							def 		__SCREAMING_SNAKE_CASE( self						)  ->Union[str, Any]:



											"""simple docstring"""







											__lowerCamelCase    ,       __lowerCamelCase		:   List[str]           =       self.model_tester.prepare_config_and_inputs_for_common()

											for model_class in self.all_model_classes:
															__lowerCamelCase		:   List[str]           =       model_class(A_						)
															self.assertIsInstance(model.get_input_embeddings()      ,					(nn.Module)						)
															__lowerCamelCase		:   List[str]           =       model.get_output_embeddings()
															self.assertTrue(x is None or isinstance(A_      ,					nn.Linear						)						)







							def 		__SCREAMING_SNAKE_CASE( self						)  ->Optional[Any]:



											"""simple docstring"""







											__lowerCamelCase    ,       __lowerCamelCase		:   Tuple           =       self.model_tester.prepare_config_and_inputs_for_common()

											for model_class in self.all_model_classes:
															__lowerCamelCase		:   str           =       model_class(A_						)
															__lowerCamelCase		:   List[str]           =       inspect.signature(model.forward						)
															# signature.parameters is an OrderedDict => so arg_names order is deterministic
															__lowerCamelCase		:   Any           =       [*signature.parameters.keys()]

															__lowerCamelCase		:   Optional[int]           =       ["pixel_values"]
															self.assertListEqual(arg_names[:1]      ,					A_						)







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



											"""simple docstring"""







											self.skipTest("Dinat\'s attention operation is handled entirely by NATTEN."						)







							def 		__SCREAMING_SNAKE_CASE( self      ,					__A      ,					__A      ,					__A      ,					__A						)  ->List[str]:



											"""simple docstring"""







											__lowerCamelCase		:   Tuple           =       model_class(A_						)
											model.to(A_						)
											model.eval()

											with torch.no_grad():
															__lowerCamelCase		:   Dict           =       model(**self._prepare_for_class(A_      ,					A_						)						)

											__lowerCamelCase		:   Dict           =       outputs.hidden_states

											__lowerCamelCase		:   Any           =       getattr(
											    self.model_tester      ,					"expected_num_hidden_layers"      ,					len(self.model_tester.depths						) + 1						)
											self.assertEqual(len(A_						)      ,					A_						)

											# Dinat has a different seq_length
											__lowerCamelCase		:   Optional[int]           =       (
											    config.patch_size
											    if isinstance(config.patch_size      ,					collections.abc.Iterable						)
											    else (config.patch_size, config.patch_size)
											)

											__lowerCamelCase		:   Union[str, Any]           =       image_size[0] // patch_size[0]
											__lowerCamelCase		:   List[str]           =       image_size[1] // patch_size[1]

											self.assertListEqual(
											    list(hidden_states[0].shape[-3:]						)      ,					[height, width, self.model_tester.embed_dim]      ,					)

											if model_class.__name__ != "DinatBackbone":
															__lowerCamelCase		:   Tuple           =       outputs.reshaped_hidden_states
															self.assertEqual(len(A_						)      ,					A_						)

															__lowerCamelCase    ,       __lowerCamelCase    ,       __lowerCamelCase    ,       __lowerCamelCase		:   Any           =       reshaped_hidden_states[0].shape
															__lowerCamelCase		:   str           =       (
															    reshaped_hidden_states[0].view(A_      ,					A_      ,					A_      ,					A_						).permute(0      ,					2      ,					3      ,					1						)
															)
															self.assertListEqual(
															    list(reshaped_hidden_states.shape[-3:]						)      ,					[height, width, self.model_tester.embed_dim]      ,					)







							def 		__SCREAMING_SNAKE_CASE( self						)  ->Tuple:



											"""simple docstring"""







											__lowerCamelCase    ,       __lowerCamelCase		:   Dict           =       self.model_tester.prepare_config_and_inputs_for_common()

											__lowerCamelCase		:   Tuple           =       (
											    self.model_tester.image_size
											    if isinstance(self.model_tester.image_size      ,					collections.abc.Iterable						)
											    else (self.model_tester.image_size, self.model_tester.image_size)
											)

											for model_class in self.all_model_classes:
															__lowerCamelCase		:   Union[str, Any]           =       True
															self.check_hidden_states_output(A_      ,					A_      ,					A_      ,					A_						)

															# check that output_hidden_states also work using config
															del inputs_dict["output_hidden_states"]
															__lowerCamelCase		:   int           =       True

															self.check_hidden_states_output(A_      ,					A_      ,					A_      ,					A_						)







							@slow
							def 		__SCREAMING_SNAKE_CASE( self						)  ->Any:



											"""simple docstring"""







											for model_name in DINAT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
															__lowerCamelCase		:   Dict           =       DinatModel.from_pretrained(A_						)
															self.assertIsNotNone(A_						)







							def 		__SCREAMING_SNAKE_CASE( self						)  ->List[Any]:



											"""simple docstring"""







											__lowerCamelCase    ,       __lowerCamelCase		:   Optional[int]           =       self.model_tester.prepare_config_and_inputs_for_common()

											__lowerCamelCase		:   List[Any]           =       _config_zero_init(A_						)
											for model_class in self.all_model_classes:
															__lowerCamelCase		:   Tuple           =       model_class(config=A_						)
															for name, param in model.named_parameters():
																			if "embeddings" not in name and param.requires_grad:
																							self.assertIn(
																							    ((param.data.mean() * 1E9).round() / 1E9).item()      ,					[0.0, 1.0]      ,					msg=f'Parameter {name} of model {model_class} seems not properly initialized'      ,					)





@require_natten
@require_vision
@require_torch
class _snake_case (			unittest.TestCase ):
							"""simple docstring"""





							@cached_property
							def 		__SCREAMING_SNAKE_CASE( self						)  ->List[str]:



											"""simple docstring"""







											return AutoImageProcessor.from_pretrained("shi-labs/dinat-mini-in1k-224"						) if is_vision_available() else None







							@slow
							def 		__SCREAMING_SNAKE_CASE( self						)  ->Tuple:



											"""simple docstring"""







											__lowerCamelCase		:   Union[str, Any]           =       DinatForImageClassification.from_pretrained("shi-labs/dinat-mini-in1k-224"						).to(A_						)
											__lowerCamelCase		:   List[str]           =       self.default_image_processor

											__lowerCamelCase		:   str           =       Image.open("./tests/fixtures/tests_samples/COCO/000000039769.png"						)
											__lowerCamelCase		:   Optional[Any]           =       image_processor(images=A_      ,					return_tensors="pt"						).to(A_						)

											# forward pass
											with torch.no_grad():
															__lowerCamelCase		:   Tuple           =       model(**A_						)

											# verify the logits
											__lowerCamelCase		:   List[str]           =       torch.Size((1, 1000)						)
											self.assertEqual(outputs.logits.shape      ,					A_						)
											__lowerCamelCase		:   int           =       torch.tensor([-0.1545, -0.7667, 0.4642]						).to(A_						)
											self.assertTrue(torch.allclose(outputs.logits[0, :3]      ,					A_      ,					atol=1E-4						)						)





@require_torch
@require_natten
class _snake_case (			unittest.TestCase     , A_ ):
							"""simple docstring"""





							__a				       =  (DinatBackbone,) if is_torch_available() else ()
							__a				       =  DinatConfig







							def 		__SCREAMING_SNAKE_CASE( self						)  ->int:



											"""simple docstring"""







											__lowerCamelCase		:   str           =       DinatModelTester(self						)









import argparse
import json

from transformers import GPTNeoConfig, GPTNeoForCausalLM, load_tf_weights_in_gpt_neo
from transformers.utils import logging


logging.set_verbosity_info()

def 		_UpperCAmelCase							(     SCREAMING_SNAKE_CASE__     :   List[Any]     ,	SCREAMING_SNAKE_CASE__     :   Union[str, Any]     ,	SCREAMING_SNAKE_CASE__     :   Any							):
     # Initialise PyTorch model
     __UpperCamelCase       				=json.load(open(SCREAMING_SNAKE_CASE__     ,	'r'							)							)
     __UpperCamelCase       				=GPTNeoConfig(
         hidden_size=config_json['n_embd']     ,	num_layers=config_json['n_layer']     ,	num_heads=config_json['n_head']     ,	attention_types=config_json['attention_types']     ,	max_position_embeddings=config_json['n_positions']     ,	resid_dropout=config_json['res_dropout']     ,	embed_dropout=config_json['embed_dropout']     ,	attention_dropout=config_json['attn_dropout']     ,	)
     print(F'Building PyTorch model from configuration: {config}'							)
     __UpperCamelCase       				=GPTNeoForCausalLM(SCREAMING_SNAKE_CASE__							)

     # Load weights from tf checkpoint
     load_tf_weights_in_gpt_neo(SCREAMING_SNAKE_CASE__     ,	SCREAMING_SNAKE_CASE__     ,	SCREAMING_SNAKE_CASE__							)

     # Save pytorch-model
     print(F'Save PyTorch model to {pytorch_dump_path}'							)
     model.save_pretrained(SCREAMING_SNAKE_CASE__							)


if __name__ == "__main__":
   _A									=		argparse.ArgumentParser()
   # Required parameters
   parser.add_argument(
       '--tf_checkpoint_path', default=None, type=str, required=True, help='Path to the TensorFlow checkpoint path.'
   )
   parser.add_argument(
       '--config_file',
       default=None,
       type=str,
       required=True,
       help=(
           'The config json file corresponding to the pre-trained mesh-tf model. \n'
           'This specifies the model architecture.'
       ),
   )
   parser.add_argument(
       '--pytorch_dump_path', default=None, type=str, required=True, help='Path to the output PyTorch model.'
   )
   _A									=		parser.parse_args()
   convert_tf_checkpoint_to_pytorch(args.tf_checkpoint_path, args.config_file, args.pytorch_dump_path)





