




import unittest

import numpy as np
from datasets import load_dataset

from transformers.testing_utils import require_torch, require_vision
from transformers.utils import is_torch_available, is_vision_available

from ...test_image_processing_common import ImageProcessingSavingTestMixin, prepare_image_inputs


if is_torch_available():
  import torch

if is_vision_available():
  from PIL import Image

  from transformers import BeitImageProcessor







class 						lowercase							(   unittest.TestCase		):

     def __init__(  self		,     _a		,     _a=7		,     _a=3		,     _a=18		,     _a=30		,     _a=400		,     _a=True		,     _a=None		,     _a=True		,     _a=None		,     _a=True		,     _a=[0.5, 0.5, 0.5]		,     _a=[0.5, 0.5, 0.5]		,     _a=False		,     )						->							Union[str, Any]:
           _A							:     Optional[Any]			=						size if size is not None else {"""height""": 20, """width""": 20}
           _A							:     Optional[Any]			=						crop_size if crop_size is not None else {"""height""": 18, """width""": 18}
           _A							:     int			=						parent
           _A							:     Any			=						batch_size
           _A							:     Tuple			=						num_channels
           _A							:     Optional[int]			=						image_size
           _A							:     Optional[Any]			=						min_resolution
           _A							:     int			=						max_resolution
           _A							:     Dict			=						do_resize
           _A							:     Any			=						size
           _A							:     Union[str, Any]			=						do_center_crop
           _A							:     Union[str, Any]			=						crop_size
           _A							:     Any			=						do_normalize
           _A							:     str			=						image_mean
           _A							:     str			=						image_std
           _A							:     Any			=						do_reduce_labels



     def 					a__	(  self				)						->							List[str]:
           return {
               "do_resize": self.do_resize,
               "size": self.size,
               "do_center_crop": self.do_center_crop,
               "crop_size": self.crop_size,
               "do_normalize": self.do_normalize,
               "image_mean": self.image_mean,
               "image_std": self.image_std,
               "do_reduce_labels": self.do_reduce_labels,
           }







def 				lowerCAmelCase_	(     ):
      _A							:     Any			=						load_dataset("""hf-internal-testing/fixtures_ade20k""",split="""test"""     )

      _A							:     Union[str, Any]			=						Image.open(dataset[0]["""file"""]     )
      _A							:     int			=						Image.open(dataset[1]["""file"""]     )

      return image, map







def 				lowerCAmelCase_	(     ):
      _A							:     str			=						load_dataset("""hf-internal-testing/fixtures_ade20k""",split="""test"""     )

      _A							:     Dict			=						Image.open(ds[0]["""file"""]     )
      _A							:     Tuple			=						Image.open(ds[1]["""file"""]     )
      _A							:     List[str]			=						Image.open(ds[2]["""file"""]     )
      _A							:     Tuple			=						Image.open(ds[3]["""file"""]     )

      return [imagea, imagea], [mapa, mapa]







@require_torch
@require_vision
class 						lowercase							(   a__,unittest.TestCase		):
     _a							 =						BeitImageProcessor if is_vision_available() else None

     def 					a__	(  self				)						->							str:
           _A							:     Optional[int]			=						BeitImageProcessingTester(self				)

     @property
     def 					a__	(  self				)						->							Optional[int]:
           return self.image_processor_tester.prepare_image_processor_dict()

     def 					a__	(  self				)						->							Optional[Any]:
           _A							:     Union[str, Any]			=						self.image_processing_class(**self.image_processor_dict				)
           self.assertTrue(hasattr(SCREAMING_SNAKE_CASE__		,     """do_resize"""				)				)
           self.assertTrue(hasattr(SCREAMING_SNAKE_CASE__		,     """size"""				)				)
           self.assertTrue(hasattr(SCREAMING_SNAKE_CASE__		,     """do_center_crop"""				)				)
           self.assertTrue(hasattr(SCREAMING_SNAKE_CASE__		,     """center_crop"""				)				)
           self.assertTrue(hasattr(SCREAMING_SNAKE_CASE__		,     """do_normalize"""				)				)
           self.assertTrue(hasattr(SCREAMING_SNAKE_CASE__		,     """image_mean"""				)				)
           self.assertTrue(hasattr(SCREAMING_SNAKE_CASE__		,     """image_std"""				)				)

     def 					a__	(  self				)						->							str:
           _A							:     List[Any]			=						self.image_processing_class.from_dict(self.image_processor_dict				)
           self.assertEqual(image_processor.size		,     {"""height""": 20, """width""": 20}				)
           self.assertEqual(image_processor.crop_size		,     {"""height""": 18, """width""": 18}				)
           self.assertEqual(image_processor.do_reduce_labels		,     SCREAMING_SNAKE_CASE__				)

           _A							:     Optional[int]			=						self.image_processing_class.from_dict(
               self.image_processor_dict		,     size=42		,     crop_size=84		,     reduce_labels=SCREAMING_SNAKE_CASE__				)
           self.assertEqual(image_processor.size		,     {"""height""": 42, """width""": 42}				)
           self.assertEqual(image_processor.crop_size		,     {"""height""": 84, """width""": 84}				)
           self.assertEqual(image_processor.do_reduce_labels		,     SCREAMING_SNAKE_CASE__				)

     def 					a__	(  self				)						->							Optional[int]:
           pass

     def 					a__	(  self				)						->							List[Any]:
           _A							:     int			=						self.image_processing_class(**self.image_processor_dict				)
           # create random PIL images
           _A							:     Optional[Any]			=						prepare_image_inputs(self.image_processor_tester		,     equal_resolution=SCREAMING_SNAKE_CASE__				)
           for image in image_inputs:
                 self.assertIsInstance(SCREAMING_SNAKE_CASE__		,     Image.Image				)

           # Test not batched input
           _A							:     Tuple			=						image_processing(image_inputs[0]		,     return_tensors="""pt"""				).pixel_values
           self.assertEqual(
               encoded_images.shape		,     (
                   1,
                   self.image_processor_tester.num_channels,
                   self.image_processor_tester.crop_size["""height"""],
                   self.image_processor_tester.crop_size["""width"""],
               )		,     )

           # Test batched
           _A							:     int			=						image_processing(SCREAMING_SNAKE_CASE__		,     return_tensors="""pt"""				).pixel_values
           self.assertEqual(
               encoded_images.shape		,     (
                   self.image_processor_tester.batch_size,
                   self.image_processor_tester.num_channels,
                   self.image_processor_tester.crop_size["""height"""],
                   self.image_processor_tester.crop_size["""width"""],
               )		,     )

     def 					a__	(  self				)						->							Union[str, Any]:
           _A							:     Optional[int]			=						self.image_processing_class(**self.image_processor_dict				)
           # create random numpy tensors
           _A							:     Optional[Any]			=						prepare_image_inputs(self.image_processor_tester		,     equal_resolution=SCREAMING_SNAKE_CASE__		,     numpify=SCREAMING_SNAKE_CASE__				)
           for image in image_inputs:
                 self.assertIsInstance(SCREAMING_SNAKE_CASE__		,     np.ndarray				)

           # Test not batched input
           _A							:     Optional[Any]			=						image_processing(image_inputs[0]		,     return_tensors="""pt"""				).pixel_values
           self.assertEqual(
               encoded_images.shape		,     (
                   1,
                   self.image_processor_tester.num_channels,
                   self.image_processor_tester.crop_size["""height"""],
                   self.image_processor_tester.crop_size["""width"""],
               )		,     )

           # Test batched
           _A							:     Any			=						image_processing(SCREAMING_SNAKE_CASE__		,     return_tensors="""pt"""				).pixel_values
           self.assertEqual(
               encoded_images.shape		,     (
                   self.image_processor_tester.batch_size,
                   self.image_processor_tester.num_channels,
                   self.image_processor_tester.crop_size["""height"""],
                   self.image_processor_tester.crop_size["""width"""],
               )		,     )

     def 					a__	(  self				)						->							Optional[Any]:
           _A							:     Tuple			=						self.image_processing_class(**self.image_processor_dict				)
           # create random PyTorch tensors
           _A							:     Tuple			=						prepare_image_inputs(self.image_processor_tester		,     equal_resolution=SCREAMING_SNAKE_CASE__		,     torchify=SCREAMING_SNAKE_CASE__				)
           for image in image_inputs:
                 self.assertIsInstance(SCREAMING_SNAKE_CASE__		,     torch.Tensor				)

           # Test not batched input
           _A							:     Union[str, Any]			=						image_processing(image_inputs[0]		,     return_tensors="""pt"""				).pixel_values
           self.assertEqual(
               encoded_images.shape		,     (
                   1,
                   self.image_processor_tester.num_channels,
                   self.image_processor_tester.crop_size["""height"""],
                   self.image_processor_tester.crop_size["""width"""],
               )		,     )

           # Test batched
           _A							:     Optional[Any]			=						image_processing(SCREAMING_SNAKE_CASE__		,     return_tensors="""pt"""				).pixel_values
           self.assertEqual(
               encoded_images.shape		,     (
                   self.image_processor_tester.batch_size,
                   self.image_processor_tester.num_channels,
                   self.image_processor_tester.crop_size["""height"""],
                   self.image_processor_tester.crop_size["""width"""],
               )		,     )

     def 					a__	(  self				)						->							Tuple:
           _A							:     str			=						self.image_processing_class(**self.image_processor_dict				)
           # create random PyTorch tensors
           _A							:     List[str]			=						prepare_image_inputs(self.image_processor_tester		,     equal_resolution=SCREAMING_SNAKE_CASE__		,     torchify=SCREAMING_SNAKE_CASE__				)
           _A							:     Union[str, Any]			=						[]
           for image in image_inputs:
                 self.assertIsInstance(SCREAMING_SNAKE_CASE__		,     torch.Tensor				)
                 maps.append(torch.zeros(image.shape[-2:]				).long()				)

           # Test not batched input
           _A							:     Optional[Any]			=						image_processing(image_inputs[0]		,     maps[0]		,     return_tensors="""pt"""				)
           self.assertEqual(
               encoding["""pixel_values"""].shape		,     (
                   1,
                   self.image_processor_tester.num_channels,
                   self.image_processor_tester.crop_size["""height"""],
                   self.image_processor_tester.crop_size["""width"""],
               )		,     )
           self.assertEqual(
               encoding["""labels"""].shape		,     (
                   1,
                   self.image_processor_tester.crop_size["""height"""],
                   self.image_processor_tester.crop_size["""width"""],
               )		,     )
           self.assertEqual(encoding["""labels"""].dtype		,     torch.long				)
           self.assertTrue(encoding["""labels"""].min().item() >= 0				)
           self.assertTrue(encoding["""labels"""].max().item() <= 255				)

           # Test batched
           _A							:     Optional[int]			=						image_processing(SCREAMING_SNAKE_CASE__		,     SCREAMING_SNAKE_CASE__		,     return_tensors="""pt"""				)
           self.assertEqual(
               encoding["""pixel_values"""].shape		,     (
                   self.image_processor_tester.batch_size,
                   self.image_processor_tester.num_channels,
                   self.image_processor_tester.crop_size["""height"""],
                   self.image_processor_tester.crop_size["""width"""],
               )		,     )
           self.assertEqual(
               encoding["""labels"""].shape		,     (
                   self.image_processor_tester.batch_size,
                   self.image_processor_tester.crop_size["""height"""],
                   self.image_processor_tester.crop_size["""width"""],
               )		,     )
           self.assertEqual(encoding["""labels"""].dtype		,     torch.long				)
           self.assertTrue(encoding["""labels"""].min().item() >= 0				)
           self.assertTrue(encoding["""labels"""].max().item() <= 255				)

           # Test not batched input (PIL images)
           _A							:     str			=						prepare_semantic_single_inputs()

           _A							:     Dict			=						image_processing(SCREAMING_SNAKE_CASE__		,     SCREAMING_SNAKE_CASE__		,     return_tensors="""pt"""				)
           self.assertEqual(
               encoding["""pixel_values"""].shape		,     (
                   1,
                   self.image_processor_tester.num_channels,
                   self.image_processor_tester.crop_size["""height"""],
                   self.image_processor_tester.crop_size["""width"""],
               )		,     )
           self.assertEqual(
               encoding["""labels"""].shape		,     (
                   1,
                   self.image_processor_tester.crop_size["""height"""],
                   self.image_processor_tester.crop_size["""width"""],
               )		,     )
           self.assertEqual(encoding["""labels"""].dtype		,     torch.long				)
           self.assertTrue(encoding["""labels"""].min().item() >= 0				)
           self.assertTrue(encoding["""labels"""].max().item() <= 255				)

           # Test batched input (PIL images)
           _A							:     str			=						prepare_semantic_batch_inputs()

           _A							:     Optional[Any]			=						image_processing(SCREAMING_SNAKE_CASE__		,     SCREAMING_SNAKE_CASE__		,     return_tensors="""pt"""				)
           self.assertEqual(
               encoding["""pixel_values"""].shape		,     (
                   2,
                   self.image_processor_tester.num_channels,
                   self.image_processor_tester.crop_size["""height"""],
                   self.image_processor_tester.crop_size["""width"""],
               )		,     )
           self.assertEqual(
               encoding["""labels"""].shape		,     (
                   2,
                   self.image_processor_tester.crop_size["""height"""],
                   self.image_processor_tester.crop_size["""width"""],
               )		,     )
           self.assertEqual(encoding["""labels"""].dtype		,     torch.long				)
           self.assertTrue(encoding["""labels"""].min().item() >= 0				)
           self.assertTrue(encoding["""labels"""].max().item() <= 255				)



     def 					a__	(  self				)						->							Dict:
           _A							:     Any			=						self.image_processing_class(**self.image_processor_dict				)

           # ADE20k has 150 classes, and the background is included, so labels should be between 0 and 150
           _A							:     Dict			=						prepare_semantic_single_inputs()
           _A							:     Optional[Any]			=						image_processing(SCREAMING_SNAKE_CASE__		,     SCREAMING_SNAKE_CASE__		,     return_tensors="""pt"""				)
           self.assertTrue(encoding["""labels"""].min().item() >= 0				)
           self.assertTrue(encoding["""labels"""].max().item() <= 150				)

           _A							:     List[Any]			=						True
           _A							:     int			=						image_processing(SCREAMING_SNAKE_CASE__		,     SCREAMING_SNAKE_CASE__		,     return_tensors="""pt"""				)
           self.assertTrue(encoding["""labels"""].min().item() >= 0				)
           self.assertTrue(encoding["""labels"""].max().item() <= 255				)



"""simple docstring"""




UpperCAmelCase__      :    List[str]    							= [
    9_9_9,
    8_0_0,
    7_9_9,
    6_0_0,
    5_9_9,
    5_0_0,
    4_0_0,
    3_9_9,
    3_7_7,
    3_5_5,
    3_3_3,
    3_1_1,
    2_8_8,
    2_6_6,
    2_4_4,
    2_2_2,
    2_0_0,
    1_9_9,
    1_7_7,
    1_5_5,
    1_3_3,
    1_1_1,
    8_8,
    6_6,
    4_4,
    2_2,
    0,
]

UpperCAmelCase__      :    int    							= [
    9_9_9,
    9_7_6,
    9_5_2,
    9_2_8,
    9_0_5,
    8_8_2,
    8_5_8,
    8_5_7,
    8_1_0,
    7_6_2,
    7_1_5,
    7_1_4,
    5_7_2,
    4_2_9,
    4_2_8,
    2_8_6,
    2_8_5,
    2_3_8,
    1_9_0,
    1_4_3,
    1_4_2,
    1_1_8,
    9_5,
    7_1,
    4_7,
    2_4,
    0,
]

UpperCAmelCase__      :    int    							= [
    9_9_9,
    9_8_8,
    9_7_7,
    9_6_6,
    9_5_5,
    9_4_4,
    9_3_3,
    9_2_2,
    9_1_1,
    9_0_0,
    8_9_9,
    8_7_9,
    8_5_9,
    8_4_0,
    8_2_0,
    8_0_0,
    7_9_9,
    7_6_6,
    7_3_3,
    7_0_0,
    6_9_9,
    6_5_0,
    6_0_0,
    5_9_9,
    5_0_0,
    4_9_9,
    4_0_0,
    3_9_9,
    3_5_0,
    3_0_0,
    2_9_9,
    2_6_6,
    2_3_3,
    2_0_0,
    1_9_9,
    1_7_9,
    1_5_9,
    1_4_0,
    1_2_0,
    1_0_0,
    9_9,
    8_8,
    7_7,
    6_6,
    5_5,
    4_4,
    3_3,
    2_2,
    1_1,
    0,
]

UpperCAmelCase__      :    int    							= [
    9_9_9,
    9_9_5,
    9_9_2,
    9_8_9,
    9_8_5,
    9_8_1,
    9_7_8,
    9_7_5,
    9_7_1,
    9_6_7,
    9_6_4,
    9_6_1,
    9_5_7,
    9_5_6,
    9_5_1,
    9_4_7,
    9_4_2,
    9_3_7,
    9_3_3,
    9_2_8,
    9_2_3,
    9_1_9,
    9_1_4,
    9_1_3,
    9_0_8,
    9_0_3,
    8_9_7,
    8_9_2,
    8_8_7,
    8_8_1,
    8_7_6,
    8_7_1,
    8_7_0,
    8_6_4,
    8_5_8,
    8_5_2,
    8_4_6,
    8_4_0,
    8_3_4,
    8_2_8,
    8_2_7,
    8_2_0,
    8_1_3,
    8_0_6,
    7_9_9,
    7_9_2,
    7_8_5,
    7_8_4,
    7_7_7,
    7_7_0,
    7_6_3,
    7_5_6,
    7_4_9,
    7_4_2,
    7_4_1,
    7_3_3,
    7_2_4,
    7_1_6,
    7_0_7,
    6_9_9,
    6_9_8,
    6_8_8,
    6_7_7,
    6_6_6,
    6_5_6,
    6_5_5,
    6_4_5,
    6_3_4,
    6_2_3,
    6_1_3,
    6_1_2,
    5_9_8,
    5_8_4,
    5_7_0,
    5_6_9,
    5_5_5,
    5_4_1,
    5_2_7,
    5_2_6,
    5_0_5,
    4_8_4,
    4_8_3,
    4_6_2,
    4_4_0,
    4_3_9,
    3_9_6,
    3_9_5,
    3_5_2,
    3_5_1,
    3_0_8,
    3_0_7,
    2_6_4,
    2_6_3,
    2_2_0,
    2_1_9,
    1_7_6,
    1_3_2,
    8_8,
    4_4,
    0,
]

UpperCAmelCase__      :    Tuple    							= [
    9_9_9,
    9_9_7,
    9_9_5,
    9_9_2,
    9_9_0,
    9_8_8,
    9_8_6,
    9_8_4,
    9_8_1,
    9_7_9,
    9_7_7,
    9_7_5,
    9_7_2,
    9_7_0,
    9_6_8,
    9_6_6,
    9_6_4,
    9_6_1,
    9_5_9,
    9_5_7,
    9_5_6,
    9_5_4,
    9_5_1,
    9_4_9,
    9_4_6,
    9_4_4,
    9_4_1,
    9_3_9,
    9_3_6,
    9_3_4,
    9_3_1,
    9_2_9,
    9_2_6,
    9_2_4,
    9_2_1,
    9_1_9,
    9_1_6,
    9_1_4,
    9_1_3,
    9_1_0,
    9_0_7,
    9_0_5,
    9_0_2,
    8_9_9,
    8_9_6,
    8_9_3,
    8_9_1,
    8_8_8,
    8_8_5,
    8_8_2,
    8_7_9,
    8_7_7,
    8_7_4,
    8_7_1,
    8_7_0,
    8_6_7,
    8_6_4,
    8_6_1,
    8_5_8,
    8_5_5,
    8_5_2,
    8_4_9,
    8_4_6,
    8_4_3,
    8_4_0,
    8_3_7,
    8_3_4,
    8_3_1,
    8_2_8,
    8_2_7,
    8_2_4,
    8_2_1,
    8_1_7,
    8_1_4,
    8_1_1,
    8_0_8,
    8_0_4,
    8_0_1,
    7_9_8,
    7_9_5,
    7_9_1,
    7_8_8,
    7_8_5,
    7_8_4,
    7_8_0,
    7_7_7,
    7_7_4,
    7_7_0,
    7_6_6,
    7_6_3,
    7_6_0,
    7_5_6,
    7_5_2,
    7_4_9,
    7_4_6,
    7_4_2,
    7_4_1,
    7_3_7,
    7_3_3,
    7_3_0,
    7_2_6,
    7_2_2,
    7_1_8,
    7_1_4,
    7_1_0,
    7_0_7,
    7_0_3,
    6_9_9,
    6_9_8,
    6_9_4,
    6_9_0,
    6_8_5,
    6_8_1,
    6_7_7,
    6_7_3,
    6_6_9,
    6_6_4,
    6_6_0,
    6_5_6,
    6_5_5,
    6_5_0,
    6_4_6,
    6_4_1,
    6_3_6,
    6_3_2,
    6_2_7,
    6_2_2,
    6_1_8,
    6_1_3,
    6_1_2,
    6_0_7,
    6_0_2,
    5_9_6,
    5_9_1,
    5_8_6,
    5_8_0,
    5_7_5,
    5_7_0,
    5_6_9,
    5_6_3,
    5_5_7,
    5_5_1,
    5_4_5,
    5_3_9,
    5_3_3,
    5_2_7,
    5_2_6,
    5_1_9,
    5_1_2,
    5_0_5,
    4_9_8,
    4_9_1,
    4_8_4,
    4_8_3,
    4_7_4,
    4_6_6,
    4_5_7,
    4_4_9,
    4_4_0,
    4_3_9,
    4_2_8,
    4_1_8,
    4_0_7,
    3_9_6,
    3_9_5,
    3_8_1,
    3_6_6,
    3_5_2,
    3_5_1,
    3_3_0,
    3_0_8,
    3_0_7,
    2_8_6,
    2_6_4,
    2_6_3,
    2_4_2,
    2_2_0,
    2_1_9,
    1_7_6,
    1_7_5,
    1_3_2,
    1_3_1,
    8_8,
    4_4,
    0,
]

UpperCAmelCase__      :    Union[str, Any]    							= [
    9_9_9,
    9_9_1,
    9_8_2,
    9_7_4,
    9_6_6,
    9_5_8,
    9_5_0,
    9_4_1,
    9_3_3,
    9_2_5,
    9_1_6,
    9_0_8,
    9_0_0,
    8_9_9,
    8_7_4,
    8_5_0,
    8_2_5,
    8_0_0,
    7_9_9,
    7_0_0,
    6_0_0,
    5_0_0,
    4_0_0,
    3_0_0,
    2_0_0,
    1_0_0,
    0,
]

UpperCAmelCase__      :    str    							= [
    9_9_9,
    9_9_2,
    9_8_5,
    9_7_8,
    9_7_1,
    9_6_4,
    9_5_7,
    9_4_9,
    9_4_2,
    9_3_5,
    9_2_8,
    9_2_1,
    9_1_4,
    9_0_7,
    9_0_0,
    8_9_9,
    8_7_9,
    8_5_9,
    8_4_0,
    8_2_0,
    8_0_0,
    7_9_9,
    7_6_6,
    7_3_3,
    7_0_0,
    6_9_9,
    6_5_0,
    6_0_0,
    5_9_9,
    5_0_0,
    4_9_9,
    4_0_0,
    3_9_9,
    3_0_0,
    2_9_9,
    2_0_0,
    1_9_9,
    1_0_0,
    9_9,
    0,
]

UpperCAmelCase__      :    str    							= [
    9_9_9,
    9_9_6,
    9_9_2,
    9_8_9,
    9_8_5,
    9_8_2,
    9_7_9,
    9_7_5,
    9_7_2,
    9_6_8,
    9_6_5,
    9_6_1,
    9_5_8,
    9_5_5,
    9_5_1,
    9_4_8,
    9_4_4,
    9_4_1,
    9_3_8,
    9_3_4,
    9_3_1,
    9_2_7,
    9_2_4,
    9_2_0,
    9_1_7,
    9_1_4,
    9_1_0,
    9_0_7,
    9_0_3,
    9_0_0,
    8_9_9,
    8_9_1,
    8_8_4,
    8_7_6,
    8_6_9,
    8_6_1,
    8_5_3,
    8_4_6,
    8_3_8,
    8_3_0,
    8_2_3,
    8_1_5,
    8_0_8,
    8_0_0,
    7_9_9,
    7_8_8,
    7_7_7,
    7_6_6,
    7_5_5,
    7_4_4,
    7_3_3,
    7_2_2,
    7_1_1,
    7_0_0,
    6_9_9,
    6_8_8,
    6_7_7,
    6_6_6,
    6_5_5,
    6_4_4,
    6_3_3,
    6_2_2,
    6_1_1,
    6_0_0,
    5_9_9,
    5_8_5,
    5_7_1,
    5_5_7,
    5_4_2,
    5_2_8,
    5_1_4,
    5_0_0,
    4_9_9,
    4_8_5,
    4_7_1,
    4_5_7,
    4_4_2,
    4_2_8,
    4_1_4,
    4_0_0,
    3_9_9,
    3_7_9,
    3_5_9,
    3_4_0,
    3_2_0,
    3_0_0,
    2_9_9,
    2_7_9,
    2_5_9,
    2_4_0,
    2_2_0,
    2_0_0,
    1_9_9,
    1_6_6,
    1_3_3,
    1_0_0,
    9_9,
    6_6,
    3_3,
    0,
]




