



'''simple docstring'''

import argparse

from tax import checkpoints

from transformers import AutoConfig, FlaxAutoModelForSeqaSeqLM






def 						_snake_case						(   _SCREAMING_SNAKE_CASE	:		Union[str, Any]				,						_SCREAMING_SNAKE_CASE	:		Dict				,						_SCREAMING_SNAKE_CASE	:		Tuple				)     ->		Dict:







	"""simple docstring"""
	lowerCAmelCase       =      AutoConfig.from_pretrained(_lowerCAmelCase				)
	lowerCAmelCase       =      FlaxAutoModelForSeqaSeqLM.from_config(config=_lowerCAmelCase				)
	lowerCAmelCase       =      checkpoints.load_tax_checkpoint(_lowerCAmelCase				)

	lowerCAmelCase       =      "wi_0" in tax_model["target"]["encoder"]["layers_0"]["mlp"]

	if config.model_type == "t5":
		lowerCAmelCase       =      "SelfAttention"
	if config.model_type == "longt5" and config.encoder_attention_type == "local":
		lowerCAmelCase       =      "LocalSelfAttention"
	elif config.model_type == "longt5" and config.encoder_attention_type == "transient-global":
		lowerCAmelCase       =      "TransientGlobalSelfAttention"
	else:
		raise ValueError(
		    """Given config is expected to have `model_type='t5'`, or `model_type='longt5` with `encoder_attention_type`"""
		    """ attribute with a value from ['local', 'transient-global]."""				)

	# Encoder
	for layer_index in range(config.num_layers				):
		lowerCAmelCase       =      f'layers_{str(_lowerCAmelCase				)}'

		# Self-Attention
		lowerCAmelCase       =      tax_model["target"]["encoder"][layer_name]["attention"]["key"]["kernel"]
		lowerCAmelCase       =      tax_model["target"]["encoder"][layer_name]["attention"]["out"]["kernel"]
		lowerCAmelCase       =      tax_model["target"]["encoder"][layer_name]["attention"]["query"]["kernel"]
		lowerCAmelCase       =      tax_model["target"]["encoder"][layer_name]["attention"]["value"]["kernel"]

		# Global input layer norm
		if config.model_type == "longt5" and config.encoder_attention_type == "transient-global":
			lowerCAmelCase       =      tax_model["target"]["encoder"][layer_name]["attention"]["T5LayerNorm_0"]["scale"]

		# Layer Normalization
		lowerCAmelCase       =      tax_model["target"]["encoder"][layer_name]["pre_attention_layer_norm"]["scale"]

		if split_mlp_wi:
			lowerCAmelCase       =      tax_model["target"]["encoder"][layer_name]["mlp"]["wi_0"]["kernel"]
			lowerCAmelCase       =      tax_model["target"]["encoder"][layer_name]["mlp"]["wi_1"]["kernel"]
		else:
			lowerCAmelCase       =      tax_model["target"]["encoder"][layer_name]["mlp"]["wi"]["kernel"]

		lowerCAmelCase       =      tax_model["target"]["encoder"][layer_name]["mlp"]["wo"]["kernel"]

		# Layer Normalization
		lowerCAmelCase       =      tax_model["target"]["encoder"][layer_name]["pre_mlp_layer_norm"]["scale"]

		# Assigning
		lowerCAmelCase       =      flax_model.params["encoder"]["block"][str(_lowerCAmelCase				)]["layer"]
		lowerCAmelCase       =      tax_attention_key
		lowerCAmelCase       =      tax_attention_out
		lowerCAmelCase       =      tax_attention_query
		lowerCAmelCase       =      tax_attention_value

		lowerCAmelCase       =      tax_attention_layer_norm

		# Global input layer norm
		if config.model_type == "longt5" and config.encoder_attention_type == "transient-global":
			lowerCAmelCase       =      tax_global_layer_norm

		if split_mlp_wi:
			lowerCAmelCase       =      tax_mlp_wi_a
			lowerCAmelCase       =      tax_mlp_wi_a
		else:
			lowerCAmelCase       =      tax_mlp_wi

		lowerCAmelCase       =      tax_mlp_wo
		lowerCAmelCase       =      tax_mlp_layer_norm

		lowerCAmelCase       =      flax_model_encoder_layer_block

	# Only for layer 0:
	lowerCAmelCase       =      tax_model["target"]["encoder"]["relpos_bias"]["rel_embedding"].T
	lowerCAmelCase       =      tax_encoder_rel_embedding

	# Side/global relative position_bias + layer norm
	if config.model_type == "longt5" and config.encoder_attention_type == "transient-global":
		lowerCAmelCase       =      tax_model["target"]["encoder"]["side_relpos_bias"]["rel_embedding"].T
		lowerCAmelCase       =      tax_encoder_global_rel_embedding

	# Assigning
	lowerCAmelCase       =      tax_model["target"]["encoder"]["encoder_norm"]["scale"]
	lowerCAmelCase       =      tax_encoder_norm

	# Decoder
	for layer_index in range(config.num_layers				):
		lowerCAmelCase       =      f'layers_{str(_lowerCAmelCase				)}'

		# Self-Attention
		lowerCAmelCase       =      tax_model["target"]["decoder"][layer_name]["self_attention"]["key"]["kernel"]
		lowerCAmelCase       =      tax_model["target"]["decoder"][layer_name]["self_attention"]["out"]["kernel"]
		lowerCAmelCase       =      tax_model["target"]["decoder"][layer_name]["self_attention"]["query"]["kernel"]
		lowerCAmelCase       =      tax_model["target"]["decoder"][layer_name]["self_attention"]["value"]["kernel"]

		# Layer Normalization
		lowerCAmelCase       =      tax_model["target"]["decoder"][layer_name]["pre_self_attention_layer_norm"][
		    "scale"
		]

		# Encoder-Decoder-Attention
		lowerCAmelCase       =      tax_model["target"]["decoder"][layer_name]["encoder_decoder_attention"]
		lowerCAmelCase       =      tax_enc_dec_attention_module["key"]["kernel"]
		lowerCAmelCase       =      tax_enc_dec_attention_module["out"]["kernel"]
		lowerCAmelCase       =      tax_enc_dec_attention_module["query"]["kernel"]
		lowerCAmelCase       =      tax_enc_dec_attention_module["value"]["kernel"]

		# Layer Normalization
		lowerCAmelCase       =      tax_model["target"]["decoder"][layer_name]["pre_cross_attention_layer_norm"]["scale"]

		# MLP
		if split_mlp_wi:
			lowerCAmelCase       =      tax_model["target"]["decoder"][layer_name]["mlp"]["wi_0"]["kernel"]
			lowerCAmelCase       =      tax_model["target"]["decoder"][layer_name]["mlp"]["wi_1"]["kernel"]
		else:
			lowerCAmelCase       =      tax_model["target"]["decoder"][layer_name]["mlp"]["wi"]["kernel"]

		lowerCAmelCase       =      tax_model["target"]["decoder"][layer_name]["mlp"]["wo"]["kernel"]

		# Layer Normalization
		lowerCAmelCase       =      tax_model["target"]["decoder"][layer_name]["pre_mlp_layer_norm"]["scale"]

		# Assigning
		lowerCAmelCase       =      flax_model.params["decoder"]["block"][str(_lowerCAmelCase				)]["layer"]
		lowerCAmelCase       =      tax_attention_key
		lowerCAmelCase       =      tax_attention_out
		lowerCAmelCase       =      tax_attention_query
		lowerCAmelCase       =      tax_attention_value

		lowerCAmelCase       =      tax_pre_attention_layer_norm

		lowerCAmelCase       =      tax_enc_dec_attention_key
		lowerCAmelCase       =      tax_enc_dec_attention_out
		lowerCAmelCase       =      tax_enc_dec_attention_query
		lowerCAmelCase       =      tax_enc_dec_attention_value

		lowerCAmelCase       =      tax_cross_layer_norm

		if split_mlp_wi:
			lowerCAmelCase       =      tax_mlp_wi_a
			lowerCAmelCase       =      tax_mlp_wi_a
		else:
			lowerCAmelCase       =      tax_mlp_wi

		lowerCAmelCase       =      tax_mlp_wo

		lowerCAmelCase       =      txa_mlp_layer_norm

		lowerCAmelCase       =      flax_model_decoder_layer_block

	# Decoder Normalization
	lowerCAmelCase       =      tax_model["target"]["decoder"]["decoder_norm"]["scale"]
	lowerCAmelCase       =      txa_decoder_norm

	# Only for layer 0:
	lowerCAmelCase       =      tax_model["target"]["decoder"]["relpos_bias"]["rel_embedding"].T
	lowerCAmelCase       =      tax_decoder_rel_embedding

	# Token Embeddings
	lowerCAmelCase       =      tax_model["target"]["token_embedder"]["embedding"]
	lowerCAmelCase       =      txa_token_embeddings

	# LM Head (only in v1.1 and LongT5 checkpoints)
	if "logits_dense" in tax_model["target"]["decoder"]:
		lowerCAmelCase       =      tax_model["target"]["decoder"]["logits_dense"]["kernel"]

	flax_model.save_pretrained(_lowerCAmelCase				)
	print("""T5X Model was sucessfully converted!"""				)


if __name__ == "__main__":
				UpperCAmelCase      						=       argparse.ArgumentParser()
				# Required parameters
				parser.add_argument(
				    '--t5x_checkpoint_path', default=None, type=str, required=True, help='Path the T5X checkpoint.'
				)
				parser.add_argument('--config_name', default=None, type=str, required=True, help='Config name of LongT5/T5 model.')
				parser.add_argument(
				    '--flax_dump_folder_path', default=None, type=str, required=True, help='Path to the output FLAX model.'
				)
				UpperCAmelCase      						=       parser.parse_args()
				convert_tax_checkpoint_to_flax(args.tax_checkpoint_path, args.config_name, args.flax_dump_folder_path)






import os



def 						A_							(	)		->					Union[str, Any]:
 with open(os.path.dirname(_lowerCAmelCase	) + "/grid.txt"	) as f:
  UpperCamelCase      :   Optional[Any]			      =  []  # noqa: E741
  for _ in range(20	):
   l.append([int(_lowerCAmelCase	) for x in f.readline().split()]	)

  UpperCamelCase      :   str			      =  0

  # right
  for i in range(20	):
   for j in range(17	):
    UpperCamelCase      :   int			      =  l[i][j] * l[i][j + 1] * l[i][j + 2] * l[i][j + 3]
    if temp > maximum:
     UpperCamelCase      :   List[Any]			      =  temp

        # down
  for i in range(17	):
   for j in range(20	):
    UpperCamelCase      :   List[str]			      =  l[i][j] * l[i + 1][j] * l[i + 2][j] * l[i + 3][j]
    if temp > maximum:
     UpperCamelCase      :   List[str]			      =  temp

        # diagonal 1
  for i in range(17	):
   for j in range(17	):
    UpperCamelCase      :   Any			      =  l[i][j] * l[i + 1][j + 1] * l[i + 2][j + 2] * l[i + 3][j + 3]
    if temp > maximum:
     UpperCamelCase      :   Tuple			      =  temp

        # diagonal 2
  for i in range(17	):
   for j in range(3				,  20	):
    UpperCamelCase      :   Tuple			      =  l[i][j] * l[i + 1][j - 1] * l[i + 2][j - 2] * l[i + 3][j - 3]
    if temp > maximum:
     UpperCamelCase      :   List[Any]			      =  temp
  return maximum


if __name__ == "__main__":
    print(solution())
