Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This speeds up
single_linkage
by about two orders of magnitude by using direct array access infast_find
which Cython can compile into a pure C loop.I saw in the commit history that this was attempted before but abandoned due to unexplained crashes. The reason is that the current code is actually buggy and only works because python's wraparound indexing hides the problem. When using raw pointer access the bug leads to heap corruption and subsequent random crashes. A simple check to only label if we are not at the root already fixes this.
Also fixes #321 which should further improve overall performance.