




"""simple docstring"""







import gc
import random
import unittest

import torch

from diffusers import (
    IFImgaImgPipeline,
    IFImgaImgSuperResolutionPipeline,
    IFInpaintingPipeline,
    IFInpaintingSuperResolutionPipeline,
    IFPipeline,
    IFSuperResolutionPipeline,
)
from diffusers.models.attention_processor import AttnAddedKVProcessor
from diffusers.utils.import_utils import is_xformers_available
from diffusers.utils.testing_utils import floats_tensor, load_numpy, require_torch_gpu, skip_mps, slow, torch_device

from ..pipeline_params import TEXT_TO_IMAGE_BATCH_PARAMS, TEXT_TO_IMAGE_PARAMS
from ..test_pipelines_common import PipelineTesterMixin, assert_mean_pixel_difference
from . import IFPipelineTesterMixin

@skip_mps
class 				snake_case_			(					lowerCamelCase_	, lowerCamelCase_	, unittest.TestCase			):







   """simple docstring"""




   A_				      =       IFPipeline
   A_				      =       TEXT_TO_IMAGE_PARAMS - {'''width''', '''height''', '''latents'''}
   A_				      =       TEXT_TO_IMAGE_BATCH_PARAMS
   A_				      =       PipelineTesterMixin.required_optional_params - {'''latents'''}







   def   UpperCAmelCase__			(		self)				->   Optional[int]:
       return self._get_dummy_components()







   def   UpperCAmelCase__			(		self       ,					lowerCamelCase_       ,					lowerCamelCase_=0)				->   Optional[int]:
       if str(lowerCamelCase_).startswith('''mps'''):
           UpperCamelCase              =	torch.manual_seed(lowerCamelCase_)
       else:
           UpperCamelCase              =	torch.Generator(device=lowerCamelCase_).manual_seed(lowerCamelCase_)

       UpperCamelCase              =	{
           '''prompt''': '''A painting of a squirrel eating a burger''',
           '''generator''': generator,
           '''num_inference_steps''': 2,
           '''output_type''': '''numpy''',
       }

       return inputs







   def   UpperCAmelCase__			(		self)				->   Optional[Any]:
       self._test_save_load_optional_components()







   @unittest.skipIf(torch_device != '''cuda'''       ,					reason='''float16 requires CUDA''')
   def   UpperCAmelCase__			(		self)				->   Tuple:
       # Due to non-determinism in save load of the hf-internal-testing/tiny-random-t5 text encoder
       super().test_save_load_floataa(expected_max_diff=1e-1)







   def   UpperCAmelCase__			(		self)				->   Optional[int]:
       self._test_attention_slicing_forward_pass(expected_max_diff=1e-2)







   def   UpperCAmelCase__			(		self)				->   List[Any]:
       self._test_save_load_local()







   def   UpperCAmelCase__			(		self)				->   Any:
       self._test_inference_batch_single_identical(
           expected_max_diff=1e-2       ,					)







   @unittest.skipIf(
       torch_device != '''cuda''' or not is_xformers_available()       ,					reason='''XFormers attention is only available with CUDA and `xformers` installed'''       ,					)
   def   UpperCAmelCase__			(		self)				->   List[Any]:
       self._test_xformers_attention_forwardGenerator_pass(expected_max_diff=1e-3)

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







   """simple docstring"""




   def   UpperCAmelCase__			(		self)				->   Any:
       # clean up the VRAM after each test
       super().tearDown()
       gc.collect()
       torch.cuda.empty_cache()







   def   UpperCAmelCase__			(		self)				->   int:
       # if

       UpperCamelCase              =	IFPipeline.from_pretrained('''DeepFloyd/IF-I-XL-v1.0'''       ,					variant='''fp16'''       ,					torch_dtype=torch.floataa)

       UpperCamelCase              =	IFSuperResolutionPipeline.from_pretrained(
           '''DeepFloyd/IF-II-L-v1.0'''       ,					variant='''fp16'''       ,					torch_dtype=torch.floataa       ,					text_encoder=lowerCamelCase_       ,					tokenizer=lowerCamelCase_)

       # pre compute text embeddings and remove T5 to save memory

       pipe_a.text_encoder.to('''cuda''')

       UpperCamelCase       ,	UpperCamelCase              =	pipe_a.encode_prompt('''anime turtle'''       ,					device='''cuda''')

       del pipe_a.tokenizer
       del pipe_a.text_encoder
       gc.collect()

       UpperCamelCase              =	None
       UpperCamelCase              =	None

       pipe_a.enable_model_cpu_offload()
       pipe_a.enable_model_cpu_offload()

       pipe_a.unet.set_attn_processor(AttnAddedKVProcessor())
       pipe_a.unet.set_attn_processor(AttnAddedKVProcessor())

       self._test_if(lowerCamelCase_       ,					lowerCamelCase_       ,					lowerCamelCase_       ,					lowerCamelCase_)

       pipe_a.remove_all_hooks()
       pipe_a.remove_all_hooks()

       # img2img

       UpperCamelCase              =	IFImgaImgPipeline(**pipe_a.components)
       UpperCamelCase              =	IFImgaImgSuperResolutionPipeline(**pipe_a.components)

       pipe_a.enable_model_cpu_offload()
       pipe_a.enable_model_cpu_offload()

       pipe_a.unet.set_attn_processor(AttnAddedKVProcessor())
       pipe_a.unet.set_attn_processor(AttnAddedKVProcessor())

       self._test_if_imgaimg(lowerCamelCase_       ,					lowerCamelCase_       ,					lowerCamelCase_       ,					lowerCamelCase_)

       pipe_a.remove_all_hooks()
       pipe_a.remove_all_hooks()

       # inpainting

       UpperCamelCase              =	IFInpaintingPipeline(**pipe_a.components)
       UpperCamelCase              =	IFInpaintingSuperResolutionPipeline(**pipe_a.components)

       pipe_a.enable_model_cpu_offload()
       pipe_a.enable_model_cpu_offload()

       pipe_a.unet.set_attn_processor(AttnAddedKVProcessor())
       pipe_a.unet.set_attn_processor(AttnAddedKVProcessor())

       self._test_if_inpainting(lowerCamelCase_       ,					lowerCamelCase_       ,					lowerCamelCase_       ,					lowerCamelCase_)







   def   UpperCAmelCase__			(		self       ,					lowerCamelCase_       ,					lowerCamelCase_       ,					lowerCamelCase_       ,					lowerCamelCase_)				->   Tuple:
       # pipeline 1

       _start_torch_memory_measurement()

       UpperCamelCase              =	torch.Generator(device='''cpu''').manual_seed(0)
       UpperCamelCase              =	pipe_a(
           prompt_embeds=lowerCamelCase_       ,					negative_prompt_embeds=lowerCamelCase_       ,					num_inference_steps=2       ,					generator=lowerCamelCase_       ,					output_type='''np'''       ,					)

       UpperCamelCase              =	output.images[0]

       assert image.shape == (6_4, 6_4, 3)

       UpperCamelCase              =	torch.cuda.max_memory_allocated()
       assert mem_bytes < 1_3 * 1_0**9

       UpperCamelCase              =	load_numpy(
           '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/if/test_if.npy''')
       assert_mean_pixel_difference(lowerCamelCase_       ,					lowerCamelCase_)

       # pipeline 2

       _start_torch_memory_measurement()

       UpperCamelCase              =	torch.Generator(device='''cpu''').manual_seed(0)

       UpperCamelCase              =	floats_tensor((1, 3, 6_4, 6_4)       ,					rng=random.Random(0)).to(lowerCamelCase_)

       UpperCamelCase              =	pipe_a(
           prompt_embeds=lowerCamelCase_       ,					negative_prompt_embeds=lowerCamelCase_       ,					image=lowerCamelCase_       ,					generator=lowerCamelCase_       ,					num_inference_steps=2       ,					output_type='''np'''       ,					)

       UpperCamelCase              =	output.images[0]

       assert image.shape == (2_5_6, 2_5_6, 3)

       UpperCamelCase              =	torch.cuda.max_memory_allocated()
       assert mem_bytes < 4 * 1_0**9

       UpperCamelCase              =	load_numpy(
           '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/if/test_if_superresolution_stage_II.npy''')
       assert_mean_pixel_difference(lowerCamelCase_       ,					lowerCamelCase_)







   def   UpperCAmelCase__			(		self       ,					lowerCamelCase_       ,					lowerCamelCase_       ,					lowerCamelCase_       ,					lowerCamelCase_)				->   Tuple:
       # pipeline 1

       _start_torch_memory_measurement()

       UpperCamelCase              =	floats_tensor((1, 3, 6_4, 6_4)       ,					rng=random.Random(0)).to(lowerCamelCase_)

       UpperCamelCase              =	torch.Generator(device='''cpu''').manual_seed(0)

       UpperCamelCase              =	pipe_a(
           prompt_embeds=lowerCamelCase_       ,					negative_prompt_embeds=lowerCamelCase_       ,					image=lowerCamelCase_       ,					num_inference_steps=2       ,					generator=lowerCamelCase_       ,					output_type='''np'''       ,					)

       UpperCamelCase              =	output.images[0]

       assert image.shape == (6_4, 6_4, 3)

       UpperCamelCase              =	torch.cuda.max_memory_allocated()
       assert mem_bytes < 1_0 * 1_0**9

       UpperCamelCase              =	load_numpy(
           '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/if/test_if_img2img.npy''')
       assert_mean_pixel_difference(lowerCamelCase_       ,					lowerCamelCase_)

       # pipeline 2

       _start_torch_memory_measurement()

       UpperCamelCase              =	torch.Generator(device='''cpu''').manual_seed(0)

       UpperCamelCase              =	floats_tensor((1, 3, 2_5_6, 2_5_6)       ,					rng=random.Random(0)).to(lowerCamelCase_)
       UpperCamelCase              =	floats_tensor((1, 3, 6_4, 6_4)       ,					rng=random.Random(0)).to(lowerCamelCase_)

       UpperCamelCase              =	pipe_a(
           prompt_embeds=lowerCamelCase_       ,					negative_prompt_embeds=lowerCamelCase_       ,					image=lowerCamelCase_       ,					original_image=lowerCamelCase_       ,					generator=lowerCamelCase_       ,					num_inference_steps=2       ,					output_type='''np'''       ,					)

       UpperCamelCase              =	output.images[0]

       assert image.shape == (2_5_6, 2_5_6, 3)

       UpperCamelCase              =	torch.cuda.max_memory_allocated()
       assert mem_bytes < 4 * 1_0**9

       UpperCamelCase              =	load_numpy(
           '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/if/test_if_img2img_superresolution_stage_II.npy''')
       assert_mean_pixel_difference(lowerCamelCase_       ,					lowerCamelCase_)







   def   UpperCAmelCase__			(		self       ,					lowerCamelCase_       ,					lowerCamelCase_       ,					lowerCamelCase_       ,					lowerCamelCase_)				->   int:
       # pipeline 1

       _start_torch_memory_measurement()

       UpperCamelCase              =	floats_tensor((1, 3, 6_4, 6_4)       ,					rng=random.Random(0)).to(lowerCamelCase_)
       UpperCamelCase              =	floats_tensor((1, 3, 6_4, 6_4)       ,					rng=random.Random(1)).to(lowerCamelCase_)

       UpperCamelCase              =	torch.Generator(device='''cpu''').manual_seed(0)
       UpperCamelCase              =	pipe_a(
           prompt_embeds=lowerCamelCase_       ,					negative_prompt_embeds=lowerCamelCase_       ,					image=lowerCamelCase_       ,					mask_image=lowerCamelCase_       ,					num_inference_steps=2       ,					generator=lowerCamelCase_       ,					output_type='''np'''       ,					)

       UpperCamelCase              =	output.images[0]

       assert image.shape == (6_4, 6_4, 3)

       UpperCamelCase              =	torch.cuda.max_memory_allocated()
       assert mem_bytes < 1_0 * 1_0**9

       UpperCamelCase              =	load_numpy(
           '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/if/test_if_inpainting.npy''')
       assert_mean_pixel_difference(lowerCamelCase_       ,					lowerCamelCase_)

       # pipeline 2

       _start_torch_memory_measurement()

       UpperCamelCase              =	torch.Generator(device='''cpu''').manual_seed(0)

       UpperCamelCase              =	floats_tensor((1, 3, 6_4, 6_4)       ,					rng=random.Random(0)).to(lowerCamelCase_)
       UpperCamelCase              =	floats_tensor((1, 3, 2_5_6, 2_5_6)       ,					rng=random.Random(0)).to(lowerCamelCase_)
       UpperCamelCase              =	floats_tensor((1, 3, 2_5_6, 2_5_6)       ,					rng=random.Random(1)).to(lowerCamelCase_)

       UpperCamelCase              =	pipe_a(
           prompt_embeds=lowerCamelCase_       ,					negative_prompt_embeds=lowerCamelCase_       ,					image=lowerCamelCase_       ,					mask_image=lowerCamelCase_       ,					original_image=lowerCamelCase_       ,					generator=lowerCamelCase_       ,					num_inference_steps=2       ,					output_type='''np'''       ,					)

       UpperCamelCase              =	output.images[0]

       assert image.shape == (2_5_6, 2_5_6, 3)

       UpperCamelCase              =	torch.cuda.max_memory_allocated()
       assert mem_bytes < 4 * 1_0**9

       UpperCamelCase              =	load_numpy(
           '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/if/test_if_inpainting_superresolution_stage_II.npy''')
       assert_mean_pixel_difference(lowerCamelCase_       ,					lowerCamelCase_)





def      __snake_case (				):


    """simple docstring"""







    torch.cuda.empty_cache()
    torch.cuda.reset_max_memory_allocated()
    torch.cuda.reset_peak_memory_stats()







'''simple docstring'''
import json
import os
import pickle
import shutil
import tempfile
from unittest import TestCase
from unittest.mock import patch

import numpy as np
from datasets import Dataset

from transformers import is_faiss_available
from transformers.models.bart.configuration_bart import BartConfig
from transformers.models.bart.tokenization_bart import BartTokenizer
from transformers.models.bert.tokenization_bert import VOCAB_FILES_NAMES as DPR_VOCAB_FILES_NAMES
from transformers.models.dpr.configuration_dpr import DPRConfig
from transformers.models.dpr.tokenization_dpr import DPRContextEncoderTokenizer, DPRQuestionEncoderTokenizer
from transformers.models.rag.configuration_rag import RagConfig
from transformers.models.rag.retrieval_rag import CustomHFIndex, RagRetriever
from transformers.models.roberta.tokenization_roberta import VOCAB_FILES_NAMES as BART_VOCAB_FILES_NAMES
from transformers.testing_utils import require_faiss, require_sentencepiece, require_tokenizers, require_torch


if is_faiss_available():
 import faiss


@require_faiss
class 							_UpperCAmelCase    (		snake_case      ):




    def 					lowerCAmelCase__					(      self	:							List[str]      ):






       '''simple docstring'''






       lowercase_						:     Any							     =  tempfile.mkdtemp()
       lowercase_						:     str							     =  8

       # DPR tok
       lowercase_						:     Union[str, Any]							     =  [
           "[UNK]",
           "[CLS]",
           "[SEP]",
           "[PAD]",
           "[MASK]",
           "want",
           "##want",
           "##ed",
           "wa",
           "un",
           "runn",
           "##ing",
           ",",
           "low",
           "lowest",
       ]
       lowercase_						:     Optional[Any]							     =  os.path.join(self.tmpdirname	,  "dpr_tokenizer"      )
       os.makedirs(a	,  exist_ok=a      )
       lowercase_						:     List[Any]							     =  os.path.join(a	,  DPR_VOCAB_FILES_NAMES["vocab_file"]      )
       with open(self.vocab_file	,  "w"	,  encoding="utf-8"      ) as vocab_writer:
          vocab_writer.write("".join([x + "\n" for x in vocab_tokens]      )      )

       # BART tok
       lowercase_						:     List[Any]							     =  [
           "l",
           "o",
           "w",
           "e",
           "r",
           "s",
           "t",
           "i",
           "d",
           "n",
           "\u0120",
           "\u0120l",
           "\u0120n",
           "\u0120lo",
           "\u0120low",
           "er",
           "\u0120lowest",
           "\u0120newer",
           "\u0120wider",
           "<unk>",
       ]
       lowercase_						:     int							     =  dict(zip(a	,  range(len(a      )      )      )      )
       lowercase_						:     str							     =  ["#version: 0.2", "\u0120 l", "\u0120l o", "\u0120lo w", "e r", ""]
       lowercase_						:     Dict							     =  {"unk_token": "<unk>"}

       lowercase_						:     Union[str, Any]							     =  os.path.join(self.tmpdirname	,  "bart_tokenizer"      )
       os.makedirs(a	,  exist_ok=a      )
       lowercase_						:     Union[str, Any]							     =  os.path.join(a	,  BART_VOCAB_FILES_NAMES["vocab_file"]      )
       lowercase_						:     Tuple							     =  os.path.join(a	,  BART_VOCAB_FILES_NAMES["merges_file"]      )
       with open(self.vocab_file	,  "w"	,  encoding="utf-8"      ) as fp:
          fp.write(json.dumps(a      ) + "\n"      )
       with open(self.merges_file	,  "w"	,  encoding="utf-8"      ) as fp:
          fp.write("\n".join(a      )      )




    def 					lowerCAmelCase__					(      self	:							Tuple      ):






       '''simple docstring'''






       return DPRQuestionEncoderTokenizer.from_pretrained(os.path.join(self.tmpdirname	,  "dpr_tokenizer"      )      )




    def 					lowerCAmelCase__					(      self	:							List[str]      ):






       '''simple docstring'''






       return DPRContextEncoderTokenizer.from_pretrained(os.path.join(self.tmpdirname	,  "dpr_tokenizer"      )      )




    def 					lowerCAmelCase__					(      self	:							Tuple      ):






       '''simple docstring'''






       return BartTokenizer.from_pretrained(os.path.join(self.tmpdirname	,  "bart_tokenizer"      )      )




    def 					lowerCAmelCase__					(      self	:							List[str]      ):






       '''simple docstring'''






       shutil.rmtree(self.tmpdirname      )




    def 					lowerCAmelCase__					(      self	:							List[str]      ):






       '''simple docstring'''






       lowercase_						:     List[str]							     =  Dataset.from_dict(
           {
               "id": ["0", "1"],
               "text": ["foo", "bar"],
               "title": ["Foo", "Bar"],
               "embeddings": [np.ones(self.retrieval_vector_size      ), 2 * np.ones(self.retrieval_vector_size      )],
           }      )
       dataset.add_faiss_index("embeddings"	,  string_factory="Flat"	,  metric_type=faiss.METRIC_INNER_PRODUCT      )
       return dataset




    def 					lowerCAmelCase__					(      self	:							List[Any]      ):






       '''simple docstring'''






       lowercase_						:     Optional[int]							     =  self.get_dummy_dataset()
       lowercase_						:     Optional[int]							     =  RagConfig(
           retrieval_vector_size=self.retrieval_vector_size	,  question_encoder=DPRConfig().to_dict()	,  generator=BartConfig().to_dict()	,  )
       with patch("transformers.models.rag.retrieval_rag.load_dataset"      ) as mock_load_dataset:
          lowercase_						:     Any							     =  dataset
          lowercase_						:     List[str]							     =  RagRetriever(
              a	,  question_encoder_tokenizer=self.get_dpr_tokenizer()	,  generator_tokenizer=self.get_bart_tokenizer()	,  )
       return retriever




    def 					lowerCAmelCase__					(      self	:							Union[str, Any]	,  a	:							bool      ):






       '''simple docstring'''






       lowercase_						:     int							     =  self.get_dummy_dataset()
       lowercase_						:     Optional[Any]							     =  RagConfig(
           retrieval_vector_size=self.retrieval_vector_size	,  question_encoder=DPRConfig().to_dict()	,  generator=BartConfig().to_dict()	,  index_name="custom"	,  )
       if from_disk:
          lowercase_						:     Optional[Any]							     =  os.path.join(self.tmpdirname	,  "dataset"      )
          lowercase_						:     Dict							     =  os.path.join(self.tmpdirname	,  "index.faiss"      )
          dataset.get_index("embeddings"      ).save(os.path.join(self.tmpdirname	,  "index.faiss"      )      )
          dataset.drop_index("embeddings"      )
          dataset.save_to_disk(os.path.join(self.tmpdirname	,  "dataset"      )      )
          del dataset
          lowercase_						:     Tuple							     =  RagRetriever(
              a	,  question_encoder_tokenizer=self.get_dpr_tokenizer()	,  generator_tokenizer=self.get_bart_tokenizer()	,  )
       else:
          lowercase_						:     Union[str, Any]							     =  RagRetriever(
              a	,  question_encoder_tokenizer=self.get_dpr_tokenizer()	,  generator_tokenizer=self.get_bart_tokenizer()	,  index=CustomHFIndex(config.retrieval_vector_size	,  a      )	,  )
       return retriever




    def 					lowerCAmelCase__					(      self	:							Optional[int]      ):






       '''simple docstring'''






       lowercase_						:     Union[str, Any]							     =  Dataset.from_dict(
           {
               "id": ["0", "1"],
               "text": ["foo", "bar"],
               "title": ["Foo", "Bar"],
               "embeddings": [np.ones(self.retrieval_vector_size + 1      ), 2 * np.ones(self.retrieval_vector_size + 1      )],
           }      )
       dataset.add_faiss_index("embeddings"	,  string_factory="Flat"	,  metric_type=faiss.METRIC_INNER_PRODUCT      )

       lowercase_						:     str							     =  os.path.join(self.tmpdirname	,  "hf_bert_base.hnswSQ8_correct_phi_128.c_index"      )
       dataset.save_faiss_index("embeddings"	,  index_file_name + ".index.dpr"      )
       pickle.dump(dataset["id"]	,  open(index_file_name + ".index_meta.dpr"	,  "wb"      )      )

       lowercase_						:     Dict							     =  os.path.join(self.tmpdirname	,  "psgs_w100.tsv.pkl"      )
       lowercase_						:     List[str]							     =  {sample["id"]: [sample["text"], sample["title"]] for sample in dataset}
       pickle.dump(a	,  open(a	,  "wb"      )      )

       lowercase_						:     Optional[int]							     =  RagConfig(
           retrieval_vector_size=self.retrieval_vector_size	,  question_encoder=DPRConfig().to_dict()	,  generator=BartConfig().to_dict()	,  index_name="legacy"	,  index_path=self.tmpdirname	,  )
       lowercase_						:     str							     =  RagRetriever(
           a	,  question_encoder_tokenizer=self.get_dpr_tokenizer()	,  generator_tokenizer=self.get_bart_tokenizer()      )
       return retriever




    def 					lowerCAmelCase__					(      self	:							Dict      ):






       '''simple docstring'''






       lowercase_						:     Optional[Any]							     =  1
       lowercase_						:     Tuple							     =  self.get_dummy_canonical_hf_index_retriever()
       lowercase_						:     Any							     =  np.array(
           [np.ones(self.retrieval_vector_size      ), -np.ones(self.retrieval_vector_size      )]	,  dtype=np.floataa      )
       lowercase_     ,		lowercase_     ,		lowercase_						:     Tuple							     =  retriever.retrieve(a	,  n_docs=a      )
       self.assertEqual(retrieved_doc_embeds.shape	,  (2, n_docs, self.retrieval_vector_size)      )
       self.assertEqual(len(a      )	,  2      )
       self.assertEqual(sorted(doc_dicts[0]      )	,  ["embeddings", "id", "text", "title"]      )
       self.assertEqual(len(doc_dicts[0]["id"]      )	,  a      )
       self.assertEqual(doc_dicts[0]["id"][0]	,  "1"      )  # max inner product is reached with second doc
       self.assertEqual(doc_dicts[1]["id"][0]	,  "0"      )  # max inner product is reached with first doc
       self.assertListEqual(doc_ids.tolist()	,  [[1], [0]]      )




    def 					lowerCAmelCase__					(      self	:							int      ):






       '''simple docstring'''






       lowercase_						:     Union[str, Any]							     =  self.get_dummy_canonical_hf_index_retriever()
       with tempfile.TemporaryDirectory() as tmp_dirname:
          with patch("transformers.models.rag.retrieval_rag.load_dataset"      ) as mock_load_dataset:
             lowercase_						:     int							     =  self.get_dummy_dataset()
             retriever.save_pretrained(a      )
             lowercase_						:     Union[str, Any]							     =  RagRetriever.from_pretrained(a      )
             self.assertIsInstance(a	,  a      )
             lowercase_						:     Optional[Any]							     =  np.array(
                 [np.ones(self.retrieval_vector_size      ), -np.ones(self.retrieval_vector_size      )]	,  dtype=np.floataa      )
             lowercase_						:     List[Any]							     =  retriever.retrieve(a	,  n_docs=1      )
             self.assertTrue(out is not None      )




    def 					lowerCAmelCase__					(      self	:							Any      ):






       '''simple docstring'''






       lowercase_						:     Any							     =  1
       lowercase_						:     Optional[int]							     =  self.get_dummy_custom_hf_index_retriever(from_disk=a      )
       lowercase_						:     str							     =  np.array(
           [np.ones(self.retrieval_vector_size      ), -np.ones(self.retrieval_vector_size      )]	,  dtype=np.floataa      )
       lowercase_     ,		lowercase_     ,		lowercase_						:     List[str]							     =  retriever.retrieve(a	,  n_docs=a      )
       self.assertEqual(retrieved_doc_embeds.shape	,  (2, n_docs, self.retrieval_vector_size)      )
       self.assertEqual(len(a      )	,  2      )
       self.assertEqual(sorted(doc_dicts[0]      )	,  ["embeddings", "id", "text", "title"]      )
       self.assertEqual(len(doc_dicts[0]["id"]      )	,  a      )
       self.assertEqual(doc_dicts[0]["id"][0]	,  "1"      )  # max inner product is reached with second doc
       self.assertEqual(doc_dicts[1]["id"][0]	,  "0"      )  # max inner product is reached with first doc
       self.assertListEqual(doc_ids.tolist()	,  [[1], [0]]      )




    def 					lowerCAmelCase__					(      self	:							int      ):






       '''simple docstring'''






       lowercase_						:     Any							     =  self.get_dummy_custom_hf_index_retriever(from_disk=a      )
       with tempfile.TemporaryDirectory() as tmp_dirname:
          retriever.save_pretrained(a      )
          lowercase_						:     Tuple							     =  RagRetriever.from_pretrained(a      )
          self.assertIsInstance(a	,  a      )
          lowercase_						:     Optional[Any]							     =  np.array(
              [np.ones(self.retrieval_vector_size      ), -np.ones(self.retrieval_vector_size      )]	,  dtype=np.floataa      )
          lowercase_						:     Dict							     =  retriever.retrieve(a	,  n_docs=1      )
          self.assertTrue(out is not None      )




    def 					lowerCAmelCase__					(      self	:							List[str]      ):






       '''simple docstring'''






       lowercase_						:     List[str]							     =  1
       lowercase_						:     Optional[int]							     =  self.get_dummy_custom_hf_index_retriever(from_disk=a      )
       lowercase_						:     Any							     =  np.array(
           [np.ones(self.retrieval_vector_size      ), -np.ones(self.retrieval_vector_size      )]	,  dtype=np.floataa      )
       lowercase_     ,		lowercase_     ,		lowercase_						:     Optional[int]							     =  retriever.retrieve(a	,  n_docs=a      )
       self.assertEqual(retrieved_doc_embeds.shape	,  (2, n_docs, self.retrieval_vector_size)      )
       self.assertEqual(len(a      )	,  2      )
       self.assertEqual(sorted(doc_dicts[0]      )	,  ["embeddings", "id", "text", "title"]      )
       self.assertEqual(len(doc_dicts[0]["id"]      )	,  a      )
       self.assertEqual(doc_dicts[0]["id"][0]	,  "1"      )  # max inner product is reached with second doc
       self.assertEqual(doc_dicts[1]["id"][0]	,  "0"      )  # max inner product is reached with first doc
       self.assertListEqual(doc_ids.tolist()	,  [[1], [0]]      )




    def 					lowerCAmelCase__					(      self	:							int      ):






       '''simple docstring'''






       lowercase_						:     List[Any]							     =  self.get_dummy_custom_hf_index_retriever(from_disk=a      )
       with tempfile.TemporaryDirectory() as tmp_dirname:
          retriever.save_pretrained(a      )
          lowercase_						:     List[Any]							     =  RagRetriever.from_pretrained(a      )
          self.assertIsInstance(a	,  a      )
          lowercase_						:     Dict							     =  np.array(
              [np.ones(self.retrieval_vector_size      ), -np.ones(self.retrieval_vector_size      )]	,  dtype=np.floataa      )
          lowercase_						:     Tuple							     =  retriever.retrieve(a	,  n_docs=1      )
          self.assertTrue(out is not None      )




    def 					lowerCAmelCase__					(      self	:							Any      ):






       '''simple docstring'''






       lowercase_						:     Optional[Any]							     =  1
       lowercase_						:     int							     =  self.get_dummy_legacy_index_retriever()
       lowercase_						:     Dict							     =  np.array(
           [np.ones(self.retrieval_vector_size      ), -np.ones(self.retrieval_vector_size      )]	,  dtype=np.floataa      )
       lowercase_     ,		lowercase_     ,		lowercase_						:     List[str]							     =  retriever.retrieve(a	,  n_docs=a      )
       self.assertEqual(retrieved_doc_embeds.shape	,  (2, n_docs, self.retrieval_vector_size)      )
       self.assertEqual(len(a      )	,  2      )
       self.assertEqual(sorted(doc_dicts[0]      )	,  ["text", "title"]      )
       self.assertEqual(len(doc_dicts[0]["text"]      )	,  a      )
       self.assertEqual(doc_dicts[0]["text"][0]	,  "bar"      )  # max inner product is reached with second doc
       self.assertEqual(doc_dicts[1]["text"][0]	,  "foo"      )  # max inner product is reached with first doc
       self.assertListEqual(doc_ids.tolist()	,  [[1], [0]]      )




    def 					lowerCAmelCase__					(      self	:							Optional[int]      ):






       '''simple docstring'''






       lowercase_						:     List[str]							     =  self.get_dummy_legacy_index_retriever()
       with tempfile.TemporaryDirectory() as tmp_dirname:
          retriever.save_pretrained(a      )
          lowercase_						:     Union[str, Any]							     =  RagRetriever.from_pretrained(a      )
          self.assertIsInstance(a	,  a      )
          lowercase_						:     str							     =  np.array(
              [np.ones(self.retrieval_vector_size      ), -np.ones(self.retrieval_vector_size      )]	,  dtype=np.floataa      )
          lowercase_						:     List[Any]							     =  retriever.retrieve(a	,  n_docs=1      )
          self.assertTrue(out is not None      )




    @require_torch
    @require_tokenizers
    @require_sentencepiece
    def 					lowerCAmelCase__					(      self	:							Dict      ):






       '''simple docstring'''






       import torch

       lowercase_						:     Optional[Any]							     =  1
       lowercase_						:     str							     =  self.get_dummy_canonical_hf_index_retriever()
       lowercase_						:     Optional[int]							     =  [[5, 7], [1_0, 1_1]]
       lowercase_						:     str							     =  np.array(
           [np.ones(self.retrieval_vector_size      ), -np.ones(self.retrieval_vector_size      )]	,  dtype=np.floataa      )
       lowercase_						:     List[str]							     =  retriever(a	,  a	,  prefix=retriever.config.generator.prefix	,  n_docs=a      )
       lowercase_     ,		lowercase_     ,		lowercase_						:     Union[str, Any]							     =  (
           out["context_input_ids"],
           out["context_attention_mask"],
           out["retrieved_doc_embeds"],
       )
       self.assertEqual(retrieved_doc_embeds.shape	,  (2, n_docs, self.retrieval_vector_size)      )
       self.assertIsInstance(a	,  a      )
       self.assertIsInstance(a	,  a      )
       self.assertIsInstance(a	,  np.ndarray      )

       lowercase_						:     Tuple							     =  retriever(
           a	,  a	,  prefix=retriever.config.generator.prefix	,  n_docs=a	,  return_tensors="pt"	,  )
       lowercase_     ,		lowercase_     ,		lowercase_     ,		lowercase_						:     Tuple							     =  (  # noqa: F841
           out["context_input_ids"],
           out["context_attention_mask"],
           out["retrieved_doc_embeds"],
           out["doc_ids"],
       )
       self.assertEqual(retrieved_doc_embeds.shape	,  (2, n_docs, self.retrieval_vector_size)      )
       self.assertIsInstance(a	,  torch.Tensor      )
       self.assertIsInstance(a	,  torch.Tensor      )
       self.assertIsInstance(a	,  torch.Tensor      )





    @require_torch
    @require_tokenizers
    @require_sentencepiece
    def 					lowerCAmelCase__					(      self	:							Any      ):






       '''simple docstring'''






       lowercase_						:     List[Any]							     =  self.get_dpr_ctx_encoder_tokenizer()
       lowercase_						:     Tuple							     =  1
       lowercase_						:     int							     =  self.get_dummy_custom_hf_index_retriever(from_disk=a      )
       retriever.set_ctx_encoder_tokenizer(a      )

       lowercase_						:     Tuple							     =  [[5, 7], [1_0, 1_1]]
       lowercase_						:     Optional[Any]							     =  np.array(
           [np.ones(self.retrieval_vector_size      ), -np.ones(self.retrieval_vector_size      )]	,  dtype=np.floataa      )
       lowercase_						:     Dict							     =  retriever(a	,  a	,  prefix=retriever.config.generator.prefix	,  n_docs=a      )

       self.assertEqual(
           len(a      )	,  6      )  # check whether the retriever output consist of 6 attributes including tokenized docs
       self.assertEqual(
           all(k in out for k in ("tokenized_doc_ids", "tokenized_doc_attention_mask")      )	,  a      )  # check for doc token related keys in dictionary.




