





import argparse

from transformers import BigBirdConfig, BigBirdForPreTraining, BigBirdForQuestionAnswering, load_tf_weights_in_big_bird
from transformers.utils import logging


logging.set_verbosity_info()






def     lowerCamelCase__			(__lowerCamelCase,       __lowerCamelCase,       __lowerCamelCase,       __lowerCamelCase	):
     # Initialise PyTorch model
     _SCREAMING_SNAKE_CASE       :	List[str]						    =							BigBirdConfig.from_json_file(__lowerCamelCase	)
     print(f"""Building PyTorch model from configuration: {config}"""	)

     if is_trivia_qa:
          _SCREAMING_SNAKE_CASE       :	int						    =							BigBirdForQuestionAnswering(__lowerCamelCase	)
     else:
          _SCREAMING_SNAKE_CASE       :	Any						    =							BigBirdForPreTraining(__lowerCamelCase	)

     # Load weights from tf checkpoint
     load_tf_weights_in_big_bird(__lowerCamelCase,       __lowerCamelCase,       is_trivia_qa=__lowerCamelCase	)

     # Save pytorch-model
     print(f"""Save PyTorch model to {pytorch_dump_path}"""	)
     model.save_pretrained(__lowerCamelCase	)


if __name__ == "__main__":
       UpperCamelCase__      =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(
           '--big_bird_config_file',
           default=None,
           type=str,
           required=True,
           help=(
               'The config json file corresponding to the pre-trained BERT 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.'
       )
       parser.add_argument(
           '--is_trivia_qa', action='store_true', help='Whether to convert a model with a trivia_qa head.'
       )
       UpperCamelCase__      =parser.parse_args()
       convert_tf_checkpoint_to_pytorch(
           args.tf_checkpoint_path, args.big_bird_config_file, args.pytorch_dump_path, args.is_trivia_qa
       )






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


if __name__ == "__main__":
       import doctest

       doctest.testmod()