
'''simple docstring'''







import unittest

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


if is_torch_available():
    import torch

    from transformers import XLMProphetNetForConditionalGeneration, XLMProphetNetTokenizer







@require_torch
class 		snake_case_       (						unittest.TestCase						):



   """simple docstring"""





   @slow
   def     __UpperCAmelCase      ( self):
          lowerCamelCase__				   =      XLMProphetNetForConditionalGeneration.from_pretrained("microsoft/xprophetnet-large-wiki100-cased")
          model.to(UpperCamelCase)

          # encoder-decoder outputs
          lowerCamelCase__				   =      torch.tensor([[17, 9_62_08, 10_34_71, 2]]).to(UpperCamelCase)
          lowerCamelCase__				   =      torch.tensor(
              [[2, 2_50, 99_53, 34, 6_94_89, 16_20, 32, 11_84_24, 6_24, 2_10, 1_05, 29_13, 10_32, 3_51]]).to(UpperCamelCase)
          lowerCamelCase__				   =      model(
              input_ids=UpperCamelCase			,   attention_mask=UpperCamelCase			,   encoder_outputs=UpperCamelCase			,   decoder_input_ids=UpperCamelCase)
          lowerCamelCase__				   =      output[0]
          lowerCamelCase__				   =      torch.Size((1, 14, 25_00_12))
          self.assertEqual(output_predited_logis.shape			,   UpperCamelCase)
          lowerCamelCase__				   =      torch.tensor(
              [[[-6.3_9_8_6, -8.2_3_9_1, 1_2.5_1_8_9], [-6.3_2_8_9, -8.0_8_6_4, 1_2.6_2_1_1], [-6.2_4_1_8, -8.0_4_4_5, 1_2.7_9_6_8]]]).to(UpperCamelCase)
          self.assertTrue(torch.allclose(output_predited_logis[:, :3, :3]			,   UpperCamelCase			,   atol=1E-4))

          # encoder outputs
          lowerCamelCase__				   =      model.prophetnet.encoder(UpperCamelCase)[0]
          lowerCamelCase__				   =      torch.tensor(
              [[[-1.4_2_6_0, -0.7_6_2_8, 0.8_4_5_3], [-1.4_7_1_9, -0.1_3_9_1, 0.7_8_0_7], [-1.7_6_7_8, 0.0_1_1_4, 0.4_6_4_6]]]).to(UpperCamelCase)
          lowerCamelCase__				   =      torch.Size((1, 4, 10_24))
          self.assertEqual(encoder_outputs.shape			,   UpperCamelCase)
          self.assertTrue(torch.allclose(encoder_outputs[:, :3, :3]			,   UpperCamelCase			,   atol=1E-4))

          # decoder outputs
          lowerCamelCase__				   =      model.prophetnet.decoder(
              UpperCamelCase			,   encoder_hidden_states=UpperCamelCase			,   )
          lowerCamelCase__				   =      decoder_outputs[1].view(1			,   model.config.ngram			,   14			,   -1)
          lowerCamelCase__				   =      model.lm_head(UpperCamelCase)
          lowerCamelCase__				   =      predicting_streams_logits[:, 0]
          self.assertTrue(torch.allclose(next_first_stream_logits[:, :3, :3]			,   UpperCamelCase			,   atol=1E-4))







   @slow
   def     __UpperCAmelCase      ( self):
          lowerCamelCase__				   =      XLMProphetNetForConditionalGeneration.from_pretrained(
              "microsoft/xprophetnet-large-wiki100-cased-xglue-ntg")
          model.to(UpperCamelCase)

          lowerCamelCase__				   =      torch.tensor([[17, 9_62_08, 10_34_71, 2]]).to(UpperCamelCase)
          lowerCamelCase__				   =      torch.tensor(
              [[2, 2_50, 99_53, 34, 6_94_89, 16_20, 32, 11_84_24, 6_24, 2_10, 1_05, 29_13, 10_32, 3_51]]).to(UpperCamelCase)
          lowerCamelCase__				   =      model(
              input_ids=UpperCamelCase			,   attention_mask=UpperCamelCase			,   encoder_outputs=UpperCamelCase			,   decoder_input_ids=UpperCamelCase)
          lowerCamelCase__				   =      output[0]
          lowerCamelCase__				   =      torch.Size((1, 14, 25_00_12))
          self.assertEqual(output_predited_logis.shape			,   UpperCamelCase)
          # compare the actual values for a slice.
          lowerCamelCase__				   =      torch.tensor(
              [[[-9.2_2_5_3, -9.7_1_7_3, -6.3_5_2_9], [-7.6_7_0_1, -9.0_1_4_5, -1.9_3_8_2], [-8.0_1_9_5, -7.0_0_0_4, -0.1_5_2_3]]]).to(UpperCamelCase)

          self.assertTrue(torch.allclose(output_predited_logis[:, :3, :3]			,   UpperCamelCase			,   atol=1E-4))







   @slow
   def     __UpperCAmelCase      ( self):
          lowerCamelCase__				   =      XLMProphetNetForConditionalGeneration.from_pretrained(
              "microsoft/xprophetnet-large-wiki100-cased-xglue-ntg")
          model.to(UpperCamelCase)
          lowerCamelCase__				   =      5_12

          lowerCamelCase__				   =      XLMProphetNetTokenizer.from_pretrained("microsoft/xprophetnet-large-wiki100-cased-xglue-ntg")

          lowerCamelCase__				   =      (
              "Microsoft Corporation intends to officially end free support for the Windows 7 operating system after"
              " January 14, 2020, according to the official portal of the organization. From that day, users of this"
              " system will not be able to receive security updates, which could make their computers vulnerable to"
              " cyber attacks."
          )
          lowerCamelCase__				   =      (
              "орпорация Microsoft намерена официально прекратить бесплатную поддержку операционной системы Windows 7"
              " после 14 января 2020 года, сообщается на официальном портале организации . С указанного дня пользователи"
              " этой системы не смогут получать обновления безопасности, из-за чего их компьютеры могут стать уязвимыми"
              " к кибератакам."
          )
          lowerCamelCase__				   =      (
              "根据该组织的官方门户网站，微软公司打算在2020年1月14日之后正式终止对Windows 7操作系统的免费支持。从那时起，该系统的用户将无法接收安全更新，这可能会使他们的计算机容易受到网络攻击。"
          )

          lowerCamelCase__				   =      tokenizer(
              [EN_SENTENCE, RU_SENTENCE, ZH_SENTENCE]			,   padding=UpperCamelCase			,   max_length=2_55			,   return_tensors="pt").input_ids
          lowerCamelCase__				   =      input_ids.to(UpperCamelCase)

          lowerCamelCase__				   =      model.generate(
              UpperCamelCase			,   num_beams=10			,   length_penalty=1.0			,   no_repeat_ngram_size=3			,   early_stopping=UpperCamelCase)
          lowerCamelCase__				   =      [tokenizer.decode(UpperCamelCase			,   skip_special_tokens=UpperCamelCase) for g in summary_ids]
          lowerCamelCase__				   =      "Microsoft to end Windows 7 free support after January 14, 2020"
          lowerCamelCase__				   =      "Microsoft намерена прекратить бесплатную поддержку Windows 7 после 14 января 2020 года"
          lowerCamelCase__				   =      "微软打算终止对Windows 7操作系统的免费支持"
          self.assertListEqual(
              [EXPECTED_TITLE_EN, EXPECTED_TITLE_RU, EXPECTED_TITLE_ZH]			,   UpperCamelCase			,   )

          lowerCamelCase__				   =      model.generate(
              UpperCamelCase			,   num_beams=1			,   length_penalty=1.0			,   no_repeat_ngram_size=3			,   early_stopping=UpperCamelCase)
          lowerCamelCase__				   =      [
              tokenizer.convert_ids_to_tokens(UpperCamelCase			,   skip_special_tokens=UpperCamelCase) for g in summary_ids_beama
          ]
          lowerCamelCase__				   =      "▁Microsoft ▁to ▁end ▁free ▁support ▁for ▁Windows ▁7".split(" ")
          lowerCamelCase__				   =      "▁Microsoft ▁намерен а ▁прекрати ть ▁бес плат ную ▁поддержку ▁Windows ▁7 ▁после ▁14 ▁января ▁2020 ▁года".split(
              " ")
          lowerCamelCase__				   =      "微软 公司 打算 终止 对 Windows ▁7 操作 系统的 免费 支持".split(" ")
          self.assertListEqual(
              [EXPECTED_TITLE_EN_BEAM1_TOK, EXPECTED_TITLE_RU_BEAM1_TOK, EXPECTED_TITLE_ZH_BEAM1_TOK]			,   UpperCamelCase			,   )



'''simple docstring'''







from ..utils import DummyObject, requires_backends







class 		snake_case_       (						metaclass=A__						):



   """simple docstring"""





   __lowerCAmelCase	:							List[str]								=['''torch''', '''librosa''']







   def __init__( self			,   *UpperCamelCase			,   **UpperCamelCase):
          requires_backends(self			,   ["torch", "librosa"])







   @classmethod
   def     __UpperCAmelCase      ( cls			,   *UpperCamelCase			,   **UpperCamelCase):
          requires_backends(cls			,   ["torch", "librosa"])







   @classmethod
   def     __UpperCAmelCase      ( cls			,   *UpperCamelCase			,   **UpperCamelCase):
          requires_backends(cls			,   ["torch", "librosa"])







class 		snake_case_       (						metaclass=A__						):



   """simple docstring"""





   __lowerCAmelCase	:							Union[str, Any]								=['''torch''', '''librosa''']







   def __init__( self			,   *UpperCamelCase			,   **UpperCamelCase):
          requires_backends(self			,   ["torch", "librosa"])







   @classmethod
   def     __UpperCAmelCase      ( cls			,   *UpperCamelCase			,   **UpperCamelCase):
          requires_backends(cls			,   ["torch", "librosa"])







   @classmethod
   def     __UpperCAmelCase      ( cls			,   *UpperCamelCase			,   **UpperCamelCase):
          requires_backends(cls			,   ["torch", "librosa"])

