



'''simple docstring'''

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 					__lowerCamelCase					(				lowerCAmelCase_						,      lowerCAmelCase_						,      lowerCAmelCase_						,      lowerCAmelCase_  )      ->				Any:
		# Initialise PyTorch model
		_a					:				int				=							FunnelConfig.from_json_file(lowerCAmelCase_  )
		print(f"""Building PyTorch model from configuration: {config}"""  )
		_a					:				Optional[Any]				=							FunnelBaseModel(lowerCAmelCase_  ) if base_model else FunnelModel(lowerCAmelCase_  )

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

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


if __name__ == "__main__":
							__lowerCAmelCase						      =       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						      =       parser.parse_args()
							convert_tf_checkpoint_to_pytorch(
							    args.tf_checkpoint_path, args.config_file, args.pytorch_dump_path, args.base_model
							)









'''simple docstring'''

def 					__lowerCamelCase					(				lowerCAmelCase_  )      ->				list:
		if any(not isinstance(lowerCAmelCase_						,      lowerCAmelCase_  ) or x < 0 for x in sequence  ):
				raise TypeError('Sequence must be list of non-negative integers'  )
		for _ in range(len(lowerCAmelCase_  )  ):
				for i, (rod_upper, rod_lower) in enumerate(zip(lowerCAmelCase_						,      sequence[1:]  )  ):
						if rod_upper > rod_lower:
								sequence[i] -= rod_upper - rod_lower
								sequence[i + 1] += rod_upper - rod_lower
		return sequence


if __name__ == "__main__":
							assert bead_sort([5, 4, 3, 2, 1]) == [1, 2, 3, 4, 5]
							assert bead_sort([7, 9, 4, 3, 5]) == [3, 4, 5, 7, 9]




