





'''simple docstring'''







def     lowerCamelCase_ (					SCREAMING_SNAKE_CASE__ :     Optional[int]				)	->		str:

						if number != int(SCREAMING_SNAKE_CASE_				):
												raise ValueError('''factorial() only accepts integral values'''				)
						if number < 0:
												raise ValueError('''factorial() not defined for negative values'''				)
						UpperCAmelCase_     : Optional[Any]         =					1
						for i in range(1,     number + 1				):
												value *= i
						return value





def     lowerCamelCase_ (					SCREAMING_SNAKE_CASE__ :     List[Any]				)	->		Optional[Any]:

						if not isinstance(SCREAMING_SNAKE_CASE_,     SCREAMING_SNAKE_CASE_				):
												raise ValueError('''factorial() only accepts integral values'''				)
						if n < 0:
												raise ValueError('''factorial() not defined for negative values'''				)
						return 1 if n == 0 or n == 1 else n * factorial(n - 1				)


if __name__ == "__main__":
					import doctest

					doctest.testmod()

					snake_case_       :    List[Any]          =					int(input("Enter a positive integer: ").strip() or 0)
					print(f'''factorial{n} is {factorial(n)}''')







'''simple docstring'''







import numpy as np
from numpy import floataa
from numpy.typing import NDArray





def     lowerCamelCase_ (					SCREAMING_SNAKE_CASE__ :     NDArray[floataa],     SCREAMING_SNAKE_CASE__ :     NDArray[floataa]				)	->		NDArray[floataa]:
						UpperCAmelCase_  ,    UpperCAmelCase_     : Any         =					np.shape(SCREAMING_SNAKE_CASE__				)

						UpperCAmelCase_     : NDArray[floataa]         =					np.zeros((rows, 1),     dtype=SCREAMING_SNAKE_CASE__				)
						for row in reversed(range(SCREAMING_SNAKE_CASE__				)				):
												UpperCAmelCase_     : Union[str, Any]         =					0
												for col in range(row + 1,     SCREAMING_SNAKE_CASE__				):
																		total += coefficients[row, col] * x[col]

												UpperCAmelCase_     : str         =					(vector[row] - total) / coefficients[row, row]

						return x





def     lowerCamelCase_ (					SCREAMING_SNAKE_CASE__ :     NDArray[floataa],     SCREAMING_SNAKE_CASE__ :     NDArray[floataa]				)	->		NDArray[floataa]:
						UpperCAmelCase_  ,    UpperCAmelCase_     : List[Any]         =					np.shape(SCREAMING_SNAKE_CASE__				)
						if rows != columns:
												return np.array((),     dtype=SCREAMING_SNAKE_CASE__				)

						# augmented matrix
						UpperCAmelCase_     : NDArray[floataa]         =					np.concatenate((coefficients, vector),     axis=1				)
						UpperCAmelCase_     : Optional[Any]         =					augmented_mat.astype('''float64'''				)

						# scale the matrix leaving it triangular
						for row in range(rows - 1				):
												UpperCAmelCase_     : Optional[int]         =					augmented_mat[row, row]
												for col in range(row + 1,     SCREAMING_SNAKE_CASE__				):
																		UpperCAmelCase_     : Optional[Any]         =					augmented_mat[col, row] / pivot
																		augmented_mat[col, :] -= factor * augmented_mat[row, :]

						UpperCAmelCase_     : Optional[Any]         =					retroactive_resolution(
						    augmented_mat[:, 0:columns],     augmented_mat[:, columns : columns + 1]				)

						return x


if __name__ == "__main__":
					import doctest

					doctest.testmod()





