


def 						_lowerCAmelCase							(     _lowerCAmelCase			)    ->						None:


						'''simple docstring'''






						__snake_case				=		generate_pascal_triangle(_lowerCAmelCase			)
						for row_idx in range(_lowerCAmelCase			):
												# 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							(     _lowerCAmelCase			)    ->						list[list[int]]:


						'''simple docstring'''






						if not isinstance(_lowerCAmelCase   ,						_lowerCAmelCase			):
												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"			)

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





def 						_lowerCAmelCase							(     _lowerCAmelCase   ,						_lowerCAmelCase			)    ->						list[int]:


						'''simple docstring'''






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





def 						_lowerCAmelCase							(     _lowerCAmelCase   ,						_lowerCAmelCase   ,						_lowerCAmelCase   ,						_lowerCAmelCase   ,						)    ->						None:


						'''simple docstring'''






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





def 						_lowerCAmelCase							(     _lowerCAmelCase			)    ->						list[list[int]]:


						'''simple docstring'''






						if not isinstance(_lowerCAmelCase   ,						_lowerCAmelCase			):
												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"			)

						__snake_case				=		[[1]]

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

						return result





def 						_lowerCAmelCase							(     )    ->						None:


						'''simple docstring'''






						from collections.abc import Callable
						from timeit import timeit

						def benchmark_a_function(_lowerCAmelCase   ,						_lowerCAmelCase			) -> None:
												__snake_case				=		F'''{func.__name__}({value})'''
												__snake_case				=		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(_lowerCAmelCase   ,						_lowerCAmelCase			)
												print()


if __name__ == "__main__":
	import doctest

	doctest.testmod()
	benchmark()









A				:       Any      =  '\n# Transformers installation\n! pip install transformers datasets\n# To install from source instead of the last release, comment the command above and uncomment the following one.\n# ! pip install git+https://github.com/huggingface/transformers.git\n'

A				:       Optional[int]      =  [{'type': 'code', 'content': INSTALL_CONTENT}]
A				:       Optional[int]      =  {
    '{processor_class}': 'FakeProcessorClass',
    '{model_class}': 'FakeModelClass',
    '{object_class}': 'FakeObjectClass',
}





