Open kris-brown opened 1 year ago
Example of the search tree graphviz output on a schema with Triangles, Edges, and Vertices (note the hover text). The vertices are labeled by the parts of the domain ACSet, and the edges indicate the assigned part in the codomain ACSet.
(TODO: Rebase and then tag Evan as a reviewer)
Does this PR follow the development guidelines? Following is a partial checklist:
Tests
test/runtests.jl
)Documentation
Other
This PR makes three improvements to homomorphism search:
The main one is that an optional
BacktrackingTree
data structure is added to theBacktrackingState
. Ifdebug_homomorphisms(...)
is called rather thanhomomorphisms(...)
, then a list of homomorphisms in addition to aBacktrackingTree
are returned as a pair. This can be viewed in graphviz (see below).find_mrv_elem
picks which C-Set part to branch on, attempting to minimize the branching factor. It does this by finding, for each part, how many valid assignments there are. Previously it just counted how many valid assignments, rather than remembering what these were - this is fixed by just usingfilter
rather thancount
. I would expect this to have a positive performance impact, but this hasn't been benchmarked.When a successful assignment is found, there is a bit of logic to extract an
ACSetTransformation
from theBacktrackingState
. This has now been factored into a functionget_hom
.