
import io
import os
import unicodedata
from typing import Any, Dict, List, Optional, Tuple

import sentencepiece as spm

from ...tokenization_utils import PreTrainedTokenizer
from ...utils import logging


snake_case__      :		List[Any]				=       logging.get_logger(__name__)

snake_case__      :		int				=       "▁"

snake_case__      :		Optional[Any]				=       {"vocab_file": "vocab.txt", "sentencepiece_model_ckpt": "sentencepiece.bpe.model"}

snake_case__      :		Any				=       {
    "sentencepiece_model_file": "sentencepiece.bpe.model",
    "vocab_file": "vocab.txt",
}

snake_case__      :		List[str]				=       {
    "vocab_file": {
        "ernie-m-base": "https://huggingface.co/susnato/ernie-m-base_pytorch/blob/main/vocab.txt",
        "ernie-m-large": "https://huggingface.co/susnato/ernie-m-base_pytorch/blob/main/vocab.txt",
    },
    "sentencepiece_model_file": {
        "ernie-m-base": "https://huggingface.co/susnato/ernie-m-base_pytorch/blob/main/sentencepiece.bpe.model",
        "ernie-m-large": "https://huggingface.co/susnato/ernie-m-base_pytorch/blob/main/sentencepiece.bpe.model",
    },
}

snake_case__      :		Union[str, Any]				=       {
    "ernie-m-base": 5_1_4,
    "ernie-m-large": 5_1_4,
}

snake_case__      :		str				=       {
    "ernie-m-base": {"do_lower_case": False},
    "ernie-m-large": {"do_lower_case": False},
}





class 						_a   (						_UpperCamelCase       ):

       """simple docstring"""





       snake_case				=["input_ids"]

       snake_case				=VOCAB_FILES_NAMES
       snake_case				=PRETRAINED_INIT_CONFIGURATION
       snake_case				=PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
       snake_case				=PRETRAINED_VOCAB_FILES_MAP
       snake_case				=RESOURCE_FILES_NAMES
       def __init__(					self       ,					_snake_case       ,					_snake_case=None       ,					_snake_case=False       ,					_snake_case="utf8"       ,					_snake_case="[UNK]"       ,					_snake_case="[SEP]"       ,					_snake_case="[PAD]"       ,					_snake_case="[CLS]"       ,					_snake_case="[MASK]"       ,					_snake_case = None       ,					**_snake_case       ,					):
        # Mask token behave like a normal word, i.e. include the space before it and
        # is included in the raw text, there should be a match in a non-normalized sentence.

        _UpperCAmelCase 				={} if sp_model_kwargs is None else sp_model_kwargs
        super().__init__(
            do_lower_case=_snake_case       ,					unk_token=_snake_case       ,					sep_token=_snake_case       ,					pad_token=_snake_case       ,					cls_token=_snake_case       ,					mask_token=_snake_case       ,					vocab_file=_snake_case       ,					encoding=_snake_case       ,					sp_model_kwargs=self.sp_model_kwargs       ,					**_snake_case       ,					)
        _UpperCAmelCase 				=do_lower_case
        _UpperCAmelCase 				=sentencepiece_model_ckpt
        _UpperCAmelCase 				=spm.SentencePieceProcessor(**self.sp_model_kwargs	)
        self.sp_model.Load(_snake_case	)

        # to mimic paddlenlp.transformers.ernie_m.tokenizer.ErnieMTokenizer functioning
        if vocab_file is not None:
         _UpperCAmelCase 				=self.load_vocab(filepath=_snake_case	)
        else:
         _UpperCAmelCase 				={self.sp_model.id_to_piece(_snake_case	): id for id in range(self.sp_model.get_piece_size()	)}
        _UpperCAmelCase 				={v: k for k, v in self.vocab.items()}
       def     SCREAMING_SNAKE_CASE  (					self       ,					_snake_case	):
        if text is None:
         return None

        _UpperCAmelCase 				=self.tokenize(_snake_case	)
        _UpperCAmelCase 				="", []

        for i, ch in enumerate(_snake_case	):
         if ch in self.SP_CHAR_MAPPING:
          _UpperCAmelCase 				=self.SP_CHAR_MAPPING.get(_snake_case	)
         else:
          _UpperCAmelCase 				=unicodedata.normalize("NFKC"       ,					_snake_case	)
         if self.is_whitespace(_snake_case	):
          continue
         normalized_text += ch
         char_mapping.extend([i] * len(_snake_case	)	)

        _UpperCAmelCase 				=normalized_text, [], 0

        if self.do_lower_case:
         _UpperCAmelCase 				=text.lower()

        for token in split_tokens:
         if token[:1] == "▁":
          _UpperCAmelCase 				=token[1:]
         _UpperCAmelCase 				=text[offset:].index(_snake_case	) + offset
         _UpperCAmelCase 				=start + len(_snake_case	)

         token_mapping.append((char_mapping[start], char_mapping[end - 1] + 1)	)
         _UpperCAmelCase 				=end
        return token_mapping
       @property
       def     SCREAMING_SNAKE_CASE  (					self	):
        return len(self.vocab	)
       def     SCREAMING_SNAKE_CASE  (					self	):
        return dict(self.vocab       ,					**self.added_tokens_encoder	)
       def __getstate__(					self	):
        _UpperCAmelCase 				=self.__dict__.copy()
        _UpperCAmelCase 				=None
        return state
       def __setstate__(					self       ,					_snake_case	):
        _UpperCAmelCase 				=d

        # for backward compatibility
        if not hasattr(self       ,					"sp_model_kwargs"	):
         _UpperCAmelCase 				={}

        _UpperCAmelCase 				=spm.SentencePieceProcessor(**self.sp_model_kwargs	)
        self.sp_model.Load(self.sentencepiece_model_ckpt	)
       def     SCREAMING_SNAKE_CASE  (					self       ,					_snake_case	):
        return "".join((self.SP_CHAR_MAPPING.get(_snake_case       ,					_snake_case	) for c in text)	)
       def     SCREAMING_SNAKE_CASE  (					self       ,					_snake_case       ,					_snake_case=False       ,					_snake_case=64       ,					_snake_case=0.1	):

        if self.sp_model_kwargs.get("enable_sampling"	) is True:
         _UpperCAmelCase 				=True
        if self.sp_model_kwargs.get("alpha"	) is not None:
         _UpperCAmelCase 				=self.sp_model_kwargs.get("alpha"	)
        if self.sp_model_kwargs.get("nbest_size"	) is not None:
         _UpperCAmelCase 				=self.sp_model_kwargs.get("nbest_size"	)

        if not enable_sampling:
         _UpperCAmelCase 				=self.sp_model.EncodeAsPieces(_snake_case	)
        else:
         _UpperCAmelCase 				=self.sp_model.SampleEncodeAsPieces(_snake_case       ,					_snake_case       ,					_snake_case	)
        _UpperCAmelCase 				=[]
        for pi, piece in enumerate(_snake_case	):
         if piece == SPIECE_UNDERLINE:
          if not pieces[pi + 1].startswith(_snake_case	) and pi != 0:
           new_pieces.append(_snake_case	)
           continue
          else:
           continue
         _UpperCAmelCase 				=0
         for i, chunk in enumerate(_snake_case	):
          if chunk == SPIECE_UNDERLINE:
           continue
          if self.is_ch_char(_snake_case	) or self.is_punct(_snake_case	):
           if i > lst_i and piece[lst_i:i] != SPIECE_UNDERLINE:
            new_pieces.append(piece[lst_i:i]	)
           new_pieces.append(_snake_case	)
           _UpperCAmelCase 				=i + 1
          elif chunk.isdigit() and i > 0 and not piece[i - 1].isdigit():
           if i > lst_i and piece[lst_i:i] != SPIECE_UNDERLINE:
            new_pieces.append(piece[lst_i:i]	)
           _UpperCAmelCase 				=i
          elif not chunk.isdigit() and i > 0 and piece[i - 1].isdigit():
           if i > lst_i and piece[lst_i:i] != SPIECE_UNDERLINE:
            new_pieces.append(piece[lst_i:i]	)
           _UpperCAmelCase 				=i
         if len(_snake_case	) > lst_i:
          new_pieces.append(piece[lst_i:]	)
        return new_pieces
       def     SCREAMING_SNAKE_CASE  (					self       ,					_snake_case	):
        _UpperCAmelCase 				="".join(_snake_case	).replace(_snake_case       ,					" "	).strip()
        return out_string
       def     SCREAMING_SNAKE_CASE  (					self       ,					_snake_case	):
        _UpperCAmelCase 				=self.convert_ids_to_tokens(_snake_case	)
        _UpperCAmelCase 				="".join(_snake_case	).replace(_snake_case       ,					" "	).strip()
        return out_string
       def     SCREAMING_SNAKE_CASE  (					self       ,					_snake_case	):
        return self.vocab.get(_snake_case       ,					self.vocab.get(self.unk_token	)	)
       def     SCREAMING_SNAKE_CASE  (					self       ,					_snake_case	):
        return self.reverse_vocab.get(_snake_case       ,					self.unk_token	)
       def     SCREAMING_SNAKE_CASE  (					self       ,					_snake_case       ,					_snake_case=None	):
        if token_ids_a is None:
         return [self.cls_token_id] + token_ids_a + [self.sep_token_id]
        _UpperCAmelCase 				=[self.cls_token_id]
        _UpperCAmelCase 				=[self.sep_token_id]
        return _cls + token_ids_a + _sep + _sep + token_ids_a + _sep
       def     SCREAMING_SNAKE_CASE  (					self       ,					_snake_case       ,					_snake_case=None	):
        if offset_mapping_a is None:
         return [(0, 0)] + offset_mapping_a + [(0, 0)]

        return [(0, 0)] + offset_mapping_a + [(0, 0), (0, 0)] + offset_mapping_a + [(0, 0)]
       def     SCREAMING_SNAKE_CASE  (					self       ,					_snake_case       ,					_snake_case=None       ,					_snake_case=False	):

        if already_has_special_tokens:
         if token_ids_a is not None:
          raise ValueError(
              "You should not supply a second sequence if the provided sequence of "
              "ids is already formatted with special tokens for the model."	)
         return [1 if x in [self.sep_token_id, self.cls_token_id] else 0 for x in token_ids_a]

        if token_ids_a is not None:
         return [1] + ([0] * len(_snake_case	)) + [1, 1] + ([0] * len(_snake_case	)) + [1]
        return [1] + ([0] * len(_snake_case	)) + [1]
       def     SCREAMING_SNAKE_CASE  (					self       ,					_snake_case       ,					_snake_case = None	):
        # called when `add_special_tokens` is True, so align with `build_inputs_with_special_tokens` method
        if token_ids_a is None:
         # [CLS] X [SEP]
         return (len(_snake_case	) + 2) * [0]

        # [CLS] A [SEP] [SEP] B [SEP]
        return [0] * (len(_snake_case	) + 1) + [1] * (len(_snake_case	) + 3)
       def     SCREAMING_SNAKE_CASE  (					self       ,					_snake_case	):
        if "\u4e00" <= char <= "\u9fff":
         return True
        return False
       def     SCREAMING_SNAKE_CASE  (					self       ,					_snake_case	):
        if ("a" <= char <= "z") or ("A" <= char <= "Z"):
         return True
        return False
       def     SCREAMING_SNAKE_CASE  (					self       ,					_snake_case	):
        if char in ",;:.?!~，；：。？！《》【】":
         return True
        return False
       def     SCREAMING_SNAKE_CASE  (					self       ,					_snake_case	):
        if char == " " or char == "\t" or char == "\n" or char == "\r":
         return True
        if len(_snake_case	) == 1:
         _UpperCAmelCase 				=unicodedata.category(_snake_case	)
         if cat == "Zs":
          return True
        return False
       def     SCREAMING_SNAKE_CASE  (					self       ,					_snake_case	):
        _UpperCAmelCase 				={}
        with io.open(_snake_case       ,					"r"       ,					encoding="utf-8"	) as f:
         for index, line in enumerate(_snake_case	):
          _UpperCAmelCase 				=line.rstrip("\n"	)
          _UpperCAmelCase 				=int(_snake_case	)

        return token_to_idx

       def     SCREAMING_SNAKE_CASE  (					self       ,					_snake_case       ,					_snake_case = None	):
        _UpperCAmelCase 				=0
        if os.path.isdir(_snake_case	):
         _UpperCAmelCase 				=os.path.join(
             _snake_case       ,					(filename_prefix + "-" if filename_prefix else "") + VOCAB_FILES_NAMES["vocab_file"]	)
        else:
         _UpperCAmelCase 				=(filename_prefix + "-" if filename_prefix else "") + save_directory
        with open(_snake_case       ,					"w"       ,					encoding="utf-8"	) as writer:
         for token, token_index in sorted(self.vocab.items()       ,					key=lambda _snake_case	: kv[1]	):
          if index != token_index:
           logger.warning(
               F"Saving vocabulary to {vocab_file}: vocabulary indices are not consecutive."
               " Please check that the vocabulary is not corrupted!"	)
           _UpperCAmelCase 				=token_index
          writer.write(token + "\n"	)
          index += 1

        _UpperCAmelCase 				=os.path.join(_snake_case       ,					"sentencepiece.bpe.model"	)
        with open(_snake_case       ,					"wb"	) as fi:
         _UpperCAmelCase 				=self.sp_model.serialized_model_proto()
         fi.write(_snake_case	)

        return (vocab_file,)










"""simple docstring"""




import os
import tempfile
import unittest

import numpy as np

from diffusers.utils import is_flax_available
from diffusers.utils.testing_utils import require_flax, slow


if is_flax_available():
 import jax
 import jax.numpy as jnp
 from flax.jax_utils import replicate
 from flax.training.common_utils import shard

 from diffusers import FlaxDDIMScheduler, FlaxDiffusionPipeline, FlaxStableDiffusionPipeline






@require_flax
class       UpperCAmelCase_    (							unittest.TestCase		):



      def 		snake_case_   (	self	:      Optional[int]		):
           with tempfile.TemporaryDirectory() as tmpdirname:
                # pipeline has Flax weights
                _UpperCAmelCase     :      Union[str, Any]														=       FlaxDiffusionPipeline.from_pretrained(
                    "hf-internal-testing/tiny-stable-diffusion-pipe"	,      safety_checker=A	,      cache_dir=A		)

                _UpperCAmelCase     :      List[str]														=       [t[-1] for t in os.walk(os.path.join(A	,      os.listdir(A		)[0]	,      "snapshots"		)		)]
                _UpperCAmelCase     :      Union[str, Any]														=       [item for sublist in all_root_files for item in sublist]

                # None of the downloaded files should be a PyTorch file even if we have some here:
                # https://huggingface.co/hf-internal-testing/tiny-stable-diffusion-pipe/blob/main/unet/diffusion_pytorch_model.bin
                assert not any(f.endswith(".bin"		) for f in files		)







@slow
@require_flax
class       UpperCAmelCase_    (							unittest.TestCase		):



      def 		snake_case_   (	self	:      List[str]		):
           _UpperCAmelCase							,			_UpperCAmelCase     :      int														=       FlaxStableDiffusionPipeline.from_pretrained(
               "hf-internal-testing/tiny-stable-diffusion-pipe"	,      safety_checker=A		)

           _UpperCAmelCase     :      str														=       (
               "A cinematic film still of Morgan Freeman starring as Jimi Hendrix, portrait, 40mm lens, shallow depth of"
               " field, close up, split lighting, cinematic"
           )

           _UpperCAmelCase     :      int														=       jax.random.PRNGKey(0		)
           _UpperCAmelCase     :      List[str]														=       4

           _UpperCAmelCase     :      Any														=       jax.device_count()
           _UpperCAmelCase     :      Tuple														=       num_samples * [prompt]
           _UpperCAmelCase     :      Optional[int]														=       pipeline.prepare_inputs(A		)

           # shard inputs and rng
           _UpperCAmelCase     :      Union[str, Any]														=       replicate(A		)
           _UpperCAmelCase     :      List[Any]														=       jax.random.split(A	,      A		)
           _UpperCAmelCase     :      List[Any]														=       shard(A		)

           _UpperCAmelCase     :      Tuple														=       pipeline(A	,      A	,      A	,      A	,      jit=A		).images

           assert images.shape == (num_samples, 1, 6_4, 6_4, 3)
           if jax.device_count() == 8:
                assert np.abs(np.abs(images[0, 0, :2, :2, -2:]	,      dtype=np.floataa		).sum() - 4.1_514_745		) < 1e-3
                assert np.abs(np.abs(A	,      dtype=np.floataa		).sum() - 49_947.875		) < 5e-1

           _UpperCAmelCase     :      Optional[int]														=       pipeline.numpy_to_pil(np.asarray(images.reshape((num_samples,) + images.shape[-3:]		)		)		)
           assert len(A		) == num_samples



      def 		snake_case_   (	self	:      Union[str, Any]		):
           _UpperCAmelCase							,			_UpperCAmelCase     :      Optional[Any]														=       FlaxStableDiffusionPipeline.from_pretrained(
               "CompVis/stable-diffusion-v1-4"	,      revision="flax"	,      safety_checker=A		)

           _UpperCAmelCase     :      Dict														=       (
               "A cinematic film still of Morgan Freeman starring as Jimi Hendrix, portrait, 40mm lens, shallow depth of"
               " field, close up, split lighting, cinematic"
           )

           _UpperCAmelCase     :      Dict														=       jax.random.PRNGKey(0		)
           _UpperCAmelCase     :      str														=       5_0

           _UpperCAmelCase     :      List[str]														=       jax.device_count()
           _UpperCAmelCase     :      Any														=       num_samples * [prompt]
           _UpperCAmelCase     :      Dict														=       pipeline.prepare_inputs(A		)

           # shard inputs and rng
           _UpperCAmelCase     :      Dict														=       replicate(A		)
           _UpperCAmelCase     :      str														=       jax.random.split(A	,      A		)
           _UpperCAmelCase     :      Optional[Any]														=       shard(A		)

           _UpperCAmelCase     :      List[Any]														=       pipeline(A	,      A	,      A	,      A	,      jit=A		).images

           assert images.shape == (num_samples, 1, 5_1_2, 5_1_2, 3)
           if jax.device_count() == 8:
                assert np.abs((np.abs(images[0, 0, :2, :2, -2:]	,      dtype=np.floataa		).sum() - 0.05_652_401)		) < 1e-3
                assert np.abs((np.abs(A	,      dtype=np.floataa		).sum() - 2_383_808.2)		) < 5e-1



      def 		snake_case_   (	self	:      List[Any]		):
           _UpperCAmelCase							,			_UpperCAmelCase     :      List[Any]														=       FlaxStableDiffusionPipeline.from_pretrained(
               "CompVis/stable-diffusion-v1-4"	,      revision="bf16"	,      dtype=jnp.bfloataa	,      safety_checker=A		)

           _UpperCAmelCase     :      Any														=       (
               "A cinematic film still of Morgan Freeman starring as Jimi Hendrix, portrait, 40mm lens, shallow depth of"
               " field, close up, split lighting, cinematic"
           )

           _UpperCAmelCase     :      List[Any]														=       jax.random.PRNGKey(0		)
           _UpperCAmelCase     :      List[Any]														=       5_0

           _UpperCAmelCase     :      Union[str, Any]														=       jax.device_count()
           _UpperCAmelCase     :      Optional[int]														=       num_samples * [prompt]
           _UpperCAmelCase     :      Union[str, Any]														=       pipeline.prepare_inputs(A		)

           # shard inputs and rng
           _UpperCAmelCase     :      int														=       replicate(A		)
           _UpperCAmelCase     :      Optional[int]														=       jax.random.split(A	,      A		)
           _UpperCAmelCase     :      str														=       shard(A		)

           _UpperCAmelCase     :      Union[str, Any]														=       pipeline(A	,      A	,      A	,      A	,      jit=A		).images

           assert images.shape == (num_samples, 1, 5_1_2, 5_1_2, 3)
           if jax.device_count() == 8:
                assert np.abs((np.abs(images[0, 0, :2, :2, -2:]	,      dtype=np.floataa		).sum() - 0.04_003_906)		) < 1e-3
                assert np.abs((np.abs(A	,      dtype=np.floataa		).sum() - 2_373_516.75)		) < 5e-1



      def 		snake_case_   (	self	:      int		):
           _UpperCAmelCase							,			_UpperCAmelCase     :      Dict														=       FlaxStableDiffusionPipeline.from_pretrained(
               "CompVis/stable-diffusion-v1-4"	,      revision="bf16"	,      dtype=jnp.bfloataa		)

           _UpperCAmelCase     :      str														=       (
               "A cinematic film still of Morgan Freeman starring as Jimi Hendrix, portrait, 40mm lens, shallow depth of"
               " field, close up, split lighting, cinematic"
           )

           _UpperCAmelCase     :      Optional[int]														=       jax.random.PRNGKey(0		)
           _UpperCAmelCase     :      Dict														=       5_0

           _UpperCAmelCase     :      Union[str, Any]														=       jax.device_count()
           _UpperCAmelCase     :      str														=       num_samples * [prompt]
           _UpperCAmelCase     :      int														=       pipeline.prepare_inputs(A		)

           # shard inputs and rng
           _UpperCAmelCase     :      Optional[int]														=       replicate(A		)
           _UpperCAmelCase     :      Tuple														=       jax.random.split(A	,      A		)
           _UpperCAmelCase     :      Dict														=       shard(A		)

           _UpperCAmelCase     :      Optional[Any]														=       pipeline(A	,      A	,      A	,      A	,      jit=A		).images

           assert images.shape == (num_samples, 1, 5_1_2, 5_1_2, 3)
           if jax.device_count() == 8:
                assert np.abs((np.abs(images[0, 0, :2, :2, -2:]	,      dtype=np.floataa		).sum() - 0.04_003_906)		) < 1e-3
                assert np.abs((np.abs(A	,      dtype=np.floataa		).sum() - 2_373_516.75)		) < 5e-1



      def 		snake_case_   (	self	:      Optional[Any]		):
           _UpperCAmelCase     :      Dict														=       FlaxDDIMScheduler(
               beta_start=0.00_085	,      beta_end=0.012	,      beta_schedule="scaled_linear"	,      set_alpha_to_one=A	,      steps_offset=1	,      )

           _UpperCAmelCase							,			_UpperCAmelCase     :      Dict														=       FlaxStableDiffusionPipeline.from_pretrained(
               "CompVis/stable-diffusion-v1-4"	,      revision="bf16"	,      dtype=jnp.bfloataa	,      scheduler=A	,      safety_checker=A	,      )
           _UpperCAmelCase     :      Union[str, Any]														=       scheduler.create_state()

           _UpperCAmelCase     :      str														=       scheduler_state

           _UpperCAmelCase     :      Union[str, Any]														=       (
               "A cinematic film still of Morgan Freeman starring as Jimi Hendrix, portrait, 40mm lens, shallow depth of"
               " field, close up, split lighting, cinematic"
           )

           _UpperCAmelCase     :      str														=       jax.random.PRNGKey(0		)
           _UpperCAmelCase     :      List[str]														=       5_0

           _UpperCAmelCase     :      Optional[int]														=       jax.device_count()
           _UpperCAmelCase     :      int														=       num_samples * [prompt]
           _UpperCAmelCase     :      Optional[int]														=       pipeline.prepare_inputs(A		)

           # shard inputs and rng
           _UpperCAmelCase     :      List[Any]														=       replicate(A		)
           _UpperCAmelCase     :      Tuple														=       jax.random.split(A	,      A		)
           _UpperCAmelCase     :      Union[str, Any]														=       shard(A		)

           _UpperCAmelCase     :      Dict														=       pipeline(A	,      A	,      A	,      A	,      jit=A		).images

           assert images.shape == (num_samples, 1, 5_1_2, 5_1_2, 3)
           if jax.device_count() == 8:
                assert np.abs((np.abs(images[0, 0, :2, :2, -2:]	,      dtype=np.floataa		).sum() - 0.045_043_945)		) < 1e-3
                assert np.abs((np.abs(A	,      dtype=np.floataa		).sum() - 2_347_693.5)		) < 5e-1



      def 		snake_case_   (	self	:      int		):
           _UpperCAmelCase     :      Optional[Any]														=       (
               "A cinematic film still of Morgan Freeman starring as Jimi Hendrix, portrait, 40mm lens, shallow depth of"
               " field, close up, split lighting, cinematic"
           )

           _UpperCAmelCase     :      Optional[Any]														=       jax.device_count()
           _UpperCAmelCase     :      Union[str, Any]														=       num_samples * [prompt]
           _UpperCAmelCase     :      Optional[Any]														=       jax.random.split(jax.random.PRNGKey(0		)	,      A		)

           _UpperCAmelCase							,			_UpperCAmelCase     :      str														=       FlaxStableDiffusionPipeline.from_pretrained(
               "CompVis/stable-diffusion-v1-4"	,      revision="bf16"	,      dtype=jnp.bfloataa	,      safety_checker=A	,      )

           _UpperCAmelCase     :      int														=       replicate(A		)
           _UpperCAmelCase     :      Union[str, Any]														=       pipeline.prepare_inputs(A		)
           _UpperCAmelCase     :      int														=       shard(A		)
           _UpperCAmelCase     :      Dict														=       pipeline(A	,      A	,      A	,      jit=A		).images
           assert images.shape == (num_samples, 1, 5_1_2, 5_1_2, 3)
           _UpperCAmelCase     :      List[str]														=       images[2, 0, 2_5_6, 1_0:1_7, 1]

           # With memory efficient attention
           _UpperCAmelCase							,			_UpperCAmelCase     :      str														=       FlaxStableDiffusionPipeline.from_pretrained(
               "CompVis/stable-diffusion-v1-4"	,      revision="bf16"	,      dtype=jnp.bfloataa	,      safety_checker=A	,      use_memory_efficient_attention=A	,      )

           _UpperCAmelCase     :      Any														=       replicate(A		)
           _UpperCAmelCase     :      str														=       pipeline.prepare_inputs(A		)
           _UpperCAmelCase     :      Tuple														=       shard(A		)
           _UpperCAmelCase     :      Tuple														=       pipeline(A	,      A	,      A	,      jit=A		).images
           assert images_eff.shape == (num_samples, 1, 5_1_2, 5_1_2, 3)
           _UpperCAmelCase     :      str														=       images[2, 0, 2_5_6, 1_0:1_7, 1]

           # I checked the results visually and they are very similar. However, I saw that the max diff is `1` and the `sum`
           # over the 8 images is exactly `256`, which is very suspicious. Testing a random slice for now.
           assert abs(slice_eff - slice		).max() < 1e-2
