






from math import isclose, sqrt





def 					snake_case	(  lowerCamelCase					,	lowerCamelCase					,	lowerCamelCase       ):




	'''simple docstring'''







	__lowercase   							=	point_y / 4 / point_x
	__lowercase   							=	2 * normal_gradient / (1 + normal_gradient * normal_gradient)
	__lowercase   							=	(1 - normal_gradient * normal_gradient) / (
	    1 + normal_gradient * normal_gradient
	)
	__lowercase   							=	(sa - ca * incoming_gradient) / (ca + sa * incoming_gradient)

	# to find the next point, solve the simultaeneous equations:
	# y^2 + 4x^2 = 100
	# y - b = m * (x - a)
	# ==> A x^2 + B x + C = 0
	__lowercase   							=	outgoing_gradient**2 + 4
	__lowercase   							=	2 * outgoing_gradient * (point_y - outgoing_gradient * point_x)
	__lowercase   							=	(point_y - outgoing_gradient * point_x) ** 2 - 100

	__lowercase   							=	(
	    -linear_term - sqrt(linear_term**2 - 4 * quadratic_term * constant_term       )
	) / (2 * quadratic_term)
	__lowercase   							=	(
	    -linear_term + sqrt(linear_term**2 - 4 * quadratic_term * constant_term       )
	) / (2 * quadratic_term)

	# two solutions, one of which is our input point
	__lowercase   							=	x_minus if isclose(lowerCamelCase					,	lowerCamelCase       ) else x_plus
	__lowercase   							=	point_y + outgoing_gradient * (next_x - point_x)

	return next_x, next_y, outgoing_gradient





def 					snake_case	(  lowerCamelCase = 1.4					,	lowerCamelCase = -9.6       ):




	'''simple docstring'''







	__lowercase   							=	0
	__lowercase   							=	first_x_coord
	__lowercase   							=	first_y_coord
	__lowercase   							=	(10.1 - point_y) / (0.0 - point_x)

	while not (-0.01 <= point_x <= 0.01 and point_y > 0):
		__lowercase							,    __lowercase							,    __lowercase   							=	next_point(lowerCamelCase					,	lowerCamelCase					,	lowerCamelCase       )
		num_reflections += 1

	return num_reflections


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









'''simple docstring'''



import unittest
from dataclasses import dataclass

import pytest

from accelerate.commands.config.config_args import SageMakerConfig
from accelerate.utils import ComputeEnvironment
from accelerate.utils.launch import _convert_nargs_to_dict
@dataclass
class UpperCAmelCase_       (     __A					):




      """simple docstring"""




      UpperCamelCase_             =      ComputeEnvironment.AMAZON_SAGEMAKER
      UpperCamelCase_             =      True
      UpperCamelCase_             =      '''ml.p3.2xlarge'''
      UpperCamelCase_             =      '''accelerate_sagemaker_execution_role'''
      UpperCamelCase_             =      '''hf-sm'''
      UpperCamelCase_             =      '''us-east-1'''
      UpperCamelCase_             =      1
      UpperCamelCase_             =      '''accelerate-sagemaker-1'''
      UpperCamelCase_             =      '''1.6'''
      UpperCamelCase_             =      '''4.4'''
      UpperCamelCase_             =      '''train.py'''
      UpperCamelCase_             =      [
          '''--model_name_or_path''',
          '''bert''',
          '''--do_train''',
          '''False''',
          '''--epochs''',
          '''3''',
          '''--learning_rate''',
          '''5e-5''',
          '''--max_steps''',
          '''50.5''',
      ]
      UpperCamelCase_             =      [
          '''--model_name_or_path''',
          '''bert''',
          '''--do_train''',
          '''--do_test''',
          '''False''',
          '''--do_predict''',
          '''--epochs''',
          '''3''',
          '''--learning_rate''',
          '''5e-5''',
          '''--max_steps''',
          '''50.5''',
      ]





class UpperCAmelCase_       (     unittest.TestCase					):




      """simple docstring"""




      def 					A__   (			self      :		int		)	->	Dict:


       '''simple docstring'''

       lowercase       : str						=_convert_nargs_to_dict(MockLaunchConfig.success_training_script_args		)
       assert isinstance(converted_args['''model_name_or_path''']  ,   UpperCAmelCase		)
       assert isinstance(converted_args['''do_train''']  ,   UpperCAmelCase		)
       assert isinstance(converted_args['''epochs''']  ,   UpperCAmelCase		)
       assert isinstance(converted_args['''learning_rate''']  ,   UpperCAmelCase		)
       assert isinstance(converted_args['''max_steps''']  ,   UpperCAmelCase		)

       with pytest.raises(UpperCAmelCase		):
        _convert_nargs_to_dict(MockLaunchConfig.fail_training_script_args		)



