


"""simple docstring"""






def 				A_       ( snake_case__		)					->  "list[int]":
			if upper_limit < 0:
						raise ValueError('''Limit for the Catalan sequence must be ≥ 0'''		)

			_UpperCamelCase					:int					     =	[0] * (upper_limit + 1)

			# Base case: C(0) = C(1) = 1
			_UpperCamelCase					:Tuple					     =	1
			if upper_limit > 0:
						_UpperCamelCase					:List[Any]					     =	1

			# Recurrence relation: C(i) = sum(C(j).C(i-j-1)), from j = 0 to i
			for i in range(2       ,					upper_limit + 1		):
						for j in range(snake_case__		):
									catalan_list[i] += catalan_list[j] * catalan_list[i - j - 1]

			return catalan_list


if __name__ == "__main__":
					print("""\n********* Catalan Numbers Using Dynamic Programming ************\n""")
					print("""\n*** Enter -1 at any time to quit ***""")
					print("""\nEnter the upper limit (≥ 0) for the Catalan number sequence: """, end="""""")
					try:
										while True:
															UpperCamelCase__				:Any			   =	int(input().strip())
															if N < 0:
																				print("""\n********* Goodbye!! ************""")
																				break
															else:
																				print(F"""The Catalan numbers from 0 through {N} are:""")
																				print(catalan_numbers(N))
																				print("""Try another upper limit for the sequence: """, end="""""")
					except (NameError, ValueError):
										print("""\n********* Invalid input, goodbye! ************\n""")

					import doctest

					doctest.testmod()





"""simple docstring"""






from collections.abc import Callable

import numpy as np





def 				A_       ( snake_case__       ,					snake_case__       ,					snake_case__       ,					snake_case__       ,					snake_case__		)					->  np.ndarray:
			_UpperCamelCase					:str					     =	int(np.ceil((x_end - xa) / step_size		)		)
			_UpperCamelCase					:Union[str, Any]					     =	np.zeros((n + 1,)		)
			_UpperCamelCase					:List[str]					     =	ya
			_UpperCamelCase					:Any					     =	xa

			for k in range(snake_case__		):
						_UpperCamelCase					:Union[str, Any]					     =	y[k] + step_size * ode_func(snake_case__       ,					y[k]		)
						x += step_size

			return y


if __name__ == "__main__":
					import doctest

					doctest.testmod()

