





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

import pytest
from parameterized import 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.g4dn.xlarge""",
            """results""": {"""train_runtime""": 6_50, """eval_accuracy""": 0.6, """eval_loss""": 0.9},
        },
        {
            """framework""": """tensorflow""",
            """script""": """run_tf.py""",
            """model_name_or_path""": """distilbert-base-cased""",
            """instance_type""": """ml.g4dn.xlarge""",
            """results""": {"""train_runtime""": 6_00, """eval_accuracy""": 0.3, """eval_loss""": 0.9},
        },
    ]							)
class 							__SCREAMING_SNAKE_CASE       (  unittest.TestCase							):






							def 					_lowerCamelCase		(    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=__lowerCAmelCase	,			)
														assert hasattr(self	,			"""env"""	)






							def 					_lowerCamelCase		(    self	,			__lowerCAmelCase=1	):
														# 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=f"""{self.env.base_job_name}-single"""	,			instance_count=__lowerCAmelCase	,			instance_type=self.instance_type	,			debugger_hook_config=__lowerCAmelCase	,			hyperparameters={**self.env.hyperparameters, """model_name_or_path""": self.model_name_or_path}	,			metric_definitions=self.env.metric_definitions	,			py_version="""py36"""	,			)






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







							def 					_lowerCamelCase		(    self	):
														# create estimator
														UpperCamelCase__					  =      self.create_estimator()

														# run training
														estimator.fit()

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

														# extract kpis
														UpperCamelCase__					  =      list(result_metrics_df[result_metrics_df.metric_name == """eval_accuracy"""]["""value"""]	)
														UpperCamelCase__					  =      list(result_metrics_df[result_metrics_df.metric_name == """eval_loss"""]["""value"""]	)
														# get train time from SageMaker job, this includes starting, preprocessing, stopping
														UpperCamelCase__					  =      (
														    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}	,			__lowerCAmelCase	)











def      _UpperCamelCase  (a__ :int = 1000							):






							"""simple docstring"""





							UpperCamelCase__					  =      2**power
							UpperCamelCase__					  =      0
							while n:
														UpperCamelCase__  ,  UpperCamelCase__					  =      r + n % 10, n // 10
							return r


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




