




from __future__ import annotations

from decimal import Decimal
from math import *  # noqa: F403

from sympy import diff




def 							_UpperCAmelCase  (UpperCamelCase_ : str      ,    UpperCamelCase_ : float | Decimal      ,    UpperCamelCase_ : float = 10**-10       ):
				'''simple docstring'''
				_lowerCAmelCase    :    Tuple										=      a
				while True:
								_lowerCAmelCase    :    Any										=      Decimal(UpperCamelCase_       ) - (
								    Decimal(eval(UpperCamelCase_       )       ) / Decimal(eval(str(diff(UpperCamelCase_       )       )       )       )  # noqa: S307
								)
								# This number dictates the accuracy of the answer
								if abs(eval(UpperCamelCase_       )       ) < precision:  # noqa: S307
												return float(UpperCamelCase_       )


# Let's Execute
if __name__ == "__main__":
	# Find root of trigonometric function
	# Find value of pi
	print(F'''The root of sin(x) = 0 is {newton_raphson('sin(x)', 2)}''')
	# Find root of polynomial
	print(F'''The root of x**2 - 5*x + 2 = 0 is {newton_raphson('x**2 - 5*x + 2', 0.4)}''')
	# Find Square Root of 5
	print(F'''The root of log(x) - 1 = 0 is {newton_raphson('log(x) - 1', 2)}''')
	# Exponential Roots
	print(F'''The root of exp(x) - 1 = 0 is {newton_raphson('exp(x) - 1', 0)}''')







def 							_UpperCAmelCase  (UpperCamelCase_ : int       ):
				'''simple docstring'''
				_lowerCAmelCase    :    int										=      n ** (1 / 3)
				return (val * val * val) == n


if __name__ == "__main__":
	print(perfect_cube(2_7))
	print(perfect_cube(4))

