





import json
import os
import subprocess
import unittest
from ast import literal_eval

import pytest
from parameterized import parameterized, parameterized_class

from . import is_sagemaker_available


if is_sagemaker_available():
							from sagemaker import Session, TrainingJobAnalytics
							from sagemaker.huggingface import HuggingFace

@pytest.mark.skipif(
    literal_eval(os.getenv("""TEST_SAGEMAKER"""    ,					"""False"""    )    ) is not True    ,					reason="""Skipping test because should only be run when releasing minor transformers version"""    ,					)
@pytest.mark.usefixtures("""sm_env"""    )
@parameterized_class(
    [
        {
            """framework""": """pytorch""",
            """script""": """run_glue.py""",
            """model_name_or_path""": """distilbert-base-cased""",
            """instance_type""": """ml.p3.16xlarge""",
            """results""": {"""train_runtime""": 6_50, """eval_accuracy""": 0.7, """eval_loss""": 0.6},
        },
        {
            """framework""": """pytorch""",
            """script""": """run_ddp.py""",
            """model_name_or_path""": """distilbert-base-cased""",
            """instance_type""": """ml.p3.16xlarge""",
            """results""": {"""train_runtime""": 6_00, """eval_accuracy""": 0.7, """eval_loss""": 0.6},
        },
        {
            """framework""": """tensorflow""",
            """script""": """run_tf_dist.py""",
            """model_name_or_path""": """distilbert-base-cased""",
            """instance_type""": """ml.p3.16xlarge""",
            """results""": {"""train_runtime""": 6_00, """eval_accuracy""": 0.6, """eval_loss""": 0.7},
        },
    ]    )
class       __A     (						unittest.TestCase    ):


				def _snake_case       (		self							):
								if self.framework == "pytorch":
												subprocess.run(
												    f"""cp ./examples/pytorch/text-classification/run_glue.py {self.env.test_path}/run_glue.py""".split()   , encoding="""utf-8"""   , check=UpperCAmelCase_   , )
								assert hasattr(self   , """env"""							)


				def _snake_case       (		self   , UpperCAmelCase_							):
								lowerCamelCase	 =f"""{self.env.base_job_name}-{instance_count}-{"ddp" if "ddp" in self.script else "smd"}"""
								# distributed data settings
								lowerCamelCase	 ={"""smdistributed""": {"""dataparallel""": {"""enabled""": True}}} if self.script != """run_ddp.py""" else None

								# creates estimator
								return HuggingFace(
								    entry_point=self.script   , source_dir=self.env.test_path   , role=self.env.role   , image_uri=self.env.image_uri   , base_job_name=UpperCAmelCase_   , instance_count=UpperCAmelCase_   , instance_type=self.instance_type   , debugger_hook_config=UpperCAmelCase_   , hyperparameters={**self.env.distributed_hyperparameters, """model_name_or_path""": self.model_name_or_path}   , metric_definitions=self.env.metric_definitions   , distribution=UpperCAmelCase_   , py_version="""py36"""   , )


				def _snake_case       (		self   , UpperCAmelCase_							):
								TrainingJobAnalytics(UpperCAmelCase_							).export_csv(f"""{self.env.test_path}/{job_name}_metrics.csv"""							)


				@parameterized.expand([(2,)]							)
				def _snake_case       (		self   , UpperCAmelCase_							):
								# create estimator
								lowerCamelCase	 =self.create_estimator(UpperCAmelCase_							)

								# run training
								estimator.fit()

								# result dataframe
								lowerCamelCase	 =TrainingJobAnalytics(estimator.latest_training_job.name							).dataframe()

								# extract kpis
								lowerCamelCase	 =list(result_metrics_df[result_metrics_df.metric_name == """eval_accuracy"""]["""value"""]							)
								lowerCamelCase	 =list(result_metrics_df[result_metrics_df.metric_name == """eval_loss"""]["""value"""]							)
								# get train time from SageMaker job, this includes starting, preprocessing, stopping
								lowerCamelCase	 =(
								    Session().describe_training_job(estimator.latest_training_job.name							).get("""TrainingTimeInSeconds"""   , 999999							)
								)

								# assert kpis
								assert train_runtime <= self.results["train_runtime"]
								assert all(t >= self.results["""eval_accuracy"""] for t in eval_accuracy							)
								assert all(t <= self.results["""eval_loss"""] for t in eval_loss							)

								# dump tests result into json file to share in PR
								with open(f"""{estimator.latest_training_job.name}.json"""   , """w"""							) as outfile:
												json.dump({"""train_time""": train_runtime, """eval_accuracy""": eval_accuracy, """eval_loss""": eval_loss}   , UpperCAmelCase_							)












from math import sqrt





def      _lowercase					(						_UpperCAmelCase				)						->  int:
				lowerCamelCase	 =0
				for i in range(1			,      int(sqrt(_UpperCAmelCase				) + 1				)				):
								if n % i == 0 and i != sqrt(_UpperCAmelCase				):
												total += i + n // i
								elif i == sqrt(_UpperCAmelCase				):
												total += i
				return total - n





def      _lowercase					(						_UpperCAmelCase = 1_00_00				)						->  int:
				lowerCamelCase	 =sum(
				    i
				    for i in range(1			,      _UpperCAmelCase				)
				    if sum_of_divisors(sum_of_divisors(_UpperCAmelCase				)				) == i and sum_of_divisors(_UpperCAmelCase				) != i				)
				return total


if __name__ == "__main__":
							print(solution(int(str(input()).strip())))





