




'''simple docstring'''



from pickle import UnpicklingError

import jax
import jax.numpy as jnp
import numpy as np
from flax.serialization import from_bytes
from flax.traverse_util import flatten_dict

from ..utils import logging


UpperCAmelCase_							:	Tuple	     =		logging.get_logger(__name__)







def       _UpperCamelCase			(_lowerCamelCase				:  int ,						_lowerCamelCase				:  List[str]						)-> Union[str, Any]:




     '''simple docstring'''





     try:
          with open(_lowerCamelCase ,						'''rb'''						) as flax_state_f:
               __snake_case            =	from_bytes(_lowerCamelCase ,						flax_state_f.read()						)
     except UnpicklingError as e:
          try:
               with open(_lowerCamelCase						) as f:
                    if f.read().startswith('''version'''						):
                         raise OSError(
                             '''You seem to have cloned a repository without having git-lfs installed. Please'''
                             ''' install git-lfs and run `git lfs install` followed by `git lfs pull` in the'''
                             ''' folder you cloned.'''						)
                    else:
                         raise ValueError from e
          except (UnicodeDecodeError, ValueError):
               raise EnvironmentError(f'''Unable to convert {model_file} to Flax deserializable object. '''						)

     return load_flax_weights_in_pytorch_model(_lowerCamelCase ,						_lowerCamelCase						)







def       _UpperCamelCase			(_lowerCamelCase				:  str ,						_lowerCamelCase				:  Union[str, Any]						)-> Any:




     '''simple docstring'''





     try:
          import torch  # noqa: F401
     except ImportError:
          logger.error(
              '''Loading Flax weights in PyTorch requires both PyTorch and Flax to be installed. Please see'''
              ''' https://pytorch.org/ and https://flax.readthedocs.io/en/latest/installation.html for installation'''
              ''' instructions.'''						)
          raise

     # check if we have bf16 weights
     __snake_case            =	flatten_dict(jax.tree_util.tree_map(lambda _lowerCamelCase						: x.dtype == jnp.bfloataa ,						_lowerCamelCase						)						).values()
     if any(_lowerCamelCase						):
          # convert all weights to fp32 if they are bf16 since torch.from_numpy can-not handle bf16

          # and bf16 is not fully supported in PT yet.
          logger.warning(
              '''Found ``bfloat16`` weights in Flax model. Casting all ``bfloat16`` weights to ``float32`` '''
              '''before loading those in PyTorch model.'''						)
          __snake_case            =	jax.tree_util.tree_map(
              lambda _lowerCamelCase						: params.astype(np.floataa						) if params.dtype == jnp.bfloataa else params ,						_lowerCamelCase						)

     __snake_case            =	''''''

     __snake_case            =	flatten_dict(_lowerCamelCase ,						sep='''.'''						)
     __snake_case            =	pt_model.state_dict()

     # keep track of unexpected & missing keys
     __snake_case            =	[]
     __snake_case            =	set(pt_model_dict.keys()						)

     for flax_key_tuple, flax_tensor in flax_state_dict.items():
          __snake_case            =	flax_key_tuple.split('''.'''						)

          if flax_key_tuple_array[-1] == "kernel" and flax_tensor.ndim == 4:
               __snake_case            =	flax_key_tuple_array[:-1] + ['''weight''']
               __snake_case            =	jnp.transpose(_lowerCamelCase ,						(3, 2, 0, 1)						)
          elif flax_key_tuple_array[-1] == "kernel":
               __snake_case            =	flax_key_tuple_array[:-1] + ['''weight''']
               __snake_case            =	flax_tensor.T
          elif flax_key_tuple_array[-1] == "scale":
               __snake_case            =	flax_key_tuple_array[:-1] + ['''weight''']

          if "time_embedding" not in flax_key_tuple_array:
               for i, flax_key_tuple_string in enumerate(_lowerCamelCase						):
                    __snake_case            =	(
                        flax_key_tuple_string.replace('''_0''' ,						'''.0'''						)
                        .replace('''_1''' ,						'''.1'''						)
                        .replace('''_2''' ,						'''.2'''						)
                        .replace('''_3''' ,						'''.3'''						)
                        .replace('''_4''' ,						'''.4'''						)
                        .replace('''_5''' ,						'''.5'''						)
                        .replace('''_6''' ,						'''.6'''						)
                        .replace('''_7''' ,						'''.7'''						)
                        .replace('''_8''' ,						'''.8'''						)
                        .replace('''_9''' ,						'''.9'''						)
                    )

          __snake_case            =	'''.'''.join(_lowerCamelCase						)

          if flax_key in pt_model_dict:
               if flax_tensor.shape != pt_model_dict[flax_key].shape:
                    raise ValueError(
                        f'''Flax checkpoint seems to be incorrect. Weight {flax_key_tuple} was expected '''
                        f'''to be of shape {pt_model_dict[flax_key].shape}, but is {flax_tensor.shape}.'''						)
               else:
                    # add weight to pytorch dict
                    __snake_case            =	np.asarray(_lowerCamelCase						) if not isinstance(_lowerCamelCase ,						np.ndarray						) else flax_tensor
                    __snake_case            =	torch.from_numpy(_lowerCamelCase						)
                    # remove from missing keys
                    missing_keys.remove(_lowerCamelCase						)
          else:
               # weight is not expected by PyTorch model
               unexpected_keys.append(_lowerCamelCase						)

     pt_model.load_state_dict(_lowerCamelCase						)

     # re-transform missing_keys to list
     __snake_case            =	list(_lowerCamelCase						)

     if len(_lowerCamelCase						) > 0:
          logger.warning(
              '''Some weights of the Flax model were not used when initializing the PyTorch model'''
              f''' {pt_model.__class__.__name__}: {unexpected_keys}\n- This IS expected if you are initializing'''
              f''' {pt_model.__class__.__name__} from a Flax model trained on another task or with another architecture'''
              ''' (e.g. initializing a BertForSequenceClassification model from a FlaxBertForPreTraining model).\n- This'''
              f''' IS NOT expected if you are initializing {pt_model.__class__.__name__} from a Flax model that you expect'''
              ''' to be exactly identical (e.g. initializing a BertForSequenceClassification model from a'''
              ''' FlaxBertForSequenceClassification model).'''						)
     if len(_lowerCamelCase						) > 0:
          logger.warning(
              f'''Some weights of {pt_model.__class__.__name__} were not initialized from the Flax model and are newly'''
              f''' initialized: {missing_keys}\nYou should probably TRAIN this model on a down-stream task to be able to'''
              ''' use it for predictions and inference.'''						)

     return pt_model













'''simple docstring'''

import inspect
import unittest

from transformers import RegNetConfig
from transformers.file_utils import cached_property, is_torch_available, is_vision_available
from transformers.testing_utils import require_torch, require_vision, slow, torch_device

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


if is_torch_available():
    import torch
    from torch import nn

    from transformers import RegNetForImageClassification, RegNetModel
    from transformers.models.regnet.modeling_regnet import REGNET_PRETRAINED_MODEL_ARCHIVE_LIST


if is_vision_available():
    from PIL import Image

    from transformers import AutoImageProcessor







class __a			:





   def __init__(       self					:      Any					,lowerCamelCase					:      Any					,lowerCamelCase					:      int=3					,lowerCamelCase					:      Optional[int]=32					,lowerCamelCase					:      Any=3					,lowerCamelCase					:      Dict=10					,lowerCamelCase					:      Union[str, Any]=[10, 20, 30, 40]					,lowerCamelCase					:      Any=[1, 1, 2, 1]					,lowerCamelCase					:      int=True					,lowerCamelCase					:      Optional[Any]=True					,lowerCamelCase					:      Dict="relu"					,lowerCamelCase					:      str=3					,lowerCamelCase					:      Union[str, Any]=None					,):

      '''simple docstring'''

      __SCREAMING_SNAKE_CASE   				=							parent
      __SCREAMING_SNAKE_CASE   				=							batch_size
      __SCREAMING_SNAKE_CASE   				=							image_size
      __SCREAMING_SNAKE_CASE   				=							num_channels
      __SCREAMING_SNAKE_CASE   				=							embeddings_size
      __SCREAMING_SNAKE_CASE   				=							hidden_sizes
      __SCREAMING_SNAKE_CASE   				=							depths
      __SCREAMING_SNAKE_CASE   				=							is_training
      __SCREAMING_SNAKE_CASE   				=							use_labels
      __SCREAMING_SNAKE_CASE   				=							hidden_act
      __SCREAMING_SNAKE_CASE   				=							num_labels
      __SCREAMING_SNAKE_CASE   				=							scope
      __SCREAMING_SNAKE_CASE   				=							len(lowerCamelCase     )





   def   UpperCAmelCase__  (       self					:      Union[str, Any]     ):

      '''simple docstring'''

      __SCREAMING_SNAKE_CASE   				=							floats_tensor([self.batch_size, self.num_channels, self.image_size, self.image_size]     )

      __SCREAMING_SNAKE_CASE   				=							None
      if self.use_labels:
         __SCREAMING_SNAKE_CASE   				=							ids_tensor([self.batch_size]					,self.num_labels     )

      __SCREAMING_SNAKE_CASE   				=							self.get_config()

      return config, pixel_values, labels





   def   UpperCAmelCase__  (       self					:      Any     ):

      '''simple docstring'''

      return RegNetConfig(
          num_channels=self.num_channels					,embeddings_size=self.embeddings_size					,hidden_sizes=self.hidden_sizes					,depths=self.depths					,hidden_act=self.hidden_act					,num_labels=self.num_labels					,)





   def   UpperCAmelCase__  (       self					:      Tuple					,lowerCamelCase					:      int					,lowerCamelCase					:      List[str]					,lowerCamelCase					:      Optional[int]     ):

      '''simple docstring'''

      __SCREAMING_SNAKE_CASE   				=							RegNetModel(config=lowerCamelCase     )
      model.to(lowerCamelCase     )
      model.eval()
      __SCREAMING_SNAKE_CASE   				=							model(lowerCamelCase     )
      # expected last hidden states: B, C, H // 32, W // 32
      self.parent.assertEqual(
          result.last_hidden_state.shape					,(self.batch_size, self.hidden_sizes[-1], self.image_size // 32, self.image_size // 32)					,)





   def   UpperCAmelCase__  (       self					:      List[Any]					,lowerCamelCase					:      int					,lowerCamelCase					:      Dict					,lowerCamelCase					:      Any     ):

      '''simple docstring'''

      __SCREAMING_SNAKE_CASE   				=							self.num_labels
      __SCREAMING_SNAKE_CASE   				=							RegNetForImageClassification(lowerCamelCase     )
      model.to(lowerCamelCase     )
      model.eval()
      __SCREAMING_SNAKE_CASE   				=							model(lowerCamelCase					,labels=lowerCamelCase     )
      self.parent.assertEqual(result.logits.shape					,(self.batch_size, self.num_labels)     )





   def   UpperCAmelCase__  (       self					:      Dict     ):

      '''simple docstring'''

      __SCREAMING_SNAKE_CASE   				=							self.prepare_config_and_inputs()
      __SCREAMING_SNAKE_CASE				,  __SCREAMING_SNAKE_CASE				,  __SCREAMING_SNAKE_CASE   				=							config_and_inputs
      __SCREAMING_SNAKE_CASE   				=							{"""pixel_values""": pixel_values}
      return config, inputs_dict







@require_torch
class __a			( _snake_case, _snake_case, unittest.TestCase      ):
   __UpperCamelCase :			List[str]						   =						(RegNetModel, RegNetForImageClassification) if is_torch_available() else ()
   __UpperCamelCase :			Optional[int]						   =						(
       {'feature-extraction': RegNetModel, 'image-classification': RegNetForImageClassification}
       if is_torch_available()
       else {}
   )

   __UpperCamelCase :			Dict						   =						False
   __UpperCamelCase :			str						   =						False
   __UpperCamelCase :			Any						   =						False
   __UpperCamelCase :			Tuple						   =						False





   def   UpperCAmelCase__  (       self					:      List[str]     ):

      '''simple docstring'''

      __SCREAMING_SNAKE_CASE   				=							RegNetModelTester(self     )
      __SCREAMING_SNAKE_CASE   				=							ConfigTester(self					,config_class=lowerCamelCase					,has_text_modality=lowerCamelCase     )





   def   UpperCAmelCase__  (       self					:      Optional[int]     ):

      '''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   UpperCAmelCase__  (       self					:      Any     ):

      '''simple docstring'''

      return





   @unittest.skip(reason="""RegNet does not use inputs_embeds"""     )
   def   UpperCAmelCase__  (       self					:      str     ):

      '''simple docstring'''

      pass





   @unittest.skip(reason="""RegNet does not support input and output embeddings"""     )
   def   UpperCAmelCase__  (       self					:      Tuple     ):

      '''simple docstring'''

      pass





   def   UpperCAmelCase__  (       self					:      Tuple     ):

      '''simple docstring'''

      __SCREAMING_SNAKE_CASE				,  __SCREAMING_SNAKE_CASE   				=							self.model_tester.prepare_config_and_inputs_for_common()

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

         __SCREAMING_SNAKE_CASE   				=							["""pixel_values"""]
         self.assertListEqual(arg_names[:1]					,lowerCamelCase     )





   def   UpperCAmelCase__  (       self					:      Any     ):

      '''simple docstring'''

      __SCREAMING_SNAKE_CASE   				=							self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_model(*lowerCamelCase     )





   def   UpperCAmelCase__  (       self					:      int     ):

      '''simple docstring'''

      __SCREAMING_SNAKE_CASE				,  __SCREAMING_SNAKE_CASE   				=							self.model_tester.prepare_config_and_inputs_for_common()

      for model_class in self.all_model_classes:
         __SCREAMING_SNAKE_CASE   				=							model_class(config=lowerCamelCase     )
         for name, module in model.named_modules():
            if isinstance(lowerCamelCase					,(nn.BatchNormad, nn.GroupNorm)     ):
               self.assertTrue(
                   torch.all(module.weight == 1     )					,msg=f"""Parameter {name} of model {model_class} seems not properly initialized"""					,)
               self.assertTrue(
                   torch.all(module.bias == 0     )					,msg=f"""Parameter {name} of model {model_class} seems not properly initialized"""					,)





   def   UpperCAmelCase__  (       self					:      Tuple     ):

      '''simple docstring'''

      def check_hidden_states_output(lowerCamelCase					:      Union[str, Any]					,lowerCamelCase					:      Tuple					,lowerCamelCase					:      Optional[int]     ):
         __SCREAMING_SNAKE_CASE   				=							model_class(lowerCamelCase     )
         model.to(lowerCamelCase     )
         model.eval()

         with torch.no_grad():
            __SCREAMING_SNAKE_CASE   				=							model(**self._prepare_for_class(lowerCamelCase					,lowerCamelCase     )     )

         __SCREAMING_SNAKE_CASE   				=							outputs.encoder_hidden_states if config.is_encoder_decoder else outputs.hidden_states

         __SCREAMING_SNAKE_CASE   				=							self.model_tester.num_stages
         self.assertEqual(len(lowerCamelCase     )					,expected_num_stages + 1     )

         # RegNet's feature maps are of shape (batch_size, num_channels, height, width)
         self.assertListEqual(
             list(hidden_states[0].shape[-2:]     )					,[self.model_tester.image_size // 2, self.model_tester.image_size // 2]					,)

      __SCREAMING_SNAKE_CASE				,  __SCREAMING_SNAKE_CASE   				=							self.model_tester.prepare_config_and_inputs_for_common()
      __SCREAMING_SNAKE_CASE   				=							["""basic""", """bottleneck"""]
      for model_class in self.all_model_classes:
         for layer_type in layers_type:
            __SCREAMING_SNAKE_CASE   				=							layer_type
            __SCREAMING_SNAKE_CASE   				=							True
            check_hidden_states_output(lowerCamelCase					,lowerCamelCase					,lowerCamelCase     )

            # check that output_hidden_states also work using config
            del inputs_dict["output_hidden_states"]
            __SCREAMING_SNAKE_CASE   				=							True

            check_hidden_states_output(lowerCamelCase					,lowerCamelCase					,lowerCamelCase     )





   def   UpperCAmelCase__  (       self					:      Dict     ):

      '''simple docstring'''

      __SCREAMING_SNAKE_CASE   				=							self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_for_image_classification(*lowerCamelCase     )





   @slow
   def   UpperCAmelCase__  (       self					:      Union[str, Any]     ):

      '''simple docstring'''

      for model_name in REGNET_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
         __SCREAMING_SNAKE_CASE   				=							RegNetModel.from_pretrained(lowerCamelCase     )
         self.assertIsNotNone(lowerCamelCase     )





def     __magic_name__							(				)    ->       List[Any]:

   '''simple docstring'''







   __SCREAMING_SNAKE_CASE   				=							Image.open("""./tests/fixtures/tests_samples/COCO/000000039769.png"""   )
   return image







@require_torch
@require_vision
class __a			( unittest.TestCase      ):





   @cached_property
   def   UpperCAmelCase__  (       self					:      List[str]     ):

      '''simple docstring'''

      return (
          AutoImageProcessor.from_pretrained(REGNET_PRETRAINED_MODEL_ARCHIVE_LIST[0]     )
          if is_vision_available()
          else None
      )





   @slow
   def   UpperCAmelCase__  (       self					:      int     ):

      '''simple docstring'''

      __SCREAMING_SNAKE_CASE   				=							RegNetForImageClassification.from_pretrained(REGNET_PRETRAINED_MODEL_ARCHIVE_LIST[0]     ).to(lowerCamelCase     )

      __SCREAMING_SNAKE_CASE   				=							self.default_image_processor
      __SCREAMING_SNAKE_CASE   				=							prepare_img()
      __SCREAMING_SNAKE_CASE   				=							image_processor(images=lowerCamelCase					,return_tensors="""pt"""     ).to(lowerCamelCase     )

      # forward pass
      with torch.no_grad():
         __SCREAMING_SNAKE_CASE   				=							model(**lowerCamelCase     )

      # verify the logits
      __SCREAMING_SNAKE_CASE   				=							torch.Size((1, 1000)     )
      self.assertEqual(outputs.logits.shape					,lowerCamelCase     )

      __SCREAMING_SNAKE_CASE   				=							torch.tensor([-0.4_180, -1.5_051, -3.4_836]     ).to(lowerCamelCase     )

      self.assertTrue(torch.allclose(outputs.logits[0, :3]					,lowerCamelCase					,atol=1E-4     )     )





