




import math
import os

import cva
import numpy as np

_lowerCamelCase							=      255.0





def 							lowerCamelCase    (							UpperCAmelCase_	:      float   ,       UpperCAmelCase_	:      float      )->			float:

       """simple docstring"""




       a			   =np.mean((original - contrast) ** 2      )
       if mse == 0:
              return 100

       return 20 * math.logaa(PIXEL_MAX / math.sqrt(UpperCAmelCase_      )      )





def 							lowerCamelCase    (							)->			None:

       """simple docstring"""




       a			   =os.path.dirname(os.path.realpath(UpperCAmelCase_      )      )
       # Loading images (original image and compressed image)
       a			   =cva.imread(os.path.join(UpperCAmelCase_   ,       """image_data/original_image.png"""      )      )
       a			   =cva.imread(os.path.join(UpperCAmelCase_   ,       """image_data/compressed_image.png"""      )   ,       1      )

       a			   =cva.imread(os.path.join(UpperCAmelCase_   ,       """image_data/PSNR-example-base.png"""      )      )
       a			   =cva.imread(
           os.path.join(UpperCAmelCase_   ,       """image_data/PSNR-example-comp-10.jpg"""      )   ,       1      )

       # Value expected: 29.73dB
       print("""-- First Test --"""      )
       print(F'''PSNR value is {peak_signal_to_noise_ratio(UpperCAmelCase_   ,       UpperCAmelCase_      )} dB'''      )

       # # Value expected: 31.53dB (Wikipedia Example)
       print("""\n-- Second Test --"""      )
       print(F'''PSNR value is {peak_signal_to_noise_ratio(UpperCAmelCase_   ,       UpperCAmelCase_      )} dB'''      )


if __name__ == "__main__":
    main()






import inspect
import unittest

from transformers import is_torch_available, is_vision_available
from transformers.models.auto import get_values
from transformers.testing_utils import require_torch, slow, torch_device

from ...test_configuration_common import ConfigTester
from ...test_modeling_common import ModelTesterMixin, floats_tensor, ids_tensor
from ...test_pipeline_mixin import PipelineTesterMixin


if is_torch_available():
    import torch

    from transformers import MODEL_MAPPING, PoolFormerConfig, PoolFormerForImageClassification, PoolFormerModel
    from transformers.models.poolformer.modeling_poolformer import POOLFORMER_PRETRAINED_MODEL_ARCHIVE_LIST


if is_vision_available():
    from PIL import Image

    from transformers import PoolFormerImageProcessor


class        UpperCAmelCase__				(							UpperCAmelCase__				):



     '''simple docstring'''
     def        lowerCAmelCase__  (				self	):
            a			   =self.config_class(**self.inputs_dict	)
            self.parent.assertTrue(hasattr(_lowerCAmelCase ,    """hidden_sizes"""	)	)
            self.parent.assertTrue(hasattr(_lowerCAmelCase ,    """num_encoder_blocks"""	)	)



class        UpperCAmelCase__				:



     '''simple docstring'''
     def __init__(				self ,    _lowerCAmelCase ,    _lowerCAmelCase=13 ,    _lowerCAmelCase=64 ,    _lowerCAmelCase=3 ,    _lowerCAmelCase=4 ,    _lowerCAmelCase=[2, 2, 2, 2] ,    _lowerCAmelCase=[8, 4, 2, 1] ,    _lowerCAmelCase=[16, 32, 64, 128] ,    _lowerCAmelCase=[1, 4, 8, 16] ,    _lowerCAmelCase=False ,    _lowerCAmelCase=True ,    _lowerCAmelCase="gelu" ,    _lowerCAmelCase=0.1 ,    _lowerCAmelCase=0.02 ,    _lowerCAmelCase=3 ,    _lowerCAmelCase=None ,    ):
            a			   =parent
            a			   =batch_size
            a			   =image_size
            a			   =num_channels
            a			   =num_encoder_blocks
            a			   =sr_ratios
            a			   =depths
            a			   =hidden_sizes
            a			   =downsampling_rates
            a			   =is_training
            a			   =use_labels
            a			   =hidden_act
            a			   =hidden_dropout_prob
            a			   =initializer_range
            a			   =num_labels
            a			   =scope
     def        lowerCAmelCase__  (				self	):
            a			   =floats_tensor([self.batch_size, self.num_channels, self.image_size, self.image_size]	)

            a			   =None
            if self.use_labels:
                   a			   =ids_tensor([self.batch_size, self.image_size, self.image_size] ,    self.num_labels	)

            a			   =PoolFormerConfig(
                image_size=self.image_size ,    num_channels=self.num_channels ,    num_encoder_blocks=self.num_encoder_blocks ,    depths=self.depths ,    hidden_sizes=self.hidden_sizes ,    hidden_act=self.hidden_act ,    hidden_dropout_prob=self.hidden_dropout_prob ,    initializer_range=self.initializer_range ,    )

            return config, pixel_values, labels
     def        lowerCAmelCase__  (				self ,    _lowerCAmelCase ,    _lowerCAmelCase ,    _lowerCAmelCase	):
            a			   =PoolFormerModel(config=_lowerCAmelCase	)
            model.to(_lowerCAmelCase	)
            model.eval()
            a			   =model(_lowerCAmelCase	)
            a			   =a			   =self.image_size // 32.0
            self.parent.assertEqual(
                result.last_hidden_state.shape ,    (self.batch_size, self.hidden_sizes[-1], expected_height, expected_width)	)






     def        lowerCAmelCase__  (				self	):
            a			   =self.prepare_config_and_inputs()
            a   ,      a   ,      a			   =config_and_inputs
            a			   ={"""pixel_values""": pixel_values}
            return config, inputs_dict



@require_torch
class        UpperCAmelCase__				(							UpperCAmelCase__      ,		UpperCAmelCase__      ,		unittest.TestCase				):



     '''simple docstring'''
     _SCREAMING_SNAKE_CASE      :					Tuple     					=    (PoolFormerModel, PoolFormerForImageClassification) if is_torch_available() else ()
     _SCREAMING_SNAKE_CASE      :					Any     					=    (
         {"feature-extraction": PoolFormerModel, "image-classification": PoolFormerForImageClassification}
         if is_torch_available()
         else {}
     )

     _SCREAMING_SNAKE_CASE      :					Union[str, Any]     					=    False
     _SCREAMING_SNAKE_CASE      :					Tuple     					=    False
     _SCREAMING_SNAKE_CASE      :					str     					=    False
     _SCREAMING_SNAKE_CASE      :					Optional[int]     					=    False
     _SCREAMING_SNAKE_CASE      :					Optional[int]     					=    False
     def        lowerCAmelCase__  (				self	):
            a			   =PoolFormerModelTester(self	)
            a			   =PoolFormerConfigTester(self ,    config_class=_lowerCAmelCase	)
     def        lowerCAmelCase__  (				self	):
            self.config_tester.run_common_tests()
     def        lowerCAmelCase__  (				self	):
            a			   =self.model_tester.prepare_config_and_inputs()
            self.model_tester.create_and_check_model(*_lowerCAmelCase	)
     @unittest.skip("""PoolFormer does not use inputs_embeds"""	)
     def        lowerCAmelCase__  (				self	):
            pass
     @unittest.skip("""PoolFormer does not have get_input_embeddings method and get_output_embeddings methods"""	)
     def        lowerCAmelCase__  (				self	):
            pass
     def        lowerCAmelCase__  (				self	):
            def check_hidden_states_output(_lowerCAmelCase ,    _lowerCAmelCase ,    _lowerCAmelCase	):
                   a			   =model_class(_lowerCAmelCase	)
                   model.to(_lowerCAmelCase	)
                   model.eval()

                   with torch.no_grad():
                          a			   =model(**self._prepare_for_class(_lowerCAmelCase ,    _lowerCAmelCase	)	)

                   a			   =outputs.hidden_states

                   a			   =self.model_tester.num_encoder_blocks
                   self.assertEqual(len(_lowerCAmelCase	) ,    _lowerCAmelCase	)

                   # verify the first hidden states (first block)
                   self.assertListEqual(
                       list(hidden_states[0].shape[-3:]	) ,    [
                           self.model_tester.hidden_sizes[0],
                           self.model_tester.image_size // 4,
                           self.model_tester.image_size // 4,
                       ] ,    )

            a   ,      a			   =self.model_tester.prepare_config_and_inputs_for_common()

            for model_class in self.all_model_classes:
                   a			   =True
                   check_hidden_states_output(_lowerCAmelCase ,    _lowerCAmelCase ,    _lowerCAmelCase	)

                   # check that output_hidden_states also work using config
                   del inputs_dict["output_hidden_states"]
                   a			   =True

                   check_hidden_states_output(_lowerCAmelCase ,    _lowerCAmelCase ,    _lowerCAmelCase	)
     def        lowerCAmelCase__  (				self	):
            if not self.model_tester.is_training:
                   return

            a   ,      a			   =self.model_tester.prepare_config_and_inputs_for_common()
            a			   =True

            for model_class in self.all_model_classes:
                   if model_class in get_values(_lowerCAmelCase	):
                          continue
                   a			   =model_class(_lowerCAmelCase	)
                   model.to(_lowerCAmelCase	)
                   model.train()
                   a			   =self._prepare_for_class(_lowerCAmelCase ,    _lowerCAmelCase ,    return_labels=_lowerCAmelCase	)
                   a			   =model(**_lowerCAmelCase	).loss
                   loss.backward()
     def        lowerCAmelCase__  (				self	):
            a   ,      a			   =self.model_tester.prepare_config_and_inputs_for_common()

            for model_class in self.all_model_classes:
                   a			   =model_class(_lowerCAmelCase	)
                   a			   =inspect.signature(model.forward	)
                   # signature.parameters is an OrderedDict => so arg_names order is deterministic
                   a			   =[*signature.parameters.keys()]

                   a			   =["""pixel_values"""]
                   self.assertListEqual(arg_names[:1] ,    _lowerCAmelCase	)






     @slow
     def        lowerCAmelCase__  (				self	):
            for model_name in POOLFORMER_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
                   a			   =PoolFormerModel.from_pretrained(_lowerCAmelCase	)
                   self.assertIsNotNone(_lowerCAmelCase	)





def 							lowerCamelCase    (							)->			Tuple:

       """simple docstring"""




       a			   =Image.open("""./tests/fixtures/tests_samples/COCO/000000039769.png"""      )
       return image






@require_torch
class        UpperCAmelCase__				(							unittest.TestCase				):



     '''simple docstring'''
     @slow
     def        lowerCAmelCase__  (				self	):
            a			   =PoolFormerImageProcessor()
            a			   =PoolFormerForImageClassification.from_pretrained("""sail/poolformer_s12"""	).to(_lowerCAmelCase	)

            a			   =image_processor(images=prepare_img() ,    return_tensors="""pt"""	).to(_lowerCAmelCase	)

            # forward pass
            with torch.no_grad():
                   a			   =model(**_lowerCAmelCase	)

            # verify the logits
            a			   =torch.Size((1, 1_000)	)
            self.assertEqual(outputs.logits.shape ,    _lowerCAmelCase	)

            a			   =torch.tensor([-0.61_13, 0.16_85, -0.04_92]	).to(_lowerCAmelCase	)
            self.assertTrue(torch.allclose(outputs.logits[0, :3] ,    _lowerCAmelCase ,    atol=1E-4	)	)
