


import os
import sys
import unittest


_A			=						os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
sys.path.append(os.path.join(git_repo_path, 'utils'))

import check_dummies  # noqa: E402
from check_dummies import create_dummy_files, create_dummy_object, find_backend, read_init  # noqa: E402


# Align TRANSFORMERS_PATH in check_dummies with the current path
_A			=						os.path.join(git_repo_path, 'src', 'diffusers')






class    UpperCAmelCase__	( unittest.TestCase		):



     """simple docstring"""






     def _a (      self   )  ->	int:
          __UpperCamelCase   							=find_backend('    if not is_torch_available():'   )
          self.assertEqual(_a ,       'torch'   )

          # backend_with_underscore = find_backend("    if not is_tensorflow_text_available():")
          # self.assertEqual(backend_with_underscore, "tensorflow_text")

          __UpperCamelCase   							=find_backend('    if not (is_torch_available() and is_transformers_available()):'   )
          self.assertEqual(_a ,       'torch_and_transformers'   )

          # double_backend_with_underscore = find_backend(
          #    "    if not (is_sentencepiece_available() and is_tensorflow_text_available()):"
          # )
          # self.assertEqual(double_backend_with_underscore, "sentencepiece_and_tensorflow_text")

          __UpperCamelCase   							=find_backend(
              '    if not (is_torch_available() and is_transformers_available() and is_onnx_available()):'   )
          self.assertEqual(_a ,       'torch_and_transformers_and_onnx'   )






     def _a (      self   )  ->	List[Any]:
          __UpperCamelCase   							=read_init()
          # We don't assert on the exact list of keys to allow for smooth grow of backend-specific objects
          self.assertIn('torch' ,       _a   )
          self.assertIn('torch_and_transformers' ,       _a   )
          self.assertIn('flax_and_transformers' ,       _a   )
          self.assertIn('torch_and_transformers_and_onnx' ,       _a   )

          # Likewise, we can't assert on the exact content of a key
          self.assertIn('UNet2DModel' ,       objects['torch']   )
          self.assertIn('FlaxUNet2DConditionModel' ,       objects['flax']   )
          self.assertIn('StableDiffusionPipeline' ,       objects['torch_and_transformers']   )
          self.assertIn('FlaxStableDiffusionPipeline' ,       objects['flax_and_transformers']   )
          self.assertIn('LMSDiscreteScheduler' ,       objects['torch_and_scipy']   )
          self.assertIn('OnnxStableDiffusionPipeline' ,       objects['torch_and_transformers_and_onnx']   )






     def _a (      self   )  ->	List[Any]:
          __UpperCamelCase   							=create_dummy_object('CONSTANT' ,       '\'torch\''   )
          self.assertEqual(_a ,       '\nCONSTANT = None\n'   )

          __UpperCamelCase   							=create_dummy_object('function' ,       '\'torch\''   )
          self.assertEqual(
              _a ,       '\ndef function(*args, **kwargs):\n    requires_backends(function, \'torch\')\n'   )

          __UpperCamelCase   							="\nclass FakeClass(metaclass=DummyObject):\n    _backends = 'torch'\n\n    def __init__(self, *args, **kwargs):\n        requires_backends(self, 'torch')\n\n    @classmethod\n    def from_config(cls, *args, **kwargs):\n        requires_backends(cls, 'torch')\n\n    @classmethod\n    def from_pretrained(cls, *args, **kwargs):\n        requires_backends(cls, 'torch')\n"
          __UpperCamelCase   							=create_dummy_object('FakeClass' ,       '\'torch\''   )
          self.assertEqual(_a ,       _a   )






     def _a (      self   )  ->	Optional[Any]:
          __UpperCamelCase   							="# This file is autogenerated by the command `make fix-copies`, do not edit.\nfrom ..utils import DummyObject, requires_backends\n\n\nCONSTANT = None\n\n\ndef function(*args, **kwargs):\n    requires_backends(function, [\"torch\"])\n\n\nclass FakeClass(metaclass=DummyObject):\n    _backends = [\"torch\"]\n\n    def __init__(self, *args, **kwargs):\n        requires_backends(self, [\"torch\"])\n\n    @classmethod\n    def from_config(cls, *args, **kwargs):\n        requires_backends(cls, [\"torch\"])\n\n    @classmethod\n    def from_pretrained(cls, *args, **kwargs):\n        requires_backends(cls, [\"torch\"])\n"
          __UpperCamelCase   							=create_dummy_files({'torch': ['CONSTANT', 'function', 'FakeClass']}   )
          self.assertEqual(dummy_files['torch'] ,       _a   )









import warnings
from contextlib import contextmanager

from ....processing_utils import ProcessorMixin






class    UpperCAmelCase__	( A_		):



    """simple docstring"""






    UpperCAmelCase__						:		Optional[int]              =  "MCTCTFeatureExtractor"
    UpperCAmelCase__						:		str              =  "AutoTokenizer"






    def __init__(      self ,       A_ ,       A_   )  ->	Dict:
         super().__init__(A_ ,       A_   )
         __UpperCamelCase   							=self.feature_extractor
         __UpperCamelCase   							=False






    def __call__(      self ,       *A_ ,       **A_   )  ->	Optional[Any]:
         # For backward compatibility
         if self._in_target_context_manager:
              return self.current_processor(*A_ ,       **A_   )

         if "raw_speech" in kwargs:
              warnings.warn('Using `raw_speech` as a keyword argument is deprecated. Use `audio` instead.'   )
              __UpperCamelCase   							=kwargs.pop('raw_speech'   )
         else:
              __UpperCamelCase   							=kwargs.pop('audio' ,       A_   )
         __UpperCamelCase   							=kwargs.pop('sampling_rate' ,       A_   )
         __UpperCamelCase   							=kwargs.pop('text' ,       A_   )
         if len(A_   ) > 0:
              __UpperCamelCase   							=args[0]
              __UpperCamelCase   							=args[1:]

         if audio is None and text is None:
              raise ValueError('You need to specify either an `audio` or `text` input to process.'   )

         if audio is not None:
              __UpperCamelCase   							=self.feature_extractor(A_ ,       *A_ ,       sampling_rate=A_ ,       **A_   )
         if text is not None:
              __UpperCamelCase   							=self.tokenizer(A_ ,       **A_   )

         if text is None:
              return inputs
         elif audio is None:
              return encodings
         else:
              __UpperCamelCase   							=encodings['input_ids']
              return inputs






    def _a (      self ,       *A_ ,       **A_   )  ->	str:
         return self.tokenizer.batch_decode(*A_ ,       **A_   )






    def _a (      self ,       *A_ ,       **A_   )  ->	List[Any]:
         # For backward compatibility
         if self._in_target_context_manager:
              return self.current_processor.pad(*A_ ,       **A_   )

         __UpperCamelCase   							=kwargs.pop('input_features' ,       A_   )
         __UpperCamelCase   							=kwargs.pop('labels' ,       A_   )
         if len(A_   ) > 0:
              __UpperCamelCase   							=args[0]
              __UpperCamelCase   							=args[1:]

         if input_features is not None:
              __UpperCamelCase   							=self.feature_extractor.pad(A_ ,       *A_ ,       **A_   )
         if labels is not None:
              __UpperCamelCase   							=self.tokenizer.pad(A_ ,       **A_   )

         if labels is None:
              return input_features
         elif input_features is None:
              return labels
         else:
              __UpperCamelCase   							=labels['input_ids']
              return input_features






    def _a (      self ,       *A_ ,       **A_   )  ->	Optional[int]:
         return self.tokenizer.decode(*A_ ,       **A_   )






    @contextmanager
    def _a (      self   )  ->	str:
         warnings.warn(
             '`as_target_processor` is deprecated and will be removed in v5 of Transformers. You can process your '
             'labels by using the argument `text` of the regular `__call__` method (either in the same call as '
             'your audio inputs, or in a separate call.'   )
         __UpperCamelCase   							=True
         __UpperCamelCase   							=self.tokenizer
         yield
         __UpperCamelCase   							=self.feature_extractor
         __UpperCamelCase   							=False





