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.
Adds backend support for dealing with both high-dimensional and low-dimensional neighbors at different points in the visualization. For example, when visualizing the differences between multiple 2D projections of the same data, we may want the sidebar to display high-dimensional neighbors, but for the comparison functions (color stripes, suggested selections) to operate on the low-dimensional neighbors.
In this implementation, we define two additional classes,
Neighbors
andNeighborSet
, which contain and handle serialization of nearest neighbors. We also add two methods onEmbedding
/EmbeddingSet
,get_ancestor_neighbors()
andget_recent_neighbors()
. Ancestor neighbors are the neighbors that are farthest back in the parent tree of an embedding, i.e. the neighbors from the highest-dimensional embedding. Recent neighbors are the closest neighbor set in the parent tree of an embedding, i.e. the neighbors that should be compared.Which neighbors are used as the ancestor and recent neighbors can be controlled by deciding where to call
compute_neighbors()
, which associates aNeighbors
object with a particular embedding. To make a certain level the target of comparison, simply clear the parent embeddings' neighbors by callingclear_upstream_neighbors()
.