





from math import radians as angle_to_radians
from math import sin

# Acceleration Constant on Earth (unit m/s^2)
a_    :				Optional[int]					=			9.80_665




def   _SCREAMING_SNAKE_CASE      (	snake_case_		:						float ,     snake_case_		:						float						):

     # Ensure valid instance
     if not isinstance(snake_case_ ,     (int, float)						):
          raise TypeError('''Invalid velocity. Should be a positive number.'''						)

     if not isinstance(snake_case_ ,     (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   _SCREAMING_SNAKE_CASE      (	snake_case_		:						float ,     snake_case_		:						float						):
     check_args(snake_case_ ,     snake_case_						)
     __magic_name__				=       angle_to_radians(2 * angle						)
     return round(init_velocity**2 * sin(snake_case_						) / g ,     2						)




def   _SCREAMING_SNAKE_CASE      (	snake_case_		:						float ,     snake_case_		:						float						):
     check_args(snake_case_ ,     snake_case_						)
     __magic_name__				=       angle_to_radians(snake_case_						)
     return round(init_velocity**2 * sin(snake_case_						) ** 2 / (2 * g) ,     2						)




def   _SCREAMING_SNAKE_CASE      (	snake_case_		:						float ,     snake_case_		:						float						):
     check_args(snake_case_ ,     snake_case_						)
     __magic_name__				=       angle_to_radians(snake_case_						)
     return round(2 * init_velocity * sin(snake_case_						) / g ,     2						)




def   _SCREAMING_SNAKE_CASE      (	):
     __magic_name__		,  __magic_name__				=       25, 20
     assert horizontal_distance(snake_case_ ,     snake_case_						) == 40.97
     assert max_height(snake_case_ ,     snake_case_						) == 3.73
     assert total_time(snake_case_ ,     snake_case_						) == 1.74


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

    testmod()

    # Get input from user
    a_    :				List[Any]					=			float(input('Initial Velocity: ').strip())

    # Get input from user
    a_    :				List[str]					=			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 __future__ import annotations

from enum import Enum, unique
from typing import TypeVar

# Create a generic variable that can be 'Enum', or any subclass.
a_    :				List[str]					=			TypeVar('T', bound='Enum')



@unique
class  SCREAMING_SNAKE_CASE_  ( SCREAMING_SNAKE_CASE__			):


  """simple docstring"""





  _a								=							80
  _a								=							70
  _a								=							60
  _a								=							50
  _a								=							40
  _a								=							30
  _a								=							20
  _a								=							10



@unique
class  SCREAMING_SNAKE_CASE_  ( SCREAMING_SNAKE_CASE__			):


  """simple docstring"""





  _a								=							24
  _a								=							21
  _a								=							18
  _a								=							15
  _a								=							12
  _a								=							9
  _a								=							6
  _a								=							3
  _a								=							2
  _a								=							1
  _a								=							-1
  _a								=							-2
  _a								=							-3
  _a								=							-6
  _a								=							-9
  _a								=							-12
  _a								=							-15
  _a								=							-18
  _a								=							-21
  _a								=							-24





  @classmethod
  def 			__A      (  cls						)		->   dict:





       '''simple docstring'''







       return {unit.name: unit.value for unit in cls if unit.value > 0}







  @classmethod
  def 			__A      (  cls						)		->   dict:





       '''simple docstring'''







       return {unit.name: unit.value for unit in cls if unit.value < 0}




def   _SCREAMING_SNAKE_CASE      (	snake_case_		:						float						):
     __magic_name__				=       SIUnit.get_positive() if value > 0 else SIUnit.get_negative()
     for name_prefix, value_prefix in prefixes.items():
          __magic_name__				=       value / (10**value_prefix)
          if numerical_part > 1:
               return f'{numerical_part!s} {name_prefix}'
     return str(snake_case_						)




def   _SCREAMING_SNAKE_CASE      (	snake_case_		:						float						):
     for prefix in BinaryUnit:
          __magic_name__				=       value / (2**prefix.value)
          if numerical_part > 1:
               return f'{numerical_part!s} {prefix.name}'
     return str(snake_case_						)


if __name__ == "__main__":
    import doctest

    doctest.testmod()