





"""simple docstring"""




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


UpperCamelCase_	 =logging.get_logger(__name__)

UpperCamelCase_	 ={
    """openbmb/cpm-ant-10b""": """https://huggingface.co/openbmb/cpm-ant-10b/blob/main/config.json"""
    # See all CPMAnt models at https://huggingface.co/models?filter=cpmant
}




class 					_a		( _lowerCAmelCase							):
				UpperCamelCase								=       '''cpmant'''






				def __init__(					self						:       List[str],					lowerCAmelCase__						:       int = 3_0_7_2_0,					lowerCAmelCase__						:       int = 4_0_9_6,					lowerCAmelCase__						:       int = 3_2,					lowerCAmelCase__						:       int = 1_2_8,					lowerCAmelCase__						:       int = 1_0_2_4_0,					lowerCAmelCase__						:       int = 4_8,					lowerCAmelCase__						:       int = 0.0,					lowerCAmelCase__						:       int = 5_1_2,					lowerCAmelCase__						:       int = 2_0_4_8,					lowerCAmelCase__						:       int = 1e-6,					lowerCAmelCase__						:       float = 1.0,					lowerCAmelCase__						:       int = 3_2,					lowerCAmelCase__						:       int = 3_2,					lowerCAmelCase__						:       int = 3_2,					lowerCAmelCase__						:       bool = True,					**lowerCAmelCase__						:       Optional[Any],					)      -> Tuple:




										'''simple docstring'''



										super().__init__(**lowerCAmelCase__				)
										_UpperCamelCase     :   Optional[Any]      =       prompt_types
										_UpperCamelCase     :   Union[str, Any]      =       prompt_length
										_UpperCamelCase     :   str      =       segment_types
										_UpperCamelCase     :   List[str]      =       hidden_size
										_UpperCamelCase     :   List[str]      =       num_attention_heads
										_UpperCamelCase     :   Dict      =       dim_head
										_UpperCamelCase     :   Any      =       dim_ff
										_UpperCamelCase     :   int      =       num_hidden_layers
										_UpperCamelCase     :   List[Any]      =       position_bias_num_buckets
										_UpperCamelCase     :   List[Any]      =       position_bias_max_distance
										_UpperCamelCase     :   Any      =       dropout_p
										_UpperCamelCase     :   Optional[int]      =       eps
										_UpperCamelCase     :   int      =       use_cache
										_UpperCamelCase     :   Dict      =       vocab_size
										_UpperCamelCase     :   Optional[Any]      =       init_std










"""simple docstring"""




from .hash_table import HashTable
from .number_theory.prime_numbers import is_prime, next_prime




class 					_a		( _lowerCAmelCase							):






				def __init__(					self						:       Tuple,					*lowerCAmelCase__						:       Tuple,					**lowerCAmelCase__						:       Optional[int]				)      -> Union[str, Any]:




										'''simple docstring'''



										super().__init__(*lowerCAmelCase__,					**lowerCAmelCase__				)






				def 							snake_case      (					self						:       Any,					lowerCAmelCase__						:       Dict,					lowerCAmelCase__						:       Tuple				)      -> Optional[Any]:




										'''simple docstring'''



										_UpperCamelCase     :   Tuple      =       (
										    next_prime(value % self.size_table				)
										    if not is_prime(value % self.size_table				)
										    else value % self.size_table
										)  # gt = bigger than
										return next_prime_gt - (data % next_prime_gt)






				def 							snake_case      (					self						:       int,					lowerCAmelCase__						:       Any,					lowerCAmelCase__						:       List[Any],					lowerCAmelCase__						:       Tuple				)      -> Any:




										'''simple docstring'''



										return (increment * self.__hash_function_a(lowerCAmelCase__,					lowerCAmelCase__				)) % self.size_table






				def 							snake_case      (					self						:       Dict,					lowerCAmelCase__						:       str,					lowerCAmelCase__						:       Optional[Any]=None				)      -> Union[str, Any]:




										'''simple docstring'''



										_UpperCamelCase     :   Tuple      =       1
										_UpperCamelCase     :   Dict      =       self.hash_function(lowerCAmelCase__				)

										while self.values[new_key] is not None and self.values[new_key] != key:
																_UpperCamelCase     :   Optional[int]      =       (
																    self.__hash_double_function(lowerCAmelCase__,					lowerCAmelCase__,					lowerCAmelCase__				)
																    if self.balanced_factor() >= self.lim_charge
																    else None
																)
																if new_key is None:
																						break
																else:
																						i += 1

										return new_key



