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