import unittest

from transformers import is_torch_available
from transformers.testing_utils import require_torch, slow, torch_device

from ...test_configuration_common import ConfigTester
from ...test_modeling_common import ModelTesterMixin, floats_tensor, ids_tensor, random_attention_mask
from ...test_pipeline_mixin import PipelineTesterMixin


if is_torch_available():
     import torch

     from transformers import (
         RemBertConfig,
         RemBertForCausalLM,
         RemBertForMaskedLM,
         RemBertForMultipleChoice,
         RemBertForQuestionAnswering,
         RemBertForSequenceClassification,
         RemBertForTokenClassification,
         RemBertModel,
     )
     from transformers.models.rembert.modeling_rembert import REMBERT_PRETRAINED_MODEL_ARCHIVE_LIST
class SCREAMING_SNAKE_CASE_		:







   def __init__(    self	:	Any      ,      lowerCamelCase_	:	Union[str, Any]      ,      lowerCamelCase_	:	Tuple=13      ,      lowerCamelCase_	:	List[str]=7      ,      lowerCamelCase_	:	List[str]=True      ,      lowerCamelCase_	:	Optional[Any]=True      ,      lowerCamelCase_	:	str=True      ,      lowerCamelCase_	:	Any=True      ,      lowerCamelCase_	:	str=99      ,      lowerCamelCase_	:	str=32      ,      lowerCamelCase_	:	Optional[int]=18      ,      lowerCamelCase_	:	Optional[int]=43      ,      lowerCamelCase_	:	Any=5      ,      lowerCamelCase_	:	Tuple=4      ,      lowerCamelCase_	:	str=37      ,      lowerCamelCase_	:	int="gelu"      ,      lowerCamelCase_	:	str=0.1      ,      lowerCamelCase_	:	Any=0.1      ,      lowerCamelCase_	:	List[Any]=512      ,      lowerCamelCase_	:	str=16      ,      lowerCamelCase_	:	str=2      ,      lowerCamelCase_	:	Any=0.0_2      ,      lowerCamelCase_	:	int=3      ,      lowerCamelCase_	:	List[Any]=4      ,      lowerCamelCase_	:	str=None      ,      ):





    """simple docstring"""


    UpperCamelCase      =			parent
    UpperCamelCase      =			batch_size
    UpperCamelCase      =			seq_length
    UpperCamelCase      =			is_training
    UpperCamelCase      =			use_input_mask
    UpperCamelCase      =			use_token_type_ids
    UpperCamelCase      =			use_labels
    UpperCamelCase      =			vocab_size
    UpperCamelCase      =			hidden_size
    UpperCamelCase      =			input_embedding_size
    UpperCamelCase      =			output_embedding_size
    UpperCamelCase      =			num_hidden_layers
    UpperCamelCase      =			num_attention_heads
    UpperCamelCase      =			intermediate_size
    UpperCamelCase      =			hidden_act
    UpperCamelCase      =			hidden_dropout_prob
    UpperCamelCase      =			attention_probs_dropout_prob
    UpperCamelCase      =			max_position_embeddings
    UpperCamelCase      =			type_vocab_size
    UpperCamelCase      =			type_sequence_label_size
    UpperCamelCase      =			initializer_range
    UpperCamelCase      =			num_labels
    UpperCamelCase      =			num_choices
    UpperCamelCase      =			scope







   def 	lowerCamelCase_  (    self	:	Optional[Any]							):





    """simple docstring"""


    UpperCamelCase      =			ids_tensor([self.batch_size, self.seq_length]      ,      self.vocab_size							)

    UpperCamelCase      =			None
    if self.use_input_mask:
     UpperCamelCase      =			random_attention_mask([self.batch_size, self.seq_length]							)

    UpperCamelCase      =			None
    if self.use_token_type_ids:
     UpperCamelCase      =			ids_tensor([self.batch_size, self.seq_length]      ,      self.type_vocab_size							)

    UpperCamelCase      =			None
    UpperCamelCase      =			None
    UpperCamelCase      =			None
    if self.use_labels:
     UpperCamelCase      =			ids_tensor([self.batch_size]      ,      self.type_sequence_label_size							)
     UpperCamelCase      =			ids_tensor([self.batch_size, self.seq_length]      ,      self.num_labels							)
     UpperCamelCase      =			ids_tensor([self.batch_size]      ,      self.num_choices							)

    UpperCamelCase      =			RemBertConfig(
        vocab_size=self.vocab_size      ,      hidden_size=self.hidden_size      ,      input_embedding_size=self.input_embedding_size      ,      output_embedding_size=self.output_embedding_size      ,      num_hidden_layers=self.num_hidden_layers      ,      num_attention_heads=self.num_attention_heads      ,      intermediate_size=self.intermediate_size      ,      hidden_act=self.hidden_act      ,      hidden_dropout_prob=self.hidden_dropout_prob      ,      attention_probs_dropout_prob=self.attention_probs_dropout_prob      ,      max_position_embeddings=self.max_position_embeddings      ,      type_vocab_size=self.type_vocab_size      ,      is_decoder=__lowerCamelCase      ,      initializer_range=self.initializer_range      ,      )

    return config, input_ids, token_type_ids, input_mask, sequence_labels, token_labels, choice_labels







   def 	lowerCamelCase_  (    self	:	Optional[int]							):





    """simple docstring"""


    (
        UpperCamelCase    
    )      =			self.prepare_config_and_inputs()

    UpperCamelCase      =			True
    UpperCamelCase      =			floats_tensor([self.batch_size, self.seq_length, self.hidden_size]							)
    UpperCamelCase      =			ids_tensor([self.batch_size, self.seq_length]      ,      vocab_size=2							)

    return (
        config,
        input_ids,
        token_type_ids,
        input_mask,
        sequence_labels,
        token_labels,
        choice_labels,
        encoder_hidden_states,
        encoder_attention_mask,
    )







   def 	lowerCamelCase_  (    self	:	List[str]      ,      lowerCamelCase_	:	List[str]      ,      lowerCamelCase_	:	List[str]      ,      lowerCamelCase_	:	str      ,      lowerCamelCase_	:	Dict      ,      lowerCamelCase_	:	int      ,      lowerCamelCase_	:	str      ,      lowerCamelCase_	:	str							):





    """simple docstring"""


    UpperCamelCase      =			RemBertModel(config=__lowerCamelCase							)
    model.to(__lowerCamelCase							)
    model.eval()
    UpperCamelCase      =			model(__lowerCamelCase      ,      attention_mask=__lowerCamelCase      ,      token_type_ids=__lowerCamelCase							)
    UpperCamelCase      =			model(__lowerCamelCase      ,      token_type_ids=__lowerCamelCase							)
    UpperCamelCase      =			model(__lowerCamelCase							)
    self.parent.assertEqual(result.last_hidden_state.shape      ,      (self.batch_size, self.seq_length, self.hidden_size)							)







   def 	lowerCamelCase_  (    self	:	List[Any]      ,      lowerCamelCase_	:	str      ,      lowerCamelCase_	:	Optional[Any]      ,      lowerCamelCase_	:	List[Any]      ,      lowerCamelCase_	:	Tuple      ,      lowerCamelCase_	:	str      ,      lowerCamelCase_	:	str      ,      lowerCamelCase_	:	Optional[int]      ,      lowerCamelCase_	:	List[Any]      ,      lowerCamelCase_	:	Dict      ,      ):





    """simple docstring"""


    UpperCamelCase      =			True
    UpperCamelCase      =			RemBertModel(__lowerCamelCase							)
    model.to(__lowerCamelCase							)
    model.eval()
    UpperCamelCase      =			model(
        __lowerCamelCase      ,      attention_mask=__lowerCamelCase      ,      token_type_ids=__lowerCamelCase      ,      encoder_hidden_states=__lowerCamelCase      ,      encoder_attention_mask=__lowerCamelCase      ,      )
    UpperCamelCase      =			model(
        __lowerCamelCase      ,      attention_mask=__lowerCamelCase      ,      token_type_ids=__lowerCamelCase      ,      encoder_hidden_states=__lowerCamelCase      ,      )
    UpperCamelCase      =			model(__lowerCamelCase      ,      attention_mask=__lowerCamelCase      ,      token_type_ids=__lowerCamelCase							)
    self.parent.assertEqual(result.last_hidden_state.shape      ,      (self.batch_size, self.seq_length, self.hidden_size)							)







   def 	lowerCamelCase_  (    self	:	int      ,      lowerCamelCase_	:	Optional[int]      ,      lowerCamelCase_	:	List[str]      ,      lowerCamelCase_	:	str      ,      lowerCamelCase_	:	Any      ,      lowerCamelCase_	:	Optional[int]      ,      lowerCamelCase_	:	Union[str, Any]      ,      lowerCamelCase_	:	Any      ,      lowerCamelCase_	:	int      ,      lowerCamelCase_	:	List[Any]      ,      ):





    """simple docstring"""


    UpperCamelCase      =			RemBertForCausalLM(config=__lowerCamelCase							)
    model.to(__lowerCamelCase							)
    model.eval()
    UpperCamelCase      =			model(__lowerCamelCase      ,      attention_mask=__lowerCamelCase      ,      token_type_ids=__lowerCamelCase      ,      labels=__lowerCamelCase							)
    self.parent.assertEqual(result.logits.shape      ,      (self.batch_size, self.seq_length, self.vocab_size)							)







   def 	lowerCamelCase_  (    self	:	List[Any]      ,      lowerCamelCase_	:	Any      ,      lowerCamelCase_	:	int      ,      lowerCamelCase_	:	str      ,      lowerCamelCase_	:	List[Any]      ,      lowerCamelCase_	:	Tuple      ,      lowerCamelCase_	:	Optional[Any]      ,      lowerCamelCase_	:	List[Any]							):





    """simple docstring"""


    UpperCamelCase      =			RemBertForMaskedLM(config=__lowerCamelCase							)
    model.to(__lowerCamelCase							)
    model.eval()
    UpperCamelCase      =			model(__lowerCamelCase      ,      attention_mask=__lowerCamelCase      ,      token_type_ids=__lowerCamelCase      ,      labels=__lowerCamelCase							)
    self.parent.assertEqual(result.logits.shape      ,      (self.batch_size, self.seq_length, self.vocab_size)							)







   def 	lowerCamelCase_  (    self	:	Tuple      ,      lowerCamelCase_	:	Any      ,      lowerCamelCase_	:	Any      ,      lowerCamelCase_	:	Optional[int]      ,      lowerCamelCase_	:	List[Any]      ,      lowerCamelCase_	:	Union[str, Any]      ,      lowerCamelCase_	:	int      ,      lowerCamelCase_	:	Union[str, Any]      ,      lowerCamelCase_	:	int      ,      lowerCamelCase_	:	str      ,      ):





    """simple docstring"""


    UpperCamelCase      =			True
    UpperCamelCase      =			True
    UpperCamelCase      =			RemBertForCausalLM(config=__lowerCamelCase							)
    model.to(__lowerCamelCase							)
    model.eval()

    # first forward pass
    UpperCamelCase      =			model(
        __lowerCamelCase      ,      attention_mask=__lowerCamelCase      ,      encoder_hidden_states=__lowerCamelCase      ,      encoder_attention_mask=__lowerCamelCase      ,      use_cache=__lowerCamelCase      ,      )
    UpperCamelCase      =			outputs.past_key_values

    # create hypothetical multiple next token and extent to next_input_ids
    UpperCamelCase      =			ids_tensor((self.batch_size, 3)      ,      config.vocab_size							)
    UpperCamelCase      =			ids_tensor((self.batch_size, 3)      ,      vocab_size=2							)

    # append to next input_ids and
    UpperCamelCase      =			torch.cat([input_ids, next_tokens]      ,      dim=-1							)
    UpperCamelCase      =			torch.cat([input_mask, next_mask]      ,      dim=-1							)

    UpperCamelCase      =			model(
        __lowerCamelCase      ,      attention_mask=__lowerCamelCase      ,      encoder_hidden_states=__lowerCamelCase      ,      encoder_attention_mask=__lowerCamelCase      ,      output_hidden_states=__lowerCamelCase      ,      )["hidden_states"][0]
    UpperCamelCase      =			model(
        __lowerCamelCase      ,      attention_mask=__lowerCamelCase      ,      encoder_hidden_states=__lowerCamelCase      ,      encoder_attention_mask=__lowerCamelCase      ,      past_key_values=__lowerCamelCase      ,      output_hidden_states=__lowerCamelCase      ,      )["hidden_states"][0]

    # select random slice
    UpperCamelCase      =			ids_tensor((1,)      ,      output_from_past.shape[-1]							).item()
    UpperCamelCase      =			output_from_no_past[:, -3:, random_slice_idx].detach()
    UpperCamelCase      =			output_from_past[:, :, random_slice_idx].detach()

    self.parent.assertTrue(output_from_past_slice.shape[1] == next_tokens.shape[1]							)

    # test that outputs are equal for slice
    self.parent.assertTrue(torch.allclose(__lowerCamelCase      ,      __lowerCamelCase      ,      atol=1E-3							)							)







   def 	lowerCamelCase_  (    self	:	Dict      ,      lowerCamelCase_	:	int      ,      lowerCamelCase_	:	List[str]      ,      lowerCamelCase_	:	Tuple      ,      lowerCamelCase_	:	Dict      ,      lowerCamelCase_	:	Union[str, Any]      ,      lowerCamelCase_	:	List[str]      ,      lowerCamelCase_	:	List[str]							):





    """simple docstring"""


    UpperCamelCase      =			RemBertForQuestionAnswering(config=__lowerCamelCase							)
    model.to(__lowerCamelCase							)
    model.eval()
    UpperCamelCase      =			model(
        __lowerCamelCase      ,      attention_mask=__lowerCamelCase      ,      token_type_ids=__lowerCamelCase      ,      start_positions=__lowerCamelCase      ,      end_positions=__lowerCamelCase      ,      )
    self.parent.assertEqual(result.start_logits.shape      ,      (self.batch_size, self.seq_length)							)
    self.parent.assertEqual(result.end_logits.shape      ,      (self.batch_size, self.seq_length)							)







   def 	lowerCamelCase_  (    self	:	Any      ,      lowerCamelCase_	:	List[Any]      ,      lowerCamelCase_	:	List[Any]      ,      lowerCamelCase_	:	Union[str, Any]      ,      lowerCamelCase_	:	int      ,      lowerCamelCase_	:	Optional[Any]      ,      lowerCamelCase_	:	Dict      ,      lowerCamelCase_	:	Union[str, Any]							):





    """simple docstring"""


    UpperCamelCase      =			self.num_labels
    UpperCamelCase      =			RemBertForSequenceClassification(__lowerCamelCase							)
    model.to(__lowerCamelCase							)
    model.eval()
    UpperCamelCase      =			model(__lowerCamelCase      ,      attention_mask=__lowerCamelCase      ,      token_type_ids=__lowerCamelCase      ,      labels=__lowerCamelCase							)
    self.parent.assertEqual(result.logits.shape      ,      (self.batch_size, self.num_labels)							)







   def 	lowerCamelCase_  (    self	:	Dict      ,      lowerCamelCase_	:	Optional[int]      ,      lowerCamelCase_	:	Optional[int]      ,      lowerCamelCase_	:	Optional[Any]      ,      lowerCamelCase_	:	List[Any]      ,      lowerCamelCase_	:	Any      ,      lowerCamelCase_	:	Union[str, Any]      ,      lowerCamelCase_	:	Union[str, Any]							):





    """simple docstring"""


    UpperCamelCase      =			self.num_labels
    UpperCamelCase      =			RemBertForTokenClassification(config=__lowerCamelCase							)
    model.to(__lowerCamelCase							)
    model.eval()
    UpperCamelCase      =			model(__lowerCamelCase      ,      attention_mask=__lowerCamelCase      ,      token_type_ids=__lowerCamelCase      ,      labels=__lowerCamelCase							)
    self.parent.assertEqual(result.logits.shape      ,      (self.batch_size, self.seq_length, self.num_labels)							)







   def 	lowerCamelCase_  (    self	:	Optional[int]      ,      lowerCamelCase_	:	Optional[Any]      ,      lowerCamelCase_	:	str      ,      lowerCamelCase_	:	Tuple      ,      lowerCamelCase_	:	Tuple      ,      lowerCamelCase_	:	Dict      ,      lowerCamelCase_	:	int      ,      lowerCamelCase_	:	Dict							):





    """simple docstring"""


    UpperCamelCase      =			self.num_choices
    UpperCamelCase      =			RemBertForMultipleChoice(config=__lowerCamelCase							)
    model.to(__lowerCamelCase							)
    model.eval()
    UpperCamelCase      =			input_ids.unsqueeze(1							).expand(-1      ,      self.num_choices      ,      -1							).contiguous()
    UpperCamelCase      =			token_type_ids.unsqueeze(1							).expand(-1      ,      self.num_choices      ,      -1							).contiguous()
    UpperCamelCase      =			input_mask.unsqueeze(1							).expand(-1      ,      self.num_choices      ,      -1							).contiguous()
    UpperCamelCase      =			model(
        __lowerCamelCase      ,      attention_mask=__lowerCamelCase      ,      token_type_ids=__lowerCamelCase      ,      labels=__lowerCamelCase      ,      )
    self.parent.assertEqual(result.logits.shape      ,      (self.batch_size, self.num_choices)							)







   def 	lowerCamelCase_  (    self	:	int							):





    """simple docstring"""


    UpperCamelCase      =			self.prepare_config_and_inputs()
    (
        UpperCamelCase    
    )      =			config_and_inputs
    UpperCamelCase      =			{"input_ids": input_ids, "token_type_ids": token_type_ids, "attention_mask": input_mask}
    return config, inputs_dict





@require_torch
class SCREAMING_SNAKE_CASE_		(			__lowerCAmelCase     ,    __lowerCAmelCase     ,    unittest.TestCase		):
   __lowerCAmelCase											=							(
       (
           RemBertModel,
           RemBertForMaskedLM,
           RemBertForCausalLM,
           RemBertForMultipleChoice,
           RemBertForQuestionAnswering,
           RemBertForSequenceClassification,
           RemBertForTokenClassification,
       )
       if is_torch_available()
       else ()
   )
   __lowerCAmelCase											=							(RemBertForCausalLM,) if is_torch_available() else ()
   __lowerCAmelCase											=							(
       {
           """feature-extraction""": RemBertModel,
           """fill-mask""": RemBertForMaskedLM,
           """question-answering""": RemBertForQuestionAnswering,
           """text-classification""": RemBertForSequenceClassification,
           """text-generation""": RemBertForCausalLM,
           """token-classification""": RemBertForTokenClassification,
           """zero-shot""": RemBertForSequenceClassification,
       }
       if is_torch_available()
       else {}
   )







   def 	lowerCamelCase_  (    self	:	str							):





    """simple docstring"""


    UpperCamelCase      =			RemBertModelTester(self							)
    UpperCamelCase      =			ConfigTester(self      ,      config_class=__lowerCamelCase      ,      hidden_size=37							)







   def 	lowerCamelCase_  (    self	:	Any							):





    """simple docstring"""


    self.config_tester.run_common_tests()







   def 	lowerCamelCase_  (    self	:	List[Any]							):





    """simple docstring"""


    UpperCamelCase      =			self.model_tester.prepare_config_and_inputs()
    self.model_tester.create_and_check_model(*__lowerCamelCase							)







   def 	lowerCamelCase_  (    self	:	Tuple							):





    """simple docstring"""


    UpperCamelCase      =			self.model_tester.prepare_config_and_inputs()
    for type in ["absolute", "relative_key", "relative_key_query"]:
     UpperCamelCase      =			type
     self.model_tester.create_and_check_model(*__lowerCamelCase							)







   def 	lowerCamelCase_  (    self	:	List[str]							):





    """simple docstring"""


    UpperCamelCase      =			self.model_tester.prepare_config_and_inputs()
    self.model_tester.create_and_check_for_masked_lm(*__lowerCamelCase							)







   def 	lowerCamelCase_  (    self	:	Tuple							):





    """simple docstring"""


    UpperCamelCase      =			self.model_tester.prepare_config_and_inputs()
    self.model_tester.create_and_check_for_multiple_choice(*__lowerCamelCase							)







   def 	lowerCamelCase_  (    self	:	str							):





    """simple docstring"""


    UpperCamelCase      =			self.model_tester.prepare_config_and_inputs_for_decoder()
    self.model_tester.create_and_check_decoder_model_past_large_inputs(*__lowerCamelCase							)







   def 	lowerCamelCase_  (    self	:	List[str]							):





    """simple docstring"""


    UpperCamelCase      =			self.model_tester.prepare_config_and_inputs()
    self.model_tester.create_and_check_for_question_answering(*__lowerCamelCase							)







   def 	lowerCamelCase_  (    self	:	Dict							):





    """simple docstring"""


    UpperCamelCase      =			self.model_tester.prepare_config_and_inputs()
    self.model_tester.create_and_check_for_sequence_classification(*__lowerCamelCase							)







   def 	lowerCamelCase_  (    self	:	Dict							):





    """simple docstring"""


    UpperCamelCase      =			self.model_tester.prepare_config_and_inputs()
    self.model_tester.create_and_check_for_token_classification(*__lowerCamelCase							)







   def 	lowerCamelCase_  (    self	:	Any							):





    """simple docstring"""


    UpperCamelCase      =			self.model_tester.prepare_config_and_inputs_for_decoder()
    self.model_tester.create_and_check_model_as_decoder(*__lowerCamelCase							)







   def 	lowerCamelCase_  (    self	:	List[str]							):





    """simple docstring"""


    (
        UpperCamelCase    
    )      =			self.model_tester.prepare_config_and_inputs_for_decoder()

    UpperCamelCase      =			None

    self.model_tester.create_and_check_model_as_decoder(
        __lowerCamelCase      ,      __lowerCamelCase      ,      __lowerCamelCase      ,      __lowerCamelCase      ,      __lowerCamelCase      ,      __lowerCamelCase      ,      __lowerCamelCase      ,      __lowerCamelCase      ,      __lowerCamelCase      ,      )







   @slow
   def 	lowerCamelCase_  (    self	:	Union[str, Any]							):





    """simple docstring"""


    for model_name in REMBERT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
     UpperCamelCase      =			RemBertModel.from_pretrained(__lowerCamelCase							)
     self.assertIsNotNone(__lowerCamelCase							)





@require_torch
class SCREAMING_SNAKE_CASE_		(			unittest.TestCase		):







   @slow
   def 	lowerCamelCase_  (    self	:	str							):





    """simple docstring"""


    UpperCamelCase      =			RemBertModel.from_pretrained("""google/rembert"""							)
    UpperCamelCase      =			torch.tensor([[312, 5_6498, 313, 2125, 313]]							)
    UpperCamelCase      =			torch.tensor([[0, 0, 0, 1, 1]]							)
    with torch.no_grad():
     UpperCamelCase      =			model(__lowerCamelCase      ,      token_type_ids=__lowerCamelCase      ,      output_hidden_states=__lowerCamelCase							)

    UpperCamelCase      =			1152

    UpperCamelCase      =			torch.Size((1, 5, hidden_size)							)
    self.assertEqual(output["""last_hidden_state"""].shape      ,      __lowerCamelCase							)

    UpperCamelCase      =			torch.tensor(
        [
            [
                [0.0_7_5_4, -0.2_0_2_2, 0.1_9_0_4],
                [-0.3_3_5_4, -0.3_6_9_2, -0.4_7_9_1],
                [-0.2_3_1_4, -0.6_7_2_9, -0.0_7_4_9],
                [-0.0_3_9_6, -0.3_1_0_5, -0.4_2_3_4],
                [-0.1_5_7_1, -0.0_5_2_5, 0.5_3_5_3],
            ]
        ]							)

    # Running on the original tf implementation gives slightly different results here.
    # Not clear why this variations is present
    # TODO: Find reason for discrepancy
    # expected_original_implementation = [[
    #     [0.07630594074726105, -0.20146065950393677, 0.19107051193714142],
    #     [-0.3405614495277405, -0.36971670389175415, -0.4808273911476135],
    #     [-0.22587086260318756, -0.6656315922737122, -0.07844287157058716],
    #     [-0.04145475849509239, -0.3077218234539032, -0.42316967248916626],
    #     [-0.15887849032878876, -0.054529931396245956, 0.5356100797653198]
    # ]]

    self.assertTrue(torch.allclose(output["""last_hidden_state"""][:, :, :3]      ,      __lowerCamelCase      ,      atol=1E-4							)							)

import unittest

from datasets import load_dataset

from transformers import load_tool

from .test_tools_common import ToolTesterMixin
class SCREAMING_SNAKE_CASE_		(			unittest.TestCase     ,    __lowerCAmelCase		):







   def 	lowerCamelCase_  (    self	:	Optional[Any]							):





    """simple docstring"""


    UpperCamelCase      =			load_tool("""document-question-answering"""							)
    self.tool.setup()
    UpperCamelCase      =			load_tool("""document-question-answering"""      ,      remote=lowerCamelCase_							)







   def 	lowerCamelCase_  (    self	:	Optional[Any]							):





    """simple docstring"""


    UpperCamelCase      =			load_dataset("""hf-internal-testing/example-documents"""      ,      split="""test"""							)
    UpperCamelCase      =			dataset[0]["""image"""]

    UpperCamelCase      =			self.tool(lowerCamelCase_      ,      """When is the coffee break?"""							)
    self.assertEqual(lowerCamelCase_      ,      """11-14 to 11:39 a.m."""							)







   def 	lowerCamelCase_  (    self	:	Union[str, Any]							):





    """simple docstring"""


    UpperCamelCase      =			load_dataset("""hf-internal-testing/example-documents"""      ,      split="""test"""							)
    UpperCamelCase      =			dataset[0]["""image"""]

    UpperCamelCase      =			self.remote_tool(lowerCamelCase_      ,      """When is the coffee break?"""							)
    self.assertEqual(lowerCamelCase_      ,      """11-14 to 11:39 a.m."""							)







   def 	lowerCamelCase_  (    self	:	int							):





    """simple docstring"""


    UpperCamelCase      =			load_dataset("""hf-internal-testing/example-documents"""      ,      split="""test"""							)
    UpperCamelCase      =			dataset[0]["""image"""]

    self.tool(document=lowerCamelCase_      ,      question="""When is the coffee break?"""							)







   def 	lowerCamelCase_  (    self	:	Any							):





    """simple docstring"""


    UpperCamelCase      =			load_dataset("""hf-internal-testing/example-documents"""      ,      split="""test"""							)
    UpperCamelCase      =			dataset[0]["""image"""]

    UpperCamelCase      =			self.remote_tool(document=lowerCamelCase_      ,      question="""When is the coffee break?"""							)
    self.assertEqual(lowerCamelCase_      ,      """11-14 to 11:39 a.m."""							)
