(packed, s)
| 453 | return data[_lookup(packed, s)] |
| 454 | |
| 455 | def _lookup(packed, s): |
| 456 | stringpos = 0 |
| 457 | node_offset = 0 |
| 458 | skipped = 0 # keep track of number of final nodes that we skipped |
| 459 | false = False |
| 460 | while stringpos < len(s): |
| 461 | #print(f"{node_offset=} {stringpos=}") |
| 462 | _, final, edge_offset = decode_node(packed, node_offset) |
| 463 | prev_child_offset = edge_offset |
| 464 | edgeindex = 0 |
| 465 | while 1: |
| 466 | child_offset, last_edge, size, edgelabel_chars_offset = decode_edge(packed, edgeindex, prev_child_offset, edge_offset) |
| 467 | #print(f" {edge_offset=} {child_offset=} {last_edge=} {size=} {edgelabel_chars_offset=}") |
| 468 | edgeindex += 1 |
| 469 | prev_child_offset = child_offset |
| 470 | if _match_edge(packed, s, size, edgelabel_chars_offset, stringpos): |
| 471 | # match |
| 472 | if final: |
| 473 | skipped += 1 |
| 474 | stringpos += size |
| 475 | node_offset = child_offset |
| 476 | break |
| 477 | if last_edge: |
| 478 | raise KeyError |
| 479 | descendant_count, _, _ = decode_node(packed, child_offset) |
| 480 | skipped += descendant_count |
| 481 | edge_offset = edgelabel_chars_offset + size |
| 482 | _, final, _ = decode_node(packed, node_offset) |
| 483 | if final: |
| 484 | return skipped |
| 485 | raise KeyError |
| 486 | |
| 487 | def inverse_lookup(packed, inverse, x): |
| 488 | pos = inverse[x] |
no test coverage detected
searching dependent graphs…