(self, key, value, allow_increase=False)
| 175 | return node.value if node is not None else default |
| 176 | |
| 177 | def insert(self, key, value, allow_increase=False): |
| 178 | node = self._dict.get(key) |
| 179 | root = self._root |
| 180 | if node is not None: |
| 181 | if value < node.value: |
| 182 | node.value = value |
| 183 | if node is not root and value < node.parent.value: |
| 184 | self._cut(node) |
| 185 | self._root = self._link(root, node) |
| 186 | return True |
| 187 | elif allow_increase and value > node.value: |
| 188 | node.value = value |
| 189 | child = self._merge_children(node) |
| 190 | # Nonstandard step: Link the merged subtree with the root. See |
| 191 | # below for the standard step. |
| 192 | if child is not None: |
| 193 | self._root = self._link(self._root, child) |
| 194 | # Standard step: Perform a decrease followed by a pop as if the |
| 195 | # value were the smallest in the heap. Then insert the new |
| 196 | # value into the heap. |
| 197 | # if node is not root: |
| 198 | # self._cut(node) |
| 199 | # if child is not None: |
| 200 | # root = self._link(root, child) |
| 201 | # self._root = self._link(root, node) |
| 202 | # else: |
| 203 | # self._root = (self._link(node, child) |
| 204 | # if child is not None else node) |
| 205 | return False |
| 206 | else: |
| 207 | # Insert a new key. |
| 208 | node = self._Node(key, value) |
| 209 | self._dict[key] = node |
| 210 | self._root = self._link(root, node) if root is not None else node |
| 211 | return True |
| 212 | |
| 213 | def _link(self, root, other): |
| 214 | """Link two nodes, making the one with the smaller value the parent of |
nothing calls this directly
no test coverage detected