






from collections.abc import Callable



def 					_lowerCamelCase(			lowerCAmelCase__				:		Callable[[float], float]    ,    lowerCAmelCase__				:		float    ,    lowerCAmelCase__				:		float      ):





				'''simple docstring'''







				SCREAMING_SNAKE_CASE_   :	float													=   a
				SCREAMING_SNAKE_CASE_   :	float													=   b
				if function(lowerCAmelCase__      ) == 0:  # one of the a or b is a root for the function
								return a
				elif function(lowerCAmelCase__      ) == 0:
								return b
				elif (
				    function(lowerCAmelCase__      ) * function(lowerCAmelCase__      ) > 0
				):  # if none of these are root and they are both positive or negative,
								# then this algorithm can't find the root
								raise ValueError('could not find root in given interval.'      )
				else:
								SCREAMING_SNAKE_CASE_   :	float													=   start + (end - start) / 2.0
								while abs(start - mid      ) > 10**-7:  # until precisely equals to 10^-7
												if function(lowerCAmelCase__      ) == 0:
																return mid
												elif function(lowerCAmelCase__      ) * function(lowerCAmelCase__      ) < 0:
																SCREAMING_SNAKE_CASE_   :	Optional[int]													=   mid
												else:
																SCREAMING_SNAKE_CASE_   :	Any													=   mid
												SCREAMING_SNAKE_CASE_   :	Any													=   start + (end - start) / 2.0
								return mid



def 					_lowerCamelCase(			lowerCAmelCase__				:		float      ):





				'''simple docstring'''







				return x**3 - 2 * x - 5


if __name__ == "__main__":
				print(bisection(f, 1, 1000))

				import doctest

				doctest.testmod()







import math



def 					_lowerCamelCase(			lowerCAmelCase__				:		float    ,    lowerCAmelCase__				:		float      ):





				'''simple docstring'''







				return math.pow(lowerCAmelCase__    ,    2      ) - a



def 					_lowerCamelCase(			lowerCAmelCase__				:		float      ):





				'''simple docstring'''







				return 2 * x



def 					_lowerCamelCase(			lowerCAmelCase__				:		float      ):





				'''simple docstring'''







				SCREAMING_SNAKE_CASE_   :	Optional[Any]													=   2.0

				while start <= a:
								SCREAMING_SNAKE_CASE_   :	str													=   math.pow(lowerCAmelCase__    ,    2      )

				return start



def 					_lowerCamelCase(			lowerCAmelCase__				:		float    ,    lowerCAmelCase__				:		int = 9999    ,    lowerCAmelCase__				:		float = 0.00_000_000_000_001      ):





				'''simple docstring'''







				if a < 0:
								raise ValueError('math domain error'      )

				SCREAMING_SNAKE_CASE_   :	Optional[int]													=   get_initial_point(lowerCAmelCase__      )

				for _ in range(lowerCAmelCase__      ):
								SCREAMING_SNAKE_CASE_   :	Tuple													=   value
								SCREAMING_SNAKE_CASE_   :	Union[str, Any]													=   value - fx(lowerCAmelCase__    ,    lowerCAmelCase__      ) / fx_derivative(lowerCAmelCase__      )
								if abs(prev_value - value      ) < tolerance:
												return value

				return value


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

				testmod()