



from math import radians as angle_to_radians
from math import sin

# Acceleration Constant on Earth (unit m/s^2)
UpperCamelCase_									=   9.8_0_6_6_5







def       lowerCamelCase_  (    _a       :						float   ,		_a       :						float    ):



    '''simple docstring'''




    if not isinstance(_a   ,		(int, float)    ):
        raise TypeError("""Invalid velocity. Should be a positive number."""    )

    if not isinstance(_a   ,		(int, float)    ):
        raise TypeError("""Invalid angle. Range is 1-90 degrees."""    )

    # Ensure valid angle
    if angle > 90 or angle < 1:
        raise ValueError("""Invalid angle. Range is 1-90 degrees."""    )

    # Ensure valid velocity
    if init_velocity < 0:
        raise ValueError("""Invalid velocity. Should be a positive number."""    )







def       lowerCamelCase_  (    _a       :						float   ,		_a       :						float    ):



    '''simple docstring'''




    check_args(_a   ,		_a    )
    UpperCAmelCase_     :       Union[str, Any]  		=					angle_to_radians(2 * angle    )
    return round(init_velocity**2 * sin(_a    ) / g   ,		2    )







def       lowerCamelCase_  (    _a       :						float   ,		_a       :						float    ):



    '''simple docstring'''




    check_args(_a   ,		_a    )
    UpperCAmelCase_     :       int  		=					angle_to_radians(_a    )
    return round(init_velocity**2 * sin(_a    ) ** 2 / (2 * g)   ,		2    )







def       lowerCamelCase_  (    _a       :						float   ,		_a       :						float    ):



    '''simple docstring'''




    check_args(_a   ,		_a    )
    UpperCAmelCase_     :       List[str]  		=					angle_to_radians(_a    )
    return round(2 * init_velocity * sin(_a    ) / g   ,		2    )







def       lowerCamelCase_  (    ):



    '''simple docstring'''




    UpperCAmelCase_		, UpperCAmelCase_     :       Tuple  		=					25, 20
    assert horizontal_distance(_a   ,		_a    ) == 4_0.9_7
    assert max_height(_a   ,		_a    ) == 3.7_3
    assert total_time(_a   ,		_a    ) == 1.7_4


if __name__ == "__main__":
      from doctest import testmod

      testmod()

      # Get input from user
      UpperCamelCase_									=   float(input('''Initial Velocity: ''').strip())

      # Get input from user
      UpperCamelCase_									=   float(input('''angle: ''').strip())

      # Print results
      print()
      print('''Results: ''')
      print(F"Horizontal Distance: {horizontal_distance(init_vel, angle)!s} [m]")
      print(F"Maximum Height: {max_height(init_vel, angle)!s} [m]")
      print(F"Total Time: {total_time(init_vel, angle)!s} [s]")





from typing import Callable





def     __lowerCamelCase							(   __magic_name__						:	Callable    ):

							def wrapper(__magic_name__						:	Optional[Any]    ):
														a__:							List[Any]									=function_with_docstring.__doc__
														return target_function

							return wrapper





