





'''simple docstring'''





from __future__ import annotations



def     _lowerCAmelCase		(  _lowerCAmelCase  ,_lowerCAmelCase = None  ,_lowerCAmelCase = None  ,_lowerCAmelCase = False  ,):
   '''simple docstring'''


   A_     :				str			      =	cipher_alphabet or [chr(_lowerCAmelCase     ) for i in range(9_7  ,1_2_3     )]

   # If the argument is None or the user provided an empty dictionary
   if not frequencies_dict:
      # Frequencies of letters in the english language (how much they show up)
      A_     :				Dict			      =	{
          """a""": 0.0_8497,
          """b""": 0.0_1492,
          """c""": 0.0_2202,
          """d""": 0.0_4253,
          """e""": 0.1_1162,
          """f""": 0.0_2228,
          """g""": 0.0_2015,
          """h""": 0.0_6094,
          """i""": 0.0_7546,
          """j""": 0.0_0153,
          """k""": 0.0_1292,
          """l""": 0.0_4025,
          """m""": 0.0_2406,
          """n""": 0.0_6749,
          """o""": 0.0_7507,
          """p""": 0.0_1929,
          """q""": 0.0_0095,
          """r""": 0.0_7587,
          """s""": 0.0_6327,
          """t""": 0.0_9356,
          """u""": 0.0_2758,
          """v""": 0.0_0978,
          """w""": 0.0_2560,
          """x""": 0.0_0150,
          """y""": 0.0_1994,
          """z""": 0.0_0077,
      }
   else:
      # Custom frequencies dictionary
      A_     :				Optional[int]			      =	frequencies_dict

   if not case_sensitive:
      A_     :				str			      =	ciphertext.lower()

   # Chi squared statistic values
   A_     :				dict[int, tuple[float, str]]			      =	{}

   # cycle through all of the shifts
   for shift in range(len(_lowerCAmelCase     )     ):
      A_     :				List[Any]			      =	""""""

      # decrypt the message with the shift
      for letter in ciphertext:
         try:
            # Try to index the letter in the alphabet
            A_     :				List[str]			      =	(alphabet_letters.index(letter.lower()     ) - shift) % len(
                _lowerCAmelCase     )
            decrypted_with_shift += (
                alphabet_letters[new_key].upper()
                if case_sensitive and letter.isupper()
                else alphabet_letters[new_key]
            )
         except ValueError:
            # Append the character if it isn't in the alphabet
            decrypted_with_shift += letter

      A_     :				Dict			      =	0.0

      # Loop through each letter in the decoded message with the shift
      for letter in decrypted_with_shift:
         if case_sensitive:
            A_     :				Union[str, Any]			      =	letter.lower()
            if letter in frequencies:
               # Get the amount of times the letter occurs in the message
               A_     :				Union[str, Any]			      =	decrypted_with_shift.lower().count(_lowerCAmelCase     )

               # Get the excepcted amount of times the letter should appear based
               # on letter frequencies
               A_     :				List[Any]			      =	frequencies[letter] * occurrences

               # Complete the chi squared statistic formula
               A_     :				Tuple			      =	((occurrences - expected) ** 2) / expected

               # Add the margin of error to the total chi squared statistic
               chi_squared_statistic += chi_letter_value
         else:
            if letter.lower() in frequencies:
               # Get the amount of times the letter occurs in the message
               A_     :				Optional[Any]			      =	decrypted_with_shift.count(_lowerCAmelCase     )

               # Get the excepcted amount of times the letter should appear based
               # on letter frequencies
               A_     :				Any			      =	frequencies[letter] * occurrences

               # Complete the chi squared statistic formula
               A_     :				Optional[Any]			      =	((occurrences - expected) ** 2) / expected

               # Add the margin of error to the total chi squared statistic
               chi_squared_statistic += chi_letter_value

        # Add the data to the chi_squared_statistic_values dictionary
      A_     :				Union[str, Any]			      =	(
          chi_squared_statistic,
          decrypted_with_shift,
      )

   # Get the most likely cipher by finding the cipher with the smallest chi squared
   # statistic
   def chi_squared_statistic_values_sorting_key(_lowerCAmelCase     ) -> tuple[float, str]:
      return chi_squared_statistic_values[key]

   A_     :				int			      =	min(
       _lowerCAmelCase  ,key=_lowerCAmelCase  ,)

   # Get all the data from the most likely cipher (key, decoded message)
   (
       A_				
   )     :				Union[str, Any]			      =	chi_squared_statistic_values[most_likely_cipher]

   # Return the data on the most likely shift
   return (
       most_likely_cipher,
       most_likely_cipher_chi_squared_value,
       decoded_most_likely_cipher,
   )













import gc
import unittest

import numpy as np
import torch
from transformers import CLIPTextConfig, CLIPTextModel, XLMRobertaTokenizer

from diffusers import AltDiffusionPipeline, AutoencoderKL, DDIMScheduler, PNDMScheduler, UNetaDConditionModel
from diffusers.pipelines.alt_diffusion.modeling_roberta_series import (
    RobertaSeriesConfig,
    RobertaSeriesModelWithTransformation,
)
from diffusers.utils import slow, torch_device
from diffusers.utils.testing_utils import enable_full_determinism, require_torch_gpu

from ..pipeline_params import TEXT_TO_IMAGE_BATCH_PARAMS, TEXT_TO_IMAGE_IMAGE_PARAMS, TEXT_TO_IMAGE_PARAMS
from ..test_pipelines_common import PipelineKarrasSchedulerTesterMixin, PipelineLatentTesterMixin, PipelineTesterMixin


enable_full_determinism()

class    _UpperCAmelCase							(		_lowerCamelCase			,       _lowerCamelCase			,       _lowerCamelCase			,       unittest.TestCase     ):
      a						       =							AltDiffusionPipeline
      a						       =							TEXT_TO_IMAGE_PARAMS
      a						       =							TEXT_TO_IMAGE_BATCH_PARAMS
      a						       =							TEXT_TO_IMAGE_IMAGE_PARAMS
      a						       =							TEXT_TO_IMAGE_IMAGE_PARAMS
      def 		_lowerCamelCase      (		self       ):
         torch.manual_seed(0       )
         A_     :				Optional[int]			      =	UNetaDConditionModel(
             block_out_channels=(32, 64)      ,       layers_per_block=2      ,       sample_size=32      ,       in_channels=4      ,       out_channels=4      ,       down_block_types=("""DownBlock2D""", """CrossAttnDownBlock2D""")      ,       up_block_types=("""CrossAttnUpBlock2D""", """UpBlock2D""")      ,       cross_attention_dim=32      ,       )
         A_     :				List[Any]			      =	DDIMScheduler(
             beta_start=0.0_0085      ,       beta_end=0.012      ,       beta_schedule="""scaled_linear"""      ,       clip_sample=a__      ,       set_alpha_to_one=a__      ,       )
         torch.manual_seed(0       )
         A_     :				int			      =	AutoencoderKL(
             block_out_channels=[32, 64]      ,       in_channels=3      ,       out_channels=3      ,       down_block_types=["""DownEncoderBlock2D""", """DownEncoderBlock2D"""]      ,       up_block_types=["""UpDecoderBlock2D""", """UpDecoderBlock2D"""]      ,       latent_channels=4      ,       )

         # TODO: address the non-deterministic text encoder (fails for save-load tests)
         # torch.manual_seed(0)
         # text_encoder_config = RobertaSeriesConfig(
         #     hidden_size=32,
         #     project_dim=32,
         #     intermediate_size=37,
         #     layer_norm_eps=1e-05,
         #     num_attention_heads=4,
         #     num_hidden_layers=5,
         #     vocab_size=5002,
         # )
         # text_encoder = RobertaSeriesModelWithTransformation(text_encoder_config)

         torch.manual_seed(0       )
         A_     :				Optional[int]			      =	CLIPTextConfig(
             bos_token_id=0      ,       eos_token_id=2      ,       hidden_size=32      ,       projection_dim=32      ,       intermediate_size=37      ,       layer_norm_eps=1E-05      ,       num_attention_heads=4      ,       num_hidden_layers=5      ,       pad_token_id=1      ,       vocab_size=5002      ,       )
         A_     :				Optional[Any]			      =	CLIPTextModel(a__       )

         A_     :				Union[str, Any]			      =	XLMRobertaTokenizer.from_pretrained("""hf-internal-testing/tiny-xlm-roberta"""       )
         A_     :				str			      =	77

         A_     :				Optional[Any]			      =	{
             """unet""": unet,
             """scheduler""": scheduler,
             """vae""": vae,
             """text_encoder""": text_encoder,
             """tokenizer""": tokenizer,
             """safety_checker""": None,
             """feature_extractor""": None,
         }
         return components
      def 		_lowerCamelCase      (		self      ,       a__      ,       a__=0       ):
         if str(a__       ).startswith("""mps"""       ):
            A_     :				Union[str, Any]			      =	torch.manual_seed(a__       )
         else:
            A_     :				Dict			      =	torch.Generator(device=a__       ).manual_seed(a__       )
         A_     :				Dict			      =	{
             """prompt""": """A painting of a squirrel eating a burger""",
             """generator""": generator,
             """num_inference_steps""": 2,
             """guidance_scale""": 6.0,
             """output_type""": """numpy""",
         }
         return inputs
      def 		_lowerCamelCase      (		self       ):
         super().test_attention_slicing_forward_pass(expected_max_diff=3E-3       )
      def 		_lowerCamelCase      (		self       ):
         super().test_inference_batch_single_identical(expected_max_diff=3E-3       )
      def 		_lowerCamelCase      (		self       ):
         A_     :				Optional[Any]			      =	"""cpu"""  # ensure determinism for the device-dependent torch.Generator

         A_     :				Union[str, Any]			      =	self.get_dummy_components()
         torch.manual_seed(0       )
         A_     :				List[str]			      =	RobertaSeriesConfig(
             hidden_size=32      ,       project_dim=32      ,       intermediate_size=37      ,       layer_norm_eps=1E-05      ,       num_attention_heads=4      ,       num_hidden_layers=5      ,       vocab_size=5002      ,       )
         # TODO: remove after fixing the non-deterministic text encoder
         A_     :				Dict			      =	RobertaSeriesModelWithTransformation(a__       )
         A_     :				Any			      =	text_encoder

         A_     :				Tuple			      =	AltDiffusionPipeline(**a__       )
         A_     :				int			      =	alt_pipe.to(a__       )
         alt_pipe.set_progress_bar_config(disable=a__       )

         A_     :				Union[str, Any]			      =	self.get_dummy_inputs(a__       )
         A_     :				Tuple			      =	"""A photo of an astronaut"""
         A_     :				Dict			      =	alt_pipe(**a__       )
         A_     :				List[str]			      =	output.images
         A_     :				List[Any]			      =	image[0, -3:, -3:, -1]

         assert image.shape == (1, 64, 64, 3)
         A_     :				Tuple			      =	np.array(
             [0.574_8162, 0.6044_7145, 0.4882_1217, 0.5010_0636, 0.543_1185, 0.4576_3683, 0.4965_7696, 0.4813_2733, 0.4757_3093]       )

         assert np.abs(image_slice.flatten() - expected_slice       ).max() < 1E-2






      def 		_lowerCamelCase      (		self       ):
         A_     :				Tuple			      =	"""cpu"""  # ensure determinism for the device-dependent torch.Generator

         A_     :				Union[str, Any]			      =	self.get_dummy_components()
         A_     :				str			      =	PNDMScheduler(skip_prk_steps=a__       )
         torch.manual_seed(0       )
         A_     :				Any			      =	RobertaSeriesConfig(
             hidden_size=32      ,       project_dim=32      ,       intermediate_size=37      ,       layer_norm_eps=1E-05      ,       num_attention_heads=4      ,       num_hidden_layers=5      ,       vocab_size=5002      ,       )
         # TODO: remove after fixing the non-deterministic text encoder
         A_     :				int			      =	RobertaSeriesModelWithTransformation(a__       )
         A_     :				Any			      =	text_encoder
         A_     :				Any			      =	AltDiffusionPipeline(**a__       )
         A_     :				int			      =	alt_pipe.to(a__       )
         alt_pipe.set_progress_bar_config(disable=a__       )

         A_     :				Union[str, Any]			      =	self.get_dummy_inputs(a__       )
         A_     :				Union[str, Any]			      =	alt_pipe(**a__       )
         A_     :				List[str]			      =	output.images
         A_     :				List[Any]			      =	image[0, -3:, -3:, -1]

         assert image.shape == (1, 64, 64, 3)
         A_     :				List[Any]			      =	np.array(
             [0.5160_5093, 0.570_7241, 0.4736_5507, 0.5057_8886, 0.563_3877, 0.464_2503, 0.518_2081, 0.4876_3484, 0.4908_4237]       )

         assert np.abs(image_slice.flatten() - expected_slice       ).max() < 1E-2






@slow
@require_torch_gpu
class    _UpperCAmelCase							(		unittest.TestCase     ):
      def 		_lowerCamelCase      (		self       ):
         # clean up the VRAM after each test
         super().tearDown()
         gc.collect()
         torch.cuda.empty_cache()
      def 		_lowerCamelCase      (		self       ):
         # make sure here that pndm scheduler skips prk
         A_     :				Any			      =	AltDiffusionPipeline.from_pretrained("""BAAI/AltDiffusion"""      ,       safety_checker=a__       )
         A_     :				Optional[int]			      =	alt_pipe.to(a__       )
         alt_pipe.set_progress_bar_config(disable=a__       )

         A_     :				Tuple			      =	"""A painting of a squirrel eating a burger"""
         A_     :				Tuple			      =	torch.manual_seed(0       )
         A_     :				int			      =	alt_pipe([prompt]      ,       generator=a__      ,       guidance_scale=6.0      ,       num_inference_steps=20      ,       output_type="""np"""       )

         A_     :				Optional[Any]			      =	output.images

         A_     :				int			      =	image[0, -3:, -3:, -1]

         assert image.shape == (1, 512, 512, 3)
         A_     :				str			      =	np.array([0.1010, 0.0800, 0.0794, 0.0885, 0.0843, 0.0762, 0.0769, 0.0729, 0.0586]       )

         assert np.abs(image_slice.flatten() - expected_slice       ).max() < 1E-2






      def 		_lowerCamelCase      (		self       ):
         A_     :				Dict			      =	DDIMScheduler.from_pretrained("""BAAI/AltDiffusion"""      ,       subfolder="""scheduler"""       )

         A_     :				int			      =	AltDiffusionPipeline.from_pretrained("""BAAI/AltDiffusion"""      ,       scheduler=a__      ,       safety_checker=a__       )
         A_     :				Dict			      =	alt_pipe.to(a__       )
         alt_pipe.set_progress_bar_config(disable=a__       )

         A_     :				Optional[int]			      =	"""A painting of a squirrel eating a burger"""
         A_     :				Any			      =	torch.manual_seed(0       )

         A_     :				List[str]			      =	alt_pipe([prompt]      ,       generator=a__      ,       num_inference_steps=2      ,       output_type="""numpy"""       )
         A_     :				List[Any]			      =	output.images

         A_     :				Tuple			      =	image[0, -3:, -3:, -1]

         assert image.shape == (1, 512, 512, 3)
         A_     :				Any			      =	np.array([0.4019, 0.4052, 0.3810, 0.4119, 0.3916, 0.3982, 0.4651, 0.4195, 0.5323]       )

         assert np.abs(image_slice.flatten() - expected_slice       ).max() < 1E-2






