1# igraph 1.2.10
2
3Dec 14, 2021
4
5Fixed:
6- The macOS versions of `igraph` were accidentally built without GraphML
7  support on CRAN; this should now be fixed.
8
9# igraph 1.2.9
10
11Nov 22, 2021
12
13No user visible changes.
14
15# igraph 1.2.8
16
17Oct 26, 2021
18
19No user visible changes.
20
21# igraph 1.2.7
22
23Oct 15, 2021
24
25The C core is updated to 0.8.5, fixing a range of bugs and introducing a number of new functions.
26
27Added:
28- cluster_leiden added (#399).
29- cluster_fluid_communities added (#454)
30
31Fixed:
32- `make_lattice()` correctly rounds `length` to the nearest integer while
33  printing a warning (#115).
34- `make_empty_graph(NULL)` now prints an error instead of producing an
35  invalid graph (#404).
36- `make_graph(c())` now produces an empty graph instead of printing a
37  misleading error message (#431).
38- Printing a graph where some edges have NA as the names of both endpoints
39  does not produce a misleading error message any more (#410).
40- The `types` argument of functions related to bipartite graphs now prints
41  a warning when the types are coerced to booleans (#476).
42- Betweenness normalisation no longer overflows (#442).
43- `layout_with_sugiyama()` returns a layout of type matrix even if there is
44  only one vertex in the graph (#408).
45- Plotting a null graph (i.e. a graph with no vertices) does not throw an error
46  any more (#387).
47
48Deprecated:
49- The `membership` argument of `modularity.matrix()` is now deprecated as the
50  function never needed it anyway.
51- `modularity()` now prints a warning when it is applied on a directed graph
52  because the implementation in igraph's C core does not support directed
53  graphs as of version 0.8.5. The warning will be turned into an error in
54  the next minor (1.3.0) version of the R interface; the error will be removed
55  later when the C core is updated to a version that supports modularity for
56  directed networks.
57- `transitivity()` now prints a warning when its local variant (`type="local"`)
58  is called on a directed graph or a graph with multiple edges beecause the
59  implementation in the C core of igraph does not work reliably in these cases
60  as of version 0.8.5. The warning will be turned into an error in the next
61  minor (1.3.0) version of the R interface; the error will be removed later
62  when the C core is updated to a version that supports transitivity for
63  networks with multiple edges.
64
65Misc:
66- Documentation improvements.
67
68# igraph 1.2.6
69
70Oct 5, 2020
71
72No user visible changes.
73
74# igraph 1.2.5
75
76Mar 27, 2020
77
78No user visible changes.
79
80# igraph 1.2.4
81
82Feb 13, 2019
83
84No user visible changes.
85
86# igraph 1.2.3
87
88Jan 27, 2019
89
90No user visible changes.
91
92# igraph 1.2.2
93
94Jul  27, 2018
95
96No user visible changes.
97
98# igraph 1.2.1
99
100- The GLPK library is optional, if it is not available, then the
101  `cluster_optimal()` function does not work. Unfortunately we cannot
102  bundle the GLPK library into igraph on CRAN any more, because CRAN
103  maintainers forbid the pragmas in its source code.
104- Removed the NMF package dependency, and related functions.
105- Fix compilation without libxml2
106
107# igraph 1.1.2
108
109Jul 20, 2017
110
111- Fix compilation on Solaris
112
113
114# igraph 1.1.1
115
116Jul 13, 2017
117
118- Graph id is printed in the header, and a `graph_id` function was added
119- Fix `edge_attr` for some index values
120- Fix a `bfs()` bug, `restricted` argument was zero-based
121- `match_vertices` is exported now
122- `%>%` is re-exported in a better way, to avoid interference with other
123  packages
124- `ego_` functions default to `order = 1` now
125- New function `igraph_with_opt` to run code with temporary igraph
126  options settings
127- Fix broken `sample_asym_pref` function
128- Fix `curve_multiple` to avoid warnings for graphs with self-loops.
129- The `NMF` package is only suggested now, it is not a hard
130  dependency
131- Fix gen_uid.c _SVID_SOURCE issues
132- Avoid drawing straight lines as Bezier curves
133- Use the `pkgconfig` package for options. This allows setting options
134  on a per-package basis. E.g. a package using igraph can set `return.vs.es`
135  to `FALSE` in its `.onLoad()` function, and then igraph will return
136  plain numeric vectors instead of vertex/edge sequences
137  *if called from this package*.
138- `igraph_options()` returns the *old* values of the updated options,
139  this is actually useful, returning the new values was not.
140- `with_igraph_opt()` function to temporarily change values of
141  igraph options.
142- `get.edge()` is deprecated, use `ends()` instead. (This was already the case
143  for igraph 1.0.0, but we forgot to add a NEWS point for it.)
144- Do not redefine `.Call()`, to make native calls faster.
145- Speed up special cases of indexing vertex sequences.
146- Removed an `anyNA()` call, to be compatible with older R versions.
147- Fixed a fast-greedy community finding bug,
148  https://github.com/igraph/igraph/issues/836
149- Fixed `head_of()` and `tail_of()`, they were mixed up.
150- Plot: make `label.dist` independent of label lengths, fixes #63.
151- Plot: no error for unknown graphical parameters.
152- Import functions from base packages, to eliminate
153  `R CMD check` `NOTE`s.
154- Re-add support for edge weights in Fruchterman-Reingold layout
155- Check membership vector in `modularity()`.
156- Rename `str.igraph()` to `print_all()`.
157- Use the igraph version in exported graphs, instead of @VERSION@ #75.
158- Functions that can be used inside a `V()` or `E()` indexing
159  now begin with a dot. Old names are deprecated.
160  New names: `.nei()`, `.innei()`, `.outnei()`, `.inc()`, `.from()`,
161  `.to()`. #22
162- Fix packages that convert graphs to graph::graphNEL: they
163  don't need to attach 'graph' manually any more.
164- Fix a bugs in `layout_with_dh`, `layout_with_gem` and
165  `layout_with_sugiyama`. They crashed in some cases.
166
167# igraph 1.0.1
168
169June 26, 2015
170
171Some minor updates:
172
173- Documentation fixes.
174- Do not require a C++-11 compiler any more.
175- Fedora, Solaris and Windows compilation fixes.
176
177# igraph 1.0.0
178
179June 21, 2015
180
181## Release notes
182
183This is a new major version of igraph, and then why not call
184it 1.0.0. This does not mean that it is ready, it'll never be
185ready.
186
187The biggest changes in the release are
188- the new function names. Most functions were renamed to
189  make them more consistent and readable. (Relax, old names
190  can still be used, no need to update any code.)
191- Better operations for vertex and edge sequences. Most functions
192  return proper vertex/edge sequences instead of numeric ids.
193- The versatile `make_()` and `make_graph()` functions to
194  create graphs.
195
196## Major changes
197
198- Many functions were renamed. Old names are not documented,
199  but can still be used.
200- A generic `make_graph()` function to create graphs.
201- A generic `layout_()` (not the underscore!) function
202  to create graph layouts, see also `add_layout_()`.
203- The igraph data type has changed. You need to call
204  `upgrade_graph()` on graphs created with previous igraph
205  versions.
206- Vertex and edge sequence operations: union, intersection, etc.
207- Vertex and edge sequences can only be used with the graphs they
208  belong to. This is now strictly checked.
209- Most functions that return a (sub)set of vertices
210  or edges return vertex or edge sequences instead.
211- Vertex and edge sequences have a `[[` operator now,
212  for easy viewing of vertex/edge metadata.
213- Vertex and edge sequences are implemented as weak references.
214  See also the `as_ids()` function to convert them to simple ids.
215- Vertex order can be specified for the circle layout now.
216- Davidson-Harel layout algorithm `layout_with_dh()`.
217- GEM layout algorithm `layout_with_gem()`.
218- Neighborhood functions have a `mindist` parameter for the
219  smallest distance to consider.
220- `all_simple_paths()` function to list all simple paths in a graph.
221- `triangles()` lists all triangles in a graph.
222- Fruchterman-Reingold and Kamada-Kawai layout algorithms
223  rewritten from scratch. They are much faster and follow the
224  original publications closely.
225- Nicer printing of graphs, vertex and edge sequences.
226- `local_scan()` function calculates scan statistics.
227- Embeddings: `embed_adjacency_matrix()` and `embed_laplacian_matrix()`.
228- Product operator: `*`, the same graph multiple times. Can be also
229  used as `rep()`.
230- Better default colors, color palettes for vertices.
231- Random walk on a graph: `random_walk()`
232- `adjacent_vertices()` and `incident_edges()` functions,
233  they are vectorized, as opposed to `neighhors()` and `incident()`.
234- Convert a graph to a _long_ data frame with `as_long_data_frame()`.
235
236## Bug fixes
237
238Too many to list. Please try if your issue was fixed and (re-)report
239it if not. Thanks!
240
241# igraph 0.7.1
242
243April 21, 2014
244
245## Release Notes
246
247Some bug fixes, to make sure that the code included in
248'Statistical Analysis of Network Data with R' works. See
249https://github.com/kolaczyk/sand
250
251## Detailed changes:
252
253- Graph drawing: fix labels of curved edges, issue #181.
254- Graph drawing: allow fixing edge labels at given positions,
255  issue #181.
256- Drop the 'type' vertex attribute after bipartite projection,
257  the projections are not bipartite any more, issue #255.
258- Print logical attributes in header properly (i.e. encoded by `l`,
259  not `x`,  which is for complex attributes. Issue #578.
260- Add a constructor for `communities` objects, see `create.communities()`.
261  Issue #547.
262- Better error handling in the GraphML parser.
263- GraphML reader is a bit more lenient now; makes it possible to read
264  GraphML files saved from yWorks apps.
265- Fixed a bug in `constaint()`, issue #580.
266- Bipartite projection now detects invalid edges instead of giving
267  a cryptic error, issue #543.
268- Fixed the `simplify` argument of `graph.formula()`, which was
269  broken, issue #586.
270- The function `crossing()` adds better names to the result,
271  fixes issue #587.
272- The `sir()` function gives an error if the input graph is
273  not simple, fixes issue #582.
274- Calling igraph functions from igraph callbacks is not allowed now,
275  fixes issue #571.
276
277# igraph 0.7.0
278
279February 4, 2014
280
281## Release Notes
282
283There are a bunch of new features in the library itself, and
284other important changes in the life of the project. Thanks everyone
285for sending code and reporting bugs!
286
287### igraph @ github
288
289igraph's development has moved from Launchpad to github.
290This has actually happened several month ago, but never
291announced officially. The place for reporting bugs is
292at https://github.com/igraph/igraph/issues.
293
294### New homepage
295
296igraph's homepage is now hosted at http://igraph.org, and it is
297brand new. We wanted to make it easier to use and modern.
298
299### Better nightly downloads
300
301You can download nightly builds from igraph at
302http://igraph.org/nightly. Source and binary R packages (for windows
303and OSX), are all built.
304
305## New features and bug fixes
306
307- Added a demo for hierarchical random graphs, invoke it via
308  `demo(hrg)`.
309- Make attribute prefixes optional when writing a GraphML file.
310- Added function `mod.matrix()`.
311- Support edge weights in leading eigenvector community detection.
312- Added the LAD library for checking (sub)graph isomorphism, version 1.
313- Logical attributes.
314- Added `layout.bipartite()` function, a simple two-column layout
315  for bipartite graphs.
316- Support incidence matrices in bipartite Pajek files.
317- Pajek files in matrix format are now directed by default, unless they
318  are bipartite.
319- Support weighted (and signed) networks in Pajek when file is in
320  matrix format.
321- Fixed a bug in `barabasi.game()`, algorithm psumtree-multiple
322  just froze.
323- Function `layout.mds()` by default returns a layout matrix now.
324- Added support for Boolean attributes in the GraphML and GML readers
325  and writer.
326- Change MDS layout coordinates, first dim is according to first
327  eigenvalue, etc.
328- `plot.communities()` (`plot.igraph()`, really) draws a border
329  around the marked groups by default.
330- printing graphs now converts the `name` graph attribute to character
331- Convenience functions to query and set all attributes at once:
332  `vertex.attriubutes()`, `graph.attributes()` and `edge.attributes()`.
333- Function `graph.disjoint.union()` handles attributes now.
334- Rewrite `graph.union()` to handle attributes properly.
335- `rewire()`: now supports the generation and destruction of loops.
336- Erdos-Renyi type bipartite random graphs: `bipartite.random.game()`.
337- Support the new options (predecessors and inbound_edges) of
338  `get_shortest_paths()`, reorganized the output of
339  `get.shortest.paths()` completely.
340- Added `graphlets()` and related functions.
341- Fix modularity values of multilevel community if there are no merges
342  at all.
343- Fixed bug when deleting edges with FALSE in the matrix notation.
344- Fix `bonpow()` and `alpha.centrality()` and make sure that the
345  sparse solver is called.
346- `tkplot()` news: enable setting coordinates from the command line
347  via `tkplot.setcoords()` and access to the canvas via
348  `tkplot.canvas()`.
349- Fixed a potential crash in `igraph_edge_connectivity()`, because of an
350  un-initialized variable in the C code.
351- Avoiding overflow in `closeness()` and related functions.
352- Check for NAs after converting 'type' to logical in
353  `bipartite.projection()`.
354- `graphNEL` conversion functions only load the 'graph' package if it was
355  not loaded before and they load it at the end of the search path,
356  to minimize conflicts.
357- Fixed a bug when creating graphs from adjacency matrices, we now convert
358  them to double, in case they are integers.
359- Fixed an invalid memory read (and a potential crash) in the infomap
360  community detection.
361- Fixed a memory leak in the functions with attribute combinations.
362- Removed some memory leaks from the SCG functions.
363- Fixed some memory leaks in the ray tracer.
364- Fixed memory leak in `graph.bfs()` and `graph.dfs()`.
365- Fix a bug in triad census that set the first element of the result
366  to NaN.
367- Fixed a crash in `is.chordal()`.
368- Fixed a bug in weighted modularity calculation, sum of the weights
369  was truncated to an integer.
370- Fixed a bug in weighted multilevel communtiies, the maximum weight
371  was rounded to an integer.
372- Fixed a bug in `centralization.closeness.tmax()`.
373- Reimplement push-relabel maximum flow with gap heuristics.
374- Maximum flow functions now return some statistics about the push
375  relabel algorithm steps.
376- Function `arpack()` now gives error message if unknown options are
377  given.
378- Fixed missing whitespace in Pajek writer when the ID attribute was
379  numeric.
380- Fixed a bug that caused the GML reader to crash when the ID
381  attribute was non-numeric.
382- Fixed issue #500, potential segfault if the two graphs in BLISS
383  differ in the number of vertices or edges.
384- Added `igraphtest()` function.
385- Fix dyad census instability, sometimes incorrect results were
386  reported.
387- Dyad census detects integer overflow now and gives a warning.
388- Function `add.edges()` does not allow now zeros in the vertex set.
389- Added a function to count the number of adjacent triangles:
390  `adjacent.triangles()`.
391- Added `graph.eigen()` function, eigenproblems on adjacency matrices.
392- Added some workarounds for functions that create a lot of
393  graphs, `decompose.graph()` and `graph.neighborhood()` use it.
394  Fixes issue #508.
395- Added weights support for `optimal.community()`, closes #511.
396- Faster maximal clique finding.
397- Added a function to count maximum cliques.
398- Set operations: union, intersection, disjoint, union, difference,
399  compose now work based on vertex names (if they are present) and
400  keep attributes, closes #20.
401- Removed functions `graph.intersection.by.name()`,
402  `graph.union.by.name()`, `graph.difference.by.name()`.
403- The `+` operator on graphs now calls `graph.union()` if both
404  argument graphs are named, and calls `graph.disjoint.union()`
405  otherwise.
406- Added function `igraph.version()`.
407- Generate graphs from a stochastic block model: `sbm.game()`.
408- Do not suggest the stats, XML, jpeg and png packages any more.
409- Fixed a `set.vertex/edge.attribute` bug that changed both
410  graph objects, after copying (#533)
411- Fixed a bug in `barabasi.game` that caused crashes.
412- We use PRPACK to calculate PageRank scores
413  see https://github.com/dgleich/prpack
414- Added`'which` argument to `bipartite.projection` (#307).
415- Add `normalized` argument to closeness functions, fixes issue #3.
416- R: better handling of complex attributes, `[[` on vertex/edge sets,
417  fixes #231.
418- Implement the `start` argument in `hrg.fit` (#225).
419- Set root vertex in Reingold-Tilford layout, solves #473.
420- Fix betweenness normalization for directed graphs.
421- Fixed a bug in `graph.density` that resulted in incorrect values for
422  undirected graphs with loops
423- Fixed a bug when many graphs were created in one C call
424  (e.g. by `graph.decompose`), causing #550.
425- Fixed sparse `graph.adjacency` bugs for graphs with one edge,
426  and graphs with zero edges.
427- Fixed a bug that made Bellman-Ford shortest paths calculations fail.
428- Fixed a `graph.adjacency` bug for undirected, weighted graphs and
429  sparse matrices.
430- `main`, `sub`, `xlab` and `ylab` are proper graphics parameters
431  now (#555).
432- `graph.data.frame` coerces arguments to data frame (#557).
433- Fixed a minimum cut bug for weighted undirected graphs (#564).
434- Functions for simulating epidemics (SIR model) on networks,
435  see the `sir` function.
436- Fixed argument ordering in `graph.mincut` and related functions.
437- Avoid copying attributes in query functions and print (#573),
438  these functions are much faster now for graphs with many
439  vertices/edges and attributes.
440- Speed up writing GML and GraphML files, if some attributes are
441  integer. It was really-really slow.
442- Fix multiple root vertices in `graph.bfs` (#575).
443
444# igraph 0.6.6
445
446Released Oct 28, 2013
447
448Some bugs fixed:
449
450- Fixed a potential crash in the infomap.community() function.
451- Various fixed for the operators that work on vertex names (#136).
452- Fixed an example in the arpack() manual page.
453- arpack() now gives error message if unknown options
454  are supplied (#492).
455- Better arpack() error messages.
456- Fixed missing whitespace in Pajek writer when ID attribute
457  was numeric.
458- Fixed dyad census instability, sometimes incorrect
459  results were reported (#496).
460- Fixed a bug that caused the GML reader to crash when the ID
461  attribute was non-numeric
462- Fixed a potential segfault if the two graphs in BLISS
463  differ in the number of vertices or edges (#500).
464- Added the igraphtest() function to run tests from R (#485).
465- Dyad census detects integer overflow now and gives a warning (#497).
466- R: add.edges() does not allow now zeros in the vertex set (#503).
467- Add C++ namespace to the files that didn't have one.
468  Fixes some incompatibility with other packages (e.g. rgl)
469  and mysterious crashes (#523).
470- Fixed a bug that caused a side effect in set.vertex.attributes(),
471  set.edge.attributes() and set.graph.attributes() (#533).
472- Fixed a bug in degree.distribution() and cluster.distribution()
473  (#257).
474
475# igraph 0.6.5-2
476
477Released May 16, 2013
478
479Worked two CRAN check problems, and a gfortran bug (string bound
480checking does not work if code is called from C and without string
481length arguments at the "right" place).
482
483Otherwise identical to 0.6.5-1.
484
485# igraph 0.6.5-1
486
487Released February 27, 2013
488
489Fixing an annoying bug, that broke two other packages on CRAN:
490
491- Setting graph attributes failed sometimes, if the attributes were
492  lists or other complex objects.
493
494# igraph 0.6.5
495
496Released February 24, 2013
497
498This is a minor release, to fix some very annoying bugs in 0.6.4:
499
500- igraph should now work well with older R versions.
501- Eliminate gap between vertex and edge when plotting an edge without an arrow.
502  Fixes #1118448.
503- Fixed an out-of-bounds array indexing error in the DrL layout, that
504  potentially caused crashes.
505- Fixed a crash in weighted betweenness calculation.
506- Plotting: fixed a bug that caused misplaced arrows at rectangle
507  vertex shapes.
508
509# igraph 0.6.4
510
511Released February 2, 2013
512
513The version number is not a mistake, we jump to 0.6.4 from 0.6,
514for technical reasons. This version was actually never really
515released, but some R packages of this version were uploaded to
516CRAN, so we include this version in this NEW file.
517
518# New features and bug fixes
519
520- Added a vertex shape API for defining new vertex shapes, and also
521  a couple of new vertex shapes.
522- Added the get.data.frame() function, opposite of graph.data.frame().
523- Added bipartite support to the Pajek reader and writer, closes bug
524  #1042298.
525- degree.sequence.game() has a new method now: "simple_no_multiple".
526- Added the is.degree.sequence() and is.graphical.degree.sequence()
527  functions.
528- rewire() has a new method: "loops", that can create loop edges.
529- Walktrap community detection now handles isolates.
530- layout.mds() returns a layout matrix now.
531- layout.mds() uses LAPACK instead of ARPACK.
532- Handle the '~' character in write.graph and read.graph. Bug
533  #1066986.
534- Added k.regular.game().
535- Use vertex names to plot if no labels are specified in the function
536  call or as vertex attributes. Fixes issue #1085431.
537- power.law.fit() can now use a C implementation.
538
539- Fixed a bug in barabasi.game() when out.seq was an empty vector.
540- Fixed a bug that made functions with a progress bar fail if called
541  from another package.
542- Fixed a bug when creating graphs from a weighted integer adjacency
543  matrix via graph.adjacency(). Bug #1019624.
544- Fixed overflow issues in centralization calculations.
545- Fixed a minimal.st.separators() bug, some vertex sets were incorrectly
546  reported as separators. Bug #1033045.
547- Fixed a bug that mishandled vertex colors in VF2 isomorphism
548  functions. Bug #1032819.
549- Pajek exporter now always quotes strings, thanks to Elena Tea Russo.
550- Fixed a bug with handling small edge weights in shortest paths
551  calculation in shortest.paths() (Dijkstra's algorithm.) Thanks to
552  Martin J Reed.
553- Weighted transitivity uses V(graph) as 'vids' if it is NULL.
554- Fixed a bug when 'pie' vertices were drawn together with other
555  vertex shapes.
556- Speed up printing graphs.
557- Speed up attribute queries and other basic operations, by avoiding
558  copying of the graph. Bug #1043616.
559- Fixed a bug in the NCV setting for ARPACK functions. It cannot be
560  bigger than the matrix size.
561- layout.merge()'s DLA mode has better defaults now.
562- Fixed a bug in layout.mds() that resulted vertices on top of each
563  other.
564- Fixed a bug in layout.spring(), it was not working properly.
565- Fixed layout.svd(), which was completely defunct.
566- Fixed a bug in layout.graphopt() that caused warnings and on
567  some platforms crashes.
568- Fixed community.to.membership(). Bug #1022850.
569- Fixed a graph.incidence() crash if it was called with a non-matrix
570  argument.
571- Fixed a get.shortest.paths bug, when output was set to "both".
572- Motif finding functions return NA for isomorphism classes that are
573  not motifs (i.e. not connected). Fixes bug #1050859.
574- Fixed get.adjacency() when attr is given, and the attribute has some
575  complex type. Bug #1025799.
576- Fixed attribute name in graph.adjacency() for dense matrices. Bug
577  #1066952.
578- Fixed erratic behavior of alpha.centrality().
579- Fixed igraph indexing, when attr is given. Bug #1073705.
580- Fixed a bug when calculating the largest cliques of a directed
581  graph. Bug #1073800.
582- Fixed a bug in the maximal clique search, closes #1074402.
583- Warn for negative weights when calculating PageRank.
584- Fixed dense, unweighted graph.adjacency when diag=FALSE. Closes
585  issue #1077425.
586- Fixed a bug in eccentricity() and radius(), the results were often
587  simply wrong.
588- Fixed a bug in get.all.shortest.paths() when some edges had zero weight.
589- graph.data.frame() is more careful when vertex names are numbers, to
590  avoid their scientific notation. Fixes issue #1082221.
591- Better check for NAs in vertex names. Fixes issue #1087215
592- Fixed a potential crash in the DrL layout generator.
593- Fixed a bug in the Reingold-Tilford layout when the graph is
594  directed and mode != ALL.
595
596# igraph 0.6
597
598Released June 11, 2012
599
600See also the release notes at
601http://igraph.sf.net/relnotes-0.6.html
602
603# R: Major new features
604
605- Vertices and edges are numbered from 1 instead of 0.
606  Note that this makes most of the old R igraph code incompatible
607  with igraph 0.6. If you want to use your old code, please use
608  the igraph0 package. See more at http://igraph.sf.net/relnotes-0.6.html.
609- The '[' and '[[' operators can now be used on igraph graphs,
610  for '[' the graph behaves as an adjacency matrix, for '[[' is
611  is treated as an adjacency list. It is also much simpler to
612  manipulate the graph structure, i.e. add/remove edges and vertices,
613  with some new operators. See more at ?graph.structure.
614- In all functions that take a vector or list of vertices or edges,
615  vertex/edge names can be given instead of the numeric ids.
616- New package 'igraphdata', contains a number of data sets that can
617  be used directly in igraph.
618- Igraph now supports loading graphs from the Nexus online data
619  repository, see nexus.get(), nexus.info(), nexus.list() and
620  nexus.search().
621- All the community structure finding algorithm return a 'communities'
622  object now, which has a bunch of useful operations, see
623  ?communities for details.
624- Vertex and edge attributes are handled much better now. They
625  are kept whenever possible, and can be combined via a flexible API.
626  See ?attribute.combination.
627- R now prints igraph graphs to the screen in a more structured and
628  informative way. The output of summary() was also updated
629  accordingly.
630
631# R: Other new features
632
633- It is possible to mark vertex groups on plots, via
634  shading. Communities and cohesive blocks are plotted using this by
635  default.
636- Some igraph demos are now available, see a list via
637  'demo(package="igraph")'.
638- igraph now tries to select the optimal layout algorithm, when
639  plotting a graph.
640- Added a simple console, using Tcl/Tk. It contains a text area
641  for status messages and also a status bar. See igraph.console().
642- Reimplemented igraph options support, see igraph.options() and
643  getIgraphOpt().
644- Igraph functions can now print status messages.
645
646# R: New or updated functions
647
648## Community detection
649
650- The multi-level modularity optimization community structure detection
651  algorithm by Blondel et al. was added, see multilevel.community().
652- Distance between two community structures: compare.communities().
653- Community structure via exact modularity optimization,
654  optimal.community().
655- Hierarchical random graphs and community finding, porting the code
656  from Aaron Clauset. See hrg.game(), hrg.fit(), etc.
657- Added the InfoMAP community finding method, thanks to Emmanuel
658  Navarro for the code. See infomap.community().
659
660## Shortest paths
661
662- Eccentricity (eccentricity()), and radius (radius()) calculations.
663- Shortest path calculations with get.shortest.paths() can now
664  return the edges along the shortest paths.
665- get.all.shortest.paths() now supports edge weights.
666
667## Centrality
668
669- Centralization scores for degree, closeness, betweenness and
670  eigenvector centrality. See centralization.scores().
671- Personalized Page-Rank scores, see page.rank().
672- Subgraph centrality, subgraph.centrality().
673- Authority (authority.score()) and hub (hub.score()) scores support
674  edge weights now.
675- Support edge weights in betweenness and closeness calculations.
676- bonpow(), Bonacich's power centrality and alpha.centrality(),
677  Alpha centrality calculations now use sparse matrices by default.
678- Eigenvector centrality calculation, evcent() now works for
679  directed graphs.
680- Betweenness calculation can now use arbitrarily large integers,
681  this is required for some lattice-like graphs to avoid overflow.
682
683## Input/output and file formats
684
685- Support the DL file format in graph.read(). See
686  http://www.analytictech.com/networks/dataentry.htm.
687- Support writing the LEDA file format in write.graph().
688
689## Plotting and layouts
690
691- Star layout: layout.star().
692- Layout based on multidimensional scaling, layout.mds().
693- New layouts layout.grid() and layout.grid.3d().
694- Sugiyama layout algorithm for layered directed acyclic graphs,
695  layout.sugiyama().
696
697## Graph generators
698
699- New graph generators: static.fitness.game(), static.power.law.game().
700- barabasi.game() was rewritten and it supports three algorithms now,
701  the default algorithm does not generate multiple or loop edges.
702  The graph generation process can now start from a supplied graph.
703- The Watts-Strogatz graph generator, igraph_watts_strogatz() can
704  now create graphs without loop edges.
705
706## Others
707
708- Added the Spectral Coarse Graining algorithm, see scg().
709- The cohesive.blocks() function was rewritten in C, it is much faster
710  now. It has a nicer API, too. See demo("cohesive").
711- Added generic breadth-first and depth-first search implementations
712  with many callbacks, graph.bfs() and graph_dfs().
713- Support vertex and edge coloring in the VF2 (sub)graph isomorphism
714  functions (graph.isomorphic.vf2(), graph.count.isomorphisms.vf2(),
715  graph.get.isomorphisms.vf2(), graph.subisomorphic.vf2(),
716  graph.count.subisomorphisms.vf2(), graph.get.subisomorphisms.vf2()).
717- Assortativity coefficient, assortativity(), assortativity.nominal()
718  and assortativity.degree().
719- Vertex operators that work by vertex names:
720  graph.intersection.by.name(), graph.union.by.name(),
721  graph.difference.by.name(). Thanks to Magnus Torfason for
722  contributing his code!
723- Function to calculate a non-induced subgraph: subgraph.edges().
724- More comprehensive maximum flow and minimum cut calculation,
725  see functions graph.maxflow(), graph.mincut(), stCuts(), stMincuts().
726- Check whether a directed graph is a DAG, is.dag().
727- has.multiple() to decide whether a graph has multiple edges.
728- Added a function to calculate a diversity score for the vertices,
729  graph.diversity().
730- Graph Laplacian calculation (graph.laplacian()) supports edge
731  weights now.
732- Biconnected component calculation, biconnected.components()
733  now returns the components themselves.
734- bipartite.projection() calculates multiplicity of edges.
735- Maximum cardinality search: maximum.cardinality.search() and
736  chordality test: is.chordal()
737- Convex hull computation, convex.hull().
738- Contract vertices, contract.vertices().
739
740# igraph 0.5.3
741
742Released November 22, 2009
743
744## Bugs corrected in the R interface
745
746- Some small changes to make 'R CMD check' clean
747- Fixed a bug in graph.incidence, the 'directed' and 'mode' arguments
748  were not handled correctly
749- Betweenness and edge betweenness functions work for graphs with
750  many shortest paths now (up to the limit of long long int)
751- When compiling the package, the configure script fails if there is
752  no C compiler available
753- igraph.from.graphNEL creates the right number of loop edges now
754- Fixed a bug in bipartite.projection() that caused occasional crashes
755  on some systems
756
757# igraph 0.5.2
758
759Released April 10, 2009
760
761See also the release notes at
762http://igraph.sf.net/relnotes-0.5.2.html
763
764## New in the R interface
765
766- Added progress bar support to beweenness() and
767  betweenness.estimate(), layout.drl()
768- Speeded up betweenness estimation
769- Speeded up are.connected()
770- Johnson's shortest paths algorithm added
771- shortest.paths() has now an 'algorithm' argument to choose from the
772  various implementations manually
773- Always quote symbolic vertex names when printing graphs or edges
774- Average nearest neighbor degree calculation, graph.knn()
775- Weighted degree (also called strength) calculation, graph.strength()
776- Some new functions to support bipartite graphs: graph.bipartite(),
777  is.bipartite(), get.incidence(), graph.incidence(),
778  bipartite.projection(), bipartite.projection.size()
779- Support for plotting curved edges with plot.igraph() and tkplot()
780- Added support for weighted graphs in alpha.centrality()
781- Added the label propagation community detection algorithm by
782  Raghavan et al., label.propagation.community()
783- cohesive.blocks() now has a 'cutsetHeuristic' argument to choose
784  between two cutset algorithms
785- Added a function to "unfold" a tree, unfold.tree()
786- New tkplot() arguments to change the drawing area
787- Added a minimal GUI, invoke it with tkigraph()
788- The DrL layout generator, layout.drl() has a three dimensional mode
789  now.
790
791## Bugs corrected in the R interface
792
793- Fixed a bug in VF2 graph isomorphism functions
794- Fixed a bug when a sparse adjacency matrix was requested in
795  get.adjacency() and the graph was named
796- VL graph generator in degree.sequence.game() checks now that
797  the sum of the degrees is even
798- Many fixes for supporting various compilers, e.g. GCC 4.4 and Sun's
799  C compiler
800- Fixed memory leaks in graph.automorphisms(), Bellman-Ford
801  shortest.paths(), independent.vertex.sets()
802- Fix a bug when a graph was imported from LGL and exported to NCOL
803  format (#289596)
804- cohesive.blocks() creates its temporary file in the session
805  temporary directory
806- write.graph() and read.graph() now give error messages when unknown
807  arguments are given
808- The GraphML reader checks the name of the attributes to avoid adding
809  a duplicate 'id' attribute
810- It is possible to change the 'ncv' ARPACK parameter for
811  leading.eigenvector.community()
812- Fixed a bug in path.length.hist(), 'unconnected' was wrong
813  for unconnected and undirected graphs
814- Better handling of attribute assingment via iterators, this is now
815  also clarified in the manual
816- Better error messages for unknown vertex shapes
817- Make R package unload cleanly if unloadNamespace() is used
818- Fixed a bug in plotting square shaped vertices (#325244)
819- Fixed a bug in graph.adjacency() when the matrix is a sparse matrix
820  of class "dgTMatrix"
821
822# igraph 0.5.1
823
824Released July 14, 2008
825
826See also the release notes at
827http://igraph.sf.net/relnotes-0.5.1.html
828
829## New in the R interface
830
831- A new layout generator called DrL.
832- Uniform sampling of random connected undirected graphs with a
833  given degree sequence.
834- Edge labels are plotted at 1/3 of the edge, this is better if
835  the graph has mutual edges.
836- Initial and experimental vertex shape support in 'plot'.
837- New function, 'graph.adjlist' creates igraph graphs from
838  adjacency lists.
839- Conversion to/from graphNEL graphs, from the 'graph' R package.
840- Fastgreedy community detection can utilize edge weights now, this
841  was missing from the R interface.
842- The 'arrow.width' graphical parameter was added.
843- graph.data.frame has a new argument 'vertices'.
844- graph.adjacency and get.adjacency support sparse matrices,
845  the 'Matrix' package is required to use this functionality.
846- graph.adjacency adds column/row names as 'name' attribute.
847- Weighted shortest paths using Dijkstra's or the Belmann-Ford
848  algorithm.
849- Shortest path functions return 'Inf' for unreachable vertices.
850- New function 'is.mutual' to find mutual edges in a directed graph.
851- Added inverse log-weighted similarity measure (a.k.a. Adamic/Adar
852  similarity).
853- preference.game and asymmetric.preference.game were
854  rewritten, they are O(|V|+|E|) now, instead of O(|V|^2).
855- Edge weight support in function 'get.shortest.paths', it uses
856  Dijkstra's algorithm.
857
858## Bugs corrected in the R interface
859
860- A bug was corrected in write.pajek.bgraph.
861- Several bugs were corrected in graph.adjacency.
862- Pajek reader bug corrected, used to segfault if '*Vertices'
863  was missing.
864- Directedness is handled correctly when writing GML files.
865  (But note that 'correct' conflicts the standard here.)
866- Corrected a bug when calculating weighted, directed PageRank on an
867  undirected graph. (Which does not make sense anyway.)
868- Several bugs were fixed in the Reingold-Tilford layout to avoid
869  edge crossings.
870- A bug was fixed in the GraphML reader, when the value of a graph
871  attribute was not specified.
872- Fixed a bug in the graph isomorphism routine for small (3-4 vertices)
873  graphs.
874- Corrected the random sampling implementation (igraph_random_sample),
875  now it always generates unique numbers. This affects the
876  Gnm Erdos-Renyi generator, it always generates simple graphs now.
877- The basic igraph constructor (igraph_empty_attrs, all functions
878  are expected to call this internally) now checks whether the number
879  of vertices is finite.
880- The LGL, NCOL and Pajek graph readers handle errors properly now.
881- The non-symmetric ARPACK solver returns results in a consistent form
882  now.
883- The fast greedy community detection routine now checks that the graph
884  is simple.
885- The LGL and NCOL parsers were corrected to work with all
886  kinds of end-of-line encodings.
887- Hub & authority score calculations initialize ARPACK parameters now.
888- Fixed a bug in the Walktrap community detection routine, when applied
889  to unconnected graphs.
890- Several small memory leaks were removed, and a big one from the Spinglass
891  community structure detection function
892
893# igraph 0.5
894
895Released February 14, 2008
896
897See also the release notes at http://igraph.sf.net/relnotes-0.5.html
898
899## New in the R interface
900
901- The 'rescale', 'asp' and 'frame' graphical parameters were added
902- Create graphs from a formula notation (graph.formula)
903- Handle graph attributes properly
904- Calculate the actual minimum cut for undirected graphs
905- Adjacency lists, get.adjlist and get.adjedgelist added
906- Eigenvector centrality computation is much faster now
907- Proper R warnings, instead of writing the warning to the terminal
908- R checks graphical parameters now, the unknown ones are not just
909  ignored, but an error message is given
910- plot.igraph has an 'add' argument now to compose plots with multiple
911  graphs
912- plot.igraph supports the 'main' and 'sub' arguments
913- layout.norm is public now, it can normalize a layout
914- It is possible to supply startup positions to layout generators
915- Always free memory when CTRL+C/ESC is pressed, in all operating
916  systems
917- plot.igraph can plot square vertices now, see the 'shape' parameter
918- graph.adjacency rewritten when creating weighted graphs
919- We use match.arg whenever possible. This means that character scalar
920  options can be abbreviated and they are always case insensitive
921
922- VF2 graph isomorphism routines can check subgraph isomorphism now,
923  and they are able to return matching(s)
924- The BLISS graph isomorphism algorithm is included in igraph now. See
925  canonical.permutation, graph.isomorphic.bliss
926- We use ARPACK for eigenvalue/eigenvector calculation. This means that the
927  following functions were rewritten: page.rank,
928  leading.eigenvector.community.*, evcent. New functions based on
929  ARPACK: hub.score, authority.score, arpack.
930- Edge weights for Fruchterman-Reingold layout (layout.fruchterman.reingold).
931- Line graph calculation (line.graph)
932- Kautz and de Bruijn graph generators (graph.kautz, graph.de.bruijn)
933- Support for writing graphs in DOT format
934- Jaccard and Dice similarity coefficients added (similarity.jaccard,
935  similarity.dice)
936- Counting the multiplicity of edges (count.multiple)
937- The graphopt layout algorithm was added, layout.graphopt
938- Generation of "famous" graphs (graph.famous).
939- Create graphs from LCF notation (graph.cf).
940- Dyad census and triad cencus functions (dyad.census, triad.census)
941- Cheking for simple graphs (is.simple)
942- Create full citation networks (graph.full.citation)
943- Create a histogram of path lengths (path.length.hist)
944- Forest fire model added (forest.fire.game)
945- DIMACS reader can handle different file types now
946- Biconnected components and articulation points (biconnected.components,
947  articulation.points)
948- Kleinberg's hub and authority scores (hub.score, authority.score)
949- as.undirected handles attributes now
950- Geometric random graph generator (grg.game) can return the
951  coordinates of the vertices
952- Function added to convert leading eigenvector community structure result to
953  a membership vector (community.le.to.membership)
954- Weighted fast greedy community detection
955- Weighted page rank calculation
956- Functions for estimating closeness, betweenness, edge betweenness by
957  introducing a cutoff for path lengths (closeness.estimate,
958  betweenness.estimate, edge.betweenness.estimate)
959- Weighted modularity calculation
960- Function for permuting vertices (permute.vertices)
961- Betweenness and closeness calculations are speeded up
962- read.graph can handle all possible line terminators now (\r, \n, \r\n, \n\r)
963- Error handling was rewritten for walktrap community detection,
964  the calculation can be interrupted now
965- The maxflow/mincut functions allow to supply NULL pointer for edge
966  capacities, implying unit capacities for all edges
967
968## Bugs corrected in the R interface
969
970- Fixed a bug in cohesive.blocks, cohesive blocks were sometimes not
971  calculated correctly
972
973# igraph 0.4.5
974
975Released January 1, 2008
976
977New:
978- Cohesive block finding in the R interface, thanks to Peter McMahan
979  for contributing his code. See James Moody and Douglas R. White,
980  2003, in Structural Cohesion and Embeddedness: A Hierarchical
981  Conception of Social Groups American Sociological Review 68(1):1-25
982- Biconnected components and articulation points.
983- R interface: better printing of attributes.
984- R interface: graph attributes can be used via '$'.
985
986Bug fixed:
987- Erdos-Renyi random graph generators rewritten.
988
989# igraph 0.4.4
990
991Released October 3, 2007
992
993This release should work seamlessly with the new R 2.6.0 version.
994Some other bugs were also fixed:
995- A bug was fixed in the Erdos-Renyi graph generator, which sometimes
996  added an extra vertex.
997
998# igraph 0.4.3
999
1000Released August 13, 2007
1001
1002The next one in the sequence of bugfix releases. Thanks to many people
1003sending bug reports. Here are the changes:
1004- Some memory leaks removed when using attributes from R or Python.
1005- GraphML parser: entities and character data in multiple chunks are
1006  now handled correctly.
1007- A bug corrected in edge betweenness community structure detection,
1008  it failed if called many times from the same program/session.
1009- Edge betweeness community structure: handle unconnected graphs properly.
1010- Fixed bug related to fast greedy community detection in unconnected graphs.
1011- Use a different kind of parser (Push) for reading GraphML
1012  files. This is almost invisible for users but fixed a
1013  nondeterministic bug when reading in GraphML files.
1014- R interface: plot now handles properly if called with a vector as
1015  the edge.width argument for directed graphs.
1016- R interface: bug (typo) corrected for walktrap.community and
1017  weighted graphs.
1018
1019# igraph 0.4.2
1020
1021Released June 7, 2007
1022
1023This is another bugfix release, as there was a serious bug in the
1024R package of the previous version: it could not read and write graphs
1025to files in any format under MS Windows.
1026
1027Some other bits added:
1028- circular Reingold-Tilford layout generator for trees
1029- corrected a bug, Pajek files are written properly under MS Windows now.
1030- arrow.size graphical edge parameter added in the R interface.
1031
1032# igraph 0.4.1
1033
1034Released May 23, 2007
1035
1036This is a minor release, it corrects a number of bugs, mostly in the
1037R package.
1038
1039# igraph 0.4
1040
1041Released May 21, 2007
1042
1043The major new additions in this release is a bunch of community
1044detection algorithms and support for the GML file format. Here
1045is the complete list of changes:
1046
1047## New in the R interface
1048
1049- as the internal representation changed, graphs stored with 'save'
1050  with an older igraph version cannot be read back with the new
1051  version reliably.
1052- neighbors returns ordered lists
1053- is.loop and is.multiple were added
1054
1055- topological sorting
1056- VF2 isomorphism algorithm
1057- support for reading graphs from the Graph Database for isomorphism
1058- graph.mincut can calculate the actual minimum cut
1059- girth calculation added, thanks to Keith Briggs
1060- support for reading and writing GML files
1061
1062- Walktrap community detection algorithm added, thanks to Matthieu Latapy
1063  and Pascal Pons
1064- edge betweenness based community detection algorithm added
1065- fast greedy algorithm for community detection by Clauset et al. added
1066  thanks to Aaron Clauset for sharing his code
1067- leading eigenvector community detection algorithm by Mark Newman added
1068- functions for creating dendrograms from the output of the
1069  community detection algorithms added
1070- community.membership supporting function added, creates
1071  a membership vector from a community structure merge tree
1072- modularity calculation added
1073
1074- graphics parameter handling is completely rewritten, uniform handling
1075  of colors and fonts, make sure you read ?igraph.plotting
1076- new plotting parameter for edges: arrow.mode
1077- a bug corrected when playing a nonlinear barabasi.game
1078- better looking plotting in 3d using rglplot: edges are 3d too
1079- rglplot layout is allowed to be two dimensional now
1080- rglplot suspends updates while drawing, this makes it faster
1081- loop edges are correctly plotted by all three plotting functions
1082
1083- better printing of attributes when printing graphs
1084- summary of a graph prints attribute names
1085- is.igraph rewritten to make it possible to inherit from the 'igraph' class
1086- somewhat better looking progress meter for functions which support it
1087
1088## Others
1089
1090- many functions benefit from the new internal representation and are
1091  faster now: transitivity, reciprocity, graph operator functions like
1092  intersection and union, etc.
1093
1094## Bugs corrected
1095
1096- corrected a bug when reading Pajek files: directed graphs were read
1097  as undirected
1098
1099# igraph 0.3.2
1100
1101Released Dec 19, 2006
1102
1103This is a new major release, it contains many new things:
1104
1105## Changes in the R interface
1106
1107- bonpow function ported from SNA to calculate Bonacich power centrality
1108- get.adjacency supports attributes now, this means that it sets the
1109  colnames  and rownames attributes and can return attribute values in
1110  the matrix instead of 0/1
1111- grg.game, geometric random graphs
1112- graph.density, graph density calculation
1113- edge and vertex attributes can be added easily now when added new
1114  edges with add.edges or new vertices with add.vertices
1115- graph.data.frame creates graph from data frames, this can be used to
1116  create graphs with edge attributes easily
1117- plot.igraph and tkplot can plot self-loop edges now
1118- graph.edgelist to create a graph from an edge list, can also handle
1119  edge lists with symbolic names
1120- get.edgelist has now a 'names' argument and can return symbolic
1121  vertex names instead of vertex ids, by default id uses the 'name'
1122  vertex attribute is returned
1123- printing graphs on screen also prints symbolic symbolic names
1124  (the 'name' attribute if present)
1125- maximum flow and minimum cut functions: graph.maxflow, graph.mincut
1126- vertex and edge connectivity: edge.connectivity, vertex.connectivity
1127- edge and vertex disjoint paths: edge.disjoint.paths,
1128  vertex.disjoint.paths
1129- White's cohesion and adhesion measure: graph.adhesion, graph.cohesion
1130- dimacs file format added
1131- as.directed handles attributes now
1132- constraint corrected, it handles weighted graphs as well now
1133- weighted attribute to graph.adjacency
1134- spinglass-based community structure detection, the Joerg Reichardt --
1135  Stefan Bornholdt algorithm added: spinglass.community
1136- graph.extended.chordal.ring, extended chordal ring generation
1137- no.clusters calculates the number of clusters without calculating
1138  the clusters themselves
1139- minimum spanning tree functions updated to keep attributes
1140- transitivity can calculate local transitivity as well
1141- neighborhood related functions added: neighborhood,
1142  neighborhood.size, graph.neighborhood
1143- new graph generators based on vertex types: preference.game and
1144  asymmetric.preference.game
1145
1146## Bugs corrected
1147
1148- attribute handling bug when deleting edges corrected
1149- GraphML escaping and NaN handling corrected
1150- bug corrected to make it possible compile the R package without the
1151  libxml2 library
1152- a bug in Erdos-Renyi graph generation corrected: it had problems
1153  with generating large directed graphs
1154- bug in constraint calculation corrected, it works well now
1155- fixed memory leaks in the GraphML reader
1156- error handling bug corrected in the GraphML reader
1157- bug corrected in R version of graph.laplacian when normalized
1158  Laplacian is requested
1159- memory leak corrected in get.all.shortest.paths in the R package
1160
1161# igraph 0.2.1
1162
1163Released Aug 23, 2006
1164
1165This is a bug-fix release. Bugs fixed:
1166- reciprocity corrected to avoid segfaults
1167- some docs updates
1168- various R package updates to make it conform to the CRAN rules
1169
1170# igraph 0.2
1171
1172Released Aug 18, 2006
1173
1174Release time at last! There are many new things in igraph 0.2, the
1175most important ones:
1176- reading writing Pajek and GraphML formats with attributes
1177  (not all Pajek and GraphML files are supported, see documentation
1178  for details)
1179- the RANDEDU fast motif search algorithm is implemented
1180- many new graph generators, both games and regular graphs
1181- many new structural properties: transitivity, reciprocity, etc.
1182- graph operators: union, intersection, difference, structural holes, etc.
1183- conversion between directed and undirected graphs
1184- new layout algorithms for trees and large graphs, 3D layouts
1185and many more.
1186
1187New things specifically in the R package:
1188- support for CTRL+C
1189- new functions: Graph Laplacian, Burt's constraint, etc.
1190- vertex/edge sequences totally rewritten, smart indexing (see manual)
1191- new R manual and tutorial: `Network Analysis with igraph', still
1192  under development but useful
1193- very basic 3D plotting using OpenGL
1194
1195Although this release was somewhat tested on Linux, MS Windows, Mac
1196OSX, Solaris 8 and FreeBSD, no heavy testing was done, so it might
1197contain bugs, and we kindly ask you to send bug reports to make igraph
1198better.
1199
1200# igraph 0.1
1201
1202Released Jan 30, 2006
1203
1204After about a year of development this is the first "official" release
1205of the igraph library. This release should be considered as beta
1206software, but it should be useful in general. Please send your
1207questions and comments.
1208
1209
1210