


from __future__ import annotations


def   a						(				SCREAMING_SNAKE_CASE_   :		Tuple				,      SCREAMING_SNAKE_CASE_   :		Optional[int]							):






       """simple docstring"""





       UpperCamelCase     :						Any 						=		0
       UpperCamelCase     :						Union[str, Any] 						=		len(SCREAMING_SNAKE_CASE_							) - 1
       while left <= right:
              UpperCamelCase     :						Optional[int] 						=		(left + right) // 2
              if left == right:
                     if sorted_list[middle] < item:
                            UpperCamelCase     :						Union[str, Any] 						=		middle + 1
                     break
              elif sorted_list[middle] < item:
                     UpperCamelCase     :						Optional[int] 						=		middle + 1
              else:
                     UpperCamelCase     :						Union[str, Any] 						=		middle - 1
       sorted_list.insert(SCREAMING_SNAKE_CASE_				,      SCREAMING_SNAKE_CASE_							)
       return sorted_list


def   a						(				SCREAMING_SNAKE_CASE_   :		Any				,      SCREAMING_SNAKE_CASE_   :		List[Any]							):






       """simple docstring"""





       UpperCamelCase     :						List[str] 						=		[]
       while left and right:
              if left[0][0] < right[0][0]:
                     result.append(left.pop(0							)							)
              else:
                     result.append(right.pop(0							)							)
       return result + left + right


def   a						(				SCREAMING_SNAKE_CASE_   :		Union[str, Any]							):






       """simple docstring"""





       UpperCamelCase     :						Optional[int] 						=		len(SCREAMING_SNAKE_CASE_							)
       if length <= 1:
              return list_ad
       UpperCamelCase     :						Optional[int] 						=		length // 2
       return merge(sortlist_ad(list_ad[:middle]							)				,      sortlist_ad(list_ad[middle:]							)							)


def   a						(				SCREAMING_SNAKE_CASE_   :		list[int]							):






       """simple docstring"""





       if len(SCREAMING_SNAKE_CASE_							) <= 1:
              return collection
       UpperCamelCase     :						int 						=		[]
       UpperCamelCase     :						Union[str, Any] 						=		False
       for i in range(0				,      len(SCREAMING_SNAKE_CASE_							)				,      2							):
              if i == len(SCREAMING_SNAKE_CASE_							) - 1:
                     UpperCamelCase     :						List[str] 						=		True
              else:
                     if collection[i] < collection[i + 1]:
                            two_paired_list.append([collection[i], collection[i + 1]]							)
                     else:
                            two_paired_list.append([collection[i + 1], collection[i]]							)
       UpperCamelCase     :						Optional[Any] 						=		sortlist_ad(SCREAMING_SNAKE_CASE_							)
       UpperCamelCase     :						str 						=		[i[0] for i in sorted_list_ad]
       result.append(sorted_list_ad[-1][1]							)
       if has_last_odd_item:
              UpperCamelCase     :						Any 						=		collection[-1]
              UpperCamelCase     :						Optional[Any] 						=		binary_search_insertion(SCREAMING_SNAKE_CASE_				,      SCREAMING_SNAKE_CASE_							)
       UpperCamelCase     :						List[Any] 						=		False
       for i in range(len(SCREAMING_SNAKE_CASE_							) - 1							):
              if result[i] == collection[-1] and has_last_odd_item:
                     UpperCamelCase     :						Dict 						=		True
              UpperCamelCase     :						Optional[Any] 						=		sorted_list_ad[i][1]
              # If last_odd_item is inserted before the item's index,
              # you should forward index one more.
              if is_last_odd_item_inserted_before_this_index:
                     UpperCamelCase     :						Tuple 						=		result[: i + 2] + binary_search_insertion(result[i + 2 :]				,      SCREAMING_SNAKE_CASE_							)
              else:
                     UpperCamelCase     :						Dict 						=		result[: i + 1] + binary_search_insertion(result[i + 1 :]				,      SCREAMING_SNAKE_CASE_							)

       return result


if __name__ == "__main__":
  __UpperCAmelCase			:			Optional[int]			      =					input("Enter numbers separated by a comma:\n").strip()
  __UpperCAmelCase			:			List[str]			      =					[int(item) for item in user_input.split(",")]
  print(merge_insertion_sort(unsorted))





import tempfile
import unittest

import torch

from diffusers import UNetaDConditionModel
from diffusers.training_utils import EMAModel
from diffusers.utils.testing_utils import enable_full_determinism, skip_mps, torch_device


enable_full_determinism()



class  UpperCAmelCase_						(				unittest.TestCase):
       '''simple docstring'''
       __UpperCamelCase   :  Tuple				=       "hf-internal-testing/tiny-stable-diffusion-pipe"
       __UpperCamelCase   :  Optional[Any]				=       1
       __UpperCamelCase   :  str				=       77
       __UpperCamelCase   :  Tuple				=       32
       __UpperCamelCase   :  List[str]				=       4
       __UpperCamelCase   :  Optional[int]				=       64
       __UpperCamelCase   :  Union[str, Any]				=       torch.manual_seed(0)






       def 			_lowercase (  self			,       __SCREAMING_SNAKE_CASE=0.9_999    ):




              """simple docstring"""




              UpperCamelCase     :						Optional[int] 						=		UNetaDConditionModel.from_pretrained(self.model_id			,       subfolder='''unet'''    )
              UpperCamelCase     :						Any 						=		unet.to(__SCREAMING_SNAKE_CASE    )
              UpperCamelCase     :						Dict 						=		EMAModel(unet.parameters()			,       decay=__SCREAMING_SNAKE_CASE			,       model_cls=__SCREAMING_SNAKE_CASE			,       model_config=unet.config    )
              return unet, ema_unet






       def 			_lowercase (  self    ):




              """simple docstring"""




              UpperCamelCase     :						Tuple 						=		torch.randn(
                  self.batch_size			,       self.num_in_channels			,       self.latent_height			,       self.latent_width			,       generator=self.generator    ).to(__SCREAMING_SNAKE_CASE    )
              UpperCamelCase     :						Optional[int] 						=		torch.randint(0			,       1_000			,       size=(self.batch_size,)			,       generator=self.generator    ).to(__SCREAMING_SNAKE_CASE    )
              UpperCamelCase     :						List[Any] 						=		torch.randn(
                  self.batch_size			,       self.prompt_length			,       self.text_encoder_hidden_dim			,       generator=self.generator    ).to(__SCREAMING_SNAKE_CASE    )
              return noisy_latents, timesteps, encoder_hidden_states






       def 			_lowercase (  self			,       __SCREAMING_SNAKE_CASE    ):




              """simple docstring"""




              UpperCamelCase     :						Dict 						=		{}
              for k, param in unet.state_dict().items():
                     UpperCamelCase     :						int 						=		torch.randn_like(__SCREAMING_SNAKE_CASE    ) + (param * torch.randn_like(__SCREAMING_SNAKE_CASE    ))
                     updated_state_dict.update({k: updated_param}    )
              unet.load_state_dict(__SCREAMING_SNAKE_CASE    )
              return unet






       def 			_lowercase (  self    ):




              """simple docstring"""




              UpperCamelCase						,			UpperCamelCase     :						Optional[Any] 						=		self.get_models()
              # Take the first (hypothetical) EMA step.
              ema_unet.step(unet.parameters()    )
              assert ema_unet.optimization_step == 1

              # Take two more.
              for _ in range(2    ):
                     ema_unet.step(unet.parameters()    )
              assert ema_unet.optimization_step == 3






       def 			_lowercase (  self    ):




              """simple docstring"""




              UpperCamelCase						,			UpperCamelCase     :						List[Any] 						=		self.get_models()
              # Since the `unet` is not being updated (i.e., backprop'd)
              # there won't be any difference between the `params` of `unet`
              # and `ema_unet` even if we call `ema_unet.step(unet.parameters())`.
              ema_unet.step(unet.parameters()    )
              UpperCamelCase     :						int 						=		list(unet.parameters()    )
              for s_param, param in zip(ema_unet.shadow_params			,       __SCREAMING_SNAKE_CASE    ):
                     assert torch.allclose(__SCREAMING_SNAKE_CASE			,       __SCREAMING_SNAKE_CASE    )

              # The above holds true even if we call `ema.step()` multiple times since
              # `unet` params are still not being updated.
              for _ in range(4    ):
                     ema_unet.step(unet.parameters()    )
              for s_param, param in zip(ema_unet.shadow_params			,       __SCREAMING_SNAKE_CASE    ):
                     assert torch.allclose(__SCREAMING_SNAKE_CASE			,       __SCREAMING_SNAKE_CASE    )






       def 			_lowercase (  self    ):




              """simple docstring"""




              UpperCamelCase						,			UpperCamelCase     :						Any 						=		self.get_models()
              # Here we simulate the parameter updates for `unet`. Since there might
              # be some parameters which are initialized to zero we take extra care to
              # initialize their values to something non-zero before the multiplication.
              UpperCamelCase     :						Union[str, Any] 						=		self.simulate_backprop(__SCREAMING_SNAKE_CASE    )

              # Take the EMA step.
              ema_unet.step(unet_pseudo_updated_step_one.parameters()    )

              # Now the EMA'd parameters won't be equal to the original model parameters.
              UpperCamelCase     :						Any 						=		list(unet_pseudo_updated_step_one.parameters()    )
              for s_param, param in zip(ema_unet.shadow_params			,       __SCREAMING_SNAKE_CASE    ):
                     assert ~torch.allclose(__SCREAMING_SNAKE_CASE			,       __SCREAMING_SNAKE_CASE    )

              # Ensure this is the case when we take multiple EMA steps.
              for _ in range(4    ):
                     ema_unet.step(unet.parameters()    )
              for s_param, param in zip(ema_unet.shadow_params			,       __SCREAMING_SNAKE_CASE    ):
                     assert ~torch.allclose(__SCREAMING_SNAKE_CASE			,       __SCREAMING_SNAKE_CASE    )






       def 			_lowercase (  self    ):




              """simple docstring"""




              UpperCamelCase						,			UpperCamelCase     :						Optional[int] 						=		self.get_models()

              # First backprop + EMA
              UpperCamelCase     :						Dict 						=		self.simulate_backprop(__SCREAMING_SNAKE_CASE    )
              ema_unet.step(unet_step_one.parameters()    )
              UpperCamelCase     :						List[str] 						=		ema_unet.shadow_params

              # Second backprop + EMA
              UpperCamelCase     :						str 						=		self.simulate_backprop(__SCREAMING_SNAKE_CASE    )
              ema_unet.step(unet_step_two.parameters()    )
              UpperCamelCase     :						List[Any] 						=		ema_unet.shadow_params

              for step_one, step_two in zip(__SCREAMING_SNAKE_CASE			,       __SCREAMING_SNAKE_CASE    ):
                     assert ~torch.allclose(__SCREAMING_SNAKE_CASE			,       __SCREAMING_SNAKE_CASE    )






       def 			_lowercase (  self    ):




              """simple docstring"""




              UpperCamelCase						,			UpperCamelCase     :						int 						=		self.get_models(decay=0.0    )
              UpperCamelCase     :						Optional[int] 						=		self.simulate_backprop(__SCREAMING_SNAKE_CASE    )
              ema_unet.step(unet_step_one.parameters()    )
              UpperCamelCase     :						Union[str, Any] 						=		ema_unet.shadow_params

              UpperCamelCase     :						Any 						=		self.simulate_backprop(__SCREAMING_SNAKE_CASE    )
              ema_unet.step(unet_step_two.parameters()    )
              UpperCamelCase     :						int 						=		ema_unet.shadow_params

              for step_one, step_two in zip(__SCREAMING_SNAKE_CASE			,       __SCREAMING_SNAKE_CASE    ):
                     assert torch.allclose(__SCREAMING_SNAKE_CASE			,       __SCREAMING_SNAKE_CASE    )






       @skip_mps
       def 			_lowercase (  self    ):




              """simple docstring"""




              UpperCamelCase						,			UpperCamelCase     :						str 						=		self.get_models()
              UpperCamelCase						,			UpperCamelCase						,			UpperCamelCase     :						Union[str, Any] 						=		self.get_dummy_inputs()

              with tempfile.TemporaryDirectory() as tmpdir:
                     ema_unet.save_pretrained(__SCREAMING_SNAKE_CASE    )
                     UpperCamelCase     :						Optional[int] 						=		UNetaDConditionModel.from_pretrained(__SCREAMING_SNAKE_CASE			,       model_cls=__SCREAMING_SNAKE_CASE    )
                     UpperCamelCase     :						List[str] 						=		loaded_unet.to(unet.device    )

              # Since no EMA step has been performed the outputs should match.
              UpperCamelCase     :						Optional[Any] 						=		unet(__SCREAMING_SNAKE_CASE			,       __SCREAMING_SNAKE_CASE			,       __SCREAMING_SNAKE_CASE    ).sample
              UpperCamelCase     :						List[str] 						=		loaded_unet(__SCREAMING_SNAKE_CASE			,       __SCREAMING_SNAKE_CASE			,       __SCREAMING_SNAKE_CASE    ).sample

              assert torch.allclose(__SCREAMING_SNAKE_CASE			,       __SCREAMING_SNAKE_CASE			,       atol=1e-4    )

