

'''simple docstring'''
def       a__    (  _SCREAMING_SNAKE_CASE					:    str     ,							_SCREAMING_SNAKE_CASE					:    str							)			-> str:


	"""simple docstring"""





	if not isinstance(_SCREAMING_SNAKE_CASE     ,							_SCREAMING_SNAKE_CASE							):
		raise TypeError("plaintext must be a string"							)
	if not isinstance(_SCREAMING_SNAKE_CASE     ,							_SCREAMING_SNAKE_CASE							):
		raise TypeError("key must be a string"							)

	if not plaintext:
		raise ValueError("plaintext is empty"							)
	if not key:
		raise ValueError("key is empty"							)

	key += plaintext
	UpperCAmelCase_			:	Optional[int]      =   plaintext.lower()
	UpperCAmelCase_			:	Tuple      =   key.lower()
	UpperCAmelCase_			:	Tuple      =   0
	UpperCAmelCase_			:	Optional[Any]      =   0
	UpperCAmelCase_			:	Union[str, Any]      =   ""
	while plaintext_iterator < len(_SCREAMING_SNAKE_CASE							):
		if (
		    ord(plaintext[plaintext_iterator]							) < 97
		    or ord(plaintext[plaintext_iterator]							) > 1_22
		):
			ciphertext += plaintext[plaintext_iterator]
			plaintext_iterator += 1
		elif ord(key[key_iterator]							) < 97 or ord(key[key_iterator]							) > 1_22:
			key_iterator += 1
		else:
			ciphertext += chr(
			    (
			        (ord(plaintext[plaintext_iterator]							) - 97 + ord(key[key_iterator]							))
			        - 97
			    )
			    % 26
			    + 97							)
			key_iterator += 1
			plaintext_iterator += 1
	return ciphertext


def       a__    (  _SCREAMING_SNAKE_CASE					:    str     ,							_SCREAMING_SNAKE_CASE					:    str							)			-> str:


	"""simple docstring"""





	if not isinstance(_SCREAMING_SNAKE_CASE     ,							_SCREAMING_SNAKE_CASE							):
		raise TypeError("ciphertext must be a string"							)
	if not isinstance(_SCREAMING_SNAKE_CASE     ,							_SCREAMING_SNAKE_CASE							):
		raise TypeError("key must be a string"							)

	if not ciphertext:
		raise ValueError("ciphertext is empty"							)
	if not key:
		raise ValueError("key is empty"							)

	UpperCAmelCase_			:	Union[str, Any]      =   key.lower()
	UpperCAmelCase_			:	Optional[Any]      =   0
	UpperCAmelCase_			:	Union[str, Any]      =   0
	UpperCAmelCase_			:	List[str]      =   ""
	while ciphertext_iterator < len(_SCREAMING_SNAKE_CASE							):
		if (
		    ord(ciphertext[ciphertext_iterator]							) < 97
		    or ord(ciphertext[ciphertext_iterator]							) > 1_22
		):
			plaintext += ciphertext[ciphertext_iterator]
		else:
			plaintext += chr(
			    (ord(ciphertext[ciphertext_iterator]							) - ord(key[key_iterator]							)) % 26
			    + 97							)
			key += chr(
			    (ord(ciphertext[ciphertext_iterator]							) - ord(key[key_iterator]							)) % 26
			    + 97							)
			key_iterator += 1
		ciphertext_iterator += 1
	return plaintext


if __name__ == "__main__":
					import doctest

					doctest.testmod()
					_lowerCamelCase	 =			int(input("""Type 1 to encrypt or 2 to decrypt:"""))
					if operation == 1:
										_lowerCamelCase	 =			input("""Typeplaintext to be encrypted:\n""")
										_lowerCamelCase	 =			input("""Type the key:\n""")
										print(encrypt(plaintext, key))
					elif operation == 2:
										_lowerCamelCase	 =			input("""Type the ciphertext to be decrypted:\n""")
										_lowerCamelCase	 =			input("""Type the key:\n""")
										print(decrypt(ciphertext, key))
					decrypt("""jsqqs avvwo""", """coffee""")







'''simple docstring'''






import torch

from diffusers import HeunDiscreteScheduler
from diffusers.utils import torch_device

from .test_schedulers import SchedulerCommonTest
class 	SCREAMING_SNAKE_CASE__			(				_UpperCAmelCase      ):
    _A			    =							(HeunDiscreteScheduler,)
    _A			    =							10




    def   __lowerCamelCase      (					self				,     **lowercase__			):






          """simple docstring"""






          SCREAMING_SNAKE_CASE_      :			List[Any]     =       {
              "num_train_timesteps": 1100,
              "beta_start": 0.0001,
              "beta_end": 0.02,
              "beta_schedule": "linear",
          }

          config.update(**lowercase__			)
          return config




    def   __lowerCamelCase      (					self			):






          """simple docstring"""






          for timesteps in [10, 50, 100, 1000]:
                self.check_over_configs(num_train_timesteps=lowercase__			)




    def   __lowerCamelCase      (					self			):






          """simple docstring"""






          for beta_start, beta_end in zip([0.00001, 0.0001, 0.001]				,     [0.0002, 0.002, 0.02]			):
                self.check_over_configs(beta_start=lowercase__				,     beta_end=lowercase__			)




    def   __lowerCamelCase      (					self			):






          """simple docstring"""






          for schedule in ["linear", "scaled_linear", "exp"]:
                self.check_over_configs(beta_schedule=lowercase__			)




    def   __lowerCamelCase      (					self			):






          """simple docstring"""






          for clip_sample_range in [1.0, 2.0, 3.0]:
                self.check_over_configs(clip_sample_range=lowercase__				,     clip_sample=lowercase__			)




    def   __lowerCamelCase      (					self			):






          """simple docstring"""






          for prediction_type in ["epsilon", "v_prediction", "sample"]:
                self.check_over_configs(prediction_type=lowercase__			)




    def   __lowerCamelCase      (					self			):






          """simple docstring"""






          SCREAMING_SNAKE_CASE_      :			Tuple     =       self.scheduler_classes[0]
          SCREAMING_SNAKE_CASE_      :			List[str]     =       self.get_scheduler_config()
          SCREAMING_SNAKE_CASE_      :			List[str]     =       scheduler_class(**lowercase__			)

          scheduler.set_timesteps(self.num_inference_steps			)

          SCREAMING_SNAKE_CASE_      :			int     =       self.dummy_model()
          SCREAMING_SNAKE_CASE_      :			Dict     =       self.dummy_sample_deter * scheduler.init_noise_sigma
          SCREAMING_SNAKE_CASE_      :			Optional[int]     =       sample.to(lowercase__			)

          for i, t in enumerate(scheduler.timesteps			):
                SCREAMING_SNAKE_CASE_      :			Optional[Any]     =       scheduler.scale_model_input(lowercase__				,     lowercase__			)

                SCREAMING_SNAKE_CASE_      :			Dict     =       model(lowercase__				,     lowercase__			)

                SCREAMING_SNAKE_CASE_      :			str     =       scheduler.step(lowercase__				,     lowercase__				,     lowercase__			)
                SCREAMING_SNAKE_CASE_      :			Dict     =       output.prev_sample

          SCREAMING_SNAKE_CASE_      :			List[Any]     =       torch.sum(torch.abs(lowercase__			)			)
          SCREAMING_SNAKE_CASE_      :			List[str]     =       torch.mean(torch.abs(lowercase__			)			)

          if torch_device in ["cpu", "mps"]:
                assert abs(result_sum.item() - 0.1233			) < 1e-2
                assert abs(result_mean.item() - 0.0002			) < 1e-3
          else:
                # CUDA
                assert abs(result_sum.item() - 0.1233			) < 1e-2
                assert abs(result_mean.item() - 0.0002			) < 1e-3




    def   __lowerCamelCase      (					self			):






          """simple docstring"""






          SCREAMING_SNAKE_CASE_      :			Optional[Any]     =       self.scheduler_classes[0]
          SCREAMING_SNAKE_CASE_      :			Optional[int]     =       self.get_scheduler_config(prediction_type="v_prediction"			)
          SCREAMING_SNAKE_CASE_      :			Any     =       scheduler_class(**lowercase__			)

          scheduler.set_timesteps(self.num_inference_steps			)

          SCREAMING_SNAKE_CASE_      :			Any     =       self.dummy_model()
          SCREAMING_SNAKE_CASE_      :			Union[str, Any]     =       self.dummy_sample_deter * scheduler.init_noise_sigma
          SCREAMING_SNAKE_CASE_      :			List[str]     =       sample.to(lowercase__			)

          for i, t in enumerate(scheduler.timesteps			):
                SCREAMING_SNAKE_CASE_      :			Tuple     =       scheduler.scale_model_input(lowercase__				,     lowercase__			)

                SCREAMING_SNAKE_CASE_      :			int     =       model(lowercase__				,     lowercase__			)

                SCREAMING_SNAKE_CASE_      :			Optional[Any]     =       scheduler.step(lowercase__				,     lowercase__				,     lowercase__			)
                SCREAMING_SNAKE_CASE_      :			Optional[int]     =       output.prev_sample

          SCREAMING_SNAKE_CASE_      :			Union[str, Any]     =       torch.sum(torch.abs(lowercase__			)			)
          SCREAMING_SNAKE_CASE_      :			int     =       torch.mean(torch.abs(lowercase__			)			)

          if torch_device in ["cpu", "mps"]:
                assert abs(result_sum.item() - 4.69_34e-07			) < 1e-2
                assert abs(result_mean.item() - 6.11_12e-10			) < 1e-3
          else:
                # CUDA
                assert abs(result_sum.item() - 4.6_93_42_86_50_17_09_72e-07			) < 1e-2
                assert abs(result_mean.item() - 0.0002			) < 1e-3




    def   __lowerCamelCase      (					self			):






          """simple docstring"""






          SCREAMING_SNAKE_CASE_      :			List[str]     =       self.scheduler_classes[0]
          SCREAMING_SNAKE_CASE_      :			Union[str, Any]     =       self.get_scheduler_config()
          SCREAMING_SNAKE_CASE_      :			List[Any]     =       scheduler_class(**lowercase__			)

          scheduler.set_timesteps(self.num_inference_steps				,     device=lowercase__			)

          SCREAMING_SNAKE_CASE_      :			Any     =       self.dummy_model()
          SCREAMING_SNAKE_CASE_      :			str     =       self.dummy_sample_deter.to(lowercase__			) * scheduler.init_noise_sigma

          for t in scheduler.timesteps:
                SCREAMING_SNAKE_CASE_      :			Optional[int]     =       scheduler.scale_model_input(lowercase__				,     lowercase__			)

                SCREAMING_SNAKE_CASE_      :			Dict     =       model(lowercase__				,     lowercase__			)

                SCREAMING_SNAKE_CASE_      :			Optional[Any]     =       scheduler.step(lowercase__				,     lowercase__				,     lowercase__			)
                SCREAMING_SNAKE_CASE_      :			List[Any]     =       output.prev_sample

          SCREAMING_SNAKE_CASE_      :			str     =       torch.sum(torch.abs(lowercase__			)			)
          SCREAMING_SNAKE_CASE_      :			List[Any]     =       torch.mean(torch.abs(lowercase__			)			)

          if str(lowercase__			).startswith("cpu"			):
                # The following sum varies between 148 and 156 on mps. Why?
                assert abs(result_sum.item() - 0.1233			) < 1e-2
                assert abs(result_mean.item() - 0.0002			) < 1e-3
          elif str(lowercase__			).startswith("mps"			):
                # Larger tolerance on mps
                assert abs(result_mean.item() - 0.0002			) < 1e-2
          else:
                # CUDA
                assert abs(result_sum.item() - 0.1233			) < 1e-2
                assert abs(result_mean.item() - 0.0002			) < 1e-3







    def   __lowerCamelCase      (					self			):






          """simple docstring"""






          SCREAMING_SNAKE_CASE_      :			Union[str, Any]     =       self.scheduler_classes[0]
          SCREAMING_SNAKE_CASE_      :			int     =       self.get_scheduler_config()
          SCREAMING_SNAKE_CASE_      :			Optional[int]     =       scheduler_class(**lowercase__				,     use_karras_sigmas=lowercase__			)

          scheduler.set_timesteps(self.num_inference_steps				,     device=lowercase__			)

          SCREAMING_SNAKE_CASE_      :			List[str]     =       self.dummy_model()
          SCREAMING_SNAKE_CASE_      :			Optional[int]     =       self.dummy_sample_deter.to(lowercase__			) * scheduler.init_noise_sigma
          SCREAMING_SNAKE_CASE_      :			Any     =       sample.to(lowercase__			)

          for t in scheduler.timesteps:
                SCREAMING_SNAKE_CASE_      :			Optional[int]     =       scheduler.scale_model_input(lowercase__				,     lowercase__			)

                SCREAMING_SNAKE_CASE_      :			List[str]     =       model(lowercase__				,     lowercase__			)

                SCREAMING_SNAKE_CASE_      :			Union[str, Any]     =       scheduler.step(lowercase__				,     lowercase__				,     lowercase__			)
                SCREAMING_SNAKE_CASE_      :			Tuple     =       output.prev_sample

          SCREAMING_SNAKE_CASE_      :			Any     =       torch.sum(torch.abs(lowercase__			)			)
          SCREAMING_SNAKE_CASE_      :			Union[str, Any]     =       torch.mean(torch.abs(lowercase__			)			)

          assert abs(result_sum.item() - 0.00015			) < 1e-2
          assert abs(result_mean.item() - 1.98_69_55_45_35_03_46_95e-07			) < 1e-2

