


'''simple docstring'''

def __UpperCamelCase   (			__lowerCamelCase		: int				)      ->     None:







     '''simple docstring'''






     _a						=		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 __UpperCamelCase   (			__lowerCamelCase		: int				)      ->     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"				)

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






def __UpperCamelCase   (			__lowerCamelCase		: list[list[int]]      ,  __lowerCamelCase		: int				)      ->     list[int]:







     '''simple docstring'''






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






def __UpperCamelCase   (			__lowerCamelCase		: list[list[int]]      ,  __lowerCamelCase		: list[int]      ,  __lowerCamelCase		: int      ,  __lowerCamelCase		: int      ,  )      ->     None:







     '''simple docstring'''






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






def __UpperCamelCase   (			__lowerCamelCase		: int				)      ->     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"				)

     _a						=		[[1]]

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

     return result






def __UpperCamelCase   (			)      ->     None:







     '''simple docstring'''






     from collections.abc import Callable
     from timeit import timeit

     def benchmark_a_function(__lowerCamelCase		: Callable      ,  __lowerCamelCase		: int				) -> None:
          _a						=		F"{func.__name__}({value})"
          _a						=		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()





'''simple docstring'''

import re

from flax.core.frozen_dict import freeze
from flax.traverse_util import flatten_dict, unflatten_dict
from jax.experimental import PartitionSpec as P


# Sentinels
lowercase__				     =		object()

# For specifying empty leaf dict `{}`
lowercase__				     =		object()






def __UpperCamelCase   (			__lowerCamelCase		: Tuple      ,  __lowerCamelCase		: Tuple				)      ->     Union[str, Any]:







     '''simple docstring'''






     _a						=		tuple((re.compile(x + "$"				) for x in qs)				)
     for i in range(len(__lowerCamelCase				) - len(__lowerCamelCase				) + 1				):
          _a						=		[x.match(__lowerCamelCase				) for x, y in zip(__lowerCamelCase      ,  ks[i:]				)]
          if matches and all(__lowerCamelCase				):
               return True
     return False






def __UpperCamelCase   (			__lowerCamelCase		: int				)      ->     Union[str, Any]:







     '''simple docstring'''






     def replace(__lowerCamelCase		: Tuple      ,  __lowerCamelCase		: Any				):
          for rule, replacement in rules:
               if _match(__lowerCamelCase      ,  __lowerCamelCase				):
                    return replacement
          return val

     return replace






def __UpperCamelCase   (			)      ->     Tuple:







     '''simple docstring'''






     return [
         # embeddings
         (("transformer", "wpe", "embedding"), P("mp"      ,  __lowerCamelCase				)),
         (("transformer", "wte", "embedding"), P("mp"      ,  __lowerCamelCase				)),
         # atention
         (("attention", "(q_proj|k_proj|v_proj)", "kernel"), P(__lowerCamelCase      ,  "mp"				)),
         (("attention", "out_proj", "kernel"), P("mp"      ,  __lowerCamelCase				)),
         (("attention", "out_proj", "bias"), None),
         # mlp
         (("mlp", "c_fc", "kernel"), P(__lowerCamelCase      ,  "mp"				)),
         (("mlp", "c_fc", "bias"), P("mp"				)),
         (("mlp", "c_proj", "kernel"), P("mp"      ,  __lowerCamelCase				)),
         (("mlp", "c_proj", "bias"), None),
         # layer norms
         ((r"ln_\d+", "bias"), None),
         ((r"\d+", r"ln_\d+", "scale"), None),
         (("ln_f", "bias"), None),
         (("ln_f", "scale"), None),
     ]






def __UpperCamelCase   (			__lowerCamelCase		: Dict				)      ->     Tuple:







     '''simple docstring'''






     _a						=		_get_partition_rules()
     _a						=		_replacement_rules(__lowerCamelCase				)
     _a						=		{k: _unmatched for k in flatten_dict(__lowerCamelCase				)}
     _a						=		{k: replace(__lowerCamelCase      ,  __lowerCamelCase				) for k, v in initd.items()}
     assert _unmatched not in result.values(), "Incomplete partition spec."
     return freeze(unflatten_dict(__lowerCamelCase				)				)

