






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        _lowerCAmelCase( unittest.TestCase      ):





       """simple docstring"""







       @slow
       def     _a					(      self							):
         UpperCamelCase_:      List[str]					   =       XLMProphetNetForConditionalGeneration.from_pretrained('microsoft/xprophetnet-large-wiki100-cased'							)
         model.to(_lowerCamelCase							)

         # encoder-decoder outputs
         UpperCamelCase_:      Optional[Any]					   =       torch.tensor([[1_7, 9_6_2_0_8, 1_0_3_4_7_1, 2]]							).to(_lowerCamelCase							)
         UpperCamelCase_:      Tuple					   =       torch.tensor(
             [[2, 2_5_0, 9_9_5_3, 3_4, 6_9_4_8_9, 1_6_2_0, 3_2, 1_1_8_4_2_4, 6_2_4, 2_1_0, 1_0_5, 2_9_1_3, 1_0_3_2, 3_5_1]]							).to(_lowerCamelCase							)
         UpperCamelCase_:      Union[str, Any]					   =       model(
             input_ids=_lowerCamelCase						,    attention_mask=_lowerCamelCase						,    encoder_outputs=_lowerCamelCase						,    decoder_input_ids=_lowerCamelCase							)
         UpperCamelCase_:      int					   =       output[0]
         UpperCamelCase_:      int					   =       torch.Size((1, 1_4, 2_5_0_0_1_2)							)
         self.assertEqual(output_predited_logis.shape						,    _lowerCamelCase							)
         UpperCamelCase_:      List[Any]					   =       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(_lowerCamelCase							)
         self.assertTrue(torch.allclose(output_predited_logis[:, :3, :3]						,    _lowerCamelCase						,    atol=1e-4							)							)

         # encoder outputs
         UpperCamelCase_:      str					   =       model.prophetnet.encoder(_lowerCamelCase							)[0]
         UpperCamelCase_:      str					   =       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(_lowerCamelCase							)
         UpperCamelCase_:      List[str]					   =       torch.Size((1, 4, 1_0_2_4)							)
         self.assertEqual(encoder_outputs.shape						,    _lowerCamelCase							)
         self.assertTrue(torch.allclose(encoder_outputs[:, :3, :3]						,    _lowerCamelCase						,    atol=1e-4							)							)

         # decoder outputs
         UpperCamelCase_:      Optional[Any]					   =       model.prophetnet.decoder(
             _lowerCamelCase						,    encoder_hidden_states=_lowerCamelCase						,    )
         UpperCamelCase_:      Optional[Any]					   =       decoder_outputs[1].view(1						,    model.config.ngram						,    1_4						,    -1							)
         UpperCamelCase_:      Union[str, Any]					   =       model.lm_head(_lowerCamelCase							)
         UpperCamelCase_:      List[str]					   =       predicting_streams_logits[:, 0]
         self.assertTrue(torch.allclose(next_first_stream_logits[:, :3, :3]						,    _lowerCamelCase						,    atol=1e-4							)							)





       @slow
       def     _a					(      self							):
         UpperCamelCase_:      int					   =       XLMProphetNetForConditionalGeneration.from_pretrained(
             'microsoft/xprophetnet-large-wiki100-cased-xglue-ntg'							)
         model.to(_lowerCamelCase							)

         UpperCamelCase_:      Optional[Any]					   =       torch.tensor([[1_7, 9_6_2_0_8, 1_0_3_4_7_1, 2]]							).to(_lowerCamelCase							)
         UpperCamelCase_:      Union[str, Any]					   =       torch.tensor(
             [[2, 2_5_0, 9_9_5_3, 3_4, 6_9_4_8_9, 1_6_2_0, 3_2, 1_1_8_4_2_4, 6_2_4, 2_1_0, 1_0_5, 2_9_1_3, 1_0_3_2, 3_5_1]]							).to(_lowerCamelCase							)
         UpperCamelCase_:      int					   =       model(
             input_ids=_lowerCamelCase						,    attention_mask=_lowerCamelCase						,    encoder_outputs=_lowerCamelCase						,    decoder_input_ids=_lowerCamelCase							)
         UpperCamelCase_:      int					   =       output[0]
         UpperCamelCase_:      Any					   =       torch.Size((1, 1_4, 2_5_0_0_1_2)							)
         self.assertEqual(output_predited_logis.shape						,    _lowerCamelCase							)
         # compare the actual values for a slice.
         UpperCamelCase_:      int					   =       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(_lowerCamelCase							)

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





       @slow
       def     _a					(      self							):
         UpperCamelCase_:      Any					   =       XLMProphetNetForConditionalGeneration.from_pretrained(
             'microsoft/xprophetnet-large-wiki100-cased-xglue-ntg'							)
         model.to(_lowerCamelCase							)
         UpperCamelCase_:      Optional[Any]					   =       5_1_2

         UpperCamelCase_:      Optional[Any]					   =       XLMProphetNetTokenizer.from_pretrained('microsoft/xprophetnet-large-wiki100-cased-xglue-ntg'							)

         UpperCamelCase_:      int					   =       (
             '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.'
         )
         UpperCamelCase_:      List[str]					   =       (
             'орпорация Microsoft намерена официально прекратить бесплатную поддержку операционной системы Windows 7'
             ' после 14 января 2020 года, сообщается на официальном портале организации . С указанного дня пользователи'
             ' этой системы не смогут получать обновления безопасности, из-за чего их компьютеры могут стать уязвимыми'
             ' к кибератакам.'
         )
         UpperCamelCase_:      Any					   =       (
             '根据该组织的官方门户网站，微软公司打算在2020年1月14日之后正式终止对Windows 7操作系统的免费支持。从那时起，该系统的用户将无法接收安全更新，这可能会使他们的计算机容易受到网络攻击。'
         )

         UpperCamelCase_:      str					   =       tokenizer(
             [EN_SENTENCE, RU_SENTENCE, ZH_SENTENCE]						,    padding=_lowerCamelCase						,    max_length=2_5_5						,    return_tensors='pt'							).input_ids
         UpperCamelCase_:      Dict					   =       input_ids.to(_lowerCamelCase							)

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

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







from math import factorial

def 						snake_case      (UpperCAmelCase__			,					UpperCAmelCase__						) ->       Dict:
  return factorial(UpperCAmelCase__						) / (factorial(UpperCAmelCase__						) * factorial(n - r						))

def 						snake_case      () ->       Optional[Any]:
  UpperCamelCase_:      int					   =       0

  for i in range(1			,					1_0_1						):
    for j in range(1			,					i + 1						):
      if combinations(UpperCAmelCase__			,					UpperCAmelCase__						) > 1E6:
        total += 1
  return total


if __name__ == "__main__":
   print(solution())