from collections.abc import Callable
from math import pi, sqrt
from random import uniform
from statistics import mean
def 					_snake_case	(  __snake_case						):

					# A local function to see if a dot lands in the circle.
					def is_in_circle(__snake_case  ,     __snake_case						) -> bool:
										_UpperCamelCase			     =     sqrt((x**2) + (y**2)						)
										# Our circle has a radius of 1, so a distance
										# greater than 1 would land outside the circle.
										return distance_from_centre <= 1

					# The proportion of guesses that landed in the circle
					_UpperCamelCase			     =     mean(
					    int(is_in_circle(uniform(-1.0  ,     1.0						)  ,     uniform(-1.0  ,     1.0						)						)						)
					    for _ in range(__snake_case						)						)
					# The ratio of the area for circle to square is pi/4.
					_UpperCamelCase			     =     proportion * 4
					print(f"""The estimated value of pi is {pi_estimate}"""						)
					print(f"""The numpy value of pi is {pi}"""						)
					print(f"""The total error is {abs(pi - pi_estimate						)}"""						)
def 					_snake_case	(  __snake_case  ,     __snake_case  ,     __snake_case = 0.0  ,     __snake_case = 1.0  ,     ):
					return mean(
					    function_to_integrate(uniform(__snake_case  ,     __snake_case						)						) for _ in range(__snake_case						)						) * (max_value - min_value)
def 					_snake_case	(  __snake_case  ,     __snake_case = 0.0  ,     __snake_case = 1.0						):

					def identity_function(__snake_case						) -> float:
										return x

					_UpperCamelCase			     =     area_under_curve_estimator(
					    __snake_case  ,     __snake_case  ,     __snake_case  ,     __snake_case						)
					_UpperCamelCase			     =     (max_value * max_value - min_value * min_value) / 2

					print('''******************'''						)
					print(f"""Estimating area under y=x where x varies from {min_value} to {max_value}"""						)
					print(f"""Estimated value is {estimated_value}"""						)
					print(f"""Expected value is {expected_value}"""						)
					print(f"""Total error is {abs(estimated_value - expected_value						)}"""						)
					print('''******************'''						)
def 					_snake_case	(  __snake_case						):

					def function_to_integrate(__snake_case						) -> float:
										return sqrt(4.0 - x * x						)

					_UpperCamelCase			     =     area_under_curve_estimator(
					    __snake_case  ,     __snake_case  ,     0.0  ,     2.0						)

					print('''******************'''						)
					print('''Estimating pi using area_under_curve_estimator'''						)
					print(f"""Estimated value is {estimated_value}"""						)
					print(f"""Expected value is {pi}"""						)
					print(f"""Total error is {abs(estimated_value - pi						)}"""						)
					print('''******************'''						)


if __name__ == "__main__":
					import doctest

					doctest.testmod()





'''simple docstring'''





def 		__snake_case(							)						->					Optional[Any]:
      for n in range(1	,  1_000_000						):
            yield n * (n + 1) // 2





def 		__snake_case(							_lowerCAmelCase						)						->					str:
      snake_case__    :       Optional[int]       		= 1
      snake_case__    :       List[Any]       		= 2
      while i * i <= n:
            snake_case__    :       Dict       		= 0
            while n % i == 0:
                  n //= i
                  multiplicity += 1
            divisors_count *= multiplicity + 1
            i += 1
      if n > 1:
            divisors_count *= 2
      return divisors_count





def 		__snake_case(							)						->					List[str]:
      return next(i for i in triangle_number_generator() if count_divisors(_lowerCAmelCase						) > 500						)


if __name__ == "__main__":
       print(solution())
