


from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_sentencepiece_available,
    is_speech_available,
    is_tf_available,
    is_torch_available,
)


__UpperCamelCase				:				Tuple  				= {
    """configuration_speech_to_text""": ["""SPEECH_TO_TEXT_PRETRAINED_CONFIG_ARCHIVE_MAP""", """Speech2TextConfig"""],
    """processing_speech_to_text""": ["""Speech2TextProcessor"""],
}

try:
       if not is_sentencepiece_available():
              raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
       pass
else:
       __UpperCamelCase				:				Dict  				= ["""Speech2TextTokenizer"""]

try:
       if not is_speech_available():
              raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
       pass
else:
       __UpperCamelCase				:				Optional[int]  				= ["""Speech2TextFeatureExtractor"""]

try:
       if not is_tf_available():
              raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
       pass
else:
       __UpperCamelCase				:				Dict  				= [
           """TF_SPEECH_TO_TEXT_PRETRAINED_MODEL_ARCHIVE_LIST""",
           """TFSpeech2TextForConditionalGeneration""",
           """TFSpeech2TextModel""",
           """TFSpeech2TextPreTrainedModel""",
       ]

try:
       if not is_torch_available():
              raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
       pass
else:
       __UpperCamelCase				:				Optional[Any]  				= [
           """SPEECH_TO_TEXT_PRETRAINED_MODEL_ARCHIVE_LIST""",
           """Speech2TextForConditionalGeneration""",
           """Speech2TextModel""",
           """Speech2TextPreTrainedModel""",
       ]


if TYPE_CHECKING:
       from .configuration_speech_to_text import SPEECH_TO_TEXT_PRETRAINED_CONFIG_ARCHIVE_MAP, SpeechaTextConfig
       from .processing_speech_to_text import SpeechaTextProcessor

       try:
              if not is_sentencepiece_available():
                     raise OptionalDependencyNotAvailable()
       except OptionalDependencyNotAvailable:
              pass
       else:
              from .tokenization_speech_to_text import SpeechaTextTokenizer

       try:
              if not is_speech_available():
                     raise OptionalDependencyNotAvailable()
       except OptionalDependencyNotAvailable:
              pass
       else:
              from .feature_extraction_speech_to_text import SpeechaTextFeatureExtractor

       try:
              if not is_tf_available():
                     raise OptionalDependencyNotAvailable()
       except OptionalDependencyNotAvailable:
              pass
       else:
              from .modeling_tf_speech_to_text import (
                  TF_SPEECH_TO_TEXT_PRETRAINED_MODEL_ARCHIVE_LIST,
                  TFSpeechaTextForConditionalGeneration,
                  TFSpeechaTextModel,
                  TFSpeechaTextPreTrainedModel,
              )

       try:
              if not is_torch_available():
                     raise OptionalDependencyNotAvailable()
       except OptionalDependencyNotAvailable:
              pass
       else:
              from .modeling_speech_to_text import (
                  SPEECH_TO_TEXT_PRETRAINED_MODEL_ARCHIVE_LIST,
                  SpeechaTextForConditionalGeneration,
                  SpeechaTextModel,
                  SpeechaTextPreTrainedModel,
              )

else:
       import sys

       __UpperCamelCase				:				List[Any]  				= _LazyModule(__name__, globals()["__file__"], _import_structure, module_spec=__spec__)








def SCREAMING_SNAKE_CASE				(       lowercase_						)   ->       "list[int]":



       """simple docstring"""

       if upper_limit < 0:
              raise ValueError('''Limit for the Catalan sequence must be ≥ 0'''						)

       A__       =    [0] * (upper_limit + 1)

       # Base case: C(0) = C(1) = 1
       A__       =    1
       if upper_limit > 0:
              A__       =    1

       # Recurrence relation: C(i) = sum(C(j).C(i-j-1)), from j = 0 to i
       for i in range(2 ,				upper_limit + 1						):
              for j in range(lowercase_						):
                     catalan_list[i] += catalan_list[j] * catalan_list[i - j - 1]

       return catalan_list


if __name__ == "__main__":
  print("""\n********* Catalan Numbers Using Dynamic Programming ************\n""")
  print("""\n*** Enter -1 at any time to quit ***""")
  print("""\nEnter the upper limit (≥ 0) for the Catalan number sequence: """, end="""""")
  try:
    while True:
      _lowerCamelCase	:		List[Any]							       =   int(input().strip())
      if N < 0:
        print("""\n********* Goodbye!! ************""")
        break
      else:
        print(F'''The Catalan numbers from 0 through {N} are:''')
        print(catalan_numbers(N))
        print("""Try another upper limit for the sequence: """, end="""""")
  except (NameError, ValueError):
    print("""\n********* Invalid input, goodbye! ************\n""")

  import doctest

  doctest.testmod()


