

import argparse

import torch

from transformers import FunnelBaseModel, FunnelConfig, FunnelModel, load_tf_weights_in_funnel
from transformers.utils import logging


logging.set_verbosity_info()

def       a__					(		UpperCAmelCase							:      Dict    ,			UpperCAmelCase							:      Optional[Any]    ,			UpperCAmelCase							:      List[Any]    ,			UpperCAmelCase							:      Tuple      )  ->						Optional[Any]:
  # Initialise PyTorch model
  UpperCAmelCase	:							str						=			FunnelConfig.from_json_file(UpperCAmelCase      )
  print(f'''Building PyTorch model from configuration: {config}'''      )
  UpperCAmelCase	:							List[str]						=			FunnelBaseModel(UpperCAmelCase      ) if base_model else FunnelModel(UpperCAmelCase      )

  # Load weights from tf checkpoint
  load_tf_weights_in_funnel(UpperCAmelCase    ,			UpperCAmelCase    ,			UpperCAmelCase      )

  # Save pytorch-model
  print(f'''Save PyTorch model to {pytorch_dump_path}'''      )
  torch.save(model.state_dict()    ,			UpperCAmelCase      )


if __name__ == "__main__":
     _lowerCamelCase    :       Union[str, Any]        =							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 model. \nThis specifies the model architecture.",
     )
     parser.add_argument(
         "--pytorch_dump_path", default=None, type=str, required=True, help="Path to the output PyTorch model."
     )
     parser.add_argument(
         "--base_model", action="store_true", help="Whether you want just the base model (no decoder) or not."
     )
     _lowerCamelCase    :       List[str]        =							parser.parse_args()
     convert_tf_checkpoint_to_pytorch(
         args.tf_checkpoint_path, args.config_file, args.pytorch_dump_path, args.base_model
     )








def       a__					(		UpperCAmelCase							:      int    ,			UpperCAmelCase							:      int      )  ->						str:
  if a < 0 or b < 0:
    raise ValueError('''the value of both inputs must be positive'''      )
  UpperCAmelCase	:							List[Any]						=			str(bin(UpperCAmelCase      )      )[2:]  # remove the leading "0b"
  UpperCAmelCase	:							List[str]						=			str(bin(UpperCAmelCase      )      )[2:]
  UpperCAmelCase	:							Optional[Any]						=			max(len(UpperCAmelCase      )    ,			len(UpperCAmelCase      )      )
  return "0b" + "".join(
      str(int('''1''' in (char_a, char_b)      )      )
      for char_a, char_b in zip(a_binary.zfill(UpperCAmelCase      )    ,			b_binary.zfill(UpperCAmelCase      )      )      )


if __name__ == "__main__":
     import doctest

     doctest.testmod()





