






"""simple docstring"""






import tempfile
import unittest
from pathlib import Path
from shutil import copyfile

from transformers import BatchEncoding, MarianTokenizer
from transformers.testing_utils import get_tests_dir, require_sentencepiece, slow
from transformers.utils import is_sentencepiece_available, is_tf_available, is_torch_available


if is_sentencepiece_available():
  from transformers.models.marian.tokenization_marian import VOCAB_FILES_NAMES, save_json

from ...test_tokenization_common import TokenizerTesterMixin


UpperCAmelCase_     :				List[Any]         =				get_tests_dir("""fixtures/test_sentencepiece.model""")

UpperCAmelCase_     :				Dict         =				{"""target_lang""": """fi""", """source_lang""": """en"""}
UpperCAmelCase_     :				Optional[Any]         =				""">>zh<<"""
UpperCAmelCase_     :				Union[str, Any]         =				"""Helsinki-NLP/"""

if is_torch_available():
  UpperCAmelCase_     :				Optional[Any]         =				"""pt"""
elif is_tf_available():
  UpperCAmelCase_     :				Tuple         =				"""tf"""
else:
  UpperCAmelCase_     :				List[Any]         =				"""jax"""

@require_sentencepiece
class 							lowerCAmelCase__       (    __SCREAMING_SNAKE_CASE       ,	unittest.TestCase				):






      '''simple docstring'''

      __UpperCamelCase							=						MarianTokenizer
      __UpperCamelCase							=						False
      __UpperCamelCase							=						True
      def _SCREAMING_SNAKE_CASE				(		self  :						Any):




          '''simple docstring'''


          super().setUp()
          SCREAMING_SNAKE_CASE_   :						str							=	['''</s>''', '''<unk>''', '''▁This''', '''▁is''', '''▁a''', '''▁t''', '''est''', '''\u0120''', '''<pad>''']
          SCREAMING_SNAKE_CASE_   :						List[str]							=	dict(zip(_a		,			range(len(_a))))
          SCREAMING_SNAKE_CASE_   :						int							=	Path(self.tmpdirname)
          save_json(_a		,			save_dir / VOCAB_FILES_NAMES['''vocab'''])
          save_json(_a		,			save_dir / VOCAB_FILES_NAMES['''tokenizer_config_file'''])
          if not (save_dir / VOCAB_FILES_NAMES["source_spm"]).exists():
              copyfile(_a		,			save_dir / VOCAB_FILES_NAMES['''source_spm'''])
              copyfile(_a		,			save_dir / VOCAB_FILES_NAMES['''target_spm'''])

          SCREAMING_SNAKE_CASE_   :						Tuple							=	MarianTokenizer.from_pretrained(self.tmpdirname)
          tokenizer.save_pretrained(self.tmpdirname)
      def _SCREAMING_SNAKE_CASE				(		self  :						List[str]		,			**lowercase_  :						Optional[int]):




          '''simple docstring'''


          return MarianTokenizer.from_pretrained(self.tmpdirname		,			**_a)
      def _SCREAMING_SNAKE_CASE				(		self  :						int		,			lowercase_  :						Dict):




          '''simple docstring'''


          return (
              "This is a test",
              "This is a test",
          )
      def _SCREAMING_SNAKE_CASE				(		self  :						int):




          '''simple docstring'''


          SCREAMING_SNAKE_CASE_   :						Optional[int]							=	'''</s>'''
          SCREAMING_SNAKE_CASE_   :						Optional[Any]							=	0

          self.assertEqual(self.get_tokenizer()._convert_token_to_id(_a)		,			_a)
          self.assertEqual(self.get_tokenizer()._convert_id_to_token(_a)		,			_a)
      def _SCREAMING_SNAKE_CASE				(		self  :						Optional[Any]):




          '''simple docstring'''


          SCREAMING_SNAKE_CASE_   :						Any							=	list(self.get_tokenizer().get_vocab().keys())

          self.assertEqual(vocab_keys[0]		,			'''</s>''')
          self.assertEqual(vocab_keys[1]		,			'''<unk>''')
          self.assertEqual(vocab_keys[-1]		,			'''<pad>''')
          self.assertEqual(len(_a)		,			9)
      def _SCREAMING_SNAKE_CASE				(		self  :						Tuple):




          '''simple docstring'''


          self.assertEqual(self.get_tokenizer().vocab_size		,			9)
      def _SCREAMING_SNAKE_CASE				(		self  :						str):




          '''simple docstring'''


          SCREAMING_SNAKE_CASE_   :						Tuple							=	MarianTokenizer.from_pretrained(F'{ORG_NAME}opus-mt-en-de')
          SCREAMING_SNAKE_CASE_   :						Tuple							=	en_de_tokenizer(['''I am a small frog''']		,			return_tensors=_a)
          self.assertIsInstance(_a		,			_a)
          SCREAMING_SNAKE_CASE_   :						Union[str, Any]							=	[38, 121, 14, 697, 38848, 0]
          self.assertListEqual(_a		,			batch.input_ids[0])

          SCREAMING_SNAKE_CASE_   :						Union[str, Any]							=	tempfile.mkdtemp()
          en_de_tokenizer.save_pretrained(_a)
          SCREAMING_SNAKE_CASE_   :						Optional[Any]							=	[x.name for x in Path(_a).glob('''*''')]
          self.assertIn('''source.spm'''		,			_a)
          MarianTokenizer.from_pretrained(_a)
      def _SCREAMING_SNAKE_CASE				(		self  :						Union[str, Any]):




          '''simple docstring'''


          SCREAMING_SNAKE_CASE_   :						Union[str, Any]							=	self.get_tokenizer()

          SCREAMING_SNAKE_CASE_   :						Union[str, Any]							=	tok(
              ['''I am a small frog''' * 1000, '''I am a small frog''']		,			padding=_a		,			truncation=_a		,			return_tensors=_a)
          self.assertIsInstance(_a		,			_a)
          self.assertEqual(batch.input_ids.shape		,			(2, 512))
      def _SCREAMING_SNAKE_CASE				(		self  :						int):




          '''simple docstring'''


          SCREAMING_SNAKE_CASE_   :						List[Any]							=	self.get_tokenizer()
          SCREAMING_SNAKE_CASE_   :						Any							=	tok(['''I am a tiny frog''', '''I am a small frog''']		,			padding=_a		,			return_tensors=_a)
          self.assertIsInstance(_a		,			_a)
          self.assertEqual(batch_smaller.input_ids.shape		,			(2, 10))
      @slow
      def _SCREAMING_SNAKE_CASE				(		self  :						str):




          '''simple docstring'''


          SCREAMING_SNAKE_CASE_   :						int							=	{'''input_ids''': [[43495, 462, 20, 42164, 1369, 52, 464, 132, 1703, 492, 13, 7491, 38999, 6, 8, 464, 132, 1703, 492, 13, 4669, 37867, 13, 7525, 27, 1593, 988, 13, 33972, 7029, 6, 20, 8251, 383, 2, 270, 5866, 3788, 2, 2353, 8251, 12338, 2, 13958, 387, 2, 3629, 6953, 188, 2900, 2, 13958, 8011, 11501, 23, 8460, 4073, 34009, 20, 435, 11439, 27, 8, 8460, 4073, 6004, 20, 9988, 375, 27, 33, 266, 1945, 1076, 1350, 37867, 3288, 5, 577, 1076, 4374, 8, 5082, 5, 26453, 257, 556, 403, 2, 242, 132, 383, 316, 492, 8, 10767, 6, 316, 304, 4239, 3, 0], [148, 15722, 19, 1839, 12, 1350, 13, 22327, 5082, 5418, 47567, 35938, 59, 318, 19552, 108, 2183, 54, 14976, 4835, 32, 547, 1114, 8, 315, 2417, 5, 92, 19088, 3, 0, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100], [36, 6395, 12570, 39147, 11597, 6, 266, 4, 45405, 7296, 3, 0, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100, 58100]], '''attention_mask''': [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]}  # noqa: E501
          # fmt: on

          self.tokenizer_integration_test_util(
              expected_encoding=_a		,			model_name='''Helsinki-NLP/opus-mt-en-de'''		,			revision='''1a8c2263da11e68e50938f97e10cd57820bd504c'''		,			decode_kwargs={'''use_source_tokenizer''': True}		,			)



      def _SCREAMING_SNAKE_CASE				(		self  :						List[Any]):




          '''simple docstring'''


          SCREAMING_SNAKE_CASE_   :						Tuple							=	MarianTokenizer.from_pretrained('''hf-internal-testing/test-marian-two-vocabs''')

          SCREAMING_SNAKE_CASE_   :						Tuple							=	'''Tämä on testi'''
          SCREAMING_SNAKE_CASE_   :						List[str]							=	'''This is a test'''

          SCREAMING_SNAKE_CASE_   :						Dict							=	[76, 7, 2047, 2]
          SCREAMING_SNAKE_CASE_   :						int							=	[69, 12, 11, 940, 2]

          SCREAMING_SNAKE_CASE_   :						int							=	tokenizer(_a).input_ids
          self.assertListEqual(_a		,			_a)

          SCREAMING_SNAKE_CASE_   :						Optional[int]							=	tokenizer(text_target=_a).input_ids
          self.assertListEqual(_a		,			_a)

          SCREAMING_SNAKE_CASE_   :						str							=	tokenizer.decode(_a		,			skip_special_tokens=_a)
          self.assertEqual(_a		,			_a)










"""simple docstring"""






from __future__ import annotations

from numpy import array, cos, cross, floataa, radians, sin
from numpy.typing import NDArray



def       _A    (__a					,       __a					,       __a = False							)				-> list[float]:
    """simple docstring"""






    if radian_mode:
        return [magnitude * cos(__a							), magnitude * sin(__a							)]
    return [magnitude * cos(radians(__a							)							), magnitude * sin(radians(__a							)							)]



def       _A    (__a					,       __a					,       __a = 10**-1							)				-> bool:
    """simple docstring"""






    SCREAMING_SNAKE_CASE_   :						NDArray[floataa]							=	cross(__a					,       __a							)
    SCREAMING_SNAKE_CASE_   :						float							=	sum(__a							)
    return abs(__a							) < eps


if __name__ == "__main__":
  # Test to check if it works
  UpperCAmelCase_     :				Union[str, Any]         =				array(
      [
          polar_force(7_1_8.4, 180 - 30),
          polar_force(8_7_9.5_4, 45),
          polar_force(100, -90),
      ]
  )

  UpperCAmelCase_     :				NDArray[floataa]         =				array([[0, 0], [0, 0], [0, 0]])

  assert in_static_equilibrium(forces, location)

  # Problem 1 in image_data/2D_problems.jpg
  UpperCAmelCase_     :				Union[str, Any]         =				array(
      [
          polar_force(30 * 9.8_1, 15),
          polar_force(215, 180 - 45),
          polar_force(264, 90 - 30),
      ]
  )

  UpperCAmelCase_     :				Optional[int]         =				array([[0, 0], [0, 0], [0, 0]])

  assert in_static_equilibrium(forces, location)

  # Problem in image_data/2D_problems_1.jpg
  UpperCAmelCase_     :				List[str]         =				array([[0, -2000], [0, -1200], [0, 15600], [0, -12400]])

  UpperCAmelCase_     :				Any         =				array([[0, 0], [6, 0], [10, 0], [12, 0]])

  assert in_static_equilibrium(forces, location)

  import doctest

  doctest.testmod()


