"""simple docstring"""







from collections import Counter



def       A__    (	lowercase_     :	list[int]						)  ->							int:
   return sum(socks_by_color // 2 for socks_by_color in Counter(lowercase_						).values()						)


if __name__ == "__main__":
     import doctest

     doctest.testmod()

     _SCREAMING_SNAKE_CASE	:		int   =   [int(x) for x in input('''Enter socks by color :''').rstrip().split()]
     print(F"sock_merchant({colors}) = {sock_merchant(colors)}")













import torch

from diffusers import LMSDiscreteScheduler
from diffusers.utils import torch_device

from .test_schedulers import SchedulerCommonTest





class A_   (     _lowerCamelCase  ):
   lowerCAmelCase__  	=					(LMSDiscreteScheduler,)
   lowerCAmelCase__  	=					10




   def _lowerCAmelCase (self      :List[str]       ,  **_UpperCamelCase      :Optional[int]					)->   List[str]:
         __A			  =							{
             '''num_train_timesteps''': 1100,
             '''beta_start''': 0.0_0_0_1,
             '''beta_end''': 0.0_2,
             '''beta_schedule''': '''linear''',
         }

         config.update(**_UpperCamelCase					)
         return config




   def _lowerCAmelCase (self      :List[str]					)->   Tuple:
         for timesteps in [10, 50, 100, 1000]:
               self.check_over_configs(num_train_timesteps=_UpperCamelCase					)




   def _lowerCAmelCase (self      :Dict					)->   Optional[int]:
         for beta_start, beta_end in zip([0.0_0_0_0_1, 0.0_0_0_1, 0.0_0_1]       ,  [0.0_0_0_2, 0.0_0_2, 0.0_2]					):
               self.check_over_configs(beta_start=_UpperCamelCase       ,  beta_end=_UpperCamelCase					)




   def _lowerCAmelCase (self      :Optional[int]					)->   Any:
         for schedule in ["linear", "scaled_linear"]:
               self.check_over_configs(beta_schedule=_UpperCamelCase					)




   def _lowerCAmelCase (self      :List[str]					)->   str:
         for prediction_type in ["epsilon", "v_prediction"]:
               self.check_over_configs(prediction_type=_UpperCamelCase					)




   def _lowerCAmelCase (self      :str					)->   List[str]:
         for t in [0, 500, 800]:
               self.check_over_forward(time_step=_UpperCamelCase					)




   def _lowerCAmelCase (self      :Optional[Any]					)->   Tuple:
         __A			  =							self.scheduler_classes[0]
         __A			  =							self.get_scheduler_config()
         __A			  =							scheduler_class(**_UpperCamelCase					)

         scheduler.set_timesteps(self.num_inference_steps					)

         __A			  =							self.dummy_model()
         __A			  =							self.dummy_sample_deter * scheduler.init_noise_sigma

         for i, t in enumerate(scheduler.timesteps					):
               __A			  =							scheduler.scale_model_input(_UpperCamelCase       ,  _UpperCamelCase					)

               __A			  =							model(_UpperCamelCase       ,  _UpperCamelCase					)

               __A			  =							scheduler.step(_UpperCamelCase       ,  _UpperCamelCase       ,  _UpperCamelCase					)
               __A			  =							output.prev_sample

         __A			  =							torch.sum(torch.abs(_UpperCamelCase					)					)
         __A			  =							torch.mean(torch.abs(_UpperCamelCase					)					)

         assert abs(result_sum.item() - 1_0_0_6.3_8_8					) < 1e-2
         assert abs(result_mean.item() - 1.3_1					) < 1e-3




   def _lowerCAmelCase (self      :Optional[Any]					)->   Optional[int]:
         __A			  =							self.scheduler_classes[0]
         __A			  =							self.get_scheduler_config(prediction_type='''v_prediction'''					)
         __A			  =							scheduler_class(**_UpperCamelCase					)

         scheduler.set_timesteps(self.num_inference_steps					)

         __A			  =							self.dummy_model()
         __A			  =							self.dummy_sample_deter * scheduler.init_noise_sigma

         for i, t in enumerate(scheduler.timesteps					):
               __A			  =							scheduler.scale_model_input(_UpperCamelCase       ,  _UpperCamelCase					)

               __A			  =							model(_UpperCamelCase       ,  _UpperCamelCase					)

               __A			  =							scheduler.step(_UpperCamelCase       ,  _UpperCamelCase       ,  _UpperCamelCase					)
               __A			  =							output.prev_sample

         __A			  =							torch.sum(torch.abs(_UpperCamelCase					)					)
         __A			  =							torch.mean(torch.abs(_UpperCamelCase					)					)

         assert abs(result_sum.item() - 0.0_0_1_7					) < 1e-2
         assert abs(result_mean.item() - 2.2_676e-06					) < 1e-3




   def _lowerCAmelCase (self      :List[Any]					)->   List[Any]:
         __A			  =							self.scheduler_classes[0]
         __A			  =							self.get_scheduler_config()
         __A			  =							scheduler_class(**_UpperCamelCase					)

         scheduler.set_timesteps(self.num_inference_steps       ,  device=_UpperCamelCase					)

         __A			  =							self.dummy_model()
         __A			  =							self.dummy_sample_deter * scheduler.init_noise_sigma.cpu()
         __A			  =							sample.to(_UpperCamelCase					)

         for i, t in enumerate(scheduler.timesteps					):
               __A			  =							scheduler.scale_model_input(_UpperCamelCase       ,  _UpperCamelCase					)

               __A			  =							model(_UpperCamelCase       ,  _UpperCamelCase					)

               __A			  =							scheduler.step(_UpperCamelCase       ,  _UpperCamelCase       ,  _UpperCamelCase					)
               __A			  =							output.prev_sample

         __A			  =							torch.sum(torch.abs(_UpperCamelCase					)					)
         __A			  =							torch.mean(torch.abs(_UpperCamelCase					)					)

         assert abs(result_sum.item() - 1_0_0_6.3_8_8					) < 1e-2
         assert abs(result_mean.item() - 1.3_1					) < 1e-3






   def _lowerCAmelCase (self      :List[str]					)->   int:
         __A			  =							self.scheduler_classes[0]
         __A			  =							self.get_scheduler_config()
         __A			  =							scheduler_class(**_UpperCamelCase       ,  use_karras_sigmas=_UpperCamelCase					)

         scheduler.set_timesteps(self.num_inference_steps       ,  device=_UpperCamelCase					)

         __A			  =							self.dummy_model()
         __A			  =							self.dummy_sample_deter.to(_UpperCamelCase					) * scheduler.init_noise_sigma
         __A			  =							sample.to(_UpperCamelCase					)

         for t in scheduler.timesteps:
               __A			  =							scheduler.scale_model_input(_UpperCamelCase       ,  _UpperCamelCase					)

               __A			  =							model(_UpperCamelCase       ,  _UpperCamelCase					)

               __A			  =							scheduler.step(_UpperCamelCase       ,  _UpperCamelCase       ,  _UpperCamelCase					)
               __A			  =							output.prev_sample

         __A			  =							torch.sum(torch.abs(_UpperCamelCase					)					)
         __A			  =							torch.mean(torch.abs(_UpperCamelCase					)					)

         assert abs(result_sum.item() - 3_8_1_2.9_9_2_7					) < 2e-2
         assert abs(result_mean.item() - 4.9_6_4_8					) < 1e-3





