





from __future__ import annotations

from collections.abc import Callable




def     a__ (					lowercase__  ,    lowercase__  ,    lowercase__  ,    lowercase__ = 1_0_0  ,    ):






   '''simple docstring'''






   UpperCAmelCase_											=x_start
   UpperCAmelCase_											=fnc(lowercase__  )
   UpperCAmelCase_											=0.0
   for _ in range(lowercase__  ):
      # Approximates small segments of curve as linear and solve
      # for trapezoidal area
      UpperCAmelCase_											=(x_end - x_start) / steps + xa
      UpperCAmelCase_											=fnc(lowercase__  )
      area += abs(fxa + fxa  ) * (xa - xa) / 2
      # Increment step
      UpperCAmelCase_											=xa
      UpperCAmelCase_											=fxa
   return area


if __name__ == "__main__":




     def     a__ (					lowercase__  ):






        '''simple docstring'''






        return x**3 + x**2

     print("""f(x) = x^3 + x^2""")
     print("""The area between the curve, x = -5, x = 5 and the x axis is:""")
     __lowercase  :   Tuple						      =10
     while i <= 10_0000:
          print(f"""with {i} steps: {trapezoidal_area(f, -5, 5, i)}""")
          i *= 10











import gc
import random
import tempfile
import unittest

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

from diffusers import AutoencoderKL, DDIMScheduler, LMSDiscreteScheduler, PNDMScheduler, UNetaDConditionModel
from diffusers.pipelines.stable_diffusion_safe import StableDiffusionPipelineSafe as StableDiffusionPipeline
from diffusers.utils import floats_tensor, nightly, torch_device
from diffusers.utils.testing_utils import require_torch_gpu

class      A       (	unittest.TestCase						):



      def 	lowerCAmelCase__    (	self:						str       )						->    Optional[Any]:
         '''simple docstring'''

         super().tearDown()
         gc.collect()
         torch.cuda.empty_cache()



      @property
      def 	lowerCAmelCase__    (	self:						Optional[int]       )						->    List[str]:
         '''simple docstring'''

         UpperCAmelCase_											=1
         UpperCAmelCase_											=3
         UpperCAmelCase_											=(32, 32)

         UpperCAmelCase_											=floats_tensor((batch_size, num_channels) + sizes		,  rng=random.Random(0       )       ).to(_lowerCAmelCase       )
         return image



      @property
      def 	lowerCAmelCase__    (	self:						Any       )						->    Union[str, Any]:
         '''simple docstring'''

         torch.manual_seed(0       )
         UpperCAmelCase_											=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		,  )
         return model



      @property
      def 	lowerCAmelCase__    (	self:						List[Any]       )						->    int:
         '''simple docstring'''

         torch.manual_seed(0       )
         UpperCAmelCase_											=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		,  )
         return model



      @property
      def 	lowerCAmelCase__    (	self:						Dict       )						->    str:
         '''simple docstring'''

         torch.manual_seed(0       )
         UpperCAmelCase_											=CLIPTextConfig(
             bos_token_id=0		,  eos_token_id=2		,  hidden_size=32		,  intermediate_size=37		,  layer_norm_eps=1e-05		,  num_attention_heads=4		,  num_hidden_layers=5		,  pad_token_id=1		,  vocab_size=1000		,  )
         return CLIPTextModel(_lowerCAmelCase       )



      @property
      def 	lowerCAmelCase__    (	self:						Optional[int]       )						->    Optional[Any]:
         '''simple docstring'''

         def extract(*_lowerCAmelCase:						List[str]		,  **_lowerCAmelCase:						List[str]       ):

            class      A       :



                  def __init__(	self:						List[str]       )						->    Any:
                     '''simple docstring'''

                     UpperCAmelCase_											=torch.ones([0]       )






                  def 	lowerCAmelCase__    (	self:						List[str]		,  _lowerCAmelCase:						Dict       )						->    List[Any]:
                     '''simple docstring'''

                     self.pixel_values.to(_lowerCAmelCase       )
                     return self

            return Out()

         return extract



      def 	lowerCAmelCase__    (	self:						Tuple       )						->    Union[str, Any]:
         '''simple docstring'''

         UpperCAmelCase_											="cpu"  # ensure determinism for the device-dependent torch.Generator
         UpperCAmelCase_											=self.dummy_cond_unet
         UpperCAmelCase_											=DDIMScheduler(
             beta_start=0.0_00_85		,  beta_end=0.0_12		,  beta_schedule="scaled_linear"		,  clip_sample=_lowerCAmelCase		,  set_alpha_to_one=_lowerCAmelCase		,  )

         UpperCAmelCase_											=self.dummy_vae
         UpperCAmelCase_											=self.dummy_text_encoder
         UpperCAmelCase_											=CLIPTokenizer.from_pretrained("hf-internal-testing/tiny-random-clip"       )

         # make sure here that pndm scheduler skips prk
         UpperCAmelCase_											=StableDiffusionPipeline(
             unet=_lowerCAmelCase		,  scheduler=_lowerCAmelCase		,  vae=_lowerCAmelCase		,  text_encoder=_lowerCAmelCase		,  tokenizer=_lowerCAmelCase		,  safety_checker=_lowerCAmelCase		,  feature_extractor=self.dummy_extractor		,  )
         UpperCAmelCase_											=sd_pipe.to(_lowerCAmelCase       )
         sd_pipe.set_progress_bar_config(disable=_lowerCAmelCase       )

         UpperCAmelCase_											="A painting of a squirrel eating a burger"

         UpperCAmelCase_											=torch.Generator(device=_lowerCAmelCase       ).manual_seed(0       )
         UpperCAmelCase_											=sd_pipe([prompt]		,  generator=_lowerCAmelCase		,  guidance_scale=6.0		,  num_inference_steps=2		,  output_type="np"       )
         UpperCAmelCase_											=output.images

         UpperCAmelCase_											=torch.Generator(device=_lowerCAmelCase       ).manual_seed(0       )
         UpperCAmelCase_											=sd_pipe(
             [prompt]		,  generator=_lowerCAmelCase		,  guidance_scale=6.0		,  num_inference_steps=2		,  output_type="np"		,  return_dict=_lowerCAmelCase		,  )[0]

         UpperCAmelCase_											=image[0, -3:, -3:, -1]
         UpperCAmelCase_											=image_from_tuple[0, -3:, -3:, -1]

         assert image.shape == (1, 64, 64, 3)
         UpperCAmelCase_											=np.array([0.57_56, 0.61_18, 0.50_05, 0.50_41, 0.54_71, 0.47_26, 0.49_76, 0.48_65, 0.48_64]       )

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



      def 	lowerCAmelCase__    (	self:						Optional[int]       )						->    List[Any]:
         '''simple docstring'''

         UpperCAmelCase_											="cpu"  # ensure determinism for the device-dependent torch.Generator
         UpperCAmelCase_											=self.dummy_cond_unet
         UpperCAmelCase_											=PNDMScheduler(skip_prk_steps=_lowerCAmelCase       )
         UpperCAmelCase_											=self.dummy_vae
         UpperCAmelCase_											=self.dummy_text_encoder
         UpperCAmelCase_											=CLIPTokenizer.from_pretrained("hf-internal-testing/tiny-random-clip"       )

         # make sure here that pndm scheduler skips prk
         UpperCAmelCase_											=StableDiffusionPipeline(
             unet=_lowerCAmelCase		,  scheduler=_lowerCAmelCase		,  vae=_lowerCAmelCase		,  text_encoder=_lowerCAmelCase		,  tokenizer=_lowerCAmelCase		,  safety_checker=_lowerCAmelCase		,  feature_extractor=self.dummy_extractor		,  )
         UpperCAmelCase_											=sd_pipe.to(_lowerCAmelCase       )
         sd_pipe.set_progress_bar_config(disable=_lowerCAmelCase       )

         UpperCAmelCase_											="A painting of a squirrel eating a burger"
         UpperCAmelCase_											=torch.Generator(device=_lowerCAmelCase       ).manual_seed(0       )
         UpperCAmelCase_											=sd_pipe([prompt]		,  generator=_lowerCAmelCase		,  guidance_scale=6.0		,  num_inference_steps=2		,  output_type="np"       )

         UpperCAmelCase_											=output.images

         UpperCAmelCase_											=torch.Generator(device=_lowerCAmelCase       ).manual_seed(0       )
         UpperCAmelCase_											=sd_pipe(
             [prompt]		,  generator=_lowerCAmelCase		,  guidance_scale=6.0		,  num_inference_steps=2		,  output_type="np"		,  return_dict=_lowerCAmelCase		,  )[0]

         UpperCAmelCase_											=image[0, -3:, -3:, -1]
         UpperCAmelCase_											=image_from_tuple[0, -3:, -3:, -1]

         assert image.shape == (1, 64, 64, 3)
         UpperCAmelCase_											=np.array([0.51_25, 0.57_16, 0.48_28, 0.50_60, 0.56_50, 0.47_68, 0.51_85, 0.48_95, 0.49_93]       )

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



      def 	lowerCAmelCase__    (	self:						List[Any]       )						->    str:
         '''simple docstring'''

         UpperCAmelCase_											=StableDiffusionPipeline.from_pretrained(
             "hf-internal-testing/tiny-stable-diffusion-lms-pipe"		,  safety_checker=_lowerCAmelCase       )
         assert isinstance(_lowerCAmelCase		,  _lowerCAmelCase       )
         assert isinstance(pipe.scheduler		,  _lowerCAmelCase       )
         assert pipe.safety_checker is None

         UpperCAmelCase_											=pipe("example prompt"		,  num_inference_steps=2       ).images[0]
         assert image is not None

         # check that there's no error when saving a pipeline with one of the models being None
         with tempfile.TemporaryDirectory() as tmpdirname:
            pipe.save_pretrained(_lowerCAmelCase       )
            UpperCAmelCase_											=StableDiffusionPipeline.from_pretrained(_lowerCAmelCase       )

         # sanity check that the pipeline still works
         assert pipe.safety_checker is None
         UpperCAmelCase_											=pipe("example prompt"		,  num_inference_steps=2       ).images[0]
         assert image is not None






      @unittest.skipIf(torch_device != "cuda"		,  "This test requires a GPU"       )
      def 	lowerCAmelCase__    (	self:						int       )						->    Optional[int]:
         '''simple docstring'''

         UpperCAmelCase_											=self.dummy_cond_unet
         UpperCAmelCase_											=PNDMScheduler(skip_prk_steps=_lowerCAmelCase       )
         UpperCAmelCase_											=self.dummy_vae
         UpperCAmelCase_											=self.dummy_text_encoder
         UpperCAmelCase_											=CLIPTokenizer.from_pretrained("hf-internal-testing/tiny-random-clip"       )

         # put models in fp16
         UpperCAmelCase_											=unet.half()
         UpperCAmelCase_											=vae.half()
         UpperCAmelCase_											=bert.half()

         # make sure here that pndm scheduler skips prk
         UpperCAmelCase_											=StableDiffusionPipeline(
             unet=_lowerCAmelCase		,  scheduler=_lowerCAmelCase		,  vae=_lowerCAmelCase		,  text_encoder=_lowerCAmelCase		,  tokenizer=_lowerCAmelCase		,  safety_checker=_lowerCAmelCase		,  feature_extractor=self.dummy_extractor		,  )
         UpperCAmelCase_											=sd_pipe.to(_lowerCAmelCase       )
         sd_pipe.set_progress_bar_config(disable=_lowerCAmelCase       )

         UpperCAmelCase_											="A painting of a squirrel eating a burger"
         UpperCAmelCase_											=sd_pipe([prompt]		,  num_inference_steps=2		,  output_type="np"       ).images

         assert image.shape == (1, 64, 64, 3)

@nightly
@require_torch_gpu
class      A       (	unittest.TestCase						):



      def 	lowerCAmelCase__    (	self:						List[Any]       )						->    Tuple:
         '''simple docstring'''

         super().tearDown()
         gc.collect()
         torch.cuda.empty_cache()



      def 	lowerCAmelCase__    (	self:						Union[str, Any]       )						->    Union[str, Any]:
         '''simple docstring'''

         UpperCAmelCase_											=StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5"		,  safety_checker=_lowerCAmelCase       )
         UpperCAmelCase_											=LMSDiscreteScheduler.from_config(sd_pipe.scheduler.config       )
         UpperCAmelCase_											=sd_pipe.to(_lowerCAmelCase       )
         sd_pipe.set_progress_bar_config(disable=_lowerCAmelCase       )

         UpperCAmelCase_											=(
             "portrait of girl with smokey eyes makeup in abandoned hotel, grange clothes, redshift, wide high angle"
             " coloured polaroid photograph with flash, kodak film, hyper real, stunning moody cinematography, with"
             " anamorphic lenses, by maripol, fallen angels by wong kar - wai, style of suspiria and neon demon and"
             " children from bahnhof zoo, detailed "
         )
         UpperCAmelCase_											=40_0366_0346
         UpperCAmelCase_											=7

         # without safety guidance (sld_guidance_scale = 0)
         UpperCAmelCase_											=torch.manual_seed(_lowerCAmelCase       )
         UpperCAmelCase_											=sd_pipe(
             [prompt]		,  generator=_lowerCAmelCase		,  guidance_scale=_lowerCAmelCase		,  num_inference_steps=50		,  output_type="np"		,  width=512		,  height=512		,  sld_guidance_scale=0		,  )

         UpperCAmelCase_											=output.images
         UpperCAmelCase_											=image[0, -3:, -3:, -1]
         UpperCAmelCase_											=[0.22_78, 0.22_31, 0.22_49, 0.23_33, 0.23_03, 0.18_85, 0.22_73, 0.21_44, 0.21_76]

         assert image.shape == (1, 512, 512, 3)

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

         # without safety guidance (strong configuration)
         UpperCAmelCase_											=torch.manual_seed(_lowerCAmelCase       )
         UpperCAmelCase_											=sd_pipe(
             [prompt]		,  generator=_lowerCAmelCase		,  guidance_scale=_lowerCAmelCase		,  num_inference_steps=50		,  output_type="np"		,  width=512		,  height=512		,  sld_guidance_scale=2000		,  sld_warmup_steps=7		,  sld_threshold=0.0_25		,  sld_momentum_scale=0.5		,  sld_mom_beta=0.7		,  )

         UpperCAmelCase_											=output.images
         UpperCAmelCase_											=image[0, -3:, -3:, -1]
         UpperCAmelCase_											=[0.23_83, 0.22_76, 0.2_36, 0.21_92, 0.21_86, 0.20_53, 0.19_71, 0.19_01, 0.17_19]

         assert image.shape == (1, 512, 512, 3)

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



      def 	lowerCAmelCase__    (	self:						Any       )						->    Union[str, Any]:
         '''simple docstring'''

         UpperCAmelCase_											=StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5"		,  safety_checker=_lowerCAmelCase       )
         UpperCAmelCase_											=LMSDiscreteScheduler.from_config(sd_pipe.scheduler.config       )
         UpperCAmelCase_											=sd_pipe.to(_lowerCAmelCase       )
         sd_pipe.set_progress_bar_config(disable=_lowerCAmelCase       )

         UpperCAmelCase_											="padme amidala taking a bath artwork, safe for work, no nudity"
         UpperCAmelCase_											=27_3497_1755
         UpperCAmelCase_											=7

         UpperCAmelCase_											=torch.manual_seed(_lowerCAmelCase       )
         UpperCAmelCase_											=sd_pipe(
             [prompt]		,  generator=_lowerCAmelCase		,  guidance_scale=_lowerCAmelCase		,  num_inference_steps=50		,  output_type="np"		,  width=512		,  height=512		,  sld_guidance_scale=0		,  )

         UpperCAmelCase_											=output.images
         UpperCAmelCase_											=image[0, -3:, -3:, -1]
         UpperCAmelCase_											=[0.35_02, 0.36_22, 0.33_96, 0.36_42, 0.34_78, 0.33_18, 0.35, 0.33_48, 0.32_97]

         assert image.shape == (1, 512, 512, 3)

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

         UpperCAmelCase_											=torch.manual_seed(_lowerCAmelCase       )
         UpperCAmelCase_											=sd_pipe(
             [prompt]		,  generator=_lowerCAmelCase		,  guidance_scale=_lowerCAmelCase		,  num_inference_steps=50		,  output_type="np"		,  width=512		,  height=512		,  sld_guidance_scale=2000		,  sld_warmup_steps=7		,  sld_threshold=0.0_25		,  sld_momentum_scale=0.5		,  sld_mom_beta=0.7		,  )

         UpperCAmelCase_											=output.images
         UpperCAmelCase_											=image[0, -3:, -3:, -1]
         UpperCAmelCase_											=[0.55_31, 0.52_06, 0.48_95, 0.51_56, 0.51_82, 0.47_51, 0.48_02, 0.48_03, 0.44_43]

         assert image.shape == (1, 512, 512, 3)

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






      def 	lowerCAmelCase__    (	self:						str       )						->    List[Any]:
         '''simple docstring'''

         UpperCAmelCase_											=StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5"       )
         UpperCAmelCase_											=sd_pipe.to(_lowerCAmelCase       )
         sd_pipe.set_progress_bar_config(disable=_lowerCAmelCase       )

         UpperCAmelCase_											=(
             "the four horsewomen of the apocalypse, painting by tom of finland, gaston bussiere, craig mullins, j. c."
             " leyendecker"
         )
         UpperCAmelCase_											=10_4435_5234
         UpperCAmelCase_											=12

         UpperCAmelCase_											=torch.manual_seed(_lowerCAmelCase       )
         UpperCAmelCase_											=sd_pipe(
             [prompt]		,  generator=_lowerCAmelCase		,  guidance_scale=_lowerCAmelCase		,  num_inference_steps=50		,  output_type="np"		,  width=512		,  height=512		,  sld_guidance_scale=0		,  )

         UpperCAmelCase_											=output.images
         UpperCAmelCase_											=image[0, -3:, -3:, -1]
         UpperCAmelCase_											=np.array([0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]       )

         assert image.shape == (1, 512, 512, 3)

         assert np.abs(image_slice.flatten() - expected_slice       ).max() < 1e-7

         UpperCAmelCase_											=torch.manual_seed(_lowerCAmelCase       )
         UpperCAmelCase_											=sd_pipe(
             [prompt]		,  generator=_lowerCAmelCase		,  guidance_scale=_lowerCAmelCase		,  num_inference_steps=50		,  output_type="np"		,  width=512		,  height=512		,  sld_guidance_scale=2000		,  sld_warmup_steps=7		,  sld_threshold=0.0_25		,  sld_momentum_scale=0.5		,  sld_mom_beta=0.7		,  )

         UpperCAmelCase_											=output.images
         UpperCAmelCase_											=image[0, -3:, -3:, -1]
         UpperCAmelCase_											=np.array([0.58_18, 0.62_85, 0.68_35, 0.60_19, 0.6_25, 0.67_54, 0.60_96, 0.63_34, 0.65_61]       )
         assert image.shape == (1, 512, 512, 3)

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




