




import unittest

from datasets import load_dataset

from transformers.pipelines import pipeline
from transformers.testing_utils import is_pipeline_test, nested_simplify, require_torch, slow






@is_pipeline_test
@require_torch
class  _lowerCAmelCase     (  unittest.TestCase	):

      @require_torch
      def 	__magic_name__(   self		):
        lowerCAmelCase__				:  Optional[Any]		       =     pipeline(
            task='''zero-shot-audio-classification'''      ,				model='''hf-internal-testing/tiny-clap-htsat-unfused'''		)
        lowerCAmelCase__				:  Optional[int]		       =     load_dataset('''ashraq/esc50'''		)
        lowerCAmelCase__				:  Any		       =     dataset['''train''']['''audio'''][-1]['''array''']
        lowerCAmelCase__				:  Union[str, Any]		       =     audio_classifier(__UpperCAmelCase      ,				candidate_labels=['''Sound of a dog''', '''Sound of vaccum cleaner''']		)
        self.assertEqual(
            nested_simplify(__UpperCAmelCase		)      ,				[{'''score''': 0.501, '''label''': '''Sound of a dog'''}, {'''score''': 0.499, '''label''': '''Sound of vaccum cleaner'''}]      ,				)

      @unittest.skip('''No models are available in TF'''		)
      def 	__magic_name__(   self		):
        pass

      @slow
      @require_torch
      def 	__magic_name__(   self		):
        lowerCAmelCase__				:  Any		       =     pipeline(
            task='''zero-shot-audio-classification'''      ,				model='''laion/clap-htsat-unfused'''      ,				)
        # This is an audio of a dog
        lowerCAmelCase__				:  List[str]		       =     load_dataset('''ashraq/esc50'''		)
        lowerCAmelCase__				:  Optional[Any]		       =     dataset['''train''']['''audio'''][-1]['''array''']
        lowerCAmelCase__				:  Dict		       =     audio_classifier(__UpperCAmelCase      ,				candidate_labels=['''Sound of a dog''', '''Sound of vaccum cleaner''']		)

        self.assertEqual(
            nested_simplify(__UpperCAmelCase		)      ,				[
                {'''score''': 0.999, '''label''': '''Sound of a dog'''},
                {'''score''': 0.001, '''label''': '''Sound of vaccum cleaner'''},
            ]      ,				)

        lowerCAmelCase__				:  List[Any]		       =     audio_classifier([audio] * 5      ,				candidate_labels=['''Sound of a dog''', '''Sound of vaccum cleaner''']		)
        self.assertEqual(
            nested_simplify(__UpperCAmelCase		)      ,				[
                [
                    {'''score''': 0.999, '''label''': '''Sound of a dog'''},
                    {'''score''': 0.001, '''label''': '''Sound of vaccum cleaner'''},
                ],
            ]
            * 5      ,				)
        lowerCAmelCase__				:  Union[str, Any]		       =     audio_classifier(
            [audio] * 5      ,				candidate_labels=['''Sound of a dog''', '''Sound of vaccum cleaner''']      ,				batch_size=5		)
        self.assertEqual(
            nested_simplify(__UpperCAmelCase		)      ,				[
                [
                    {'''score''': 0.999, '''label''': '''Sound of a dog'''},
                    {'''score''': 0.001, '''label''': '''Sound of vaccum cleaner'''},
                ],
            ]
            * 5      ,				)







      @unittest.skip('''No models are available in TF'''		)
      def 	__magic_name__(   self		):
        pass







def      __lowerCAmelCase			(					UpperCamelCase      )     ->	None:
  lowerCAmelCase__				:  Dict		       =     generate_pascal_triangle(UpperCamelCase      )
  for row_idx in range(UpperCamelCase      ):
    # 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			(					UpperCamelCase      )     ->	list[list[int]]:

  if not isinstance(UpperCamelCase	,      UpperCamelCase      ):
    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'''      )

  lowerCAmelCase__				:  list[list[int]]		       =     []
  for current_row_idx in range(UpperCamelCase      ):
    lowerCAmelCase__				:  List[str]		       =     populate_current_row(UpperCamelCase	,      UpperCamelCase      )
    triangle.append(UpperCamelCase      )
  return triangle



def      __lowerCAmelCase			(					UpperCamelCase	,      UpperCamelCase      )     ->	list[int]:
  lowerCAmelCase__				:  Optional[Any]		       =     [-1] * (current_row_idx + 1)
  # first and last elements of current row are equal to 1
  lowerCAmelCase__       ,			lowerCAmelCase__				:  int		       =     1, 1
  for current_col_idx in range(1	,      UpperCamelCase      ):
    calculate_current_element(
        UpperCamelCase	,      UpperCamelCase	,      UpperCamelCase	,      UpperCamelCase      )
  return current_row



def      __lowerCAmelCase			(					UpperCamelCase	,      UpperCamelCase	,      UpperCamelCase	,      UpperCamelCase	,      )     ->	None:
  lowerCAmelCase__				:  Optional[int]		       =     triangle[current_row_idx - 1][current_col_idx - 1]
  lowerCAmelCase__				:  List[str]		       =     triangle[current_row_idx - 1][current_col_idx]
  lowerCAmelCase__				:  List[Any]		       =     above_to_left_elt + above_to_right_elt



def      __lowerCAmelCase			(					UpperCamelCase      )     ->	list[list[int]]:

  if not isinstance(UpperCamelCase	,      UpperCamelCase      ):
    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'''      )

  lowerCAmelCase__				:  list[list[int]]		       =     [[1]]

  for row_index in range(1	,      UpperCamelCase      ):
    lowerCAmelCase__				:  Optional[int]		       =     [0] + result[-1] + [0]
    lowerCAmelCase__				:  List[str]		       =     row_index + 1
    # Calculate the number of distinct elements in a row
    lowerCAmelCase__				:  Tuple		       =     sum(divmod(UpperCamelCase	,      2      )      )
    lowerCAmelCase__				:  Tuple		       =     [
        temp_row[i - 1] + temp_row[i] for i in range(1	,      distinct_elements + 1      )
    ]
    lowerCAmelCase__				:  int		       =     row_first_half[: (row_index + 1) // 2]
    row_second_half.reverse()
    lowerCAmelCase__				:  Dict		       =     row_first_half + row_second_half
    result.append(UpperCamelCase      )

  return result



def      __lowerCAmelCase			(					)     ->	None:
  from collections.abc import Callable
  from timeit import timeit

  def benchmark_a_function(UpperCamelCase	,      UpperCamelCase      ) -> None:
    lowerCAmelCase__				:  Tuple		       =     F"""{func.__name__}({value})"""
    lowerCAmelCase__				:  Dict		       =     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(UpperCamelCase	,      UpperCamelCase      )
    print()


if __name__ == "__main__":
     import doctest

     doctest.testmod()
     benchmark()

