

'''simple docstring'''

from __future__ import annotations

import math
from collections.abc import Callable




def 							_UpperCamelCase				(   lowerCAmelCase__:					Callable[[int | float], int | float]		,lowerCAmelCase__:					int | float		,lowerCAmelCase__:					int | float		,lowerCAmelCase__:					int = 100		,)      -> float:
							SCREAMING_SNAKE_CASE_				=				x_start
							SCREAMING_SNAKE_CASE_				=				fnc(lowerCAmelCase__   )
							SCREAMING_SNAKE_CASE_				=				0.0

							for _ in range(lowerCAmelCase__   ):
														# Approximates curve as a sequence of linear lines and sums their length
														SCREAMING_SNAKE_CASE_				=				(x_end - x_start) / steps + xa
														SCREAMING_SNAKE_CASE_				=				fnc(lowerCAmelCase__   )
														length += math.hypot(xa - xa		,fxa - fxa   )

														# Increment step
														SCREAMING_SNAKE_CASE_				=				xa
														SCREAMING_SNAKE_CASE_				=				fxa

							return length


if __name__ == "__main__":




							def 							_UpperCamelCase				(   lowerCAmelCase__:					Any   )      -> List[Any]:
														return math.sin(10 * x   )

							print("f(x) = sin(10 * x)")
							print("The length of the curve from x = -10 to x = 10 is:")
							SCREAMING_SNAKE_CASE							:				Dict     	=			10
							while i <= 100000:
														print(f"With {i} steps: {line_length(f, -10, 10, i)}")
														i *= 10








'''simple docstring'''

def 							_UpperCamelCase				(   lowerCAmelCase__:					str   )      -> bool:
							return credit_card_number.startswith(('34', '35', '37', '4', '5', '6')   )




def 							_UpperCamelCase				(   lowerCAmelCase__:					str   )      -> bool:
							SCREAMING_SNAKE_CASE_				=				credit_card_number
							SCREAMING_SNAKE_CASE_				=				0
							SCREAMING_SNAKE_CASE_				=				len(lowerCAmelCase__   ) - 2
							for i in range(lowerCAmelCase__		,-1		,-2   ):
														#  double the value of every second digit
														SCREAMING_SNAKE_CASE_				=				int(cc_number[i]   )
														digit *= 2
														# If doubling of a number results in a two digit number
														# i.e greater than 9(e.g., 6 × 2 = 12),
														# then add the digits of the product (e.g., 12: 1 + 2 = 3, 15: 1 + 5 = 6),
														# to get a single digit number.
														if digit > 9:
																					digit %= 10
																					digit += 1
														SCREAMING_SNAKE_CASE_				=				cc_number[:i] + str(lowerCAmelCase__   ) + cc_number[i + 1 :]
														total += digit

							# Sum up the remaining digits
							for i in range(len(lowerCAmelCase__   ) - 1		,-1		,-2   ):
														total += int(cc_number[i]   )

							return total % 10 == 0




def 							_UpperCamelCase				(   lowerCAmelCase__:					str   )      -> bool:
							SCREAMING_SNAKE_CASE_				=				F"""{credit_card_number} is an invalid credit card number because"""
							if not credit_card_number.isdigit():
														print(F"""{error_message} it has nonnumerical characters."""   )
														return False

							if not 13 <= len(lowerCAmelCase__   ) <= 16:
														print(F"""{error_message} of its length."""   )
														return False

							if not validate_initial_digits(lowerCAmelCase__   ):
														print(F"""{error_message} of its first two digits."""   )
														return False

							if not luhn_validation(lowerCAmelCase__   ):
														print(F"""{error_message} it fails the Luhn check."""   )
														return False

							print(F"""{credit_card_number} is a valid credit card number."""   )
							return True


if __name__ == "__main__":
							import doctest

							doctest.testmod()
							validate_credit_card_number("4111111111111111")
							validate_credit_card_number("32323")





