
lowercase__				:				str						=      {
    "0": 1,
    "1": 1,
    "2": 2,
    "3": 6,
    "4": 2_4,
    "5": 1_2_0,
    "6": 7_2_0,
    "7": 5_0_4_0,
    "8": 4_0_3_2_0,
    "9": 3_6_2_8_8_0,
}

lowercase__				:				Union[str, Any]						=      {1_4_5: 1_4_5}

lowercase__				:				Tuple						=      {
    1_4_5: 0,
    1_6_9: 3,
    3_6_3_0_1: 3,
    1_4_5_4: 3,
    8_7_1: 2,
    4_5_3_6_1: 2,
    8_7_2: 2,
}




def 						A_			(				snake_case				: List[Any]			)   ->     int:



						'''simple docstring'''

						if n in CACHE_SUM_DIGIT_FACTORIALS:
												return CACHE_SUM_DIGIT_FACTORIALS[n]
						__UpperCamelCase  	=      sum(DIGIT_FACTORIALS[let] for let in str(snake_case			)			)
						__UpperCamelCase  	=      ret
						return ret




def 						A_			(				snake_case				: List[Any]			,   snake_case				: str = None			)   ->     int:



						'''simple docstring'''

						__UpperCamelCase  	=      previous or set()
						if n in CHAIN_LENGTH_CACHE:
												return CHAIN_LENGTH_CACHE[n]
						__UpperCamelCase  	=      sum_digit_factorials(snake_case			)
						if next_number in previous:
												__UpperCamelCase  	=      0
												return 0
						else:
												previous.add(snake_case			)
												__UpperCamelCase  	=      1 + chain_length(snake_case			,   snake_case			)
												__UpperCamelCase  	=      ret
												return ret




def 						A_			(				snake_case				: str = 60			,   snake_case				: Union[str, Any] = 1000000			)   ->     int:



						'''simple docstring'''

						return sum(1 for i in range(1			,   snake_case			) if chain_length(snake_case			) == num_terms			)


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












import numpy as np  # noqa: E402

from ...configuration_utils import ConfigMixin, register_to_config
from ...schedulers.scheduling_utils import SchedulerMixin


try:
						import librosa  # noqa: E402

						__lowerCamelCase						= True
						__lowerCamelCase						= ''
except Exception as e:
						__lowerCamelCase						= False
						__lowerCamelCase						= (
						    F'''Cannot import librosa because {e}. Make sure to correctly install librosa to be able to install it.'''
						)


from PIL import Image  # noqa: E402

class      UpperCamelCase_							(				UpperCamelCase ,       UpperCamelCase       ):
						lowercase									=  '''mel_config.json'''




						@register_to_config
						def __init__(    self		,	lowercase = 256		,	lowercase = 256		,	lowercase = 22_050		,	lowercase = 2_048		,	lowercase = 512		,	lowercase = 80		,	lowercase = 32		,	)			->						Optional[Any]:
													_a  :    Tuple			=						hop_length
													_a  :    Dict			=						sample_rate
													_a  :    Dict			=						n_fft
													_a  :    List[str]			=						top_db
													_a  :    Optional[int]			=						n_iter
													self.set_resolution(lowercase		,	lowercase       )
													_a  :    Optional[int]			=						None

													if not _librosa_can_be_imported:
																				raise ValueError(_import_error       )




						def      snake_case__(    self		,	lowercase		,	lowercase       )			->						Any:
													_a  :    Any			=						x_res
													_a  :    Optional[Any]			=						y_res
													_a  :    List[Any]			=						self.y_res
													_a  :    Tuple			=						self.x_res * self.hop_length - 1




						def      snake_case__(    self		,	lowercase = None		,	lowercase = None       )			->						Union[str, Any]:
													if audio_file is not None:
																				_a		,					_a  :    str			=						librosa.load(lowercase		,	mono=lowercase		,	sr=self.sr       )
													else:
																				_a  :    Any			=						raw_audio

													# Pad with silence if necessary.
													if len(self.audio       ) < self.x_res * self.hop_length:
																				_a  :    str			=						np.concatenate([self.audio, np.zeros((self.x_res * self.hop_length - len(self.audio       ),)       )]       )




						def      snake_case__(    self       )			->						int:
													return len(self.audio       ) // self.slice_size




						def      snake_case__(    self		,	lowercase = 0       )			->						np.ndarray:
													return self.audio[self.slice_size * slice : self.slice_size * (slice + 1)]




						def      snake_case__(    self       )			->						int:
													return self.sr




						def      snake_case__(    self		,	lowercase       )			->						Image.Image:
													_a  :    int			=						librosa.feature.melspectrogram(
													    y=self.get_audio_slice(lowercase       )		,	sr=self.sr		,	n_fft=self.n_fft		,	hop_length=self.hop_length		,	n_mels=self.n_mels       )
													_a  :    List[str]			=						librosa.power_to_db(lowercase		,	ref=np.max		,	top_db=self.top_db       )
													_a  :    List[str]			=						(((log_S + self.top_db) * 255 / self.top_db).clip(0		,	255       ) + 0.5).astype(np.uinta       )
													_a  :    Any			=						Image.fromarray(lowercase       )
													return image







						def      snake_case__(    self		,	lowercase       )			->						np.ndarray:
													_a  :    Any			=						np.frombuffer(image.tobytes()		,	dtype='''uint8'''       ).reshape((image.height, image.width)       )
													_a  :    Any			=						bytedata.astype('''float'''       ) * self.top_db / 255 - self.top_db
													_a  :    Dict			=						librosa.db_to_power(lowercase       )
													_a  :    List[str]			=						librosa.feature.inverse.mel_to_audio(
													    lowercase		,	sr=self.sr		,	n_fft=self.n_fft		,	hop_length=self.hop_length		,	n_iter=self.n_iter       )
													return audio