- Fixed bug in Loom's implementation of weight.
- Updated dependencies, including the new version of dorothy which unfortunately broke backwards compatibility with previous versions of dorothy by moving some functions into a new namespace.
- Fixed bug introduced in 0.8.0 that prevented one from removing an attribute whose key was something other than a keyword.
- In breadth-first search with no end node,
path-to
wasn't returning nil for invalid dest.
- Added
all-destinations
to IAllPathsFromSource protocol. - Added sliding puzzle example in test directory as eight.clj.
- :node-filter in breadth first search was filtering after nodes were reached, not before.
- shortest-path can now take a transition function of the form (fn [node] [{:dest successor1, ...} {:dest successor2, ...} ...])
- paths->graph converts the output from shortest-path and returns a graph
- speed improvements by converting all nested map access to specter library
- node-with-attrs wasn't safe for build-graph as claimed in doc string.
- Added
neighbors
function which returns a sequence of distinct successors and predecessors of a node. - Workaround for bug in Loom for bipartate algorithms
- Imported loom algorithms for bf-traverse, coloring?, greedy-coloring, degeneracy-ordering, maximal-cliques.
- Fixed bug with one of the arities of remove-attrs
- Added
node-with-attrs
andedge-with-attrs
to provide views of nodes/edges with full attribute map, for destructuring, or moving info from one graph to another. - Disallow Edge objects to all ubergraph constructors, and throw appropriate errors if tried. This forces users to use the proper protocols to access attribute information, or to use the new
node-with-attrs
oredge-with-attrs
functions.
- Fixed docstring in add-undirected-edges
- Fixed hash value for graph, which in some cases did not match equality semantics.
- Thanks to Andy Fingerhut: Removing a node didn't remove its attributes, so if you removed a node and added it back, the old attribute information would still be there.
- Thanks to Andy Fingerhut: Speed improvements to
predecessors
andsuccessors
- Thanks to Andy Fingerhut: Clearer documentation about data model and equality
- Thanks to Andy Fingerhut: Better escaping for more characters in graphviz
- Thanks to Szabó Krisztián: Namespaced keywords show namespace now in graphviz
- Bumped dependencies to latest versions of Clojure and potemkin
- Improved handling of Edge objects when passed to
add-directed-edges
andadd-undirected-edges
. - Disallow Edge objects passed to
add-edges
to avoid confusion.build-graph
has the most sophisticated handling for Edge objects and is the best function to use to "import" Edges from other graphs. Alternatively,add-directed-edges
oradd-undirected-edges
can extract a [src dest attribute-map] edge description from an Edge object and use that to create a new directed or undirected edge, respectively.
predecessors
potentially returned duplicates. Now callsdistinct
on output, matching the behavior ofsuccessors
.
- Fixed bug reported by Andy Fingerhut in least-cost-path-with-heuristic
- Added :dot file format option to viz-graph, to write out the file in GraphViz's dot format.
- Upgraded to work with Loom 1.0.1.
- Implemented
ubergraph?
predicate. - Added
ubergraph->edn
andedn->ubergraph
as a way to serialize and deserialize ubergraphs. - Added print-dup multimethod for serialization via print-dup.
viz-graph
can now take graph attributes in the opts map. (Thanks to masztal for this PR).
- Calling
nodes
on a graph now returns a seq, not a keySet.
- Fixed bug that caused a nil attribute map to appear when adding the same directed edge twice to a non-multidigraph (via add-directed-edges*), affecting viz-graph.
- Fixed bug that caused a nil attribute map to appear when adding the same directed edge twice to a non-multidigraph, affecting viz-graph.
- Fixed bug in find-edges with queries containing more than :src and :dest. Thanks to lomin for finding and providing the pull request for this bug.
- Fixed problem with `loop' edges that go from a node to itself.
- Clarified some doc strings, and added note to README that some algorithms require Java 8.
- Added
undirected-graph?
,allow-parallel-edges?
,ubergraph
- Improved equality semantics for undirected graphs so the order in which the src and dest are listed don't affect equality. (graph [1 2]) and (graph [2 1]) now compare as equal.
- Sped up equality testing
- Removed reflective call in
nodes
- Changed graph equality to treat attributes of nil to be the same as attributes of {}
- Changed doc string for
add-edges
- Fixed merging of attributes when parallel edges are added in a non-multi graph.
- Patch from emlyn so ubergraph runs on Clojure 1.8
- Patch from emlyn so viz works on nodes that are maps.
- Graph equality now respects node attributes. Graphs with different node attributes will not be considered equal.
- Added clojure.pprint as an explicit require, which helps with certain compilation scenarios.
- Fixed printing of attributes that are classes, records, or strings with special characters
- least-cost searches didn't work if nodes weren't comparable, e.g., maps
- Added add-nodes-with-attrs which takes [node attr-map] forms.
- Added support for [node attr-map] inits in build-graph and constructors.
- Added support for ^:node and ^:edge metadata in inits, in build-graph and constructors.
- Added add-attrs, remove-attrs, and set-attrs.
- Initial Release