from dataclasses import asdict, dataclass
from typing import Optional

from ...configuration_utils import PretrainedConfig
from ...utils import logging


__lowerCamelCase :      Dict										=				logging.get_logger(__name__)

# TODO Update this
__lowerCamelCase :      Any										=				{
    """facebook/esm-1b""": """https://huggingface.co/facebook/esm-1b/resolve/main/config.json""",
    # See all ESM models at https://huggingface.co/models?filter=esm
}



class 							SCREAMING_SNAKE_CASE__						(    UpperCamelCase_						):





					"""simple docstring"""






					a_     =		"esm"



					def __init__( self					:  Dict							,		__A					:  Optional[Any]=None							,		__A					:  str=None							,		__A					:  Optional[Any]=None							,		__A					:  List[Any]=7_6_8							,		__A					:  Optional[int]=1_2							,		__A					:  Optional[int]=1_2							,		__A					:  List[Any]=3_0_7_2							,		__A					:  Any=0.1							,		__A					:  Union[str, Any]=0.1							,		__A					:  Optional[int]=1_0_2_6							,		__A					:  Any=0.0_2							,		__A					:  List[str]=1e-1_2							,		__A					:  Tuple="absolute"							,		__A					:  List[str]=True							,		__A					:  Optional[int]=None							,		__A					:  Dict=False							,		__A					:  List[str]=False							,		__A					:  Any=None							,		__A					:  Dict=None							,		**__A					:  Tuple							,		):
						super().__init__(pad_token_id=__A							,		mask_token_id=__A							,		**__A	)

						snake_case__			:				Any       =  vocab_size
						snake_case__			:				List[Any]       =  hidden_size
						snake_case__			:				Any       =  num_hidden_layers
						snake_case__			:				Union[str, Any]       =  num_attention_heads
						snake_case__			:				Dict       =  intermediate_size
						snake_case__			:				Any       =  hidden_dropout_prob
						snake_case__			:				Optional[Any]       =  attention_probs_dropout_prob
						snake_case__			:				int       =  max_position_embeddings
						snake_case__			:				List[str]       =  initializer_range
						snake_case__			:				List[str]       =  layer_norm_eps
						snake_case__			:				Optional[Any]       =  position_embedding_type
						snake_case__			:				Union[str, Any]       =  use_cache
						snake_case__			:				Optional[Any]       =  emb_layer_norm_before
						snake_case__			:				Optional[Any]       =  token_dropout
						snake_case__			:				int       =  is_folding_model
						if is_folding_model:
							if esmfold_config is None:
								logger.info("No esmfold_config supplied for folding model, using default values."	)
								snake_case__			:				Any       =  EsmFoldConfig()
							elif isinstance(__A							,		__A	):
								snake_case__			:				int       =  EsmFoldConfig(**__A	)
							snake_case__			:				List[str]       =  esmfold_config
							if vocab_list is None:
								logger.warning("No vocab_list supplied for folding model, assuming the ESM-2 vocabulary!"	)
								snake_case__			:				List[Any]       =  get_default_vocab_list()
							else:
								snake_case__			:				Dict       =  vocab_list
						else:
							snake_case__			:				Any       =  None
							snake_case__			:				Dict       =  None
						if self.esmfold_config is not None and getattr(self.esmfold_config							,		"use_esm_attn_map"							,		__A	):
							raise ValueError("The HuggingFace port of ESMFold does not support use_esm_attn_map at this time!"	)






					def 	_lowercase					( self					:  Union[str, Any]	):
						snake_case__			:				List[str]       =  super().to_dict()
						if isinstance(self.esmfold_config							,		__A	):
							snake_case__			:				Optional[int]       =  self.esmfold_config.to_dict()
						return output



@dataclass
class 							SCREAMING_SNAKE_CASE__						:





					"""simple docstring"""






					a_     =		None
					a_     =		True
					a_     =		False
					a_     =		False
					a_     =		False
					a_     =		0

					a_     =		True
					a_     =		False

					a_     =		1_2_8
					a_     =		None



					def 	_lowercase					( self					:  Tuple	):
						if self.trunk is None:
							snake_case__			:				Tuple       =  TrunkConfig()
						elif isinstance(self.trunk							,		__A	):
							snake_case__			:				str       =  TrunkConfig(**self.trunk	)






					def 	_lowercase					( self					:  Dict	):
						snake_case__			:				int       =  asdict(self	)
						snake_case__			:				Union[str, Any]       =  self.trunk.to_dict()
						return output



@dataclass
class 							SCREAMING_SNAKE_CASE__						:





					"""simple docstring"""






					a_     =		4_8
					a_     =		1_0_2_4
					a_     =		1_2_8
					a_     =		3_2
					a_     =		3_2
					a_     =		3_2
					a_     =		0
					a_     =		0
					a_     =		False
					a_     =		4
					a_     =		1_2_8
					a_     =		None



					def 	_lowercase					( self					:  str	):
						if self.structure_module is None:
							snake_case__			:				Dict       =  StructureModuleConfig()
						elif isinstance(self.structure_module							,		__A	):
							snake_case__			:				int       =  StructureModuleConfig(**self.structure_module	)

						if self.max_recycles <= 0:
							raise ValueError(f'''`max_recycles` should be positive, got {self.max_recycles}.'''	)
						if self.sequence_state_dim % self.sequence_state_dim != 0:
							raise ValueError(
							    "`sequence_state_dim` should be a round multiple of `sequence_state_dim`, got"
							    f''' {self.sequence_state_dim} and {self.sequence_state_dim}.'''	)
						if self.pairwise_state_dim % self.pairwise_state_dim != 0:
							raise ValueError(
							    "`pairwise_state_dim` should be a round multiple of `pairwise_state_dim`, got"
							    f''' {self.pairwise_state_dim} and {self.pairwise_state_dim}.'''	)

						snake_case__			:				Optional[Any]       =  self.sequence_state_dim // self.sequence_head_width
						snake_case__			:				Tuple       =  self.pairwise_state_dim // self.pairwise_head_width

						if self.sequence_state_dim != sequence_num_heads * self.sequence_head_width:
							raise ValueError(
							    "`sequence_state_dim` should be equal to `sequence_num_heads * sequence_head_width, got"
							    f''' {self.sequence_state_dim} != {sequence_num_heads} * {self.sequence_head_width}.'''	)
						if self.pairwise_state_dim != pairwise_num_heads * self.pairwise_head_width:
							raise ValueError(
							    "`pairwise_state_dim` should be equal to `pairwise_num_heads * pairwise_head_width, got"
							    f''' {self.pairwise_state_dim} != {pairwise_num_heads} * {self.pairwise_head_width}.'''	)
						if self.pairwise_state_dim % 2 != 0:
							raise ValueError(f'''`pairwise_state_dim` should be even, got {self.pairwise_state_dim}.'''	)

						if self.dropout >= 0.4:
							raise ValueError(f'''`dropout` should not be greater than 0.4, got {self.dropout}.'''	)






					def 	_lowercase					( self					:  int	):
						snake_case__			:				Optional[int]       =  asdict(self	)
						snake_case__			:				Tuple       =  self.structure_module.to_dict()
						return output



@dataclass
class 							SCREAMING_SNAKE_CASE__						:





					"""simple docstring"""






					a_     =		3_8_4
					a_     =		1_2_8
					a_     =		1_6
					a_     =		1_2_8
					a_     =		1_2
					a_     =		4
					a_     =		8
					a_     =		0.1
					a_     =		8
					a_     =		1
					a_     =		2
					a_     =		7
					a_     =		1_0
					a_     =		1E-8
					a_     =		1E5



					def 	_lowercase					( self					:  List[Any]	):
						return asdict(self	)







def 					SCREAMING_SNAKE_CASE    (			):
	return (
	    "<cls>",
	    "<pad>",
	    "<eos>",
	    "<unk>",
	    "L",
	    "A",
	    "G",
	    "V",
	    "S",
	    "E",
	    "R",
	    "T",
	    "I",
	    "D",
	    "P",
	    "K",
	    "Q",
	    "N",
	    "F",
	    "Y",
	    "M",
	    "H",
	    "W",
	    "C",
	    "X",
	    "B",
	    "U",
	    "Z",
	    "O",
	    ".",
	    "-",
	    "<null_1>",
	    "<mask>",
	)











import sys

__lowerCamelCase :      List[str]										=				(
    """73167176531330624919225119674426574742355349194934"""
    """96983520312774506326239578318016984801869478851843"""
    """85861560789112949495459501737958331952853208805511"""
    """12540698747158523863050715693290963295227443043557"""
    """66896648950445244523161731856403098711121722383113"""
    """62229893423380308135336276614282806444486645238749"""
    """30358907296290491560440772390713810515859307960866"""
    """70172427121883998797908792274921901699720888093776"""
    """65727333001053367881220235421809751254540594752243"""
    """52584907711670556013604839586446706324415722155397"""
    """53697817977846174064955149290862569321978468622482"""
    """83972241375657056057490261407972968652414535100474"""
    """82166370484403199890008895243450658541227588666881"""
    """16427171479924442928230863465674813919123162824586"""
    """17866458359124566529476545682848912883142607690042"""
    """24219022671055626321111109370544217506941658960408"""
    """07198403850962455444362981230987879927244284909188"""
    """84580156166097919133875499200524063689912560717606"""
    """05886116467109405077541002256983155200055935729725"""
    """71636269561882670428252483600823257530420752963450"""
)







def 					SCREAMING_SNAKE_CASE    (			snake_case_ :							str = N       ):
	snake_case__			:				Any       =  -sys.maxsize - 1
	for i in range(len(snake_case_       ) - 12       ):
		snake_case__			:				Tuple       =  1
		for j in range(13       ):
			product *= int(n[i + j]       )
		if product > largest_product:
			snake_case__			:				Dict       =  product
	return largest_product


if __name__ == "__main__":
	print(f"{solution() = }")



