@@ -40,7 +40,7 @@ def add(self, node: DoubleLinkedListNode) -> None:
4040 prev = self .rear .prev
4141 if prev is None :
4242 return
43-
43+
4444 # Insert node between prev and rear
4545 prev .next = node
4646 node .prev = prev
@@ -51,11 +51,11 @@ def remove(self, node: DoubleLinkedListNode) -> DoubleLinkedListNode | None:
5151 """Remove node from list"""
5252 if node .prev is None or node .next is None :
5353 return None
54-
54+
5555 # Bypass node
5656 node .prev .next = node .next
5757 node .next .prev = node .prev
58-
58+
5959 # Clear node references
6060 node .prev = None
6161 node .next = None
@@ -97,7 +97,7 @@ def put(self, key: Any, value: Any) -> None:
9797 node .val = value
9898 self .list .add (node )
9999 return
100-
100+
101101 # Evict LRU item if at capacity
102102 if self .size >= self .capacity :
103103 # head.next may be None, so annotate as Optional
@@ -110,7 +110,7 @@ def put(self, key: Any, value: Any) -> None:
110110 ):
111111 del self .cache [first_node .key ]
112112 self .size -= 1
113-
113+
114114 # Add new node
115115 new_node = DoubleLinkedListNode (key , value )
116116 self .cache [key ] = new_node
@@ -132,22 +132,21 @@ def lru_cache(maxsize: int = 128) -> Callable[[Callable[P, R]], Callable[P, R]]:
132132 def wrapper (* args : P .args , ** kwargs : P .kwargs ) -> R :
133133 # Create normalized cache key
134134 key = (args , tuple (sorted (kwargs .items ())))
135-
135+
136136 # Try to get cached result
137137 cached = cache .get (key )
138138 if cached is not None :
139139 return cast (R , cached )
140-
140+
141141 # Compute and cache result
142142 result = func (* args , ** kwargs )
143143 cache .put (key , result )
144144 return result
145-
145+
146146 # Attach cache info method
147147 wrapper .cache_info = cache .cache_info # type: ignore[attr-defined]
148148 return wrapper
149149
150150return decorator
151151
152152if name == "main" : import doctest doctest .testmod ()
153-
0 commit comments