"""simple docstring"""







from math import isclose, sqrt



def 			lowercase__(       __SCREAMING_SNAKE_CASE							:     float     ,			__SCREAMING_SNAKE_CASE							:     float     ,			__SCREAMING_SNAKE_CASE							:     float      ):
     lowercase_	:				List[str]													=	point_y / 4 / point_x
     lowercase_	:				int													=	2 * normal_gradient / (1 + normal_gradient * normal_gradient)
     lowercase_	:				List[Any]													=	(1 - normal_gradient * normal_gradient) / (
         1 + normal_gradient * normal_gradient
     )
     lowercase_	:				List[str]													=	(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_	:				List[str]													=	outgoing_gradient**2 + 4
     lowercase_	:				Optional[int]													=	2 * outgoing_gradient * (point_y - outgoing_gradient * point_x)
     lowercase_	:				Any													=	(point_y - outgoing_gradient * point_x) ** 2 - 1_00

     lowercase_	:				Any													=	(
         -linear_term - sqrt(linear_term**2 - 4 * quadratic_term * constant_term      )
     ) / (2 * quadratic_term)
     lowercase_	:				Optional[int]													=	(
         -linear_term + sqrt(linear_term**2 - 4 * quadratic_term * constant_term      )
     ) / (2 * quadratic_term)

     # two solutions, one of which is our input point
     lowercase_	:				Tuple													=	x_minus if isclose(__SCREAMING_SNAKE_CASE     ,			__SCREAMING_SNAKE_CASE      ) else x_plus
     lowercase_	:				List[str]													=	point_y + outgoing_gradient * (next_x - point_x)

     return next_x, next_y, outgoing_gradient



def 			lowercase__(       __SCREAMING_SNAKE_CASE							:     float = 1.4     ,			__SCREAMING_SNAKE_CASE							:     float = -9.6      ):
     lowercase_	:				int													=	0
     lowercase_	:				float													=	first_x_coord
     lowercase_	:				float													=	first_y_coord
     lowercase_	:				float													=	(10.1 - point_y) / (0.0 - point_x)

     while not (-0.01 <= point_x <= 0.01 and point_y > 0):
          lowercase_							,  lowercase_							,  lowercase_	:				Dict													=	next_point(__SCREAMING_SNAKE_CASE     ,			__SCREAMING_SNAKE_CASE     ,			__SCREAMING_SNAKE_CASE      )
          num_reflections += 1

     return num_reflections


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


"""simple docstring"""







from __future__ import annotations



def 			lowercase__(       __SCREAMING_SNAKE_CASE							:     list      ):
     if not nums:
          raise ValueError('List is empty'      )
     return sum(__SCREAMING_SNAKE_CASE      ) / len(__SCREAMING_SNAKE_CASE      )


if __name__ == "__main__":
       import doctest

       doctest.testmod()

