



import argparse
import os

import numpy as np
import tensorflow as tf
import torch

from transformers import BertModel







def    _snake_case (       __snake_case					,  __snake_case					,  __snake_case    )     ->     Any:






      '''simple docstring'''







      UpperCAmelCase_  :	Optional[int]				      =		("dense.weight", "attention.self.query", "attention.self.key", "attention.self.value")

      UpperCAmelCase_  :	List[Any]				      =		(
          ("layer.", "layer_"),
          ("word_embeddings.weight", "word_embeddings"),
          ("position_embeddings.weight", "position_embeddings"),
          ("token_type_embeddings.weight", "token_type_embeddings"),
          (".", "/"),
          ("LayerNorm/weight", "LayerNorm/gamma"),
          ("LayerNorm/bias", "LayerNorm/beta"),
          ("weight", "kernel"),
      )

      if not os.path.isdir(__snake_case    ):
            os.makedirs(__snake_case    )

      UpperCAmelCase_  :	Optional[Any]				      =		model.state_dict()

      def to_tf_var_name(__snake_case    ):
            for patt, repl in iter(__snake_case    ):
                  UpperCAmelCase_  :	List[str]				      =		name.replace(__snake_case					,  __snake_case    )
            return F"""bert/{name}"""

      def create_tf_var(__snake_case					,  __snake_case					,  __snake_case    ):
            UpperCAmelCase_  :	Optional[int]				      =		tf.dtypes.as_dtype(tensor.dtype    )
            UpperCAmelCase_  :	Union[str, Any]				      =		tf.get_variable(dtype=__snake_case					,  shape=tensor.shape					,  name=__snake_case					,  initializer=tf.zeros_initializer()    )
            session.run(tf.variables_initializer([tf_var]    )    )
            session.run(__snake_case    )
            return tf_var

      tf.reset_default_graph()
      with tf.Session() as session:
            for var_name in state_dict:
                  UpperCAmelCase_  :	Any				      =		to_tf_var_name(__snake_case    )
                  UpperCAmelCase_  :	Tuple				      =		state_dict[var_name].numpy()
                  if any(x in var_name for x in tensors_to_transpose    ):
                        UpperCAmelCase_  :	int				      =		torch_tensor.T
                  UpperCAmelCase_  :	Union[str, Any]				      =		create_tf_var(tensor=__snake_case					,  name=__snake_case					,  session=__snake_case    )
                  tf.keras.backend.set_value(__snake_case					,  __snake_case    )
                  UpperCAmelCase_  :	Any				      =		session.run(__snake_case    )
                  print(F"""Successfully created {tf_name}: {np.allclose(__snake_case					,  __snake_case    )}"""    )

            UpperCAmelCase_  :	Any				      =		tf.train.Saver(tf.trainable_variables()    )
            saver.save(__snake_case					,  os.path.join(__snake_case					,  model_name.replace("-"					,  "_"    ) + ".ckpt"    )    )







def    _snake_case (       __snake_case=None    )     ->     Optional[int]:






      '''simple docstring'''







      UpperCAmelCase_  :	str				      =		argparse.ArgumentParser()
      parser.add_argument("--model_name"					,  type=__snake_case					,  required=__snake_case					,  help="model name e.g. bert-base-uncased"    )
      parser.add_argument(
          "--cache_dir"					,  type=__snake_case					,  default=__snake_case					,  required=__snake_case					,  help="Directory containing pytorch model"    )
      parser.add_argument("--pytorch_model_path"					,  type=__snake_case					,  required=__snake_case					,  help="/path/to/<pytorch-model-name>.bin"    )
      parser.add_argument("--tf_cache_dir"					,  type=__snake_case					,  required=__snake_case					,  help="Directory in which to save tensorflow model"    )
      UpperCAmelCase_  :	Dict				      =		parser.parse_args(__snake_case    )

      UpperCAmelCase_  :	List[Any]				      =		BertModel.from_pretrained(
          pretrained_model_name_or_path=args.model_name					,  state_dict=torch.load(args.pytorch_model_path    )					,  cache_dir=args.cache_dir					,  )

      convert_pytorch_checkpoint_to_tf(model=__snake_case					,  ckpt_dir=args.tf_cache_dir					,  model_name=args.model_name    )


if __name__ == "__main__":
   main()





def    _snake_case (       __snake_case					,  __snake_case    )     ->     int:






      '''simple docstring'''







      return int((input_a, input_a).count(0    ) != 0    )







def    _snake_case (       )     ->     None:






      '''simple docstring'''







      assert nand_gate(0					,  0    ) == 1
      assert nand_gate(0					,  1    ) == 1
      assert nand_gate(1					,  0    ) == 1
      assert nand_gate(1					,  1    ) == 0


if __name__ == "__main__":
   print(nand_gate(0, 0))
   print(nand_gate(0, 1))
   print(nand_gate(1, 0))
   print(nand_gate(1, 1))
