





from math import isclose, sqrt






def 					lowerCamelCase_						(    _UpperCamelCase			,    _UpperCamelCase			,    _UpperCamelCase			)		->						tuple[float, float, float]:






    """simple docstring"""


    snake_case_						:   Dict           =  point_y / 4 / point_x
    snake_case_						:   List[str]           =  2 * normal_gradient / (1 + normal_gradient * normal_gradient)
    snake_case_						:   Union[str, Any]           =  (1 - normal_gradient * normal_gradient) / (
        1 + normal_gradient * normal_gradient
    )
    snake_case_						:   Tuple           =  (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
    snake_case_						:   Union[str, Any]           =  outgoing_gradient**2 + 4
    snake_case_						:   Tuple           =  2 * outgoing_gradient * (point_y - outgoing_gradient * point_x)
    snake_case_						:   Optional[Any]           =  (point_y - outgoing_gradient * point_x) ** 2 - 100

    snake_case_						:   Dict           =  (
        -linear_term - sqrt(linear_term**2 - 4 * quadratic_term * constant_term			)
    ) / (2 * quadratic_term)
    snake_case_						:   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
    snake_case_						:   Any           =  x_minus if isclose(_UpperCamelCase			,    _UpperCamelCase			) else x_plus
    snake_case_						:   int           =  point_y + outgoing_gradient * (next_x - point_x)

    return next_x, next_y, outgoing_gradient






def 					lowerCamelCase_						(    _UpperCamelCase = 1.4			,    _UpperCamelCase = -9.6			)		->						int:






    """simple docstring"""


    snake_case_						:   int           =  0
    snake_case_						:   float           =  first_x_coord
    snake_case_						:   float           =  first_y_coord
    snake_case_						:   float           =  (10.1 - point_y) / (0.0 - point_x)

    while not (-0.01 <= point_x <= 0.01 and point_y > 0):
        snake_case_						:   str           =  next_point(_UpperCamelCase			,    _UpperCamelCase			,    _UpperCamelCase			)
        num_reflections += 1

    return num_reflections


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







import flax.linen as nn
import jax.numpy as jnp

from .attention_flax import FlaxTransformeraDModel
from .resnet_flax import FlaxDownsampleaD, FlaxResnetBlockaD, FlaxUpsampleaD



class  __lowerCAmelCase	(      nn.Module					):
			lowerCamelCase_					:					int
			lowerCamelCase_					:					int
			lowerCamelCase_					:					float	      =				0.0
			lowerCamelCase_					:					int	      =				1
			lowerCamelCase_					:					int	      =				1
			lowerCamelCase_					:					bool	      =				True
			lowerCamelCase_					:					bool	      =				False
			lowerCamelCase_					:					bool	      =				False
			lowerCamelCase_					:					bool	      =				False
			lowerCamelCase_					:					jnp.dtype	      =				jnp.floataa






			def       lowerCamelCase  (self   )					->       Tuple:


							'''simple docstring'''



							snake_case_						:   Tuple           =  []
							snake_case_						:   List[str]           =  []

							for i in range(self.num_layers   ):
											snake_case_						:   Tuple           =  self.in_channels if i == 0 else self.out_channels

											snake_case_						:   Dict           =  FlaxResnetBlockaD(
											    in_channels=__magic_name__ ,							out_channels=self.out_channels ,							dropout_prob=self.dropout ,							dtype=self.dtype ,							)
											resnets.append(__magic_name__   )

											snake_case_						:   str           =  FlaxTransformeraDModel(
											    in_channels=self.out_channels ,							n_heads=self.num_attention_heads ,							d_head=self.out_channels // self.num_attention_heads ,							depth=1 ,							use_linear_projection=self.use_linear_projection ,							only_cross_attention=self.only_cross_attention ,							use_memory_efficient_attention=self.use_memory_efficient_attention ,							dtype=self.dtype ,							)
											attentions.append(__magic_name__   )

							snake_case_						:   Union[str, Any]           =  resnets
							snake_case_						:   Union[str, Any]           =  attentions

							if self.add_downsample:
											snake_case_						:   List[str]           =  FlaxDownsampleaD(self.out_channels ,							dtype=self.dtype   )






			def __call__(self ,							__magic_name__ ,							__magic_name__ ,							__magic_name__ ,							__magic_name__=True   )					->       List[Any]:


							'''simple docstring'''



							snake_case_						:   str           =  ()

							for resnet, attn in zip(self.resnets ,							self.attentions   ):
											snake_case_						:   Optional[Any]           =  resnet(__magic_name__ ,							__magic_name__ ,							deterministic=__magic_name__   )
											snake_case_						:   List[str]           =  attn(__magic_name__ ,							__magic_name__ ,							deterministic=__magic_name__   )
											output_states += (hidden_states,)

							if self.add_downsample:
											snake_case_						:   Union[str, Any]           =  self.downsamplers_a(__magic_name__   )
											output_states += (hidden_states,)

							return hidden_states, output_states




class  __lowerCAmelCase	(      nn.Module					):
			lowerCamelCase_					:					int
			lowerCamelCase_					:					int
			lowerCamelCase_					:					float	      =				0.0
			lowerCamelCase_					:					int	      =				1
			lowerCamelCase_					:					bool	      =				True
			lowerCamelCase_					:					jnp.dtype	      =				jnp.floataa






			def       lowerCamelCase  (self   )					->       Dict:


							'''simple docstring'''



							snake_case_						:   Optional[Any]           =  []

							for i in range(self.num_layers   ):
											snake_case_						:   List[Any]           =  self.in_channels if i == 0 else self.out_channels

											snake_case_						:   Tuple           =  FlaxResnetBlockaD(
											    in_channels=__magic_name__ ,							out_channels=self.out_channels ,							dropout_prob=self.dropout ,							dtype=self.dtype ,							)
											resnets.append(__magic_name__   )
							snake_case_						:   Dict           =  resnets

							if self.add_downsample:
											snake_case_						:   Optional[int]           =  FlaxDownsampleaD(self.out_channels ,							dtype=self.dtype   )






			def __call__(self ,							__magic_name__ ,							__magic_name__ ,							__magic_name__=True   )					->       Optional[Any]:


							'''simple docstring'''



							snake_case_						:   Any           =  ()

							for resnet in self.resnets:
											snake_case_						:   List[Any]           =  resnet(__magic_name__ ,							__magic_name__ ,							deterministic=__magic_name__   )
											output_states += (hidden_states,)

							if self.add_downsample:
											snake_case_						:   str           =  self.downsamplers_a(__magic_name__   )
											output_states += (hidden_states,)

							return hidden_states, output_states




class  __lowerCAmelCase	(      nn.Module					):
			lowerCamelCase_					:					int
			lowerCamelCase_					:					int
			lowerCamelCase_					:					int
			lowerCamelCase_					:					float	      =				0.0
			lowerCamelCase_					:					int	      =				1
			lowerCamelCase_					:					int	      =				1
			lowerCamelCase_					:					bool	      =				True
			lowerCamelCase_					:					bool	      =				False
			lowerCamelCase_					:					bool	      =				False
			lowerCamelCase_					:					bool	      =				False
			lowerCamelCase_					:					jnp.dtype	      =				jnp.floataa






			def       lowerCamelCase  (self   )					->       str:


							'''simple docstring'''



							snake_case_						:   Optional[Any]           =  []
							snake_case_						:   Optional[Any]           =  []

							for i in range(self.num_layers   ):
											snake_case_						:   List[Any]           =  self.in_channels if (i == self.num_layers - 1) else self.out_channels
											snake_case_						:   Optional[int]           =  self.prev_output_channel if i == 0 else self.out_channels

											snake_case_						:   Dict           =  FlaxResnetBlockaD(
											    in_channels=resnet_in_channels + res_skip_channels ,							out_channels=self.out_channels ,							dropout_prob=self.dropout ,							dtype=self.dtype ,							)
											resnets.append(__magic_name__   )

											snake_case_						:   List[str]           =  FlaxTransformeraDModel(
											    in_channels=self.out_channels ,							n_heads=self.num_attention_heads ,							d_head=self.out_channels // self.num_attention_heads ,							depth=1 ,							use_linear_projection=self.use_linear_projection ,							only_cross_attention=self.only_cross_attention ,							use_memory_efficient_attention=self.use_memory_efficient_attention ,							dtype=self.dtype ,							)
											attentions.append(__magic_name__   )

							snake_case_						:   List[Any]           =  resnets
							snake_case_						:   Tuple           =  attentions

							if self.add_upsample:
											snake_case_						:   List[Any]           =  FlaxUpsampleaD(self.out_channels ,							dtype=self.dtype   )






			def __call__(self ,							__magic_name__ ,							__magic_name__ ,							__magic_name__ ,							__magic_name__ ,							__magic_name__=True   )					->       Union[str, Any]:


							'''simple docstring'''



							for resnet, attn in zip(self.resnets ,							self.attentions   ):
											# pop res hidden states
											snake_case_						:   Dict           =  res_hidden_states_tuple[-1]
											snake_case_						:   List[Any]           =  res_hidden_states_tuple[:-1]
											snake_case_						:   Optional[int]           =  jnp.concatenate((hidden_states, res_hidden_states) ,							axis=-1   )

											snake_case_						:   Tuple           =  resnet(__magic_name__ ,							__magic_name__ ,							deterministic=__magic_name__   )
											snake_case_						:   Tuple           =  attn(__magic_name__ ,							__magic_name__ ,							deterministic=__magic_name__   )

							if self.add_upsample:
											snake_case_						:   Optional[Any]           =  self.upsamplers_a(__magic_name__   )

							return hidden_states




class  __lowerCAmelCase	(      nn.Module					):
			lowerCamelCase_					:					int
			lowerCamelCase_					:					int
			lowerCamelCase_					:					int
			lowerCamelCase_					:					float	      =				0.0
			lowerCamelCase_					:					int	      =				1
			lowerCamelCase_					:					bool	      =				True
			lowerCamelCase_					:					jnp.dtype	      =				jnp.floataa






			def       lowerCamelCase  (self   )					->       int:


							'''simple docstring'''



							snake_case_						:   Union[str, Any]           =  []

							for i in range(self.num_layers   ):
											snake_case_						:   Tuple           =  self.in_channels if (i == self.num_layers - 1) else self.out_channels
											snake_case_						:   Optional[Any]           =  self.prev_output_channel if i == 0 else self.out_channels

											snake_case_						:   int           =  FlaxResnetBlockaD(
											    in_channels=resnet_in_channels + res_skip_channels ,							out_channels=self.out_channels ,							dropout_prob=self.dropout ,							dtype=self.dtype ,							)
											resnets.append(__magic_name__   )

							snake_case_						:   Tuple           =  resnets

							if self.add_upsample:
											snake_case_						:   List[str]           =  FlaxUpsampleaD(self.out_channels ,							dtype=self.dtype   )






			def __call__(self ,							__magic_name__ ,							__magic_name__ ,							__magic_name__ ,							__magic_name__=True   )					->       List[Any]:


							'''simple docstring'''



							for resnet in self.resnets:
											# pop res hidden states
											snake_case_						:   Tuple           =  res_hidden_states_tuple[-1]
											snake_case_						:   List[Any]           =  res_hidden_states_tuple[:-1]
											snake_case_						:   Dict           =  jnp.concatenate((hidden_states, res_hidden_states) ,							axis=-1   )

											snake_case_						:   Optional[Any]           =  resnet(__magic_name__ ,							__magic_name__ ,							deterministic=__magic_name__   )

							if self.add_upsample:
											snake_case_						:   Optional[int]           =  self.upsamplers_a(__magic_name__   )

							return hidden_states




class  __lowerCAmelCase	(      nn.Module					):
			lowerCamelCase_					:					int
			lowerCamelCase_					:					float	      =				0.0
			lowerCamelCase_					:					int	      =				1
			lowerCamelCase_					:					int	      =				1
			lowerCamelCase_					:					bool	      =				False
			lowerCamelCase_					:					bool	      =				False
			lowerCamelCase_					:					jnp.dtype	      =				jnp.floataa






			def       lowerCamelCase  (self   )					->       str:


							'''simple docstring'''



							snake_case_						:   Dict           =  [
							    FlaxResnetBlockaD(
							        in_channels=self.in_channels ,							out_channels=self.in_channels ,							dropout_prob=self.dropout ,							dtype=self.dtype ,							)
							]

							snake_case_						:   int           =  []

							for _ in range(self.num_layers   ):
											snake_case_						:   str           =  FlaxTransformeraDModel(
											    in_channels=self.in_channels ,							n_heads=self.num_attention_heads ,							d_head=self.in_channels // self.num_attention_heads ,							depth=1 ,							use_linear_projection=self.use_linear_projection ,							use_memory_efficient_attention=self.use_memory_efficient_attention ,							dtype=self.dtype ,							)
											attentions.append(__magic_name__   )

											snake_case_						:   Dict           =  FlaxResnetBlockaD(
											    in_channels=self.in_channels ,							out_channels=self.in_channels ,							dropout_prob=self.dropout ,							dtype=self.dtype ,							)
											resnets.append(__magic_name__   )

							snake_case_						:   Optional[Any]           =  resnets
							snake_case_						:   Optional[int]           =  attentions






			def __call__(self ,							__magic_name__ ,							__magic_name__ ,							__magic_name__ ,							__magic_name__=True   )					->       Optional[int]:


							'''simple docstring'''



							snake_case_						:   List[Any]           =  self.resnets[0](__magic_name__ ,							__magic_name__   )
							for attn, resnet in zip(self.attentions ,							self.resnets[1:]   ):
											snake_case_						:   Tuple           =  attn(__magic_name__ ,							__magic_name__ ,							deterministic=__magic_name__   )
											snake_case_						:   Union[str, Any]           =  resnet(__magic_name__ ,							__magic_name__ ,							deterministic=__magic_name__   )

							return hidden_states
