

"""simple docstring"""




from collections import namedtuple

__A  :					Any												=	namedtuple('from_to', 'from_ to')

__A  :					Tuple												=	{
    'atm': from_to(1, 1),
    'pascal': from_to(0.0_00_00_98, 10_13_25),
    'bar': from_to(0.98_69_23, 1.0_13_25),
    'kilopascal': from_to(0.00_98_69_23, 1_01.3_25),
    'megapascal': from_to(9.8_69_23, 0.10_13_25),
    'psi': from_to(0.06_80_46, 14.69_59),
    'inHg': from_to(0.0_33_42_11, 29.92_13),
    'torr': from_to(0.00_13_15_79, 7_60),
}
def      __SCREAMING_SNAKE_CASE		(		lowercase__    ,							lowercase__    ,							lowercase__   ):
					"""simple docstring"""
					if from_type not in PRESSURE_CONVERSION:
										raise ValueError(
										    F"""Invalid 'from_type' value: {from_type!r}  Supported values are:\n"""
										    + ", ".join(lowercase__   )   )
					if to_type not in PRESSURE_CONVERSION:
										raise ValueError(
										    F"""Invalid 'to_type' value: {to_type!r}.  Supported values are:\n"""
										    + ", ".join(lowercase__   )   )
					return (
					    value * PRESSURE_CONVERSION[from_type].from_ * PRESSURE_CONVERSION[to_type].to
					)


if __name__ == "__main__":
	import doctest

	doctest.testmod()








"""simple docstring"""




import functools
from math import sqrt
from time import time
def      __SCREAMING_SNAKE_CASE		(		lowercase__    ,							*lowercase__    ,							**lowercase__   ):
					"""simple docstring"""
					A    =      time()
					A    =      func(*lowercase__    ,							**lowercase__   )
					A    =      time()
					if int(end - start   ) > 0:
										print(F"""{func.__name__} runtime: {(end - start):0.4f} s"""   )
					else:
										print(F"""{func.__name__} runtime: {(end - start) * 1_000:0.4f} ms"""   )
					return output
def      __SCREAMING_SNAKE_CASE		(		lowercase__   ):
					"""simple docstring"""
					if n < 0:
										raise Exception("n is negative"   )
					if n == 0:
										return [0]
					A    =      [0, 1]
					for _ in range(n - 1   ):
										fib.append(fib[-1] + fib[-2]   )
					return fib
def      __SCREAMING_SNAKE_CASE		(		lowercase__   ):
					"""simple docstring"""

					def fib_recursive_term(lowercase__   ) -> int:
										if i < 0:
															raise Exception("n is negative"   )
										if i < 2:
															return i
										return fib_recursive_term(i - 1   ) + fib_recursive_term(i - 2   )

					if n < 0:
										raise Exception("n is negative"   )
					return [fib_recursive_term(lowercase__   ) for i in range(n + 1   )]
def      __SCREAMING_SNAKE_CASE		(		lowercase__   ):
					"""simple docstring"""

					@functools.cache
					def fib_recursive_term(lowercase__   ) -> int:
										if i < 0:
															raise Exception("n is negative"   )
										if i < 2:
															return i
										return fib_recursive_term(i - 1   ) + fib_recursive_term(i - 2   )

					if n < 0:
										raise Exception("n is negative"   )
					return [fib_recursive_term(lowercase__   ) for i in range(n + 1   )]
def      __SCREAMING_SNAKE_CASE		(		lowercase__   ):
					"""simple docstring"""
					if n < 0:
										raise Exception("n is negative"   )
					# Cache must be outside recursuive function
					# other it will reset every time it calls itself.
					A    =      {0: 0, 1: 1, 2: 1}  # Prefilled cache

					def rec_fn_memoized(lowercase__   ) -> int:
										if num in cache:
															return cache[num]

										A    =      rec_fn_memoized(num - 1   ) + rec_fn_memoized(num - 2   )
										A    =      value
										return value

					return [rec_fn_memoized(lowercase__   ) for i in range(n + 1   )]
def      __SCREAMING_SNAKE_CASE		(		lowercase__   ):
					"""simple docstring"""
					if n < 0:
										raise Exception("n is negative"   )
					if n >= 1_475:
										raise Exception("n is too large"   )
					A    =      sqrt(5   )
					A    =      (1 + sqrt_a) / 2
					return [round(phi**i / sqrt_a   ) for i in range(n + 1   )]


if __name__ == "__main__":
	__A  :					Optional[Any]												=	30
	time_func(fib_iterative, num)
	time_func(fib_recursive, num)  # Around 3s runtime
	time_func(fib_recursive_cached, num)  # Around 0ms runtime
	time_func(fib_memoization, num)
	time_func(fib_binet, num)





