LRU Cache to store a given capacity of data. Can be used as a stand-alone object or as a function decorator. >>> cache = LRUCache(2) >>> cache.put(1, 1) >>> cache.put(2, 2) >>> cache.get(1) 1 >>> cache.list DoubleLinkedList, Node: key: None, val: None,
| 144 | |
| 145 | |
| 146 | class LRUCache[T, U]: |
| 147 | """ |
| 148 | LRU Cache to store a given capacity of data. Can be used as a stand-alone object |
| 149 | or as a function decorator. |
| 150 | |
| 151 | >>> cache = LRUCache(2) |
| 152 | |
| 153 | >>> cache.put(1, 1) |
| 154 | >>> cache.put(2, 2) |
| 155 | >>> cache.get(1) |
| 156 | 1 |
| 157 | |
| 158 | >>> cache.list |
| 159 | DoubleLinkedList, |
| 160 | Node: key: None, val: None, has next: True, has prev: False, |
| 161 | Node: key: 2, val: 2, has next: True, has prev: True, |
| 162 | Node: key: 1, val: 1, has next: True, has prev: True, |
| 163 | Node: key: None, val: None, has next: False, has prev: True |
| 164 | |
| 165 | >>> cache.cache # doctest: +NORMALIZE_WHITESPACE |
| 166 | {1: Node: key: 1, val: 1, has next: True, has prev: True, \ |
| 167 | 2: Node: key: 2, val: 2, has next: True, has prev: True} |
| 168 | |
| 169 | >>> cache.put(3, 3) |
| 170 | |
| 171 | >>> cache.list |
| 172 | DoubleLinkedList, |
| 173 | Node: key: None, val: None, has next: True, has prev: False, |
| 174 | Node: key: 1, val: 1, has next: True, has prev: True, |
| 175 | Node: key: 3, val: 3, has next: True, has prev: True, |
| 176 | Node: key: None, val: None, has next: False, has prev: True |
| 177 | |
| 178 | >>> cache.cache # doctest: +NORMALIZE_WHITESPACE |
| 179 | {1: Node: key: 1, val: 1, has next: True, has prev: True, \ |
| 180 | 3: Node: key: 3, val: 3, has next: True, has prev: True} |
| 181 | |
| 182 | >>> cache.get(2) is None |
| 183 | True |
| 184 | |
| 185 | >>> cache.put(4, 4) |
| 186 | |
| 187 | >>> cache.get(1) is None |
| 188 | True |
| 189 | |
| 190 | >>> cache.get(3) |
| 191 | 3 |
| 192 | |
| 193 | >>> cache.get(4) |
| 194 | 4 |
| 195 | |
| 196 | >>> cache |
| 197 | CacheInfo(hits=3, misses=2, capacity=2, current size=2) |
| 198 | |
| 199 | >>> @LRUCache.decorator(100) |
| 200 | ... def fib(num): |
| 201 | ... if num in (1, 2): |
| 202 | ... return 1 |
| 203 | ... return fib(num - 1) + fib(num - 2) |
no outgoing calls
no test coverage detected