

import gc
import unittest

import numpy as np
import torch

from diffusers import DanceDiffusionPipeline, IPNDMScheduler, UNetaDModel
from diffusers.utils import slow, torch_device
from diffusers.utils.testing_utils import enable_full_determinism, require_torch_gpu, skip_mps

from ..pipeline_params import UNCONDITIONAL_AUDIO_GENERATION_BATCH_PARAMS, UNCONDITIONAL_AUDIO_GENERATION_PARAMS
from ..test_pipelines_common import PipelineTesterMixin


enable_full_determinism()





class 			_SCREAMING_SNAKE_CASE (   __snake_case					,       unittest.TestCase		):







   '''simple docstring'''




   lowerCamelCase__				=      DanceDiffusionPipeline
   lowerCamelCase__				=      UNCONDITIONAL_AUDIO_GENERATION_PARAMS
   lowerCamelCase__				=      PipelineTesterMixin.required_optional_params - {
       "callback",
       "latents",
       "callback_steps",
       "output_type",
       "num_images_per_prompt",
   }
   lowerCamelCase__				=      UNCONDITIONAL_AUDIO_GENERATION_BATCH_PARAMS
   lowerCamelCase__				=      False
   lowerCamelCase__				=      False





   def      _snake_case		(       self					:			str			):
       torch.manual_seed(0			)
       SCREAMING_SNAKE_CASE										=   UNetaDModel(
           block_out_channels=(32, 32, 64)     , extra_in_channels=16     , sample_size=512     , sample_rate=16000     , in_channels=2     , out_channels=2     , flip_sin_to_cos=__lowerCamelCase     , use_timestep_embedding=__lowerCamelCase     , time_embedding_type="fourier"     , mid_block_type="UNetMidBlock1D"     , down_block_types=("DownBlock1DNoSkip", "DownBlock1D", "AttnDownBlock1D")     , up_block_types=("AttnUpBlock1D", "UpBlock1D", "UpBlock1DNoSkip")     , )
       SCREAMING_SNAKE_CASE										=   IPNDMScheduler()

       SCREAMING_SNAKE_CASE										=   {
           "unet": unet,
           "scheduler": scheduler,
       }
       return components





   def      _snake_case		(       self					:			Optional[int]     , __lowerCamelCase					:			Tuple     , __lowerCamelCase					:			Dict=0			):
       if str(__lowerCamelCase			).startswith("mps"			):
           SCREAMING_SNAKE_CASE										=   torch.manual_seed(__lowerCamelCase			)
       else:
           SCREAMING_SNAKE_CASE										=   torch.Generator(device=__lowerCamelCase			).manual_seed(__lowerCamelCase			)
       SCREAMING_SNAKE_CASE										=   {
           "batch_size": 1,
           "generator": generator,
           "num_inference_steps": 4,
       }
       return inputs





   def      _snake_case		(       self					:			Dict			):
       SCREAMING_SNAKE_CASE										=   "cpu"  # ensure determinism for the device-dependent torch.Generator
       SCREAMING_SNAKE_CASE										=   self.get_dummy_components()
       SCREAMING_SNAKE_CASE										=   DanceDiffusionPipeline(**__lowerCamelCase			)
       SCREAMING_SNAKE_CASE										=   pipe.to(__lowerCamelCase			)
       pipe.set_progress_bar_config(disable=__lowerCamelCase			)

       SCREAMING_SNAKE_CASE										=   self.get_dummy_inputs(__lowerCamelCase			)
       SCREAMING_SNAKE_CASE										=   pipe(**__lowerCamelCase			)
       SCREAMING_SNAKE_CASE										=   output.audios

       SCREAMING_SNAKE_CASE										=   audio[0, -3:, -3:]

       assert audio.shape == (1, 2, components["unet"].sample_size)
       SCREAMING_SNAKE_CASE										=   np.array([-0.7_265, 1.0_000, -0.8_388, 0.1_175, 0.9_498, -1.0_000]			)
       assert np.abs(audio_slice.flatten() - expected_slice			).max() < 1e-2





   @skip_mps
   def      _snake_case		(       self					:			str			):
       return super().test_save_load_local()





   @skip_mps
   def      _snake_case		(       self					:			List[str]			):
       return super().test_dict_tuple_outputs_equivalent(expected_max_difference=3e-3			)





   @skip_mps
   def      _snake_case		(       self					:			Optional[Any]			):
       return super().test_save_load_optional_components()





   @skip_mps
   def      _snake_case		(       self					:			Any			):
       return super().test_attention_slicing_forward_pass()





   def      _snake_case		(       self					:			List[str]			):
       super().test_inference_batch_single_identical(expected_max_diff=3e-3			)





@slow
@require_torch_gpu
class 			_SCREAMING_SNAKE_CASE (   unittest.TestCase		):







   '''simple docstring'''




   def      _snake_case		(       self					:			Tuple			):
       # clean up the VRAM after each test
       super().tearDown()
       gc.collect()
       torch.cuda.empty_cache()





   def      _snake_case		(       self					:			Optional[Any]			):
       SCREAMING_SNAKE_CASE										=   torch_device

       SCREAMING_SNAKE_CASE										=   DanceDiffusionPipeline.from_pretrained("harmonai/maestro-150k"			)
       SCREAMING_SNAKE_CASE										=   pipe.to(__lowerCamelCase			)
       pipe.set_progress_bar_config(disable=__lowerCamelCase			)

       SCREAMING_SNAKE_CASE										=   torch.manual_seed(0			)
       SCREAMING_SNAKE_CASE										=   pipe(generator=__lowerCamelCase     , num_inference_steps=100     , audio_length_in_s=4.096			)
       SCREAMING_SNAKE_CASE										=   output.audios

       SCREAMING_SNAKE_CASE										=   audio[0, -3:, -3:]

       assert audio.shape == (1, 2, pipe.unet.sample_size)
       SCREAMING_SNAKE_CASE										=   np.array([-0.0_192, -0.0_231, -0.0_318, -0.0_059, 0.0_002, -0.0_020]			)

       assert np.abs(audio_slice.flatten() - expected_slice			).max() < 1e-2





   def      _snake_case		(       self					:			Optional[Any]			):
       SCREAMING_SNAKE_CASE										=   torch_device

       SCREAMING_SNAKE_CASE										=   DanceDiffusionPipeline.from_pretrained("harmonai/maestro-150k"     , torch_dtype=torch.floataa			)
       SCREAMING_SNAKE_CASE										=   pipe.to(__lowerCamelCase			)
       pipe.set_progress_bar_config(disable=__lowerCamelCase			)

       SCREAMING_SNAKE_CASE										=   torch.manual_seed(0			)
       SCREAMING_SNAKE_CASE										=   pipe(generator=__lowerCamelCase     , num_inference_steps=100     , audio_length_in_s=4.096			)
       SCREAMING_SNAKE_CASE										=   output.audios

       SCREAMING_SNAKE_CASE										=   audio[0, -3:, -3:]

       assert audio.shape == (1, 2, pipe.unet.sample_size)
       SCREAMING_SNAKE_CASE										=   np.array([-0.0_367, -0.0_488, -0.0_771, -0.0_525, -0.0_444, -0.0_341]			)

       assert np.abs(audio_slice.flatten() - expected_slice			).max() < 1e-2



'''simple docstring'''


import argparse
import datetime







def      snake_case_  (    SCREAMING_SNAKE_CASE__	):







				"""simple docstring"""





				_SCREAMING_SNAKE_CASE					:			Optional[int]							= {
				    """0""": """Sunday""",
				    """1""": """Monday""",
				    """2""": """Tuesday""",
				    """3""": """Wednesday""",
				    """4""": """Thursday""",
				    """5""": """Friday""",
				    """6""": """Saturday""",
				}

				_SCREAMING_SNAKE_CASE					:			Optional[int]							= {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 0}

				# Validate
				if not 0 < len(SCREAMING_SNAKE_CASE__	) < 11:
								raise ValueError("""Must be 10 characters long"""	)

				# Get month
				_SCREAMING_SNAKE_CASE					:			int							= int(date_input[0] + date_input[1]	)
				# Validate
				if not 0 < m < 13:
								raise ValueError("""Month must be between 1 - 12"""	)

				_SCREAMING_SNAKE_CASE					:			str							= date_input[2]
				# Validate
				if sep_a not in ["-", "/"]:
								raise ValueError("""Date separator must be '-' or '/'"""	)

				# Get day
				_SCREAMING_SNAKE_CASE					:			int							= int(date_input[3] + date_input[4]	)
				# Validate
				if not 0 < d < 32:
								raise ValueError("""Date must be between 1 - 31"""	)

				# Get second separator
				_SCREAMING_SNAKE_CASE					:			str							= date_input[5]
				# Validate
				if sep_a not in ["-", "/"]:
								raise ValueError("""Date separator must be '-' or '/'"""	)

				# Get year
				_SCREAMING_SNAKE_CASE					:			int							= int(date_input[6] + date_input[7] + date_input[8] + date_input[9]	)
				# Arbitrary year range
				if not 45 < y < 8500:
								raise ValueError(
								    """Year out of range. There has to be some sort of limit...right?"""	)

				# Get datetime obj for validation
				_SCREAMING_SNAKE_CASE					:			Optional[int]							= datetime.date(int(SCREAMING_SNAKE_CASE__	)				, int(SCREAMING_SNAKE_CASE__	)				, int(SCREAMING_SNAKE_CASE__	)	)

				# Start math
				if m <= 2:
								_SCREAMING_SNAKE_CASE					:			Union[str, Any]							= y - 1
								_SCREAMING_SNAKE_CASE					:			Optional[int]							= m + 12
				# maths var
				_SCREAMING_SNAKE_CASE					:			int							= int(str(SCREAMING_SNAKE_CASE__	)[:2]	)
				_SCREAMING_SNAKE_CASE					:			int							= int(str(SCREAMING_SNAKE_CASE__	)[2:]	)
				_SCREAMING_SNAKE_CASE					:			int							= int(2.6 * m - 5.3_9	)
				_SCREAMING_SNAKE_CASE					:			int							= int(c / 4	)
				_SCREAMING_SNAKE_CASE					:			int							= int(k / 4	)
				_SCREAMING_SNAKE_CASE					:			int							= int(d + k	)
				_SCREAMING_SNAKE_CASE					:			int							= int(t + u + v + x	)
				_SCREAMING_SNAKE_CASE					:			int							= int(z - (2 * c)	)
				_SCREAMING_SNAKE_CASE					:			int							= round(w % 7	)
				# End math

				# Validate math
				if f != convert_datetime_days[dt_ck.weekday()]:
								raise AssertionError("""The date was evaluated incorrectly. Contact developer."""	)

				# Response
				_SCREAMING_SNAKE_CASE					:			str							= f"""Your date {date_input}, is a {days[str(SCREAMING_SNAKE_CASE__	)]}!"""
				return response


if __name__ == "__main__":
				import doctest

				doctest.testmod()
				UpperCAmelCase_						:  Tuple				  =						argparse.ArgumentParser(
				    description=(
				        'Find out what day of the week nearly any date is or was. Enter '
				        'date as a string in the mm-dd-yyyy or mm/dd/yyyy format'
				    )
				)
				parser.add_argument(
				    'date_input', type=str, help='Date as a string (mm-dd-yyyy or mm/dd/yyyy)'
				)
				UpperCAmelCase_						:  List[Any]				  =						parser.parse_args()
				zeller(args.date_input)




