

'''simple docstring'''



def    a__       (  a__						):




     """simple docstring"""


     __SCREAMING_SNAKE_CASE     =      generate_pascal_triangle(a__						)
     for row_idx in range(a__						):
          # 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    a__       (  a__						):




     """simple docstring"""


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

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







def    a__       (  a__      ,    a__						):




     """simple docstring"""


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







def    a__       (  a__      ,    a__      ,    a__      ,    a__      ,    ):




     """simple docstring"""


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







def    a__       (  a__						):




     """simple docstring"""


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

     __SCREAMING_SNAKE_CASE     =      [[1]]

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

     return result







def    a__       (  ):




     """simple docstring"""


     from collections.abc import Callable
     from timeit import timeit

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


if __name__ == "__main__":
  import doctest

  doctest.testmod()
  benchmark()







"""simple docstring"""






def   a_						(					lowerCamelCase					,			lowerCamelCase       ):
				if a < 0 or b < 0:
								raise ValueError('the value of both inputs must be positive'       )

				UpperCAmelCase__             =							str(bin(lowerCamelCase       )       )[2:]  # remove the leading "0b"
				UpperCAmelCase__             =							str(bin(lowerCamelCase       )       )[2:]  # remove the leading "0b"

				UpperCAmelCase__             =							max(len(lowerCamelCase       )					,			len(lowerCamelCase       )       )

				return "0b" + "".join(
				    str(int(char_a == '1' and char_b == '1'       )       )
				    for char_a, char_b in zip(a_binary.zfill(lowerCamelCase       )					,			b_binary.zfill(lowerCamelCase       )       )       )


if __name__ == "__main__":
						import doctest

						doctest.testmod()



