

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):




 @slow
 def     a       (			self							):
   __UpperCAmelCase	:  List[Any]		=     XLMProphetNetForConditionalGeneration.from_pretrained('microsoft/xprophetnet-large-wiki100-cased'							)
   model.to(_UpperCAmelCase							)

   # encoder-decoder outputs
   __UpperCAmelCase	:  Optional[Any]		=     torch.tensor([[17, 96_208, 103_471, 2]]							).to(_UpperCAmelCase							)
   __UpperCAmelCase	:  Optional[int]		=     torch.tensor(
       [[2, 250, 9_953, 34, 69_489, 1_620, 32, 118_424, 624, 210, 105, 2_913, 1_032, 351]]							).to(_UpperCAmelCase							)
   __UpperCAmelCase	:  str		=     model(
       input_ids=_UpperCAmelCase  ,  attention_mask=_UpperCAmelCase  ,  encoder_outputs=_UpperCAmelCase  ,  decoder_input_ids=_UpperCAmelCase							)
   __UpperCAmelCase	:  Optional[int]		=     output[0]
   __UpperCAmelCase	:  Any		=     torch.Size((1, 14, 250_012)							)
   self.assertEqual(output_predited_logis.shape  ,  _UpperCAmelCase							)
   __UpperCAmelCase	:  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(_UpperCAmelCase							)
   self.assertTrue(torch.allclose(output_predited_logis[:, :3, :3]  ,  _UpperCAmelCase  ,  atol=1E-4							)							)

   # encoder outputs
   __UpperCAmelCase	:  List[str]		=     model.prophetnet.encoder(_UpperCAmelCase							)[0]
   __UpperCAmelCase	:  Optional[Any]		=     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							)
   __UpperCAmelCase	:  List[Any]		=     torch.Size((1, 4, 1_024)							)
   self.assertEqual(encoder_outputs.shape  ,  _UpperCAmelCase							)
   self.assertTrue(torch.allclose(encoder_outputs[:, :3, :3]  ,  _UpperCAmelCase  ,  atol=1E-4							)							)

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




 @slow
 def     a       (			self							):
   __UpperCAmelCase	:  str		=     XLMProphetNetForConditionalGeneration.from_pretrained(
       'microsoft/xprophetnet-large-wiki100-cased-xglue-ntg'							)
   model.to(_UpperCAmelCase							)

   __UpperCAmelCase	:  str		=     torch.tensor([[17, 96_208, 103_471, 2]]							).to(_UpperCAmelCase							)
   __UpperCAmelCase	:  Tuple		=     torch.tensor(
       [[2, 250, 9_953, 34, 69_489, 1_620, 32, 118_424, 624, 210, 105, 2_913, 1_032, 351]]							).to(_UpperCAmelCase							)
   __UpperCAmelCase	:  Any		=     model(
       input_ids=_UpperCAmelCase  ,  attention_mask=_UpperCAmelCase  ,  encoder_outputs=_UpperCAmelCase  ,  decoder_input_ids=_UpperCAmelCase							)
   __UpperCAmelCase	:  Optional[int]		=     output[0]
   __UpperCAmelCase	:  Dict		=     torch.Size((1, 14, 250_012)							)
   self.assertEqual(output_predited_logis.shape  ,  _UpperCAmelCase							)
   # compare the actual values for a slice.
   __UpperCAmelCase	:  Tuple		=     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     a       (			self							):
   __UpperCAmelCase	:  List[Any]		=     XLMProphetNetForConditionalGeneration.from_pretrained(
       'microsoft/xprophetnet-large-wiki100-cased-xglue-ntg'							)
   model.to(_UpperCAmelCase							)
   __UpperCAmelCase	:  Dict		=     512

   __UpperCAmelCase	:  List[str]		=     XLMProphetNetTokenizer.from_pretrained('microsoft/xprophetnet-large-wiki100-cased-xglue-ntg'							)

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

   __UpperCAmelCase	:  int		=     tokenizer(
       [EN_SENTENCE, RU_SENTENCE, ZH_SENTENCE]  ,  padding=_UpperCAmelCase  ,  max_length=255  ,  return_tensors='pt'							).input_ids
   __UpperCAmelCase	:  Union[str, Any]		=     input_ids.to(_UpperCAmelCase							)

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

   __UpperCAmelCase	:  Union[str, Any]		=     model.generate(
       _UpperCAmelCase  ,  num_beams=1  ,  length_penalty=1.0  ,  no_repeat_ngram_size=3  ,  early_stopping=_UpperCAmelCase							)
   __UpperCAmelCase	:  Optional[int]		=     [
       tokenizer.convert_ids_to_tokens(_UpperCAmelCase  ,  skip_special_tokens=_UpperCAmelCase							) for g in summary_ids_beama
   ]
   __UpperCAmelCase	:  Any		=     '▁Microsoft ▁to ▁end ▁free ▁support ▁for ▁Windows ▁7'.split(' '							)
   __UpperCAmelCase	:  Dict		=     '▁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]  ,  _UpperCAmelCase  ,  )






"""simple docstring"""


import bsa
import requests







def    UpperCAmelCase       (						UpperCAmelCase   )							-> dict[str, str]:
     return {
         "name": soup.ha.a.text,
         "genre": soup.find('span'		,   class_='genre'   ).text.strip(),
         "rating": soup.strong.text,
         "page_link": f'https://www.imdb.com{soup.a.get("href"   )}',
     }







def    UpperCAmelCase       (						UpperCAmelCase = 5   )							-> tuple:
     snake_case_   			=   int(float(UpperCAmelCase   )   )
     if num_movies < 1:
          return ()
     snake_case_   			=   (
         'https://www.imdb.com/search/title?title_type='
         f'feature&sort=num_votes,desc&count={num_movies}'
     )
     snake_case_   			=   bsa.BeautifulSoup(requests.get(UpperCAmelCase   ).content		,   'html.parser'   )
     return tuple(
         get_movie_data_from_soup(UpperCAmelCase   )
         for movie in source.find_all('div'		,   class_='lister-item mode-advanced'   )   )


if __name__ == "__main__":
    import json

    __UpperCamelCase										=     int(input('''How many movies would you like to see? '''))
    print(
        ''', '''.join(
            json.dumps(movie, indent=4) for movie in get_imdb_top_movies(num_movies)
        )
    )

