






'''simple docstring'''





import json
import logging
import os
import sys
from pathlib import Path

import finetune_rag

from transformers.file_utils import is_apex_available
from transformers.testing_utils import (
    TestCasePlus,
    execute_subprocess_async,
    require_ray,
    require_torch_gpu,
    require_torch_multi_gpu,
)


logging.basicConfig(level=logging.DEBUG)
__A							:							Dict  							=		logging.getLogger()

__A							:							List[Any]  							=		logging.StreamHandler(sys.stdout)
logger.addHandler(stream_handler)
class 				lowercase       (							_lowerCamelCase      ):


    '''simple docstring'''

    def    a__				(					self     :     Optional[Any]				,     __lowerCamelCase     :     Dict     )							->							Optional[int]:

     '''simple docstring'''




     os.makedirs(__lowerCamelCase				,     exist_ok=__lowerCamelCase     )
     lowerCamelCase__  =     {"source": "What is love ?", "target": "life"}
     lowerCamelCase__  =     {"train": 12, "val": 2, "test": 2}
     for split in ["train", "test", "val"]:
      for field in ["source", "target"]:
       lowerCamelCase__  =     "\n".join([contents[field]] * n_lines[split]     )
       with open(os.path.join(__lowerCamelCase				,     f'''{split}.{field}'''     )				,     "w"     ) as f:
        f.write(__lowerCamelCase     )

    def    a__				(					self     :     Union[str, Any]				,     __lowerCamelCase     :     int				,     __lowerCamelCase     :     str = "pytorch"     )							->							Optional[Any]:

     '''simple docstring'''




     lowerCamelCase__  =     self.get_auto_remove_tmp_dir()
     lowerCamelCase__  =     os.path.join(__lowerCamelCase				,     "output"     )
     lowerCamelCase__  =     os.path.join(__lowerCamelCase				,     "data"     )
     self._create_dummy_data(data_dir=__lowerCamelCase     )

     lowerCamelCase__  =     f'''
                --data_dir {data_dir} \
                --output_dir {output_dir} \
                --model_name_or_path facebook/rag-sequence-base \
                --model_type rag_sequence \
                --do_train \
                --do_predict \
                --n_val -1 \
                --val_check_interval 1.0 \
                --train_batch_size 2 \
                --eval_batch_size 1 \
                --max_source_length 25 \
                --max_target_length 25 \
                --val_max_target_length 25 \
                --test_max_target_length 25 \
                --label_smoothing 0.1 \
                --dropout 0.1 \
                --attention_dropout 0.1 \
                --weight_decay 0.001 \
                --adam_epsilon 1e-08 \
                --max_grad_norm 0.1 \
                --lr_scheduler polynomial \
                --learning_rate 3e-04 \
                --num_train_epochs 1 \
                --warmup_steps 4 \
                --gradient_accumulation_steps 1 \
                --distributed-port 8787 \
                --use_dummy_dataset 1 \
                --distributed_retriever {distributed_retriever} \
            '''.split()

     if gpus > 0:
      testargs.append(f'''--gpus={gpus}'''     )
      if is_apex_available():
       testargs.append("--fp16"     )
     else:
      testargs.append("--gpus=0"     )
      testargs.append("--distributed_backend=ddp_cpu"     )
      testargs.append("--num_processes=2"     )

     lowerCamelCase__  =     [sys.executable, str(Path(finetune_rag.__file__     ).resolve()     )] + testargs
     execute_subprocess_async(__lowerCamelCase				,     env=self.get_env()     )

     lowerCamelCase__  =     os.path.join(__lowerCamelCase				,     "metrics.json"     )
     with open(__lowerCamelCase     ) as f:
      lowerCamelCase__  =     json.load(__lowerCamelCase     )
     return result

    @require_torch_gpu
    def    a__				(					self     :     Optional[int]     )							->							Optional[Any]:

     '''simple docstring'''




     lowerCamelCase__  =     self._run_finetune(gpus=1     )
     self.assertGreaterEqual(result["test"][0]["test_avg_em"]				,     0.2     )

    @require_torch_multi_gpu
    def    a__				(					self     :     Dict     )							->							Union[str, Any]:

     '''simple docstring'''




     lowerCamelCase__  =     self._run_finetune(gpus=2     )
     self.assertGreaterEqual(result["test"][0]["test_avg_em"]				,     0.2     )

    @require_torch_gpu
    @require_ray
    def    a__				(					self     :     int     )							->							Union[str, Any]:

     '''simple docstring'''




     lowerCamelCase__  =     self._run_finetune(gpus=1				,     distributed_retriever="ray"     )
     self.assertGreaterEqual(result["test"][0]["test_avg_em"]				,     0.2     )




    @require_torch_multi_gpu
    @require_ray
    def    a__				(					self     :     Union[str, Any]     )							->							Dict:

     '''simple docstring'''




     lowerCamelCase__  =     self._run_finetune(gpus=1				,     distributed_retriever="ray"     )
     self.assertGreaterEqual(result["test"][0]["test_avg_em"]				,     0.2     )









'''simple docstring'''





from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_tf_available,
    is_tokenizers_available,
    is_torch_available,
)


__A							:							Tuple  							=		{
    """configuration_deberta""": ["""DEBERTA_PRETRAINED_CONFIG_ARCHIVE_MAP""", """DebertaConfig""", """DebertaOnnxConfig"""],
    """tokenization_deberta""": ["""DebertaTokenizer"""],
}

try:
 if not is_tokenizers_available():
  raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
 pass
else:
 __A							:							int  							=		["""DebertaTokenizerFast"""]

try:
 if not is_torch_available():
  raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
 pass
else:
 __A							:							str  							=		[
     """DEBERTA_PRETRAINED_MODEL_ARCHIVE_LIST""",
     """DebertaForMaskedLM""",
     """DebertaForQuestionAnswering""",
     """DebertaForSequenceClassification""",
     """DebertaForTokenClassification""",
     """DebertaModel""",
     """DebertaPreTrainedModel""",
 ]

try:
 if not is_tf_available():
  raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
 pass
else:
 __A							:							Union[str, Any]  							=		[
     """TF_DEBERTA_PRETRAINED_MODEL_ARCHIVE_LIST""",
     """TFDebertaForMaskedLM""",
     """TFDebertaForQuestionAnswering""",
     """TFDebertaForSequenceClassification""",
     """TFDebertaForTokenClassification""",
     """TFDebertaModel""",
     """TFDebertaPreTrainedModel""",
 ]


if TYPE_CHECKING:
 from .configuration_deberta import DEBERTA_PRETRAINED_CONFIG_ARCHIVE_MAP, DebertaConfig, DebertaOnnxConfig
 from .tokenization_deberta import DebertaTokenizer

 try:
  if not is_tokenizers_available():
   raise OptionalDependencyNotAvailable()
 except OptionalDependencyNotAvailable:
  pass
 else:
  from .tokenization_deberta_fast import DebertaTokenizerFast

 try:
  if not is_torch_available():
   raise OptionalDependencyNotAvailable()
 except OptionalDependencyNotAvailable:
  pass
 else:
  from .modeling_deberta import (
      DEBERTA_PRETRAINED_MODEL_ARCHIVE_LIST,
      DebertaForMaskedLM,
      DebertaForQuestionAnswering,
      DebertaForSequenceClassification,
      DebertaForTokenClassification,
      DebertaModel,
      DebertaPreTrainedModel,
  )

 try:
  if not is_tf_available():
   raise OptionalDependencyNotAvailable()
 except OptionalDependencyNotAvailable:
  pass
 else:
  from .modeling_tf_deberta import (
      TF_DEBERTA_PRETRAINED_MODEL_ARCHIVE_LIST,
      TFDebertaForMaskedLM,
      TFDebertaForQuestionAnswering,
      TFDebertaForSequenceClassification,
      TFDebertaForTokenClassification,
      TFDebertaModel,
      TFDebertaPreTrainedModel,
  )


else:
 import sys

 __A							:							List[Any]  							=		_LazyModule(__name__, globals()["""__file__"""], _import_structure, module_spec=__spec__)

