





def lowerCAmelCase__(__snake_case							)       ->   None:







	'''simple docstring'''







	lowerCamelCase__              =	generate_pascal_triangle(__snake_case							)
	for row_idx in range(__snake_case							):
		# Print left spaces
		for _ in range(num_rows - row_idx - 1							):
			print(end=''' '''							)
		# Print row values
		for col_idx in range(row_idx + 1							):
			if col_idx != row_idx:
				print(triangle[row_idx][col_idx] ,end=''' '''							)
			else:
				print(triangle[row_idx][col_idx] ,end=''''''							)
		print()





def lowerCAmelCase__(__snake_case							)       ->   list[list[int]]:







	'''simple docstring'''







	if not isinstance(__snake_case ,__snake_case							):
		raise TypeError('''The input value of \'num_rows\' should be \'int\''''							)

	if num_rows == 0:
		return []
	elif num_rows < 0:
		raise ValueError(
		    '''The input value of \'num_rows\' should be greater than or equal to 0'''							)

	lowerCamelCase__              =	[]
	for current_row_idx in range(__snake_case							):
		lowerCamelCase__              =	populate_current_row(__snake_case ,__snake_case							)
		triangle.append(__snake_case							)
	return triangle





def lowerCAmelCase__(__snake_case ,__snake_case							)       ->   list[int]:







	'''simple docstring'''







	lowerCamelCase__              =	[-1] * (current_row_idx + 1)
	# first and last elements of current row are equal to 1
	lowerCamelCase__       ,			lowerCamelCase__              =	1, 1
	for current_col_idx in range(1 ,__snake_case							):
		calculate_current_element(
		    __snake_case ,__snake_case ,__snake_case ,__snake_case							)
	return current_row





def lowerCAmelCase__(__snake_case ,__snake_case ,__snake_case ,__snake_case ,)       ->   None:







	'''simple docstring'''







	lowerCamelCase__              =	triangle[current_row_idx - 1][current_col_idx - 1]
	lowerCamelCase__              =	triangle[current_row_idx - 1][current_col_idx]
	lowerCamelCase__              =	above_to_left_elt + above_to_right_elt





def lowerCAmelCase__(__snake_case							)       ->   list[list[int]]:







	'''simple docstring'''







	if not isinstance(__snake_case ,__snake_case							):
		raise TypeError('''The input value of \'num_rows\' should be \'int\''''							)

	if num_rows == 0:
		return []
	elif num_rows < 0:
		raise ValueError(
		    '''The input value of \'num_rows\' should be greater than or equal to 0'''							)

	lowerCamelCase__              =	[[1]]

	for row_index in range(1 ,__snake_case							):
		lowerCamelCase__              =	[0] + result[-1] + [0]
		lowerCamelCase__              =	row_index + 1
		# Calculate the number of distinct elements in a row
		lowerCamelCase__              =	sum(divmod(__snake_case ,2							)							)
		lowerCamelCase__              =	[
		    temp_row[i - 1] + temp_row[i] for i in range(1 ,distinct_elements + 1							)
		]
		lowerCamelCase__              =	row_first_half[: (row_index + 1) // 2]
		row_second_half.reverse()
		lowerCamelCase__              =	row_first_half + row_second_half
		result.append(__snake_case							)

	return result





def lowerCAmelCase__()       ->   None:







	'''simple docstring'''







	from collections.abc import Callable
	from timeit import timeit

	def benchmark_a_function(__snake_case ,__snake_case							) -> None:
		lowerCamelCase__              =	F'{func.__name__}({value})'
		lowerCamelCase__              =	timeit(F'__main__.{call}' ,setup='''import __main__'''							)
		# print(f"{call:38} = {func(value)} -- {timing:.4f} seconds")
		print(F'{call:38} -- {timing:.4f} seconds'							)

	for value in range(15							):  # (1, 7, 14):
		for func in (generate_pascal_triangle, generate_pascal_triangle_optimized):
			benchmark_a_function(__snake_case ,__snake_case							)
		print()


if __name__ == "__main__":
			import doctest

			doctest.testmod()
			benchmark()










from __future__ import annotations





def lowerCAmelCase__(__snake_case ,__snake_case ,__snake_case							)       ->   float:







	'''simple docstring'''







	if days_between_payments <= 0:
		raise ValueError('''days_between_payments must be > 0'''							)
	if daily_interest_rate < 0:
		raise ValueError('''daily_interest_rate must be >= 0'''							)
	if principal <= 0:
		raise ValueError('''principal must be > 0'''							)
	return principal * daily_interest_rate * days_between_payments





def lowerCAmelCase__(__snake_case ,__snake_case ,__snake_case ,)       ->   float:







	'''simple docstring'''







	if number_of_compounding_periods <= 0:
		raise ValueError('''number_of_compounding_periods must be > 0'''							)
	if nominal_annual_interest_rate_percentage < 0:
		raise ValueError('''nominal_annual_interest_rate_percentage must be >= 0'''							)
	if principal <= 0:
		raise ValueError('''principal must be > 0'''							)

	return principal * (
	    (1 + nominal_annual_interest_rate_percentage) ** number_of_compounding_periods
	    - 1
	)





def lowerCAmelCase__(__snake_case ,__snake_case ,__snake_case ,)       ->   float:







	'''simple docstring'''







	if number_of_years <= 0:
		raise ValueError('''number_of_years must be > 0'''							)
	if nominal_annual_percentage_rate < 0:
		raise ValueError('''nominal_annual_percentage_rate must be >= 0'''							)
	if principal <= 0:
		raise ValueError('''principal must be > 0'''							)

	return compound_interest(
	    __snake_case ,nominal_annual_percentage_rate / 365 ,number_of_years * 365							)


if __name__ == "__main__":
			import doctest

			doctest.testmod()



