



"""simple docstring"""






import os
from datetime import datetime as dt

from github import Github


snake_case   					=				[
    '''good first issue''',
    '''good second issue''',
    '''good difficult issue''',
    '''enhancement''',
    '''new pipeline/model''',
    '''new scheduler''',
    '''wip''',
]




def 			snake_case		(		)						->				int:
  _snake_case   	=      Github(os.environ['''GITHUB_TOKEN''']	)
  _snake_case   	=      g.get_repo('''huggingface/diffusers'''	)
  _snake_case   	=      repo.get_issues(state='''open'''	)

  for issue in open_issues:
    _snake_case   	=      sorted(issue.get_comments()  ,						key=lambda lowerCAmelCase_	: i.created_at  ,						reverse=lowerCAmelCase_	)
    _snake_case   	=      comments[0] if len(lowerCAmelCase_	) > 0 else None
    if (
        last_comment is not None
        and last_comment.user.login == "github-actions[bot]"
        and (dt.utcnow() - issue.updated_at).days > 7
        and (dt.utcnow() - issue.created_at).days >= 30
        and not any(label.name.lower() in LABELS_TO_EXEMPT for label in issue.get_labels()	)
    ):
      # Closes the issue after 7 days of inactivity since the Stalebot notification.
      issue.edit(state='''closed'''	)
    elif (
        "stale" in issue.get_labels()
        and last_comment is not None
        and last_comment.user.login != "github-actions[bot]"
    ):
      # Opens the issue if someone other than Stalebot commented.
      issue.edit(state='''open'''	)
      issue.remove_from_labels('''stale'''	)
    elif (
        (dt.utcnow() - issue.updated_at).days > 23
        and (dt.utcnow() - issue.created_at).days >= 30
        and not any(label.name.lower() in LABELS_TO_EXEMPT for label in issue.get_labels()	)
    ):
      # Post a Stalebot notification after 23 days of inactivity.
      issue.create_comment(
          '''This issue has been automatically marked as stale because it has not had '''
          '''recent activity. If you think this still needs to be addressed '''
          '''please comment on this thread.\n\nPlease note that issues that do not follow the '''
          '''[contributing guidelines](https://github.com/huggingface/diffusers/blob/main/CONTRIBUTING.md) '''
          '''are likely to be ignored.'''	)
      issue.add_to_labels('''stale'''	)


if __name__ == "__main__":
     main()










"""simple docstring"""






import itertools
import os
import random
import tempfile
import unittest

import numpy as np

from transformers import TvltFeatureExtractor, is_datasets_available
from transformers.testing_utils import check_json_file_has_correct_format, require_torch, require_torchaudio
from transformers.utils.import_utils import is_torch_available

from ...test_sequence_feature_extraction_common import SequenceFeatureExtractionTestMixin


if is_torch_available():
     import torch

if is_datasets_available():
     from datasets import load_dataset

snake_case   					=				random.Random()




def 			snake_case		(		lowerCAmelCase_  ,						lowerCAmelCase_=1.0  ,						lowerCAmelCase_=None  ,						lowerCAmelCase_=None	)						->				List[str]:
  if rng is None:
    _snake_case   	=      global_rng

  _snake_case   	=      []
  for batch_idx in range(shape[0]	):
    values.append([]	)
    for _ in range(shape[1]	):
      values[-1].append(rng.random() * scale	)

  return values



class     UpperCAmelCase    (	unittest.TestCase  ):



   def __init__(       self    :	Tuple							,       __lowerCamelCase    :	List[str]							,       __lowerCamelCase    :	Optional[Any]=7							,       __lowerCamelCase    :	List[Any]=4_0_0							,       __lowerCamelCase    :	Any=2_0_0_0							,       __lowerCamelCase    :	Any=2_0_4_8							,       __lowerCamelCase    :	Any=1_2_8							,       __lowerCamelCase    :	Any=1							,       __lowerCamelCase    :	Optional[int]=5_1_2							,       __lowerCamelCase    :	Tuple=3_0							,       __lowerCamelCase    :	List[Any]=4_4_1_0_0							,       ):



     """simple docstring"""
     _snake_case   	=      parent
     _snake_case   	=      batch_size
     _snake_case   	=      min_seq_length
     _snake_case   	=      max_seq_length
     _snake_case   	=      (self.max_seq_length - self.min_seq_length) // (self.batch_size - 1)
     _snake_case   	=      spectrogram_length
     _snake_case   	=      feature_size
     _snake_case   	=      num_audio_channels
     _snake_case   	=      hop_length
     _snake_case   	=      chunk_length
     _snake_case   	=      sampling_rate



   def    __UpperCAmelCase    (       self    :	List[Any]				):



     """simple docstring"""
     return {
         "spectrogram_length": self.spectrogram_length,
         "feature_size": self.feature_size,
         "num_audio_channels": self.num_audio_channels,
         "hop_length": self.hop_length,
         "chunk_length": self.chunk_length,
         "sampling_rate": self.sampling_rate,
     }





   def    __UpperCAmelCase    (       self    :	Union[str, Any]							,       __lowerCamelCase    :	Any=False							,       __lowerCamelCase    :	int=False				):



     """simple docstring"""
     def _flatten(__lowerCamelCase    :	List[str]				):
       return list(itertools.chain(*__lowerCamelCase				)				)

     if equal_length:
       _snake_case   	=      [floats_list((self.max_seq_length, self.feature_size)				) for _ in range(self.batch_size				)]
     else:
       # make sure that inputs increase in size
       _snake_case   	=      [
           floats_list((x, self.feature_size)				)
           for x in range(self.min_seq_length							,       self.max_seq_length							,       self.seq_length_diff				)
       ]
     if numpify:
       _snake_case   	=      [np.asarray(__lowerCamelCase				) for x in speech_inputs]
     return speech_inputs



@require_torch
@require_torchaudio
class     UpperCAmelCase    (	__SCREAMING_SNAKE_CASE,unittest.TestCase  ):
   A__		:	Tuple           =  TvltFeatureExtractor



   def    __UpperCAmelCase    (       self    :	int				):



     """simple docstring"""
     _snake_case   	=      TvltFeatureExtractionTester(self				)



   def    __UpperCAmelCase    (       self    :	Any				):



     """simple docstring"""
     _snake_case   	=      self.feature_extraction_class(**self.feat_extract_dict				)
     self.assertTrue(hasattr(__lowerCamelCase							,       '''spectrogram_length'''				)				)
     self.assertTrue(hasattr(__lowerCamelCase							,       '''feature_size'''				)				)
     self.assertTrue(hasattr(__lowerCamelCase							,       '''num_audio_channels'''				)				)
     self.assertTrue(hasattr(__lowerCamelCase							,       '''hop_length'''				)				)
     self.assertTrue(hasattr(__lowerCamelCase							,       '''chunk_length'''				)				)
     self.assertTrue(hasattr(__lowerCamelCase							,       '''sampling_rate'''				)				)



   def    __UpperCAmelCase    (       self    :	int				):



     """simple docstring"""
     _snake_case   	=      self.feature_extraction_class(**self.feat_extract_dict				)

     with tempfile.TemporaryDirectory() as tmpdirname:
       _snake_case   	=      feat_extract_first.save_pretrained(__lowerCamelCase				)[0]
       check_json_file_has_correct_format(__lowerCamelCase				)
       _snake_case   	=      self.feature_extraction_class.from_pretrained(__lowerCamelCase				)

     _snake_case   	=      feat_extract_first.to_dict()
     _snake_case   	=      feat_extract_second.to_dict()
     _snake_case   	=      dict_first.pop('''mel_filters'''				)
     _snake_case   	=      dict_second.pop('''mel_filters'''				)
     self.assertTrue(np.allclose(__lowerCamelCase							,       __lowerCamelCase				)				)
     self.assertEqual(__lowerCamelCase							,       __lowerCamelCase				)



   def    __UpperCAmelCase    (       self    :	int				):



     """simple docstring"""
     _snake_case   	=      self.feature_extraction_class(**self.feat_extract_dict				)

     with tempfile.TemporaryDirectory() as tmpdirname:
       _snake_case   	=      os.path.join(__lowerCamelCase							,       '''feat_extract.json'''				)
       feat_extract_first.to_json_file(__lowerCamelCase				)
       _snake_case   	=      self.feature_extraction_class.from_json_file(__lowerCamelCase				)

     _snake_case   	=      feat_extract_first.to_dict()
     _snake_case   	=      feat_extract_second.to_dict()
     _snake_case   	=      dict_first.pop('''mel_filters'''				)
     _snake_case   	=      dict_second.pop('''mel_filters'''				)
     self.assertTrue(np.allclose(__lowerCamelCase							,       __lowerCamelCase				)				)
     self.assertEqual(__lowerCamelCase							,       __lowerCamelCase				)



   def    __UpperCAmelCase    (       self    :	Dict				):



     """simple docstring"""
     # Initialize feature_extractor
     _snake_case   	=      self.feature_extraction_class(**self.feat_extract_dict				)

     # create three inputs of length 800, 1000, and 1200
     _snake_case   	=      [floats_list((1, x)				)[0] for x in range(8_0_0							,       1_4_0_0							,       2_0_0				)]
     _snake_case   	=      [np.asarray(__lowerCamelCase				) for speech_input in speech_inputs]

     # Test not batched input
     _snake_case   	=      feature_extractor(np_speech_inputs[0]							,       return_tensors='''np'''							,       sampling_rate=4_4_1_0_0				).audio_values

     self.assertTrue(encoded_audios.ndim == 4				)
     self.assertTrue(encoded_audios.shape[-1] == feature_extractor.feature_size				)
     self.assertTrue(encoded_audios.shape[-2] <= feature_extractor.spectrogram_length				)
     self.assertTrue(encoded_audios.shape[-3] == feature_extractor.num_channels				)

     # Test batched
     _snake_case   	=      feature_extractor(__lowerCamelCase							,       return_tensors='''np'''							,       sampling_rate=4_4_1_0_0				).audio_values

     self.assertTrue(encoded_audios.ndim == 4				)
     self.assertTrue(encoded_audios.shape[-1] == feature_extractor.feature_size				)
     self.assertTrue(encoded_audios.shape[-2] <= feature_extractor.spectrogram_length				)
     self.assertTrue(encoded_audios.shape[-3] == feature_extractor.num_channels				)

     # Test audio masking
     _snake_case   	=      feature_extractor(
         __lowerCamelCase							,       return_tensors='''np'''							,       sampling_rate=4_4_1_0_0							,       mask_audio=__lowerCamelCase				).audio_values

     self.assertTrue(encoded_audios.ndim == 4				)
     self.assertTrue(encoded_audios.shape[-1] == feature_extractor.feature_size				)
     self.assertTrue(encoded_audios.shape[-2] <= feature_extractor.spectrogram_length				)
     self.assertTrue(encoded_audios.shape[-3] == feature_extractor.num_channels				)

     # Test 2-D numpy arrays are batched.
     _snake_case   	=      [floats_list((1, x)				)[0] for x in (8_0_0, 8_0_0, 8_0_0)]
     _snake_case   	=      np.asarray(__lowerCamelCase				)
     _snake_case   	=      feature_extractor(__lowerCamelCase							,       return_tensors='''np'''							,       sampling_rate=4_4_1_0_0				).audio_values
     self.assertTrue(encoded_audios.ndim == 4				)
     self.assertTrue(encoded_audios.shape[-1] == feature_extractor.feature_size				)
     self.assertTrue(encoded_audios.shape[-2] <= feature_extractor.spectrogram_length				)
     self.assertTrue(encoded_audios.shape[-3] == feature_extractor.num_channels				)



   def    __UpperCAmelCase    (       self    :	Union[str, Any]							,       __lowerCamelCase    :	Optional[int]				):



     """simple docstring"""
     _snake_case   	=      load_dataset('''hf-internal-testing/librispeech_asr_dummy'''							,       '''clean'''							,       split='''validation'''				)
     # automatic decoding with librispeech
     _snake_case   	=      ds.sort('''id'''				).select(range(__lowerCamelCase				)				)[:num_samples]['''audio''']

     return [x["array"] for x in speech_samples]





   def    __UpperCAmelCase    (       self    :	Dict				):



     """simple docstring"""
     _snake_case   	=      self._load_datasamples(1				)
     _snake_case   	=      TvltFeatureExtractor()
     _snake_case   	=      feature_extractor(__lowerCamelCase							,       return_tensors='''pt'''				).audio_values

     self.assertEquals(audio_values.shape							,       (1, 1, 1_9_2, 1_2_8)				)

     _snake_case   	=      torch.tensor([[-0.3_0_3_2, -0.2_7_0_8], [-0.4_4_3_4, -0.4_0_0_7]]				)
     self.assertTrue(torch.allclose(audio_values[0, 0, :2, :2]							,       __lowerCamelCase							,       atol=1E-4				)				)





