


from math import isclose, sqrt


def 		lowercase_  (     _UpperCamelCase       ,			_UpperCamelCase       ,			_UpperCamelCase  ):


			'''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 - 1_00

			__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(__snake_case       ,			__snake_case  ) else x_plus
			__lowercase 					=   point_y + outgoing_gradient * (next_x - point_x)

			return next_x, next_y, outgoing_gradient


def 		lowercase_  (     _UpperCamelCase = 1.4       ,			_UpperCamelCase = -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(__snake_case       ,			__snake_case       ,			__snake_case  )
						num_reflections += 1

			return num_reflections


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








import unittest

from diffusers import FlaxAutoencoderKL
from diffusers.utils import is_flax_available
from diffusers.utils.testing_utils import require_flax

from .test_modeling_common_flax import FlaxModelTesterMixin


if is_flax_available():
	import jax
@require_flax
class 	lowerCamelCase_       (				lowerCAmelCase__     ,     unittest.TestCase				):



					'''simple docstring'''







					__UpperCAmelCase            =				FlaxAutoencoderKL






					@property
					def A      (				self						)   ->			Optional[int]:







								'''simple docstring'''

								__lowercase 					=   4
								__lowercase 					=   3
								__lowercase 					=   (3_2, 3_2)

								__lowercase 					=   jax.random.PRNGKey(0						)
								__lowercase 					=   jax.random.uniform(snake_case_ ,       ((batch_size, num_channels) + sizes)						)

								return {"sample": image, "prng_key": prng_key}






					def A      (				self						)   ->			Any:







								'''simple docstring'''

								__lowercase 					=   {
								    '''block_out_channels''': [3_2, 6_4],
								    '''in_channels''': 3,
								    '''out_channels''': 3,
								    '''down_block_types''': ['''DownEncoderBlock2D''', '''DownEncoderBlock2D'''],
								    '''up_block_types''': ['''UpDecoderBlock2D''', '''UpDecoderBlock2D'''],
								    '''latent_channels''': 4,
								}
								__lowercase 					=   self.dummy_input
								return init_dict, inputs_dict


