···11-22-* marks some incompatible change
33-44- o [WeakTopological] fixed incorrect use of generic hash tables
55- (#99, Tomáš Dacík)
66- o [Oper] fixed transitive_reduction (#91)
77- o fix incorrect uses of polymorphic equality (Steffen Smolka, Boris Yakobowski)
88- o [Coloring] fixed generation of OCamlDoc documentation
99- (contributed by Earnestly)
1010- * [Coloring] functions now fail if the graph is directed
1111- * [Coloring] now uses a single, global exception [NoColoring]
1212- o [Coloring] new function two_color to 2-color a graph (or fail)
1313- * [Fixpoint] Take initial labeling of nodes into account (Johannes Kloos)
1414-1515-version 1.8.8, October 17, 2017
1616--------------------------------
1717- o fixed installation (Virgile Prevosto, Jacques-Pascal Deplaix)
1818- o safe-string compatible (Jacques-Pascal Deplaix)
1919- * fixed method get_edge_layout of class abstract_model of DGraphModel.Make. The
2020- bug could have occured when there are several edges between two vertices.
2121- o [Traverse/Pack] added Dfs.fold and Dfs.fold_component (tail-recursive)
2222- (contributed by Guillaume Chelfi)
2323- * fixed implementation of Golberg-Tarjan maximal flow algorithm
2424- (contributed by Guyslain Naves)
2525- No more function min_capacity in the input interface.
2626- Renaming as follows: Flow.Goldberg -> Flow.Goldberg_Tarjan
2727- and Pack.goldberg -> Pack.goldberg_tarjan
2828- o new functors [WeakTopological] and [ChaoticIteration] to compute
2929- fixpoints with widening, following Bourdoncle's algorithms (contributed
3030- by Thibault Suzanne)
3131-3232-version 1.8.7, April 12, 2016
3333------------------------------
3434- o fixed examples/demo.ml so that it also compiles with an installed OCamlGraph
3535- o [Components] fixed stack overflow with [scc] (patch by Albin Coquereau)
3636- o [Dominator] fixed stack overflow (patch by Albin Coquereau)
3737- o new functor [Path.Johnson] to compute all pairs of shortest paths
3838- using Johnson's algorithm (contributed by Mário Pereira)
3939- o fixed configuration on Windows (patch by Martin R. Neuhäußer)
4040- o new functor [Components.Undirected] to compute connected components
4141- o Graphviz: fixed printing of attribute BgcolorWithTransparency
4242- * Prim, Nonnegative: function weight now has the more general type "edge -> t"
4343- (to be consistent with Path)
4444- o new module type Sig.WEIGHT (used in Path, Prim, and Nonnegative)
4545- o Fixpoint: do not catch Not_found raised by a user-provided function.
4646- o Adding folds to BFS.
4747-4848-version 1.8.6, January 23, 2015
4949--------------------------------
5050- * Dominator: new functor [Make_graph] with may use graph building operations,
5151- while the old functor [Make] now only requires a read-only graph.
5252- Function [compute_all] and [compute_dom_graph] are now only defined in the
5353- new [Make_graph] functor.
5454- o Graphviz: support for additional polygonal-shapes
5555- o New module Clique (contributed by Giselle Reis)
5656- o Avoid ocamldoc error with OCaml 4.02
5757- * Path: function weight now has the more general type "edge -> t"
5858- (contributed by Steffen Smolka)
5959- update your code by turning "weight l" into "weight (G.E.label e)"
6060- o installation: "make install-findlib" now uses DESTDIR when defined
6161- o Traverse: documentation is clarified: providing iterators over the roots of
6262- the graph is enough.
6363- o Imperative concreate (di)graph: fix bug of functions add_edge* of imperative
6464- concrete (di)graphs which appears when the added edge [e] was already in the
6565- graph [g] and one of the vertices of [e] is equal to another vertex of [g]
6666- (when using the user-defined equality [G.V.equal]), but not physically equal
6767- to it. This bug only occurs with OCaml version >= 4.0.
6868- o functions in modules Components, Dominator, Flow, Topological and Traverse
6969- now create smaller auxiliary hash tables
7070- o Graphviz: add the attribute `HtmlLabel to specify html strings.
7171-7272-version 1.8.5, March 4, 2014
7373------------------------------
7474- o Graphviz: reverted to the old API where edges and vertices are
7575- given a single style attribute; but such attributes are collected
7676- and output in the DOT file into a list (thus allowing multiple style
7777- attributes)
7878- o fixed issue in ./configure with ocamlfind on Win32.
7979- o fixed compilation when laglgnomecanvas is missing (bug introduced in 1.8.4).
8080- o fixed more issues with 'make -j'.
8181-8282-version 1.8.4, February 4, 2014
8383--------------------------------
8484- o fixed [Graphml] printer (contributed by Johannes Schauer)
8585- o Components: the components of [scc_list] are provided in the same order than
8686- the ones of [scc_array].
8787- o fix compilation with 'make -j'
8888- o Graphviz: handle attribute penwidth on edges and vertices
8989- o also install graph.o and graph.cmxs
9090- o fixed installation with ocamlfind (thanks to Virgile Prevosto)
9191- o new functions [gnp] and [gnp_labeled] in module [Rand] to generate random
9292- graphs using the G(n,p) model (contributed by Thomas Aubry)
9393- o Prim's algorithm (in module [Prim]; not exported in [Pack])
9494- (contributed by Thomas Aubry)
9595- o Graphviz: support for nested subgraphs. (Backward-incompatible change:
9696- add 'sg_parent = None' to obtain subgraphs whose parents are the main graph)
9797- o Graphviz: edges and vertices can now receive multiple styles.
9898- (Backward-incompatible change: constructors `Style now require a list as
9999- argument)
100100- o Graphviz: new vertex style 'rounded'
101101- o Merge: fixed bug with vertices with no incoming nor outcoming edge.
102102- o fixed compilation issue with OCaml 3.12.1
103103-104104-version 1.8.3, April 17, 2013
105105------------------------------
106106- o new module Merge implementing several different merges of vertices and
107107- edges into a graph (contributed by Emmanuel Haucourt)
108108- o fixed DOT parser (contributed by Alex Reece)
109109- o Topological: fixed bug in presence of disjoint cycles; new implementation
110110- o new module [Graphml] to export graphs into the graphml format
111111- (contributed by Pietro Abate)
112112- o Builder.S now contains functions remove_*.
113113- o modified Fixpoint module so that it also works with unlabeled
114114- graphs, break backward compatibility yet (contributed by Markus W. Weissmann)
115115- o support of lablgtk2 installed with findlib (contributed by B. Monate)
116116- o new module [Dominator] to compute dominators
117117- (contributed by David Brumley and Ivan Jager)
118118-119119-version 1.8.2, May 12, 2012
120120----------------------------
121121- o new module [Path.BellmanFord] implementing Bellman-Ford algorithm
122122- (contributed by Yuto Takei)
123123- o new module Contraction implementing edge contraction
124124- (contributed by Markus W. Weissmann)
125125- o Gmap: new function [filter_map] (contributed by Markus W. Weissmann)
126126- o Topological: fix bug when a cycle depends on another cycle. That breaks
127127- compatibility: the input graph must implement Sig.COMPARABLE instead of
128128- Sig.HASHABLE
129129- o new module Topological.Make_stable to iterate over a graph in a **stable**
130130- topological order. Stable means that the provided ordering only depends on
131131- the graph topology and on the user's vertices ordering.
132132- o new module Leaderlist to compute the leader list algorithm (see the Dragon)
133133- (contributed by Markus W. Weissmann <markus.weissmann@in.tum.de>)
134134-135135-version 1.8.1, October 17, 2011
136136--------------------------------
137137- o module Gmap now has a signature for edges (E_SRC) compatible with
138138- Sig, so that it is easier to apply functor Gmap.Edge
139139- (contributed by Markus W. Weissmann <markus.weissmann@in.tum.de>)
140140- o new module Fixpoint to compute fixpoints using the work-list
141141- algorithm, e.g. for data flow analysis
142142- (contributed by Markus W. Weissmann <markus.weissmann@in.tum.de>)
143143-144144-version 1.8, October 4, 2011
145145-----------------------------
146146- o removed ocamlyacc shift/reduce conflict in dot_parser.mly
147147- (patch contributed by Till Varoquaux)
148148- o Dgraph: Correct height and width-related problems with text
149149- o DGraph: many bug fixes. Patch by Benjamin Monate
150150- o Sig.G: new function [find_all_edges] for each graph implementation
151151- o Oper: fixed bug with function [intersect]: now use G.E.compare instead of (=)
152152- o fixed "make install-findlib"
153153-154154-version 1.7, February 23, 2011
155155-------------------------------
156156- o Makefile: fixed bug when installing ocamlgraph with ocamlfind
157157- o DGraph: fixed bug with colors on some windows manager
158158- o Configure: fixed issue with automatic detection of extension under
159159- Windows/Mingw
160160-161161-version 1.6, December 13, 2010
162162-------------------------------
163163- o DGraph: new viewer mode (called `tree') which focus on a subset part of the
164164- graph centered on a given node
165165- o Graphviz: fixed bug with attribute `Constraint (was `Constraints) (patch by
166166- Boris Yakobowski)
167167- o DGraph: fixed font size issue when zooming
168168- o DGraph: now interpret text anchors and espaced sequences correctly
169169- o DGraph: offer possibility to disable the default callbacks on nodes
170170- o 'make -j' works again
171171- o new implementation Persistent.Digraph.ConcreteBidirectionalLabeled
172172- o new implementation Persistent.Digraph.ConcreteBidirectional
173173- o Makefile: bug fixed when ocamlc (resp. ocamlopt) and ocamlc.opt
174174- (resp. ocamlopt.opt) are unconsistent
175175-176176-version 1.5, April 29, 2010
177177----------------------------
178178- o Makefile: bug fixed when installing ocamlgraph with ocamlfind
179179- (patch by Virgile Prevosto)
180180- o DGraph: new method set_zoom_padding in DgraphView.view
181181- o Traverse.Dfs.has_cycle: can now be used on undirected graphs as well,
182182- and is now tail recursive
183183- o DGraph: handle dotted ellipse
184184-185185-version 1.4, March 24, 2010
186186----------------------------
187187- o new function [clear] for imperative graphs
188188- o new implementation Imperative.Digraph.ConcreteBidirectionalLabeled
189189- (contribution of Jaap Boender)
190190- o Dgraph displays graphs faster
191191- o DGraph: several bugs fixed
192192- o DGraph: several API changes
193193- (may break compatibility with existing development)
194194-195195-version 1.3, October 2, 2009
196196-----------------------------
197197- o Oper.mirror: undirected graphs are not copied anymore
198198- o Oper.mirror: fixed bug (isolated vertices were lost)
199199- o Graphviz: new signature GraphWithDotAttrs
200200- o Improvements of Dgraph
201201- o Configure: better test for detecting lablgtk
202202- o OcamlGraph is now installed by default in `ocamlc -where`/ocamlgraph
203203- o Viewgraph is now packed in a single module Viewgraph (break compatibility
204204- with previous version)
205205- o Dgraph is now packed in a single module Dgraph (break compatibility with
206206- previous version)
207207- o Makefile: fixed bug when the installation directory of binaries does not
208208- exist
209209- o Makefile: fixed bug of ocamldep under Windows
210210-211211-version 1.2, August 31, 2009
212212-----------------------------
213213- o experimental: new GTK-based graph viewer called Dgraph
214214- (viewGraph is now deprecated)
215215- o added Delaunay.iter_triangles (not of use in Ocamlgraph, actually)
216216-217217-version 1.1, June 23, 2009
218218---------------------------
219219- o added constraint "type E.label = unit" to unlabeled graph data structure
220220- o viewGraph: new module viewGraph_utils; fixed compilation (gtkInit
221221- was missing; patch by Mehdi Dogguy)
222222- o configure: fixed bug under Cygwin (patch by Julien Bernet)
223223- o configure: look for lablgnomecanvas.cmxa when compiling in native code
224224- o Makefile: fixed make install-findlib when lablgtk and/or
225225- lablgnomecanvas not installed (patch by Peter Hawkins)
226226-227227-version 1.0, October 14, 2008
228228------------------------------
229229- o license: LGPL updated to version 2.1
230230- o ocamlgraph now requires ocaml 3.10 or higher
231231- o experimental: GTK-based graph viewer based on dot
232232- (contribution of Anne Pacalet)
233233- o Makefile:
234234- - fixed bug when lablgnomecanvas is not installed
235235- - fixed bug when ocamlfind is installed
236236- - patch to the build system for a DESTDIR (patch by Igor Galic)
237237- - "make -j" compliant
238238- o new function Blocks.after_unserialization in order to be able to safely
239239- serialize abstract vertices (see the FAQ)
240240- o Dot:
241241- - fixed bug in the parsing of attributes
242242- - fixed bug in the parsing of subgraphs (patch by Anne Pacalet)
243243- o Oper: fixed bug in intersect
244244- o Path: improved efficiency of Dijkstra
245245- o Topological:
246246- - fixed bug in Make.{iter,fold}
247247- - folding is now tail-recursive (patch by Michael Furr)
248248-249249-version 0.99c, April 3rd, 2008
250250-------------------------------
251251- o replicated a bug fix of Bitv (could not affect Matrix, though)
252252- o fixed DFS traversal in Traverse.Dfs.{prefix,prefix_component,iterator}
253253-254254-version 0.99b, December 18th, 2007
255255-----------------------------------
256256- o fixed link bug with ocaml 3.09
257257- (see http://caml.inria.fr/mantis/view.php?id=4124)
258258-259259-version 0.99a, November 21st, 2007
260260----------------------------------
261261- o fixed bug in Makefile when lablgtk2 is not installed
262262- o Sig.I.create and Sig_pack.create are now of type ?size:int -> unit -> t
263263- (instead of unit -> t) to indicate an initial guess on the graph size
264264-265265-version 0.99, June 27th, 2007
266266------------------------------
267267- o experimental: GTK-based graph editor based on hyperbolic geometry;
268268- to build it and test it, cd to editor/ and type make
269269- o [Components.Make] functor: function [scc] as a new profile and a
270270- more precise specification. New function [scc_array].
271271- o fixed configure to set ocaml's standard library using "ocamlc -where"
272272- o new module Dot to parse files in Graphviz's DOT format
273273- o slight change in the license (no more clause 6 of the LGPL; see LICENSE)
274274- o new module Strat implementing simple game strategies
275275- o Graphviz: little refactoring and improved documentation
276276-277277-version 0.98, Sep 27th, 2006
278278-----------------------------
279279- o rename Sig.IA to Sig.IM
280280- o add subgraph support in Graphviz
281281- (breaks ascendent compatibility if you use Graphviz: by default add
282282- let get_subgraph _ = None
283283- in the argument of Graphviz.Dot and Graphviz.Neato)
284284-285285-version 0.97, July 20th, 2006
286286------------------------------
287287- o fixed compilation under Windows/Cygwin (contributed by Denis Berthod)
288288- o fixed bug with escaped string in Graphviz
289289-290290-version 0.96, May 2nd, 2006
291291----------------------------
292292- o new demo program: sudoku.ml (solving the Sudoku using graph coloring)
293293- o new module Coloring for (rather brute force) graph coloring
294294- o new implementation Imperative.Digraph.ConcreteBidirectional
295295- that maintains the set of ingoing edges for each node, thus improving the
296296- efficiency of functions such as iter_pred, pred, in_degree, etc.
297297- (contributed by Ted Kremenek)
298298-299299-version 0.95, November 2nd, 2005
300300---------------------------------
301301- o compatibility with ocaml 3.09
302302- o new module Path.Check to check for paths
303303-304304-version 0.94, July 6th, 2005
305305-----------------------------
306306- o new module Gml to parse and print graphs in GML file format
307307- (see http://www.infosun.fmi.uni-passau.de/Graphlet/GML)
308308- corresponding functions parse_gml_file and print_gml_file in Pack
309309- o added display_with_gv in Pack
310310- o improved implementation of Unionfind (patch by Marc Lasson)
311311-312312-version 0.93, March 31st, 2005
313313-------------------------------
314314- o fixed bug in Rand (integer overflow causing Invalid_argument "random");
315315- improved code in Rand
316316- o bug fixed in the META file
317317- o add find_edge in Sig.G (and so in all graph implementations)
318318-319319-version 0.92, January 18th, 2005
320320---------------------------------
321321- o fixed escaped labels in Graphviz output (patch by Boris Yakobowski)
322322- o new Graphviz option OrderingOut (patch by Boris Yakobowski)
323323- o fixed sharing bugs in Oper (patch by Boris Yakobowski)
324324- o fixed bug in nb_edges for undirected graphs
325325- o improvement of iterators of undirected concrete graphs
326326-327327-version 0.91, December 16th, 2004
328328----------------------------------
329329- o more precise specifications of remove_edge and shortest_path.
330330- o bug fixed in mem_edge_e of labelled graphs
331331- o generation of random graphs improved
332332- o add Rand.Make and Rand.Planar.Make (generic functors)
333333- o add signatures Persistent.S and Imperative.S
334334-335335-version 0.90, November 30th, 2004
336336----------------------------------
337337- o graph.cma graph.cmxa
338338- o version.ml and META files are now writable
339339- o add interfaces Sig.VERTEX and Sig.EDGE
340340- o "sig.ml" and "sig_pack.ml" removed; ocamlgraph now requires ocaml 3.08.0
341341- o improvement of Minsep
342342- o add Components.scc_list
343343- o Oper.Neighbourhood replaces Neighborhood
344344- o Gmap replaces Copy
345345- o add types Sig_pack.vertex and Sig_pack.edge
346346- o fixed bug in Ford-Fulkerson: G.V.equal instead of = in two asserts
347347-348348-version 0.81, July 13th, 2004
349349------------------------------
350350- o compatibility with ocaml 3.08
351351- o Oper.Choose.choose_edge: choose an edge in a graph
352352- o add types Sig.G.edge and Sig.G.vertex resp. equal to Sig.G.V.t and Sig.G.E.t
353353- o fixed typos in invalid_arg arguments (in Bitv)
354354-355355-version 0.80, June 28th, 2004
356356------------------------------
357357- o major contribution by Matthieu Sozeau and Pierre-Loïc Garoche.
358358- New modules are:
359359- - Md: Minimum Degree algorithm
360360- - Cliquetree: the clique tree of a graph
361361- - Mcs_m: Maximal Cardinality Search (MCS-M) algorithm
362362- - Minsep: Minimal separators of a graph
363363- - Neighborhood: compute the neighborhood of a vertex/some vertices
364364- - Oper.Difference: subgraphs induced by the elimination of some vertices
365365- - Oper.Choose: choose a vertex in a graph
366366- - Copy: graphs copying
367367- - Util.DataV: create a vertex type with data attached to it
368368- o out_degree: raises Invalid_argument if v not in g (instead of Not_found)
369369- o Pack.Graph: golberg/ford_fulkerson fail ("not a directed graph")
370370-371371-version 0.70, Feb 27th, 2004
372372-----------------------------
373373- o Makefile.in: dependences ("make -j" works)
374374- o union and intersection (see Oper.S.union and Oper.S.intersection)
375375- o Golberg/Ford_fulkerson algorithms in a single module Flow
376376- o step-by-step iterators in Traverse.{Dfs,Bfs}
377377- o Ford_fulkerson: maxflow now returns a flow function over edges
378378-379379-version 0.60, Feb 18th, 2004
380380-----------------------------
381381- o fixed bug in Ford-Fulkerson
382382- o random planar graphs (see Rand.Planar)
383383- o Delaunay triangulation (see Delaunay)
384384- o implementations with adjacency matrices (see Imperative.Matrix)
385385- o operations on predecessors for undirected graphs optimized
386386- o Traverse.Dfs.{prefix,prefix_component} optimized (now tail recursive)
387387-388388-version 0.50, Feb 4th, 2004
389389----------------------------
390390- o first release
391391-392392-Local Variables:
393393-mode: text
394394-End:
+392
CHANGES.md
···11+22+# 2.0.0
33+44+ - [WeakTopological] fixed incorrect use of generic hash tables
55+ (#99, Tomáš Dacík)
66+ - [Oper] fixed transitive_reduction (#91)
77+ - fix incorrect uses of polymorphic equality (Steffen Smolka, Boris Yakobowski)
88+ - [Coloring] fixed generation of OCamlDoc documentation
99+ (contributed by Earnestly)
1010+ - * [Coloring] functions now fail if the graph is directed
1111+ - * [Coloring] now uses a single, global exception [NoColoring]
1212+ - [Coloring] new function two_color to 2-color a graph (or fail)
1313+ - * [Fixpoint] Take initial labeling of nodes into account (Johannes Kloos)
1414+1515+# 1.8.8, October 17, 2017
1616+1717+ - fixed installation (Virgile Prevosto, Jacques-Pascal Deplaix)
1818+ - safe-string compatible (Jacques-Pascal Deplaix)
1919+ - * fixed method get_edge_layout of class abstract_model of DGraphModel.Make. The
2020+ bug could have occured when there are several edges between two vertices.
2121+ - [Traverse/Pack] added Dfs.fold and Dfs.fold_component (tail-recursive)
2222+ (contributed by Guillaume Chelfi)
2323+ - * fixed implementation of Golberg-Tarjan maximal flow algorithm
2424+ (contributed by Guyslain Naves) No more function min_capacity in
2525+ the input interface. Renaming as follows: Flow.Goldberg ->
2626+ Flow.Goldberg_Tarjan and Pack.goldberg -> Pack.goldberg_tarjan
2727+ - new functors [WeakTopological] and [ChaoticIteration] to compute
2828+ fixpoints with widening, following Bourdoncle's algorithms (contributed
2929+ by Thibault Suzanne)
3030+3131+# 1.8.7, April 12, 2016
3232+3333+ - fixed examples/demo.ml so that it also compiles with an installed OCamlGraph
3434+ - [Components] fixed stack overflow with [scc] (patch by Albin Coquereau)
3535+ - [Dominator] fixed stack overflow (patch by Albin Coquereau)
3636+ - new functor [Path.Johnson] to compute all pairs of shortest paths
3737+ using Johnson's algorithm (contributed by Mário Pereira)
3838+ - fixed configuration on Windows (patch by Martin R. Neuhäußer)
3939+ - new functor [Components.Undirected] to compute connected components
4040+ - Graphviz: fixed printing of attribute BgcolorWithTransparency
4141+ - * Prim, Nonnegative: function weight now has the more general type "edge -> t"
4242+ (to be consistent with Path)
4343+ - new module type Sig.WEIGHT (used in Path, Prim, and Nonnegative)
4444+ - Fixpoint: do not catch Not_found raised by a user-provided function.
4545+ - Adding folds to BFS.
4646+4747+# 1.8.6, January 23, 2015
4848+4949+ - * Dominator: new functor [Make_graph] with may use graph building operations,
5050+ while the old functor [Make] now only requires a read-only graph.
5151+ Function [compute_all] and [compute_dom_graph] are now only defined in the
5252+ new [Make_graph] functor.
5353+ - Graphviz: support for additional polygonal-shapes
5454+ - New module Clique (contributed by Giselle Reis)
5555+ - Avoid ocamldoc error with OCaml 4.02
5656+ - * Path: function weight now has the more general type "edge -> t"
5757+ (contributed by Steffen Smolka)
5858+ update your code by turning "weight l" into "weight (G.E.label e)"
5959+ - installation: "make install-findlib" now uses DESTDIR when defined
6060+ - Traverse: documentation is clarified: providing iterators over the roots of
6161+ the graph is enough.
6262+ - Imperative concreate (di)graph: fix bug of functions add_edge* of
6363+ imperative concrete (di)graphs which appears when the added edge
6464+ [e] was already in the graph [g] and one of the vertices of [e] is
6565+ equal to another vertex of [g] (when using the user-defined
6666+ equality [G.V.equal]), but not physically equal to it. This bug
6767+ only occurs with OCaml version >= 4.0.
6868+ - functions in modules Components, Dominator, Flow, Topological and
6969+ Traverse now create smaller auxiliary hash tables
7070+ - Graphviz: add the attribute `HtmlLabel to specify html strings.
7171+7272+# 1.8.5, March 4, 2014
7373+7474+ - Graphviz: reverted to the old API where edges and vertices are
7575+ given a single style attribute; but such attributes are collected
7676+ and output in the DOT file into a list (thus allowing multiple
7777+ style attributes)
7878+ - fixed issue in ./configure with ocamlfind on Win32.
7979+ - fixed compilation when laglgnomecanvas is missing (bug introduced in 1.8.4).
8080+ - fixed more issues with 'make -j'.
8181+8282+# version 1.8.4, February 4, 2014
8383+8484+ - fixed [Graphml] printer (contributed by Johannes Schauer)
8585+ - Components: the components of [scc_list] are provided in the same order than
8686+ the ones of [scc_array].
8787+ - fix compilation with 'make -j'
8888+ - Graphviz: handle attribute penwidth on edges and vertices
8989+ - also install graph.o and graph.cmxs
9090+ - fixed installation with ocamlfind (thanks to Virgile Prevosto)
9191+ - new functions [gnp] and [gnp_labeled] in module [Rand] to generate random
9292+ graphs using the G(n,p) model (contributed by Thomas Aubry)
9393+ - Prim's algorithm (in module [Prim]; not exported in [Pack])
9494+ (contributed by Thomas Aubry)
9595+ - Graphviz: support for nested subgraphs. (Backward-incompatible change:
9696+ add 'sg_parent = None' to obtain subgraphs whose parents are the main graph)
9797+ - Graphviz: edges and vertices can now receive multiple styles.
9898+ (Backward-incompatible change: constructors `Style now require a
9999+ list as argument)
100100+ - Graphviz: new vertex style 'rounded'
101101+ - Merge: fixed bug with vertices with no incoming nor outcoming edge.
102102+ - fixed compilation issue with OCaml 3.12.1
103103+104104+# 1.8.3, April 17, 2013
105105+106106+ - new module Merge implementing several different merges of vertices and
107107+ edges into a graph (contributed by Emmanuel Haucourt)
108108+ - fixed DOT parser (contributed by Alex Reece)
109109+ - Topological: fixed bug in presence of disjoint cycles; new implementation
110110+ - new module [Graphml] to export graphs into the graphml format
111111+ (contributed by Pietro Abate)
112112+ - Builder.S now contains functions remove_*.
113113+ - modified Fixpoint module so that it also works with unlabeled
114114+ graphs, break backward compatibility yet (contributed by Markus W. Weissmann)
115115+ - support of lablgtk2 installed with findlib (contributed by B. Monate)
116116+ - new module [Dominator] to compute dominators
117117+ (contributed by David Brumley and Ivan Jager)
118118+119119+# 1.8.2, May 12, 2012
120120+121121+ - new module [Path.BellmanFord] implementing Bellman-Ford algorithm
122122+ (contributed by Yuto Takei)
123123+ - new module Contraction implementing edge contraction
124124+ (contributed by Markus W. Weissmann)
125125+ - Gmap: new function [filter_map] (contributed by Markus W. Weissmann)
126126+ - Topological: fix bug when a cycle depends on another cycle. That breaks
127127+ compatibility: the input graph must implement Sig.COMPARABLE instead of
128128+ Sig.HASHABLE
129129+ - new module Topological.Make_stable to iterate over a graph in a **stable**
130130+ topological order. Stable means that the provided ordering only depends on
131131+ the graph topology and on the user's vertices ordering.
132132+ - new module Leaderlist to compute the leader list algorithm (see the Dragon)
133133+ (contributed by Markus W. Weissmann <markus.weissmann@in.tum.de>)
134134+135135+# 1.8.1, October 17, 2011
136136+137137+ - module Gmap now has a signature for edges (E_SRC) compatible with
138138+ Sig, so that it is easier to apply functor Gmap.Edge
139139+ (contributed by Markus W. Weissmann <markus.weissmann@in.tum.de>)
140140+ - new module Fixpoint to compute fixpoints using the work-list
141141+ algorithm, e.g. for data flow analysis
142142+ (contributed by Markus W. Weissmann <markus.weissmann@in.tum.de>)
143143+144144+# 1.8, October 4, 2011
145145+146146+ - removed ocamlyacc shift/reduce conflict in dot_parser.mly
147147+ (patch contributed by Till Varoquaux)
148148+ - Dgraph: Correct height and width-related problems with text
149149+ - DGraph: many bug fixes. Patch by Benjamin Monate
150150+ - Sig.G: new function [find_all_edges] for each graph implementation
151151+ - Oper: fixed bug with function [intersect]: now use G.E.compare instead of (=)
152152+ - fixed "make install-findlib"
153153+154154+# 1.7, February 23, 2011
155155+156156+ - Makefile: fixed bug when installing ocamlgraph with ocamlfind
157157+ - DGraph: fixed bug with colors on some windows manager
158158+ - Configure: fixed issue with automatic detection of extension under
159159+ Windows/Mingw
160160+161161+# 1.6, December 13, 2010
162162+163163+ - DGraph: new viewer mode (called `tree') which focus on a subset part of the
164164+ graph centered on a given node
165165+ - Graphviz: fixed bug with attribute `Constraint (was `Constraints) (patch by
166166+ Boris Yakobowski)
167167+ - DGraph: fixed font size issue when zooming
168168+ - DGraph: now interpret text anchors and espaced sequences correctly
169169+ - DGraph: offer possibility to disable the default callbacks on nodes
170170+ - 'make -j' works again
171171+ - new implementation Persistent.Digraph.ConcreteBidirectionalLabeled
172172+ - new implementation Persistent.Digraph.ConcreteBidirectional
173173+ - Makefile: bug fixed when ocamlc (resp. ocamlopt) and ocamlc.opt
174174+ (resp. ocamlopt.opt) are unconsistent
175175+176176+# 1.5, April 29, 2010
177177+178178+ - Makefile: bug fixed when installing ocamlgraph with ocamlfind
179179+ (patch by Virgile Prevosto)
180180+ - DGraph: new method set_zoom_padding in DgraphView.view
181181+ - Traverse.Dfs.has_cycle: can now be used on undirected graphs as well,
182182+ and is now tail recursive
183183+ - DGraph: handle dotted ellipse
184184+185185+# 1.4, March 24, 2010
186186+187187+ - new function [clear] for imperative graphs
188188+ - new implementation Imperative.Digraph.ConcreteBidirectionalLabeled
189189+ (contribution of Jaap Boender)
190190+ - Dgraph displays graphs faster
191191+ - DGraph: several bugs fixed
192192+ - DGraph: several API changes
193193+ (may break compatibility with existing development)
194194+195195+# 1.3, October 2, 2009
196196+197197+ - Oper.mirror: undirected graphs are not copied anymore
198198+ - Oper.mirror: fixed bug (isolated vertices were lost)
199199+ - Graphviz: new signature GraphWithDotAttrs
200200+ - Improvements of Dgraph
201201+ - Configure: better test for detecting lablgtk
202202+ - OcamlGraph is now installed by default in `ocamlc -where`/ocamlgraph
203203+ - Viewgraph is now packed in a single module Viewgraph (break compatibility
204204+ with previous version)
205205+ - Dgraph is now packed in a single module Dgraph (break compatibility with
206206+ previous version)
207207+ - Makefile: fixed bug when the installation directory of binaries does not
208208+ exist
209209+ - Makefile: fixed bug of ocamldep under Windows
210210+211211+# 1.2, August 31, 2009
212212+213213+ - experimental: new GTK-based graph viewer called Dgraph
214214+ (viewGraph is now deprecated)
215215+ - added Delaunay.iter_triangles (not of use in Ocamlgraph, actually)
216216+217217+# 1.1, June 23, 2009
218218+219219+ - added constraint "type E.label = unit" to unlabeled graph data structure
220220+ - viewGraph: new module viewGraph_utils; fixed compilation (gtkInit
221221+ was missing; patch by Mehdi Dogguy)
222222+ - configure: fixed bug under Cygwin (patch by Julien Bernet)
223223+ - configure: look for lablgnomecanvas.cmxa when compiling in native code
224224+ - Makefile: fixed make install-findlib when lablgtk and/or
225225+ lablgnomecanvas not installed (patch by Peter Hawkins)
226226+227227+# 1.0, October 14, 2008
228228+229229+ - license: LGPL updated to version 2.1
230230+ - ocamlgraph now requires ocaml 3.10 or higher
231231+ - experimental: GTK-based graph viewer based on dot
232232+ (contribution of Anne Pacalet)
233233+ - Makefile:
234234+ - fixed bug when lablgnomecanvas is not installed
235235+ - fixed bug when ocamlfind is installed
236236+ - patch to the build system for a DESTDIR (patch by Igor Galic)
237237+ - "make -j" compliant
238238+ - new function Blocks.after_unserialization in order to be able to safely
239239+ serialize abstract vertices (see the FAQ)
240240+ - Dot:
241241+ - fixed bug in the parsing of attributes
242242+ - fixed bug in the parsing of subgraphs (patch by Anne Pacalet)
243243+ - Oper: fixed bug in intersect
244244+ - Path: improved efficiency of Dijkstra
245245+ - Topological:
246246+ - fixed bug in Make.{iter,fold}
247247+ - folding is now tail-recursive (patch by Michael Furr)
248248+249249+# 0.99c, April 3rd, 2008
250250+251251+ - replicated a bug fix of Bitv (could not affect Matrix, though)
252252+ - fixed DFS traversal in Traverse.Dfs.{prefix,prefix_component,iterator}
253253+254254+# 0.99b, December 18th, 2007
255255+256256+ - fixed link bug with ocaml 3.09
257257+ (see http://caml.inria.fr/mantis/view.php?id=4124)
258258+259259+# 0.99a, November 21st, 2007
260260+261261+ - fixed bug in Makefile when lablgtk2 is not installed
262262+ - Sig.I.create and Sig_pack.create are now of type ?size:int -> unit -> t
263263+ (instead of unit -> t) to indicate an initial guess on the graph size
264264+265265+# 0.99, June 27th, 2007
266266+267267+ - experimental: GTK-based graph editor based on hyperbolic geometry;
268268+ to build it and test it, cd to editor/ and type make
269269+ - [Components.Make] functor: function [scc] as a new profile and a
270270+ more precise specification. New function [scc_array].
271271+ - fixed configure to set ocaml's standard library using "ocamlc -where"
272272+ - new module Dot to parse files in Graphviz's DOT format
273273+ - slight change in the license (no more clause 6 of the LGPL; see LICENSE)
274274+ - new module Strat implementing simple game strategies
275275+ - Graphviz: little refactoring and improved documentation
276276+277277+# 0.98, Sep 27th, 2006
278278+279279+ - rename Sig.IA to Sig.IM
280280+ - add subgraph support in Graphviz
281281+ (breaks ascendent compatibility if you use Graphviz: by default add
282282+ let get_subgraph _ = None
283283+ in the argument of Graphviz.Dot and Graphviz.Neato)
284284+285285+# 0.97, July 20th, 2006
286286+287287+ - fixed compilation under Windows/Cygwin (contributed by Denis Berthod)
288288+ - fixed bug with escaped string in Graphviz
289289+290290+# 0.96, May 2nd, 2006
291291+292292+ - new demo program: sudoku.ml (solving the Sudoku using graph coloring)
293293+ - new module Coloring for (rather brute force) graph coloring
294294+ - new implementation Imperative.Digraph.ConcreteBidirectional
295295+ that maintains the set of ingoing edges for each node, thus improving the
296296+ efficiency of functions such as iter_pred, pred, in_degree, etc.
297297+ (contributed by Ted Kremenek)
298298+299299+# 0.95, November 2nd, 2005
300300+301301+ - compatibility with ocaml 3.09
302302+ - new module Path.Check to check for paths
303303+304304+# 0.94, July 6th, 2005
305305+306306+ - new module Gml to parse and print graphs in GML file format
307307+ (see http://www.infosun.fmi.uni-passau.de/Graphlet/GML)
308308+ corresponding functions parse_gml_file and print_gml_file in Pack
309309+ - added display_with_gv in Pack
310310+ - improved implementation of Unionfind (patch by Marc Lasson)
311311+312312+# 0.93, March 31st, 2005
313313+314314+ - fixed bug in Rand (integer overflow causing Invalid_argument "random");
315315+ improved code in Rand
316316+ - bug fixed in the META file
317317+ - add find_edge in Sig.G (and so in all graph implementations)
318318+319319+# 0.92, January 18th, 2005
320320+321321+ - fixed escaped labels in Graphviz output (patch by Boris Yakobowski)
322322+ - new Graphviz option OrderingOut (patch by Boris Yakobowski)
323323+ - fixed sharing bugs in Oper (patch by Boris Yakobowski)
324324+ - fixed bug in nb_edges for undirected graphs
325325+ - improvement of iterators of undirected concrete graphs
326326+327327+# 0.91, December 16th, 2004
328328+329329+ - more precise specifications of remove_edge and shortest_path.
330330+ - bug fixed in mem_edge_e of labelled graphs
331331+ - generation of random graphs improved
332332+ - add Rand.Make and Rand.Planar.Make (generic functors)
333333+ - add signatures Persistent.S and Imperative.S
334334+335335+# 0.90, November 30th, 2004
336336+337337+ - graph.cma graph.cmxa
338338+ - version.ml and META files are now writable
339339+ - add interfaces Sig.VERTEX and Sig.EDGE
340340+ - "sig.ml" and "sig_pack.ml" removed; ocamlgraph now requires ocaml 3.08.0
341341+ - improvement of Minsep
342342+ - add Components.scc_list
343343+ - Oper.Neighbourhood replaces Neighborhood
344344+ - Gmap replaces Copy
345345+ - add types Sig_pack.vertex and Sig_pack.edge
346346+ - fixed bug in Ford-Fulkerson: G.V.equal instead of = in two asserts
347347+348348+# 0.81, July 13th, 2004
349349+350350+ - compatibility with ocaml 3.08
351351+ - Oper.Choose.choose_edge: choose an edge in a graph
352352+ - add types Sig.G.edge and Sig.G.vertex resp. equal to Sig.G.V.t and Sig.G.E.t
353353+ - fixed typos in invalid_arg arguments (in Bitv)
354354+355355+# 0.80, June 28th, 2004
356356+357357+ - major contribution by Matthieu Sozeau and Pierre-Loïc Garoche.
358358+ New modules are:
359359+ - Md: Minimum Degree algorithm
360360+ - Cliquetree: the clique tree of a graph
361361+ - Mcs_m: Maximal Cardinality Search (MCS-M) algorithm
362362+ - Minsep: Minimal separators of a graph
363363+ - Neighborhood: compute the neighborhood of a vertex/some vertices
364364+ - Oper.Difference: subgraphs induced by the elimination of some vertices
365365+ - Oper.Choose: choose a vertex in a graph
366366+ - Copy: graphs copying
367367+ - Util.DataV: create a vertex type with data attached to it
368368+ - out_degree: raises Invalid_argument if v not in g (instead of Not_found)
369369+ - Pack.Graph: golberg/ford_fulkerson fail ("not a directed graph")
370370+371371+# 0.70, Feb 27th, 2004
372372+373373+ - Makefile.in: dependences ("make -j" works)
374374+ - union and intersection (see Oper.S.union and Oper.S.intersection)
375375+ - Golberg/Ford_fulkerson algorithms in a single module Flow
376376+ - step-by-step iterators in Traverse.{Dfs,Bfs}
377377+ - Ford_fulkerson: maxflow now returns a flow function over edges
378378+379379+# 0.60, Feb 18th, 2004
380380+381381+ - fixed bug in Ford-Fulkerson
382382+ - random planar graphs (see Rand.Planar)
383383+ - Delaunay triangulation (see Delaunay)
384384+ - implementations with adjacency matrices (see Imperative.Matrix)
385385+ - operations on predecessors for undirected graphs optimized
386386+ - Traverse.Dfs.{prefix,prefix_component} optimized (now tail recursive)
387387+388388+# 0.50, Feb 4th, 2004
389389+390390+ - first release
391391+392392+
-31
INSTALL.adoc
···11-22-= How to create the library ?
33-44-You need Objective Caml >= 3.10.2 to compile this library.
55-66-Configure with
77-88- autoconf
99- ./configure
1010-1111-Compile with
1212-1313- make
1414-1515-Install (as root if needed) with
1616-1717- make install
1818-1919-To install somewhere else, with a different path prefix, use instead
2020-2121- make DESTDIR=/another/place install
2222-2323-findlib users may also do
2424-2525- make install-findlib
2626-2727-== How to create the documentation ?
2828-2929-create a local documentation with
3030-3131- make doc
+28
INSTALL.md
···11+22+The simplest way to install OCamlGraph is via opam.
33+44+If instead you choose to compile OCamlGraph from sources,
55+the simplest way is to use `dune`.
66+77+Otherwise, you can still use the old way:
88+- Configure with
99+ ```
1010+ autoconf
1111+ ./configure
1212+ ```
1313+- Compile with
1414+ ```
1515+ make
1616+ ```
1717+- Install (as root if needed) with
1818+ ```
1919+ make install
2020+ ```
2121+ To install somewhere else, with a different path prefix, use instead
2222+ ```
2323+ make DESTDIR=/another/place install
2424+ ```
2525+ findlib users may also do
2626+ ```
2727+ make install-findlib
2828+ ```
-68
README.adoc
···11-= OCamlgraph
22-33-OCamlgraph is a graph library for Ocaml. Its contribution is three-fold:
44-55-1. It provides an easy-to-use graph implementation together with several
66- operations and algorithms over graphs, in Graph.Pack.Digraph.
77- It is a reasonably efficient imperative data structure for directed graphs
88- with vertices and edges labeled with integers.
99-+
1010-Have a look at this module first in order to get an overview of what
1111-this library provides. See also `demo.ml`.
1212-1313-2. Then OCamlgraph provides several other graph implementations for those
1414- not satisfied with the one above. Some are persistent (immutable) and other
1515- imperative (mutable). Some are directed and other are not.
1616- Some have labels for vertices, or labels for edges, or both.
1717- Some have abstract types for vertices. etc.
1818-+
1919-See interface Sig for the graph signatures and modules Persistent and
2020-Imperative for the implementations.
2121-+
2222-These implementations are written as functors: you give the types of
2323-vertices labels, edge labels, etc. and you get the data structure as a
2424-result.
2525-2626-3. Finally, OCamlgraph provides several classic operations and algorithms
2727- over graphs. They are also written as functors i.e. independently of the
2828- data structure for graphs. One consequence is that you can define your own
2929- data structure for graphs and yet re-use all the algorithms from this
3030- library -- you only need to provide a few operations such as iterating over
3131- all vertices, over the successors of a vertex, etc.
3232-3333-3434-== How to link with OCamlgraph
3535-3636-You can use the `ocamlgraph` ocamlfind package:
3737-3838- ocamlfind ocamlopt -package ocamlgraph ...
3939-4040-(To produce an executable, also add the `-linkpkg` option.)
4141-4242-If you want to invoke the compiler directly, OCamlgraph is packaged as
4343-a single module `Graph`. Linking is done as follows:
4444-4545-bytecode::
4646-4747- ocamlc graph.cma <other files>
4848-4949-native code::
5050-5151- ocamlopt graph.cmxa <other files>
5252-5353-== Examples
5454-5555-You'll find examples of OCamlgraph use in subdirectory examples/
5656-(demo.ml, demo_planar.ml, color.ml, etc.). You can compile these
5757-programs with `make examples`. Corresponding binaries are produced in
5858-subdirectory bin/. You can also build them individually, e.g. `make
5959-bin/demo.opt` compiles examples/demo.ml.
6060-6161-6262-== Bug reports
6363-6464-Bug reports can be sent to
6565-6666- Sylvain Conchon <sylvain.conchon@lri.fr>
6767- Jean-Christophe Filliatre <filliatr@lri.fr>
6868- Julien Signoles <julien.signoles@cea.fr>
+48
README.md
···11+# OCamlgraph
22+33+OCamlgraph is a graph library for Ocaml. Its contribution is three-fold:
44+55+1. It provides an easy-to-use graph implementation together with several
66+ operations and algorithms over graphs, in Graph.Pack.Digraph.
77+ It is a reasonably efficient imperative data structure for directed graphs
88+ with vertices and edges labeled with integers.
99+1010+ Have a look at this module first in order to get an overview of what
1111+ this library provides. See also `demo.ml`.
1212+1313+2. Then OCamlgraph provides several other graph implementations for those
1414+ not satisfied with the one above. Some are persistent (immutable) and other
1515+ imperative (mutable). Some are directed and other are not.
1616+ Some have labels for vertices, or labels for edges, or both.
1717+ Some have abstract types for vertices. etc.
1818+1919+ See interface Sig for the graph signatures and modules Persistent and
2020+ Imperative for the implementations.
2121+2222+ These implementations are written as functors: you give the types of
2323+ vertices labels, edge labels, etc. and you get the data structure as a
2424+ result.
2525+2626+3. Finally, OCamlgraph provides several classic operations and algorithms
2727+ over graphs. They are also written as functors i.e. independently of the
2828+ data structure for graphs. One consequence is that you can define your own
2929+ data structure for graphs and yet re-use all the algorithms from this
3030+ library -- you only need to provide a few operations such as iterating over
3131+ all vertices, over the successors of a vertex, etc.
3232+3333+3434+## Documentation
3535+3636+https://backtracking.github.io/ocamlgraph/
3737+3838+3939+## Examples
4040+4141+You'll find examples of OCamlgraph use in subdirectory examples/
4242+(demo.ml, demo_planar.ml, color.ml, etc.).
4343+4444+4545+## Bug reports
4646+4747+https://github.com/backtracking/ocamlgraph/issues
4848+
+2-2
TODO.adoc
TODO.md
···1010 only Imperative.Digraph.ConcreteBidirectional exists at this day.
1111- Provide generic marks (instead of only integer marks)
12121313-== DGraph
1313+## DGraph
14141515-=== mode Tree:
1515+### mode Tree
16161717- texte trop bas
1818- texte multi-ligne