code: 
  
  
  '''simple docstring'''
  
  
  
  
  from __future__ import annotations
  
  from collections.abc import Callable
  from typing import Generic, TypeVar
  
  __lowercase  :      str      		=				TypeVar("""T""")
  __lowercase  :      Tuple      		=				TypeVar("""U""")
  
  
  
  
  
  class _snake_case   ( Generic[T, U]   ):
         """simple docstring"""
  
  
  
  
  
         def __init__(   self			,				__A			,				__A	)     ->int:
  
  
  
             """simple docstring"""
  
  
  
  
  
  
  
             __lowerCamelCase		:      Any											=					key
             __lowerCamelCase		:      Dict											=					val
             __lowerCamelCase		:      int											=					0
             __lowerCamelCase		:      DoubleLinkedListNode[T, U] | None											=					None
             __lowerCamelCase		:      DoubleLinkedListNode[T, U] | None											=					None
  
  
  
  
  
  
  
         def __repr__(   self	)     ->str:
  
  
  
             """simple docstring"""
  
  
  
  
  
  
  
             return "Node: key: {}, val: {}, freq: {}, has next: {}, has prev: {}".format(
                 self.key			,				self.val			,				self.freq			,				self.next is not None			,				self.prev is not None	)
  
  
  
  
  
  class _snake_case   ( Generic[T, U]   ):
         """simple docstring"""
  
  
  
  
  
         def __init__(   self	)     ->None:
  
  
  
             """simple docstring"""
  
  
  
  
  
  
  
             __lowerCamelCase		:      DoubleLinkedListNode[T, U]											=					DoubleLinkedListNode(__A			,				__A	)
             __lowerCamelCase		:      DoubleLinkedListNode[T, U]											=					DoubleLinkedListNode(__A			,				__A	)
             __lowerCamelCase		:      Union[str, Any]											=					self.rear, self.head
  
  
  
  
  
  
  
         def __repr__(   self	)     ->str:
  
  
  
             """simple docstring"""
  
  
  
  
  
  
  
             __lowerCamelCase		:      Dict											=					["DoubleLinkedList"]
             __lowerCamelCase		:      int											=					self.head
             while node.next is not None:
                 rep.append(str(__A	)	)
                 __lowerCamelCase		:      List[Any]											=					node.next
             rep.append(str(self.rear	)	)
             return ",\n    ".join(__A	)
  
  
  
  
  
  
  
         def 		__SCREAMING_SNAKE_CASE(   self			,				__A	)     ->None:
  
  
  
             """simple docstring"""
  
  
  
  
  
  
  
             __lowerCamelCase		:      Tuple											=					self.rear.prev
  
             # All nodes other than self.head are guaranteed to have non-None previous
             assert previous is not None
  
             __lowerCamelCase		:      List[Any]											=					node
             __lowerCamelCase		:      int											=					previous
             __lowerCamelCase		:      Tuple											=					node
             __lowerCamelCase		:      Union[str, Any]											=					self.rear
             node.freq += 1
             self._position_node(__A	)
  
  
  
  
  
  
  
         def 		__SCREAMING_SNAKE_CASE(   self			,				__A	)     ->None:
  
  
  
             """simple docstring"""
  
  
  
  
  
  
  
             while node.prev is not None and node.prev.freq > node.freq:
                 # swap node with previous node
                 __lowerCamelCase		:      Dict											=					node.prev
  
                 __lowerCamelCase		:      Tuple											=					previous_node.prev
                 __lowerCamelCase		:      List[str]											=					node.prev
                 __lowerCamelCase		:      Tuple											=					previous_node
                 __lowerCamelCase		:      List[Any]											=					node
  
  
  
  
  
  
  
         def 		__SCREAMING_SNAKE_CASE(   self			,				__A	)     ->DoubleLinkedListNode[T, U] | None:
  
  
  
             """simple docstring"""
  
  
  
  
  
  
  
             if node.prev is None or node.next is None:
                 return None
  
             __lowerCamelCase		:      List[Any]											=					node.next
             __lowerCamelCase		:      Dict											=					node.prev
             __lowerCamelCase		:      List[str]											=					None
             __lowerCamelCase		:      Any											=					None
             return node
  
  
  
  
  
  class _snake_case   ( Generic[T, U]   ):
         """simple docstring"""
  
  
  
  
  
         __a												=     {}
  
  
  
  
  
  
  
         def __init__(   self			,				__A	)     ->List[Any]:
  
  
  
             """simple docstring"""
  
  
  
  
  
  
  
             __lowerCamelCase		:      DoubleLinkedList[T, U]											=					DoubleLinkedList()
             __lowerCamelCase		:      Any											=					capacity
             __lowerCamelCase		:      int											=					0
             __lowerCamelCase		:      Optional[int]											=					0
             __lowerCamelCase		:      List[str]											=					0
             __lowerCamelCase		:      dict[T, DoubleLinkedListNode[T, U]]											=					{}
  
  
  
  
  
  
  
         def __repr__(   self	)     ->str:
  
  
  
             """simple docstring"""
  
  
  
  
  
  
  
             return (
                 f'CacheInfo(hits={self.hits}, misses={self.miss}, '
                 f'capacity={self.capacity}, current_size={self.num_keys})'
             )
  
  
  
  
  
  
  
         def __contains__(   self			,				__A	)     ->bool:
  
  
  
             """simple docstring"""
  
  
  
  
  
  
  
             return key in self.cache
  
  
  
  
  
  
  
         def 		__SCREAMING_SNAKE_CASE(   self			,				__A	)     ->U | None:
  
  
  
             """simple docstring"""
  
  
  
  
  
  
  
             if key in self.cache:
                 self.hits += 1
                 __lowerCamelCase		:      DoubleLinkedListNode[T, U]											=					self.cache[key]
                 __lowerCamelCase		:      Optional[int]											=					self.list.remove(self.cache[key]	)
                 assert node == value_node
  
                 # node is guaranteed not None because it is in self.cache
                 assert node is not None
                 self.list.add(__A	)
                 return node.val
             self.miss += 1
             return None
  
  
  
  
  
  
  
         def 		__SCREAMING_SNAKE_CASE(   self			,				__A			,				__A	)     ->None:
  
  
  
             """simple docstring"""
  
  
  
  
  
  
  
             if key not in self.cache:
                 if self.num_keys >= self.capacity:
                     # delete first node when over capacity
                     __lowerCamelCase		:      List[str]											=					self.list.head.next
  
                     # guaranteed to have a non-None first node when num_keys > 0
                     # explain to type checker via assertions
                     assert first_node is not None
                     assert first_node.key is not None
                     assert self.list.remove(__A	) is not None
                     # first_node guaranteed to be in list
  
                     del self.cache[first_node.key]
                     self.num_keys -= 1
                 __lowerCamelCase		:      str											=					DoubleLinkedListNode(__A			,				__A	)
                 self.list.add(self.cache[key]	)
                 self.num_keys += 1
  
             else:
                 __lowerCamelCase		:      List[Any]											=					self.list.remove(self.cache[key]	)
                 assert node is not None  # node guaranteed to be in list
                 __lowerCamelCase		:      Tuple											=					value
                 self.list.add(__A	)
  
  
  
  
  
  
  
         @classmethod
         def 		__SCREAMING_SNAKE_CASE(   cls			,				__A = 128	)     ->Callable[[Callable[[T], U]], Callable[..., U]]:
  
  
  
             """simple docstring"""
  
  
  
  
  
  
  
             def cache_decorator_inner(__A	) -> Callable[..., U]:
                 def cache_decorator_wrapper(*__A	) -> U:
                     if func not in cls.decorator_function_to_instance_map:
                         __lowerCamelCase		:      int											=					LFUCache(__A	)
  
                     __lowerCamelCase		:      Optional[int]											=					cls.decorator_function_to_instance_map[func].get(args[0]	)
                     if result is None:
                         __lowerCamelCase		:      Union[str, Any]											=					func(*__A	)
                         cls.decorator_function_to_instance_map[func].put(args[0]			,				__A	)
                     return result
  
                 def cache_info() -> LFUCache[T, U]:
                     return cls.decorator_function_to_instance_map[func]
  
                 setattr(__A			,				"cache_info"			,				__A	)  # noqa: B010
  
                 return cache_decorator_wrapper
  
             return cache_decorator_inner
  
  
  if __name__ == "__main__":
      import doctest
  
      doctest.testmod()
  
  
  
  
  
  
style_context: 
  
  
  '''simple docstring'''
  
  
  
  
  # tests directory-specific settings - this file is run automatically
  # by pytest before any tests are run
  
  import sys
  import warnings
  from os.path import abspath, dirname, join
  
  
  # allow having multiple repository checkouts and not needing to remember to rerun
  # 'pip install -e .[dev]' when switching between checkouts and running tests.
  __lowercase  :      Tuple      		=				abspath(join(dirname(dirname(dirname(__file__))), """src"""))
  sys.path.insert(1, git_repo_path)
  
  
  # silence FutureWarning warnings in tests since often we can't act on them until
  # they become normal warnings - i.e. the tests still need to test the current functionality
  warnings.simplefilter(action="""ignore""", category=FutureWarning)
  
  
  
  
  
  def 							a_       (						lowercase    )			->Any:
  
  
  
  
  
  
  				'''simple docstring'''
  
  				from diffusers.utils.testing_utils import pytest_addoption_shared
  
  				pytest_addoption_shared(lowercase    )
  
  
  
  
  
  def 							a_       (						lowercase    )			->str:
  
  
  
  
  
  
  				'''simple docstring'''
  
  				from diffusers.utils.testing_utils import pytest_terminal_summary_main
  
  				__lowerCamelCase		:      Union[str, Any]											=					terminalreporter.config.getoption("--make-reports"    )
  				if make_reports:
  								pytest_terminal_summary_main(lowercase							,						id=lowercase    )
  
  
  
  
  
  