<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://igraph.org/feed.xml" rel="self" type="application/atom+xml" /><link href="https://igraph.org/" rel="alternate" type="text/html" /><updated>2026-04-08T09:03:26+00:00</updated><id>https://igraph.org/feed.xml</id><title type="html">igraph – the network analysis package</title><entry><title type="html">C/igraph 1.0.1</title><link href="https://igraph.org/2025/12/26/igraph-1.0.1-c.html" rel="alternate" type="text/html" title="C/igraph 1.0.1" /><published>2025-12-26T00:00:00+00:00</published><updated>2025-12-26T00:00:00+00:00</updated><id>https://igraph.org/2025/12/26/igraph-1.0.1-c</id><content type="html" xml:base="https://igraph.org/2025/12/26/igraph-1.0.1-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 1.0.1, the first bugfix release of the 1.0 series, has arrived,
with bug fixes and documentation improvements.</p>

<p>As usual, the source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/1.0.1">the GitHub releases page</a>.</p>

<p>A summary of changes in 1.0.1 is below.</p>

<!--more-->

<h3 id="fixed">Fixed</h3>

<ul>
  <li>Eliminated references to <code class="language-plaintext highlighter-rouge">exit()</code> from the igraph shared library. These were accidentally introduced into igraph 1.0.0 through Qhull and Infomap.</li>
  <li>Eliminated references to <code class="language-plaintext highlighter-rouge">std::cout</code> from the igraph shared library, as required by CRAN.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">igraph_hub_and_authority_scores()</code> that printed a warning about zero entries in the result even when the number of zeros was below the threshold used in the corresponding checks.</li>
  <li>Fixed compilation and tests when Infomap support is disabled.</li>
  <li>Fixed rare compilation issues on some Apple systems with some non-standard compilers due to incompatibilities between defining the <code class="language-plaintext highlighter-rouge">_POSIX_C_SOURCE</code> feature test macro and standard C++ headers. Now <code class="language-plaintext highlighter-rouge">_DARWIN_C_SOURCE</code> is defined when compiling igraph on Apple systems.</li>
  <li>Fixed inconsistent libf2c prototypes for <code class="language-plaintext highlighter-rouge">s_copy()</code> and <code class="language-plaintext highlighter-rouge">s_cat()</code>. This restores compatibility with emscripten.</li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>Documentation improvements.</li>
  <li>nanoflann was updated to version 1.9.0</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 1.0.1, the first bugfix release of the 1.0 series, has arrived, with bug fixes and documentation improvements.]]></summary></entry><entry><title type="html">C/igraph 1.0.0</title><link href="https://igraph.org/2025/09/20/igraph-1.0.0-c.html" rel="alternate" type="text/html" title="C/igraph 1.0.0" /><published>2025-09-20T00:00:00+00:00</published><updated>2025-09-20T00:00:00+00:00</updated><id>https://igraph.org/2025/09/20/igraph-1.0.0-c</id><content type="html" xml:base="https://igraph.org/2025/09/20/igraph-1.0.0-c.html"><![CDATA[<p>Nearly twenty years after the first igraph release, igraph 1.0 has finally arrived. This release focuses on providing a stable and more consistent interface that users and downstream maintainers can rely on with confidence, as well as adding new features that required API-breaking changes. There is now an official versioning policy, see <a href="https://github.com/igraph/igraph/blob/1.0.0/VERSIONING.md"><code class="language-plaintext highlighter-rouge">VERSIONING.md</code></a>.</p>

<p>As usual, the source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/1.0.0">the GitHub releases page</a>.</p>

<p>A summary of changes in 1.0.0 is below.</p>

<h3 id="highlights">Highlights</h3>

<ul>
  <li>A more consistent and more predictable API.</li>
  <li>Explicit versioning policy.</li>
  <li>Several random graph generators, including the Erdős-Rényi generators, can now produce graphs with multi-edges.</li>
  <li>Several functions that can generate a large number of results (cliques, cycles, etc.) now have a feature to limit the number of returned results, or to return a single result only.</li>
  <li>Functionality for generating several kinds of spatial networks.</li>
</ul>

<!--more-->

<h3 id="breaking-changes">Breaking changes</h3>

<p>This section lists API-breaking changes in this version, and provides guidance on adapting code written for igraph 0.10.x.</p>

<h4 id="general-changes">General changes</h4>

<ul>
  <li>igraph now requires a C++ compiler that supports the C++14 standard.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_setup()</code> is now recommended to be called before using the library. This function may gain essential functions in the future. See the “Added” section below for details.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_integer_t</code> was renamed to <code class="language-plaintext highlighter-rouge">igraph_int_t</code>, but <code class="language-plaintext highlighter-rouge">igraph_integer_t</code> is kept as an alias and it will remain available for at least the next major version. Library headers and source code uses <code class="language-plaintext highlighter-rouge">igraph_int_t</code> from now on.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_rng_set_default()</code> now returns a pointer to the previous default RNG. Furthermore, this function now only stores a pointer to the <code class="language-plaintext highlighter-rouge">igraph_rng_t</code> struct passed to it, instead of copying the struct. Thus the <code class="language-plaintext highlighter-rouge">igraph_rng_t</code> object must continue to exist for as long as it is used as the default RNG.</li>
  <li>Interruption handlers do not take a <code class="language-plaintext highlighter-rouge">void *</code> argument anymore; this is relevant to maintainers of higher-level interfaces only.</li>
  <li>Interruption handlers now return an <code class="language-plaintext highlighter-rouge">igraph_bool_t</code> instead of an <code class="language-plaintext highlighter-rouge">igraph_error_t</code>; the returned value must be true if the calculation has to be interrupted and false otherwise.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_status()</code>, <code class="language-plaintext highlighter-rouge">igraph_statusf()</code> and their macro versions (<code class="language-plaintext highlighter-rouge">IGRAPH_STATUS()</code> and <code class="language-plaintext highlighter-rouge">IGRAPH_STATUSF()</code>) do not convert error codes to <code class="language-plaintext highlighter-rouge">IGRAPH_INTERRUPTED</code> any more. Any error code returned from the status handler function is forwarded intact to the caller. If you want to trigger the interruption of the current calculation from the status handler without reporting an error, report <code class="language-plaintext highlighter-rouge">IGRAPH_INTERRUPTED</code> explicitly. It is the responsibility of higher-level interfaces to handle this error code appropriately.</li>
  <li>The <code class="language-plaintext highlighter-rouge">RNG_BEGIN()</code> and <code class="language-plaintext highlighter-rouge">RNG_END()</code> macros were removed. You are now responsible for seeding the RNG before using any igraph function that may use random numbers by calling <code class="language-plaintext highlighter-rouge">igraph_rng_seed(igraph_rng_default(), ...)</code>, or by simply ensuring that <code class="language-plaintext highlighter-rouge">igraph_setup()</code> was called before the first use of the library.</li>
  <li>Projects that depend on igraph must only include the <code class="language-plaintext highlighter-rouge">&lt;igraph.h&gt;</code> header. While an igraph installation includes several sub-headers, these are for organizational purposes only, and their contents may change without notice. Only <code class="language-plaintext highlighter-rouge">#include &lt;igraph.h&gt;</code> is supported.</li>
</ul>

<h4 id="error-codes">Error codes</h4>

<ul>
  <li>The <code class="language-plaintext highlighter-rouge">IGRAPH_EINVEVECTOR</code> error code was removed; <code class="language-plaintext highlighter-rouge">igraph_create()</code> and <code class="language-plaintext highlighter-rouge">igraph_add_edges()</code> that used to return this error code for invalid edge vectors will now return <code class="language-plaintext highlighter-rouge">IGRAPH_EINVAL</code> instead.</li>
  <li>The <code class="language-plaintext highlighter-rouge">IGRAPH_NONSQUARE</code> error code was removed; functions that used this error code now return <code class="language-plaintext highlighter-rouge">IGRAPH_EINVAL</code> instead when encountering a non-square matrix.</li>
  <li>The <code class="language-plaintext highlighter-rouge">IGRAPH_EGLP</code> error code and all other GLP-specific error codes (starting with <code class="language-plaintext highlighter-rouge">IGRAPH_GLP_</code>) were removed; functions that used this error code now return <code class="language-plaintext highlighter-rouge">IGRAPH_FAILURE</code> instead, providing more details in the message associated to the error code.</li>
  <li>The <code class="language-plaintext highlighter-rouge">IGRAPH_ELAPACK</code> error code was removed; functions that used this error code now return <code class="language-plaintext highlighter-rouge">IGRAPH_FAILURE</code> instead, providing more details in the message associated to the error code.</li>
  <li>The <code class="language-plaintext highlighter-rouge">IGRAPH_CPUTIME</code> error code was removed in favour of the interruption mechanism built into igraph.</li>
  <li>The unused <code class="language-plaintext highlighter-rouge">IGRAPH_EDIVZERO</code> and <code class="language-plaintext highlighter-rouge">IGRAPH_EATTRIBUTES</code> error codes were removed with no replacement.</li>
  <li>The deprecated error code <code class="language-plaintext highlighter-rouge">IGRAPH_ENEGLOOP</code> was removed. Use <code class="language-plaintext highlighter-rouge">IGRAPH_ENEGCYCLE</code> instead. The underlying numerical value is the same as it was for <code class="language-plaintext highlighter-rouge">IGRAPH_ENEGLOOP</code>.</li>
  <li>ARPACK-specific error codes (starting with <code class="language-plaintext highlighter-rouge">IGRAPH_ARPACK_...</code>) were replaced with a single <code class="language-plaintext highlighter-rouge">IGRAPH_EARPACK</code> error code. Details about the underlying ARPACK failure are provided in the error message.</li>
  <li>A new error code called <code class="language-plaintext highlighter-rouge">IGRAPH_EINVEID</code> was added for cases when an invalid edge ID was encountered in an edge ID vector.</li>
</ul>

<h4 id="core-data-structures">Core data structures</h4>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_strvector_push_back_len()</code> now takes a length parameter of <code class="language-plaintext highlighter-rouge">size_t</code> instead of <code class="language-plaintext highlighter-rouge">igraph_int_t</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_strvector_print()</code> no longer takes a file parameter. Use <code class="language-plaintext highlighter-rouge">igraph_strvector_fprint()</code> to print to a file.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_reverse()</code> no longer returns an error code.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_shuffle()</code> no longer returns an error code.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_swap()</code> and <code class="language-plaintext highlighter-rouge">igraph_matrix_swap()</code> no longer return an error code.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_list_swap()</code> and <code class="language-plaintext highlighter-rouge">igraph_graph_list_swap()</code> no longer return an error code.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_swap_elements()</code> no longer returns an error code.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_list_swap_elements()</code> and <code class="language-plaintext highlighter-rouge">igraph_graph_list_swap_elements()</code> no longer return an error code.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_matrix_copy_to()</code> gained an <code class="language-plaintext highlighter-rouge">igraph_matrix_storage_t storage</code> parameter that specifies whether the data should be written in column-major or row-major format.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_view()</code>, <code class="language-plaintext highlighter-rouge">igraph_matrix_view()</code>, <code class="language-plaintext highlighter-rouge">igraph_matrix_view_from_vector()</code>, and <code class="language-plaintext highlighter-rouge">igraph_vector_ptr_view()</code> now return their result as a return value instead of an output parameter. This allows assigning the value to a <code class="language-plaintext highlighter-rouge">const</code> variable without triggering warnings with modern compilers.</li>
</ul>

<h4 id="attribute-handling">Attribute handling</h4>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_attribute_handler_t</code> members that formerly took an untyped <code class="language-plaintext highlighter-rouge">igraph_vector_ptr_t</code> argument are now taking a typed <code class="language-plaintext highlighter-rouge">igraph_attribute_record_list_t</code> argument instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">IGRAPH_ATTRIBUTE_DEFAULT</code> value of the <code class="language-plaintext highlighter-rouge">igraph_attribute_type_t</code> enum was removed.</li>
  <li>The <code class="language-plaintext highlighter-rouge">gettype</code> member of <code class="language-plaintext highlighter-rouge">igraph_attribute_table_t</code> was renamed to <code class="language-plaintext highlighter-rouge">get_type</code> for consistency with the naming scheme of other struct members.</li>
  <li>Attribute table members that retrieve graph, vertex or edge attributes must not clear the incoming result vector any more; results must be appended to the end of the provided result vector instead.</li>
  <li>The <code class="language-plaintext highlighter-rouge">value</code> member of <code class="language-plaintext highlighter-rouge">igraph_attribute_record_t</code> is now a union that can be used to formally treat the associated pointer as an <code class="language-plaintext highlighter-rouge">igraph_vector_t *</code>, <code class="language-plaintext highlighter-rouge">igraph_strvector_t *</code> or <code class="language-plaintext highlighter-rouge">igraph_vector_bool_t *</code>.</li>
</ul>

<h4 id="core-graph-manipulation">Core graph manipulation</h4>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_delete_vertices_map()</code> (formerly called <code class="language-plaintext highlighter-rouge">igraph_delete_vertices_idx()</code>) and <code class="language-plaintext highlighter-rouge">igraph_induced_subgraph_map()</code> now use <code class="language-plaintext highlighter-rouge">-1</code> to represent unmapped vertices in the returned forward mapping vector and they do not offset vertex indices by 1 any more. Note that the inverse map always behaved this way, this change makes the two mappings consistent.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_edges()</code> gained a new <code class="language-plaintext highlighter-rouge">igraph_bool_t bycol</code> argument that determines the order in which the edges are returned. <code class="language-plaintext highlighter-rouge">bycol = false</code> reproduces the existing behaviour, while <code class="language-plaintext highlighter-rouge">bycol = true</code> returns the edges suitable for a matrix stored in column-wise order.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_neighbors()</code> and <code class="language-plaintext highlighter-rouge">igraph_vs_adj()</code> gained two extra arguments, <code class="language-plaintext highlighter-rouge">igraph_loops_t loops</code> and <code class="language-plaintext highlighter-rouge">igraph_bool_t multiple</code> to specify what to do with loop and multiple edges. This makes their interfaces consistent with <code class="language-plaintext highlighter-rouge">igraph_adjlist_init()</code>. Use <code class="language-plaintext highlighter-rouge">loops = IGRAPH_LOOPS_TWICE</code> and <code class="language-plaintext highlighter-rouge">multiple = true</code> to reproduce the previous behavior.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_incident()</code> and <code class="language-plaintext highlighter-rouge">igraph_es_incident()</code> gained an extra <code class="language-plaintext highlighter-rouge">igraph_loops_t loops</code> argument to specify what to do with loop edges. This makes their interfaces consistent with <code class="language-plaintext highlighter-rouge">igraph_inclist_init()</code>. Use <code class="language-plaintext highlighter-rouge">loops = IGRAPH_LOOPS_TWICE</code> to reproduce the previous behavior.</li>
  <li>The <code class="language-plaintext highlighter-rouge">igraph_multiple_t</code> enum type was removed from the public API as it was essentially a Boolean. The symbolic constants <code class="language-plaintext highlighter-rouge">IGRAPH_MULTIPLE</code> (same as <code class="language-plaintext highlighter-rouge">true</code>) and <code class="language-plaintext highlighter-rouge">IGRAPH_NO_MULTIPLE</code> (same as <code class="language-plaintext highlighter-rouge">false</code>) were kept to improve readability of code written directly in C.</li>
</ul>

<h4 id="basic-graph-properties">Basic graph properties</h4>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_density()</code> now takes an optional <code class="language-plaintext highlighter-rouge">weights</code> parameter.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_is_simple()</code> gained an extra <code class="language-plaintext highlighter-rouge">igraph_bool_t</code> argument that decides whether edge directions should be considered. Directed graphs with a mutual edge pair are treated as non-simple if this argument is set to <code class="language-plaintext highlighter-rouge">IGRAPH_UNDIRECTED</code> (which treats the graph as if it was undirected).</li>
  <li>The type of the <code class="language-plaintext highlighter-rouge">loops</code> argument of <code class="language-plaintext highlighter-rouge">igraph_adjlist_init_complementer()</code>, <code class="language-plaintext highlighter-rouge">igraph_centralization_degree()</code>, <code class="language-plaintext highlighter-rouge">igraph_centralization_degree_tmax()</code>, <code class="language-plaintext highlighter-rouge">igraph_degree()</code>, <code class="language-plaintext highlighter-rouge">igraph_maxdegree()</code>, <code class="language-plaintext highlighter-rouge">igraph_sort_vertex_ids_by_degree()</code> and <code class="language-plaintext highlighter-rouge">igraph_strength()</code> was changed to <code class="language-plaintext highlighter-rouge">igraph_loops_t</code> from <code class="language-plaintext highlighter-rouge">igraph_bool_t</code>, allowing finer-grained control about how loop edges are treated. Pass <code class="language-plaintext highlighter-rouge">IGRAPH_LOOPS_TWICE</code> and <code class="language-plaintext highlighter-rouge">IGRAPH_NO_LOOPS</code> to reproduce the previous behaviour of <code class="language-plaintext highlighter-rouge">true</code> and <code class="language-plaintext highlighter-rouge">false</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_get_biadjacency()</code> now takes a <code class="language-plaintext highlighter-rouge">weights</code> parameter, and can optionally create weighted biadjacency matrices.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_adjacency()</code> now treats <code class="language-plaintext highlighter-rouge">IGRAPH_LOOPS_TWICE</code> as <code class="language-plaintext highlighter-rouge">IGRAPH_LOOPS_ONCE</code> when the mode is <code class="language-plaintext highlighter-rouge">IGRAPH_ADJ_DIRECTED</code>, <code class="language-plaintext highlighter-rouge">IGRAPH_ADJ_UPPER</code> or <code class="language-plaintext highlighter-rouge">IGRAPH_ADJ_LOWER</code>. For directed graphs, this is for the sake of consistency with the rest of the library where <code class="language-plaintext highlighter-rouge">IGRAPH_LOOPS_TWICE</code> is considered for undirected graphs only. For the “upper” and “lower” modes, double-counting the diagonal makes no sense because the double-counting artifact appears when you add the <em>transpose</em> of an upper (or lower) diagonal matrix on top of the matrix itself. See Github issue #2501 for more context.</li>
</ul>

<h4 id="graph-generators">Graph generators</h4>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_barabasi_game()</code>, <code class="language-plaintext highlighter-rouge">igraph_barabasi_aging_game()</code>, <code class="language-plaintext highlighter-rouge">igraph_recent_degree_game()</code> and <code class="language-plaintext highlighter-rouge">igraph_recent_degree_aging_game()</code> no longer interprets an empty <code class="language-plaintext highlighter-rouge">outseq</code> vector as a missing out-degree sequence. Pass <code class="language-plaintext highlighter-rouge">NULL</code> if you don’t wish to specify an out-degree sequence.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_degree_sequence_game()</code> no longer interprets an empty in-degree vector as a request for generating undirected graphs. To generate undirected graphs, pass <code class="language-plaintext highlighter-rouge">NULL</code> for in-degrees.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_erdos_renyi_game_gnm()</code> uses a <code class="language-plaintext highlighter-rouge">igraph_edge_type_sw_t allowed_edge_types</code> parameter instead of <code class="language-plaintext highlighter-rouge">igraph_bool_t loops</code>, and can now uniformly sample not only simple graphs but also multigraphs. It also gained an <code class="language-plaintext highlighter-rouge">edge_labeled</code> Boolean parameter which controls whether to sample from the set of ordered edge lists (equivalent to <code class="language-plaintext highlighter-rouge">igraph_iea_game()</code> for multigraphs).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_erdos_renyi_game_gnp()</code> uses a <code class="language-plaintext highlighter-rouge">igraph_edge_type_sw_t allowed_edge_types</code> parameter instead of <code class="language-plaintext highlighter-rouge">igraph_bool_t loops</code>, and can now sample multigraphs from a maximum entropy model with a prescribed <em>expected</em> edge multiplicity. It also gained an <code class="language-plaintext highlighter-rouge">edge_labeled</code> Boolean parameter which controls whether to sample from the set of ordered edge lists.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_bipartite_game_gnm()</code> gained an <code class="language-plaintext highlighter-rouge">igraph_edge_type_sw_t allowed_edge_types</code> parameter, and can now uniformly sample not only simple graphs but also multigraphs. It also gained an <code class="language-plaintext highlighter-rouge">edge_labeled</code> Boolean parameter which controls whether to sample from the set of ordered edge lists (equivalent to <code class="language-plaintext highlighter-rouge">igraph_bipartite_iea_game()</code> for multigraphs).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_bipartite_game_gnp()</code> gained an <code class="language-plaintext highlighter-rouge">igraph_edge_type_sw_t allowed_edge_types</code> parameter, and can now sample multigraphs from a maximum entropy model with a prescribed <em>expected</em> edge multiplicity. It also gained an <code class="language-plaintext highlighter-rouge">edge_labeled</code> Boolean parameter which controls whether to sample from the set of ordered edge lists.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_lcf()</code> was renamed to <code class="language-plaintext highlighter-rouge">igraph_lcf_small()</code> and <code class="language-plaintext highlighter-rouge">igraph_lcf_vector()</code> was renamed to <code class="language-plaintext highlighter-rouge">igraph_lcf()</code>. Now <code class="language-plaintext highlighter-rouge">igraph_lcf()</code> takes shifts as a vector input, while <code class="language-plaintext highlighter-rouge">igraph_lcf_small()</code> accepts a shorthand notation where shifts are given as a variable number of function arguments.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_sbm_game()</code> uses an <code class="language-plaintext highlighter-rouge">igraph_edge_type_sw_t allowed_edge_types</code> parameter instead of <code class="language-plaintext highlighter-rouge">igraph_bool_t loops</code> and now supports generating graphs with multi-edges. The parameter determining the total number of vertices (<code class="language-plaintext highlighter-rouge">n</code>) was removed as it was redundant.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_rewire_edges()</code> uses an <code class="language-plaintext highlighter-rouge">igraph_edge_type_sw_t allowed_edge_types</code> parameter instead of <code class="language-plaintext highlighter-rouge">loops</code> and <code class="language-plaintext highlighter-rouge">multiple</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_rewire()</code> now takes an <code class="language-plaintext highlighter-rouge">igraph_edge_type_sw_t allowed_edge_types</code> parameter to specify whether to create self-loops. The <code class="language-plaintext highlighter-rouge">igraph_rewiring_t</code> enum type was removed. Instead of the old <code class="language-plaintext highlighter-rouge">IGRAPH_REWIRING_SIMPLE</code>, use <code class="language-plaintext highlighter-rouge">IGRAPH_SIMPLE_SW</code>. Instead of the old <code class="language-plaintext highlighter-rouge">IGRAPH_REWIRING_SIMPLE_LOOPS</code>, use <code class="language-plaintext highlighter-rouge">IGRAPH_LOOPS_SW</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_rewire()</code> now takes an optional <code class="language-plaintext highlighter-rouge">igraph_rewiring_stats_t *</code> output argument. You can pass the appropriate struct there to find out the number of successful swaps during the rewiring operation.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_watts_strogatz_game()</code> uses an <code class="language-plaintext highlighter-rouge">igraph_edge_type_sw_t allowed_edge_types</code> parameter instead of <code class="language-plaintext highlighter-rouge">loops</code> and <code class="language-plaintext highlighter-rouge">multiple</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_static_fitness_game()</code> uses an <code class="language-plaintext highlighter-rouge">igraph_edge_type_sw_t allowed_edge_types</code> parameter instead of <code class="language-plaintext highlighter-rouge">loops</code> and <code class="language-plaintext highlighter-rouge">multiple</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_static_power_law_game()</code> uses an <code class="language-plaintext highlighter-rouge">igraph_edge_type_sw_t allowed_edge_types</code> parameter instead of <code class="language-plaintext highlighter-rouge">loops</code> and <code class="language-plaintext highlighter-rouge">multiple</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_correlated_game()</code> now takes the graph being constructed as the <em>first</em> argument to remain consistent with other graph constructors. Earlier versions used to take the original graph as the first argument.</li>
  <li>The semantics of the <code class="language-plaintext highlighter-rouge">permutation</code> argument of <code class="language-plaintext highlighter-rouge">igraph_correlated_game()</code> and <code class="language-plaintext highlighter-rouge">igraph_correlated_pair_game()</code> has changed: the i-th element of the vector now contains the index of the <em>original</em> vertex that will be mapped to the i-th vertex in the new graph. This is consistent with how <code class="language-plaintext highlighter-rouge">igraph_permute_vertices()</code> operates (which has also changed in igraph 1.0).</li>
</ul>

<h4 id="paths-and-cycles">Paths and cycles</h4>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_distances()</code>, <code class="language-plaintext highlighter-rouge">igraph_distances_cutoff()</code>, <code class="language-plaintext highlighter-rouge">igraph_get_shortest_path()</code>, <code class="language-plaintext highlighter-rouge">igraph_get_shortest_paths()</code> and <code class="language-plaintext highlighter-rouge">igraph_get_all_shortest_paths()</code> gained a <code class="language-plaintext highlighter-rouge">weights</code> argument. The functions now automatically select the appropriate implementation (unweighted, Dijkstra, Bellman-Ford or Johnson) algorithm based on whether weights are present and whether there are negative weights or not. You can still call the individual methods by their more specific names.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_distances_johnson()</code> now takes an <code class="language-plaintext highlighter-rouge">igraph_neimode_t mode</code> parameter to determine in which direction paths should be followed.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_similarity_jaccard()</code> and <code class="language-plaintext highlighter-rouge">igraph_similarity_dice()</code> now take two sets of vertices to create vertex pairs of, instead of one.</li>
  <li>The weighted variants of <code class="language-plaintext highlighter-rouge">igraph_diameter()</code>, <code class="language-plaintext highlighter-rouge">igraph_pseudo_diameter()</code>, <code class="language-plaintext highlighter-rouge">igraph_radius()</code>, <code class="language-plaintext highlighter-rouge">igraph_graph_center()</code>, <code class="language-plaintext highlighter-rouge">igraph_eccentricity()</code> and <code class="language-plaintext highlighter-rouge">igraph_average_path_length()</code> were merged into the undirected ones by adding a new argument named <code class="language-plaintext highlighter-rouge">weights</code> in the second position.</li>
  <li>The <code class="language-plaintext highlighter-rouge">weights</code> parameter of <code class="language-plaintext highlighter-rouge">igraph_average_path_length()</code>, <code class="language-plaintext highlighter-rouge">igraph_global_efficiency()</code>, <code class="language-plaintext highlighter-rouge">igraph_local_efficiency()</code> and <code class="language-plaintext highlighter-rouge">igraph_average_local_efficiency()</code> were moved to the second position, after the <code class="language-plaintext highlighter-rouge">graph</code> itself, for consistency with other functions.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_get_all_simple_paths()</code> returns its results in an integer vector list (<code class="language-plaintext highlighter-rouge">igraph_vector_int_list_t</code>) instead of a single integer vector.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_get_all_simple_paths()</code> now has an additional parameter that allows restricting paths by minimum length as well, and its <code class="language-plaintext highlighter-rouge">mode</code> parameter was moved to before the path length limit parameters.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_get_all_simple_paths()</code> gained a <code class="language-plaintext highlighter-rouge">max_results</code> parameter to limit the number of returned results. Pass <code class="language-plaintext highlighter-rouge">1</code> to return a single result, or <code class="language-plaintext highlighter-rouge">IGRAPH_UNLIMITED</code> to return all results.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_simple_cycles()</code> gained a <code class="language-plaintext highlighter-rouge">max_results</code> parameter to limit the number of returned results. Pass <code class="language-plaintext highlighter-rouge">1</code> to return a single result, or <code class="language-plaintext highlighter-rouge">IGRAPH_UNLIMITED</code> to return all results.</li>
</ul>

<h4 id="community-detection">Community detection</h4>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_edge_betweenness()</code> now takes both a <code class="language-plaintext highlighter-rouge">weights</code> and a <code class="language-plaintext highlighter-rouge">lengths</code> parameter. Edge weights (interpreted as connection strengths) are used to divide betweenness scores before selecting them for removal as well as for the modularity computation. Edge lengths are used for defining shortest path lengths during the betweenness computation. This fixes issues #2229 and #1040.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_infomap()</code> now supports regularization and gained the <code class="language-plaintext highlighter-rouge">is_regularized</code> and <code class="language-plaintext highlighter-rouge">regularization_strength</code> parameters.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_label_propagation()</code> changed signature to allow specification of label propagation algorithm (LPA) variants. A new fast label propagation variant was added.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_leiden()</code> now takes two <code class="language-plaintext highlighter-rouge">vertex_out_weights</code> and <code class="language-plaintext highlighter-rouge">vertex_in_weights</code> parameters in order to support directed graphs, instead of the previous single <code class="language-plaintext highlighter-rouge">node_weights</code> parameter. To obtain the old behavior for undirected graphs, pass the vertex weights as <code class="language-plaintext highlighter-rouge">vertex_out_weights</code> and set <code class="language-plaintext highlighter-rouge">vertex_in_weights</code> to <code class="language-plaintext highlighter-rouge">NULL</code>.</li>
  <li>The <code class="language-plaintext highlighter-rouge">history</code> parameter of <code class="language-plaintext highlighter-rouge">igraph_community_leading_eigenvector()</code> is now a pointer to an <code class="language-plaintext highlighter-rouge">igraph_vector_int_t</code> instead of an <code class="language-plaintext highlighter-rouge">igraph_vector_t</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_optimal_modularity()</code> now takes a <code class="language-plaintext highlighter-rouge">resolution</code> parameter and its <code class="language-plaintext highlighter-rouge">weight</code> parameter was moved to the second place.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_spinglass_single()</code> now uses <code class="language-plaintext highlighter-rouge">igraph_real_t</code> for its <code class="language-plaintext highlighter-rouge">inner_links</code> and <code class="language-plaintext highlighter-rouge">outer_links</code> output parameters, as these return not simply edge counts, but the sum of the weights of some edges.</li>
</ul>

<h4 id="isomorphism-functions-and-permutations">Isomorphism functions and permutations</h4>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_count_automorphisms()</code> has been renamed to <code class="language-plaintext highlighter-rouge">igraph_count_automorphisms_bliss()</code> because it has a BLISS-specific interface. A new <code class="language-plaintext highlighter-rouge">igraph_count_automorphisms()</code> function was added with a simplified interface that does not depend on BLISS.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_automorphism_group()</code> has been renamed to <code class="language-plaintext highlighter-rouge">igraph_automorphism_group_bliss()</code> because it has a BLISS-specific interface. A new <code class="language-plaintext highlighter-rouge">igraph_automorphism_group()</code> function was added with a simplified interface that does not depend on BLISS.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_canonical_permutation()</code> has been renamed to <code class="language-plaintext highlighter-rouge">igraph_canonical_permutation_bliss()</code> because it has a BLISS-specific interface. A new <code class="language-plaintext highlighter-rouge">igraph_canonical_permutation()</code> function was added with a simplified interface that does not depend on BLISS.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_subisomorphic_lad()</code> does not have a CPU time limit parameter any more. If you wish to stop the calculation from another thread or a higher level interface, use igraph’s interruption mechanism.</li>
  <li>The semantics of the <code class="language-plaintext highlighter-rouge">igraph_permute_vertices()</code> permutation argument has changed: the i-th element of the vector now contains the index of the <em>original</em> vertex that will be mapped to the i-th vertex in the new graph. This is now consistent with how other igraph functions treat permutations and vertex index vectors; for instance, you can now pass the result of <code class="language-plaintext highlighter-rouge">igraph_topological_sorting()</code> directly to <code class="language-plaintext highlighter-rouge">igraph_permute_vertices()</code> to obtain a new graph where the vertices are sorted topologically.</li>
  <li>As a consequence to the change in the semantics of the <code class="language-plaintext highlighter-rouge">igraph_permute_vertices()</code> permutation argument, the semantics of the permutations returned from <code class="language-plaintext highlighter-rouge">igraph_canonical_permutation()</code> and <code class="language-plaintext highlighter-rouge">igraph_canonical_permutation_bliss()</code> have also been inverted to maintain the invariant that the output of these functions can be fed into <code class="language-plaintext highlighter-rouge">igraph_permute_vertices()</code> directly.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_isoclass_subgraph()</code> now takes a parameter of type <code class="language-plaintext highlighter-rouge">igraph_vs_t vids</code> instead of <code class="language-plaintext highlighter-rouge">igraph_vector_int_t vids</code>. Apply <code class="language-plaintext highlighter-rouge">igraph_vss_vector()</code> to the vector of vertex IDs to convert it to an <code class="language-plaintext highlighter-rouge">igraph_vs_t</code>.</li>
</ul>

<h4 id="centralities">Centralities</h4>

<ul>
  <li>All betweenness functions got a <code class="language-plaintext highlighter-rouge">normalized</code> parameter to support normalizing the result by the number of vertex pairs in the graph. At the same time, their parameter ordering was standardized. The following functions are affected: <code class="language-plaintext highlighter-rouge">igraph_betweenness()</code>, <code class="language-plaintext highlighter-rouge">igraph_betweenness_cutoff()</code>, <code class="language-plaintext highlighter-rouge">igraph_edge_betweenness()</code>, <code class="language-plaintext highlighter-rouge">igraph_edge_betweenness_cutoff()</code>, <code class="language-plaintext highlighter-rouge">igraph_betweenness_subset()</code>, <code class="language-plaintext highlighter-rouge">igraph_edge_betweenness_subset()</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_edge_betweenness()</code> and <code class="language-plaintext highlighter-rouge">igraph_edge_betweenness_cutoff()</code> now have an <code class="language-plaintext highlighter-rouge">eids</code> parameter to return only a subset of results. This makes their interface consistent with other betweenness functions.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_eigenvector_centrality()</code>, <code class="language-plaintext highlighter-rouge">igraph_centralization_eigenvector_centrality()</code> and <code class="language-plaintext highlighter-rouge">igraph_centralization_eigenvector_centrality_tmax()</code> now use a <code class="language-plaintext highlighter-rouge">mode</code> parameter with possible values <code class="language-plaintext highlighter-rouge">IGRAPH_OUT</code>, <code class="language-plaintext highlighter-rouge">IGRAPH_IN</code> or <code class="language-plaintext highlighter-rouge">IGRAPH_ALL</code> to control how edge directions are considered. Previously they used a boolean <code class="language-plaintext highlighter-rouge">directed</code> parameter.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_eigenvector_centrality()</code>, <code class="language-plaintext highlighter-rouge">igraph_centralization_eigenvector_centrality()</code> and <code class="language-plaintext highlighter-rouge">igraph_centralization_eigenvector_centrality_tmax()</code> no longer have a <code class="language-plaintext highlighter-rouge">scale</code> parameter. The result is now always scaled so that the largest centrality value is 1.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_hub_and_authority_scores()</code> no longer has a <code class="language-plaintext highlighter-rouge">scale</code> parameter. The result is now always scaled so that the largest hub and authority scores are each 1.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_pagerank()</code>, <code class="language-plaintext highlighter-rouge">igraph_personalized_pagerank()</code> and <code class="language-plaintext highlighter-rouge">igraph_personalized_pagerank_vs()</code> had their parameter ordering standardized.</li>
</ul>

<h4 id="cliques-and-independent-sets">Cliques and independent sets</h4>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_cliques()</code>, <code class="language-plaintext highlighter-rouge">igraph_weighed_cliques()</code>, <code class="language-plaintext highlighter-rouge">igraph_maximal_cliques()</code>, <code class="language-plaintext highlighter-rouge">igraph_maximal_cliques_file()</code>, <code class="language-plaintext highlighter-rouge">igraph_maximal_cliques_subset()</code>, <code class="language-plaintext highlighter-rouge">igraph_independent_sets()</code> and <code class="language-plaintext highlighter-rouge">igraph_maximal_independent_sets()</code> received a <code class="language-plaintext highlighter-rouge">max_results</code> parameter to limit the number of returned results. Pass <code class="language-plaintext highlighter-rouge">1</code> to return a single result, or <code class="language-plaintext highlighter-rouge">IGRAPH_UNLIMITED</code> to return all results.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_maximal_independent_sets()</code> received <code class="language-plaintext highlighter-rouge">min_size</code> and <code class="language-plaintext highlighter-rouge">max_size</code> parameters that control the range of independent set sizes that are returned.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_weighted_cliques()</code> had its parameter ordering standardized: the <code class="language-plaintext highlighter-rouge">igraph_bool_t maximal</code> parameter now comes before the <code class="language-plaintext highlighter-rouge">min_weight</code> / <code class="language-plaintext highlighter-rouge">max_weight</code> parameters.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_maximal_cliques_callback()</code> had its parameter ordering standardized: the <code class="language-plaintext highlighter-rouge">igraph_clique_handler_t *cliquehandler_fn, void *arg</code> parameter pair now comes at the end, making this function consistent with <code class="language-plaintext highlighter-rouge">igraph_cliques_callback()</code>.</li>
</ul>

<h4 id="layouts">Layouts</h4>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_layout_sugiyama()</code> does not return an “extended graph” anymore. The bends in the edges of the layout are encoded in a list of matrices instead; each item in the list belongs to an edge of the original graph and contains the control points of the edge in a row-wise fashion. The matrix will have no rows if no control points are needed on the edge.</li>
</ul>

<h4 id="other-network-analysis">Other network analysis</h4>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_minimum_spanning_tree()</code> takes a new <code class="language-plaintext highlighter-rouge">method</code> parameter that controls the algorithm used for finding the spanning tree. Kruskal’s algorithm was added.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_rng_get_dirichlet()</code> function was removed.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_motifs_randesu_no()</code> and <code class="language-plaintext highlighter-rouge">igraph_motifs_randesu_estimate()</code> now take an <code class="language-plaintext highlighter-rouge">igraph_real_t</code> as their <code class="language-plaintext highlighter-rouge">result</code> argument to prevent overflows when igraph is compiled with 32-bit integers.</li>
  <li>The <code class="language-plaintext highlighter-rouge">igraph_motifs_handler_t</code> callback type now takes a <code class="language-plaintext highlighter-rouge">const igraph_vector_int_t *vids</code> parameter. Previously this was not formally <code class="language-plaintext highlighter-rouge">const</code>, even though it was not allowed to modify <code class="language-plaintext highlighter-rouge">vids</code>. This affects uses of <code class="language-plaintext highlighter-rouge">igraph_motifs_randesu_callback()</code>.</li>
  <li>The experimental functions <code class="language-plaintext highlighter-rouge">igraph_fundamental_cycles()</code> and <code class="language-plaintext highlighter-rouge">igraph_minimum_cycle_basis()</code> now use the type <code class="language-plaintext highlighter-rouge">igraph_real_t</code> for their <code class="language-plaintext highlighter-rouge">bfs_cutoff</code> parameter, and had their <code class="language-plaintext highlighter-rouge">weights</code> parameter moved to the 2nd position.</li>
</ul>

<h4 id="foreign-formats">Foreign formats</h4>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_read_graph_ncol()</code> and <code class="language-plaintext highlighter-rouge">igraph_read_graph_lgl()</code> now uses a default edge weight of 1 instead of 0 for files that do not contain edge weights for at least some of the edges.</li>
</ul>

<h3 id="added">Added</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_setup()</code> performs all initialization tasks that are recommended before using the igraph library. Right now this function only initializes igraph’s internal random number generator with a practically random seed, but it may also perform other tasks in the future. It is recommended to call this function before using any other function from the library (although most of the functions will work fine now even if this function is not called).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_iea_game()</code> samples random multigraphs through independent edge assignment.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_bipartite_iea_game()</code> samples random bipartite multigraph through independent edge assignment.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_weighted_biadjacency()</code> creates a weighted graph from a bipartite adjacency matrix.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_ptr_capacity()</code> returns the allocated capacity of a pointer vector.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_ptr_resize_min()</code> deallocates unused capacity of a pointer vector.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_strvector_fprint()</code> prints a string vector to a file.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_rng_sample_dirichlet()</code>, <code class="language-plaintext highlighter-rouge">igraph_rng_sample_sphere_volume()</code> and <code class="language-plaintext highlighter-rouge">igraph_rng_sample_sphere_surface()</code> samples vectors from a Dirichlet distribution or from the volume or surface of a sphere while allowing the user to specify the random number generator to use.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_nearest_neighbor_graph()</code> computes a neighborhood graph of spatial points based on a neighbor count, cutoff distance, and chosen metric (experimental function). Thanks to Arnór Friðriksson @Zepeacedust for implementing this in #2788!</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_delaunay_graph()</code> computes a Delaunay graph of a spatial point set (experimental function). Thanks to Arnór Friðriksson @Zepeacedust for implementing this in #2806!</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_gabriel_graph()</code> computes the Gabriel graph of a spatial point set (experimental function). Thanks to Arnór Friðriksson @Zepeacedust for implementing this in #2827!</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_relative_neighborhood_graph()</code> computes the relative neighborhood graph of a spatial point set (experimental function). Thanks to Arnór Friðriksson @Zepeacedust for implementing this in #2827!</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_lune_beta_skeleton()</code> and <code class="language-plaintext highlighter-rouge">igraph_circle_beta_skeleton()</code> compute the lune and circle based β-skeletons of a spatial point set (experimental function). Thanks to Arnór Friðriksson @Zepeacedust for implementing this in #2827!</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_beta_weighted_gabriel_graph()</code> computes a Gabriel graph of a spatial point set, along with a threshold β value for each edge, at which the edge ceases to be part of the lune-based β-skeleton (experimental function). Thanks to Arnór Friðriksson @Zepeacedust for implementing this in #2827!</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_spatial_edge_lengths()</code> computes edge lengths based on spatial vertex coordinates (experimental function).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_leiden_simple()</code> is a simplified interface to <code class="language-plaintext highlighter-rouge">igraph_community_leiden()</code> that allows selecting the objective function to maximize directly.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_difference_and_intersection_sorted()</code> calculates the intersection and the differences of two vectors simultaneously.</li>
  <li><code class="language-plaintext highlighter-rouge">IGRAPH_UNLIMITED</code>, defined to <code class="language-plaintext highlighter-rouge">-1</code>, is a convenience constant for use with various “size limit” parameters, such as number of cliques returned, maximum path length, number of results returned, etc. It indicates that no limit should be used.</li>
</ul>

<h3 id="changed">Changed</h3>

<ul>
  <li>The Pajek format reader and writer now map vertex labels to the <code class="language-plaintext highlighter-rouge">name</code> vertex attribute in igraph. The <code class="language-plaintext highlighter-rouge">id</code> attribute is no longer used.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_minimum_size_separators()</code> no longer returns any separating vertex sets for complete graphs. Prior to igraph 1.0, it would return all <code class="language-plaintext highlighter-rouge">n - 1</code> size vertex subsets where <code class="language-plaintext highlighter-rouge">n</code> is the vertex count.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_edge_betweenness()</code> now treats edges with large weights as strong connections.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_biadjacency()</code> now truncates non-integer matrix entries to their integer part instead of rounding them up. This brings consistency with related functions such as <code class="language-plaintext highlighter-rouge">igraph_adjacency()</code>.</li>
  <li>The order of edges in the graph returned by <code class="language-plaintext highlighter-rouge">igraph_(weighted_)adjacency()</code> and <code class="language-plaintext highlighter-rouge">igraph_biadjacency()</code> has changed. Note that these functions do not guarantee any specific edge order.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_eigenvector_centrality()</code> now warns about eigenvector centralities equal to zero, as these indicate a disconnected graph, for which eigenvector centrality is not meaningful.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_hub_and_authority_scores()</code> now warns when a large fraction of centrality scores are zero, as this indicates a non-unique solution, and thus the returned result may not be meaningful.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_hub_and_authority_scores()</code> now warns when providing an undirected graph as input, and falls back to the equivalent eigenvector centrality computation.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_get_stochastic_sparse()</code> no longer throws an error when some row or column sums are zero. This brings its behaviour in line with <code class="language-plaintext highlighter-rouge">igraph_get_stochastic()</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_append()</code>, <code class="language-plaintext highlighter-rouge">igraph_strvector_append()</code> and <code class="language-plaintext highlighter-rouge">igraph_vector_ptr_append()</code> now use a different allocation strategy: if the <code class="language-plaintext highlighter-rouge">to</code> vector has insufficient capacity, they double its capacity. Previously they reserved precisely as much capacity as needed for appending the <code class="language-plaintext highlighter-rouge">from</code> vector.</li>
  <li>The implementation of the Infomap algorithm behind <code class="language-plaintext highlighter-rouge">igraph_community_infomap()</code> has been updated with a more recent version (2.8.0). Isolated vertices are now supported.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_difference_sorted()</code> now handles multisets properly (and documents how the multiplicities are handled).</li>
</ul>

<h3 id="finalized-experimental-functions">Finalized experimental functions</h3>

<ul>
  <li>The following functions are not experimental any more: <code class="language-plaintext highlighter-rouge">igraph_count_loops()</code>, <code class="language-plaintext highlighter-rouge">igraph_count_reachable()</code>, <code class="language-plaintext highlighter-rouge">igraph_degree_correlation_vector</code>, <code class="language-plaintext highlighter-rouge">igraph_distances_cutoff()</code>, <code class="language-plaintext highlighter-rouge">igraph_distances_floyd_warshall()</code>, <code class="language-plaintext highlighter-rouge">igraph_distances_dijkstra_cutoff()</code>, <code class="language-plaintext highlighter-rouge">igraph_ecc()</code>, <code class="language-plaintext highlighter-rouge">igraph_enter_safelocale()</code>, <code class="language-plaintext highlighter-rouge">igraph_exit_safelocale()</code>, <code class="language-plaintext highlighter-rouge">igraph_feedback_vertex_set()</code>, <code class="language-plaintext highlighter-rouge">igraph_find_cycle()</code>, <code class="language-plaintext highlighter-rouge">igraph_get_shortest_path_astar()</code>, <code class="language-plaintext highlighter-rouge">igraph_graph_power()</code>,  <code class="language-plaintext highlighter-rouge">igraph_hexagonal_lattice()</code>,  <code class="language-plaintext highlighter-rouge">igraph_hypercube()</code>, <code class="language-plaintext highlighter-rouge">igraph_is_bipartite_coloring()</code>, <code class="language-plaintext highlighter-rouge">igraph_is_clique()</code>, <code class="language-plaintext highlighter-rouge">igraph_is_complete()</code>, <code class="language-plaintext highlighter-rouge">igraph_is_edge_coloring()</code>, <code class="language-plaintext highlighter-rouge">igraph_is_vertex_coloring()</code>,  <code class="language-plaintext highlighter-rouge">igraph_is_independent_vertex_set()</code>, <code class="language-plaintext highlighter-rouge">igraph_join()</code>,<code class="language-plaintext highlighter-rouge">igraph_joint_degree_distribution()</code>, <code class="language-plaintext highlighter-rouge">igraph_joint_degree_matrix()</code>, <code class="language-plaintext highlighter-rouge">igraph_joint_type_distribution()</code>, <code class="language-plaintext highlighter-rouge">igraph_layout_align()</code>, <code class="language-plaintext highlighter-rouge">igraph_layout_merge_dla()</code>, <code class="language-plaintext highlighter-rouge">igraph_mean_degree()</code>, <code class="language-plaintext highlighter-rouge">igraph_radius()</code>, <code class="language-plaintext highlighter-rouge">igraph_realize_bipartite_degree_sequence()</code>, <code class="language-plaintext highlighter-rouge">igraph_reachability()</code>, <code class="language-plaintext highlighter-rouge">igraph_transitive_closure()</code>, <code class="language-plaintext highlighter-rouge">igraph_tree_from_parent_vector()</code>, <code class="language-plaintext highlighter-rouge">igraph_triangular_lattice()</code>, <code class="language-plaintext highlighter-rouge">igraph_vector_intersection_size_sorted()</code>, <code class="language-plaintext highlighter-rouge">igraph_voronoi()</code>.</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_spinglass_single()</code> now uses <code class="language-plaintext highlighter-rouge">igraph_real_t</code> for its <code class="language-plaintext highlighter-rouge">inner_links</code> and <code class="language-plaintext highlighter-rouge">outer_links</code> output parameters, as these return not simply edge counts, but the sum of the weights of some edges. Thus these results are no longer incorrectly rounded.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_correlated_game()</code> and <code class="language-plaintext highlighter-rouge">igraph_correlated_pair_game()</code> validate their <code class="language-plaintext highlighter-rouge">permutation</code> argument.</li>
</ul>

<h3 id="removed">Removed</h3>

<ul>
  <li>Removed <code class="language-plaintext highlighter-rouge">igraph_Calloc()</code>, <code class="language-plaintext highlighter-rouge">igraph_Realloc()</code> and <code class="language-plaintext highlighter-rouge">igraph_Free()</code>. Use <code class="language-plaintext highlighter-rouge">IGRAPH_CALLOC()</code>, <code class="language-plaintext highlighter-rouge">IGRAPH_REALLOC()</code> and <code class="language-plaintext highlighter-rouge">IGRAPH_FREE()</code> instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_adjacent_triangles()</code> was removed. Use <code class="language-plaintext highlighter-rouge">igraph_count_adjacent_triangles()</code> instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_are_connected()</code> was removed. Use <code class="language-plaintext highlighter-rouge">igraph_are_adjacent()</code> instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_automorphisms()</code> was removed. Use <code class="language-plaintext highlighter-rouge">igraph_count_automorphisms()</code> or <code class="language-plaintext highlighter-rouge">igraph_count_automorphisms_bliss()</code> instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_convex_hull()</code> was removed. Use <code class="language-plaintext highlighter-rouge">igraph_convex_hull_2d()</code> instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_decompose_destroy()</code> was removed.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_hub_score()</code> and <code class="language-plaintext highlighter-rouge">igraph_authority_score()</code> were removed.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_vs_seq()</code>, <code class="language-plaintext highlighter-rouge">igraph_vss_seq()</code>, <code class="language-plaintext highlighter-rouge">igraph_es_seq()</code>, <code class="language-plaintext highlighter-rouge">igraph_ess_range()</code>, and <code class="language-plaintext highlighter-rouge">igraph_vector_init_seq()</code> were removed. Use the <code class="language-plaintext highlighter-rouge">range</code> alternatives instead of the old <code class="language-plaintext highlighter-rouge">seq</code> ones.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_erdos_renyi_game()</code> and <code class="language-plaintext highlighter-rouge">igraph_bipartite_game()</code> were removed. Use the corresponding functions with <code class="language-plaintext highlighter-rouge">_gnm()</code> and <code class="language-plaintext highlighter-rouge">_gnp()</code> in the name instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_tree()</code> was removed. Use <code class="language-plaintext highlighter-rouge">igraph_kary_tree()</code> instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_lattice()</code> was removed. Use <code class="language-plaintext highlighter-rouge">igraph_square_lattice()</code> instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_minimum_spanning_tree_prim()</code> was removed. Use <code class="language-plaintext highlighter-rouge">igraph_minimum_spanning_tree()</code> in conjunction with <code class="language-plaintext highlighter-rouge">igraph_subgraph_from_edges()</code> instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_minimum_spanning_tree_unweighted()</code> was removed. Use <code class="language-plaintext highlighter-rouge">igraph_minimum_spanning_tree()</code> in conjunction with <code class="language-plaintext highlighter-rouge">igraph_subgraph_from_edges()</code> instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_get_sparsemat()</code> was removed. Use <code class="language-plaintext highlighter-rouge">igraph_get_adjacency_sparse()</code> instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_get_stochastic_sparsemat()</code> was removed. Use <code class="language-plaintext highlighter-rouge">igraph_get_stochastic_sparse()</code> instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_laplacian()</code> was removed. Use <code class="language-plaintext highlighter-rouge">igraph_get_laplacian()</code> or <code class="language-plaintext highlighter-rouge">igraph_get_laplacian_sparse()</code> instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_subgraph_edges()</code> was removed. Use <code class="language-plaintext highlighter-rouge">igraph_subgraph_from_edges()</code> instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_read_graph_dimacs()</code> and <code class="language-plaintext highlighter-rouge">igraph_write_graph_dimacs()</code> were removed. These names may be re-used in the future. Use <code class="language-plaintext highlighter-rouge">igraph_read_graph_dimacs_flow()</code> and <code class="language-plaintext highlighter-rouge">igraph_write_graph_dimacs_flow()</code> instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_isomorphic_function_vf2()</code> was removed. Use <code class="language-plaintext highlighter-rouge">igraph_get_isomorphisms_vf2_callback()</code> instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_subisomorphic_function_vf2()</code> was removed. Use <code class="language-plaintext highlighter-rouge">igraph_get_subisomorphisms_vf2_callback()</code> instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_isomorphic_34()</code> was removed. Its functionality is accessible through <code class="language-plaintext highlighter-rouge">igraph_isomorphic()</code>.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_transitive_closure_dag()</code> was removed. Use <code class="language-plaintext highlighter-rouge">igraph_transitive_closure()</code> instead, which works for all graphs, not just DAGs.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_sparsemat_copy()</code> was removed. Use <code class="language-plaintext highlighter-rouge">igraph_sparsemat_init_copy()</code> instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_sparsemat_eye()</code> was removed. Use <code class="language-plaintext highlighter-rouge">igraph_sparsemat_init_eye()</code> instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_sparsemat_diag()</code> was removed. Use <code class="language-plaintext highlighter-rouge">igraph_sparsemat_init_diag()</code> instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_sparsemat()</code> and <code class="language-plaintext highlighter-rouge">igraph_weighted_sparsemat()</code> functions were removed; use <code class="language-plaintext highlighter-rouge">igraph_get_adjacency_sparse()</code> instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_random_edge_walk()</code> was removed. Its functionality is incorporated in <code class="language-plaintext highlighter-rouge">igraph_random_walk()</code>.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_vector_qsort_ind()</code> was removed. Use <code class="language-plaintext highlighter-rouge">igraph_vector_sort_ind()</code> instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_vector_binsearch2()</code> was removed. Use <code class="language-plaintext highlighter-rouge">igraph_vector_contains_sorted()</code> instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_vector_copy()</code> and <code class="language-plaintext highlighter-rouge">igraph_matrix_copy()</code> were removed. Use <code class="language-plaintext highlighter-rouge">igraph_vector_init_copy()</code> and <code class="language-plaintext highlighter-rouge">igraph_matrix_init_copy()</code> instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_vector_e()</code>, <code class="language-plaintext highlighter-rouge">igraph_vector_e_ptr()</code>, <code class="language-plaintext highlighter-rouge">igraph_matrix_e()</code> and <code class="language-plaintext highlighter-rouge">igraph_matrix_e_ptr()</code> were removed. Use the alternatives ending in <code class="language-plaintext highlighter-rouge">_get()</code> and <code class="language-plaintext highlighter-rouge">_get_ptr()</code> instead.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_vector_move_interval2()</code> was removed.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_zeroin()</code> was removed.</li>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">igraph_deterministic_optimal_imitation()</code>, <code class="language-plaintext highlighter-rouge">igraph_moran_process()</code>, <code class="language-plaintext highlighter-rouge">igraph_roulette_wheel_imitation()</code> and <code class="language-plaintext highlighter-rouge">igraph_stochastic_imitation()</code> functions were removed.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_sample_dirichlet()</code>, <code class="language-plaintext highlighter-rouge">igraph_sample_sphere_surface()</code> and <code class="language-plaintext highlighter-rouge">igraph_sample_sphere_volume()</code> were removed in favour of <code class="language-plaintext highlighter-rouge">igraph_rng_sample_dirichlet()</code>, <code class="language-plaintext highlighter-rouge">igraph_rng_sample_sphere_surface()</code> and <code class="language-plaintext highlighter-rouge">igraph_rng_sample_sphere_volume()</code>, which allow the user to specify the random number generator to use.</li>
  <li>The unused enum type <code class="language-plaintext highlighter-rouge">igraph_fileformat_type_t</code> was removed.</li>
  <li>The macros <code class="language-plaintext highlighter-rouge">IGRAPH_POSINFINITY</code> and <code class="language-plaintext highlighter-rouge">IGRAPH_NEGINFINITY</code> were removed. Use <code class="language-plaintext highlighter-rouge">IGRAPH_INFINITY</code> and <code class="language-plaintext highlighter-rouge">-IGRAPH_INFINITY</code> instead.</li>
  <li>Removed <code class="language-plaintext highlighter-rouge">igraph_sparsemat_view()</code> as its design was broken and required the user to reach into the internals of <code class="language-plaintext highlighter-rouge">igraph_sparmsemat_t</code> to destroy it properly.</li>
</ul>

<h3 id="deprecated">Deprecated</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_delete_vertices_idx()</code> is now deprecated in favour of <code class="language-plaintext highlighter-rouge">igraph_delete_vertices_map()</code>, which is functionally equivalent but has a name that is consistent with <code class="language-plaintext highlighter-rouge">igraph_induced_subgraph_map()</code>.</li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>The documentation was reorganized.</li>
  <li>Various documentation improvements.</li>
  <li>Improved performance when creating graphs from dense adjacency matrices (<code class="language-plaintext highlighter-rouge">igraph_adjacency()</code> and <code class="language-plaintext highlighter-rouge">igraph_weighted_adjacency()</code>).</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[Nearly twenty years after the first igraph release, igraph 1.0 has finally arrived. This release focuses on providing a stable and more consistent interface that users and downstream maintainers can rely on with confidence, as well as adding new features that required API-breaking changes. There is now an official versioning policy, see VERSIONING.md.]]></summary></entry><entry><title type="html">C/igraph 0.10.17</title><link href="https://igraph.org/2025/09/19/igraph-0.10.17-c.html" rel="alternate" type="text/html" title="C/igraph 0.10.17" /><published>2025-09-19T00:00:00+00:00</published><updated>2025-09-19T00:00:00+00:00</updated><id>https://igraph.org/2025/09/19/igraph-0.10.17-c</id><content type="html" xml:base="https://igraph.org/2025/09/19/igraph-0.10.17-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.10.17, the (hopefully) last bugfix release of the 0.10 series, has arrived,
with several new additions, bug fixes and performance improvements.
As usual, the source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.10.17">the GitHub releases page</a>.</p>

<p>This is the last planned release of the 0.x series. A new 1.0 release with a stable API will arrive soon, with quite a few breaking changes that were necessary to evolve igraph’s API into a form that we can commit ourselves to for a longer period of time. If you do not want to update your existing code, you should stick to 0.10.17 in your own projects.</p>

<p>A summary of changes in 0.10.17 is below.</p>

<!--more-->

<h3 id="added">Added</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_layout_align()</code> attempts to align a graph layout with the coordinate axes in a visually pleasing manner (experimental function).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_product()</code> supports the lexicographic, strong and modular graph products. Thanks to Gulshan Kumar @gulshan-123 for contributing this functionality in #2772 and #2793!</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_rooted_product()</code> computes the rooted graph product (experimental function). Thanks to Gulshan Kumar @gulshan-123 for contributing this functionality in #2793!</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_mycielskian()</code> (experimental function) and <code class="language-plaintext highlighter-rouge">igraph_mycielski_graph()</code> compute a Mycielski transformation of a graph, and a Mycielski graph, respectively. Thanks to Gulshan Kumar @gulshan-123 for contributing this functionality in #2741!</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_path_graph()</code> is a convenience wrapper for <code class="language-plaintext highlighter-rouge">igraph_ring()</code> with <code class="language-plaintext highlighter-rouge">circular=false</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_cycle_graph()</code> is a convenience wrapper for <code class="language-plaintext highlighter-rouge">igraph_ring()</code> with <code class="language-plaintext highlighter-rouge">circular=true</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_site_percolation()</code>, <code class="language-plaintext highlighter-rouge">igraph_bond_percolation()</code> and <code class="language-plaintext highlighter-rouge">igraph_edgelist_percolation()</code> compute the evolution of the size of the giant component of a graph when vertices (site percolation) or edges (bond percolation) are added one by one in a given order (experimental functions). Thanks to Arnór Friðriksson @Zepeacedust for implementing this in #2778!</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_invert_permutation()</code> inverts a permutation stored in an integer vector.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_is_vertex_coloring()</code> and <code class="language-plaintext highlighter-rouge">igraph_is_edge_coloring()</code> check if a vertex or edge coloring is valid, i.e. whether adjacent vertices/edges always have distinct colors (experimental functions). Thanks to Sarah Rashidi @its-serah for contributing this in #2807!</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_is_bipartite_coloring()</code> checks if a bipartite type assignment is valid, i.e. whether adjacent vertices always have different types (experimental function). Thanks to Sarah Rashidi @its-serah for contributing this in #2807!</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_rich_club_sequence()</code> calculates how the density of a graph changes as vertices are removed (experimental function). Thanks to Zara Zong @minifinity for contributing this in #2740!</li>
</ul>

<h3 id="changed">Changed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_bipartite_game_gnp()</code> can now generate graphs with more than a hundred million vertices. Thanks to Dev Lohani @devlohani99 for implementing this in #2767!</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_reindex_membership()</code> now supports arbitrary cluster indices. Previously, it would error when indices are not within <code class="language-plaintext highlighter-rouge">0 .. n-1</code> where <code class="language-plaintext highlighter-rouge">n</code> is the membership vector length.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_modularity()</code> now supports arbitrary cluster indices. However, ensuring that cluster indices are within the range <code class="language-plaintext highlighter-rouge">0 .. n-1</code>, where <code class="language-plaintext highlighter-rouge">n</code> is the vertex count, allows for better performance.</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li>Fix failure in SIR simulation due to roundoff errors creating slightly negative rates.</li>
  <li>Fix infinite coordinates for certain path graphs with <code class="language-plaintext highlighter-rouge">igraph_layout_kamada_kawai_3d()</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_leiden()</code> did not iterate until the partition ceased to change when <code class="language-plaintext highlighter-rouge">n_iterations &lt; 0</code>. Thanks to Lucas Lopes Felipe @lucaslopes for fixing this in #2799!</li>
  <li>The widest path functions <code class="language-plaintext highlighter-rouge">igraph_widest_path_widths_floyd_warshall()</code>, <code class="language-plaintext highlighter-rouge">igraph_widest_path_widths_dijkstra()</code>, <code class="language-plaintext highlighter-rouge">igraph_get_widest_paths()</code>, and <code class="language-plaintext highlighter-rouge">igraph_get_widest_path()</code> incorrectly ignored edges with positive infinite width. Now they ignore edges with negative infinite width.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_cliques_callback()</code> would sometimes fail to respect a request to stop (i.e. returning <code class="language-plaintext highlighter-rouge">IGRAPH_STOP</code>) from the callback. This is now corrected.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_hypercube()</code> now validates the hypercube dimension and prevents negative values.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_sparsemat_view()</code> checks for out-of-memory conditions.</li>
  <li>Fix assertion error when stopping search early in <code class="language-plaintext highlighter-rouge">igraph_simple_cycles_callback()</code> by returning <code class="language-plaintext highlighter-rouge">IGRAPH_STOP</code> from the callback.</li>
</ul>

<h3 id="deprecated">Deprecated</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_sparsemat()</code> and <code class="language-plaintext highlighter-rouge">igraph_weighted_sparsemat()</code> are now deprecated; their functionality is duplicated by <code class="language-plaintext highlighter-rouge">igraph_get_adjacency_sparse()</code>. They will be removed in version 1.0.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_convex_hull()</code> is deprecated in favour of <code class="language-plaintext highlighter-rouge">igraph_convex_hull_2d()</code> and scheduled for removal in 1.0.</li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>Documentation improvements, including a new glossary.</li>
  <li>Simple cycle search (<code class="language-plaintext highlighter-rouge">igraph_simple_cycles()</code> and <code class="language-plaintext highlighter-rouge">igraph_simple_cycles_callback()</code>) is sped up by skipping cycle search from some redundant start vertices. Thanks to Tim Bernhard @GenieTim for contributing this improvement in #2714!</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_realize_degree_sequence()</code> is significantly sped up for simple undirected graphs, and now has near-linear complexity for this case. Thanks to Zara Zong @ minifinity for implementing this in #2786!</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.10.17, the (hopefully) last bugfix release of the 0.10 series, has arrived, with several new additions, bug fixes and performance improvements. As usual, the source can be obtained from the GitHub releases page.]]></summary></entry><entry><title type="html">Setting up igraph for success in the next decade</title><link href="https://igraph.org/2025/04/10/igraph-isc-setting-success-decade.html" rel="alternate" type="text/html" title="Setting up igraph for success in the next decade" /><published>2025-04-10T00:00:00+00:00</published><updated>2025-04-10T00:00:00+00:00</updated><id>https://igraph.org/2025/04/10/igraph-isc-setting-success-decade</id><content type="html" xml:base="https://igraph.org/2025/04/10/igraph-isc-setting-success-decade.html"><![CDATA[<p><em>Cross-posted on the <a href="https://cynkra.com/blog/2025-03-17-igraph-isc-setting-success-decade/">cynkra blog</a>.</em></p>

<p>One year ago, a small group of us at cynkra submitted a project proposal to the R Consortium’s ISC, which got approved.
We are very grateful for this <a href="https://r-consortium.org/all-projects/2024-group-1.html#setting-up-igraph-for-success-in-the-next-decade">support</a>.
In this post we shall explain what the motivation for our project was, what we accomplished… and what we hope to work on next!</p>

<!--more-->

<h2 id="why-did-igraph-need-some-dedicated-maintenance">Why did igraph need some dedicated maintenance?</h2>

<p>The first version of the igraph R package was published on CRAN in 2006.
Since then, the igraph C library that forms the core of the R package, and the R package itself, have been further developed and <a href="https://schochastics.github.io/R4SNA/intro.html#the-base-packages">widely used</a>.
Over the years, the R package has also accrued a bit of documentation debt and technical debt, that we wanted to tackle to set up igraph for success in the next decade.
Both aspects had the potential to simplify further updates of the package.</p>

<h2 id="adopting-the-lifecycle-system">Adopting the lifecycle system</h2>

<p>To provide a more consistent interface, part of igraph functions or arguments are slowly but consistently being deprecated.
Some of them used to be deprecated using custom solutions or base R deprecations.
In contrast, now all deprecations happen through the lifecycle package.
On manual pages, deprecation badges indicate the maintenance status of functions or arguments.</p>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">library</span><span class="p">(</span><span class="s2">"igraph"</span><span class="p">)</span><span class="w">
</span><span class="c1">#&gt; </span><span class="w">
</span><span class="c1">#&gt; Attaching package: 'igraph'</span><span class="w">
</span><span class="c1">#&gt; The following objects are masked from 'package:stats':</span><span class="w">
</span><span class="c1">#&gt; </span><span class="w">
</span><span class="c1">#&gt;     decompose, spectrum</span><span class="w">
</span><span class="c1">#&gt; The following object is masked from 'package:base':</span><span class="w">
</span><span class="c1">#&gt; </span><span class="w">
</span><span class="c1">#&gt;     union</span><span class="w">
</span><span class="n">g</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">sample_gnp</span><span class="p">(</span><span class="m">10</span><span class="p">,</span><span class="w"> </span><span class="m">0.5</span><span class="p">)</span><span class="w">
</span><span class="n">graph.density</span><span class="p">(</span><span class="n">g</span><span class="p">)</span><span class="w">
</span><span class="c1">#&gt; Warning: `graph.density()` was deprecated in igraph 2.0.0.</span><span class="w">
</span><span class="c1">#&gt; ℹ Please use `edge_density()` instead.</span><span class="w">
</span><span class="c1">#&gt; This warning is displayed once every 8 hours.</span><span class="w">
</span><span class="c1">#&gt; Call `lifecycle::last_lifecycle_warnings()` to see where this warning was</span><span class="w">
</span><span class="c1">#&gt; generated.</span><span class="w">
</span><span class="c1">#&gt; [1] 0.5111111</span><span class="w">
</span></code></pre></div></div>

<p>Having everything in the “lifecycle system” now means the interface and documentation is consistent for users, and also that we can more easily increase deprecation levels over time by searching for lifecycle calls.
Last, but not least, all deprecations are listed in a <a href="https://r.igraph.org/articles/current-deprecations.html">vignette</a>.</p>

<h2 id="documentation-improvements">Documentation improvements</h2>

<p>Besides the documentation of lifecycle, we created and used a custom roxygen2 tags to link to the C docs from manual pages.
<a href="https://r.igraph.org/reference/sample_sbm.html#related-documentation-in-the-c-library">Example</a>.</p>

<h2 id="fewer-errors-better-errors">Fewer errors, better errors</h2>

<p>We have made a conscious effort to port errors from base R to cli, at the same time improving phrasing of errors.
For instance,</p>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">stop</span><span class="p">(</span><span class="s2">"invalid value supplied for `weighted' argument, please see docs."</span><span class="p">)</span><span class="w">
</span></code></pre></div></div>

<p>became</p>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">cli</span><span class="o">::</span><span class="n">cli_abort</span><span class="p">(</span><span class="nf">c</span><span class="p">(</span><span class="w">
  </span><span class="s2">"{.arg weighted} can't be {.obj_type_friendly {weighted}}."</span><span class="p">,</span><span class="w">
  </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"See {.help graph_from_biadjacency_matrix}'s manual page."</span><span class="w">
</span><span class="p">))</span><span class="w">
</span></code></pre></div></div>

<p>which is more informative about the invalid value supplied, and which directly links to the manual page.</p>

<p>We have also fixed some bugs (<a href="https://github.com/igraph/rigraph/pull/1716">example</a>).</p>

<h2 id="work-on-the-internals">Work on the internals</h2>

<p>We did a lot of refactoring!
Most of it was focussed on <a href="https://github.com/igraph/rigraph/pulls?q=sort%3Aupdated-desc+is%3Apr+in%3Atitle+%22test%3A%22+is%3Amerged">tests</a>, as <a href="/posts/2025-03-04-refactoring-test-files/">previously explained on this blog</a>: merging some test files to ensure alignment between R scripts and test files, refactoring test files for better readability and future debugging, updating the testthat usage by removing old expectations.
We also worked in the <code class="language-plaintext highlighter-rouge">R/</code>folder, for instance we replaced the usage of an embedded version of lazyeval with rlang calls
(<a href="https://github.com/igraph/rigraph/pull/1441">PR 1</a>, <a href="https://github.com/igraph/rigraph/pull/1445">PR 2</a>).</p>

<h2 id="sharing-our-experience">Sharing our experience</h2>

<p>We shared our experience working on igraph in part of a talk and in various blog posts:</p>

<ul>
  <li>useR! 2024 keynote talk <a href="https://masalmon.eu/talks/2024-07-10-user-2024-rusty-code/">How your code might get rusty, and what you can do about it</a> – it presented our work on igraph.</li>
  <li>Blog post <a href="https://masalmon.eu/2024/05/15/refactoring-xml/">Automate code refactoring with {xmlparsedata} and {brio}</a> – how we replaced some old testthat’s expectations with new ones, using a script rather than manually.</li>
  <li>Blog post <a href="https://masalmon.eu/2024/05/23/refactoring-tests/">What I edit when refactoring a test file</a> – some rules for more readable test files, like putting expectations closer to the values they tackle.</li>
  <li>Blog post <a href="https://masalmon.eu/2024/07/18/extract-function-names-treesitter/">Extracting names of functions defined in a script with treesitter</a> – how we used a script to get a list of functions we needed to create.</li>
  <li>Blog post <a href="https://masalmon.eu/2024/09/03/roxygen2-custom-tag/">Create and use a custom roxygen2 tag</a> – how we created a custom roxygen2 tag to link to C docs from manual pages.</li>
  <li>Blog post <a href="https://masalmon.eu/2024/09/24/cover-modify-r-packages/">Cover and modify, some tips for R package development</a> – how we go about adding new tests.</li>
  <li>Blog post <a href="https://blog.cynkra.com/posts/2025-03-04-refactoring-test-files/">Organizing tests in R packages</a> – why and how we improved test organization in igraph.</li>
</ul>

<h2 id="conclusion">Conclusion</h2>

<p>We are proud of the progress made in the igraph codebase but we don’t want to stop here!
In particular, we’d really like to do more work on open issues to improve the state of the issue tracker and to ensure easier future triage ; to better describe and execute the scope differences between the C and R libraries ; and to make the documentation more complete and clearer.</p>]]></content><author><name>Maëlle Salmon</name></author><category term="r" /><summary type="html"><![CDATA[Cross-posted on the cynkra blog.]]></summary></entry><entry><title type="html">C/igraph 0.10.15</title><link href="https://igraph.org/2024/11/06/igraph-0.10.15-c.html" rel="alternate" type="text/html" title="C/igraph 0.10.15" /><published>2024-11-06T00:00:00+00:00</published><updated>2024-11-06T00:00:00+00:00</updated><id>https://igraph.org/2024/11/06/igraph-0.10.15-c</id><content type="html" xml:base="https://igraph.org/2024/11/06/igraph-0.10.15-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.10.15, the thirteenth bugfix release of the 0.10 series, has arrived,
with several new additions, bug fixes and performance improvements.
As usual, the source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.10.15">the GitHub releases page</a>.</p>

<p>A summary of changes in 0.10.15 is below.</p>

<!--more-->

<h3 id="added">Added</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_bitset_update()</code> copies the contents of one bitset into another (experimental function).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_sort_ind()</code> (rename of <code class="language-plaintext highlighter-rouge">igraph_vector_qsort_ind()</code>).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_contains_sorted()</code> (rename of <code class="language-plaintext highlighter-rouge">igraph_vector_binsearch2()</code>).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_reverse_section()</code> reverses a contiguous section of a vector.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_rotate_left()</code> applies a cyclic permutation to a vector.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_strvector_swap_elements()</code> swaps two strings in an <code class="language-plaintext highlighter-rouge">igraph_strvector_t</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_find_cycle()</code> finds a single cycle in a graph, if it exists (experimental function).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_feedback_vertex_set()</code> finds a minimum feedback vertex set in a directed or undirected graph (experimental function).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_simple_cycles()</code> and <code class="language-plaintext highlighter-rouge">igraph_simple_cycles_callback()</code> find all simple cycles in a graph, optionally with an upper bound on the cycle length (experimental functions). Many thanks to <a href="https://github.com/GenieTim">@GenieTim</a> for contributing this functionality in <a href="https://github.com/igraph/igraph/issues/2181">#2181</a>.</li>
</ul>

<h3 id="changed">Changed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_feedback_arc_set()</code> uses a much faster method for solving the exact minimum feedback arc set problem. The new method (<code class="language-plaintext highlighter-rouge">IGRAPH_FAS_EXACT_IP_CG</code>) is used by default (i.e. with <code class="language-plaintext highlighter-rouge">IGRAPH_FAS_EXACT_IP</code>), but the previous method is also kept available (<code class="language-plaintext highlighter-rouge">IGRAPH_FAS_EXACT_IP_TI</code>).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_motifs_randesu()</code>, <code class="language-plaintext highlighter-rouge">igraph_motifs_randesu_callback()</code>, <code class="language-plaintext highlighter-rouge">igraph_motifs_randesu_estimate()</code> and <code class="language-plaintext highlighter-rouge">igraph_motifs_randesu_no()</code> now accept <code class="language-plaintext highlighter-rouge">NULL</code> for their <code class="language-plaintext highlighter-rouge">cut_prob</code> parameter, signifying that a complete search should be performed.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_centralization_eigenvector_centrality_tmax()</code> and <code class="language-plaintext highlighter-rouge">igraph_centralization_eigenvector_centrality()</code> cannot produce meaningful results without normalizing vertex-level eigenvector centrality in a well-defined way. This was not the case when using <code class="language-plaintext highlighter-rouge">scale=false</code>. These functions now ignore the value of the <code class="language-plaintext highlighter-rouge">scale</code> parameter and always scale vertex-level centrality scores to have a maximum of 1. If you require a different type of normalization for the vertex-level eigenvector centrality scores, perform this normalization manually, and call <code class="language-plaintext highlighter-rouge">igraph_centralization()</code> to compute the centralization.</li>
  <li>When <code class="language-plaintext highlighter-rouge">igraph_eigenvector_centrality()</code> receives a directed acyclic graph as input, it now produces an eigenvector which has 1s in sink vertices and 0s everywhere else. Previously, it would return an all-zero vector. Note that eigenvector centrality is not uniquely defined for graphs that are not (strongly) connected, and both of these results can be considered valid. This change is to ensure consistency with the definition of the theoretical maximum of eigenvector centralization, which assumes the in-star to be the most centralized directed network.</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_layout_drl()</code> and <code class="language-plaintext highlighter-rouge">igraph_layout_drl_3d()</code> would crash with an assertion failure when interrupted. This is now fixed.</li>
  <li>Removed broken interruption support from <code class="language-plaintext highlighter-rouge">igraph_community_spinglass_single()</code>.</li>
  <li>In rare cases <code class="language-plaintext highlighter-rouge">igraph_community_multilevel()</code> could enter an infinite loop. This is now corrected.</li>
  <li>Fixed null-dereference in <code class="language-plaintext highlighter-rouge">igraph_community_voronoi()</code> when requesting <code class="language-plaintext highlighter-rouge">modularity</code> but not <code class="language-plaintext highlighter-rouge">membership</code>.</li>
  <li>Fixed null-dereference in <code class="language-plaintext highlighter-rouge">igraph_community_optimal_modularity()</code> when requesting <code class="language-plaintext highlighter-rouge">modularity</code> but not <code class="language-plaintext highlighter-rouge">membership</code> and passing a null graph or singleton graph.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_layout_umap()</code> and <code class="language-plaintext highlighter-rouge">igraph_layout_umap_3d()</code> would crash when passing <code class="language-plaintext highlighter-rouge">distances=NULL</code> and <code class="language-plaintext highlighter-rouge">distances_are_weights=true</code>. This is now fixed.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_layout_umap()</code> and <code class="language-plaintext highlighter-rouge">igraph_layout_umap_3d()</code> would crash on interruption. This is now fixed.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_read_graph_pajek()</code> now warns about duplicate vertex IDs in input files.</li>
  <li>The documented <code class="language-plaintext highlighter-rouge">igraph_strvector_resize_min()</code> was missing from headers.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_feedback_arc_set()</code> now validates the edge weights.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_layout_lgl()</code> was not working correctly since igraph 0.10.0 due to a poor choice of initial coordinates. This is now fixed.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_centralization_degree_tmax()</code>, <code class="language-plaintext highlighter-rouge">igraph_centralization_betweenness_tmax()</code>, <code class="language-plaintext highlighter-rouge">igraph_centralization_closeness_tmax()</code>, and <code class="language-plaintext highlighter-rouge">igraph_centralization_eigenvector_centrality_tmax()</code> now validate their <code class="language-plaintext highlighter-rouge">nodes</code> parameter.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_centralization_degree_tmax()</code>, <code class="language-plaintext highlighter-rouge">igraph_centralization_betweenness_tmax()</code>, <code class="language-plaintext highlighter-rouge">igraph_centralization_closeness_tmax()</code>, and <code class="language-plaintext highlighter-rouge">igraph_centralization_eigenvector_centrality_tmax()</code> now return NaN for zero-vertex graphs. Previously they would return invalid values.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_centralization_eigenvector_centrality_tmax()</code> now returns 0 for the undirected singleton graph. Previous it would return an invalid value.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_motifs_randesu_estimate()</code> now validates the sample size.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_bipartite_projection_size()</code> now validates the bipartite <code class="language-plaintext highlighter-rouge">types</code> vector.</li>
</ul>

<h3 id="deprecated">Deprecated</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_minimum_spanning_tree_prim()</code> and <code class="language-plaintext highlighter-rouge">igraph_minimum_spanning_tree_unweighted()</code> are deprecated. Use <code class="language-plaintext highlighter-rouge">igraph_minimum_spanning_tree()</code> in conjunction with <code class="language-plaintext highlighter-rouge">igraph_subgraph_from_edges()</code> instead.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_array3_t</code> and all associated functions are deprecated and scheduled for removal in igraph 1.0.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_qsort_ind()</code> is deprecated in favour of <code class="language-plaintext highlighter-rouge">igraph_vector_sort_ind()</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_binsearch2()</code> is deprecated in favour of <code class="language-plaintext highlighter-rouge">igraph_vector_contains_sorted()</code>.</li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>Fixed multiple memory leaks in benchmark programs.</li>
  <li>Documentation improvements.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.10.15, the thirteenth bugfix release of the 0.10 series, has arrived, with several new additions, bug fixes and performance improvements. As usual, the source can be obtained from the GitHub releases page.]]></summary></entry><entry><title type="html">python-igraph 0.11.8</title><link href="https://igraph.org/2024/10/28/igraph-0.11.8-python.html" rel="alternate" type="text/html" title="python-igraph 0.11.8" /><published>2024-10-28T00:00:00+00:00</published><updated>2024-10-28T00:00:00+00:00</updated><id>https://igraph.org/2024/10/28/igraph-0.11.8-python</id><content type="html" xml:base="https://igraph.org/2024/10/28/igraph-0.11.8-python.html"><![CDATA[<p><a href="https://python.igraph.org/en/0.11.8/">python-igraph</a> 0.11.8, the seventh bugfix release of the 0.11 series, has arrived. The primary reason for this release is to update the C core of igraph to 0.10.14, which brings a few bugfixes and also a few new functions to the Python interface. This release also adds support for Python 3.13. Please refer to the <a href="https://github.com/igraph/python-igraph/releases/tag/0.11.8">changelog</a> for more details.</p>

<p>The preferred way of installing the Python interface is via <code class="language-plaintext highlighter-rouge">pip</code>; typing <code class="language-plaintext highlighter-rouge">pip install igraph</code> should install a pre-compiled Python wheel on most supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the source code are also available from the <a href="https://pypi.org/project/igraph/0.11.8/">Python Package Index page</a>.</p>

<p>Read on for more details about the changes in version 0.11.8.</p>

<!--more-->

<h3 id="added">Added</h3>

<ul>
  <li>Added <code class="language-plaintext highlighter-rouge">Graph.feedback_vertex_set()</code> to calculate a feedback vertex set of the graph.</li>
  <li>Added new methods to <code class="language-plaintext highlighter-rouge">Graph.feedback_arc_set()</code> that allows the user to select the specific integer problem formulation used by the underlying solver.</li>
</ul>

<h3 id="changed">Changed</h3>

<ul>
  <li>Ensured compatibility with Python 3.13.</li>
  <li>The C core of igraph was updated to version 0.10.14.</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li>Fixed a potential memory leak in the <code class="language-plaintext highlighter-rouge">Graph.get_shortest_path_astar()</code> heuristic function callback.</li>
</ul>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.11.8, the seventh bugfix release of the 0.11 series, has arrived. The primary reason for this release is to update the C core of igraph to 0.10.14, which brings a few bugfixes and also a few new functions to the Python interface. This release also adds support for Python 3.13. Please refer to the changelog for more details.]]></summary></entry><entry><title type="html">python-igraph 0.11.6</title><link href="https://igraph.org/2024/07/08/igraph-0.11.6-python.html" rel="alternate" type="text/html" title="python-igraph 0.11.6" /><published>2024-07-08T00:00:00+00:00</published><updated>2024-07-08T00:00:00+00:00</updated><id>https://igraph.org/2024/07/08/igraph-0.11.6-python</id><content type="html" xml:base="https://igraph.org/2024/07/08/igraph-0.11.6-python.html"><![CDATA[<p><a href="https://python.igraph.org/en/0.11.6/">python-igraph</a> 0.11.6, the sixth bugfix release of the 0.11 series, has arrived. The primary reason for this release is to update the C core of igraph to 0.10.13, which brings a few bugfixes and also a few new functions to the Python interface. Please refer to the <a href="https://github.com/igraph/python-igraph/releases/tag/0.11.6">changelog</a> for more details.</p>

<p>The preferred way of installing the Python interface is via <code class="language-plaintext highlighter-rouge">pip</code>; typing <code class="language-plaintext highlighter-rouge">pip install igraph</code> should install a pre-compiled Python wheel on most supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the source code are also available from the <a href="https://pypi.org/project/igraph/0.11.6/">Python Package Index page</a>.</p>

<p>Read on for more details about the changes in version 0.11.6.</p>

<!--more-->

<h3 id="added">Added</h3>

<ul>
  <li>Added <code class="language-plaintext highlighter-rouge">Graph.Hypercube()</code> for creating n-dimensional hypercube graphs.</li>
  <li>Added <code class="language-plaintext highlighter-rouge">Graph.Chung_Lu()</code> for sampling from the Chung-Lu model as well as several related models.</li>
  <li>Added <code class="language-plaintext highlighter-rouge">Graph.is_complete()</code> to test if there is a connection between all distinct pairs of vertices.</li>
  <li>Added <code class="language-plaintext highlighter-rouge">Graph.is_clique()</code> to test if a set of vertices forms a clique.</li>
  <li>Added <code class="language-plaintext highlighter-rouge">Graph.is_independent_vertex_set()</code> to test if some vertices form an independent set.</li>
  <li>Added <code class="language-plaintext highlighter-rouge">Graph.mean_degree()</code> for a convenient way to compute the average degree of a graph.</li>
</ul>

<h3 id="changed">Changed</h3>

<ul>
  <li>The C core of igraph was updated to version 0.10.13.</li>
  <li><code class="language-plaintext highlighter-rouge">Graph.rewire()</code> now attempts to perform edge swaps 10 times the number of edges by default.</li>
  <li>Error messages issued when an attribute is not found now mention the name and type of that attribute.</li>
</ul>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.11.6, the sixth bugfix release of the 0.11 series, has arrived. The primary reason for this release is to update the C core of igraph to 0.10.13, which brings a few bugfixes and also a few new functions to the Python interface. Please refer to the changelog for more details.]]></summary></entry><entry><title type="html">C/igraph 0.10.13</title><link href="https://igraph.org/2024/06/28/igraph-0.10.13-c.html" rel="alternate" type="text/html" title="C/igraph 0.10.13" /><published>2024-06-28T00:00:00+00:00</published><updated>2024-06-28T00:00:00+00:00</updated><id>https://igraph.org/2024/06/28/igraph-0.10.13-c</id><content type="html" xml:base="https://igraph.org/2024/06/28/igraph-0.10.13-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.10.13, the twelfth bugfix release of the 0.10 series, has arrived,
with several new additions, bug fixes and performance improvements.
As usual, the source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.10.13">the GitHub releases page</a>.</p>

<p>A summary of changes in 0.10.13 is below.</p>

<!--more-->

<h3 id="added">Added</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_bitset_fill()</code> sets all elements of a bitset to the same value (experimental function).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_bitset_null()</code> clears all elements of a bitset (experimental function).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_bitset_is_all_zero()</code>, <code class="language-plaintext highlighter-rouge">igraph_bitset_is_all_one()</code>, <code class="language-plaintext highlighter-rouge">igraph_bitset_is_any_zero()</code>, <code class="language-plaintext highlighter-rouge">igraph_bitset_is_any_one()</code> check if any/all elements of a bitset are zeros/ones (experimental functions).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_chung_lu_game()</code> implements the classic Chung-Lu model, as well as a number of its variants (experimental function).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_mean_degree()</code> computes the average of vertex degrees (experimental function).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_count_loops()</code> counts self-loops in the graph (experimental function).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_is_clique()</code> checks if all pairs within a set of vertices are connected (experimental function).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_is_independent_vertex_set()</code> checks if no pairs within a set of vertices are connected (experimental function).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_hypercube()</code> creates a hypercube graph (experimental function).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_intersection_size_sorted()</code> counts elements common to two sorted vectors (experimental function).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_stack_capacity()</code> returns the allocated capacity of a stack.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_is_all_finite()</code> checks if all elements in a vector are finite (i.e. neither NaN nor Inf).</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li>Fixed a bug that incorrectly cached that a graph has no multiple edges when <code class="language-plaintext highlighter-rouge">igraph_init_adjlist()</code> was called with <code class="language-plaintext highlighter-rouge">IGRAPH_NO_LOOPS</code> and <code class="language-plaintext highlighter-rouge">IGRAPH_NO_MULTIPLE</code> and all the multi-edges were loop edges.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_is_forest()</code> would fail to set the result variable when testing for a directed forest, and it was already cached that the graph was not an undirected forest.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_hub_and_authority_scores()</code> no longer clips negative results to zeros when negative weights are present.</li>
  <li>Fixed an assertion failure in <code class="language-plaintext highlighter-rouge">igraph_realize_bipartite_degree_sequence()</code> with some non-graphical degree sequences when requesting simple bipartite graphs.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_static_fitness_game()</code> checks the input more carefully, and avoids an infinite loop in rare edge cases, such as when (almost) all fitness scores are zero.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_arpack_rnsolve()</code> used the incorrect error message text for some errors. This is now corrected.</li>
  <li>Corrected the detection of some MSVC-specific bitset intrinsics during configuration.</li>
  <li>Corrected a bug in the fallback implementation of <code class="language-plaintext highlighter-rouge">igraph_bitset_countl_zero()</code> when <code class="language-plaintext highlighter-rouge">IGRAPH_INTEGER_SIZE</code> was set to 32. This fallback implementation was <em>not</em> used with GCC, Clang, or MSVC.</li>
</ul>

<h3 id="changed">Changed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_is_graphical()</code> and <code class="language-plaintext highlighter-rouge">igraph_is_bigraphical()</code> are now linear-time in all cases, and generally several times faster than before (thanks to <a href="https://github.com/gendelpiekel">@gendelpiekel</a>, contributed in <a href="https://github.com/igraph/igraph/issues/2605">#2605</a>).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_erdos_renyi_game_gnp()</code> can now generate graphs with more than a hundred million vertices.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_hub_and_authority_scores()</code> now warns when negative edge weights are present.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_layout_lgl()</code> now uses a BFS tree rooted in the vertex specified as <code class="language-plaintext highlighter-rouge">proot</code> to guide the layout. Previously it used an unspecified (arbitrary) spanning tree.</li>
  <li>Updated the internal heuristics used by igraph’s ARPACK interface, <code class="language-plaintext highlighter-rouge">igraph_arpack_rssolve()</code> and <code class="language-plaintext highlighter-rouge">igraph_arpack_rnsolve()</code>, to improve the robustness of calculations.</li>
  <li>Updated the initial vector construction in <code class="language-plaintext highlighter-rouge">igraph_hub_and_authority_scores()</code>, <code class="language-plaintext highlighter-rouge">igraph_eigenvector_centrality()</code> and <code class="language-plaintext highlighter-rouge">igraph_(personalized_)pagerank()</code> with <code class="language-plaintext highlighter-rouge">IGRAPH_PAGERANK_ALGO_ARPACK</code>. This improves the robustness and convergence of calculations.</li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>Documentation improvements.</li>
  <li>Reduced the memory usage of several functions by using bitsets instead of boolean vectors.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_intersect_sorted()</code> has better performance when the input vector sizes are similar.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.10.13, the twelfth bugfix release of the 0.10 series, has arrived, with several new additions, bug fixes and performance improvements. As usual, the source can be obtained from the GitHub releases page.]]></summary></entry><entry><title type="html">The igraph R package crossed the 2.0 threshold!</title><link href="https://igraph.org/2024/05/21/rigraph-2.0.0.html" rel="alternate" type="text/html" title="The igraph R package crossed the 2.0 threshold!" /><published>2024-05-21T00:00:00+00:00</published><updated>2024-05-21T00:00:00+00:00</updated><id>https://igraph.org/2024/05/21/rigraph-2.0.0</id><content type="html" xml:base="https://igraph.org/2024/05/21/rigraph-2.0.0.html"><![CDATA[<p>We’re thrilled to announce that igraph 2.0 has been released!
In this post, we highlight the most important changes.</p>

<h1 id="the-r-package-is-now-in-sync-with-the-c-core">The R package is now in sync with the C core</h1>

<p>This major release brings development in line with <a href="https://igraph.org/c/">the igraph C library</a>.
Version 1.6.0 of the R package used version 0.9.10 of the C core. 
The changes in the 0.10 series of the C core are now taken up in version 2.0 of the R package. 
Having the R package use the latest version of the C core was a huge undertaking, and is a great milestone which makes the many improvements from version 0.10 of the C core available to R users.</p>

<p>Improvements made in the C core will be made available more easily in
functions in the R package. 
See the <a href="https://github.com/igraph/rigraph/blob/main/src/vendor/cigraph/CHANGELOG.md">complete changelog</a> of the C core. 
While we tried to maintain compatibility with version 1.6.0 of the R interface, it wasn’t always possible. 
Refer to the “Breaking changes” sections in the changelog of the R package
(<a href="https://r.igraph.org/news/index.html#breaking-changes-2-0-0">breaking changes section</a>).
If you maintain a package that depends on igraph, you may have heard from us.</p>

<p>The move to version 0.10 of C/igraph brings many quality improvements,
including support for graphs with billions of vertices and edges on 64-bit computers, much more stringent error checking, 
as well as lots of improvements to robustness, reliability and mathematical consistency
across functions.</p>

<p>Future work will aim at further automating the generation of R code from C code, making improved C core functionality more quickly available to R users. 
Additionally, we plan to expose more C core functions, since not all functions are available to R users just yet.</p>

<h1 id="improvements-to-the-documentation">Improvements to the documentation</h1>

<p>The igraph R package now has a <a href="https://r.igraph.org/">website</a>, generated with the popular pkgdown R package, that is to say, a website that has a predictable structure and that includes a search functionality. 
The website now features an introductory vignette contributed by <a href="https://github.com/adriandiazlab">Adrian Diaz</a> and Fabio Zanini in both <a href="https://r.igraph.org/articles/igraph.html">English</a> and <a href="https://r.igraph.org/articles/igraph_ES.html">Spanish</a>.</p>

<h1 id="towards-a-more-explicit-lifecycle">Towards a more explicit lifecycle</h1>

<p>We are in the middle of efforts aimed at making the lifecycle of functions more explicit so that you might know what function is deprecated, and which function is more experimental. 
For instance, we will slowly be removing most <a href="https://r.igraph.org/articles/deprecated-dot-case.html">“dotted-names functions”</a>,
like add.edges() that is now add_edges(), although both versions currently still work. 
The <a href="https://r.igraph.org/reference/is_biconnected.html"><code class="language-plaintext highlighter-rouge">is_biconnected()</code>
function</a> is an example of an experimental function, that is to say, a C function that was just exposed.</p>

<h1 id="conclusion">Conclusion</h1>

<p>We’d be thankful to hear from you if you experience any difficulty with the new release. 
Please cast us a line (and a <a href="https://reprex.tidyverse.org/">reprex</a>!) in the <a href="https://github.com/igraph/rigraph/issues">issue tracker</a>. 
For further feedback, please use igraph’s <a href="https://igraph.discourse.group">discussion forum</a>. 
Do not hesitate to share about the release… in your networks. 😉</p>

<h1 id="acknowledgements">Acknowledgements</h1>

<p>Thanks a ton to all the contributors who helped us craft the new igraph package: <a href="https://github.com/a-lambda">@a-lambda</a>, <a href="https://github.com/Antonov548">@Antonov548</a>, <a href="https://github.com/barracuda156">@barracuda156</a>, <a href="https://github.com/bebejhun">@bebejhun</a>, <a href="https://github.com/bockthom">@bockthom</a>, <a href="https://github.com/brooksambrose">@brooksambrose</a>, <a href="https://github.com/CdeMills">@CdeMills</a>, <a href="https://github.com/clpippel">@clpippel</a>, <a href="https://github.com/csqsiew">@csqsiew</a>, <a href="https://github.com/dmurdoch">@dmurdoch</a>, <a href="https://github.com/Flu09">@Flu09</a>, <a href="https://github.com/Ganson2018">@Ganson2018</a>, <a href="https://github.com/gherrarte">@gherrarte</a>, <a href="https://github.com/gwfs521">@gwfs521</a>, <a href="https://github.com/jefferis">@jefferis</a>, <a href="https://github.com/jeroen">@jeroen</a>, <a href="https://github.com/jessijessi">@jessijessi</a>, <a href="https://github.com/joshua-zh">@joshua-zh</a>, <a href="https://github.com/kalibera">@kalibera</a>, <a href="https://github.com/knwng">@knwng</a>, <a href="https://github.com/krlmlr">@krlmlr</a>, <a href="https://github.com/Lighter-k">@Lighter-k</a>, <a href="https://github.com/louisaslett">@louisaslett</a>, <a href="https://github.com/lptolik">@lptolik</a>, <a href="https://github.com/lufuhao">@lufuhao</a>, <a href="https://github.com/maelle">@maelle</a>, <a href="https://github.com/maksymiuks">@maksymiuks</a>, <a href="https://github.com/Matyasch">@Matyasch</a>, <a href="https://github.com/mfansler">@mfansler</a>, <a href="https://github.com/ngmaclaren">@ngmaclaren</a>, <a href="https://github.com/noriakis">@noriakis</a>, <a href="https://github.com/reuning">@reuning</a>, <a href="https://github.com/ntamas">@ntamas</a>, <a href="https://github.com/snowGlint">@snowGlint</a>, <a href="https://github.com/stephenashton-dhsc">@stephenashton-dhsc</a>, <a href="https://github.com/szhorvat">@szhorvat</a>, <a href="https://github.com/tdhock">@tdhock</a>, <a href="https://github.com/vtraag">@vtraag</a>, <a href="https://github.com/xinguo1236">@xinguo1236</a>, and <a href="https://github.com/Zhaoju-Deng">@Zhaoju-Deng</a>.</p>]]></content><author><name></name></author><category term="r" /><summary type="html"><![CDATA[We’re thrilled to announce that igraph 2.0 has been released! In this post, we highlight the most important changes.]]></summary></entry><entry><title type="html">python-igraph 0.11.5</title><link href="https://igraph.org/2024/05/07/igraph-0.11.5-python.html" rel="alternate" type="text/html" title="python-igraph 0.11.5" /><published>2024-05-07T00:00:00+00:00</published><updated>2024-05-07T00:00:00+00:00</updated><id>https://igraph.org/2024/05/07/igraph-0.11.5-python</id><content type="html" xml:base="https://igraph.org/2024/05/07/igraph-0.11.5-python.html"><![CDATA[<p><a href="https://python.igraph.org/en/0.11.5/">python-igraph</a> 0.11.5, the fifth bugfix release of the 0.11 series, has arrived. The primary reason for this release is to update the C core of igraph to 0.10.12, which brings quite a few bugfixes to the Python interface. Please refer to the <a href="https://github.com/igraph/python-igraph/releases/tag/0.11.5">changelog</a> for more details.</p>

<p>The preferred way of installing the Python interface is via <code class="language-plaintext highlighter-rouge">pip</code>; typing <code class="language-plaintext highlighter-rouge">pip install igraph</code> should install a pre-compiled Python wheel on most supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the source code are also available from the <a href="https://pypi.org/project/igraph/0.11.3/">Python Package Index page</a>.</p>

<p>Read on for more details about the changes in version 0.11.5.</p>

<!--more-->

<h3 id="added">Added</h3>

<ul>
  <li>Added a <code class="language-plaintext highlighter-rouge">prefixattr=...</code> keyword argument to <code class="language-plaintext highlighter-rouge">Graph.write_graphml()</code> that allows the user to strip the <code class="language-plaintext highlighter-rouge">g_</code>, <code class="language-plaintext highlighter-rouge">v_</code> and <code class="language-plaintext highlighter-rouge">e_</code> prefixes from GraphML files written by igraph.</li>
</ul>

<h3 id="changed">Changed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">Graph.are_connected()</code> has now been renamed to <code class="language-plaintext highlighter-rouge">Graph.are_adjacent()</code>, following up a similar change in the C core. The old name of the function is deprecated but will be kept around until at least 0.12.0.</li>
  <li>The C core of igraph was updated to version 0.10.12.</li>
  <li>Deprecated <code class="language-plaintext highlighter-rouge">PyCObject</code> API calls in the C code were replaced by calls to <code class="language-plaintext highlighter-rouge">PyCapsule</code>, thanks to <a href="https://github.com/DavidRConnell">@DavidRConnell</a> in <a href="https://github.com/igraph/python-igraph/pull/763">#763</a></li>
  <li><code class="language-plaintext highlighter-rouge">get_shortest_path()</code> documentation was clarified by <a href="https://github.com/JDPowell648">@JDPowell648</a> in <a href="https://github.com/igraph/python-igraph/pull/764">#764</a></li>
  <li>It is now possible to link to an existing igraph C core on MSYS2, thanks to <a href="https://github.com/Kreijstal">@Kreijstal</a> in <a href="https://github.com/igraph/python-igraph/pull/770">#770</a></li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li>Bugfix in the NetworkX graph conversion code by <a href="https://github.com/rmmaf">@rmmaf</a> in <a href="https://github.com/igraph/python-igraph/pull/767">#767</a></li>
</ul>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.11.5, the fifth bugfix release of the 0.11 series, has arrived. The primary reason for this release is to update the C core of igraph to 0.10.12, which brings quite a few bugfixes to the Python interface. Please refer to the changelog for more details.]]></summary></entry><entry><title type="html">C/igraph 0.10.12</title><link href="https://igraph.org/2024/05/06/igraph-0.10.12-c.html" rel="alternate" type="text/html" title="C/igraph 0.10.12" /><published>2024-05-06T00:00:00+00:00</published><updated>2024-05-06T00:00:00+00:00</updated><id>https://igraph.org/2024/05/06/igraph-0.10.12-c</id><content type="html" xml:base="https://igraph.org/2024/05/06/igraph-0.10.12-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.10.12, the eleventh bugfix release of the 0.10 series, has arrived.
As usual, the source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.10.12">the GitHub releases page</a>.</p>

<p>This release brings a large number of quality enhancements, including many bug fixes and performance improvements. Upgrading is highly recommended for all igraph users.</p>

<p>This will be one of the last—if not <em>the</em> last—releases of the 0.10 series, with igraph 1.0 planned for release early summer this year. Pre-releases will be made available for feedback from the community.</p>

<p>A summary of changes in 0.10.12 is below.</p>

<!--more-->

<h3 id="added">Added</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_transitive_closure()</code> computes the transitive closure of a graph (experimental function).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_reachability()</code> determines which vertices are reachable from each other in a graph (experimental function).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_count_reachable()</code> counts how many vertices are reachable from each vertex (experimental function).</li>
  <li>Added a bitset data structure, <code class="language-plaintext highlighter-rouge">igraph_bitset_t</code>, and a set of corresponding functions (experimental functionality).</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_label_propagation()</code> is now interruptible.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_is_bipartite()</code> would on rare occasions return invalid results when the cache was employed.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_weighted_adjacency()</code> correctly passes through NaN values with <code class="language-plaintext highlighter-rouge">IGRAPH_ADJ_MAX</code>, and correctly recognizes symmetric adjacency matrices containing NaN values with <code class="language-plaintext highlighter-rouge">IGRAPH_ADJ_UNDIRECTED</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_read_graph_gml()</code> can now read GML files that use ids larger than what is representable on 32 bits, provided that igraph was configured with a 64-bit <code class="language-plaintext highlighter-rouge">igraph_integer_t</code> size.</li>
  <li>Fixed a performance issue in <code class="language-plaintext highlighter-rouge">igraph_read_graph_graphml()</code> with files containing a very large number of entities, such as <code class="language-plaintext highlighter-rouge">&amp;gt;</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_read_graph_pajek()</code> has improved vertex ID validation that better matches that of Pajek’s own behavior.</li>
</ul>

<h3 id="changed">Changed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_eigenvector_centrality()</code> no longer issues a warning when the input is directed and weighted. When using this function, keep in mind that eigenvector centrality is well-defined only for (strongly) connected graphs, and edges with a zero weights are effectively treated as absent.</li>
</ul>

<h3 id="deprecated">Deprecated</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_transitive_closure_dag()</code> is deprecated in favour of <code class="language-plaintext highlighter-rouge">igraph_transitive_closure()</code></li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>Documentation improvements.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_strength()</code> and <code class="language-plaintext highlighter-rouge">igraph_degree(loops=false)</code> are now faster when calculating values for all vertices (contributed by @gendelpiekel in <a href="https://github.com/igraph/igraph/pull/2602">#2602</a>)</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.10.12, the eleventh bugfix release of the 0.10 series, has arrived. As usual, the source can be obtained from the GitHub releases page.]]></summary></entry><entry><title type="html">C/igraph 0.10.11</title><link href="https://igraph.org/2024/04/02/igraph-0.10.11-c.html" rel="alternate" type="text/html" title="C/igraph 0.10.11" /><published>2024-04-02T00:00:00+00:00</published><updated>2024-04-02T00:00:00+00:00</updated><id>https://igraph.org/2024/04/02/igraph-0.10.11-c</id><content type="html" xml:base="https://igraph.org/2024/04/02/igraph-0.10.11-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.10.11, the tenth bugfix release of the 0.10 series, has arrived.
As usual, the source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.10.11">the GitHub releases page</a>.</p>

<p>This release brings a large number of quality enhancements, including many bug fixes and performance improvements. Upgrading is highly recommended for all igraph users.</p>

<p>This will be one of the last—if not <em>the</em> last—releases of the 0.10 series, with igraph 1.0 planned for release early summer this year. Pre-releases will be made available for feedback from the community.</p>

<p>A summary of changes in 0.10.11 is below.</p>

<!--more-->

<h3 id="added">Added</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_is_complete()</code> checks whether there is a connection between all pairs of vertices (experimental function, contributed by Aymeric Agon-Rambosson in <a href="https://github.com/igraph/igraph/pull/2510">#2510</a>).</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li>Fixed a corruption of the “finally” stack in <code class="language-plaintext highlighter-rouge">igraph_write_graph_gml()</code> for certain invalid GML files.</li>
  <li>Fixed a memory leak in <code class="language-plaintext highlighter-rouge">igraph_write_graph_lgl()</code> when vertex names were present but edge weights were not.</li>
  <li>Fixed the handling of duplicate edge IDs in <code class="language-plaintext highlighter-rouge">igraph_subgraph_from_edges()</code>.</li>
  <li>Fixed conversion of sparse matrices to dense with <code class="language-plaintext highlighter-rouge">igraph_sparsemat_as_matrix()</code> when sparse matrix object did not make use of its full allocated capacity.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_write_graph_ncol()</code> and <code class="language-plaintext highlighter-rouge">igraph_write_graph_lgl()</code> now refuse to write vertex names which would result in an invalid file that cannot be read back in.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_write_graph_gml()</code> now ignores graph attributes called <code class="language-plaintext highlighter-rouge">edge</code> or <code class="language-plaintext highlighter-rouge">node</code> with a warning. Writing these would create an invalid GML file that igraph couldn’t read back.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_disjoint_union()</code> and <code class="language-plaintext highlighter-rouge">igraph_disjoint_union_many()</code> now check for overflow.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_read_graph_graphml()</code> now correctly compares attribute values with certain expected values, meaning that prefixes of valid values of <code class="language-plaintext highlighter-rouge">attr.type</code> are not accepted anymore.</li>
  <li>Empty IDs are not allowed any more in <code class="language-plaintext highlighter-rouge">&lt;key&gt;</code> tags of GraphML files as this is a violation of the GraphML specification.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_is_separator()</code> and <code class="language-plaintext highlighter-rouge">igraph_is_minimal_separator()</code> now work correctly with disconnected graphs.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_linegraph()</code> now considers self-loops to be self-adjacent in undirected graphs, bringing consistency with how directed graphs were already handled in previous versions.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_all_st_mincuts()</code> now correctly returns all minimum cuts. This also fixes a problem with <code class="language-plaintext highlighter-rouge">igraph_minimum_size_separators()</code>.</li>
  <li>Corrected minor error in <code class="language-plaintext highlighter-rouge">igraph_community_label_propagation()</code> when adding labels to isolated nodes with some fixed labels present.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_spinglass()</code> no longer crashes when passing an edgeless graph and an empty weight vector.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_rewire()</code> no longer crashes on graphs with more than three vertices but fewer than two edges.</li>
</ul>

<h3 id="changed">Changed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_rewire()</code> on longer throws an error on graphs with fewer than four vertices. These graphs are now returned unchanged, just like other graphs which are the unique realization of their degree sequence.</li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>Performance: <code class="language-plaintext highlighter-rouge">igraph_is_simple()</code> now makes more granular use of the cache.</li>
  <li>Performance: <code class="language-plaintext highlighter-rouge">igraph_degree()</code> now makes use of the cache when checking for self-loops.</li>
  <li>The performance of <code class="language-plaintext highlighter-rouge">igraph_is_minimal_separator()</code> was improved.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_is_graphical()</code> now performs graphicality checks for degree sequences of simple directed graphs in linear time, an improvement from the previously used quadratic algorithm (contributed by Arnar Bjarni Arnarson in <a href="https://github.com/igraph/igraph/pull/2537">#2537</a>).</li>
  <li>Documentation improvements.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.10.11, the tenth bugfix release of the 0.10 series, has arrived. As usual, the source can be obtained from the GitHub releases page.]]></summary></entry><entry><title type="html">C/igraph 0.10.10</title><link href="https://igraph.org/2024/02/13/igraph-0.10.10-c.html" rel="alternate" type="text/html" title="C/igraph 0.10.10" /><published>2024-02-13T00:00:00+00:00</published><updated>2024-02-13T00:00:00+00:00</updated><id>https://igraph.org/2024/02/13/igraph-0.10.10-c</id><content type="html" xml:base="https://igraph.org/2024/02/13/igraph-0.10.10-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.10.10, the ninth bugfix release of the 0.10 series, has arrived.</p>

<p>The source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.10.10">the GitHub releases page</a>.</p>

<p>This is primarily a maintenance release with bug fixes, in particular a caching issue in <code class="language-plaintext highlighter-rouge">igraph_is_forest()</code>.</p>

<p>Read on for more details about the changes in version 0.10.10.</p>

<!--more-->

<h3 id="fixed">Fixed</h3>

<ul>
  <li>When <code class="language-plaintext highlighter-rouge">igraph_is_forest()</code> determined that a graph is not a directed forest, and the <code class="language-plaintext highlighter-rouge">roots</code> output parameter was set to <code class="language-plaintext highlighter-rouge">NULL</code>, it would incorrectly cache that the graph is also not an undirected forest.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_spanner()</code> now correctly ignores edge directions, and no longer crashes on directed graphs.</li>
</ul>

<h3 id="deprecated">Deprecated</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_are_connected()</code> is renamed to <code class="language-plaintext highlighter-rouge">igraph_are_adjacent()</code>; the old name is kept available until at least igraph 1.0.</li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>Documentation improvements.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.10.10, the ninth bugfix release of the 0.10 series, has arrived.]]></summary></entry><entry><title type="html">C/igraph 0.10.9</title><link href="https://igraph.org/2024/02/02/igraph-0.10.9-c.html" rel="alternate" type="text/html" title="C/igraph 0.10.9" /><published>2024-02-02T00:00:00+00:00</published><updated>2024-02-02T00:00:00+00:00</updated><id>https://igraph.org/2024/02/02/igraph-0.10.9-c</id><content type="html" xml:base="https://igraph.org/2024/02/02/igraph-0.10.9-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.10.9, the eighth bugfix release of the 0.10 series, has arrived.</p>

<p>The source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.10.9">the GitHub releases page</a>.</p>

<p>This is primarily a maintenance release with bug fixes, but it also adds functions to check whether a graph is biconnected and to construct a bipartite graph from a bidegree sequence.</p>

<p>Read on for more details about the changes in version 0.10.9.</p>

<!--more-->

<h3 id="added">Added</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_is_biconnected()</code> checks if a graph is biconnected.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_igraph_realize_bipartite_degree_sequence()</code> constructs a bipartite graph that has the given bidegree sequence, optionally ensuring that it is connected.</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li>More robust error handling in HRG code.</li>
  <li>Fixed infinite loop in <code class="language-plaintext highlighter-rouge">igraph_hrg_sample_many()</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_fastgreedy()</code> no longer crashes when providing a modularity vector only, but not a merges matrix of membership vector.</li>
  <li>The graph property cache was not initialized correctly on systems where the size of <code class="language-plaintext highlighter-rouge">bool</code> was not 1 byte (#2477).</li>
  <li>Compatibility with libxml2 version 2.12 (#2442).</li>
</ul>

<h3 id="deprecated">Deprecated</h3>

<ul>
  <li>The macro <code class="language-plaintext highlighter-rouge">STR()</code> is deprecated; use the function <code class="language-plaintext highlighter-rouge">igraph_strvector_get()</code> instead.</li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>Performance: Reduced memory usage and improved initialization performance for <code class="language-plaintext highlighter-rouge">igraph_strvector_t</code>.</li>
  <li>Performance: Improved cache use by <code class="language-plaintext highlighter-rouge">igraph_is_bipartite()</code>.</li>
  <li>The documentation is now also generated in Texinfo format.</li>
  <li>Documentation improvements</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.10.9, the eighth bugfix release of the 0.10 series, has arrived.]]></summary></entry><entry><title type="html">python-igraph 0.11.3</title><link href="https://igraph.org/2023/11/20/igraph-0.11.3-python.html" rel="alternate" type="text/html" title="python-igraph 0.11.3" /><published>2023-11-20T00:00:00+00:00</published><updated>2023-11-20T00:00:00+00:00</updated><id>https://igraph.org/2023/11/20/igraph-0.11.3-python</id><content type="html" xml:base="https://igraph.org/2023/11/20/igraph-0.11.3-python.html"><![CDATA[<p><a href="https://python.igraph.org/en/0.11.3/">python-igraph</a> 0.11.3, the third bugfix release of the 0.11 series, has arrived. The primary reason for this release is to update the C core of igraph to 0.10.8, which brings quite a few bugfixes to the Python interface. This release also fixes a bug in the Matplotlib backend with curved undirected edges. Please refer to the <a href="https://github.com/igraph/python-igraph/releases/tag/0.11.3">changelog</a> for more details.</p>

<p>The preferred way of installing the Python interface is via <code class="language-plaintext highlighter-rouge">pip</code>; typing <code class="language-plaintext highlighter-rouge">pip install igraph</code> should install a pre-compiled Python wheel on most supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the source code are also available from the <a href="https://pypi.org/project/igraph/0.11.3/">Python Package Index page</a>.</p>

<p>Read on for more details about the changes in version 0.11.3, including those that became possible by updating the C core to 0.10.8.</p>

<!--more-->

<h3 id="added">Added</h3>

<ul>
  <li>Added <code class="language-plaintext highlighter-rouge">Graph.__invalidate_cache()</code> for debugging and benchmarking purposes.</li>
</ul>

<h3 id="changed">Changed</h3>

<ul>
  <li>The C core was updated to 0.10.8.</li>
  <li>The behaviour of the Pajek format reader and writer is now more closely aligned with the Pajek software and the reader is more tolerant of input it cannot interpret. Only those vertex and edge parameters are treated as valid which Pajek itself understands, therefore support for <code class="language-plaintext highlighter-rouge">size</code> is now dropped, and support for the <code class="language-plaintext highlighter-rouge">font</code> edge parameter is added. See http://mrvar.fdv.uni-lj.si/pajek/DrawEPS.htm for more information. Invalid/unrecognized parameters are now converted to igraph attributes by the reader, but just as before, they are not output by the writer.</li>
  <li>The Pajek format writer now encodes newline and quotation mark characters in a Pajek-compatible manner (<code class="language-plaintext highlighter-rouge">\n</code> and <code class="language-plaintext highlighter-rouge">&amp;#34;</code>, respectively).</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li>Removed incorrectly added <code class="language-plaintext highlighter-rouge">loops=...</code> argument of <code class="language-plaintext highlighter-rouge">Graph.is_bigraphical()</code>.</li>
  <li>Fixed a bug in the Matplotlib graph drawing backend that filled the interior of undirected curved edges.</li>
  <li>Duplicate vertex IDs in <code class="language-plaintext highlighter-rouge">Graph.induced_subgraph()</code> no longer cause a crash.</li>
  <li>Many graph generators (Erdős-Rényi, De Bruijn, Kautz, full graph, full multipartite and citation graphs, Turán graphs) became interruptible with Ctrl-C.</li>
  <li><code class="language-plaintext highlighter-rouge">Graph.subisomorphic_lad()</code> now returns a single null map when the pattern is the null graph.</li>
  <li><code class="language-plaintext highlighter-rouge">Graph.maxflow()</code> now returns an error code if the source and target vertices are the same. It used to get stuck in an infinite loop in earlier versions.</li>
</ul>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.11.3, the third bugfix release of the 0.11 series, has arrived. The primary reason for this release is to update the C core of igraph to 0.10.8, which brings quite a few bugfixes to the Python interface. This release also fixes a bug in the Matplotlib backend with curved undirected edges. Please refer to the changelog for more details.]]></summary></entry><entry><title type="html">C/igraph 0.10.8</title><link href="https://igraph.org/2023/11/17/igraph-0.10.8-c.html" rel="alternate" type="text/html" title="C/igraph 0.10.8" /><published>2023-11-17T00:00:00+00:00</published><updated>2023-11-17T00:00:00+00:00</updated><id>https://igraph.org/2023/11/17/igraph-0.10.8-c</id><content type="html" xml:base="https://igraph.org/2023/11/17/igraph-0.10.8-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.10.8, the seventh bugfix release of the 0.10 series, has arrived.</p>

<p>The source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.10.8">the GitHub releases page</a>.</p>

<p>This is primarily a maintenance release with bug fixes, but it also adds functions to compute the joint degree matrix, the joint degree distribution and the degree correlation function of graphs as well as a generalized joint distribution of arbitrary vertex categories at the endpoints of edges.</p>

<p>Read on for more details about the changes in version 0.10.8.</p>

<!--more-->

<h3 id="added">Added</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_joint_degree_matrix()</code> computes the joint degree matrix, i.e. counts connections between vertices of different degrees.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_joint_degree_distribution()</code> computes the joint distribution of degrees at either end of edges.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_joint_type_distribution()</code> computes the joint distribution of vertex categories at either end of edges, i.e. the mixing matrix.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_degree_correlation_vector()</code> computes the degree correlation function and its various directed generalizations.</li>
</ul>

<h3 id="changed">Changed</h3>

<ul>
  <li>The behaviour of the Pajek format reader and writer is now more closely aligned with the Pajek software and the reader is more tolerant of input it cannot interpret. Only those vertex and edge parameters are treated as valid which Pajek itself understands, therefore support for <code class="language-plaintext highlighter-rouge">size</code> is now dropped, and support for the <code class="language-plaintext highlighter-rouge">font</code> edge parameter is added. See http://mrvar.fdv.uni-lj.si/pajek/DrawEPS.htm for more information. Invalid/unrecognized parameters are now converted to igraph attributes by the reader, but just as before, they are not output by the writer.</li>
  <li>The Pajek format writer now encodes newline and quotation mark characters in a Pajek-compatible manner (<code class="language-plaintext highlighter-rouge">\n</code> and <code class="language-plaintext highlighter-rouge">&amp;#34;</code>, respectively).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_avg_nearest_neighbor_degree()</code> now supports non-simple graphs.</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li>Resolved “ignoring duplicate libraries” warning when building tests with Xcode 15 on macOS.</li>
  <li>Fixed the handling of duplicate vertex IDs in <code class="language-plaintext highlighter-rouge">igraph_induced_subgraph()</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_which_min()</code> and <code class="language-plaintext highlighter-rouge">igraph_vector_which_max()</code> no longer allow zero-length input, which makes them consistent with other similar functions, and was the originally intended behaviour. Passing zero-length input is invalid use and currently triggers an assertion failure.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_erdos_renyi_game_gnm()</code> and <code class="language-plaintext highlighter-rouge">igraph_erdos_renyi_game_gnp()</code> are now interruptible.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_de_bruijn()</code> and <code class="language-plaintext highlighter-rouge">igraph_kautz()</code> are now interruptible.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_full()</code>, <code class="language-plaintext highlighter-rouge">igraph_full_citation()</code>, <code class="language-plaintext highlighter-rouge">igraph_full_multipartite()</code> and <code class="language-plaintext highlighter-rouge">igraph_turan()</code> are now interruptible.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_avg_nearest_neighbor_degree()</code> did not compute <code class="language-plaintext highlighter-rouge">knnk</code> correctly in the weighted case.</li>
  <li>Fixed variadic arguments of invalid types, which could cause incorrect behaviour with <code class="language-plaintext highlighter-rouge">igraph_matrix_print()</code>, as well as test suite failures, on some platforms. 32-bit x86 was affected when setting <code class="language-plaintext highlighter-rouge">IGRAPH_INTEGER_SIZE</code> to 64.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_subisomorphic_lad()</code> now returns a single null map when the pattern is the null graph.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_spinglass()</code> now checks its parameters more carefully.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_similarity_dice_pairs()</code> and <code class="language-plaintext highlighter-rouge">igraph_similarity_jaccard_pairs()</code> now validate vertex IDs.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_maxflow()</code> now returns an error code if the source and target vertices are the same. It used to get stuck in an infinite loop in earlier versions when the <code class="language-plaintext highlighter-rouge">flow</code> argument was non-NULL.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.10.8, the seventh bugfix release of the 0.10 series, has arrived.]]></summary></entry><entry><title type="html">python-igraph 0.10.8</title><link href="https://igraph.org/2023/09/12/igraph-0.10.8-python.html" rel="alternate" type="text/html" title="python-igraph 0.10.8" /><published>2023-09-12T00:00:00+00:00</published><updated>2023-09-12T00:00:00+00:00</updated><id>https://igraph.org/2023/09/12/igraph-0.10.8-python</id><content type="html" xml:base="https://igraph.org/2023/09/12/igraph-0.10.8-python.html"><![CDATA[<p><a href="https://python.igraph.org/en/0.10.8/">python-igraph</a> 0.10.8, the seventh bugfix release of the 0.10 series, has arrived. This release updates the C core of igraph to 0.10.7, and adds support for weighted eccentricity and radius calculations. There are also some minor additions and improvements; please refer to the <a href="https://github.com/igraph/python-igraph/releases/tag/0.10.8">changelog</a> for more details.</p>

<p>The preferred way of installing the Python interface is via <code class="language-plaintext highlighter-rouge">pip</code>; typing <code class="language-plaintext highlighter-rouge">pip install igraph</code> should install a pre-compiled Python wheel on most supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the source code are also available from the <a href="https://pypi.org/project/igraph/0.10.8/">Python Package Index page</a>.</p>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.10.8, the seventh bugfix release of the 0.10 series, has arrived. This release updates the C core of igraph to 0.10.7, and adds support for weighted eccentricity and radius calculations. There are also some minor additions and improvements; please refer to the changelog for more details.]]></summary></entry><entry><title type="html">C/igraph 0.10.7</title><link href="https://igraph.org/2023/09/04/igraph-0.10.7-c.html" rel="alternate" type="text/html" title="C/igraph 0.10.7" /><published>2023-09-04T00:00:00+00:00</published><updated>2023-09-04T00:00:00+00:00</updated><id>https://igraph.org/2023/09/04/igraph-0.10.7-c</id><content type="html" xml:base="https://igraph.org/2023/09/04/igraph-0.10.7-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.10.7, the sixth bugfix release of the 0.10 series, has arrived.</p>

<p>The source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.10.7">the GitHub releases page</a>.</p>

<p>This is primarily a maintenance release with bug fixes, but it also adds weighted variants of <code class="language-plaintext highlighter-rouge">igraph_radius()</code> and <code class="language-plaintext highlighter-rouge">igraph_graph_center()</code> as experimental functions. Their API will be finalized in version 0.11.0 (although we do not anticipate any changes compared to the current version).</p>

<p>Read on for more details about the changes in version 0.10.7.</p>

<!--more-->

<h3 id="added">Added</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_radius_dijkstra()</code> computes the graph radius with weighted edges (experimental function).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_graph_center_dijkstra()</code> computes the graph center, i.e. the set of minimum eccentricity vertices, with weighted edges (experimental function).</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_full_bipartite()</code> now checks for overflow.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_bipartite_game_gnm()</code> and <code class="language-plaintext highlighter-rouge">igraph_bipartite_game_gnp()</code> are now more robust to overflow.</li>
  <li>Bipartite graph creation functions now check input arguments.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_write_graph_dot()</code> now quotes real numbers written in exponential notation as necessary.</li>
  <li>Independent vertex set finding functions could trigger the fatal error “Finally stack too large” when called on large graphs.</li>
</ul>

<h3 id="deprecated">Deprecated</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_bipartite_game()</code> is now deprecated; use <code class="language-plaintext highlighter-rouge">igraph_bipartite_game_gnm()</code> and <code class="language-plaintext highlighter-rouge">igraph_bipartite_game_gnp()</code> instead.</li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>Documentation improvements.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.10.7, the sixth bugfix release of the 0.10 series, has arrived.]]></summary></entry><entry><title type="html">C/igraph 0.10.6</title><link href="https://igraph.org/2023/07/13/igraph-0.10.6-c.html" rel="alternate" type="text/html" title="C/igraph 0.10.6" /><published>2023-07-13T00:00:00+00:00</published><updated>2023-07-13T00:00:00+00:00</updated><id>https://igraph.org/2023/07/13/igraph-0.10.6-c</id><content type="html" xml:base="https://igraph.org/2023/07/13/igraph-0.10.6-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.10.6, the fifth bugfix release of the 0.10 series, has arrived.</p>

<p>The source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.10.6">the GitHub releases page</a>.</p>

<p>This is a maintenance release bringing bug fixes only. In particular, we fixed convergence failures in <code class="language-plaintext highlighter-rouge">igraph_community_voronoi()</code> in certain cases on certain platforms, and ensured compatibility with libxml2 2.11.</p>

<p>Read on for more details about the changes in version 0.10.6.</p>

<!--more-->

<h3 id="fixed">Fixed</h3>

<ul>
  <li>Compatibility with libxml2 2.11.</li>
  <li>Fixed some converge failures in <code class="language-plaintext highlighter-rouge">igraph_community_voronoi()</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">IGRAPH_CALLOC()</code> and <code class="language-plaintext highlighter-rouge">IGRAPH_REALLOC()</code> now check for overflow.</li>
  <li>CMake packages created with the <code class="language-plaintext highlighter-rouge">install</code> target of the CMake build system are now relocatable, i.e. the generated <code class="language-plaintext highlighter-rouge">igraph-targets.cmake</code> file does not contain absolute paths any more.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.10.6, the fifth bugfix release of the 0.10 series, has arrived.]]></summary></entry><entry><title type="html">C/igraph 0.10.5</title><link href="https://igraph.org/2023/06/29/igraph-0.10.5-c.html" rel="alternate" type="text/html" title="C/igraph 0.10.5" /><published>2023-06-29T00:00:00+00:00</published><updated>2023-06-29T00:00:00+00:00</updated><id>https://igraph.org/2023/06/29/igraph-0.10.5-c</id><content type="html" xml:base="https://igraph.org/2023/06/29/igraph-0.10.5-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.10.5, the fourth bugfix release of the 0.10 series, has arrived.</p>

<p>The source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.10.5">the GitHub releases page</a>.</p>

<p>This is a maintenance release bringing bug fixes, performance improvements, as
well as new experimental features.</p>

<p>Read on for more details about the changes in version 0.10.5.</p>

<!--more-->

<h3 id="added">Added</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_graph_power()</code> computes the kth power of a graph (experimental function).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_voronoi()</code> for detecting communities using Voronoi partitioning (experimental function).</li>
</ul>

<h3 id="changes">Changes</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_walktrap()</code> no longer requires <code class="language-plaintext highlighter-rouge">modularity</code> and <code class="language-plaintext highlighter-rouge">merges</code> to be non-NULL when <code class="language-plaintext highlighter-rouge">membership</code> is non-NULL.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_isomorphic()</code> now supports multigraphs.</li>
  <li>Shortest path related functions now consistently ignore edges with positive infinite weights.</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_hub_and_authority_scores()</code>, <code class="language-plaintext highlighter-rouge">igraph_hub_score()</code> and <code class="language-plaintext highlighter-rouge">igraph_authority_score()</code> considered self-loops only once on the diagonal of the adjacency matrix of undirected graphs, thus the result was not identical to that obtained by <code class="language-plaintext highlighter-rouge">igraph_eigenvector_centrality()</code> on loopy undirected graphs. This is now corrected.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_infomap()</code> now checks edge and vertex weights for validity.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_minimum_spanning_tree()</code> and <code class="language-plaintext highlighter-rouge">igraph_minimum_spanning_tree_prim()</code> now check that edge weights are not NaN.</li>
  <li>Fixed an initialization error in the string attribute combiner of the C attribute handler.</li>
  <li>Fixed an issue with the weighted clique number calculation when all the weights were the same.</li>
  <li>HRG functions now require a graph with at least 3 vertices; previous versions crashed with smaller graphs.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_arpack_rssolve()</code> and <code class="language-plaintext highlighter-rouge">igraph_arpack_rnsolve()</code>, i.e. the ARPACK interface in igraph, are now interruptible. As a result, several other functions that rely on ARPACK (eigenvector centrality, hub and authority scores, etc.) also became interruptible.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_get_shortest_paths_dijkstra()</code>, <code class="language-plaintext highlighter-rouge">igraph_get_all_shortest_paths_dijkstra()</code> and <code class="language-plaintext highlighter-rouge">igraph_get_shortest_paths_bellman_ford()</code> now validate the <code class="language-plaintext highlighter-rouge">from</code> vertex.</li>
  <li>Fixed bugs in <code class="language-plaintext highlighter-rouge">igraph_local_scan_1_ecount()</code> for weighted undirected graphs which would miscount loops and multi-edges.</li>
</ul>

<h3 id="deprecated">Deprecated</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_automorphisms()</code> is now deprecated; its new name is <code class="language-plaintext highlighter-rouge">igraph_count_automorphisms()</code>. The old name is kept available until at least igraph 0.11.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_hub_score()</code> and <code class="language-plaintext highlighter-rouge">igraph_authority_score()</code> are now deprecated. Use <code class="language-plaintext highlighter-rouge">igraph_hub_and_authority_scores()</code> instead.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_get_incidence()</code> is now deprecated; its new name is <code class="language-plaintext highlighter-rouge">igraph_get_biadjacency()</code> to reflect that the returned matrix is an <em>adjacency</em> matrix between pairs of vertices and not an <em>incidence</em> matrix between vertices and edges. The new name is kept available until at least igraph 0.11. We plan to re-use the name in later versions to provide a proper incidence matrix where the rows are vertices and the columns are edges.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_hrg_dendrogram()</code> is deprecated because it requires an attribute handler and it goes against the convention of returning attributes in vectors where possible. Use <code class="language-plaintext highlighter-rouge">igraph_from_hrg_dendrogram()</code> instead, which constructs the dendrogram as an igraph graph <em>and</em> returns the associated probabilities in a vector.</li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>Improved performance for <code class="language-plaintext highlighter-rouge">igraph_vertex_connectivity()</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_simplify()</code> makes use of the cache, and avoids simplification when the graph is already known to be simple.</li>
  <li>Documentation improvements.</li>
</ul>

<h3 id="known-issues">Known issues</h3>

<ul>
  <li>
    <p><code class="language-plaintext highlighter-rouge">strtod()</code> does not respect the locale on macOS 13 Ventura, causing the <code class="language-plaintext highlighter-rouge">example::safelocale</code> test to fail within igraph’s test suite. This is a bug in macOS 13. This issue will be inconsequential for most users. It affects use cases when igraph is run within a process whose numeric locale has been explicitly set to one that does not use a decimal point, and then <code class="language-plaintext highlighter-rouge">igraph_enter_safelocale()</code> (or other means) are used to temporarily set the locale to <code class="language-plaintext highlighter-rouge">"C"</code> before calling igraph functions. See the following links for more details:</p>

    <ul>
      <li>https://stackoverflow.com/q/76133503/695132</li>
      <li>https://github.com/igraph/igraph/issues/2340</li>
    </ul>
  </li>
  <li>
    <p>ARPACK-NG 3.9.0 fails to produce a result under rare circumstances. This issue can affect any use of ARPACK-NG in principle, and may cause igraph’s <code class="language-plaintext highlighter-rouge">example::centralization</code> and <code class="language-plaintext highlighter-rouge">test::centralization</code> tests to fail, depending on the specific configuration and BLAS implementation that is being used. For more details, see:</p>

    <ul>
      <li>https://github.com/opencollab/arpack-ng/issues/410</li>
      <li>https://github.com/igraph/igraph/issues/2311</li>
    </ul>
  </li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.10.5, the fourth bugfix release of the 0.10 series, has arrived.]]></summary></entry><entry><title type="html">C/igraph 0.10.4</title><link href="https://igraph.org/2023/01/27/igraph-0.10.4-c.html" rel="alternate" type="text/html" title="C/igraph 0.10.4" /><published>2023-01-27T00:00:00+00:00</published><updated>2023-01-27T00:00:00+00:00</updated><id>https://igraph.org/2023/01/27/igraph-0.10.4-c</id><content type="html" xml:base="https://igraph.org/2023/01/27/igraph-0.10.4-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.10.4, the third bugfix release of the 0.10 series, has arrived.</p>

<p>The source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.10.4">the GitHub releases page</a>.</p>

<p>This release adds support for finding a shortest path with the A* algorithm and for finding a greedy vertex coloring with the DSatur heuristics. It also adds interruption support for the Bellman-Ford and Floyd-Warshall shortest path finder algorithms.</p>

<p>Read on for more details about the changes in version 0.10.4.</p>

<!--more-->

<h3 id="added">Added</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_get_shortest_path_astar()</code> finds a shortest path with the A* algorithm.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vertex_coloring_greedy()</code> now supports the DSatur heuristics (#2284, thanks to @professorcode1).</li>
</ul>

<h3 id="changed">Changed</h3>

<ul>
  <li>The <code class="language-plaintext highlighter-rouge">test</code> build target now only <em>runs</em> the unit tests, but it does not <em>build</em> them. In order to both build and run tests, use the <code class="language-plaintext highlighter-rouge">check</code> target, which continues to behave as before (PR #2291).</li>
  <li>The experimental function <code class="language-plaintext highlighter-rouge">igraph_distances_floyd_warshall()</code> now has <code class="language-plaintext highlighter-rouge">from</code> and <code class="language-plaintext highlighter-rouge">to</code> parameters for choosing source and target vertices.</li>
  <li>The experimental function <code class="language-plaintext highlighter-rouge">igraph_distances_floyd_warshall()</code> now has an additional <code class="language-plaintext highlighter-rouge">method</code> parameter to select a specific algorithm. A faster “Tree” variant of the Floyd-Warshall algorithm is now available (#2267, thanks to @rfulekjames).</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li>The Bellman-Ford shortest path finder is now interruptible.</li>
  <li>The Floyd-Warshall shortest path finder is now interruptible.</li>
  <li>Running CTest no longer builds the tests automatically, as this interfered with VSCode, which would invoke the <code class="language-plaintext highlighter-rouge">ctest</code> executable after configuring a project in order to determine test executables. Use the <code class="language-plaintext highlighter-rouge">build_tests</code> target to build the tests first, or use the <code class="language-plaintext highlighter-rouge">check</code> target to both <em>build</em> and <em>run</em> all unit tests (PR #2291).</li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>Improved the performance and memory usage of <code class="language-plaintext highlighter-rouge">igraph_widest_path_widths_floyd_warshall()</code>.</li>
  <li>Documentation improvements.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.10.4, the third bugfix release of the 0.10 series, has arrived.]]></summary></entry><entry><title type="html">C/igraph 0.10.3</title><link href="https://igraph.org/2022/12/30/igraph-0.10.3-c.html" rel="alternate" type="text/html" title="C/igraph 0.10.3" /><published>2022-12-30T00:00:00+00:00</published><updated>2022-12-30T00:00:00+00:00</updated><id>https://igraph.org/2022/12/30/igraph-0.10.3-c</id><content type="html" xml:base="https://igraph.org/2022/12/30/igraph-0.10.3-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.10.3, the third bugfix release of the 0.10 series, has arrived.</p>

<p>The source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.10.3">the GitHub releases page</a>.</p>

<p>This release adds support for generating triangular and hexagonal lattices, constructing trees from a “parent” vector, and retrieving the IDs of the edges in the induced subgraph of a vertex set. It also refines the experimental API of the UMAP layout function, fixes a few bugs and improves the documentation.</p>

<p>Read on for more details about the changes in version 0.10.3.</p>

<!--more-->

<h3 id="added">Added</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_matrix_init_array()</code> to initialize an igraph matrix by copying an existing C array in column-major or row-major order.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_layout_umap_compute_weights()</code> computes weights for the UMAP layout algorithm from distances. This used to be part of <code class="language-plaintext highlighter-rouge">igraph_layout_umap()</code>, but it is now in a separate function to allow the user to experiment with different weighting schemes.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_triangular_lattice()</code> to generate triangular lattices of various kinds.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_hexagonal_lattice()</code> to generate hexagonal lattices of various kinds.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_tree_from_parent_vector()</code> to create a tree or a forest from a parent vector (i.e. a vector that encodes the parent vertex of each vertex).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_induced_subgraph_edges()</code> produces the IDs of edges contained within a subgraph induced by the given vertices.</li>
</ul>

<h3 id="changed">Changed</h3>

<ul>
  <li>The signature of the experimental <code class="language-plaintext highlighter-rouge">igraph_layout_umap()</code> function changed; the last argument is now a Boolean that specifies whether distances should already be treated as weights, and the sampling probability argument was removed.</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_transitivity_barrat()</code>, <code class="language-plaintext highlighter-rouge">igraph_community_fluid_communities()</code>, <code class="language-plaintext highlighter-rouge">igraph_sir()</code>, <code class="language-plaintext highlighter-rouge">igraph_trussness()</code> and graphlet functions did not correctly detect when a directed input graph had effective multi-edges due to ignoring edge directions. Such graphs are now rejected by these functions.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">igraph_2dgrid_move()</code> that sometimes crashed the Large Graph Layout function when a grid cell became empty.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_pagerank()</code> and <code class="language-plaintext highlighter-rouge">igraph_personalized_pagerank()</code> would fail to converge when the ARPACK implementation was used and a vertex had more than one outgoing edge but all these edges had zero weights.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_pagerank()</code> and <code class="language-plaintext highlighter-rouge">igraph_personalized_pagerank()</code> no longer allow negative weights. Previously, edges with negative weights were silently ignored when using the PRPACK implementation. The ARPACK implementation would issue a warning saying that they are ignored, but in fact it computed an incorrect result.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_all_st_cuts()</code> and <code class="language-plaintext highlighter-rouge">igraph_all_st_mincuts()</code> no longer trigger the “Finally stack too large” fatal error when called on certain large graphs. This was a regression in igraph 0.10.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_label_propagation()</code> no longer rounds weights to integers. This was a regression in igraph 0.10.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_read_graph_graphdb()</code> does more thorough checks on the input file.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_calloc()</code> did not zero-initialize the allocated memory. This is now corrected. Note that the macro <code class="language-plaintext highlighter-rouge">IGRAPH_CALLOC()</code> was <em>not</em> affected.</li>
  <li>Fixed new warnings issued by the Xcode 14.1 toolchain.</li>
</ul>

<h3 id="deprecated">Deprecated</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_subgraph_edges()</code> is now deprecated to avoid confusion with <code class="language-plaintext highlighter-rouge">igraph_induced_subgraph_edges()</code>; its new name is <code class="language-plaintext highlighter-rouge">igraph_subgraph_from_edges()</code>. The old name is kept available until at least igraph 0.11.</li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>Significantly improved performance for <code class="language-plaintext highlighter-rouge">igraph_matrix_transpose()</code>.</li>
  <li>Documentation improvements.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.10.3, the third bugfix release of the 0.10 series, has arrived.]]></summary></entry><entry><title type="html">IGraph/M 0.6.5</title><link href="https://igraph.org/2022/12/21/igraph-0.6.5-mma.html" rel="alternate" type="text/html" title="IGraph/M 0.6.5" /><published>2022-12-21T00:00:00+00:00</published><updated>2022-12-21T00:00:00+00:00</updated><id>https://igraph.org/2022/12/21/igraph-0.6.5-mma</id><content type="html" xml:base="https://igraph.org/2022/12/21/igraph-0.6.5-mma.html"><![CDATA[<p>Just in time before the Christmas holidays, <a href="http://szhorvat.net/mathematica/IGraphM">IGraph/M</a> 0.6.5 is now released. This version (along with the unreleased 0.6.4) brings greatly improved performance when computing proximity graphs, new convenience functions, as well as robustness improvements. As usual, you can conveniently upgrade by running the installer script, using the following command:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Get["https://raw.githubusercontent.com/szhorvat/IGraphM/master/IGInstaller.m"]
</code></pre></div></div>

<h4 id="065">0.6.5</h4>

<p>Other:</p>

<ul>
  <li>Improved error checking and added more internal consistency checks to help debug issues with recent Mathematica versions.</li>
</ul>

<h4 id="064">0.6.4</h4>

<p>Added:</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">IGBetaWeightedGabrielGraph</code> for computing the β value where each edge of a lune-based β-skeleton would disappear (experimental function).</li>
  <li><code class="language-plaintext highlighter-rouge">IGModularityMatrix</code> gives the modularity matrix of a network.</li>
  <li><code class="language-plaintext highlighter-rouge">IGCanonicalLabeledGraph</code> creates a canonical representation of a labeled graph without changing vertex names. Graphs which are considered equivalent by <code class="language-plaintext highlighter-rouge">IGSameGraphQ</code> have the same canonical representation. It is intended for removing duplicate graphs using <code class="language-plaintext highlighter-rouge">DeleteDuplicatesBy</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">IGCanonicalEdgeList</code> creates a canonical representation of an edge list, in a manner similar to <code class="language-plaintext highlighter-rouge">IGCanonicalLabeledGraph</code>.</li>
</ul>

<p>Other:</p>

<ul>
  <li>Documentation improvements</li>
  <li>Significant performance improvements for the calculation of lune and circle based β skeletons when using large β values.</li>
</ul>]]></content><author><name></name></author><category term="mma" /><summary type="html"><![CDATA[Just in time before the Christmas holidays, IGraph/M 0.6.5 is now released. This version (along with the unreleased 0.6.4) brings greatly improved performance when computing proximity graphs, new convenience functions, as well as robustness improvements. As usual, you can conveniently upgrade by running the installer script, using the following command:]]></summary></entry><entry><title type="html">python-igraph 0.10.2</title><link href="https://igraph.org/2022/10/17/igraph-0.10.2-python.html" rel="alternate" type="text/html" title="python-igraph 0.10.2" /><published>2022-10-17T00:00:00+00:00</published><updated>2022-10-17T00:00:00+00:00</updated><id>https://igraph.org/2022/10/17/igraph-0.10.2-python</id><content type="html" xml:base="https://igraph.org/2022/10/17/igraph-0.10.2-python.html"><![CDATA[<p><a href="https://igraph.org/python/">python-igraph</a> 0.10.2, the second bugfix release of the 0.10 series, has arrived. Thise release updates the C core of igraph to 0.10.2, adds support for Python 3.11 and fixes a crash and a reference leak in earlier versions of the library. There are also some minor additions and improvements; please refer to the <a href="https://github.com/igraph/python-igraph/releases/tag/0.10.2">changelog</a> for more details.</p>

<p>The preferred way of installing the Python interface is via <code class="language-plaintext highlighter-rouge">pip</code>; typing <code class="language-plaintext highlighter-rouge">pip install igraph</code> should install a pre-compiled Python wheel on most supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the source code are also available from the <a href="https://pypi.org/project/igraph/0.10.1/">Python Package Index page</a>.</p>

<p>The documentation of the project has also been moved to <a href="https://igraph.readthedocs.io">Read The Docs</a>.</p>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.10.2, the second bugfix release of the 0.10 series, has arrived. Thise release updates the C core of igraph to 0.10.2, adds support for Python 3.11 and fixes a crash and a reference leak in earlier versions of the library. There are also some minor additions and improvements; please refer to the changelog for more details.]]></summary></entry><entry><title type="html">C/igraph 0.10.2</title><link href="https://igraph.org/2022/10/14/igraph-0.10.2-c.html" rel="alternate" type="text/html" title="C/igraph 0.10.2" /><published>2022-10-14T00:00:00+00:00</published><updated>2022-10-14T00:00:00+00:00</updated><id>https://igraph.org/2022/10/14/igraph-0.10.2-c</id><content type="html" xml:base="https://igraph.org/2022/10/14/igraph-0.10.2-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.10.2, the second bugfix release of the 0.10 series, has arrived.</p>

<p>The source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.10.2">the GitHub releases
page</a>.</p>

<p>This release mostly includes bug fixes and documentation improvements, but it also adds a few new functions (shortest paths with cutoff, Floyd-Warshall algorithm and Voronoi partitioning) with an experimental API that might still change in upcoming releases. Experimental functions are clearly marked both here and in the documentation. The API of these functions will be finalized in 0.11.0, after which no further changes are expected.</p>

<p>Read on for more details about the changes in version 0.10.2.</p>

<!--more-->

<h3 id="added">Added</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_distances_cutoff()</code> and <code class="language-plaintext highlighter-rouge">igraph_distances_dijkstra_cutoff()</code> calculate shortest paths with an upper limit on the path length (experimental functions).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_distances_floyd_warshall()</code> for computing all-pairs shortest path lengths in dense graphs (experimental function).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_ecc()</code> computes the edge clustering coefficient of some edges (experimental function).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_voronoi()</code> computes a Voronoi partitioning of vertices (experimental function).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_count_multiple_1()</code> determines the multiplicity of a single edge in the graph.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_dqueue_get()</code> accesses an element in a queue by index.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_degree_1()</code> efficiently retrieves the degee of a single vertex.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_lazy_adjlist_has()</code> and <code class="language-plaintext highlighter-rouge">igraph_lazy_inclist_has()</code> to check if adjacent vertices / incident edges have already been computed and stored for a given vertex in a lazy adjlist / inclist.</li>
</ul>

<h3 id="changed">Changed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_edge()</code> now verifies that the input edge ID is valid.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_leading_eigenvector()</code>, <code class="language-plaintext highlighter-rouge">igraph_adjacency_spectral_embedding()</code>, <code class="language-plaintext highlighter-rouge">igraph_laplacian_spectral_embedding()</code>, <code class="language-plaintext highlighter-rouge">igraph_arpack_rssolve()</code> and <code class="language-plaintext highlighter-rouge">igraph_arpack_rnsolve()</code> now generate a random starting vector using igraph’s own RNG if needed instead of relying on LAPACK or ARPACK to do so. This makes sure that the results obtained from these functions remain the same if igraph’s RNG is seeded with the same value.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_leading_eigenvector()</code> does not stop the splitting process any more when there are multiple equally likely splits (indicated by the multiplicity of the leading eigenvector being larger than 1). The algorithm picks an arbitrary split instead and proceeds normally.</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">igraph_get_k_shortest_paths()</code> that sometimes yielded incorrect results on undirected graphs when the <code class="language-plaintext highlighter-rouge">mode</code> argument was set to <code class="language-plaintext highlighter-rouge">IGRAPH_OUT</code> or <code class="language-plaintext highlighter-rouge">IGRAPH_IN</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_trussness()</code> is now interruptible.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_spanner()</code> is now interruptible.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_layout_umap()</code> and <code class="language-plaintext highlighter-rouge">igraph_layout_umap3d()</code> are now interruptible.</li>
  <li>In some rare cases, roundoff errors would cause <code class="language-plaintext highlighter-rouge">igraph_distance_johnson()</code> to fail on graphs with negative weights.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_eulerian_cycle()</code> and <code class="language-plaintext highlighter-rouge">igraph_eulerian_path()</code> now returns a more specific error code (<code class="language-plaintext highlighter-rouge">IGRAPH_ENOSOL</code>) when the graph contains no Eulerian cycle or path.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_heap_init_array()</code> did not copy the array data correctly for non-real specializations.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_layout_umap_3d()</code> now actually uses three dimensions.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_layout_umap()</code> and <code class="language-plaintext highlighter-rouge">igraph_layout_umap_3d()</code> are now interruptible.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vit_create()</code> and <code class="language-plaintext highlighter-rouge">igraph_eit_create()</code> no longer fails when trying to create an iterator for the null graph or edgeless graph from an empty range-based vertex or edge selector.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_write_graph_leda()</code> did not correctly print attribute names in some warning messages.</li>
  <li>Addressed new warnings introduced by Clang 15.</li>
  <li>In the generated pkg-config file, libxml2 is now placed in the <code class="language-plaintext highlighter-rouge">Requires.private</code> section instead of the <code class="language-plaintext highlighter-rouge">Libs.private</code> one.</li>
</ul>

<h3 id="removed">Removed</h3>

<ul>
  <li>Removed unused and undocumented <code class="language-plaintext highlighter-rouge">igraph_bfgs()</code> function.</li>
  <li>Removed the undocumented function <code class="language-plaintext highlighter-rouge">igraph_complex_mod()</code>. Use <code class="language-plaintext highlighter-rouge">igraph_complex_abs()</code> instead, as it has identical functionality.</li>
</ul>

<h3 id="deprecated">Deprecated</h3>

<ul>
  <li>The <code class="language-plaintext highlighter-rouge">IGRAPH_EDRL</code> error code was deprecated; the DrL algorithm now returns <code class="language-plaintext highlighter-rouge">IGRAPH_FAILURE</code> when it used to return <code class="language-plaintext highlighter-rouge">IGRAPH_EDRL</code> (not likely to happen in practice).</li>
  <li>The undocumented function <code class="language-plaintext highlighter-rouge">igraph_dqueue_e()</code> is now deprecated and replaced by <code class="language-plaintext highlighter-rouge">igraph_dqueue_get()</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_finite()</code>, <code class="language-plaintext highlighter-rouge">igraph_is_nan()</code>, <code class="language-plaintext highlighter-rouge">igraph_is_inf()</code>, <code class="language-plaintext highlighter-rouge">igraph_is_posinf()</code> and <code class="language-plaintext highlighter-rouge">igraph_is_neginf()</code> are now deprecated. They were relics from a time when no standard alternatives existed. Use the C99 standard <code class="language-plaintext highlighter-rouge">isfinite()</code>, <code class="language-plaintext highlighter-rouge">isnan()</code> and <code class="language-plaintext highlighter-rouge">isinf()</code> instead.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.10.2, the second bugfix release of the 0.10 series, has arrived.]]></summary></entry><entry><title type="html">IGraph/M 0.6.3</title><link href="https://igraph.org/2022/10/11/igraph-0.6.3-mma.html" rel="alternate" type="text/html" title="IGraph/M 0.6.3" /><published>2022-10-11T00:00:00+00:00</published><updated>2022-10-11T00:00:00+00:00</updated><id>https://igraph.org/2022/10/11/igraph-0.6.3-mma</id><content type="html" xml:base="https://igraph.org/2022/10/11/igraph-0.6.3-mma.html"><![CDATA[<p>A new maintenance release of <a href="http://szhorvat.net/mathematica/IGraphM">IGraph/M</a> is now available. This is a bugfix release recommended for all users. As usual, the simplest way to upgrade is to evaluate the following, and then restart Mathematica:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Get["https://raw.githubusercontent.com/szhorvat/IGraphM/master/IGInstaller.m"]
</code></pre></div></div>

<h4 id="igraphm-063">IGraph/M 0.6.3</h4>

<p>Changed:</p>

<ul>
  <li>When an invalid vertex is passed to IGraph/M functions, now the message shown is <code class="language-plaintext highlighter-rouge">IGraphM::invv</code> instead of <code class="language-plaintext highlighter-rouge">VertexIndex::inv</code>.</li>
</ul>

<p>Fixed:</p>

<ul>
  <li>In rare cases, vertex names that were lists of other vertex names in the same graph were misinterpreted. This affected only Mathematica 12.0 and later.</li>
  <li><code class="language-plaintext highlighter-rouge">IGCommunitiesLeadingEigenvector</code> is less likely to fail to converge now.</li>
  <li><code class="language-plaintext highlighter-rouge">IGCommunitiesLeadingEigenvector</code> now respects random seeds set in Mathematica. These affect only the random starting vector it uses internally, which can very rarely cause non-deterministic output.</li>
  <li><code class="language-plaintext highlighter-rouge">IGBarabasiAlbertGame</code> no longer accepts negative or zero exponents, as these were not handled correctly.</li>
  <li><code class="language-plaintext highlighter-rouge">IGBridges</code> is no longer prone to stack overflow when given very large graphs.</li>
</ul>

<p>Other:</p>

<ul>
  <li>Performance improvements for <code class="language-plaintext highlighter-rouge">IGGraphEditor</code>.</li>
  <li>Documentation improvements.</li>
</ul>]]></content><author><name></name></author><category term="mma" /><summary type="html"><![CDATA[A new maintenance release of IGraph/M is now available. This is a bugfix release recommended for all users. As usual, the simplest way to upgrade is to evaluate the following, and then restart Mathematica:]]></summary></entry><entry><title type="html">python-igraph 0.10.1</title><link href="https://igraph.org/2022/09/13/igraph-0.10.1-python.html" rel="alternate" type="text/html" title="python-igraph 0.10.1" /><published>2022-09-13T00:00:00+00:00</published><updated>2022-09-13T00:00:00+00:00</updated><id>https://igraph.org/2022/09/13/igraph-0.10.1-python</id><content type="html" xml:base="https://igraph.org/2022/09/13/igraph-0.10.1-python.html"><![CDATA[<p><a href="https://igraph.org/python/">python-igraph</a> 0.10.1, the first bugfix release of the 0.10 series, has arrived. (And we forgot to announce 0.10.0 separately, sorry). These releases update the C core of igraph to 0.10.0 and bring several improvements to the plotting functionality of the library, including an improved Matplotlib plotting backend and an experimental Plotly backend.</p>

<p>The preferred way of installing the Python interface is via <code class="language-plaintext highlighter-rouge">pip</code>; typing <code class="language-plaintext highlighter-rouge">pip install igraph</code> should install a pre-compiled Python wheel on most supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the source code are also available from the <a href="https://pypi.org/project/igraph/0.10.1/">Python Package Index page</a>.</p>

<p>See the changelog on Github for relevant changes in 0.10.0 and 0.10.1:</p>

<ul>
  <li><a href="https://github.com/igraph/python-igraph/releases/tag/0.10.0">Changelog for 0.10.0</a></li>
  <li><a href="https://github.com/igraph/python-igraph/releases/tag/0.10.1">Changelog for 0.10.1</a></li>
</ul>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.10.1, the first bugfix release of the 0.10 series, has arrived. (And we forgot to announce 0.10.0 separately, sorry). These releases update the C core of igraph to 0.10.0 and bring several improvements to the plotting functionality of the library, including an improved Matplotlib plotting backend and an experimental Plotly backend.]]></summary></entry><entry><title type="html">C/igraph 0.10.0</title><link href="https://igraph.org/2022/09/05/igraph-0.10.0-c.html" rel="alternate" type="text/html" title="C/igraph 0.10.0" /><published>2022-09-05T00:00:00+00:00</published><updated>2022-09-05T00:00:00+00:00</updated><id>https://igraph.org/2022/09/05/igraph-0.10.0-c</id><content type="html" xml:base="https://igraph.org/2022/09/05/igraph-0.10.0-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.10.0, the first release of the 0.10 series, has arrived.</p>

<p>The source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.10.0">the GitHub releases
page</a>.</p>

<p>This release focuses on infrastructural improvements, stability, and making the
igraph interface more consistent, more predictable and easier to use. It
contains many API-breaking changes and function renamings, in preparation for
a future 1.0 release, at which point the API will become stable. Changes in
this direction are likely to continue through a 0.11 release. It is recommended
that you migrate your code from 0.9 to 0.10 soon, to make the eventual
transition to 1.0 easier.</p>

<p>Read on for more details about the changes in version 0.10.0.</p>

<!--more-->

<p>Since the changelog for this release is <em>huge</em>, we are going to list only the
most important highlights of this release:</p>

<ul>
  <li>We now use <code class="language-plaintext highlighter-rouge">igraph_integer_t</code> consistently for all indices and most integer
quantities, both in the API and internally. This type is 64-bit by default
on all 64-bit systems, bringing support for very large graphs with more than
2 billion vertices. Previously, vertex and edge indices were often
represented as <code class="language-plaintext highlighter-rouge">igraph_real_t</code>. The move to an <code class="language-plaintext highlighter-rouge">igraph_integer_t</code> also
implies a change from <code class="language-plaintext highlighter-rouge">igraph_vector_t</code> to <code class="language-plaintext highlighter-rouge">igraph_vector_int_t</code> in many
functions.</li>
  <li>The random number generation framework has been overhauled. Sampling from
the full range of <code class="language-plaintext highlighter-rouge">igraph_integer_t</code> is now possible. Similarly, the
sampling of random reals has been improved to utilize almost the full range
of the mantissa of an <code class="language-plaintext highlighter-rouge">igraph_real_t</code>.</li>
  <li>There is a new fully memory-managed container type for lists of vectors
(<code class="language-plaintext highlighter-rouge">igraph_vector_list_t</code>), replacing most previous uses of the non-managed
<code class="language-plaintext highlighter-rouge">igraph_vector_ptr_t</code>. Functions that previously used <code class="language-plaintext highlighter-rouge">igraph_vector_ptr_t</code>
to return results and relied on the user to manage memory appropriately are
now using <code class="language-plaintext highlighter-rouge">igraph_vector_list_t</code>, <code class="language-plaintext highlighter-rouge">igraph_graph_list_t</code> or similar and
manage memory on their own.</li>
  <li>Some simple graph properties, such as whether a graph contains self-loops or
multi-edges, or whether it is connected, are now cached in the graph data
structure. Querying these properties for a second time will take constant
computational time. The <code class="language-plaintext highlighter-rouge">igraph_invalidate_cache()</code> function is provided for
debugging purposes. It will invaidate all cache entries.</li>
  <li>File format readers are much more robust and more tolerant of invalid input.</li>
  <li>igraph is much more resilient to overflow errors.</li>
  <li>Many improvements to robustness and reliability, made possible by internal
refactorings.</li>
</ul>

<p>You can find the <a href="https://github.com/igraph/igraph/releases/tag/0.10.0">full changelog</a> on the GitHub
release page.</p>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.10.0, the first release of the 0.10 series, has arrived.]]></summary></entry><entry><title type="html">C/igraph 0.9.10</title><link href="https://igraph.org/2022/09/02/igraph-0.9.10-c.html" rel="alternate" type="text/html" title="C/igraph 0.9.10" /><published>2022-09-02T00:00:00+00:00</published><updated>2022-09-02T00:00:00+00:00</updated><id>https://igraph.org/2022/09/02/igraph-0.9.10-c</id><content type="html" xml:base="https://igraph.org/2022/09/02/igraph-0.9.10-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.9.10, the tenth bugfix release of the 0.9 series, has arrived.</p>

<p>The source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.9.10">the GitHub releases
page</a>.</p>

<p>This release includes bug fixes and documentation improvements, and it is
likely to be the last patch release of the 0.9.x series. Version 0.10.0 will
follow soon with <em>lots</em> of breaking changes as we clean up the API in
preparation for a future 1.0 release.</p>

<p>If you have a project that currently relies on igraph 0.9, it is advised that
you update the project to use 0.9.10 and then start adapting it as soon as
possible to support 0.10.0 once it is released.</p>

<p>Read on for more details about the changes in version 0.9.9.</p>

<!--more-->

<h3 id="added">Added</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_reverse_edges()</code> reverses the specified edges in the graph while preserving all attributes.</li>
</ul>

<h3 id="changed">Changed</h3>

<ul>
  <li>The <code class="language-plaintext highlighter-rouge">IGRAPH_ARPACK_PROD</code> error code is no longer used. Instead, the specific error encountered while doing matrix multiplication is reported.</li>
  <li>XML external entities are not resolved any more when parsing GraphML files to prevent XML external entity injection (XXE) attacks. Standard XML entities like <code class="language-plaintext highlighter-rouge">&amp;lt;</code> or <code class="language-plaintext highlighter-rouge">&amp;quot;</code> still work.</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li>Fixed incorrect results from <code class="language-plaintext highlighter-rouge">igraph_local_scan_1_ecount()</code> when the graph was directed but the mode was <code class="language-plaintext highlighter-rouge">IGRAPH_ALL</code> and some nodes had loop edges. See issue #2092.</li>
  <li>Fixed incorrect counting of self-loops in <code class="language-plaintext highlighter-rouge">igraph_local_scan_neighborhood_ecount()</code> when the graph was undirected.</li>
  <li>In some rare edge cases, <code class="language-plaintext highlighter-rouge">igraph_pagerank()</code> with the ARPACK method and <code class="language-plaintext highlighter-rouge">igraph_hub_score()</code> / <code class="language-plaintext highlighter-rouge">igraph_authority_score()</code> could return incorrect results. The problem could be detected by checking that the returned eigenvalue is not negative. See issue #2090.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_permute_vertices()</code> now checks for out-of-range indices and duplicates in the permutation vector.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_create()</code> now checks for non-finite vertex indices in the edges vector.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_eigenvector_centrality()</code> would return incorrect scores when some weights were negative.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_es_seq()</code> and <code class="language-plaintext highlighter-rouge">igraph_ess_seq()</code> did not include the <code class="language-plaintext highlighter-rouge">to</code> vertex in the sequence.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_eit_create()</code> and <code class="language-plaintext highlighter-rouge">igraph_vit_create()</code> now check that all edge/vertex indices are in range when creating iterators from sequence-type selectors.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_grg_game()</code> now validates its arguments.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_layout_drl()</code> and its 3D version now validate their inputs.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_layout_kamada_kawai()</code>, <code class="language-plaintext highlighter-rouge">igraph_layout_fruchterman_reingold()</code>, <code class="language-plaintext highlighter-rouge">igraph_layout_drl()</code>, as well as their 3D versions now check for non-positive weights.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_asymmetric_preference_game()</code> interpreted its <code class="language-plaintext highlighter-rouge">type_dist_matrix</code> argument incorrectly.</li>
  <li>Fixed incorrect result of <code class="language-plaintext highlighter-rouge">igraph_community_spinglass()</code> for null and singleton graphs.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_layout_gem()</code> does not crash any more for graphs with only a single vertex.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_bridges()</code> no longer uses recursion and thus is no longer prone to stack overflow.</li>
  <li>Include paths of dependent packages would be specified incorrectly in some environments.</li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>Documentation improvements.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.9.10, the tenth bugfix release of the 0.9 series, has arrived.]]></summary></entry><entry><title type="html">C/igraph 0.10.0-rc.2</title><link href="https://igraph.org/2022/08/17/igraph-0.10.0-rc.2-c.html" rel="alternate" type="text/html" title="C/igraph 0.10.0-rc.2" /><published>2022-08-17T00:00:00+00:00</published><updated>2022-08-17T00:00:00+00:00</updated><id>https://igraph.org/2022/08/17/igraph-0.10.0-rc.2-c</id><content type="html" xml:base="https://igraph.org/2022/08/17/igraph-0.10.0-rc.2-c.html"><![CDATA[<p>igraph 0.10.0-rc.2, the second release candidate of igraph 0.10.0 is now available for download. We decided to go for a release candidate because there are lots of breaking changes in igraph 0.10.0 compared to previous versions, and we would like to gather some feedback from the community before going forward.</p>

<p>Since this version is a release candidate only, it is meant primarily for developers who are working on a project that depends on the igraph library and who want to be prepared in advance for the upcoming changes in igraph 0.10.0. There is no official tarball on the igraph.org homepage as the latest stable version is still 0.9.9 - you need to get the tarball from the <a href="https://github.com/igraph/igraph/releases/tag/0.10.0-rc.2">Github releases page</a> instead. Here is a <a href="https://github.com/igraph/igraph/releases/download/0.10.0-rc.2/igraph-0.10.0-rc.2.tar.gz">direct link to the tarball</a> – note that you will need to download the asset named <code class="language-plaintext highlighter-rouge">igraph-0.10.0-rc.2.tar.gz</code> as the link titled “Source code” is simply a snapshot of the Github repository.</p>

<p>For more details and a short description of breaking changes, please refer to the announcement in our <a href="https://igraph.discourse.group/t/c-igraph-0-10-0-rc-2/1330">Discourse group</a>.</p>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[igraph 0.10.0-rc.2, the second release candidate of igraph 0.10.0 is now available for download. We decided to go for a release candidate because there are lots of breaking changes in igraph 0.10.0 compared to previous versions, and we would like to gather some feedback from the community before going forward.]]></summary></entry><entry><title type="html">C/igraph 0.10.0-rc.1</title><link href="https://igraph.org/2022/08/02/igraph-0.10.0-rc.1-c.html" rel="alternate" type="text/html" title="C/igraph 0.10.0-rc.1" /><published>2022-08-02T00:00:00+00:00</published><updated>2022-08-02T00:00:00+00:00</updated><id>https://igraph.org/2022/08/02/igraph-0.10.0-rc.1-c</id><content type="html" xml:base="https://igraph.org/2022/08/02/igraph-0.10.0-rc.1-c.html"><![CDATA[<p>igraph 0.10.0-rc.1, the first release candidate of igraph 0.10.0 is now available for download. We decided to go for a release candidate because there are lots of breaking changes in igraph 0.10.0 compared to previous versions, and we would like to gather some feedback from the community before going forward.</p>

<p>Since this version is a release candidate only, it is meant primarily for developers who are working on a project that depends on the igraph library and who want to be prepared in advance for the upcoming changes in igraph 0.10.0. There is no official tarball on the igraph.org homepage as the latest stable version is still 0.9.9 - you need to get the tarball from the <a href="https://github.com/igraph/igraph/releases/tag/0.10.0-rc.1">Github releases page</a> instead. Here is a <a href="https://github.com/igraph/igraph/releases/download/0.10.0-rc.1/igraph-0.10.0-rc.1.tar.gz">direct link to the tarball</a> – note that you will need to download the asset named <code class="language-plaintext highlighter-rouge">igraph-0.10.0-rc.1.tar.gz</code> as the link titled “Source code” is simply a snapshot of the Github repository.</p>

<p>For more details and a short description of breaking changes, please refer to the announcement in our <a href="https://igraph.discourse.group/t/c-igraph-0-10-0-rc-1/1316">Discourse group</a>.</p>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[igraph 0.10.0-rc.1, the first release candidate of igraph 0.10.0 is now available for download. We decided to go for a release candidate because there are lots of breaking changes in igraph 0.10.0 compared to previous versions, and we would like to gather some feedback from the community before going forward.]]></summary></entry><entry><title type="html">IGraph/M 0.6.0</title><link href="https://igraph.org/2022/07/13/igraph-0.6.0-mma.html" rel="alternate" type="text/html" title="IGraph/M 0.6.0" /><published>2022-07-13T00:00:00+00:00</published><updated>2022-07-13T00:00:00+00:00</updated><id>https://igraph.org/2022/07/13/igraph-0.6.0-mma</id><content type="html" xml:base="https://igraph.org/2022/07/13/igraph-0.6.0-mma.html"><![CDATA[<p><a href="http://szhorvat.net/mathematica/IGraphM">IGraph/M</a> 0.6.0, the Mathematica interface of igraph, is now out! This released is based on the 0.9 series of C/igraph, bringing significant robustness improvements, as well as new features.
Some of the highlights are an experimental interactive graph editor, contributed by <a href="https://github.com/kubaPod/">Kuba Podkalicki</a>, and experimental support for progress reporting. Apple computers based on the ARM architecture (“Apple Silicon”) are now supported.</p>

<p>As always, you can update to the latest version by evaluating the following:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Get["https://raw.githubusercontent.com/szhorvat/IGraphM/master/IGInstaller.m"]
</code></pre></div></div>

<p>The earliest supported Mathematica version is now 11.0, or 12.2 on the Raspberry Pi.</p>

<p>Please report any issues you may find on <a href="https://github.com/szhorvat/IGraphM/issues/new/choose">GitHub</a> or on <a href="https://igraph.discourse.group/">our forum</a>.</p>

<!--more-->

<h4 id="igraphm-060">IGraph/M 0.6.0</h4>

<p>This version is based on the 0.9 series of C/igraph.</p>

<p>Added:</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">IGHarmonicCentrality</code> and <code class="language-plaintext highlighter-rouge">IGHarmonicCentralityCutoff</code> compute the harmonic centrality and range-limited harmonic centrality.</li>
  <li><code class="language-plaintext highlighter-rouge">IGLinkRank</code> and <code class="language-plaintext highlighter-rouge">IGPersonalizedLinkRank</code> compute the equivalent of PageRank for edges.</li>
  <li><code class="language-plaintext highlighter-rouge">IGNeighborhoodCloseness</code> computes the range-limited closeness centrality, as well as the number of vertices reachable within the given range.</li>
  <li><code class="language-plaintext highlighter-rouge">IGFamousGraph</code> exposes the igraph C library’s built-in graph database.</li>
  <li><code class="language-plaintext highlighter-rouge">IGPreferenceGame</code> and <code class="language-plaintext highlighter-rouge">IGAsymmetricPreferenceGame</code> create non-growing random graphs based on vertex types.</li>
  <li><code class="language-plaintext highlighter-rouge">IGReingoldTilford</code> and <code class="language-plaintext highlighter-rouge">IGReingoldTilfordCircular</code> now support the <code class="language-plaintext highlighter-rouge">DirectedEdges</code> option.</li>
  <li><code class="language-plaintext highlighter-rouge">IGFruchtermanReingold</code> now supports constraining the coordinates of a subset of vertices.</li>
  <li><code class="language-plaintext highlighter-rouge">IGPercolationCurve</code> for efficiently computing the size of the largest component as a function of mean degree while removing edges.</li>
  <li><code class="language-plaintext highlighter-rouge">IGShortestPathTree</code> for computing a shortest path tree rooted in a given vertex.</li>
  <li><code class="language-plaintext highlighter-rouge">IGGraphEditor</code> is an experimental interactive graph editor.</li>
  <li>Experimental progress reporting functionality through functions in the <code class="language-plaintext highlighter-rouge">IGraphM`Progress`</code> context.</li>
</ul>

<p>Changed:</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">IGConnectedQ</code> and <code class="language-plaintext highlighter-rouge">IGWeaklyConnectedQ</code> now consider the null graph to be disconnected; this is consistent with other functions such as <code class="language-plaintext highlighter-rouge">IGTreeQ</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">IGAveragePathLength</code> now has a <code class="language-plaintext highlighter-rouge">"ByComponents"</code> option, controlling the handling of disconnected graphs.</li>
  <li>Centrality functions:
    <ul>
      <li><code class="language-plaintext highlighter-rouge">IGCloseness</code> now computes the normalized closeness, i.e. the inverse of the mean distance to other vertices, by default. Use <code class="language-plaintext highlighter-rouge">Normalized -&gt; False</code> to get the previous behaviour.</li>
      <li><code class="language-plaintext highlighter-rouge">IGCloseness</code> now uses the distances only to reachable vertices when computing the closeness. In undirected disconnected graphs, it effectively computes the closeness per component. For isolated vertices (or sinks in directed graphs) it now returns <code class="language-plaintext highlighter-rouge">Indeterminate</code>.</li>
      <li><code class="language-plaintext highlighter-rouge">IGBetweenness</code> and <code class="language-plaintext highlighter-rouge">IGBetweennessCentralization</code> no longer uses the <code class="language-plaintext highlighter-rouge">Method</code> option. The calculations are always fast and precise. The precision has been improved.</li>
      <li><code class="language-plaintext highlighter-rouge">IGBetweennessEstimate</code>, <code class="language-plaintext highlighter-rouge">IGEdgeBetweennessEstimate</code> and <code class="language-plaintext highlighter-rouge">IGClosenessEstimate</code> have been renamed to <code class="language-plaintext highlighter-rouge">IGBetweennessCutoff</code>, <code class="language-plaintext highlighter-rouge">IGEdgeBetweennessCutoff</code> and <code class="language-plaintext highlighter-rouge">IGClosenessCutoff</code>.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">IGRelativeNeighborhoodGraph</code> now assumes the <code class="language-plaintext highlighter-rouge">β -&gt; 2</code>, <code class="language-plaintext highlighter-rouge">β &lt; 2</code> limit instead of <code class="language-plaintext highlighter-rouge">β = 2</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">IGGirth</code> now returns <code class="language-plaintext highlighter-rouge">Infinity</code> for the null graph.</li>
  <li><code class="language-plaintext highlighter-rouge">IGDiameter</code> now returns <code class="language-plaintext highlighter-rouge">Indeterminate</code> for the null graph.</li>
  <li><code class="language-plaintext highlighter-rouge">IGChordalQ</code>, <code class="language-plaintext highlighter-rouge">IGChordalCompletion</code> and <code class="language-plaintext highlighter-rouge">IGMaximumCardinalitySearch</code> now support non-simple graphs.</li>
  <li><code class="language-plaintext highlighter-rouge">IGReingoldTilford</code> and <code class="language-plaintext highlighter-rouge">IGReingoldTilfordCircular</code> use a new automatic root selection algorithm. The root selection heuristic may change in the future without notice. Specify roots manually for a consistent result.</li>
  <li><code class="language-plaintext highlighter-rouge">IGPotentiallyConnectedQ</code> no longer supports directed sequences. This feature was flawed in 0.5. It may be re-added in a future version.</li>
  <li><code class="language-plaintext highlighter-rouge">IGLayoutKamadaKawai</code> and <code class="language-plaintext highlighter-rouge">IGLayoutKamadaKawai3D</code> perform more iterations by default, and produce more pleasing layouts.</li>
  <li><code class="language-plaintext highlighter-rouge">IGPersonalizedPageRank</code> allows specifying the reset weights as an association from vertex names to values.</li>
  <li>LAD isomorphism functions now support self-loops.</li>
  <li>Motif finder functions now support size 5 and 6 undirected motifs.</li>
  <li>The behaviour of the random number generator is now consistent between platforms, meaning that with a given seed, a randomized IGraph/M function will return the same result on all platforms. However, result will now be different from version 0.5 for the same seed.</li>
</ul>

<p>Fixed:</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">IGPageRank</code> and <code class="language-plaintext highlighter-rouge">IGPersonalizedPageRank</code> will now warn if the calculation did not converge with the <code class="language-plaintext highlighter-rouge">"Arnoldi"</code> method. This happens only in rare cases.</li>
  <li><code class="language-plaintext highlighter-rouge">IGPersonalizedPageRank</code>: the default <code class="language-plaintext highlighter-rouge">"PRPACK"</code> method returned an incorrect result when the graph was not connected and the personalization vector was not uniform.</li>
  <li>Several community detection functions did not handle zero or one-vertex graphs correctly.</li>
  <li><code class="language-plaintext highlighter-rouge">IGVertexMap</code> would evaluate the mapped functions twice instead of once.</li>
  <li><code class="language-plaintext highlighter-rouge">IGMaximumCardinalitySearch</code> returned incorrect ranks for graphs whose vertex names differed from their vertex indices.</li>
  <li><code class="language-plaintext highlighter-rouge">IGDistanceWeighted</code> no longer fails on edgeless graphs.</li>
  <li><code class="language-plaintext highlighter-rouge">IGCallawayTraisGame</code> no longer rejects zeros in the preference matrix.</li>
  <li>An error would be triggered when some functions returned a zero-size matrix.</li>
  <li>Fixed a memory leak in the Nauty format reader.</li>
  <li><code class="language-plaintext highlighter-rouge">IGMotifsVertexParticipation</code> would fail with Mathematica 12.2 or later.</li>
  <li>Fixed a conflict with Mathematica 13.0’s built-in isomorphism functions which could lead to a crash on Linux.</li>
</ul>

<p>Other:</p>

<ul>
  <li>IGraph/M now requires Mathematica 11.0 or later; on the Raspberry Pi it requires Wolfram Engine 12.2 or later.</li>
  <li>More robust error handling: when certain serious errors occur in the igraph C library, the Mathematica kernel is no longer forced to shut down.</li>
  <li>IGraph/M got leaner: smaller binary sizes.</li>
  <li>Documentation improvements.</li>
</ul>]]></content><author><name></name></author><category term="mma" /><summary type="html"><![CDATA[IGraph/M 0.6.0, the Mathematica interface of igraph, is now out! This released is based on the 0.9 series of C/igraph, bringing significant robustness improvements, as well as new features. Some of the highlights are an experimental interactive graph editor, contributed by Kuba Podkalicki, and experimental support for progress reporting. Apple computers based on the ARM architecture (“Apple Silicon”) are now supported.]]></summary></entry><entry><title type="html">R/igraph 1.3.2</title><link href="https://igraph.org/2022/06/13/igraph-1.3.2-r.html" rel="alternate" type="text/html" title="R/igraph 1.3.2" /><published>2022-06-13T00:00:00+00:00</published><updated>2022-06-13T00:00:00+00:00</updated><id>https://igraph.org/2022/06/13/igraph-1.3.2-r</id><content type="html" xml:base="https://igraph.org/2022/06/13/igraph-1.3.2-r.html"><![CDATA[<p><a href="https://igraph.org/r/">R-igraph</a> 1.3.2, the second bugfix release of the 1.3
series is now released – and it looks like we forgot to post an announcement
about 1.3.1, so in the rest of this post we summarize the changes in versions
1.3.1 and 1.3.2 as well.</p>

<p>As always, we tried to do our best not to cause breaking changes for users of
igraph from R, but in case we have made unintentional mistakes, please report
issues in the <a href="https://github.com/igraph/rigraph/issues">Github issue tracker</a>.</p>

<!--more-->

<h2 id="igraph-132">igraph 1.3.2</h2>

<p>The C core is updated to 0.9.9, fixing a range of bugs.</p>

<h3 id="fixed">Fixed</h3>

<ul>
  <li>The length of size-zero <code class="language-plaintext highlighter-rouge">communities</code> objects is now reported correctly.</li>
  <li><code class="language-plaintext highlighter-rouge">layout_with_kk()</code> would fail to produce reasonable results with the default initial
coordinates. This has been corrected, however, this function no longer produces
precisely the same output for a given graph as before. To restore the previous
behaviour, use <code class="language-plaintext highlighter-rouge">layout_with_kk(g, coord=layout_in_circle(g))</code> in 2D or
<code class="language-plaintext highlighter-rouge">layout_with_kk(g, dim=3, coord=layout_on_sphere(g))</code> in 3D.</li>
  <li>Indexing an <code class="language-plaintext highlighter-rouge">igraph.vs</code> object with <code class="language-plaintext highlighter-rouge">v[x, na_ok=T]</code> now correctly handles the
<code class="language-plaintext highlighter-rouge">na_ok</code> argument in all cases; previous versions ignored it when <code class="language-plaintext highlighter-rouge">x</code> was
a single number.</li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>Documentation improvements and fixes.</li>
</ul>

<h2 id="igraph-131">igraph 1.3.1</h2>

<h3 id="fixed-1">Fixed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">graph_from_adjacency_matrix()</code> now works with sparse matrices even if the
cell values in the sparse matrix are unspecified.</li>
  <li>Fixed crash in <code class="language-plaintext highlighter-rouge">cluster_walktrap()</code> when <code class="language-plaintext highlighter-rouge">modularity=FALSE</code> and <code class="language-plaintext highlighter-rouge">membership=FALSE</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">cluster_walktrap()</code> no longer accepts invalid weight vectors.</li>
  <li><code class="language-plaintext highlighter-rouge">cluster_walktrap()</code> no longer returns a modularity vector of invalid length for
disconnected graphs. This also fixes some rare failures of this function on
weighted disconnected graphs.</li>
  <li><code class="language-plaintext highlighter-rouge">edge_attr()</code> does not ignore its <code class="language-plaintext highlighter-rouge">index=...</code> argument any more.</li>
  <li><code class="language-plaintext highlighter-rouge">automorphisms()</code>, <code class="language-plaintext highlighter-rouge">automorphism_group()</code> and <code class="language-plaintext highlighter-rouge">canonical_permutation()</code> now
allow all possible values supported by the C core in the <code class="language-plaintext highlighter-rouge">sh</code> argument.
Earlier versions supported only <code class="language-plaintext highlighter-rouge">"fm"</code>.</li>
  <li>The <code class="language-plaintext highlighter-rouge">vertex.frame.width</code> plotting parameter now allows zero and negative
values; these will simply remove the outline of the corresponding vertex.</li>
  <li>The documentation of the <code class="language-plaintext highlighter-rouge">sh</code> argument of the BLISS isomorphism algorithm in
<code class="language-plaintext highlighter-rouge">isomorphic()</code> was fixed; earlier versions incorrectly referred to <code class="language-plaintext highlighter-rouge">sh1</code> and
<code class="language-plaintext highlighter-rouge">sh2</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">dominator_tree()</code> now conforms to its documentation with respect to the
<code class="language-plaintext highlighter-rouge">dom</code> component of the result: it contains the indices of the dominator
vertices for each vertex and <code class="language-plaintext highlighter-rouge">-1</code> for the root of the dominator tree.</li>
  <li>Mentions of the <code class="language-plaintext highlighter-rouge">"power"</code> algorithm of <code class="language-plaintext highlighter-rouge">page_rank()</code> have been removed from
the documentation, as this method is no longer available.</li>
  <li>Several other documentation fixes to bring the docs up to date with new behaviours
in igraph 1.3.</li>
</ul>]]></content><author><name></name></author><category term="r" /><summary type="html"><![CDATA[R-igraph 1.3.2, the second bugfix release of the 1.3 series is now released – and it looks like we forgot to post an announcement about 1.3.1, so in the rest of this post we summarize the changes in versions 1.3.1 and 1.3.2 as well.]]></summary></entry><entry><title type="html">python-igraph 0.9.11</title><link href="https://igraph.org/2022/06/09/igraph-0.9.11-python.html" rel="alternate" type="text/html" title="python-igraph 0.9.11" /><published>2022-06-09T00:00:00+00:00</published><updated>2022-06-09T00:00:00+00:00</updated><id>https://igraph.org/2022/06/09/igraph-0.9.11-python</id><content type="html" xml:base="https://igraph.org/2022/06/09/igraph-0.9.11-python.html"><![CDATA[<p><a href="https://igraph.org/python/">python-igraph</a> 0.9.11, the ninth bugfix release
of the 0.9 series, has arrived.</p>

<p>The preferred way of installing the Python interface is via <code class="language-plaintext highlighter-rouge">pip</code>; typing
<code class="language-plaintext highlighter-rouge">pip install igraph</code> should install a pre-compiled Python wheel on most
supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the
source code are also available from the <a href="https://pypi.org/project/igraph/0.9.11/">Python Package Index
page</a>.</p>

<p>This is the first release that provides pre-compiled <code class="language-plaintext highlighter-rouge">musllinux</code> wheels for
environments running Alpine Linux.</p>

<p>See the changelog on Github for relevant changes in 0.9.11:</p>

<ul>
  <li><a href="https://github.com/igraph/python-igraph/releases/tag/0.9.11">Changelog for 0.9.11</a></li>
</ul>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.9.11, the ninth bugfix release of the 0.9 series, has arrived.]]></summary></entry><entry><title type="html">C/igraph 0.9.9</title><link href="https://igraph.org/2022/06/04/igraph-0.9.9-c.html" rel="alternate" type="text/html" title="C/igraph 0.9.9" /><published>2022-06-04T00:00:00+00:00</published><updated>2022-06-04T00:00:00+00:00</updated><id>https://igraph.org/2022/06/04/igraph-0.9.9-c</id><content type="html" xml:base="https://igraph.org/2022/06/04/igraph-0.9.9-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.9.9, the ninth bugfix release of the 0.9 series, has arrived.</p>

<p>The source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.9.9">the GitHub releases
page</a>.</p>

<p>This release includes bug fixes and documentation improvements, focusing mainly
on community detection and visualization functions. Read on for more details.</p>

<!--more-->

<h3 id="changed">Changed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_walktrap()</code> now uses double precision floating point operations internally instead of single precision.</li>
  <li>In <code class="language-plaintext highlighter-rouge">igraph_community_leiden()</code>, the <code class="language-plaintext highlighter-rouge">nb_clusters</code> output parameter is now optional (i.e. it can be <code class="language-plaintext highlighter-rouge">NULL</code>).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_read_graph_graphml()</code> no longer attempts to temporarily set the C locale, and will therefore not work correctly if the current locale uses a decimal comma.</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_walktrap()</code> would return an invalid <code class="language-plaintext highlighter-rouge">modularity</code> vector when the <code class="language-plaintext highlighter-rouge">merges</code> matrix was not requested.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_walktrap()</code> would return a <code class="language-plaintext highlighter-rouge">modularity</code> vector that was too long for disconnected graphs. This would cause a failure in some weighted graphs when the <code class="language-plaintext highlighter-rouge">membership</code> vector was requested.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_walktrap()</code> now checks the weight vector: only non-negative weights are accepted, and all vertices must have non-zero strength.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_walktrap()</code> now returns a modularity score of NaN for graphs with no edges.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_fast_greedy()</code> now returns a modularity score of NaN for graphs with no edges.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_edge_betweenness()</code> now returns a modularity vector with a single NaN entry for graph with no edges. Previously it returned a zero-length vector.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_leading_eigenvector()</code> does not ignore non-ARPACK-related errors from <code class="language-plaintext highlighter-rouge">igraph_arpack_rssolve()</code> any more.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_preference_game()</code> now works correctly when <code class="language-plaintext highlighter-rouge">fixed_size</code> is true and <code class="language-plaintext highlighter-rouge">type_dist</code> is not given; earlier versions had a bug where more than half of the vertices mistakenly ended up in group 0.</li>
  <li>Fixed a memory leak in <code class="language-plaintext highlighter-rouge">igraph_hrg_fit()</code> when using <code class="language-plaintext highlighter-rouge">start=1</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_write_graph_dot()</code> now outputs NaN values unchanged.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_write_graph_dot()</code> no longer produces invalid DOT files when empty string attributes are present.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_layout_fruchterman_reingold()</code> and <code class="language-plaintext highlighter-rouge">igraph_layout_kamada_kawai()</code>, as well as their 3D versions, did not respect vertex coordinate bounds (<code class="language-plaintext highlighter-rouge">xmin</code>, <code class="language-plaintext highlighter-rouge">xmax</code>, etc.) when minimum values were large or maximum values were small. This is now fixed.</li>
  <li>The initial coordinates of the Kamada-Kawai layout (<code class="language-plaintext highlighter-rouge">igraph_layout_kamada_kawai()</code> and <code class="language-plaintext highlighter-rouge">igraph_layout_kamada_kawai_3d()</code>) are chosen to be more in line with the original publication, improving the stability of the result. See issue <a href="https://github.com/igraph/igraph/issues/963">#963</a>. This changes the output of the function for the same graph, compared with previous versions. To obtain the same layout, initialize coordinates with <code class="language-plaintext highlighter-rouge">igraph_layout_circle()</code> (in 2D) or <code class="language-plaintext highlighter-rouge">igraph_layout_sphere()</code> (in 3D).</li>
  <li>Improved numerical stability in Kamada-Kawai layout.</li>
  <li>Corrected a problem in the calculation of displacements in <code class="language-plaintext highlighter-rouge">igraph_layout_fruchterman_reingold()</code> and its 3D version. This fixes using the “grid” variant of the algorithm on disconnected graphs.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_psumtree_search()</code> would consider search interval opens on the left and closed on the right, contrary to the documentation. This is now corrected to closed on the left and open on the right. In some cases this lead to a zero-weight element being returned for a zero search value. See issue #2080.</li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>Documentation improvements.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.9.9, the ninth bugfix release of the 0.9 series, has arrived.]]></summary></entry><entry><title type="html">R/igraph 1.3.0</title><link href="https://igraph.org/2022/04/14/igraph-1.3.0-r.html" rel="alternate" type="text/html" title="R/igraph 1.3.0" /><published>2022-04-14T00:00:00+00:00</published><updated>2022-04-14T00:00:00+00:00</updated><id>https://igraph.org/2022/04/14/igraph-1.3.0-r</id><content type="html" xml:base="https://igraph.org/2022/04/14/igraph-1.3.0-r.html"><![CDATA[<p>Our efforts to bring the R interface of igraph closer to the recent
developments of the C core continues: we have released
<a href="https://igraph.org/r/">R-igraph</a> 1.3.0, which updates the C core of igraph
within the R interface to version 0.9.7, which is now only one patch version
behind the mainline C core. The update fixes lots of bugs compared to the
previous release and adds quite a few new functions.</p>

<p>Due to the underlying changes in the C core of igraph between the 0.8 series
and 0.9.7, there are some cases when we needed to make extra efforts in the
R interface to keep things compatible with previous releases. For instance,
igraph 0.9.7 now interprets zero cutoff in the closeness, betweenness and edge
betweenness centrality functions literally, while igraph 0.8 interpreted zero
as “no cutoff”. The R interface keeps the old behaviour in such cases but
prints a deprecation warning; the old behaviour will be gone in igraph 1.4.0 or
2.0.0, whichever comes first.</p>

<p>A patch release of R/igraph is coming soon in the next few days, which will
hopefully (finally) catch up with the 0.9 branch of the C core. We aim to let
R/igraph stabilize for a few weeks now while we work on further improvements in
the C core.</p>

<p>Even though we tried to do our best not to cause breaking changes for users of
igraph from R, we may have made unintentional mistakes, so please keep on
reporting issues in the <a href="https://github.com/igraph/rigraph/issues">Github issue
tracker</a>.</p>

<!--more-->

<h2 id="release-notes">Release Notes</h2>

<p>The C core is updated to 0.9.7, fixing a range of bugs and introducing a number of new functions.</p>

<h3 id="added">Added</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">has_eulerian_path()</code> and <code class="language-plaintext highlighter-rouge">has_eulerian_cycle()</code> decides whether there is an Eulerian path or cycle in the graph.</li>
  <li><code class="language-plaintext highlighter-rouge">eulerian_path()</code> and <code class="language-plaintext highlighter-rouge">eulerian_cycle()</code> returns the edges and vertices in an Eulerian path or cycle in the graph.</li>
  <li><code class="language-plaintext highlighter-rouge">any_loop()</code> checks whether a graph contains at least one loop edge.</li>
  <li><code class="language-plaintext highlighter-rouge">is_tree()</code> checks whether a graph is a tree and also finds a possible root</li>
  <li><code class="language-plaintext highlighter-rouge">to_prufer()</code> converts a tree graph into its Prufer sequence</li>
  <li><code class="language-plaintext highlighter-rouge">make_from_prufer()</code> creates a tree graph from its Prufer sequence</li>
  <li><code class="language-plaintext highlighter-rouge">sample_tree()</code> to sample labelled trees uniformly at random</li>
  <li><code class="language-plaintext highlighter-rouge">sample_spanning_tree()</code> to sample spanning trees of an undirected graph uniformly at random</li>
  <li><code class="language-plaintext highlighter-rouge">automorphisms()</code> and <code class="language-plaintext highlighter-rouge">canonical_permutation()</code> now supports vertex colors</li>
  <li><code class="language-plaintext highlighter-rouge">random_edge_walk()</code> to record the edges traversed during a random walk</li>
  <li><code class="language-plaintext highlighter-rouge">harmonic_centrality()</code> calculates the harmonic centrality of vertices, optionally with a cutoff on path lengths</li>
  <li><code class="language-plaintext highlighter-rouge">mean_distance()</code> now supports edge weights and it can also return the number of unconnected vertex pairs when <code class="language-plaintext highlighter-rouge">details=TRUE</code> is passed as an argument</li>
  <li><code class="language-plaintext highlighter-rouge">greedy_vertex_coloring()</code> finds vertex colorings based on a simple greedy algorithm.</li>
  <li><code class="language-plaintext highlighter-rouge">bridges()</code> finds the bridges (cut-edges) of a graph</li>
  <li>The frame width of circle, rectangle and square vertex shapes can now be adjusted on plots with the <code class="language-plaintext highlighter-rouge">frame.width</code> vertex attribute or the <code class="language-plaintext highlighter-rouge">vertex.frame.width</code> keyword argument, thanks to <a href="https://github.com/simoncarrignon">@simoncarrignon</a>. See <a href="https://github.com/igraph/rigraph/issues/500">PR #500</a> for more details.</li>
  <li><code class="language-plaintext highlighter-rouge">automorphism_group()</code> returns a possible (not necessarily minimal) generating set of the automorphism group of a graph.</li>
  <li><code class="language-plaintext highlighter-rouge">global_efficiency()</code> calculates the global efficiency of the graph.</li>
  <li><code class="language-plaintext highlighter-rouge">local_efficiency()</code> calculates the local efficiency of each vertex in a graph.</li>
  <li><code class="language-plaintext highlighter-rouge">average_local_efficiency()</code> calculates the average local efficiency across the set of vertices in a graph.</li>
  <li><code class="language-plaintext highlighter-rouge">rewire(each_edge(...))</code> now supports rewiring only one endpoint of each edge.</li>
  <li><code class="language-plaintext highlighter-rouge">realize_degseq()</code> generates graphs from degree sequences in a deterministic manner. It is also available as <code class="language-plaintext highlighter-rouge">make_(degseq(..., deterministic=TRUE))</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">clique_size_counts()</code> counts cliques of different sizes without storing them all.</li>
  <li><code class="language-plaintext highlighter-rouge">feedback_arc_set()</code> finds a minimum-weight feedback arc set in a graph, either with an exact integer programming algorithm or with a linear-time approximation.</li>
  <li><code class="language-plaintext highlighter-rouge">make_bipartite_graph()</code> now handles vertices with names.</li>
  <li><code class="language-plaintext highlighter-rouge">shortest_paths()</code> now supports graphs with negative edge weights.</li>
  <li><code class="language-plaintext highlighter-rouge">min_cut()</code> now supports s-t mincuts even if <code class="language-plaintext highlighter-rouge">value.only=FALSE</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">as.matrix()</code> now supports converting an igraph graph to an adjacency or edge list matrix representation. See <code class="language-plaintext highlighter-rouge">as.matrix.igraph()</code> for more details. This function was migrated from <code class="language-plaintext highlighter-rouge">intergraph</code>; thanks to <a href="https://github.com/mbojan">Michał Bojanowski</a>.</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">is_connected()</code> now returns FALSE for the null graph</li>
  <li>Calling <code class="language-plaintext highlighter-rouge">length()</code> on a graph now returns the number of vertices to make it consistent with indexing the graph with <code class="language-plaintext highlighter-rouge">[[</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">diameter()</code> now corrently returns infinity for disconnected graphs when <code class="language-plaintext highlighter-rouge">unconnected=FALSE</code>. Previous versions returned the number of vertices plus one, which was clearly invalid for weighted graphs.</li>
  <li><code class="language-plaintext highlighter-rouge">mean_distance()</code> now correctly treats the path length between disconnected vertices as infinite when <code class="language-plaintext highlighter-rouge">unconnected=FALSE</code>. Previous versions used the number of vertices plus one, adding a bias towards this number, even if the graph was weighted and the number of vertices plus one was not a path length that could safely have been considered as being longer than any “valid” path.</li>
  <li><code class="language-plaintext highlighter-rouge">layout_with_sugiyama()</code> now handles the case of exactly one extra virtual node correctly; fixes <a href="https://github.com/igraph/rigraph/issues/85">#85</a></li>
  <li><code class="language-plaintext highlighter-rouge">bfs()</code> and <code class="language-plaintext highlighter-rouge">dfs()</code> callback functions now correctly receive 1-based vertex indices and ranks; it used to be zero-based in earlier versions</li>
  <li>Accidentally returning a non-logical value from a <code class="language-plaintext highlighter-rouge">bfs()</code> or <code class="language-plaintext highlighter-rouge">dfs()</code> callback does not crash R any more</li>
  <li>Calling <code class="language-plaintext highlighter-rouge">print()</code> on a graph with a small <code class="language-plaintext highlighter-rouge">max.lines</code> value (smaller than the number of lines needed to print the attribute list and the header) does not raise an error any more; fixes <a href="https://github.com/igraph/rigraph/issues/179">#179</a></li>
  <li><code class="language-plaintext highlighter-rouge">as_adjacency_matrix(edges=TRUE, sparse=TRUE)</code> now consistently returns the last edge ID for each cell in the matrix instead of summing them.</li>
  <li>Using the <code class="language-plaintext highlighter-rouge">+</code> and <code class="language-plaintext highlighter-rouge">-</code> operators with a <code class="language-plaintext highlighter-rouge">path()</code> object consisting of two vertices is now handled correctly; fixes <a href="https://github.com/igraph/rigraph/issues/355">#355</a></li>
  <li><code class="language-plaintext highlighter-rouge">topo_sort()</code> now throws an error if the input graph is not acyclic instead of returning an incorrect partial ordering.</li>
  <li>Weighted transitivity calculations (i.e. <code class="language-plaintext highlighter-rouge">transitivity(mode="barrat")</code> now throw an error for multigraphs; the implementation does not work correctly for multigraphs and earlier versions did not warn about this.</li>
</ul>

<h3 id="changed">Changed</h3>

<ul>
  <li>The <code class="language-plaintext highlighter-rouge">neimode</code> argument of <code class="language-plaintext highlighter-rouge">bfs()</code> and <code class="language-plaintext highlighter-rouge">dfs()</code> was renamed to <code class="language-plaintext highlighter-rouge">mode</code> for sake of consistency with other functions. The old argument name is deprecated and will be removed in 1.4.0.</li>
  <li><code class="language-plaintext highlighter-rouge">bfs()</code> and <code class="language-plaintext highlighter-rouge">dfs()</code> callback functions now correctly receive 1-based vertex indices and ranks; it used to be zero-based in earlier versions. (This is actually a bugfix so it’s also mentioned in the “Fixed” section).</li>
  <li><code class="language-plaintext highlighter-rouge">closeness()</code>, <code class="language-plaintext highlighter-rouge">betweenness()</code> and <code class="language-plaintext highlighter-rouge">edge_betweenness()</code> now all take a <code class="language-plaintext highlighter-rouge">cutoff</code> argument on their own. <code class="language-plaintext highlighter-rouge">estimate_closeness()</code>, <code class="language-plaintext highlighter-rouge">estimate_betweenness()</code> and <code class="language-plaintext highlighter-rouge">estimate_edge_betweenness()</code> became aliases, with identical signature. They are <em>not</em> deprecated but their implementation might change in future versions to provide proper estimation schemes instead of a simple cutoff-based approximation. If you explicitly need cutoffs and you want your results to be reproducible with future versions, use <code class="language-plaintext highlighter-rouge">closeness()</code>, <code class="language-plaintext highlighter-rouge">betweenness()</code> and <code class="language-plaintext highlighter-rouge">edge_betweenness()</code> in your code with a <code class="language-plaintext highlighter-rouge">cutoff</code> argument.</li>
  <li><code class="language-plaintext highlighter-rouge">closeness()</code> now only considers <em>reachable</em> vertices during the calculation; in other words, closeness centrality is now calculated on a per-component basis for disconnected graphs. Earlier versions considered <em>all</em> vertices.</li>
</ul>

<h3 id="deprecated">Deprecated</h3>

<ul>
  <li>Using <code class="language-plaintext highlighter-rouge">cutoff=0</code> for <code class="language-plaintext highlighter-rouge">closeness()</code>, <code class="language-plaintext highlighter-rouge">betweenness()</code> and <code class="language-plaintext highlighter-rouge">edge_betweenness()</code> is deprecated; if you want exact scores, use a negative cutoff. <code class="language-plaintext highlighter-rouge">cutoff=0</code> will be interpreted literally from igraph 1.4.0.</li>
  <li><code class="language-plaintext highlighter-rouge">centr_degree_tmax()</code> now prints a warning when it is invoked without an explicit <code class="language-plaintext highlighter-rouge">loops</code> argument. <code class="language-plaintext highlighter-rouge">loops</code> will be mandatory from igraph 1.4.0.</li>
  <li>The <code class="language-plaintext highlighter-rouge">nexus_list()</code>, <code class="language-plaintext highlighter-rouge">nexus_info()</code>, <code class="language-plaintext highlighter-rouge">nexus_get()</code> and <code class="language-plaintext highlighter-rouge">nexus_search()</code> functions now return an error informing the user that the Nexus graph repository has been taken offline (actually, several years ago). These functions will be removed in 1.4.0.</li>
  <li>The <code class="language-plaintext highlighter-rouge">edges</code> argument of <code class="language-plaintext highlighter-rouge">as_adjacency_matrix()</code> is deprecated; it will be removed in igraph 1.4.0.</li>
</ul>

<h3 id="removed">Removed</h3>

<ul>
  <li>The deprecated <code class="language-plaintext highlighter-rouge">page_rank_old()</code> function and the deprecated <code class="language-plaintext highlighter-rouge">power</code> method of <code class="language-plaintext highlighter-rouge">page_rank()</code> were removed.</li>
</ul>]]></content><author><name></name></author><category term="r" /><summary type="html"><![CDATA[Our efforts to bring the R interface of igraph closer to the recent developments of the C core continues: we have released R-igraph 1.3.0, which updates the C core of igraph within the R interface to version 0.9.7, which is now only one patch version behind the mainline C core. The update fixes lots of bugs compared to the previous release and adds quite a few new functions.]]></summary></entry><entry><title type="html">C/igraph 0.9.8</title><link href="https://igraph.org/2022/04/08/igraph-0.9.8-c.html" rel="alternate" type="text/html" title="C/igraph 0.9.8" /><published>2022-04-08T00:00:00+00:00</published><updated>2022-04-08T00:00:00+00:00</updated><id>https://igraph.org/2022/04/08/igraph-0.9.8-c</id><content type="html" xml:base="https://igraph.org/2022/04/08/igraph-0.9.8-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.9.8, the eighth bugfix release of the 0.9 series, has arrived.</p>

<p>The source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.9.8">the GitHub releases
page</a>.</p>

<p>This release includes bug fixes and documentation improvements only. Read on
for more details.</p>

<!--more-->

<h3 id="fixed">Fixed</h3>

<ul>
  <li>Assertion failure in <code class="language-plaintext highlighter-rouge">igraph_bfs()</code> when an empty <code class="language-plaintext highlighter-rouge">roots</code> or <code class="language-plaintext highlighter-rouge">restricted</code> vector was provided.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_diversity()</code> now returns 0 for degree-1 vertices. Previously it incorrectly returned NaN or +-Inf depending on roundoff errors.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_walktrap()</code> does not crash any more when provided with
<code class="language-plaintext highlighter-rouge">modularity=NULL</code> and <code class="language-plaintext highlighter-rouge">membership=NULL</code>.</li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>Documentation improvements.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.9.8, the eighth bugfix release of the 0.9 series, has arrived.]]></summary></entry><entry><title type="html">C/igraph 0.9.7</title><link href="https://igraph.org/2022/03/16/igraph-0.9.7-c.html" rel="alternate" type="text/html" title="C/igraph 0.9.7" /><published>2022-03-16T00:00:00+00:00</published><updated>2022-03-16T00:00:00+00:00</updated><id>https://igraph.org/2022/03/16/igraph-0.9.7-c</id><content type="html" xml:base="https://igraph.org/2022/03/16/igraph-0.9.7-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.9.7, the seventh bugfix release of the 0.9 series, has arrived.</p>

<p>The source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.9.7">the GitHub releases
page</a>.</p>

<p>This release includes bug fixes, build system tweaks and minor (performance and
non-performance-related) improvements. Read on for more details.</p>

<!--more-->

<h3 id="changed">Changed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_get_all_shortest_paths_dijsktra()</code> now uses tolerances when comparing path
lengths, and is thus robust to numerical roundoff errors.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_*_swap</code> and <code class="language-plaintext highlighter-rouge">igraph_matrix_swap</code> now take O(1) instead of O(n) and accept all sizes.</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li>NCOL and LGL format writers no longer accept “name” and “weight” attributes
of invalid types.</li>
  <li>The LGL writer could not access numerical weight attributes, potentially leading
to crashes.</li>
  <li>External PLFIT libraries and their headers are now detected at their standard
installation location.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_init()</code> no longer accepts negative vector sizes.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_assortativity_nominal()</code> crashed on the null graph.</li>
  <li>Label propagation now ensures that all labels are dominant.</li>
  <li>Fixed incorrect partition results for walktrap algorithm (issue #1927)</li>
  <li>Negative values returned by <code class="language-plaintext highlighter-rouge">igraph_rng_get_integer()</code> and <code class="language-plaintext highlighter-rouge">RNG_INTEGER()</code> were incorrect,
one larger than they should have been.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_walktrap()</code> now checks its <code class="language-plaintext highlighter-rouge">steps</code> input argument.</li>
  <li>The first modularity value reported by <code class="language-plaintext highlighter-rouge">igraph_community_walktrap()</code> was
incorrect (it was always zero). This is now fixed.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_correlated_game()</code> would return incorrect results, or exhaust the memory,
 for most input graphs that were not generated with <code class="language-plaintext highlighter-rouge">igraph_erdos_renyi_game_gnp()</code>.</li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>The C attribute handler now verifies attribute types when retrieving attributes.</li>
  <li>Documentation improvements</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.9.7, the seventh bugfix release of the 0.9 series, has arrived.]]></summary></entry><entry><title type="html">python-igraph 0.9.9</title><link href="https://igraph.org/2022/01/10/igraph-0.9.9-python.html" rel="alternate" type="text/html" title="python-igraph 0.9.9" /><published>2022-01-10T00:00:00+00:00</published><updated>2022-01-10T00:00:00+00:00</updated><id>https://igraph.org/2022/01/10/igraph-0.9.9-python</id><content type="html" xml:base="https://igraph.org/2022/01/10/igraph-0.9.9-python.html"><![CDATA[<p><a href="https://igraph.org/python/">python-igraph</a> 0.9.9, the seventh bugfix release
of the 0.9 series, has arrived.</p>

<p>The preferred way of installing the Python interface is via <code class="language-plaintext highlighter-rouge">pip</code>; typing
<code class="language-plaintext highlighter-rouge">pip install igraph</code> should install a pre-compiled Python wheel on most
supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the
source code are also available from the <a href="https://pypi.org/project/igraph/0.9.9/">Python Package Index
page</a>.</p>

<p>ARM64 (Apple Silicon) wheels are now officially supported from this release.</p>

<p>See the changelog on Github for relevant changes in 0.9.9:</p>

<ul>
  <li><a href="https://github.com/igraph/python-igraph/releases/tag/0.9.9">Changelog for 0.9.9</a></li>
</ul>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.9.9, the seventh bugfix release of the 0.9 series, has arrived.]]></summary></entry><entry><title type="html">C/igraph 0.9.6</title><link href="https://igraph.org/2022/01/05/igraph-0.9.6-c.html" rel="alternate" type="text/html" title="C/igraph 0.9.6" /><published>2022-01-05T00:00:00+00:00</published><updated>2022-01-05T00:00:00+00:00</updated><id>https://igraph.org/2022/01/05/igraph-0.9.6-c</id><content type="html" xml:base="https://igraph.org/2022/01/05/igraph-0.9.6-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.9.6, the sixth bugfix release of the 0.9 series, has arrived.</p>

<p>The source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.9.6">the GitHub releases
page</a>.</p>

<p>This release includes bug fixes, build system tweaks and minor (performance and
non-performance-related) improvements. Read on for more details.</p>

<!--more-->

<h3 id="changed">Changed</h3>

<ul>
  <li>Isomorphism class functions (<code class="language-plaintext highlighter-rouge">igraph_isoclass()</code>, <code class="language-plaintext highlighter-rouge">igraph_isoclass_subgraph()</code>,
<code class="language-plaintext highlighter-rouge">igraph_isoclass_create</code>) and motif finder functions (<code class="language-plaintext highlighter-rouge">igraph_motifs_randesu()</code>,
<code class="language-plaintext highlighter-rouge">igraph_motifs_randesu_estimate()</code>, <code class="language-plaintext highlighter-rouge">igraph_motifs_randesu_callback()</code>) now
support undirected (sub)graphs of sizes 5 and 6. Previsouly only sizes 3 and 4
were supported.</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li>igraph would not build with MinGW when using the vendored GLPK and enabling TLS.</li>
  <li>Removed some uses of <code class="language-plaintext highlighter-rouge">abort()</code> from vendored libraries, which could unexpectedly
shut down the host language of igraph’s high-level interfaces.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_label_propagation()</code> no longer leaves any vertices unlabeled
when they were not reachable from any labeled ones, i.e. the returned membership
vector is guaranteed not to contain negative values (#1853).</li>
  <li>The Kamada-Kawai layout is now interruptible.</li>
  <li>The Fruchterman-Reingold layout is now interruptible.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">igraph_cmp_epsilon()</code> that resulted in incorrect results for
edge betweenness calculations in certain rare cases with x87 floating point
math when LTO was also enabled (#1894).</li>
  <li>Weighted clique related functions now fall back to the unweighted variants
when a null vertex weight vector is given to them.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_erdos_renyi_game_(gnm|gnp)</code> would not produce self-loops for the singleton
graph.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">igraph_local_efficiency()</code> that sometimes erroneously
reported zero as the local efficiency of a vertex in directed graphs.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_update()</code> (and its type-specific variants) did not check for
memory allocation failure.</li>
  <li>Fixed a potential crash in the GraphML reader that would be triggered by some
invalid GraphML files.</li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_is_tree()</code> has improved performance and memory usage.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_is_connected()</code> has improved performance when checking weak connectedness.</li>
  <li>Improved error handling in <code class="language-plaintext highlighter-rouge">igraph_maximal_cliques()</code> and related functions.</li>
  <li>The build system now checks that GLPK is of a compatible version (4.57 or later).</li>
  <li>The vendored <code class="language-plaintext highlighter-rouge">plfit</code> package was updated to 0.9.3.</li>
  <li>You can now build igraph with an external <code class="language-plaintext highlighter-rouge">plfit</code> instead of the vendored one.</li>
  <li>Documentation improvements.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.9.6, the sixth bugfix release of the 0.9 series, has arrived.]]></summary></entry><entry><title type="html">C/igraph 0.9.5</title><link href="https://igraph.org/2021/11/11/igraph-0.9.5-c.html" rel="alternate" type="text/html" title="C/igraph 0.9.5" /><published>2021-11-11T00:00:00+00:00</published><updated>2021-11-11T00:00:00+00:00</updated><id>https://igraph.org/2021/11/11/igraph-0.9.5-c</id><content type="html" xml:base="https://igraph.org/2021/11/11/igraph-0.9.5-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.9.5, the fifth bugfix release of the 0.9 series, has arrived.</p>

<p>The source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.9.5">the GitHub releases
page</a>.</p>

<p>This release includes bug fixes and performance improvements only.</p>

<h3 id="fixed">Fixed</h3>

<ul>
  <li>
    <p><code class="language-plaintext highlighter-rouge">igraph_reindex_membership()</code> does not allow negative membership indices any more.</p>
  </li>
  <li>
    <p><code class="language-plaintext highlighter-rouge">igraph_rewire_directed_edges()</code> now generates multigraphs when edge
directions are ignored, to make it consistent with the directed case.</p>
  </li>
  <li>
    <p>Fixed a bug in <code class="language-plaintext highlighter-rouge">igraph_gomory_hu_tree()</code> that returned only the equivalent
flow tree instead of the cut tree.</p>
  </li>
  <li>
    <p>Fixed a bug in the <code class="language-plaintext highlighter-rouge">IGRAPH_TO_UNDIRECTED_COLLAPSE</code> mode of
<code class="language-plaintext highlighter-rouge">igraph_to_undirected()</code> that provided an incorrect merge vector to the
attribute handler, leading to problems when edge attributes were merged
using an attribute combination.</p>
  </li>
  <li>
    <p>Fixed the behaviour of the <code class="language-plaintext highlighter-rouge">IGRAPH_ENABLE_LTO</code> option when it was set to
<code class="language-plaintext highlighter-rouge">AUTO</code>; earlier versions had a bug where <code class="language-plaintext highlighter-rouge">AUTO</code> simply checked whether LTO
is supported but then did not use LTO even if it was supported.</p>
  </li>
  <li>
    <p>When using igraph from a CMake project, it is now checked that the project
has the C++ language enabled. This is necessary for linking to igraph with
CMake.</p>
  </li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>
    <p>Improved the root selection method for disconnected graphs in the
Reingold-Tilford layout (#1836). The new root selection method provides
nicer results if the graph is not a tree, although it is still recommended
to use the Sugiyama layout instead, unless the input graph is <em>almost</em>
a tree, in which case Reingold-Tilfold may still be preferred.</p>
  </li>
  <li>
    <p><code class="language-plaintext highlighter-rouge">igraph_decompose()</code> is now much faster for large graphs containing many
isolates or small components.</p>
  </li>
  <li>
    <p><code class="language-plaintext highlighter-rouge">igraph_largest_cliques()</code> and <code class="language-plaintext highlighter-rouge">igraph_clique_number()</code> were re-written to
use <code class="language-plaintext highlighter-rouge">igraph_maximal_cliques_callback()</code> so they are much faster now.</p>
  </li>
  <li>
    <p>The vendored GLPK has been upgraded to GLPK 5.0.</p>
  </li>
  <li>
    <p>Documentation improvements.</p>
  </li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.9.5, the fifth bugfix release of the 0.9 series, has arrived.]]></summary></entry><entry><title type="html">python-igraph is now simply igraph on PyPI</title><link href="https://igraph.org/2021/10/29/igraph-0.9.8-python.html" rel="alternate" type="text/html" title="python-igraph is now simply igraph on PyPI" /><published>2021-10-29T00:00:00+00:00</published><updated>2021-10-29T00:00:00+00:00</updated><id>https://igraph.org/2021/10/29/igraph-0.9.8-python</id><content type="html" xml:base="https://igraph.org/2021/10/29/igraph-0.9.8-python.html"><![CDATA[<p><a href="https://igraph.org/python/">python-igraph</a> 0.9.8, the sixth bugfix release of
the 0.9 series, has arrived.</p>

<p>The only significant change in this release is that the Python interface of igraph has been renamed
from <code class="language-plaintext highlighter-rouge">python-igraph</code> to <code class="language-plaintext highlighter-rouge">igraph</code> on PyPI. We are very grateful to
<a href="https://github.com/patrickfuller">Patrick Fuller</a>, the previous owner of the
<code class="language-plaintext highlighter-rouge">igraph</code> package on PyPI for giving up the ownership of <code class="language-plaintext highlighter-rouge">igraph</code> and letting us
use the name instead.</p>

<p>The preferred way of installing the Python interface is still via <code class="language-plaintext highlighter-rouge">pip</code>; typing
<code class="language-plaintext highlighter-rouge">pip install igraph</code> should install a pre-compiled Python wheel on most
supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the
source code are also available from the <a href="https://pypi.org/project/igraph/0.9.8/">Python Package Index
page</a>.</p>

<p><code class="language-plaintext highlighter-rouge">python-igraph</code> will keep on working on PyPI until September 1, 2022, but it is
now only a stub package that depends on <code class="language-plaintext highlighter-rouge">igraph</code>. Running <code class="language-plaintext highlighter-rouge">pip install
python-igraph</code> will in turn install the matching version of the
<a href="https://pypi.org/project/igraph"><code class="language-plaintext highlighter-rouge">igraph</code></a> package from PyPI.</p>

<ul>
  <li>
    <p><strong>Projects listing <code class="language-plaintext highlighter-rouge">python-igraph</code> in their dependencies should migrate to
using <code class="language-plaintext highlighter-rouge">igraph</code> as soon as possible</strong> to keep on receiving updates after
September 1, 2022.</p>
  </li>
  <li>
    <p>Maintainers who provide pre-packaged versions of <code class="language-plaintext highlighter-rouge">python-igraph</code> in Linux
distributions should switch to following the
<a href="https://pypi.org/project/igraph"><code class="language-plaintext highlighter-rouge">igraph</code></a> package on PyPI instead of
<code class="language-plaintext highlighter-rouge">python-igraph</code>.</p>
  </li>
</ul>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.9.8, the sixth bugfix release of the 0.9 series, has arrived.]]></summary></entry><entry><title type="html">python-igraph 0.9.7</title><link href="https://igraph.org/2021/10/18/igraph-0.9.7-python.html" rel="alternate" type="text/html" title="python-igraph 0.9.7" /><published>2021-10-18T00:00:00+00:00</published><updated>2021-10-18T00:00:00+00:00</updated><id>https://igraph.org/2021/10/18/igraph-0.9.7-python</id><content type="html" xml:base="https://igraph.org/2021/10/18/igraph-0.9.7-python.html"><![CDATA[<p><a href="https://igraph.org/python/">python-igraph</a> 0.9.7, the fifth bugfix release of
the 0.9 series, has arrived.</p>

<p>The preferred way of installing the Python interface is via <code class="language-plaintext highlighter-rouge">pip</code>; typing
<code class="language-plaintext highlighter-rouge">pip install python-igraph</code> should install a pre-compiled Python wheel on most
supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the
source code are also available from the <a href="https://pypi.org/project/python-igraph/0.9.7/">Python Package Index
page</a>.</p>

<p>See the changelog on Github for relevant changes in 0.9.7:</p>

<ul>
  <li><a href="https://github.com/igraph/python-igraph/releases/tag/0.9.7">Changelog for 0.9.7</a></li>
</ul>

<p>This release also adds support for Python 3.10 and provides experimental native
Python wheels for ARM64 and Apple Silicon CPUs. Note that the Apple Silicon
wheels are <em>not tested</em> in a CI environment yet; this will hopefully change in
the near future when Github Actions starts supporting Apple Silicon. Until
then, feel free to report any issues that you find with Apple Silicon wheels
(or any other wheel) in the <a href="https://github.com/igraph/python-igraph/issues">issue tracker on
Github</a>.</p>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.9.7, the fifth bugfix release of the 0.9 series, has arrived.]]></summary></entry><entry><title type="html">R/igraph 1.2.7</title><link href="https://igraph.org/2021/10/15/igraph-1.2.7-r.html" rel="alternate" type="text/html" title="R/igraph 1.2.7" /><published>2021-10-15T00:00:00+00:00</published><updated>2021-10-15T00:00:00+00:00</updated><id>https://igraph.org/2021/10/15/igraph-1.2.7-r</id><content type="html" xml:base="https://igraph.org/2021/10/15/igraph-1.2.7-r.html"><![CDATA[<p>In an attempt to bring the R interface of igraph closer to the recent
developments of the C core, we have released <a href="https://igraph.org/r/">R-igraph</a>
1.2.7, the seventh bugfix release of the 1.2 series. This version updates
the C core of igraph within the R interface to version 0.8.5, which, while
still several versions behind the mainline C core, fixes a range of bugs
compared to the previous release and introduces a few new functions.</p>

<p>This release is only the beginning; in the next few months we aim to process
most of the issues on the <a href="https://github.com/igraph/rigraph/issues">Github issue
tracker</a>, close the ones that are not
relevant any more, fix the ones that should be fixed, and then proceed with
updating the R interface to version 0.9.4 of the C core, which is the most
recent C core version at the time of writing.</p>

<!--more-->

<h2 id="release-notes">Release Notes</h2>

<p>Added:</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">cluster_leiden()</code> added as an interface to the Leiden community detection
algorithm in the C core of igraph
(<a href="https://github.com/igraph/rigraph/issues/399">#399</a>.</li>
  <li><code class="language-plaintext highlighter-rouge">cluster_fluid_communities()</code> added as an interface to the fluid communities
algorithm of the C core of igraph
(<a href="https://github.com/igraph/rigraph/issues/454">#454</a>.</li>
</ul>

<p>Fixed:</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">make_lattice()</code> correctly rounds <code class="language-plaintext highlighter-rouge">length</code> to the nearest integer while
printing a warning (<a href="https://github.com/igraph/rigraph/issues/115">#115</a>.</li>
  <li><code class="language-plaintext highlighter-rouge">make_empty_graph(NULL)</code> now prints an error instead of producing an
invalid graph (<a href="https://github.com/igraph/rigraph/issues/404">#404</a>).</li>
  <li><code class="language-plaintext highlighter-rouge">make_graph(c())</code> now produces an empty graph instead of printing a
misleading error message (<a href="https://github.com/igraph/rigraph/431">#431</a>).</li>
  <li>Printing a graph where some edges have NA as the names of both endpoints
does not produce a misleading error message any more
(<a href="https://github.com/igraph/rigraph/410">#410</a>).</li>
  <li>The <code class="language-plaintext highlighter-rouge">types</code> argument of functions related to bipartite graphs now prints
a warning when the types are coerced to booleans
(<a href="https://github.com/igraph/rigraph/476">#476</a>).</li>
  <li>Betweenness normalisation no longer overflows
(<a href="https://github.com/igraph/rigraph/442">#442</a>).</li>
  <li><code class="language-plaintext highlighter-rouge">layout_with_sugiyama()</code> returns a layout of type matrix even if there is
only one vertex in the graph (<a href="https://github.com/igraph/rigraph/408">#408</a>).</li>
  <li>Plotting a null graph (i.e. a graph with no vertices) does not throw an error
any more (<a href="https://github.com/igraph/rigraph/387">#387</a>).</li>
</ul>

<p>Deprecated:</p>
<ul>
  <li>The <code class="language-plaintext highlighter-rouge">membership</code> argument of <code class="language-plaintext highlighter-rouge">modularity.matrix()</code> is now deprecated as the
function never needed it anyway.</li>
  <li><code class="language-plaintext highlighter-rouge">modularity()</code> now prints a warning when it is applied on a directed graph
because the implementation in igraph’s C core does not support directed
graphs as of version 0.8.5. The warning will be turned into an error in
the next minor (1.3.0) version of the R interface; the error will be removed
later when the C core is updated to a version that supports modularity for
directed networks.</li>
  <li><code class="language-plaintext highlighter-rouge">transitivity()</code> now prints a warning when its local variant (<code class="language-plaintext highlighter-rouge">type="local"</code>)
is called on a directed graph or a graph with multiple edges beecause the
implementation in the C core of igraph does not work reliably in these cases
as of version 0.8.5. The warning will be turned into an error in the next
minor (1.3.0) version of the R interface; the error will be removed later
when the C core is updated to a version that supports transitivity for
networks with multiple edges.</li>
</ul>

<p>Misc:</p>
<ul>
  <li>Documentation improvements.</li>
</ul>]]></content><author><name></name></author><category term="r" /><summary type="html"><![CDATA[In an attempt to bring the R interface of igraph closer to the recent developments of the C core, we have released R-igraph 1.2.7, the seventh bugfix release of the 1.2 series. This version updates the C core of igraph within the R interface to version 0.8.5, which, while still several versions behind the mainline C core, fixes a range of bugs compared to the previous release and introduces a few new functions.]]></summary></entry><entry><title type="html">igraph docs for multiple versions</title><link href="https://igraph.org/2021/10/05/versioned-docs.html" rel="alternate" type="text/html" title="igraph docs for multiple versions" /><published>2021-10-05T00:00:00+00:00</published><updated>2021-10-05T00:00:00+00:00</updated><id>https://igraph.org/2021/10/05/versioned-docs</id><content type="html" xml:base="https://igraph.org/2021/10/05/versioned-docs.html"><![CDATA[<p>The online docs for igraph on this website now include multiple versions of API documentation and tutorials for the C core and the R and Python interfaces.</p>

<p>To change version, click on the new button on the top left of the page on the relevant pages:</p>
<ul>
  <li><a href="/c/html/latest/">C manual</a></li>
  <li><a href="/python/api/latest/">Python API</a></li>
  <li><a href="/python/tutorial/latest/">Python tutorial</a></li>
  <li><a href="/r/html/latest/">R manual</a></li>
</ul>]]></content><author><name></name></author><summary type="html"><![CDATA[The online docs for igraph on this website now include multiple versions of API documentation and tutorials for the C core and the R and Python interfaces.]]></summary></entry><entry><title type="html">Additional funding for igraph</title><link href="https://igraph.org/2021/09/01/funding.html" rel="alternate" type="text/html" title="Additional funding for igraph" /><published>2021-09-01T00:00:00+00:00</published><updated>2021-09-01T00:00:00+00:00</updated><id>https://igraph.org/2021/09/01/funding</id><content type="html" xml:base="https://igraph.org/2021/09/01/funding.html"><![CDATA[<p>The igraph project is proud to announce that the <a href="https://chanzuckerberg.com/">Chan Zuckerberg Initiative</a> continues to fund the project in their program on <a href="https://chanzuckerberg.com/eoss/">Essential Open Source Software for Science</a>. The project will receive two grants of $400,000 over the course of the next two years. One grant will help to further develop and maintain the igraph project. The other grant will help to diversify the pool of contributors and maintainers of the project, which is jointly coordinated with <a href="https://www.networkscienceinstitute.org/wins">Women in Network Science</a>, and will be led by <a href="https://brooke-welles.squarespace.com/">Brooke Foucault Welles</a>.</p>

<p>Last year, the core library of igraph was enormously improved, making the library easier to build, easier to maintain and easier to use. However, most users are not using the C core directly, but are using it through one of the interfaces: Python, R or Mathematica. The CZI grant will support the igraph development team on improving these interfaces, by making them more intuitive to use and by integrating them more closely in the host language. Additionally, development efforts will be aimed at making the library and the interfaces easier to maintain, focusing on long-term sustainability. This ensures that igraph continues to be a useful tool for network scientists from various disciplines across the globe.</p>

<p>Having people committed to maintain and further develop igraph is critical to ensure its long-term viability. We made steps towards building a more inclusive and engaged community by opening a <a href="https://igraph.discourse.group">forum</a> dedicated to igraph. We aim to enlarge and diversify the team of contributors and maintainers of the project. Making it easier to start using igraph and contributing to igraph is an important step. Improving documentation and tutorials helps achieve that goal, but we will also actively organize workshops for users and contributors, with a specific focus on women and non-binary people, and engage more actively on the community forum. Additionally, a mentorship programme will be setup specifically to facilitate women and non-binary people to use and contribute to igraph, paving the way for them to become maintainers of igraph. The CZI grant will enable us to engage more people in achieving these objectives.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[The igraph project is proud to announce that the Chan Zuckerberg Initiative continues to fund the project in their program on Essential Open Source Software for Science. The project will receive two grants of $400,000 over the course of the next two years. One grant will help to further develop and maintain the igraph project. The other grant will help to diversify the pool of contributors and maintainers of the project, which is jointly coordinated with Women in Network Science, and will be led by Brooke Foucault Welles.]]></summary></entry><entry><title type="html">python-igraph 0.9.6</title><link href="https://igraph.org/2021/06/12/igraph-0.9.6-python.html" rel="alternate" type="text/html" title="python-igraph 0.9.6" /><published>2021-06-12T00:00:00+00:00</published><updated>2021-06-12T00:00:00+00:00</updated><id>https://igraph.org/2021/06/12/igraph-0.9.6-python</id><content type="html" xml:base="https://igraph.org/2021/06/12/igraph-0.9.6-python.html"><![CDATA[<p><a href="https://igraph.org/python/">python-igraph</a> 0.9.6, the fourth bugfix release of
the 0.9 series, has arrived.</p>

<p>The preferred way of installing the Python interface is via <code class="language-plaintext highlighter-rouge">pip</code>; typing
<code class="language-plaintext highlighter-rouge">pip install python-igraph</code> should install a pre-compiled Python wheel on most
supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the
source code are also available from the <a href="https://pypi.org/project/python-igraph/0.9.6/">Python Package Index
page</a>.</p>

<p>This release provides a fix for a single plotting issue with the Matplotlib
backend that was accidentally introduced in 0.9.5. See the changelog on Github
for more details:</p>

<ul>
  <li><a href="https://github.com/igraph/python-igraph/releases/tag/0.9.6">Changelog for 0.9.6</a></li>
</ul>

<p>This release also provides experimental native Python wheels for Apple Silicon CPUs. Note that the Apple Silicon wheels are <em>not tested</em> in a CI environment yet; this will hopefully change in the near future when Github Actions starts supporting Apple Silicon. Until then, feel free to report any issues that you find with Apple Silicon wheels (or any other wheel) in the <a href="https://github.com/igraph/python-igraph/issues">issue tracker on Github</a>.</p>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.9.6, the fourth bugfix release of the 0.9 series, has arrived.]]></summary></entry><entry><title type="html">python-igraph 0.9.5</title><link href="https://igraph.org/2021/06/11/igraph-0.9.5-python.html" rel="alternate" type="text/html" title="python-igraph 0.9.5" /><published>2021-06-11T00:00:00+00:00</published><updated>2021-06-11T00:00:00+00:00</updated><id>https://igraph.org/2021/06/11/igraph-0.9.5-python</id><content type="html" xml:base="https://igraph.org/2021/06/11/igraph-0.9.5-python.html"><![CDATA[<p><a href="https://igraph.org/python/">python-igraph</a> 0.9.5, the third bugfix release of
the 0.9 series, has arrived.</p>

<p>The preferred way of installing the Python interface is via <code class="language-plaintext highlighter-rouge">pip</code>; typing
<code class="language-plaintext highlighter-rouge">pip install python-igraph</code> should install a pre-compiled Python wheel on most
supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the
source code are also available from the <a href="https://pypi.org/project/python-igraph/0.9.5/">Python Package Index
page</a>.</p>

<p>See the changelogs on Github for relevant changes in 0.9.5:</p>

<ul>
  <li><a href="https://github.com/igraph/python-igraph/releases/tag/0.9.5">Changelog for 0.9.5</a></li>
</ul>

<p>This release also provides experimental native Python wheels for Apple Silicon CPUs. Note that the Apple Silicon wheels are <em>not tested</em> in a CI environment yet; this will hopefully change in the near future when Github Actions starts supporting Apple Silicon. Until then, feel free to report any issues that you find with Apple Silicon wheels (or any other wheel) in the <a href="https://github.com/igraph/python-igraph/issues">issue tracker on Github</a>.</p>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.9.5, the third bugfix release of the 0.9 series, has arrived.]]></summary></entry><entry><title type="html">C/igraph 0.9.4</title><link href="https://igraph.org/2021/05/31/igraph-0.9.4-c.html" rel="alternate" type="text/html" title="C/igraph 0.9.4" /><published>2021-05-31T00:00:00+00:00</published><updated>2021-05-31T00:00:00+00:00</updated><id>https://igraph.org/2021/05/31/igraph-0.9.4-c</id><content type="html" xml:base="https://igraph.org/2021/05/31/igraph-0.9.4-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.9.4, the fourth bugfix release of the 0.9 series, has arrived.</p>

<p>The source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.9.4">the GitHub releases
page</a>.</p>

<p>This release includes bug fixes only.</p>

<h3 id="changed">Changed</h3>

<ul>
  <li>Unweighted transitivity (i.e. clustering coefficient) calculations now ignore multi-edges and edge directions instead of rejecting multigraphs and directed graphs.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_transitivity_barrat()</code> now returns an error code if the input graph has multiple edges (which is not handled correctly by the implementation yet).</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_local_scan_k_ecount()</code> now handles loops correctly.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_transitivity_avglocal_undirected()</code> is no longer slower than <code class="language-plaintext highlighter-rouge">igraph_transitivity_local_undirected()</code>.</li>
  <li>Worked around an invalid warning issued by Clang 9.0 when compiling with OpenMP.</li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>Documentation improvements.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.9.4, the fourth bugfix release of the 0.9 series, has arrived.]]></summary></entry><entry><title type="html">python-igraph 0.9.4</title><link href="https://igraph.org/2021/05/31/igraph-0.9.4-python.html" rel="alternate" type="text/html" title="python-igraph 0.9.4" /><published>2021-05-31T00:00:00+00:00</published><updated>2021-05-31T00:00:00+00:00</updated><id>https://igraph.org/2021/05/31/igraph-0.9.4-python</id><content type="html" xml:base="https://igraph.org/2021/05/31/igraph-0.9.4-python.html"><![CDATA[<p><a href="https://igraph.org/python/">python-igraph</a> 0.9.4, the second bugfix release of
the 0.9 series, has arrived. (Yes, we skipped 0.9.2 and 0.9.3).</p>

<p>The preferred way of installing the Python interface is via <code class="language-plaintext highlighter-rouge">pip</code>; typing
<code class="language-plaintext highlighter-rouge">pip install python-igraph</code> should install a pre-compiled Python wheel on most
supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the
source code are also available from the <a href="https://pypi.org/project/python-igraph/0.9.4/">Python Package Index
page</a>.</p>

<p>This release brings <code class="language-plaintext highlighter-rouge">python-igraph</code> up-to-date with igraph 0.9.4. See the changelogs on Github for relevant changes in 0.9.4:</p>

<ul>
  <li><a href="https://github.com/igraph/python-igraph/releases/tag/0.9.4">Changelog for 0.9.4</a></li>
</ul>

<p>This release is also the first one that provides experimental native Python wheels for Apple Silicon CPUs. Note that the Apple Silicon wheels are <em>not tested</em> in a CI environment yet; this will hopefully change in the near future when Github Actions starts supporting Apple Silicon. Until then, feel free to report any issues that you find with Apple Silicon wheels (or any other wheel) in the <a href="https://github.com/igraph/python-igraph/issues">issue tracker on Github</a>.</p>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.9.4, the second bugfix release of the 0.9 series, has arrived. (Yes, we skipped 0.9.2 and 0.9.3).]]></summary></entry><entry><title type="html">C/igraph 0.9.3</title><link href="https://igraph.org/2021/05/05/igraph-0.9.3-c.html" rel="alternate" type="text/html" title="C/igraph 0.9.3" /><published>2021-05-05T00:00:00+00:00</published><updated>2021-05-05T00:00:00+00:00</updated><id>https://igraph.org/2021/05/05/igraph-0.9.3-c</id><content type="html" xml:base="https://igraph.org/2021/05/05/igraph-0.9.3-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.9.3, the third bugfix release of the 0.9
series, has arrived.</p>

<p>The source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.9.3">the GitHub releases
page</a>.</p>

<p>This release includes bug fixes only.</p>

<h3 id="added">Added</h3>

<ul>
  <li>OpenMP is now enabled and used by certain functions (notably PageRank calculation) when the compiler supports it. Set <code class="language-plaintext highlighter-rouge">IGRAPH_OPENMP_SUPPORT=OFF</code> at configuration time to disable this.</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_get_incidence()</code> no longer reads and writes out of bounds when given a non-bipartite graph, but gives a warning and ignores edges within a part.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_dyad_census()</code> no longer reports an overflow on singleton graphs, and handles loops and multigraphs correctly. Undirected graphs are handled consistently and will no longer give a warning.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_lex_cmp()</code> and <code class="language-plaintext highlighter-rouge">igraph_vector_colex_cmp()</code> dereferenced their arguments only once instead of twice, and therefore did not work with <code class="language-plaintext highlighter-rouge">igraph_vector_ptr_sort()</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_maximal_cliques_subset()</code> and <code class="language-plaintext highlighter-rouge">igraph_transitivity_barrat()</code> corrupted the error handling stack (“finally stack”) under some circumstances.</li>
  <li>CMake package files did not respect <code class="language-plaintext highlighter-rouge">CMAKE_INSTALL_LIBDIR</code>. This only affected Linux distributions which install into <code class="language-plaintext highlighter-rouge">lib64</code> or other locations instead of <code class="language-plaintext highlighter-rouge">lib</code>.</li>
  <li>The parser sources could not be generated when igraph was in a location that contained spaces in its path.</li>
  <li>igraph no longer links to the math library (<code class="language-plaintext highlighter-rouge">libm</code>) when this is not necessary.</li>
  <li><code class="language-plaintext highlighter-rouge">_CRT_SECURE_NO_WARNINGS</code> is now defined during compilation to enable compatibility with UWP.</li>
  <li>Fixed a compilation issue on MSYS / MinGW when link-time optimization was enabled and the <code class="language-plaintext highlighter-rouge">MSYS Makefiles</code> CMake generator was used. Some source files in igraph were renamed as a consequence, but these should not affect users of the library.</li>
</ul>

<h3 id="deprecated">Deprecated</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_rng_min()</code> is now deprecated; assume a constant zero as its return value if you used this function in your own code.</li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>Updated the vendored CXSparse library to version 3.2.0</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.9.3, the third bugfix release of the 0.9 series, has arrived.]]></summary></entry><entry><title type="html">C/igraph 0.9.2</title><link href="https://igraph.org/2021/04/14/igraph-0.9.2-c.html" rel="alternate" type="text/html" title="C/igraph 0.9.2" /><published>2021-04-14T00:00:00+00:00</published><updated>2021-04-14T00:00:00+00:00</updated><id>https://igraph.org/2021/04/14/igraph-0.9.2-c</id><content type="html" xml:base="https://igraph.org/2021/04/14/igraph-0.9.2-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.9.2, the second bugfix release of the 0.9
series, has arrived.</p>

<p>The source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.9.2">the GitHub releases
page</a>.</p>

<p>This release includes bug fixes only. We have also added support for CMake
package files, making it easier to use igraph in CMake-based projects.</p>

<h3 id="added">Added</h3>

<ul>
  <li>CMake package files are now installed with igraph. This allows <code class="language-plaintext highlighter-rouge">find_package(igraph)</code> to find igraph and detect the appropriate compilation options for projects that link to it.</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li>igraph can now be used as a CMake subproject in other CMake-based projects.</li>
  <li>The documentaton can now be built from the release tarball.</li>
  <li>Configuration will no longer fail when the release tarball is extracted into a subdirectory of an unrelated git repository.</li>
  <li>The generated pkg-config file was incorrect when <code class="language-plaintext highlighter-rouge">CMAKE_INSTALL_&lt;dir&gt;</code> variables were absolute paths.</li>
  <li>On Unix-like systems, the library name is now <code class="language-plaintext highlighter-rouge">libigraph.so.0.0.0</code>, as it used to be for igraph 0.8 and earlier.</li>
  <li>Fixed a return type mismatch in parser sources, and fixed some warnings with recent versions of gcc.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">igraph_get_shortest_paths_dijkstra()</code> and <code class="language-plaintext highlighter-rouge">igraph_get_shortest_paths_bellman_ford()</code> that returned incorrect results for unreachable vertices.</li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>Improved installation instructions and tutorial.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.9.2, the second bugfix release of the 0.9 series, has arrived.]]></summary></entry><entry><title type="html">python-igraph 0.9.1</title><link href="https://igraph.org/2021/03/26/igraph-0.9.1-python.html" rel="alternate" type="text/html" title="python-igraph 0.9.1" /><published>2021-03-26T00:00:00+00:00</published><updated>2021-03-26T00:00:00+00:00</updated><id>https://igraph.org/2021/03/26/igraph-0.9.1-python</id><content type="html" xml:base="https://igraph.org/2021/03/26/igraph-0.9.1-python.html"><![CDATA[<p><a href="https://igraph.org/python/">python-igraph</a> 0.9.1, the first bugfix release of
the 0.9 series, has arrived.</p>

<p>The preferred way of installing the Python interface is via <code class="language-plaintext highlighter-rouge">pip</code>; typing
<code class="language-plaintext highlighter-rouge">pip install python-igraph</code> should install a pre-compiled Python wheel on most
supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the
source code are also available from the <a href="https://pypi.org/project/python-igraph/0.9.1/">Python Package Index
page</a>.</p>

<p>This release brings <code class="language-plaintext highlighter-rouge">python-igraph</code> up-to-date with igraph 0.9.1. See the
changelogs on Github for relevant changes in 0.9.0 and 0.9.1:</p>

<ul>
  <li>
    <p><a href="https://github.com/igraph/python-igraph/releases/tag/0.9.0">Changelog for 0.9.0</a></p>
  </li>
  <li>
    <p><a href="https://github.com/igraph/python-igraph/releases/tag/0.9.1">Changelog for 0.9.1</a></p>
  </li>
</ul>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.9.1, the first bugfix release of the 0.9 series, has arrived.]]></summary></entry><entry><title type="html">C/igraph 0.9.1</title><link href="https://igraph.org/2021/03/23/igraph-0.9.1-c.html" rel="alternate" type="text/html" title="C/igraph 0.9.1" /><published>2021-03-23T00:00:00+00:00</published><updated>2021-03-23T00:00:00+00:00</updated><id>https://igraph.org/2021/03/23/igraph-0.9.1-c</id><content type="html" xml:base="https://igraph.org/2021/03/23/igraph-0.9.1-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.9.1, the first bugfix release of the 0.9
series, has arrived.</p>

<p>The source can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.9.1">the GitHub releases
page</a>.</p>

<p>This release includes bug fixes only, apart from a minor addition concerning
lexicographic ordering of vectors, which was not substantial enough for a
minor version bump. The changelog is below.</p>

<h3 id="added">Added</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_lex_cmp()</code> and <code class="language-plaintext highlighter-rouge">igraph_vector_colex_cmp()</code> for lexicographic
and colexicographic comparison of vectors. These functions may also be used
for sorting.</li>
</ul>

<h3 id="changed">Changed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_multilevel()</code> is now randomized (thanks to <a href="https://github.com/GroteGnoom/">Daniel Noom</a>).</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li>CMake settings that controlled the library installation directory name, such as <code class="language-plaintext highlighter-rouge">CMAKE_INSTALL_LIBDIR</code>, were not respected.</li>
  <li>Under some conditions, the generated pkg-config file contained an incorrect include directory path.</li>
  <li>The following functions were not exported from the shared library: <code class="language-plaintext highlighter-rouge">igraph_subcomponent()</code>, <code class="language-plaintext highlighter-rouge">igraph_stack_ptr_free_all()</code>, <code class="language-plaintext highlighter-rouge">igraph_stack_ptr_destroy_all()</code>, <code class="language-plaintext highlighter-rouge">igraph_status_handler_stderr()</code>, <code class="language-plaintext highlighter-rouge">igraph_progress_handler_stderr()</code>.</li>
  <li>Built-in random number generators (<code class="language-plaintext highlighter-rouge">igraph_rngtype_mt19937</code>, <code class="language-plaintext highlighter-rouge">igraph_rngtype_rand</code>, <code class="language-plaintext highlighter-rouge">igraph_rngtype_glibc2</code>) were not exported from the shared library.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_layout_graphopt()</code> no longer rounds the <code class="language-plaintext highlighter-rouge">spring_length</code> parameter to an integer.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_get_all_shortest_paths_dijkstra()</code> no longer modifies the <code class="language-plaintext highlighter-rouge">res</code> vector’s item destructor.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_get_shortest_path_bellman_ford()</code> did not work correctly when calculating paths to all vertices.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_arpack_rnsolve()</code> checks its parameters more carefully.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_to_membership()</code> does not crash anymore when <code class="language-plaintext highlighter-rouge">csize</code> is requested but <code class="language-plaintext highlighter-rouge">membership</code> is not.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_citing_cited_type_game()</code>: fixed memory leaks (thanks to <a href="https://github.com/GroteGnoom">Daniel Noom</a>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_transitivity_undirected()</code>, <code class="language-plaintext highlighter-rouge">igraph_transitivity_avglocal_undirected()</code> and <code class="language-plaintext highlighter-rouge">igraph_transitivity_barrat()</code> no longer trigger an assertion failure when used with the null graph.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_(personalized_)pagerank()</code> would return incorrect results for weighted multigraphs with fewer than 128 vertices when using <code class="language-plaintext highlighter-rouge">IGRAPH_PAGERANK_ALGO_PRPACK</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_diversity()</code> now checks its input more carefully, and throws an error when the input graph has multi-edges or is directed.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_shortest_paths_johnson()</code> would return incorrect results when the <code class="language-plaintext highlighter-rouge">to</code> argument differed from <code class="language-plaintext highlighter-rouge">from</code> (thanks to Daniel Noom).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_is_graphical()</code> would fail to set the result variable for certain special degree sequences in the undirected simple graph case.</li>
  <li>Non-maximal clique finding functions would sometimes return incomplete results when finding more than 2147483647 (i.e. 2^31 - 1) cliques.</li>
  <li>GLPK internal errors no longer crash igraph.</li>
  <li>Fixed some potential memory leaks that could happen on error conditions or when certain functions were interrupted.</li>
  <li>When testing a DLL build on Windows, the <code class="language-plaintext highlighter-rouge">PATH</code> was sometimes not set correctly, causing the tests to fail.</li>
  <li>When compiling from the git repository (as opposed to the release tarball), the build would fail with recent versions of <code class="language-plaintext highlighter-rouge">bison</code> and <code class="language-plaintext highlighter-rouge">flex</code>.</li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>Documentation improvements.</li>
  <li>Much faster documentation builds.</li>
  <li>Allow using a pre-generated <code class="language-plaintext highlighter-rouge">arith.h</code> header for f2c when cross-compiling; see the Installation section of the documentation.</li>
  <li>The <code class="language-plaintext highlighter-rouge">IGRAPH_ENABLE_LTO</code> build option now supports the <code class="language-plaintext highlighter-rouge">AUTO</code> value, which uses LTO only if the compiler supports it. Warning: CMake may not always be able to detect that LTO is not fully supported. Therefore, the default setting is <code class="language-plaintext highlighter-rouge">OFF</code>.</li>
  <li>The following functions are now interruptible: <code class="language-plaintext highlighter-rouge">igraph_grg_game()</code>, <code class="language-plaintext highlighter-rouge">igraph_sbm_game()</code>, <code class="language-plaintext highlighter-rouge">igraph_barabasi_game()</code>, <code class="language-plaintext highlighter-rouge">igraph_barabasi_aging_game()</code>.</li>
  <li>Functions that use GLPK, such as <code class="language-plaintext highlighter-rouge">igraph_feedback_arc_set()</code> and <code class="language-plaintext highlighter-rouge">igraph_community_optimal_modularity()</code> are now interruptible.</li>
  <li>Add support for older versions of Clang that do not recognize the <code class="language-plaintext highlighter-rouge">-Wno-varargs</code> flag.</li>
</ul>

<h3 id="acknowledgments">Acknowledgments</h3>

<ul>
  <li>Big thanks to <a href="https://github.com/GroteGnoom/">Daniel Noom</a> for continuing to expand the test suite and discovering and fixing several bugs in the process!</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.9.1, the first bugfix release of the 0.9 series, has arrived.]]></summary></entry><entry><title type="html">C/igraph 0.9.0</title><link href="https://igraph.org/2021/02/16/igraph-0.9.0-c.html" rel="alternate" type="text/html" title="C/igraph 0.9.0" /><published>2021-02-16T00:00:00+00:00</published><updated>2021-02-16T00:00:00+00:00</updated><id>https://igraph.org/2021/02/16/igraph-0.9.0-c</id><content type="html" xml:base="https://igraph.org/2021/02/16/igraph-0.9.0-c.html"><![CDATA[<p>Release 0.9.0 of igraph’s C core has arrived, almost exactly one year after the
latest minor release, 0.8.0. This release brings several new features and
improvements, and also a complete switch from the old <code class="language-plaintext highlighter-rouge">autotools</code>-based build
system to a new one based on <a href="https://cmake.org">CMake</a>. This results in faster
build times and the opportunity to use alternative build tools instead of
<code class="language-plaintext highlighter-rouge">make</code>; in particular, igraph now support <a href="https://ninja-build.org"><code class="language-plaintext highlighter-rouge">ninja</code></a> and
can also make use of a locally installed <a href="https://ccache.dev"><code class="language-plaintext highlighter-rouge">ccache</code></a>
compiler cache for even faster builds.</p>

<p>We gratefully acknowledge support from <a href="https://chanzuckerberg.com">CZI</a> for
the development of igraph. In addition, we would like to thank everyone who
reported issues, contributed features or fixes, or edited the documentation.
igraph is an open-source project run by volunteers. <em>As always, your
contributions are very welcome!</em></p>

<p>Most people use igraph through its high-level interfaces for <a href="https://igraph.org/r/">R</a>,
<a href="https://igraph.org/python/">Python</a> or <a href="http://szhorvat.net/mathematica/IGraphM">Mathematica</a>.
A new release of the Python interface, based on 0.9.0, is expected to be
released in a few days. The R and Mathematica interfaces already include some
of the improvements, and will continue to integrate more.</p>

<p>The sources and the changelog can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.9.0">the GitHub releases page</a>.</p>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[Release 0.9.0 of igraph’s C core has arrived, almost exactly one year after the latest minor release, 0.8.0. This release brings several new features and improvements, and also a complete switch from the old autotools-based build system to a new one based on CMake. This results in faster build times and the opportunity to use alternative build tools instead of make; in particular, igraph now support ninja and can also make use of a locally installed ccache compiler cache for even faster builds.]]></summary></entry><entry><title type="html">C/igraph 0.8.5</title><link href="https://igraph.org/2020/12/07/igraph-0.8.5-c.html" rel="alternate" type="text/html" title="C/igraph 0.8.5" /><published>2020-12-07T00:00:00+00:00</published><updated>2020-12-07T00:00:00+00:00</updated><id>https://igraph.org/2020/12/07/igraph-0.8.5-c</id><content type="html" xml:base="https://igraph.org/2020/12/07/igraph-0.8.5-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.8.5, the fifth bugfix release of the 0.8 series, has arrived.</p>

<p>The sources can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.8.5">the GitHub releases page</a>.</p>

<p>This release includes bug fixes only. The changelog is below.</p>

<h3 id="changed">Changed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_write_graph_pajek()</code>: the function now always uses the platform-native line endings (CRLF on Windows, LF on Unix and macOS). Earlier versions tried to enforce Windows line endings, but this was error-prone, and since all recent versions of Pajek support both line endings, enforcing Windows line endings is not necessary any more.</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li>Fixed several compilation issues with MINGW32/64, thanks to <a href="https://github.com/jannick0/">@jannick0</a></li>
  <li><code class="language-plaintext highlighter-rouge">igraph_layout_davidson_harel()</code> was not interruptible; now it is.</li>
  <li>Added a missing memory cleanup call in <code class="language-plaintext highlighter-rouge">igraph_i_cattribute_combine_vertices()</code>.</li>
  <li>Fixed a few memory leaks in test cases.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.8.5, the fifth bugfix release of the 0.8 series, has arrived.]]></summary></entry><entry><title type="html">C/igraph 0.8.4</title><link href="https://igraph.org/2020/11/24/igraph-0.8.4-c.html" rel="alternate" type="text/html" title="C/igraph 0.8.4" /><published>2020-11-24T00:00:00+00:00</published><updated>2020-11-24T00:00:00+00:00</updated><id>https://igraph.org/2020/11/24/igraph-0.8.4-c</id><content type="html" xml:base="https://igraph.org/2020/11/24/igraph-0.8.4-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.8.4, the fourth bugfix release of the 0.8 series, has arrived.</p>

<p>The sources can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.8.4">the GitHub releases page</a>.</p>

<p>This release includes bug fixes and documentation improvements. The changelog is below.</p>

<h3 id="fixed">Fixed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_i_cattribute_combine_vertices()</code>: fixed invalid cleanup code that eventually filled up the “finally” stack when combining vertices with attributes extensively.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_hrg_sample()</code>: fixed incorrect function prototype</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_is_posinf()</code> and <code class="language-plaintext highlighter-rouge">igraph_is_neginf()</code>: fixed incorrect result on platforms where the sign of the result of <code class="language-plaintext highlighter-rouge">isinf()</code> is not indicative of the sign of the input.</li>
  <li>Fixed building with vendored LAPACK and external BLAS</li>
  <li>Fixed building with XCode 12.2 on macOS</li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>Documentation improvements</li>
  <li>General code cleanup to reduce the number of compiler warnings</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.8.4, the fourth bugfix release of the 0.8 series, has arrived.]]></summary></entry><entry><title type="html">python-igraph 0.8.3</title><link href="https://igraph.org/2020/10/08/igraph-0.8.3-python.html" rel="alternate" type="text/html" title="python-igraph 0.8.3" /><published>2020-10-08T00:00:00+00:00</published><updated>2020-10-08T00:00:00+00:00</updated><id>https://igraph.org/2020/10/08/igraph-0.8.3-python</id><content type="html" xml:base="https://igraph.org/2020/10/08/igraph-0.8.3-python.html"><![CDATA[<p><a href="https://igraph.org/python/">python-igraph</a> 0.8.3, the third bugfix release of
the 0.8 series, has arrived.</p>

<p>The preferred way of installing the Python interface is via <code class="language-plaintext highlighter-rouge">pip</code>; typing
<code class="language-plaintext highlighter-rouge">pip install python-igraph</code> should install a pre-compiled Python wheel on most
supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the
source code are also available from the <a href="https://pypi.org/project/python-igraph/0.8.3/">Python Package Index
page</a>.</p>

<p>This release brings <code class="language-plaintext highlighter-rouge">python-igraph</code> up-to-date with igraph 0.8.3, and it also
contains bug fixes and performance improvements. This release will also be the
last one whose version number is deliberately in sync with the version number
of the C core. The changelog is below.</p>

<h3 id="added">Added</h3>

<ul>
  <li>
    <p><code class="language-plaintext highlighter-rouge">Graph.community_leiden()</code> now supports a negative number of iterations; it will keep on iterating until the algorithm reaches a stable partition.</p>
  </li>
  <li>
    <p><code class="language-plaintext highlighter-rouge">Graph.Incidence()</code> now supports weighted graphs, thanks to <a href="https://github.com/PuneethaPai/">@PuneethaPai</a></p>
  </li>
  <li>
    <p>You can now create a <code class="language-plaintext highlighter-rouge">Graph</code> object from a <code class="language-plaintext highlighter-rouge">pandas</code> dataframe with <code class="language-plaintext highlighter-rouge">Graph.DataFrame</code>, thanks to <a href="https://github.com/iosonofabio/">@iosonofabio</a></p>
  </li>
  <li>
    <p>Added conversion to/from <code class="language-plaintext highlighter-rouge">networkx</code> and <code class="language-plaintext highlighter-rouge">graph-tool</code> with <code class="language-plaintext highlighter-rouge">Graph.{to,from}_{networkx,graph_tool}</code>, thanks to <a href="https://github.com/iosonofabio/">@iosonofabio</a></p>
  </li>
  <li>
    <p><code class="language-plaintext highlighter-rouge">Graph.add_edges()</code> and <code class="language-plaintext highlighter-rouge">Graph.add_vertices()</code> now supports specifying attributes for the newly added vertices and edges, thanks to <a href="https://github.com/iosonofabio/">@iosonofabio</a></p>
  </li>
  <li>
    <p>Added <code class="language-plaintext highlighter-rouge">Graph.dfs()</code> and <code class="language-plaintext highlighter-rouge">Graph.dfsiter()</code>, thanks to <a href="https://github.com/iosonofabio/">@iosonofabio</a></p>
  </li>
  <li>
    <p>Added <code class="language-plaintext highlighter-rouge">Graph.bridges()</code> to get the bridges of a graph.</p>
  </li>
  <li>
    <p>Added <code class="language-plaintext highlighter-rouge">Graph.clear()</code> to remove all edges, vertices and graph attributes in a single call, thanks to <a href="https://github.com/iosonofabio/">@iosonofabio</a></p>
  </li>
</ul>

<h3 id="changed">Changed</h3>

<ul>
  <li>
    <p>Upgraded igraph C library to 0.8.3.</p>
  </li>
  <li>
    <p>Graph union and intersection now supports graphs with vertex names, thanks to <a href="https://github.com/iosonofabio/">@iosonofabio</a></p>
  </li>
  <li>
    <p><code class="language-plaintext highlighter-rouge">Graph.delete_vertices(None)</code> and <code class="language-plaintext highlighter-rouge">Graph.delete_edges(None)</code> are now deprecated; use <code class="language-plaintext highlighter-rouge">Graph.delete_vertices()</code> and <code class="language-plaintext highlighter-rouge">Graph.delete_edges()</code> (without a positional argument) instead to delete all vertices or edges. The old syntax will be removed in 0.9.</p>
  </li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li>
    <p><code class="language-plaintext highlighter-rouge">setup.py</code> now works on Windows with MinGW, thanks to <a href="https://github.com/Parakoopa/">@Parakoopa</a></p>
  </li>
  <li>
    <p><code class="language-plaintext highlighter-rouge">Graph.difference()</code> now treats loop edges correctly</p>
  </li>
  <li>
    <p><code class="language-plaintext highlighter-rouge">summary()</code> does not fail with non-string vertex names any more, thanks to <a href="https://github.com/deeenes/">@deeenes</a></p>
  </li>
  <li>
    <p>The Reingold-Tilford layout should not produce edge crossings on tree graphs any more.</p>
  </li>
  <li>
    <p>The postprocessing step of <code class="language-plaintext highlighter-rouge">Graph.biconnected_components()</code> is much faster now (#281); the earlier version was responsible for a significant speed difference between the C core and the Python interface.</p>
  </li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>
    <p>Various documentation improvements, thanks to <a href="https://github.com/chrisfalter/">@chrisfalter</a>, <a href="https://github.com/iosonofabio/">@iosonofabio</a>, <a href="https://github.com/kmankinen/">@kmankinen</a>, <a href="https://github.com/remysucre/">@remysucre</a>, <a href="https://github.com/szhorvat/">@szhorvat</a></p>
  </li>
  <li>
    <p><code class="language-plaintext highlighter-rouge">Graph.complementer()</code> now allows keyword arguments (it used to support positional arguments only).</p>
  </li>
  <li>
    <p>Dropped support for Python 3.5, added support for Python 3.9.</p>
  </li>
</ul>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.8.3, the third bugfix release of the 0.8 series, has arrived.]]></summary></entry><entry><title type="html">C/igraph 0.8.3</title><link href="https://igraph.org/2020/10/02/igraph-0.8.3-c.html" rel="alternate" type="text/html" title="C/igraph 0.8.3" /><published>2020-10-02T00:00:00+00:00</published><updated>2020-10-02T00:00:00+00:00</updated><id>https://igraph.org/2020/10/02/igraph-0.8.3-c</id><content type="html" xml:base="https://igraph.org/2020/10/02/igraph-0.8.3-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.8.3, the third bugfix release of the 0.8 series, has arrived.</p>

<p>The sources can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.8.3">the GitHub releases page</a>.</p>

<p>This release includes bug fixes and performance improvements. The changelog is below.</p>

<h3 id="added">Added</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_binsearch_slice()</code> performs binary search on a sorted slice of a vector.</li>
</ul>

<h3 id="changed">Changed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_eigenvector_centrality()</code> assumes the adjacency matrix of undirected graphs to have twice the number of self-loops for each vertex on the diagonal. This makes the results consistent between an undirected graph and its directed equivalent when each edge is replaced by a mutual edge pair.</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_isomorphic()</code> now verifies that the input graphs have no multi-edges.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_difference()</code> was creating superfluous self loops.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_count_multiple()</code> was giving incorrect results for self-loops in directed graph.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_betweenness_estimate()</code>: fixed incorrect results with finite cutoff.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_eigen_matrix_symmetric()</code>: fixed incorrect matrix multiplication.</li>
  <li>Corrected several issues that could arise during an error condition.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_realize_degree_sequence()</code> did not correctly detect some non-graphical inputs.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_is_graphical_degree_sequence()</code>: fixed incorrect results in undirected case.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_leiden()</code>: fixed incorrect result when self-loops are present.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_eigenvector_centrality()</code>: fixed incorrect value for isolated vertices in weighted graphs.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_eigenvector_centrality()</code>: corrected the handling of self-loops.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_layout_reingold_tilford()</code>: fixed an issue where branches of the tree would sometimes overlap.</li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_degree_sequence_game()</code>: improved performance with <code class="language-plaintext highlighter-rouge">IGRAPH_DEGSEQ_SIMPLE_NO_MULTIPLE_UNIFORM</code> method.</li>
  <li>Improved the robustness of the test suite.</li>
  <li>Documentation improvements.</li>
  <li>Improved error and warning messages.</li>
  <li>Improved compatibility with recent versions of Microsoft Visual C.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.8.3, the third bugfix release of the 0.8 series, has arrived.]]></summary></entry><entry><title type="html">Funding from CZI</title><link href="https://igraph.org/2020/05/27/funding.html" rel="alternate" type="text/html" title="Funding from CZI" /><published>2020-05-27T00:00:00+00:00</published><updated>2020-05-27T00:00:00+00:00</updated><id>https://igraph.org/2020/05/27/funding</id><content type="html" xml:base="https://igraph.org/2020/05/27/funding.html"><![CDATA[<p>We are excited to announce that the igraph project will be <a href="https://chanzuckerberg.com/eoss/proposals/">supported</a> with a grant of $180,000 from the Chan Zuckerberg Initiative in the <a href="https://chanzuckerberg.com/rfa/essential-open-source-software-for-science/">Essential Open Source Software for Science</a> program. It was recognized that igraph fulfills a critical role for providing network analysis in a variety of scientific domains, including biomedical research. The funding will expedite ongoing development efforts, and should result in a 1.0 release of igraph’s C core with a stable, well-documented and supported API.</p>

<p>For years, the development of igraph was done on a voluntary basis. With funding available, we can make sure developers have more time available to dedicate to igraph. In particular, the funding will support <a href="https://github.com/gaborcsardi">Gábor Csárdi</a>, <a href="https://github.com/ntamas">Tamás Nepusz</a>, <a href="http://szhorvat.net/">Szabolcs Horvát</a>, <a href="https://www.traag.net/">Vincent Traag</a> and <a href="http://fabilab.org/">Fabio Zanini</a>.</p>

<p>The core of igraph is written in C, but most people use igraph through its high-level interfaces for R, Python or Mathematica. Much of the development effort will be concentrated on the core of igraph, but the high-level interfaces will not be overlooked.</p>

<p>Even though we will dedicate more time to igraph, the project cannot survive without a vibrant community of users and contributors. Whether you reported issues, contributed code or improved the documentation, your contributions remain vital to the project. We hope that our new <a href="https://igraph.discourse.group/">community forum</a> will enable us to form a tighter and more supportive community, where you can ask questions, support others, or discuss recent advances in network analysis or graph theory.</p>

<p>The project will start from the 1st of September onwards, and will last for a year. The 1.0 version is planned to be released towards the end of the project.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[We are excited to announce that the igraph project will be supported with a grant of $180,000 from the Chan Zuckerberg Initiative in the Essential Open Source Software for Science program. It was recognized that igraph fulfills a critical role for providing network analysis in a variety of scientific domains, including biomedical research. The funding will expedite ongoing development efforts, and should result in a 1.0 release of igraph’s C core with a stable, well-documented and supported API.]]></summary></entry><entry><title type="html">C/igraph 0.8.2</title><link href="https://igraph.org/2020/04/29/igraph-0.8.2-c.html" rel="alternate" type="text/html" title="C/igraph 0.8.2" /><published>2020-04-29T00:00:00+00:00</published><updated>2020-04-29T00:00:00+00:00</updated><id>https://igraph.org/2020/04/29/igraph-0.8.2-c</id><content type="html" xml:base="https://igraph.org/2020/04/29/igraph-0.8.2-c.html"><![CDATA[<p><a href="https://igraph.org/c/">C/igraph</a> 0.8.2, the second bugfix release of the 0.8 series, has arrived.</p>

<p>The sources can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.8.2">the GitHub releases page</a>.</p>

<p>This release includes no new features, only bug fixes and reliability improvements. The changelog is below.</p>

<h3 id="changed">Changed</h3>

<ul>
  <li>Improved argument checking: <code class="language-plaintext highlighter-rouge">igraph_all_st_mincuts()</code> and <code class="language-plaintext highlighter-rouge">igraph_sir()</code></li>
  <li>Improved interruptibility: <code class="language-plaintext highlighter-rouge">igraph_sir()</code></li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_leiden()</code>: fixed crash when interrupting</li>
  <li>The tests are now more robust. Some incorrect test failures were fixed when
running on i386 architecture, or when using different versions of external
dependencies.</li>
</ul>

<h3 id="others">Others</h3>

<ul>
  <li>Improved error messages from <code class="language-plaintext highlighter-rouge">igraph_sir()</code>.</li>
  <li>Improved compatibility with more recent versions of Microsoft Visual C.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.8.2, the second bugfix release of the 0.8 series, has arrived.]]></summary></entry><entry><title type="html">C/igraph 0.8.1</title><link href="https://igraph.org/2020/03/16/igraph-0.8.1-c.html" rel="alternate" type="text/html" title="C/igraph 0.8.1" /><published>2020-03-16T00:00:00+00:00</published><updated>2020-03-16T00:00:00+00:00</updated><id>https://igraph.org/2020/03/16/igraph-0.8.1-c</id><content type="html" xml:base="https://igraph.org/2020/03/16/igraph-0.8.1-c.html"><![CDATA[<p>We are happy to announce the first bugfix release of the 0.8 series of <a href="https://igraph.org/c/">igraph’s C core</a>!</p>

<p>The sources can be obtained from <a href="https://github.com/igraph/igraph/releases/tag/0.8.1">the GitHub releases page</a>.</p>

<p>This release includes no new features, only bug fixes and reliability improvements. The changelog is below.</p>

<h3 id="changed">Changed</h3>

<ul>
  <li>Improved interruptability: <code class="language-plaintext highlighter-rouge">igraph_degree_sequence_game()</code></li>
  <li>Improved argument checking: <code class="language-plaintext highlighter-rouge">igraph_forest_fire_game()</code></li>
  <li>Updated the plfit library to version 0.8.1</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_edge_betweenness()</code>: fix for graphs with no edges (PR #1312)</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_bridges()</code> now handles multigraphs correctly (PR #1335)</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_avg_nearest_neighbor_degree()</code>: fix for memory leak in weighted case (PR #1339)</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_leiden()</code>: fix crash bug (PR #1357)</li>
</ul>

<h3 id="other">Other</h3>

<ul>
  <li>Included <code class="language-plaintext highlighter-rouge">ACKOWLEDGEMENTS.md</code></li>
  <li>Documentation improvements</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[We are happy to announce the first bugfix release of the 0.8 series of igraph’s C core!]]></summary></entry><entry><title type="html">python-igraph 0.8.0</title><link href="https://igraph.org/2020/02/14/igraph-0.8.0-python.html" rel="alternate" type="text/html" title="python-igraph 0.8.0" /><published>2020-02-14T00:00:00+00:00</published><updated>2020-02-14T00:00:00+00:00</updated><id>https://igraph.org/2020/02/14/igraph-0.8.0-python</id><content type="html" xml:base="https://igraph.org/2020/02/14/igraph-0.8.0-python.html"><![CDATA[<p>Release 0.8.0 of igraph’s Python interface follows the recent release of
version 0.8.0 of the C core with many bug fixes that have accumulated over the
last five years, and an improved build process that does not require the C core
of igraph to be downloaded at the time when <code class="language-plaintext highlighter-rouge">python-igraph</code> is installed; the
tarball of <code class="language-plaintext highlighter-rouge">python-igraph</code> already bundles the appropriate version of the
C core in it.</p>

<p>Including the C core directly in the source tarball also allows us to decouple
python-igraph’s version number from the version number of the C core in the
future. This means that we no longer have to wait for a release of the C core
in order to fix some bugs in the Python interface.</p>

<h2 id="precompiled-python-wheels">Precompiled Python wheels</h2>

<p>Starting from this release, we will also aim to provide pre-compiled Python
wheels for most platforms. The current release includes Python wheels for
Python 2.7, 3.5, 3.6, 3.7 and 3.8 on Windows, macOS and Linux, so most users will
not have to compile anything when installing <code class="language-plaintext highlighter-rouge">python-igraph</code> from pip.
Currently the only limitation is that the Windows wheels do not support GraphML
import; this will be fixed in the next patch release (0.8.1).</p>

<h2 id="end-of-support-for-python-27">End of support for Python 2.7</h2>

<p><code class="language-plaintext highlighter-rouge">python-igraph</code> 0.8.x will also be the <em>last</em> version that supports Python 2.7.
Since Python 2 has <a href="https://www.python.org/doc/sunset-python-2/">reached its end of life</a>,
we will drop support for Python 2 before <code class="language-plaintext highlighter-rouge">python-igraph</code> 0.9 so we can simplify
some parts of the codebase where we needed to introduce additional code to
support both Python versions.</p>

<p>As for Python 3, we are committing ourselves to supporting <em>at least</em> the last
three minor releases of Python 3.</p>

<p>Although we are not supporting PyPy officially, <code class="language-plaintext highlighter-rouge">python-igraph</code> will also be
tested with PyPy regularly in a CI environment, and we will strive to fix any
issues that arise with PyPy. If you use <code class="language-plaintext highlighter-rouge">python-igraph</code> with PyPy and you are
willing to become an official maintainer responsible for PyPy compatibility,
please let us know in the <a href="https://igraph.discourse.group/">community forum</a>.</p>

<h2 id="new-community-forum">New community forum</h2>

<p>Concurrently with the release of igraph 0.8, we have launched <a href="https://igraph.discourse.group/">a new community
forum</a>, which replaces the mailing list as
the main support channel. The community forum is also meant for users of
<code class="language-plaintext highlighter-rouge">python-igraph</code>, so If you are a current <code class="language-plaintext highlighter-rouge">python-igraph</code> user or just
interested in the project, please join!</p>

<p>We would like to thank everyone who reported issues, contributed features or
fixes, or edited the documentation. igraph is an open-source project run by
volunteers. <em>As always, your contributions are very welcome!</em></p>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[Release 0.8.0 of igraph’s Python interface follows the recent release of version 0.8.0 of the C core with many bug fixes that have accumulated over the last five years, and an improved build process that does not require the C core of igraph to be downloaded at the time when python-igraph is installed; the tarball of python-igraph already bundles the appropriate version of the C core in it.]]></summary></entry><entry><title type="html">C/igraph 0.8.0</title><link href="https://igraph.org/2020/01/29/igraph-0.8.0-c.html" rel="alternate" type="text/html" title="C/igraph 0.8.0" /><published>2020-01-29T00:00:00+00:00</published><updated>2020-01-29T00:00:00+00:00</updated><id>https://igraph.org/2020/01/29/igraph-0.8.0-c</id><content type="html" xml:base="https://igraph.org/2020/01/29/igraph-0.8.0-c.html"><![CDATA[<p>Release 0.8.0 of igraph’s C core, coming almost five years after 0.7.1, is a major improvement with several new features, performance and robustness improvements, and many bug fixes. New functionality includes additional graph generators, functions for handling trees, new community detection methods, improved clique finding, spectral graph embedding, as well as several other features. Please see the <a href="https://github.com/igraph/igraph/blob/0.8.0/CHANGELOG.md">changelog</a> for more details.</p>

<p>We would like to thank everyone who reported issues, contributed features or fixes, or edited the documentation. igraph is an open-source project run by volunteers. <em>As always, your contributions are very welcome!</em></p>

<p>Most people use igraph through its high-level interfaces for <a href="https://igraph.org/r/">R</a>, <a href="https://igraph.org/python/">Python</a> or <a href="http://szhorvat.net/mathematica/IGraphM">Mathematica</a>. A new release of the Python interface, incorporating all these improvements, is expected to be released in a few weeks. The R and Mathematica interfaces already include some of the improvements, and will continue to integrate more.</p>

<p>Concurrently with the release of igraph 0.8, we are launching <a href="https://igraph.discourse.group/">a new community forum</a>, which will replace the mailing list as the main support channel. If you are a current igraph user or just interested in the project, please join!</p>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[Release 0.8.0 of igraph’s C core, coming almost five years after 0.7.1, is a major improvement with several new features, performance and robustness improvements, and many bug fixes. New functionality includes additional graph generators, functions for handling trees, new community detection methods, improved clique finding, spectral graph embedding, as well as several other features. Please see the changelog for more details.]]></summary></entry><entry><title type="html">IGraph/M 0.3.103</title><link href="https://igraph.org/2018/11/20/igraph-for-mathematica.html" rel="alternate" type="text/html" title="IGraph/M 0.3.103" /><published>2018-11-20T00:00:00+00:00</published><updated>2018-11-20T00:00:00+00:00</updated><id>https://igraph.org/2018/11/20/igraph-for-mathematica</id><content type="html" xml:base="https://igraph.org/2018/11/20/igraph-for-mathematica.html"><![CDATA[<p><a href="http://szhorvat.net/mathematica/IGraphM">IGraph/M</a>, a Mathematica interface for
igraph is now officially one of the supported higher-level interfaces for igraph.
We would like to thank <a href="http://szhorvat.net/">Szabolcs Horvát</a> for all
his efforts dedicated to supporting igraph from Mathematica!</p>

<p>New releases of <a href="http://szhorvat.net/mathematica/IGraphM">IGraph/M</a> will be
published on the <a href="https://github.com/szhorvat/IGraphM/releases">GitHub page</a> of
the project.</p>]]></content><author><name></name></author><category term="mathematica" /><summary type="html"><![CDATA[IGraph/M, a Mathematica interface for igraph is now officially one of the supported higher-level interfaces for igraph. We would like to thank Szabolcs Horvát for all his efforts dedicated to supporting igraph from Mathematica!]]></summary></entry><entry><title type="html">R/igraph 1.0.0</title><link href="https://igraph.org/2015/06/24/igraph-1.0.0-r.html" rel="alternate" type="text/html" title="R/igraph 1.0.0" /><published>2015-06-24T00:00:00+00:00</published><updated>2015-06-24T00:00:00+00:00</updated><id>https://igraph.org/2015/06/24/igraph-1.0.0-r</id><content type="html" xml:base="https://igraph.org/2015/06/24/igraph-1.0.0-r.html"><![CDATA[<h2 id="release-notes">Release Notes</h2>

<p>This is a new major release, with a lot of UI changes. We tried to
make it easier to use, with short and easy to remember, consistent
function names. Unfortunately this also means that many functions
have new names now, but don’t worry, all the old names still work.</p>

<p>Apart from the new names, the biggest change in this release is
that most functions that used to return numeric vertex or edge ids,
return vertex/edge sequences now. This requires some time to get used
to and if you want the numeric ids instead, just use the <code class="language-plaintext highlighter-rouge">as.vector()</code>
function on the vertex/edge sequences.</p>

<p>We will update the documentation on this site, once the package
is on CRAN and available for all architectures.</p>

<!--more-->

<p>Other major changes:</p>

<ul>
  <li>A generic <code class="language-plaintext highlighter-rouge">make_graph()</code> function to create graphs.</li>
  <li>A generic <code class="language-plaintext highlighter-rouge">layout_()</code> (not the underscore!) function
to create graph layouts, see also <code class="language-plaintext highlighter-rouge">add_layout_()</code>.</li>
  <li>The igraph data type has changed. You need to call
<code class="language-plaintext highlighter-rouge">upgrade_graph()</code> on graphs created with previous igraph
versions.</li>
  <li>Vertex and edge sequence operations: union, intersection, etc.</li>
  <li>Vertex and edge sequences can only be used with the graphs they
belong to. This is now strictly checked.</li>
  <li>Vertex and edge sequences have a <code class="language-plaintext highlighter-rouge">[[</code> operator now,
for easy viewing of vertex/edge metadata.</li>
  <li>Vertex and edge sequences are implemented as weak references.
See also the <code class="language-plaintext highlighter-rouge">as_ids()</code> function to convert them to simple ids.</li>
  <li>Vertex order can be specified for the circle layout now.</li>
  <li>Davidson-Harel layout algorithm <code class="language-plaintext highlighter-rouge">layout_with_dh()</code>.</li>
  <li>GEM layout algorithm <code class="language-plaintext highlighter-rouge">layout_with_gem()</code>.</li>
  <li>Neighborhood functions have a <code class="language-plaintext highlighter-rouge">mindist</code> parameter for the
smallest distance to consider.</li>
  <li><code class="language-plaintext highlighter-rouge">all_simple_paths()</code> function to list all simple paths in a graph.</li>
  <li><code class="language-plaintext highlighter-rouge">triangles()</code> lists all triangles in a graph.</li>
  <li>Fruchterman-Reingold and Kamada-Kawai layout algorithms
rewritten from scratch. They are much faster and follow the
original publications closely.</li>
  <li>Nicer printing of graphs, vertex and edge sequences.</li>
  <li><code class="language-plaintext highlighter-rouge">local_scan()</code> function calculates scan statistics.</li>
  <li>Embeddings: <code class="language-plaintext highlighter-rouge">embed_adjacency_matrix()</code> and <code class="language-plaintext highlighter-rouge">embed_laplacian_matrix()</code>.</li>
  <li>Product operator: <code class="language-plaintext highlighter-rouge">*</code>, the same graph multiple times. Can be also
used as <code class="language-plaintext highlighter-rouge">rep()</code>.</li>
  <li>Better default colors, color palettes for vertices.</li>
  <li>Random walk on a graph: <code class="language-plaintext highlighter-rouge">random_walk()</code></li>
  <li><code class="language-plaintext highlighter-rouge">adjacenct_vertices()</code> and <code class="language-plaintext highlighter-rouge">incident_edges()</code> functions,
they are vectorized, as opposed to <code class="language-plaintext highlighter-rouge">neighhors()</code> and <code class="language-plaintext highlighter-rouge">incident()</code>.</li>
  <li>Convert a graph to a <em>long</em> data frame with <code class="language-plaintext highlighter-rouge">as_long_data_frame()</code>.</li>
</ul>]]></content><author><name></name></author><category term="r" /><summary type="html"><![CDATA[Release Notes]]></summary></entry><entry><title type="html">Repositories at GitHub</title><link href="https://igraph.org/2015/01/16/separate-repos.html" rel="alternate" type="text/html" title="Repositories at GitHub" /><published>2015-01-16T00:00:00+00:00</published><updated>2015-01-16T00:00:00+00:00</updated><id>https://igraph.org/2015/01/16/separate-repos</id><content type="html" xml:base="https://igraph.org/2015/01/16/separate-repos.html"><![CDATA[<p>A couple of days ago we changed how we use GitHub for igraph
development. Our goal is to make igraph development more accessible, and
our build process simpler. Instead of using a common repository for
everything, we now use separate repos for the igraph C library, the R
package and the Python extension. The igraph.org website was already in a
separate repository, and we will also break up the R package, by putting
loosely coupled parts in their own packages and repositories.</p>

<p>Main igraph repositories now:</p>

<ul>
  <li>igraph C library: https://github.com/igraph/igraph</li>
  <li>igraph R package: https://github.com/igraph/rigraph</li>
  <li>python-igraph: https://github.com/igraph/python-igraph</li>
  <li>igraphdata R package: https://github.com/igraph/igraphdata</li>
  <li>igraph.org homepage: https://github.com/igraph/igraph.org</li>
</ul>]]></content><author><name></name></author><summary type="html"><![CDATA[A couple of days ago we changed how we use GitHub for igraph development. Our goal is to make igraph development more accessible, and our build process simpler. Instead of using a common repository for everything, we now use separate repos for the igraph C library, the R package and the Python extension. The igraph.org website was already in a separate repository, and we will also break up the R package, by putting loosely coupled parts in their own packages and repositories.]]></summary></entry><entry><title type="html">C/igraph 0.7.1</title><link href="https://igraph.org/2014/04/21/igraph-0.7.1-c.html" rel="alternate" type="text/html" title="C/igraph 0.7.1" /><published>2014-04-21T00:00:00+00:00</published><updated>2014-04-21T00:00:00+00:00</updated><id>https://igraph.org/2014/04/21/igraph-0.7.1-c</id><content type="html" xml:base="https://igraph.org/2014/04/21/igraph-0.7.1-c.html"><![CDATA[<h2 id="release-notes">Release Notes</h2>

<p>Some bug fixes, to make sure that the code included in
‘Statistical Analysis of Network Data with R’ works. See
http://github.com/kolaczyk/sand</p>

<p>Detailed changes:</p>

<ul>
  <li>Better error handling in the GraphML parser.</li>
  <li>GraphML reader is a bit more lenient now; makes it possible to read
GraphML files saved from yWorks apps.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">igraph_constaint()</code>, issue #580.</li>
  <li>Bipartite projection now detects invalid edges instead of giving
a cryptic error, issue #543.</li>
  <li>Bipartite projection now detects invalid edges instead of giving
a cryptic error, issue #543.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[Release Notes]]></summary></entry><entry><title type="html">R/igraph 0.7.1</title><link href="https://igraph.org/2014/04/21/igraph-0.7.1-r.html" rel="alternate" type="text/html" title="R/igraph 0.7.1" /><published>2014-04-21T00:00:00+00:00</published><updated>2014-04-21T00:00:00+00:00</updated><id>https://igraph.org/2014/04/21/igraph-0.7.1-r</id><content type="html" xml:base="https://igraph.org/2014/04/21/igraph-0.7.1-r.html"><![CDATA[<h2 id="release-notes">Release Notes</h2>

<p>Some bug fixes, to make sure that the code included in
‘Statistical Analysis of Network Data with R’ works. See
https://github.com/kolaczyk/sand</p>

<p>Detailed changes:</p>

<ul>
  <li>Graph drawing: fix labels of curved edges, issue #181.</li>
  <li>Graph drawing: allow fixing edge labels at given positions,
issue #181.</li>
  <li>Drop the ‘type’ vertex attribute after bipartite projection,
the projections are not bipartite any more, issue #255.</li>
  <li>Print logical attributes in header properly (i.e. encoded by <code class="language-plaintext highlighter-rouge">l</code>,
not <code class="language-plaintext highlighter-rouge">x</code>,  which is for complex attributes. Issue #578.</li>
  <li>Add a constructor for <code class="language-plaintext highlighter-rouge">communities</code> objects, see <code class="language-plaintext highlighter-rouge">create.communities()</code>.
Issue #547.</li>
  <li>Better error handling in the GraphML parser.</li>
  <li>GraphML reader is a bit more lenient now; makes it possible to read
GraphML files saved from yWorks apps.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">constaint()</code>, issue #580.</li>
  <li>Bipartite projection now detects invalid edges instead of giving
a cryptic error, issue #543.</li>
  <li>Fixed the <code class="language-plaintext highlighter-rouge">simplify</code> argument of <code class="language-plaintext highlighter-rouge">graph.formula()</code>, which was
broken, issue #586.</li>
  <li>The function <code class="language-plaintext highlighter-rouge">crossing()</code> adds better names to the result,
fixes issue #587.</li>
  <li>The <code class="language-plaintext highlighter-rouge">sir()</code> function gives an error if the input graph is
not simple, fixes issue #582.</li>
  <li>Calling igraph functions from igraph callbacks is not allowed now,
fixes issue #571.</li>
</ul>]]></content><author><name></name></author><category term="r" /><summary type="html"><![CDATA[Release Notes]]></summary></entry><entry><title type="html">C/igraph 0.7.0</title><link href="https://igraph.org/2014/02/04/igraph-0.7-c.html" rel="alternate" type="text/html" title="C/igraph 0.7.0" /><published>2014-02-04T00:00:00+00:00</published><updated>2014-02-04T00:00:00+00:00</updated><id>https://igraph.org/2014/02/04/igraph-0.7-c</id><content type="html" xml:base="https://igraph.org/2014/02/04/igraph-0.7-c.html"><![CDATA[<h2 id="release-notes">Release Notes</h2>

<p>There are a bunch of new features in the library itself, and 
other important changes in the life of the project. Thanks everyone
for sending code and reporting bugs!</p>

<h3 id="igraph--github">igraph @ github</h3>

<p>igraph’s development has moved from Launchpad to github. 
This has actually happened several month ago, but never 
announced officially. The place for reporting bugs is 
at https://github.com/igraph/igraph/issues.</p>

<h3 id="new-homepage">New homepage</h3>

<p>The igraph library’s homepage is now hosted at http://igraph.org/c,
and it is brand new. We wanted to make it easier to use and
better to look at.</p>

<!--more-->

<h3 id="better-nightly-downloads">Better nightly downloads</h3>

<p>You can download nightly builds from igraph at 
http://igraph.org/nightly.</p>

<h2 id="c-library-news-and-changes">C library news and changes</h2>

<ul>
  <li>Added <code class="language-plaintext highlighter-rouge">igraph_adjlist_print()</code>, <code class="language-plaintext highlighter-rouge">igraph_adjlist_fprint()</code>, 
<code class="language-plaintext highlighter-rouge">igraph_inclist_print()</code>, <code class="language-plaintext highlighter-rouge">igraph_inclist_fprinf()</code> functions.</li>
  <li>Make attribute prefixes optional when writing a GraphML file.</li>
  <li>Added function <code class="language-plaintext highlighter-rouge">igraph_modularity_matrix()</code>.</li>
  <li>Support edge weights in leading eigenvector community detection.</li>
  <li>Added the LAD library for checking (sub)graph isomorphism, version 1.</li>
  <li>Boolean attributes.</li>
  <li>Added <code class="language-plaintext highlighter-rouge">igraph_layout_bipartite()</code> function, a simple two-column layout
for bipartite graphs.</li>
  <li>Support incidence matrices in bipartite Pajek files.</li>
  <li>Pajek files in matrix format are now directed by default, unless they
are bipartite.</li>
  <li>Support weighted (and signed) networks in Pajek when file is in
matrix format.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">igraph_barabasi_game()</code>, algorithm psumtree-multiple 
just froze.</li>
  <li>Added support for Boolean attributes in the GraphML and GML readers
and writer.</li>
  <li>Change MDS layout coordinates, first dim is according to first
eigenvalue, etc.</li>
  <li>Update <code class="language-plaintext highlighter-rouge">igraph_union()</code> and <code class="language-plaintext highlighter-rouge">igraph_union_many()</code> to return mappings
for the edges.</li>
  <li>Rewritten <code class="language-plaintext highlighter-rouge">igraph_intersection()</code>, it can now report edge mappings.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_rewire()</code>: now supports the generation and destruction of
loops.</li>
  <li>Erdos-Renyi type bipartite random graphs.</li>
  <li>Added predecessors and inbound_edges arguments to
<code class="language-plaintext highlighter-rouge">igraph_get_shortest_paths[_dijkstra]()</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_rewire()</code> now shows the fraction of successful swaps in the
progress message.</li>
  <li>Added <code class="language-plaintext highlighter-rouge">igraph_graphlets()</code> and related functions.</li>
  <li>Fix modularity values of multilevel community if there are no merges
at all.</li>
  <li>Fixed a potential crash in <code class="language-plaintext highlighter-rouge">igraph_edge_connectivity()</code>, because of an
un-initialized variable.</li>
  <li>Fix a potential segfault in <code class="language-plaintext highlighter-rouge">igraph_atlas()</code>.</li>
  <li>Avoiding overflow in <code class="language-plaintext highlighter-rouge">igraph_closeness()</code> and related functions.</li>
  <li>Fixed an invalid memory read (and a potential crash) in the infomap
community detection.</li>
  <li>Fix a bug in triad census that set the first element of the result
to NaN.</li>
  <li>Fixed a bug in weighted mudularity calculation, sum of the weights
was truncated to an integer.</li>
  <li>Fixed a bug in weighted multilevel communtiies, the maximum weight
was rounded to an integer.</li>
  <li>Reimplement push-relabel maximum flow with gap heuristics.</li>
  <li>Maximum flow functions now return some statistics about the push
relabel algorithm steps.</li>
  <li>Fix issue #481, thread-local storage is now correctly detected by
configure on newer clang versions.</li>
  <li>Fixed missing whitespace in Pajek writer when the ID attribute was
numeric.</li>
  <li>Fixed a bug that caused <code class="language-plaintext highlighter-rouge">igraph_read_graph_gml()</code> to crash when the ID
attribute was non-numeric.</li>
  <li>Fix dyad census instability, sometimes incorrect results were
reported.</li>
  <li>Dyad census detects integer overflow now and gives a warning.</li>
  <li>Added printf functions for <code class="language-plaintext highlighter-rouge">igraph_vector_t()</code> and <code class="language-plaintext highlighter-rouge">igraph_matrix_t()</code>.</li>
  <li>Added a function to count the number of adjacent triangles:
<code class="language-plaintext highlighter-rouge">igraph_adjacenct_triangles()</code>.</li>
  <li>Added <code class="language-plaintext highlighter-rouge">igraph_eigen_adjacency()</code> function, eigenproblems on 
adjacency matrices.</li>
  <li>Added a Gomory-Hu tree implementation: <code class="language-plaintext highlighter-rouge">igraph_gomory_hu_tree()</code>.</li>
  <li>Added weights support for <code class="language-plaintext highlighter-rouge">igraph_community_optimal_modularity()</code>,
closes #511.</li>
  <li>Faster maximal clique finding (#513).</li>
  <li>Added a function to count maximal cliques:
<code class="language-plaintext highlighter-rouge">igraph_maximal_cliques_count()</code>.</li>
  <li>Data type <code class="language-plaintext highlighter-rouge">igraph_adjlist_t</code> uses integer vectors now.</li>
  <li>Generate graphs from a stochastic block model: <code class="language-plaintext highlighter-rouge">igraph_sbm_game()</code>.</li>
  <li>We use PRPACK to calculate PageRank scores
see https://github.com/dgleich/prpack</li>
  <li>Add <code class="language-plaintext highlighter-rouge">normalized</code> argument to closeness functions, fixes issue #3.</li>
  <li>Implement the <code class="language-plaintext highlighter-rouge">start</code> argument in <code class="language-plaintext highlighter-rouge">igraph_hrg_fit</code> (#225).</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">igraph_density</code> that resulted in incorrect values for
undirected graphs with loops.</li>
  <li>Fixed a bug that made Bellman-Ford shortest paths calculations fail.</li>
  <li>Fixed a minimum cut bug for weighted undirected graphs (#564).</li>
  <li>Fixed argument ordering in <code class="language-plaintext highlighter-rouge">igraph_st_mincut</code> and related functions.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[Release Notes]]></summary></entry><entry><title type="html">python-igraph 0.7.0</title><link href="https://igraph.org/2014/02/04/igraph-0.7-python.html" rel="alternate" type="text/html" title="python-igraph 0.7.0" /><published>2014-02-04T00:00:00+00:00</published><updated>2014-02-04T00:00:00+00:00</updated><id>https://igraph.org/2014/02/04/igraph-0.7-python</id><content type="html" xml:base="https://igraph.org/2014/02/04/igraph-0.7-python.html"><![CDATA[<h2 id="release-notes">Release Notes</h2>

<p>There are a bunch of new features in the library itself, and 
other important changes in the life of the project. Thanks everyone
for sending code and reporting bugs!</p>

<h3 id="igraph--github">igraph @ github</h3>

<p>igraph’s development has moved from Launchpad to github. 
This has actually happened several month ago, but never 
announced officially. The place for reporting bugs is 
at https://github.com/igraph/igraph/issues.</p>

<h3 id="new-homepage">New homepage</h3>

<p>igraph’s homepage is now hosted at http://igraph.org, and it is 
brand new. We wanted to make it easier to use and modern.</p>

<!--more-->

<h3 id="better-nightly-downloads">Better nightly downloads</h3>

<p>You can download nightly builds from igraph at 
http://igraph.org/nightly. Source and binary R packages (for windows
and OSX), C library bundles, and Python source packages are 
built currently. We are planning to add binary Python packages
soon.</p>

<h2 id="other-news-and-fixes">Other news and fixes</h2>

<ul>
  <li>Support edge weights in leading eigenvector community detection.</li>
  <li>Added the LAD library for checking (sub)graph isomorphism, version 1.</li>
  <li>Support incidence matrices in bipartite Pajek files.</li>
  <li>Added <code class="language-plaintext highlighter-rouge">Graph.layout_bipartite()</code> function, a simple two-column layout
for bipartite graphs.</li>
  <li>Pajek files in matrix format are now directed by default, unless they
are bipartite.</li>
  <li>Support weighted (and signed) networks in Pajek when file is in
matrix format.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">Barabasi()</code>, algorithm psumtree-multiple 
just froze.</li>
  <li>Added support for Boolean attributes in the GraphML and GML readers
and writer.</li>
  <li>Added support for Boolean attributes</li>
  <li>Change MDS layout coordinates, first dim is according to first
eigenvalue, etc.</li>
  <li>Add <code class="language-plaintext highlighter-rouge">Graph.st_mincut()</code> method, to find a minimal s-t cut in a graph.</li>
  <li>Added support for the source= and target= parameters in <code class="language-plaintext highlighter-rouge">Graph.mincut()</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">Graph.rewire()</code>: now supports the generation and destruction of loops.</li>
  <li>Erdos-Renyi type bipartite random graphs: <code class="language-plaintext highlighter-rouge">Graph.Random_Bipartite()</code>.</li>
  <li>Python: moved igraph.nexus to igraph.remote.nexus</li>
  <li>Fix modularity values of multilevel community if there are no merges
at all.</li>
  <li>Added keep_aspect_ratio option to <code class="language-plaintext highlighter-rouge">Graph.__plot__()</code>.</li>
  <li>Fixed a potential crash in <code class="language-plaintext highlighter-rouge">igraph_edge_connectivity()</code>, because of an
un-initialized variable in the C code.</li>
  <li>VertexSeq and EdgeSeq can now be indexed with NumPy integers</li>
  <li>Avoiding overflow in <code class="language-plaintext highlighter-rouge">Graph.closeness()</code> and related functions.</li>
  <li>Show plots inline in IPython.</li>
  <li>Fixed an invalid memory read (and a potential crash) in the infomap
community detection.</li>
  <li>Fix a bug in triad census that set the first element of the result
to NaN.</li>
  <li>Fixed a bug in weighted mudularity calculation, sum of the weights
was truncated to an integer.</li>
  <li>Fixed a bug in weighted multilevel communtiies, the maximum weight
was rounded to an integer.</li>
  <li>Reimplement push-relabel maximum flow with gap heuristics.</li>
  <li>Fixed invalid return value of <code class="language-plaintext highlighter-rouge">RunningMean.__length__()</code>.</li>
  <li>Fixed missing whitespace in Pajek writer when the ID attribute was
numeric.</li>
  <li>Fixed a bug that caused the GML reader to crash when the ID
attribute was non-numeric.</li>
  <li>Added Vertex.graph and Edge.graph attributes.</li>
  <li>Fix dyad census instability, sometimes incorrect results were
reported.</li>
  <li>Dyad census detects integer overflow now and gives a warning.</li>
  <li>Added a Gomory-Hu tree implementation: <code class="language-plaintext highlighter-rouge">Graph.gomory_hu_tree()</code>.</li>
  <li>sorted out return type inconsistency for <code class="language-plaintext highlighter-rouge">Vertex.constraint()</code>,
closes #259.</li>
  <li>Added weights support for <code class="language-plaintext highlighter-rouge">Graph.community_optimal_modularity()</code>,
closes #511.</li>
  <li>Faster maximal clique finding.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">Graph.isomorphic_vf2()</code>, edge colors were ignored.</li>
  <li>Added rudimentary support for drawing edge labels.</li>
  <li>Generate graphs from a stochastic block model: <code class="language-plaintext highlighter-rouge">Graph.SBM()</code>.</li>
  <li>We use PRPACK to calculate PageRank scores
see https://github.com/dgleich/prpack</li>
  <li>Implement the <code class="language-plaintext highlighter-rouge">start</code> argument in <code class="language-plaintext highlighter-rouge">igraph_hrg_fit</code> (#225).</li>
  <li>Fixed a bug in graph density that resulted in incorrect values for
undirected graphs with loops.</li>
  <li>Fixed a bug that made Bellman-Ford shortest paths calculations fail.</li>
  <li>Fixed a minimum cut bug for weighted undirected graphs (#564).</li>
  <li>Fixed argument ordering in minimum cut and related functions.</li>
</ul>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[Release Notes]]></summary></entry><entry><title type="html">R/igraph 0.7.0</title><link href="https://igraph.org/2014/02/04/igraph-0.7-r.html" rel="alternate" type="text/html" title="R/igraph 0.7.0" /><published>2014-02-04T00:00:00+00:00</published><updated>2014-02-04T00:00:00+00:00</updated><id>https://igraph.org/2014/02/04/igraph-0.7-r</id><content type="html" xml:base="https://igraph.org/2014/02/04/igraph-0.7-r.html"><![CDATA[<h2 id="release-notes">Release Notes</h2>

<p>There are a bunch of new features in the library itself, and 
other important changes in the life of the project. Thanks everyone
for sending code and reporting bugs!</p>

<h3 id="igraph--github">igraph @ github</h3>

<p>igraph’s development has moved from Launchpad to github. 
This has actually happened several month ago, but never 
announced officially. The place for reporting bugs is 
at https://github.com/igraph/igraph/issues.</p>

<h3 id="new-homepage">New homepage</h3>

<p>igraph’s homepage is now hosted at http://igraph.org, and it is 
brand new. We wanted to make it easier to use and modern.</p>

<!--more-->

<h3 id="better-nightly-downloads">Better nightly downloads</h3>

<p>You can download nightly builds from igraph at 
http://igraph.org/nightly. Source and binary R packages (for windows
and OSX), are all built.</p>

<h2 id="r-new-features-and-bug-fixes">R: new features and bug fixes</h2>

<ul>
  <li>Added a demo for hierarchical random graphs, invoke it via
<code class="language-plaintext highlighter-rouge">demo(hrg)</code>.</li>
  <li>Make attribute prefixes optional when writing a GraphML file.</li>
  <li>Added function <code class="language-plaintext highlighter-rouge">mod.matrix()</code>.</li>
  <li>Support edge weights in leading eigenvector community detection.</li>
  <li>Added the LAD library for checking (sub)graph isomorphism, version 1.</li>
  <li>Logical attributes.</li>
  <li>Added <code class="language-plaintext highlighter-rouge">layout.bipartite()</code> function, a simple two-column layout
for bipartite graphs.</li>
  <li>Support incidence matrices in bipartite Pajek files.</li>
  <li>Pajek files in matrix format are now directed by default, unless they
are bipartite.</li>
  <li>Support weighted (and signed) networks in Pajek when file is in
matrix format.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">barabasi.game()</code>, algorithm psumtree-multiple 
just froze.</li>
  <li>Function <code class="language-plaintext highlighter-rouge">layout.mds()</code> by default returns a layout matrix now.</li>
  <li>Added support for Boolean attributes in the GraphML and GML readers
and writer.</li>
  <li>Change MDS layout coordinates, first dim is according to first
eigenvalue, etc.</li>
  <li><code class="language-plaintext highlighter-rouge">plot.communities()</code> (<code class="language-plaintext highlighter-rouge">plot.igraph()</code>, really) draws a border
around the marked groups by default.</li>
  <li>printing graphs now converts the <code class="language-plaintext highlighter-rouge">name</code> graph attribute to character</li>
  <li>Convenience functions to query and set all attributes at once:
<code class="language-plaintext highlighter-rouge">vertex.attriubutes()</code>, <code class="language-plaintext highlighter-rouge">graph.attributes()</code> and <code class="language-plaintext highlighter-rouge">edge.attributes()</code>.</li>
  <li>Function <code class="language-plaintext highlighter-rouge">graph.disjoint.union()</code> handles attributes now.</li>
  <li>Rewrite <code class="language-plaintext highlighter-rouge">graph.union()</code> to handle attributes properly.</li>
  <li><code class="language-plaintext highlighter-rouge">rewire()</code>: now supports the generation and destruction of loops.</li>
  <li>Erdos-Renyi type bipartite random graphs: <code class="language-plaintext highlighter-rouge">bipartite.random.game()</code>.</li>
  <li>Support the new options (predecessors and inbound_edges) of
<code class="language-plaintext highlighter-rouge">get_shortest_paths()</code>, reorganized the output of
<code class="language-plaintext highlighter-rouge">get.shortest.paths()</code> completely.</li>
  <li>Added <code class="language-plaintext highlighter-rouge">graphlets()</code> and related functions.</li>
  <li>Fix modularity values of multilevel community if there are no merges
at all.</li>
  <li>Fixed bug when deleting edges with FALSE in the matrix notation.</li>
  <li>Fix <code class="language-plaintext highlighter-rouge">bonpow()</code> and <code class="language-plaintext highlighter-rouge">alpha.centrality()</code> and make sure that the
sparse solver is called.</li>
  <li><code class="language-plaintext highlighter-rouge">tkplot()</code> news: enable setting coordinates from the command line
via <code class="language-plaintext highlighter-rouge">tkplot.setcoords()</code> and access to the canvas via 
<code class="language-plaintext highlighter-rouge">tkplot.canvas()</code>.</li>
  <li>Fixed a potential crash in <code class="language-plaintext highlighter-rouge">igraph_edge_connectivity()</code>, because of an
un-initialized variable in the C code.</li>
  <li>Avoiding overflow in <code class="language-plaintext highlighter-rouge">closeness()</code> and related functions.</li>
  <li>Check for NAs after converting ‘type’ to logical in 
<code class="language-plaintext highlighter-rouge">bipartite.projection()</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">graphNEL</code> conversion functions only load the ‘graph’ package if it was 
not loaded before and they load it at the end of the search path, 
to minimize conflicts.</li>
  <li>Fixed a bug when creating graphs from adjacency matrices, we now convert
them to double, in case they are integers.</li>
  <li>Fixed an invalid memory read (and a potential crash) in the infomap
community detection.</li>
  <li>Fixed a memory leak in the functions with attribute combinations.</li>
  <li>Removed some memory leaks from the SCG functions.</li>
  <li>Fixed some memory leaks in the ray tracer.</li>
  <li>Fixed memory leak in <code class="language-plaintext highlighter-rouge">graph.bfs()</code> and <code class="language-plaintext highlighter-rouge">graph.dfs()</code>.</li>
  <li>Fix a bug in triad census that set the first element of the result
to NaN.</li>
  <li>Fixed a crash in <code class="language-plaintext highlighter-rouge">is.chordal()</code>.</li>
  <li>Fixed a bug in weighted mudularity calculation, sum of the weights
was truncated to an integer.</li>
  <li>Fixed a bug in weighted multilevel communtiies, the maximum weight
was rounded to an integer.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">centralization.closeness.tmax()</code>.</li>
  <li>Reimplement push-relabel maximum flow with gap heuristics.</li>
  <li>Maximum flow functions now return some statistics about the push
relabel algorithm steps.</li>
  <li>Function <code class="language-plaintext highlighter-rouge">arpack()</code> now gives error message if unknown options are
given.</li>
  <li>Fixed missing whitespace in Pajek writer when the ID attribute was
numeric.</li>
  <li>Fixed a bug that caused the GML reader to crash when the ID
attribute was non-numeric.</li>
  <li>Fixed issue #500, potential segfault if the two graphs in BLISS
differ in the number of vertices or edges.</li>
  <li>Added <code class="language-plaintext highlighter-rouge">igraphtest()</code> function.</li>
  <li>Fix dyad census instability, sometimes incorrect results were
reported.</li>
  <li>Dyad census detects integer overflow now and gives a warning.</li>
  <li>Function <code class="language-plaintext highlighter-rouge">add.edges()</code> does not allow now zeros in the vertex set.</li>
  <li>Added a function to count the number of adjacent triangles:
<code class="language-plaintext highlighter-rouge">adjacenct.triangles()</code>.</li>
  <li>Added <code class="language-plaintext highlighter-rouge">graph.eigen()</code> function, eigenproblems on adjacency matrices.</li>
  <li>Added some workarounds for functions that create a lot of
graphs, <code class="language-plaintext highlighter-rouge">decompose.graph()</code> and <code class="language-plaintext highlighter-rouge">graph.neighborhood()</code> use it. 
Fixes issue #508.</li>
  <li>Added weights support for <code class="language-plaintext highlighter-rouge">optimal.community()</code>, closes #511.</li>
  <li>Faster maximal clique finding.</li>
  <li>Added a function to count maximum cliques.</li>
  <li>Set operations: union, intersection, disjoint, union, difference,
compose now work based on vertex names (if they are present) and
keep attributes, closes #20.</li>
  <li>Removed functions <code class="language-plaintext highlighter-rouge">graph.intersection.by.name()</code>,
<code class="language-plaintext highlighter-rouge">graph.union.by.name()</code>, <code class="language-plaintext highlighter-rouge">graph.difference.by.name()</code>.</li>
  <li>The <code class="language-plaintext highlighter-rouge">+</code> operator on graphs now calls <code class="language-plaintext highlighter-rouge">graph.union()</code> if both 
argument graphs are named, and calls <code class="language-plaintext highlighter-rouge">graph.disjoint.union()</code>
otherwise.</li>
  <li>Added function <code class="language-plaintext highlighter-rouge">igraph.version()</code>.</li>
  <li>Generate graphs from a stochastic block model: <code class="language-plaintext highlighter-rouge">sbm.game()</code>.</li>
  <li>Do not suggest the stats, XML, jpeg and png packages any more.</li>
  <li>Fixed a <code class="language-plaintext highlighter-rouge">set.vertex/edge.attribute</code> bug that changed both
graph objects, after copying (#533)</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">barabasi.game</code> that caused crashes.</li>
  <li>We use PRPACK to calculate PageRank scores
see https://github.com/dgleich/prpack</li>
  <li>Added<code class="language-plaintext highlighter-rouge">'which</code> argument to <code class="language-plaintext highlighter-rouge">bipartite.projection</code> (#307).</li>
  <li>Add <code class="language-plaintext highlighter-rouge">normalized</code> argument to closeness functions, fixes issue #3.</li>
  <li>R: better handling of complex attributes, <code class="language-plaintext highlighter-rouge">[[</code> on vertex/edge sets,
fixes #231.</li>
  <li>Implement the <code class="language-plaintext highlighter-rouge">start</code> argument in <code class="language-plaintext highlighter-rouge">hrg.fit</code> (#225).</li>
  <li>Set root vertex in Reingold-Tilford layout, solves #473.</li>
  <li>Fix betweenness normalization for directed graphs.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">graph.density</code> that resulted in incorrect values for
undirected graphs with loops</li>
  <li>Fixed a bug when many graphs were created in one C call
(e.g. by <code class="language-plaintext highlighter-rouge">graph.decompose</code>), causing #550.</li>
  <li>Fixed sparse <code class="language-plaintext highlighter-rouge">graph.adjacency</code> bugs for graphs with one edge,
and graphs with zero edges.</li>
  <li>Fixed a bug that made Bellman-Ford shortest paths calculations fail.</li>
  <li>Fixed a <code class="language-plaintext highlighter-rouge">graph.adjacency</code> bug for undirected, weighted graphs and
sparse matrices.</li>
  <li><code class="language-plaintext highlighter-rouge">main</code>, <code class="language-plaintext highlighter-rouge">sub</code>, <code class="language-plaintext highlighter-rouge">xlab</code> and <code class="language-plaintext highlighter-rouge">ylab</code> are proper graphics parameters
now (#555).</li>
  <li><code class="language-plaintext highlighter-rouge">graph.data.frame</code> coerces arguments to data frame (#557).</li>
  <li>Fixed a minimum cut bug for weighted undirected graphs (#564).</li>
  <li>Functions for simulating epidemics (SIR model) on networks,
see the <code class="language-plaintext highlighter-rouge">sir</code> function.</li>
  <li>Fixed argument ordering in <code class="language-plaintext highlighter-rouge">graph.mincut</code> and related functions.</li>
  <li>Avoid copying attributes in query functions and print (#573),
these functions are much faster now for graphs with many
vertices/edges and attributes.</li>
  <li>Speed up writing GML and GraphML files, if some attributes are
integer. It was really-really slow.</li>
  <li>Fix multiple root vertices in <code class="language-plaintext highlighter-rouge">graph.bfs</code> (#575).</li>
</ul>]]></content><author><name></name></author><category term="r" /><summary type="html"><![CDATA[Release Notes]]></summary></entry><entry><title type="html">C/igraph 0.6.5</title><link href="https://igraph.org/2013/02/24/igraph-0.6.5-c.html" rel="alternate" type="text/html" title="C/igraph 0.6.5" /><published>2013-02-24T00:00:00+00:00</published><updated>2013-02-24T00:00:00+00:00</updated><id>https://igraph.org/2013/02/24/igraph-0.6.5-c</id><content type="html" xml:base="https://igraph.org/2013/02/24/igraph-0.6.5-c.html"><![CDATA[<p>The version number is not a mistake, we jump to 0.6.5 from 0.6, 
for technical reasons.</p>

<h2 id="release-notes">Release Notes</h2>

<p>igraph 0.6.5 is a minor release that contains only few big changes,
and fixes a number of very annoying bugs.</p>

<p>See at the end for the complete list of changes. First let’s see
the most important new features and changes.</p>

<!--more-->

<h3 id="pajek-reader-supports-bipartite-graphs">Pajek reader supports bipartite graphs</h3>

<p>See more here:
<a href="doc-0.6.5/html/ch19s05.html#igraph_read_graph_pajek">
<code class="language-plaintext highlighter-rouge">igraph_read_graph_pajek</code></a>.</p>

<h3 id="graphical-degree-sequences">Graphical degree sequences</h3>

<p>We added some new functions if a sequence of integers is graphial, i.e. it 
can be the degree sequence of a simple graph. See more in
the 
<a href="doc-0.6.5/html/ch13s05.html#igraph_is_graphical_degree_sequence">
manual</a>.</p>

<h3 id="k-regular-random-graphs">k-regular random graphs</h3>

<p>It is possible now to generate regular random graphs, faster than 
the general degree sequence based generator. See more in
the <a href="doc-0.6.5/html/ch09s02.html#igraph_k_regular_game">
reference manual</a>.</p>

<h3 id="fitting-power-law-distributions">Fitting power law distributions</h3>

<p>This release includes the plfit library to maximum likelihood fit 
power laws to discrete or contiouous data. See more in
the <a href="doc-0.6.5/html/ch29s05.html#igraph_power_law_fit">
reference manual</a>.</p>

<h2 id="c-library-news-and-changes">C library news and changes</h2>

<ul>
  <li>Added bipartite support to the Pajek reader and writer, closes bug
#1042298.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_layout_mds()</code> uses LAPACK instead of ARPACK.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_degree_sequence_game</code> has a new method:
<code class="language-plaintext highlighter-rouge">IGRAPH_DEGSEQ_SIMPLE_NO_MULTIPLE</code>.</li>
  <li>Added the <code class="language-plaintext highlighter-rouge">igraph_is_degree_sequence()</code> and
<code class="language-plaintext highlighter-rouge">igraph_is_graphical_degree_sequence()</code> functions.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_rewire()</code> has a new method: <code class="language-plaintext highlighter-rouge">IGRAPH_REWIRING_SIMPLE_LOOPS</code>, 
that can create loops.</li>
  <li>Walktrap community detection now handles isolates.</li>
  <li>Added <code class="language-plaintext highlighter-rouge">igraph_k_regular_game()</code>.</li>
  <li>
    <p>Added <code class="language-plaintext highlighter-rouge">igraph_power_law_fit</code>.</p>
  </li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">igraph_barabasi_game</code> when <code class="language-plaintext highlighter-rouge">outseq</code> was an empty vector.</li>
  <li>Fixed overflow issues in centralization calculations.</li>
  <li>Fixed an invalid return value of <code class="language-plaintext highlighter-rouge">igraph_vector_ptr_pop_back</code>.</li>
  <li>Fixed a <code class="language-plaintext highlighter-rouge">igraph_all_minimal_st_separators()</code> bug, some vertex sets
were incorrectly reported as separators. Bug #1033045.</li>
  <li>Pajek exporter now always quotes strings, thanks to Elena Tea Russo.</li>
  <li>Fixed a bug with handling small edge weights in
<code class="language-plaintext highlighter-rouge">igraph_shortest_paths_dijkstra()</code>, thanks to Martin J Reed.</li>
  <li>Fixed a bug in the <code class="language-plaintext highlighter-rouge">NCV</code> setting for ARPACK functions. It cannot be
bigger than the matrix size.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_layout_merge_dla</code> uses better default parameter values now.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">igraph_layout_mds()</code> that resulted vertices on top of
each other.</li>
  <li>Attribute handler table is not thread-local any more.</li>
  <li>Motif finding functions return <code class="language-plaintext highlighter-rouge">IGRAPH_NAN</code> for isomorphism classes
that are not motifs (i.e. not connected). Fixes bug #1050859.</li>
  <li>Fixed a bug when calculating the largest cliques of a directed
graph. Bug #1073800.</li>
  <li>Fix a bug in <code class="language-plaintext highlighter-rouge">degree_sequence_game()</code>, in_seq can be an empty vector as
well instead of NULL, for an undirected graph.</li>
  <li>Fixed a bug in the maximal clique search, closes #1074402.</li>
  <li>Warn for negative weights when calculating PageRank.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">igraph_eccentricity()</code> (and also <code class="language-plaintext highlighter-rouge">igraph_radius()</code>),
the results were often simply wrong.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">igraph_get_all_shortest_paths_dijkstra()</code> when edges
had zero weight.</li>
  <li>Fixed some potential crashes in the DrL layout generator.</li>
  <li>Fixed a bug in the Reingold-Tilford layout when the graph is
directed and <code class="language-plaintext highlighter-rouge">mode != ALL</code>.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">igraph_has_multiple()</code> that resulted in false negatives
for some undirected graphs.</li>
  <li>Fixed a crash in weighted betweenness calculation.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[The version number is not a mistake, we jump to 0.6.5 from 0.6, for technical reasons.]]></summary></entry><entry><title type="html">python-igraph 0.6.5</title><link href="https://igraph.org/2013/02/24/igraph-0.6.5-python.html" rel="alternate" type="text/html" title="python-igraph 0.6.5" /><published>2013-02-24T00:00:00+00:00</published><updated>2013-02-24T00:00:00+00:00</updated><id>https://igraph.org/2013/02/24/igraph-0.6.5-python</id><content type="html" xml:base="https://igraph.org/2013/02/24/igraph-0.6.5-python.html"><![CDATA[<p>The version number is not a mistake, we jump to 0.6.5 from 0.6, 
for technical reasons.</p>

<h2 id="release-notes">Release Notes</h2>

<p>igraph 0.6.5 is a minor release that contains only few big changes,
and fixes a number of very annoying bugs.</p>

<p>See at the end for the complete list of changes. First let’s see
the most important new features and changes.</p>

<!--more-->

<h2 id="convert-lists-of-tuples-to-graphs-in-python">Convert lists of tuples to graphs in Python</h2>

<p>The <a href="doc-0.6.5/python/igraph.Graph-class.html#TupleList"><code class="language-plaintext highlighter-rouge">Graph.TupleList()</code></a>
static method in Python now allows easy conversion of lists of tuples (such as
database records or contents of CSV files) into graphs with named vertices and
edge attributes.</p>

<h2 id="pajek-reader-supports-bipartite-graphs">Pajek reader supports bipartite graphs</h2>

<p>See more in the 
<a href="doc-0.6.5/python/igraph.Graph-class.html#Read">
documentation</a>.</p>

<h2 id="graphical-degree-sequences">Graphical degree sequences</h2>

<p>We added some new functions if a sequence of integers is graphial, i.e. it 
can be the degree sequence of a simple graph. See more in the 
<a href="doc-0.6.5/python/igraph._igraph-module.html#is_graphical_degree_sequence">
documentation</a>.</p>

<h2 id="k-regular-random-graphs">k-regular random graphs</h2>

<p>It is possible now to generate regular random graphs, faster than 
the general degree sequence based generator. See more in the
<a href="doc-0.6.5/python/igraph.GraphBase-class.html#K_Regular">
documentation</a>.</p>

<h2 id="fitting-power-law-distributions">Fitting power law distributions</h2>

<p>This release includes the plfit library to maximum likelihood fit 
power laws to discrete or contiouous data. See more in the
<a href="doc-0.6.5/python/igraph.statistics-module.html#power_law_fit">
documentation</a>.</p>

<h2 id="python-news-and-fixes">Python news and fixes</h2>

<ul>
  <li>Added bipartite support to the Pajek reader and writer, closes bug
#1042298.</li>
  <li><code class="language-plaintext highlighter-rouge">Graph.Degree_Sequence()</code> has a new method now: <code class="language-plaintext highlighter-rouge">no_multiple</code>.</li>
  <li>Added the <code class="language-plaintext highlighter-rouge">is_degree_sequence()</code> and <code class="language-plaintext highlighter-rouge">is_graphical_degree_sequence()</code>
functions.</li>
  <li><code class="language-plaintext highlighter-rouge">rewire()</code> has a new mode: <code class="language-plaintext highlighter-rouge">loops</code>, that can create loop edges.</li>
  <li>Walktrap community detection now handles isolates.</li>
  <li>Added <code class="language-plaintext highlighter-rouge">Graph.K_Regular()</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">power_law_fit()</code> now uses a C implementation.</li>
  <li>Added support for setting the frame (stroke) width of vertices using the
<code class="language-plaintext highlighter-rouge">frame_width</code> attribute or the <code class="language-plaintext highlighter-rouge">vertex_frame_width</code> keyword argument
in <code class="language-plaintext highlighter-rouge">plot()</code></li>
  <li>Improved Inkscape-friendly SVG output from <code class="language-plaintext highlighter-rouge">Graph.write_svg()</code>,
thanks to drlog</li>
  <li>Better handling of named vertices in <code class="language-plaintext highlighter-rouge">Graph.delete_vertices()</code></li>
  <li>Added experimental Gephi graph streaming support; see
<code class="language-plaintext highlighter-rouge">igraph.remote.gephi</code> and <code class="language-plaintext highlighter-rouge">igraph.drawing.graph.GephiGraphStreamingDrawer</code></li>
  <li>Nicer <code class="language-plaintext highlighter-rouge">__repr__</code> output for <code class="language-plaintext highlighter-rouge">Flow</code> and <code class="language-plaintext highlighter-rouge">Cut</code> instances</li>
  <li>Arrows are now placed correctly around diamond-shaped nodes on plots</li>
  <li>Added <code class="language-plaintext highlighter-rouge">Graph.TupleList</code>, a function that allows one to create graphs with
edge attributes quickly from a list of tuples.</li>
  <li>
    <p><code class="language-plaintext highlighter-rouge">plot()</code> now also supports <code class="language-plaintext highlighter-rouge">.eps</code> as an extension, not only <code class="language-plaintext highlighter-rouge">.ps</code></p>
  </li>
  <li>Fixed overflow issues in centralization calculations.</li>
  <li>Fixed a bug that mishandled vertex colors in VF2 isomorphism
functions. Bug #1032819.</li>
  <li>Pajek exporter now always quotes strings, thanks to Elena Tea Russo.</li>
  <li>Fixed a bug with handling small edge weights in shortest paths 
calculation in <code class="language-plaintext highlighter-rouge">Graph.shortest_paths()</code> (Dijkstra’s algorithm.) Thanks to 
Martin J Reed.</li>
  <li>Fixed a bug in the <code class="language-plaintext highlighter-rouge">NCV</code> setting for ARPACK functions. It cannot be
bigger than the matrix size.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">Graph.layout_mds()</code> that resulted vertices on top of each
other.</li>
  <li>Motif finding functions return nan for isomorphism classes that are
not motifs (i.e. not connected). Fixes bug #1050859.</li>
  <li>Fixed a bug when calculating the largest cliques of a directed
graph. Bug #1073800.</li>
  <li>Warn for negative weights when calculating PageRank.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">Graph.eccentricity()</code> and <code class="language-plaintext highlighter-rouge">Graph.radius()</code>,
the results were often simply wrong.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">Graph.get.all.shortest.paths()</code> when some edges
had zero weight.</li>
  <li>Fixed some potential crashes in the DrL layout generator.</li>
  <li>Fixed a bug in the Reingold-Tilford layout when the graph is
directed and <code class="language-plaintext highlighter-rouge">mode != ALL</code>.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">Graph.layout_sugiyama()</code> when the graph had no edges.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">Graph.community_label_propagation()</code> when initial labels
contained -1 entries. Issue #1105460.</li>
  <li>Repaired the <code class="language-plaintext highlighter-rouge">DescartesCoordinateSystem</code> class (which is not used
too frequently anyway)</li>
  <li>Fixed a bug that caused segfaults when an igraph <code class="language-plaintext highlighter-rouge">Graph</code> was used in a
thread forked from the main Python interpreter thread</li>
  <li>Fixed a bug that affected file handles created from Python strings in the
C layer</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">has_multiple()</code> that resulted in false negatives
for some undirected graphs.</li>
  <li>Fixed a crash in weighted betweenness calculation.</li>
</ul>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[The version number is not a mistake, we jump to 0.6.5 from 0.6, for technical reasons.]]></summary></entry><entry><title type="html">R/igraph 0.6.5</title><link href="https://igraph.org/2013/02/24/igraph-0.6.5-r.html" rel="alternate" type="text/html" title="R/igraph 0.6.5" /><published>2013-02-24T00:00:00+00:00</published><updated>2013-02-24T00:00:00+00:00</updated><id>https://igraph.org/2013/02/24/igraph-0.6.5-r</id><content type="html" xml:base="https://igraph.org/2013/02/24/igraph-0.6.5-r.html"><![CDATA[<p>The version number is not a mistake, we jump to 0.6.5 from 0.6, 
for technical reasons.</p>

<h2 id="release-notes">Release Notes</h2>

<p>igraph 0.6.5 is a minor release that contains only few big changes,
and fixes a number of very annoying bugs.</p>

<p>See at the end for the complete list of changes. First let’s see
the most important new features and changes.</p>

<!--more-->

<h3 id="vertex-shape-api-in-r">Vertex shape API in R</h3>

<p>It is now possible to create user-defined vertex shapes for drawing 
graphs in R. See <a href="doc-0.6.5/R/igraph.vertex.shapes.html">
    <code class="language-plaintext highlighter-rouge">vertex.shapes()</code> in the R manual</a>.</p>

<h3 id="convert-graphs-to-data-frames-in-r">Convert graphs to data frames in R</h3>

<p>Function <a href="doc-0.6.5/R/graph.data.frame.html"><code class="language-plaintext highlighter-rouge">get.data.frame()</code></a> 
does the opposite of <a href="doc-0.6.5/R/graph.data.frame.html">
    <code class="language-plaintext highlighter-rouge">graph.data.frame()</code></a>, it converts a graph to one or two data frames
that contain vertex and/or edge data.</p>

<h3 id="pajek-reader-supports-bipartite-graphs">Pajek reader supports bipartite graphs</h3>

<p>See more in the <a href="doc-0.6.5/R/read.graph.html">manual</a>.</p>

<h3 id="graphical-degree-sequences">Graphical degree sequences</h3>

<p>We added some new functions if a sequence of integers is graphial, i.e. it 
can be the degree sequence of a simple graph. See more in
the <a href="doc-0.6.5/R/is.degree.sequence.html">manual</a>.</p>

<h3 id="k-regular-random-graphs">k-regular random graphs</h3>

<p>It is possible now to generate regular random graphs, faster than 
the general degree sequence based generator. See more in
the <a href="doc-0.6.5/R/k.regular.game.html">manual</a>.</p>

<h3 id="fitting-power-law-distributions">Fitting power law distributions</h3>

<p>This release includes the plfit library to maximum likelihood fit 
power laws to discrete or contiouous data. See more in
the <a href="doc-0.6.5/R/power.law.fit.html">manual</a>.</p>

<h3 id="speedup-in-r">Speedup in R</h3>

<p>Many basic graph operations (eg. printing the summary to the screen,
querying attribute values) now avoid copying the graph, so these
operations are now much faster in R.</p>

<h2 id="r-new-features-and-bug-fixes">R: new features and bug fixes</h2>

<ul>
  <li>Added a vertex shape API for defining new vertex shapes, and also 
a couple of new vertex shapes.</li>
  <li>Added the <code class="language-plaintext highlighter-rouge">get.data.frame()</code> function, opposite of <code class="language-plaintext highlighter-rouge">graph.data.frame()</code>.</li>
  <li>Added bipartite support to the Pajek reader and writer, closes bug
#1042298.</li>
  <li><code class="language-plaintext highlighter-rouge">degree.sequence.game()</code> has a new method now: <code class="language-plaintext highlighter-rouge">simple_no_multiple</code>.</li>
  <li>Added the <code class="language-plaintext highlighter-rouge">is.degree.sequence()</code> and <code class="language-plaintext highlighter-rouge">is.graphical.degree.sequence()</code>
functions.</li>
  <li><code class="language-plaintext highlighter-rouge">rewire()</code> has a new method: <code class="language-plaintext highlighter-rouge">loops</code>, that can create loop edges.</li>
  <li>Walktrap community detection now handles isolates.</li>
  <li><code class="language-plaintext highlighter-rouge">layout.mds()</code> returns a layout matrix now.</li>
  <li><code class="language-plaintext highlighter-rouge">layout.mds()</code> uses LAPACK instead of ARPACK.</li>
  <li>Handle the <code class="language-plaintext highlighter-rouge">~</code> character in write.graph and read.graph. Bug
#1066986.</li>
  <li>Added <code class="language-plaintext highlighter-rouge">k.regular.game()</code>.</li>
  <li>Use vertex names to plot if no labels are specified in the function
call or as vetex attributes. Fixes issue #1085431.</li>
  <li>
    <p><code class="language-plaintext highlighter-rouge">power.law.fit()</code> can now use a C implementation.</p>
  </li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">barabasi.game()</code> when <code class="language-plaintext highlighter-rouge">out.seq</code> was an empty vector.</li>
  <li>Fixed a bug that made functions with a progress bar fail if called 
from another package.</li>
  <li>Fixed a bug when creating graphs from a weighted integer adjacency 
matrix via <code class="language-plaintext highlighter-rouge">graph.adjacency()</code>. Bug #1019624.</li>
  <li>Fixed overflow issues in centralization calculations.</li>
  <li>Fixed a <code class="language-plaintext highlighter-rouge">minimal.st.separators()</code> bug, some vertex sets were incorrectly
reported as separators. Bug #1033045.</li>
  <li>Fixed a bug that mishandled vertex colors in VF2 isomorphism
functions. Bug <code class="language-plaintext highlighter-rouge">\#1032819</code>.</li>
  <li>Pajek exporter now always quotes strings, thanks to Elena Tea Russo.</li>
  <li>Fixed a bug with handling small edge weights in shortest paths 
calculation in <code class="language-plaintext highlighter-rouge">shortest.paths()</code> (Dijkstra’s algorithm.) Thanks to 
Martin J Reed.</li>
  <li>Weighted transitivity uses <code class="language-plaintext highlighter-rouge">V(graph)</code> as <code class="language-plaintext highlighter-rouge">vids</code> if it is <code class="language-plaintext highlighter-rouge">NULL</code>.</li>
  <li>Fixed a bug when <code class="language-plaintext highlighter-rouge">pie</code> vertices were drawn together with other 
vertex shapes.</li>
  <li>Speed up printing graphs.</li>
  <li>Speed up attribute queries and other basic operations, by avoiding 
copying of the graph. Bug #1043616.</li>
  <li>Fixed a bug in the NCV setting for ARPACK functions. It cannot be
bigger than the matrix size.</li>
  <li><code class="language-plaintext highlighter-rouge">layout.merge()</code>s DLA mode has better defaults now.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">layout.mds()</code> that resulted vertices on top of each
other.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">layout.spring()</code>, it was not working properly.</li>
  <li>Fixed <code class="language-plaintext highlighter-rouge">layout.svd()</code>, which was completely defunct.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">layout.graphopt()</code> that caused warnings and on 
some platforms crashes.</li>
  <li>Fixed <code class="language-plaintext highlighter-rouge">community.to.membership()</code>. Bug #1022850.</li>
  <li>Fixed a <code class="language-plaintext highlighter-rouge">graph.incidence()</code> crash if it was called with a non-matrix
argument.</li>
  <li>Fixed a <code class="language-plaintext highlighter-rouge">get.shortest.paths()</code> bug, when output was set to <code class="language-plaintext highlighter-rouge">both</code>.</li>
  <li>Motif finding functions return <code class="language-plaintext highlighter-rouge">NA</code> for isomorphism classes that are
not motifs (i.e. not connected). Fixes bug #1050859.</li>
  <li>Fixed <code class="language-plaintext highlighter-rouge">get.adjacency()</code> when attr is given, and the attribute has some
complex type. Bug #1025799.</li>
  <li>Fixed attribute name in <code class="language-plaintext highlighter-rouge">graph.adjacency()</code> for dense matrices. Bug
#1066952.</li>
  <li>Fixed erratic behavior of <code class="language-plaintext highlighter-rouge">alpha.centrality()</code>.</li>
  <li>Fixed igraph indexing, when attr is given. Bug #1073705.</li>
  <li>Fixed a bug when calculating the largest cliques of a directed
graph. Bug #1073800.</li>
  <li>Fixed a bug in the maximal clique search, closes #1074402.</li>
  <li>Warn for negative weights when calculating PageRank.</li>
  <li>Fixed dense, unweighted graph.adjacency when <code class="language-plaintext highlighter-rouge">diag=FALSE</code>. Closes
issue #1077425.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">eccentricity()</code> and <code class="language-plaintext highlighter-rouge">radius()</code>, the results were often
simply wrong.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">get.all.shortest.paths()</code> when some edges had zero weight.</li>
  <li><code class="language-plaintext highlighter-rouge">graph.data.frame()</code> is more careful when vertex names are numbers, to
avoid their scientific notation. Fixes issue #1082221.</li>
  <li>Better check for <code class="language-plaintext highlighter-rouge">NA</code>s in vertex names. Fixes issue #1087215</li>
  <li>Fixed some potential crashes in the DrL layout generator.</li>
  <li>Fixed a bug in the Reingold-Tilford layout when the graph is
directed and <code class="language-plaintext highlighter-rouge">mode != ALL</code>.</li>
  <li>Eliminate gap between vertex and edge when plotting an edge without an arrow.
Fixes #1118448.</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">has.multiple()</code> that resulted in false negatives for
some undirected graphs.</li>
  <li>Fixed a crash in weighted betweenness calculation.</li>
  <li>R plotting: fixed a bug that caused misplaced arrows at rectangle
vertex shapes.</li>
</ul>]]></content><author><name></name></author><category term="r" /><summary type="html"><![CDATA[The version number is not a mistake, we jump to 0.6.5 from 0.6, for technical reasons.]]></summary></entry><entry><title type="html">C/igraph 0.6</title><link href="https://igraph.org/2012/06/11/igraph-0.6-c.html" rel="alternate" type="text/html" title="C/igraph 0.6" /><published>2012-06-11T00:00:00+00:00</published><updated>2012-06-11T00:00:00+00:00</updated><id>https://igraph.org/2012/06/11/igraph-0.6-c</id><content type="html" xml:base="https://igraph.org/2012/06/11/igraph-0.6-c.html"><![CDATA[<h2 id="release-notes">Release Notes</h2>

<p>igraph 0.6 is a major new release of igraph. It contains many new
features and major changes, a lot of bug fixes and improvements. 
As always, we are grateful to the people who sent comments, bug 
reports, questions, and specially to people who contributed code.</p>

<p>See below a list of major changes, with links to the relevant sections
of the documentation. New features in R, Python, and C are all listed here.</p>

<p>See at the end for a (more) complete list of changes.</p>

<!--more-->

<h2 id="community-detection-improvements">Community detection improvements</h2>

<p>Community structure detection via exact modularity optimization. As
modularity optimization in an NP-complete problem, this works only for
small graphs. See 
<a href="doc-0.6/html/ch22s01.html#igraph_community_optimal_modularity">
<code class="language-plaintext highlighter-rouge">igraph_community_optimal_modularity</code></a>.</p>

<p>The multi-level modularity optimization algorithm by Blondel et
al. was added. See
<a href="doc-0.6/html/ch22s06.html#igraph_community_multilevel">
<code class="language-plaintext highlighter-rouge">igraph_community_multilevel</code></a>.</p>

<p>Hierarchical random graphs and community finding, based on the code
from Aaron Clauset. See In <a href="doc-0.6/html/igraph-HRG.html">
the manual for details</a>.</p>

<p>We support now the InfoMAP community finding method, thanks to
Emmanuel Navarro for the code. See 
<a href="doc-0.6/html/ch22s08.html#igraph_community_infomap">
<code class="language-plaintext highlighter-rouge">igraph_community_infomap</code></a>.</p>

<p>The edge betweenness community detection method of Newman and
Girvan now also works on weighted graphs. See
the <a href="doc-0.6/html/ch22s05.html">Reference manual</a>.</p>

<p>We have added some functions to compare various community structures.
See <a href="doc-0.6/html/ch22s01.html#igraph_compare_communities">
<code class="language-plaintext highlighter-rouge">igraph_compare_communities</code></a>.</p>

<p>Igraph now implements the Spectral Coarse Graining method, by David
Morton, our implementation is based on his code. See the 
<a href="doc-0.6/html/igraph-SCG.html">manual</a>.</p>

<p>The cohesive block finding functions were rewritten from scratch in
C. They are much faster now, and they have a nicer API, too. See
<a href="doc-0.6/html/ch20s06.html#igraph_cohesive_blocks">
<code class="language-plaintext highlighter-rouge">igraph_cohesive_blocks</code></a>.</p>

<h2 id="centrality-related-functions">Centrality-related functions</h2>

<p>Centralization scores for degree, closeness, betweenness and 
eigenvector centrality. See the <a href="doc-0.6/html/ch13s07.html">
manual</a>.</p>

<p>Personalized PageRank scores. See
the <a href="doc-0.6/html/ch13s05.html#igraph_personalized_pagerank">
manual</a>.</p>

<p>Authority and hub scores, betweenness and closeness
calculations all support edge weights now. See
the <a href="doc-0.6/html/ch13s05.html">manual</a>.</p>

<h2 id="sugiyama-layout">Sugiyama layout</h2>

<p>Igraph now implements the Sugiyama layout algorithm for layered
directed acyclic graphs. See
<a href="doc-0.6/html/ch18s01.html#igraph_layout_sugiyama">
<code class="language-plaintext highlighter-rouge">igraph_layout_sugiyama</code></a>.</p>

<h2 id="maximum-matchings-in-bipartite-graphs">Maximum matchings in bipartite graphs</h2>

<p>Igraph now implements the push-relabel algorithm and the Kuhn-Munkres
algorithm (also known as the Hungarian method) to find maximum
matchings in unweighted and weighted bipartite graphs. See
the <a href="doc-0.6/html/ch13s18.html">manual</a>.</p>

<h2 id="new-in-the-c-layer">New in the C layer</h2>

<ul>
  <li>Maximum cardinality search: <code class="language-plaintext highlighter-rouge">igraph_maximum_cardinality_search()</code> and 
chordality test: <code class="language-plaintext highlighter-rouge">igraph_is_chordal()</code>.</li>
  <li>Support the DL file format, <code class="language-plaintext highlighter-rouge">igraph_read_graph_dl()</code>. See 
http://www.analytictech.com/networks/dataentry.htm.</li>
  <li>Added generic breadth-first and depth-first search implementations
with many callbacks (<code class="language-plaintext highlighter-rouge">igraph_bfs()</code>, <code class="language-plaintext highlighter-rouge">igraph_dfs()</code>).</li>
  <li>Centralization scores for degree, closeness, betweenness and
eigenvector centrality, see <code class="language-plaintext highlighter-rouge">igraph_centralization()</code>.</li>
  <li>Added <code class="language-plaintext highlighter-rouge">igraph_sparsemat_t</code>, a type that implements sparse 
matrices based on the CXSparse library by Tim Davis.
See http://www.cise.ufl.edu/research/sparse/CXSparse/.</li>
  <li>Personalized Page-Rank scores, <code class="language-plaintext highlighter-rouge">igraph_personalized_pagerank()</code> and 
<code class="language-plaintext highlighter-rouge">igraph_personalized_pagerank_vs()</code>.</li>
  <li>Assortativity coefficient, <code class="language-plaintext highlighter-rouge">igraph_assortativity()</code>, 
<code class="language-plaintext highlighter-rouge">igraph_assortativity_nominal()</code>, and <code class="language-plaintext highlighter-rouge">igraph_assortativity_degree()</code>.</li>
  <li>The multi-level modularity optimization community structure detection 
algorithm by Blondel et al. was added, see <code class="language-plaintext highlighter-rouge">igraph_community_multilevel()</code>.</li>
  <li>Added the <code class="language-plaintext highlighter-rouge">igraph_version()</code> function.</li>
  <li>Star layout: <code class="language-plaintext highlighter-rouge">igraph_layout_star()</code>.</li>
  <li>Function to calculate a non-induced subraph: <code class="language-plaintext highlighter-rouge">igraph_subgraph_edges()</code>.</li>
  <li>Distance between two community structures: <code class="language-plaintext highlighter-rouge">igraph_compare_communities()</code>.</li>
  <li>Community structure via exact modularity optimization,
<code class="language-plaintext highlighter-rouge">igraph_community_optimal_community()</code>.</li>
  <li>More comprehensive maximum flow and minimum cut calculation, 
see functions <code class="language-plaintext highlighter-rouge">igraph_maxflow()</code>, <code class="language-plaintext highlighter-rouge">igraph_mincut()</code>, 
<code class="language-plaintext highlighter-rouge">igraph_all_st_cuts()</code>, <code class="language-plaintext highlighter-rouge">igraph_all_st_mincuts()</code>.</li>
  <li>Layout based on multidimensional scaling, <code class="language-plaintext highlighter-rouge">igraph_layout_mds()</code>.</li>
  <li>It is now possible to access the random number generator(s) via an
API. Multiple RNGs can be used, from external sources as well. 
The default RNG is MT19937.</li>
  <li>Added <code class="language-plaintext highlighter-rouge">igraph_get_all_shortest_paths_dijkstra</code>, for calculating all
non-negatively weighted shortest paths.</li>
  <li>Check whether a directed graph is a DAG, <code class="language-plaintext highlighter-rouge">igraph_is_dag()</code>.</li>
  <li>Cohesive blocking, a’la Moody &amp; White, <code class="language-plaintext highlighter-rouge">igraph_cohesive_blocks()</code>.</li>
  <li>Igraph functions can now print status messages, see <code class="language-plaintext highlighter-rouge">igraph_status()</code>
and related functions.</li>
  <li>Support writing the LEDA file format, <code class="language-plaintext highlighter-rouge">igraph_write_graph_leda()</code>.</li>
  <li>Contract vertices, <code class="language-plaintext highlighter-rouge">igraph_contract_vertices()</code>.</li>
  <li>The C reference manual has now a lot of example programs.</li>
  <li>Hierarchical random graphs and community finding, porting the code
from Aaron Clauset. See <code class="language-plaintext highlighter-rouge">igraph_hrg_game()</code>, <code class="language-plaintext highlighter-rouge">igraph_hrg_fit()</code>, etc.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_has_multiple()</code> to decide whether a graph has multiple edges.</li>
  <li>New layouts <code class="language-plaintext highlighter-rouge">igraph_layout_grid()</code> and <code class="language-plaintext highlighter-rouge">igraph_layout_grid_3d()</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_integer_t</code> is really an integer now, it used to be a double.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_minimum_spanning_tree()</code>, calls either the weighted or 
the unweighted implementation.</li>
  <li>Eccentricity (<code class="language-plaintext highlighter-rouge">igraph_eccentricity()</code>), and radius (<code class="language-plaintext highlighter-rouge">igraph_radius()</code>)
calculations.</li>
  <li>Several game theory update rules, written by Minh Van Nguyen. See
<code class="language-plaintext highlighter-rouge">igraph_deterministic_optimal_imitation()</code>,
<code class="language-plaintext highlighter-rouge">igraph_stochastic_imitation()</code>, <code class="language-plaintext highlighter-rouge">igraph_roulette_wheel_imitation()</code>,
<code class="language-plaintext highlighter-rouge">igraph_moran_process()</code>,</li>
  <li>Sugiyama layout algorithm for layered directed acyclic graphs, 
<code class="language-plaintext highlighter-rouge">igraph_layout_sugiyama()</code>.</li>
  <li>New graph generators: <code class="language-plaintext highlighter-rouge">igraph_static_fitness_game()</code>, 
<code class="language-plaintext highlighter-rouge">igraph_static_power_law_game()</code>.</li>
  <li>Added the InfoMAP community finding method, thanks to Emmanuel
Navarro for the code. See <code class="language-plaintext highlighter-rouge">igraph_community_infomap()</code>.</li>
  <li>Added the Spectral Coarse Graining algorithm, see <code class="language-plaintext highlighter-rouge">igraph_scg()</code>.</li>
  <li>Added a function to calculate a diversity score for the vertices,
<code class="language-plaintext highlighter-rouge">igraph_diversity()</code>.</li>
</ul>

<h2 id="major-changes-in-the-c-layer">Major changes in the C layer</h2>

<ul>
  <li>Authority (<code class="language-plaintext highlighter-rouge">igraph_authority_score()</code>) and hub (<code class="language-plaintext highlighter-rouge">igraph_hub_score()</code>) scores 
support edge weights now.</li>
  <li>Graph Laplacian calculation (<code class="language-plaintext highlighter-rouge">igraph_laplacian()</code>) supports edge 
weights now.</li>
  <li>Support edge weights in betweenness (<code class="language-plaintext highlighter-rouge">igraph_betweenness()</code>) and closeness
(<code class="language-plaintext highlighter-rouge">igraph_closeness()</code>) calculations.</li>
  <li>Support vertex and edge coloring in the VF2 graph isomorphism 
algorithm (<code class="language-plaintext highlighter-rouge">igraph_isomorphic_vf2()</code>, <code class="language-plaintext highlighter-rouge">igraph_count_isomorphisms_vf2()</code>,
<code class="language-plaintext highlighter-rouge">igraph_get_isomorphisms_vf2()</code>, <code class="language-plaintext highlighter-rouge">igraph_subisomorphic_vf2()</code>, 
<code class="language-plaintext highlighter-rouge">igraph_count_subisomorphisms_vf2()</code>, <code class="language-plaintext highlighter-rouge">igraph_get_subisomorphisms_vf2()</code>).</li>
  <li>Added print operations for the <code class="language-plaintext highlighter-rouge">igraph_vector*_t</code>, <code class="language-plaintext highlighter-rouge">igraph_matrix*_t</code> and 
<code class="language-plaintext highlighter-rouge">igraph_strvector_t</code> types.</li>
  <li>Biconnected component calculation (<code class="language-plaintext highlighter-rouge">igraph_biconnected_components()</code>)
can now return the components themselves.</li>
  <li>Eigenvector centrality calculation, <code class="language-plaintext highlighter-rouge">igraph_eigenvector_centrality()</code> 
now works for directed graphs.</li>
  <li>Shortest path calculations with <code class="language-plaintext highlighter-rouge">get_shortest_paths()</code> and 
<code class="language-plaintext highlighter-rouge">get_shortest_paths_dijkstra()</code> can now return the edges along the paths.</li>
  <li>Betweenness calculation can now use arbitrarily large integers,
this is required for some lattice-like graphs to avoid overflow.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_bipartite_projection()</code> calculates multiplicity of edges.</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_barabasi_game()</code> was rewritten and it supports three 
algorithms now, the default algorithm does not generate multiple or
loop edges.</li>
  <li>The Watts-Strogatz graph generator, <code class="language-plaintext highlighter-rouge">igraph_watts_strogatz()</code> can 
now create graphs without loop edges.</li>
  <li>igraph should be now thread-safe, on architectures that support 
thread-local storage (Linux and Windows: yes, Mac OSX: no).</li>
</ul>

<p>We also fixed numerous bugs, too many to include them here, sorry.
You may look at our bug tracker at https://bugs.launchpad.net/igraph
to check whether a bug was fixed or not. Thanks for all the people
reporting bugs. Special thanks to Minh Van Nguyen for a lot of bug
reports, documentation fixes and contributed code!</p>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[Release Notes]]></summary></entry><entry><title type="html">python-igraph 0.6</title><link href="https://igraph.org/2012/06/11/igraph-0.6-python.html" rel="alternate" type="text/html" title="python-igraph 0.6" /><published>2012-06-11T00:00:00+00:00</published><updated>2012-06-11T00:00:00+00:00</updated><id>https://igraph.org/2012/06/11/igraph-0.6-python</id><content type="html" xml:base="https://igraph.org/2012/06/11/igraph-0.6-python.html"><![CDATA[<h2 id="release-notes">Release Notes</h2>

<p>igraph 0.6 is a major new release of igraph. It contains many new
features and major changes, a lot of bug fixes and improvements. 
As always, we are grateful to the people who sent comments, bug 
reports, questions, and specially to people who contributed code.</p>

<p>See below a list of major changes, with links to the relevant sections
of the documentation. New features are all listed here.</p>

<!--more-->

<h2 id="the-nexus-repository">The Nexus repository</h2>

<p>igraph supports the <a href="http://nexus.igraph.org">Nexus network
    repository</a> from R and from Python. Nexus is an online database
of network data sets. You can search Nexus and download network from
it directly from R and Python. See the
<a href="doc-0.6/python/igraph.nexus.NexusConnection-class.html">
documentation</a> for details.</p>

<h2 id="support-for-python-3x">Support for Python 3.x</h2>

<p>The Python interface of igraph now supports Python 3. The current release was
tested with Python 3.2 on Windows, Linux and Mac OS X. Please report any bugs
you encounter when using igraph in Python 3.x through the
usual channels.</p>

<h2 id="community-detection-improvements">Community detection improvements</h2>

<p>Community structure detection via exact modularity optimization. As
modularity optimization in an NP-complete problem, this works only for
small graphs,
<a href="doc-0.6/python/igraph.Graph-class.html#community_optimal_modularity">
Python manual</a>.</p>

<p>The multi-level modularity optimization algorithm by Blondel et
al. was added. See
<a href="doc-0.6/python/igraph.Graph-class.html#community_multilevel">
documentation</a>.</p>

<p>We support now the InfoMAP community finding method, thanks to
Emmanuel Navarro for the code. 
<a href="doc-0.6/python/igraph.Graph-class.html#community_infomap">More</a>.</p>

<p>The edge betweenness community detection method of Newman and Girvan now also
works on weighted graphs. See
the <a href="doc-0.6/python/igraph.Graph-class.html#community_edge_betweenness">
documentation</a>.</p>

<p>We have added some functions to compare various community structures.
See the <a href="doc-0.6/python/igraph.clustering-module.html#compare_communities">
documentation</a>.</p>

<p>The cohesive block finding functions were rewritten from scratch in
C. They are much faster now, and they have a nicer API, too. See
the <a href="doc-0.6/python/igraph.Graph-class.html#cohesive_blocks">
documentation</a>.</p>

<h2 id="centrality-related-functions">Centrality-related functions</h2>

<p>Personalized PageRank scores. See
the <a href="doc-0.6/python/igraph.GraphBase-class.html#personalized_pagerank">
documentation</a>.</p>

<p>Authority and hub scores, betweenness and closeness
calculations all support edge weights now. See
the <a href="doc-0.6/python/igraph.Graph-class.html">
documentation</a>.</p>

<h2 id="sugiyama-layout">Sugiyama layout</h2>

<p>Igraph now implements the Sugiyama layout algorithm for layered
directed acyclic graphs. See
the <a href="doc-0.6/python/igraph.Graph-class.html#layout_sugiyama">
documentation</a>.</p>

<h2 id="maximum-matchings-in-bipartite-graphs">Maximum matchings in bipartite graphs</h2>

<p>Igraph now implements the push-relabel algorithm and the Kuhn-Munkres algorithm
(also known as the Hungarian method) to find maximum matchings in unweighted and
weighted bipartite graphs. See
the <a href="doc-0.6/python/igraph.Graph-class.html#maximum_bipartite_matching">
documentation</a>.</p>

<h2 id="named-graph-vertices">Named graph vertices</h2>

<p>The Python interface now treats the <code class="language-plaintext highlighter-rouge">name</code> attributes in a special way.
The values of the attribute are indexed in the background, allowing the retrieval of
a vertex with a given name in amortized constant time. Furthermore, most of the
graph query methods accept vertex names as well as vertex indices.
See the <a href="doc-0.6/python/igraph.VertexSeq-class.html#find">documentation</a>
for more information.</p>

<h2 id="pretty-printed-graph-summaries">Pretty-printed graph summaries</h2>

<p>The same graph summary format used by R is now also adopted by Python.
Printing a graph with the <code class="language-plaintext highlighter-rouge">print</code> statement now prints the
summary and the edge list in a concise format:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">&gt;&gt;&gt;</span> <span class="k">print</span> <span class="n">karate</span>
<span class="n">IGRAPH</span> <span class="n">UNW</span><span class="o">-</span> <span class="mi">34</span> <span class="mi">78</span> <span class="o">--</span> <span class="n">Zachary</span><span class="sh">'</span><span class="s">s karate club network
+ attr: Author (g), Citation (g), name (g), Faction (v), id (v), name(v),
  weight (e)
+ edges (vertex names):
    Mr Hi -- Actor 2, Actor 3, Actor 4, Actor 5, ...
  Actor 2 -- Mr Hi, Actor 3, Actor 4, ...
</span><span class="gp">...</span>
</code></pre></div></div>

<p>Printing a graph with the <code class="language-plaintext highlighter-rouge">summary()</code> function (in
the igraph namespace) prints the short summary only, without the edge list:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">&gt;&gt;&gt;</span> <span class="nf">summary</span><span class="p">(</span><span class="n">karate</span><span class="p">)</span>
<span class="n">IGRAPH</span> <span class="n">UNW</span><span class="o">-</span> <span class="mi">34</span> <span class="mi">78</span> <span class="o">--</span> <span class="n">Zachary</span><span class="sh">'</span><span class="s">s karate club network
+ attr: Author (g), Citation (g), name (g), Faction (v), id (v), name(v),
  weight (e)
</span></code></pre></div></div>

<p>Printing a graph with <code class="language-plaintext highlighter-rouge">summary(graph, full=True)</code> prints
the summary, the edge list, the vertex and the edge attributes as well.</p>

<h2 id="easier-manipulation-of-graphs">Easier manipulation of graphs</h2>

<p>You can treat the graph as a virtual adjacency matrix. See the details in
the <a href="doc-0.6/python/igraph.Graph-class.html">documentation</a>.</p>

<h2 id="mark-groups-of-vertices-in-r-and-python-plots">Mark groups of vertices in R and Python plots</h2>

<p>You can mark vertex groups on graph plots, using shaded
areas. Communities and cohesive blocks are plotted using technique by
default. See the <code class="language-plaintext highlighter-rouge">mark_groups</code> argument of the
<a href="doc-0.6/python/igraph.Graph-class.html#__plot__"><code class="language-plaintext highlighter-rouge">Graph.__plot__</code></a>
function.</p>

<h2 id="refactored-graph-drawers-in-the-python-interface">Refactored graph drawers in the Python interface</h2>

<p>Graphs in the Python interface are plotted by graph drawer classes now instead
of a monolithic plotting function. This allows one to replace the
<a href="doc-0.6/python/igraph.drawing.graph.DefaultGraphDrawer-class.html">default
	graph drawer</a> with custom graph drawers; for instance, a drawer that
sends an igraph graph to an
<a href="doc-0.6/python/igraph.drawing.graph.UbiGraphDrawer-class.html">UbiGraph display</a>
or to
<a href="doc-0.6/python/igraph.drawing.graph.CytoscapeGraphDrawer-class.html">Cytoscape</a>.
The default graph drawer also allows the partial customization of the plot with
pluggable <a href="doc-0.6/python/igraph.drawing.shapes-module.html">vertex shapes</a>
and <a href="doc-0.6/python/igraph.drawing.edge-module.html">edge drawers</a>.</p>

<h2 id="better-handling-of-attributes-in-r-and-python">Better handling of attributes in R and Python</h2>

<p>In R and Python, many igraph functions keep the vertex, edge and graph attributes
now, when one manipulates the graph. The attributes can also be
combined using a flexible API. See the 
<code class="language-plaintext highlighter-rouge">combine_edges</code> and <code class="language-plaintext highlighter-rouge">combine_attrs</code> arguments
of many graph methods in the <a href="doc-0.6/python/igraph.Graph-class.html">
Python documentation</a> for more.</p>

<h2 id="new-in-the-python-interface">New in the Python interface</h2>

<h2 id="general-updates">General updates</h2>

<ul>
  <li>Python 3.x is now supported by the Python interface.</li>
  <li>Graphs can now be treated as adjacency matrices by indexing the
graph object using a pair of vertex ids or vertex names.</li>
  <li>Methods accepting a vertex id or a list of vertex ids should now
also accept vertex names instead. Names should be given in the
<code class="language-plaintext highlighter-rouge">name</code> vertex attribute.</li>
  <li>Igraph now supports loading graphs from the Nexus online data
repository, see <code class="language-plaintext highlighter-rouge">Nexus.get()</code>, <code class="language-plaintext highlighter-rouge">Nexus.info()</code>, <code class="language-plaintext highlighter-rouge">Nexus.list()</code> and 
<code class="language-plaintext highlighter-rouge">Nexus.search()</code>.</li>
</ul>

<h2 id="community-detection">Community detection</h2>

<ul>
  <li>The multi-level modularity optimization community structure detection 
algorithm by Blondel et al. was added, see <code class="language-plaintext highlighter-rouge">Graph.community_multilevel()</code>.</li>
  <li>Distance between two community structures: <code class="language-plaintext highlighter-rouge">compare_communities()</code>.</li>
  <li>Community structure via exact modularity optimization,
<code class="language-plaintext highlighter-rouge">Graph.community_optimal_modularity()</code>.</li>
  <li>Added the InfoMAP community finding method, thanks to Emmanuel
Navarro for the code. See <code class="language-plaintext highlighter-rouge">Graph.community_infomap()</code>.</li>
  <li>Edge betweenness community detection now supports weighted graphs;
see <code class="language-plaintext highlighter-rouge">Graph.community_edge_betweenness()</code>.</li>
</ul>

<h2 id="shortest-paths">Shortest paths</h2>

<ul>
  <li>Eccentricity (<code class="language-plaintext highlighter-rouge">Graph.eccentricity()</code>), and radius (<code class="language-plaintext highlighter-rouge">Graph.radius()</code>)
calculations.</li>
  <li>Shortest path calculations with <code class="language-plaintext highlighter-rouge">Graph.get_shortest_paths()</code> can now 
return the vertex or edge ids along the shortest paths.</li>
  <li><code class="language-plaintext highlighter-rouge">Graph.get_all_shortest_paths()</code> now supports edge weights.</li>
  <li>Neighborhood of a vertex can now be retrieved with <code class="language-plaintext highlighter-rouge">Graph.neighborhood()</code></li>
</ul>

<h2 id="centrality">Centrality</h2>

<ul>
  <li>Personalized Page-Rank scores, see <code class="language-plaintext highlighter-rouge">Graph.pagerank()</code>.</li>
  <li>Authority (<code class="language-plaintext highlighter-rouge">Graph.authority_score()</code>) and hub (<code class="language-plaintext highlighter-rouge">Graph.hub_score()</code>)
scores support edge weights now.</li>
  <li>Support edge weights in betweenness and closeness calculations.</li>
  <li>Eigenvector centrality calculation, <code class="language-plaintext highlighter-rouge">Graph.evcent()</code> now works for 
directed graphs.</li>
  <li>Betweenness calculation can now use arbitrarily large integers,
this is required for some lattice-like graphs to avoid overflow.</li>
</ul>

<h2 id="inputoutput-and-file-formats">Input/output and file formats</h2>

<ul>
  <li>Support the DL file format in <code class="language-plaintext highlighter-rouge">Graph.read()</code>. See 
http://www.analytictech.com/networks/dataentry.htm.</li>
  <li>Support writing the LEDA file format in <code class="language-plaintext highlighter-rouge">Graph.write()</code>.</li>
</ul>

<h2 id="plotting-and-layouts">Plotting and layouts</h2>

<ul>
  <li>Star layout: <code class="language-plaintext highlighter-rouge">Graph.layout_star()</code>.</li>
  <li>Layout based on multidimensional scaling, <code class="language-plaintext highlighter-rouge">Graph.layout_mds()</code></li>
  <li>Grid layouts: <code class="language-plaintext highlighter-rouge">Graph.layout_grid()</code>, <code class="language-plaintext highlighter-rouge">Graph.layout_grid_3d()</code></li>
  <li>Sugiyama layout algorithm for layered directed acyclic graphs:
<code class="language-plaintext highlighter-rouge">Graph.layout_sugiyama()</code>.</li>
  <li>It is possible to mark vertex groups on plots using the <code class="language-plaintext highlighter-rouge">mark_groups</code>
keyword argument of <code class="language-plaintext highlighter-rouge">Graph.__plot__()</code>. Communities and cohesive blocks are
plotted using this by default. Note that the same keyword argument is
also accepted by <code class="language-plaintext highlighter-rouge">plot()</code> of course.</li>
  <li>Redesigned graph plotting framework: graph drawers are now derived
from <code class="language-plaintext highlighter-rouge">AbstractGraphDrawer</code>. The framework allows the implementation of
custom graph drawers such as <code class="language-plaintext highlighter-rouge">UbiGraphDrawer</code> or <code class="language-plaintext highlighter-rouge">CytoscapeDrawer</code>.
Edges are drawn by edge drawer classes (derived from <code class="language-plaintext highlighter-rouge">AbstractEdgeDrawer</code>),
custom vertex shapes are now possible by <code class="language-plaintext highlighter-rouge">ShapeDrawers</code>.</li>
  <li>Multiple edges are now drawn curved to make them visible. See
the <code class="language-plaintext highlighter-rouge">autocurve</code> and <code class="language-plaintext highlighter-rouge">edge_curved</code> keyword arguments of
<code class="language-plaintext highlighter-rouge">Graph.__plot__()</code>. Note that these are also accepted by <code class="language-plaintext highlighter-rouge">plot()</code> of
course.</li>
  <li>Better label placement algorithm supports multi-line labels and the
specification of the distance and angle of the label relative to the
center of the node.</li>
  <li>Added <code class="language-plaintext highlighter-rouge">rescale()</code> function to rescale a list of numeric values to a
different range, suitable for plotting.</li>
</ul>

<h2 id="graph-generators">Graph generators</h2>

<ul>
  <li>New graph generators: <code class="language-plaintext highlighter-rouge">Graph.Static_Fitness()</code>, <code class="language-plaintext highlighter-rouge">Graph.Static_Power_Law()</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">Graph.Barabasi()</code> was rewritten and it supports three algorithms now,
the default algorithm does not generate multiple or loop edges.
The graph generation process can now start from a supplied graph.</li>
  <li>The Watts-Strogatz graph generator, <code class="language-plaintext highlighter-rouge">Graph.Watts_Strogatz()</code> can 
now create graphs without loop edges.</li>
</ul>

<h2 id="others">Others</h2>

<ul>
  <li>Vertex and edge attributes are handled much better now. They 
are kept whenever possible, and can be combined via the
<code class="language-plaintext highlighter-rouge">combine_edges</code> and <code class="language-plaintext highlighter-rouge">combine_attrs</code> keyword arguments of
<code class="language-plaintext highlighter-rouge">Graph.simplify()</code>, <code class="language-plaintext highlighter-rouge">Graph.contract_vertices()</code> and
<code class="language-plaintext highlighter-rouge">Graph.to_undirected()</code>.</li>
  <li>Graphs are now printed in a more concise and informative way.
<code class="language-plaintext highlighter-rouge">print()</code> prints a short information header and the edge list,
while <code class="language-plaintext highlighter-rouge">summary()</code> prints the heder only. <code class="language-plaintext highlighter-rouge">summary()</code> also
understands keyword arguments that control which parts of the
output should be added; see the <code class="language-plaintext highlighter-rouge">GraphSummary</code> class.</li>
  <li>Motif search can now call a callback function for every motif found,
see <code class="language-plaintext highlighter-rouge">Graph.motifs_randesu()</code></li>
  <li>Transitivity calculations now support weights,
see <code class="language-plaintext highlighter-rouge">Graph.transitivity_local_undirected()</code></li>
  <li>Added cohesive block calculation, see <code class="language-plaintext highlighter-rouge">Graph.cohesive_blocks()</code></li>
  <li>Added feedback arc sets, see <code class="language-plaintext highlighter-rouge">Graph.feedback_arc_set()</code></li>
  <li>It is now possible to ask for the Jaccard or Dice similarities of
pairs of vertices only, see <code class="language-plaintext highlighter-rouge">Graph.similarity_jaccard_pairs()</code>
and similar functions.</li>
  <li>Support vertex and edge coloring in the VF2 (sub)graph isomorphism 
functions (<code class="language-plaintext highlighter-rouge">Graph.isomorphic_vf2()</code>, <code class="language-plaintext highlighter-rouge">Graph.count_isomorphisms.vf2()</code>,
<code class="language-plaintext highlighter-rouge">Graph.get_isomorphisms_vf2()</code>, <code class="language-plaintext highlighter-rouge">Graph.subisomorphic_vf2()</code>, 
<code class="language-plaintext highlighter-rouge">Graph.count_subisomorphisms_vf2()</code>, <code class="language-plaintext highlighter-rouge">Graph.get_subisomorphisms_vf2()</code>).</li>
  <li>Assortativity coefficient, <code class="language-plaintext highlighter-rouge">Graph.assortativity()</code>,
<code class="language-plaintext highlighter-rouge">Graph.assortativity_nominal()</code> and <code class="language-plaintext highlighter-rouge">Graph.assortativity_degree()</code>.</li>
  <li>Function to calculate a non-induced subraph: <code class="language-plaintext highlighter-rouge">Graph.subgraph_edges()</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">Graph.has_multiple()</code> to decide whether a graph has multiple edges.</li>
  <li>Added a function to calculate a diversity score for the vertices,
<code class="language-plaintext highlighter-rouge">Graph.diversity()</code>.</li>
  <li>Graph Laplacian calculation (<code class="language-plaintext highlighter-rouge">Graph.laplacian()</code>) supports edge 
weights now.</li>
  <li><code class="language-plaintext highlighter-rouge">Graph.bipartite_projection()</code> calculates multiplicity of edges.</li>
  <li>Vertex contraction, <code class="language-plaintext highlighter-rouge">Graph.contract_vertices()</code>.</li>
</ul>

<p>We also fixed numerous bugs, too many to include them here, sorry.
You may look at our bug tracker at https://bugs.launchpad.net/igraph
to check whether a bug was fixed or not. Thanks for all the people
reporting bugs. Special thanks to Minh Van Nguyen for a lot of bug
reports, documentation fixes and contributed code!</p>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[Release Notes]]></summary></entry><entry><title type="html">R/igraph 0.6</title><link href="https://igraph.org/2012/06/11/igraph-0.6-r.html" rel="alternate" type="text/html" title="R/igraph 0.6" /><published>2012-06-11T00:00:00+00:00</published><updated>2012-06-11T00:00:00+00:00</updated><id>https://igraph.org/2012/06/11/igraph-0.6-r</id><content type="html" xml:base="https://igraph.org/2012/06/11/igraph-0.6-r.html"><![CDATA[<h2 id="release-notes">Release Notes</h2>

<p>igraph 0.6 is a major new release of igraph. It contains many new
features and major changes, a lot of bug fixes and improvements. 
As always, we are grateful to the people who sent comments, bug 
reports, questions, and specially to people who contributed code.</p>

<p>See below a list of major changes, with links to the relevant sections
of the documentation. New features in R all listed here.</p>

<p>See at the end for a (more) complete list of changes.</p>

<!--more-->

<h2 id="the-nexus-repository">The Nexus repository</h2>

<p>igraph supports the <a href="http://nexus.igraph.org">Nexus network
    repository</a> from R and from Python. Nexus is an online database
of network data sets. You can search Nexus and download network from
it directly from R and Python. See the <a href="doc-0.6/R/nexus.html">
    manual</a> for details.</p>

<h2 id="numbering-from-1-in-r">Numbering from 1 in R</h2>

<p>The biggest change in the R interface is that starting from this version
vertices and edges are numbered from one. This change might be
painful for many people, because it makes already existing code
incompatible with igraph 0.6. To make the switch easier, there is now an
<a href="http://cran.r-project.org/web/packages/igraph0/index.html">
igraph0</a> package on CRAN; igraph0 uses 0-based vertex and
edge ids, and it can be used to run old code. Note, however, that
igraph0 will not be developed in the future. Please use the 
<a href="http://cran.r-project.org/web/packages/igraph/index.html">
igraph</a> package for current and future work.</p>

<p>(Also note that in Python and C vertices and edges are still numbered
from zero, as these languages traditionally use zero-based indexing.)</p>

<h2 id="community-detection-improvements">Community detection improvements</h2>

<p>Community structure detection via exact modularity optimization. As
modularity optimization in an NP-complete problem, this works only for
small graphs. See the
<a href="doc-0.6/R/optimal.community.html">manual</a>.</p>

<p>The multi-level modularity optimization algorithm by Blondel et
al. was added. See
the <a href="doc-0.6/R/multilevel.community.html">documentation</a>.</p>

<p>Hierarchical random graphs and community finding, based on the code
from Aaron Clauset. See the <a href="doc-0.6/R/hrg.html">manual</a>.</p>

<p>We support now the InfoMAP community finding method, thanks to
Emmanuel Navarro for the code. See the <a href="doc-0.6/R/infomap.html">
manual</a>.</p>

<p>The edge betweenness community detection method of Newman and Girvan now
also works on weighted graphs. See the
<a href="doc-0.6/R/community.edge.betweenness.html">documentation</a>.</p>

<p>We have added some functions to compare various community structures.
See the<a href="doc-0.6/R/compare.communities.html">documentation</a>.</p>

<p>Igraph now implements the Spectral Coarse Graining method, by David
Morton, our implementation is based on his code. See the 
<a href="doc-0.6/R/scg.html">documentation</a>.</p>

<p>The cohesive block finding functions were rewritten from scratch in
C. They are much faster now, and they have a nicer API, too. See
the <a href="doc-0.6/R/cohesive.blocks.html">documentation</a>.</p>

<p>All community detection functions return a
<code class="language-plaintext highlighter-rouge">communities</code> object now. We have defined various
operations for these objects, see the
<a href="doc-0.6/R/communities.html">R manual</a> for more.</p>

<h2 id="centrality-related-functions">Centrality-related functions</h2>

<p>Centralization scores for degree, closeness, betweenness and 
eigenvector centrality. See
the <a href="doc-0.6/R/centralization.html">documentation</a>.</p>

<p>Personalized PageRank scores. See
the <a href="doc-0.6/R/page.rank.html">documentation</a>.</p>

<p>Authority and hub scores, betweenness and closeness
calculations all support edge weights now. See
the <a href="doc-0.6/R/00Index.html">documentation</a>.</p>

<h2 id="sugiyama-layout">Sugiyama layout</h2>

<p>Igraph now implements the Sugiyama layout algorithm for layered
directed acyclic graphs. See
the <a href="doc-0.6/R/layout.sugiyama.html">documentation</a>.</p>

<h2 id="maximum-matchings-in-bipartite-graphs">Maximum matchings in bipartite graphs</h2>

<p>Igraph now implements the push-relabel algorithm and the
Kuhn-Munkres algorithm (also known as the Hungarian method) to find
maximum matchings in unweighted and weighted bipartite graphs. See
the <a href="doc-0.6/R/matching.html">documentation</a>.</p>

<h2 id="hiding-the-graph-structure-by-default">Hiding the graph structure by default</h2>

<p>If you type in the name of an igraph object, the edges of the 
graph are not dumped to the screen any more, only a short summary of
the graph is printed:</p>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">&gt;</span><span class="w"> </span><span class="n">karate</span><span class="w">
</span><span class="n">IGRAPH</span><span class="w"> </span><span class="n">UNW</span><span class="o">-</span><span class="w"> </span><span class="m">34</span><span class="w"> </span><span class="m">78</span><span class="w"> </span><span class="o">--</span><span class="w"> </span><span class="n">Zachary</span><span class="err">'</span><span class="n">s</span><span class="w"> </span><span class="n">karate</span><span class="w"> </span><span class="n">club</span><span class="w"> </span><span class="n">network</span><span class="w">
</span><span class="o">+</span><span class="w"> </span><span class="n">attr</span><span class="o">:</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="p">(</span><span class="n">g</span><span class="o">/</span><span class="n">c</span><span class="p">),</span><span class="w"> </span><span class="n">Citation</span><span class="w"> </span><span class="p">(</span><span class="n">g</span><span class="o">/</span><span class="n">c</span><span class="p">),</span><span class="w"> </span><span class="n">Author</span><span class="w"> </span><span class="p">(</span><span class="n">g</span><span class="o">/</span><span class="n">c</span><span class="p">),</span><span class="w"> </span><span class="n">Faction</span><span class="w"> </span><span class="p">(</span><span class="n">v</span><span class="o">/</span><span class="n">n</span><span class="p">),</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="p">(</span><span class="n">v</span><span class="o">/</span><span class="n">c</span><span class="p">),</span><span class="w"> </span><span class="n">weight</span><span class="w"> </span><span class="p">(</span><span class="n">e</span><span class="o">/</span><span class="n">n</span><span class="p">)</span><span class="w">
</span></code></pre></div></div>

<p>To see the graph structure, you can use the <code class="language-plaintext highlighter-rouge">str()</code> function.
See more in the <a href="doc-0.6/R/print.graph.html">R
    documentation</a>.</p>

<h2 id="easier-manipulation-of-graphs">Easier manipulation of graphs</h2>

<p>There are now new and easier ways to add new vertices/edges to a
graph, or remove existing ones. See the details in the 
<a href="doc-0.6/R/graph.structure.html">R documentation</a>. In Python,
you can treat the graph as a virtual adjacency matrix. See the details in
the <a href="doc-0.6/python/igraph.Graph-class.html">Python
	documentation</a>.</p>

<h2 id="the-igraphdata-package">The <code class="language-plaintext highlighter-rouge">igraphdata</code> package</h2>

<p>The new R package 
<a href="http://cran.r-project.org/web/packages/igraphdata/index.html">
igraphdata</a> contains some example graph data sets.</p>

<h2 id="mark-groups-of-vertices-in-r-and-python-plots">Mark groups of vertices in R and Python plots</h2>

<p>You can mark vertex groups on graph plots, using shaded
areas. Communities and cohesive blocks are plotted using technique by
default. See the <code class="language-plaintext highlighter-rouge">mark.groups</code> argument of
the <a href="doc-0.6/R/plot.graph.html"><code class="language-plaintext highlighter-rouge">plot.igraph()</code></a>
function.</p>

<h2 id="r-igraph-demos-in-the-r-package">[R] igraph demos in the R package</h2>

<p>We have included some demos in the igraph R package, to get a list of
the demos, type this at your R prompt:</p>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">&gt;</span><span class="w"> </span><span class="n">demo</span><span class="p">(</span><span class="n">package</span><span class="o">=</span><span class="s2">"igraph"</span><span class="p">)</span><span class="w">
</span><span class="n">Demos</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">package</span><span class="w"> </span><span class="err">‘</span><span class="n">igraph</span><span class="err">’</span><span class="o">:</span><span class="w">
  </span><span class="n">centrality</span><span class="w">              </span><span class="n">Classic</span><span class="w"> </span><span class="n">and</span><span class="w"> </span><span class="n">other</span><span class="w"> </span><span class="n">vertex</span><span class="w"> </span><span class="n">centrality</span><span class="w"> </span><span class="n">indices</span><span class="w">
  </span><span class="n">cohesive</span><span class="w">                </span><span class="n">Cohesive</span><span class="w"> </span><span class="n">blocking</span><span class="p">,</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">Moody</span><span class="w"> </span><span class="o">&amp;</span><span class="w"> </span><span class="n">White</span><span class="w"> </span><span class="n">method</span><span class="w">
  </span><span class="n">community</span><span class="w">               </span><span class="n">Community</span><span class="w"> </span><span class="n">structure</span><span class="w"> </span><span class="n">detection</span><span class="w">
  </span><span class="n">crashR</span><span class="w">                  </span><span class="n">A</span><span class="w"> </span><span class="n">crash</span><span class="o">-</span><span class="n">course</span><span class="w"> </span><span class="n">into</span><span class="w"> </span><span class="n">R</span><span class="w">
  </span><span class="n">smallworld</span><span class="w">              </span><span class="n">Small</span><span class="o">-</span><span class="n">world</span><span class="w"> </span><span class="n">networks</span><span class="w">
</span></code></pre></div></div>

<h2 id="better-handling-of-attributes-in-r-and-python">Better handling of attributes in R and Python</h2>

<p>Many igraph functions keep the vertex, edge and graph attributes
now, when one manipulates the graph. The attributes can also be
combined using a flexible API. See
the <a href="doc-0.6/R/attribute.combination.html">manual</a>.</p>

<h2 id="r-major-new-features">R: Major new features</h2>

<ul>
  <li>Vertices and edges are numbered from 1 instead of 0. 
Note that this makes most of the old R igraph code incompatible
with igraph 0.6. If you want to use your old code, please use 
the <code class="language-plaintext highlighter-rouge">igraph0</code> package.</li>
  <li>The <code class="language-plaintext highlighter-rouge">[</code> and <code class="language-plaintext highlighter-rouge">[[</code> operators can now be used on igraph graphs, 
for <code class="language-plaintext highlighter-rouge">[</code> the graph behaves as an adjacency matrix, for <code class="language-plaintext highlighter-rouge">[[</code> is 
is treated as an adjacency list. It is also much simpler to
manipulate the graph structure, i.e. add/remove edges and vertices, 
with some new operators. See more at <code class="language-plaintext highlighter-rouge">?graph.structure</code>.</li>
  <li>In all functions that take a vector or list of vertices or edges, 
vertex/edge names can be given instead of the numeric ids.</li>
  <li>New package <code class="language-plaintext highlighter-rouge">igraphdata</code>, contains a number of data sets that can
be used directly in igraph.</li>
  <li>Igraph now supports loading graphs from the Nexus online data
repository, see <code class="language-plaintext highlighter-rouge">nexus.get()</code>, <code class="language-plaintext highlighter-rouge">nexus.info()</code>, <code class="language-plaintext highlighter-rouge">nexus.list()</code> and 
<code class="language-plaintext highlighter-rouge">nexus.search()</code>.</li>
  <li>All the community structure finding algorithm return a <code class="language-plaintext highlighter-rouge">communities</code>
object now, which has a bunch of useful operations, see 
<code class="language-plaintext highlighter-rouge">?communities</code> for details.</li>
  <li>Vertex and edge attributes are handled much better now. They 
are kept whenever possible, and can be combined via a flexible API.
See <code class="language-plaintext highlighter-rouge">?attribute.combination</code>.</li>
  <li>R now prints igraph graphs to the screen in a more structured and 
informative way. The output of <code class="language-plaintext highlighter-rouge">summary()</code> was also updated
accordingly.</li>
</ul>

<h2 id="r-other-new-features">R: Other new features</h2>

<ul>
  <li>It is possible to mark vertex groups on plots, via
shading. Communities and cohesive blocks are plotted using this by
default.</li>
  <li>Some igraph demos are now available, see a list via 
<code class="language-plaintext highlighter-rouge">demo(package="igraph")</code>.</li>
  <li>igraph now tries to select the optimal layout algorithm, when
plotting a graph.</li>
  <li>Added a simple console, using Tcl/Tk. It contains a text area
for status messages and also a status bar. See <code class="language-plaintext highlighter-rouge">igraph.console()</code>.</li>
  <li>Reimplemented igraph options support, see <code class="language-plaintext highlighter-rouge">igraph.options()</code> and 
<code class="language-plaintext highlighter-rouge">getIgraphOpt()</code>.</li>
  <li>Igraph functions can now print status messages.</li>
</ul>

<h2 id="r-new-or-updated-functions">R: New or updated functions</h2>

<h2 id="community-detection">Community detection</h2>

<ul>
  <li>The multi-level modularity optimization community structure detection 
algorithm by Blondel et al. was added, see <code class="language-plaintext highlighter-rouge">multilevel.community()</code>.</li>
  <li>Distance between two community structures: <code class="language-plaintext highlighter-rouge">compare.communities()</code>.</li>
  <li>Community structure via exact modularity optimization,
<code class="language-plaintext highlighter-rouge">optimal.community()</code>.</li>
  <li>Hierarchical random graphs and community finding, porting the code
from Aaron Clauset. See <code class="language-plaintext highlighter-rouge">hrg.game()</code>, <code class="language-plaintext highlighter-rouge">hrg.fit()</code>, etc.</li>
  <li>Added the InfoMAP community finding method, thanks to Emmanuel
Navarro for the code. See <code class="language-plaintext highlighter-rouge">infomap.community()</code>.</li>
</ul>

<h2 id="shortest-paths">Shortest paths</h2>

<ul>
  <li>Eccentricity (<code class="language-plaintext highlighter-rouge">eccentricity()</code>), and radius (<code class="language-plaintext highlighter-rouge">radius()</code>) calculations.</li>
  <li>Shortest path calculations with <code class="language-plaintext highlighter-rouge">get.shortest.paths()</code> can now 
return the edges along the shortest paths.</li>
  <li><code class="language-plaintext highlighter-rouge">get.all.shortest.paths()</code> now supports edge weights.</li>
</ul>

<h2 id="centrality">Centrality</h2>

<ul>
  <li>Centralization scores for degree, closeness, betweenness and 
eigenvector centrality. See <code class="language-plaintext highlighter-rouge">centralization.scores()</code>.</li>
  <li>Personalized Page-Rank scores, see <code class="language-plaintext highlighter-rouge">page.rank()</code>.</li>
  <li>Subgraph centrality, <code class="language-plaintext highlighter-rouge">subgraph.centrality()</code>.</li>
  <li>Authority (<code class="language-plaintext highlighter-rouge">authority.score()</code>) and hub (<code class="language-plaintext highlighter-rouge">hub.score()</code>) scores support 
edge weights now.</li>
  <li>Support edge weights in betweenness and closeness calculations.</li>
  <li><code class="language-plaintext highlighter-rouge">bonpow()</code>, Bonacich’s power centrality and <code class="language-plaintext highlighter-rouge">alpha.centrality()</code>,
Alpha centrality calculations now use sparse matrices by default.</li>
  <li>Eigenvector centrality calculation, <code class="language-plaintext highlighter-rouge">evcent()</code> now works for 
directed graphs.</li>
  <li>Betweenness calculation can now use arbitrarily large integers,
this is required for some lattice-like graphs to avoid overflow.</li>
</ul>

<h2 id="inputoutput-and-file-formats">Input/output and file formats</h2>

<ul>
  <li>Support the DL file format in <code class="language-plaintext highlighter-rouge">graph.read()</code>. See 
http://www.analytictech.com/networks/dataentry.htm.</li>
  <li>Support writing the LEDA file format in <code class="language-plaintext highlighter-rouge">write.graph()</code>.</li>
</ul>

<h2 id="plotting-and-layouts">Plotting and layouts</h2>

<ul>
  <li>Star layout: <code class="language-plaintext highlighter-rouge">layout.star()</code>.</li>
  <li>Layout based on multidimensional scaling, <code class="language-plaintext highlighter-rouge">layout.mds()</code>.</li>
  <li>New layouts <code class="language-plaintext highlighter-rouge">layout.grid()</code> and <code class="language-plaintext highlighter-rouge">layout.grid.3d()</code>.</li>
  <li>Sugiyama layout algorithm for layered directed acyclic graphs, 
<code class="language-plaintext highlighter-rouge">layout.sugiyama()</code>.</li>
</ul>

<h2 id="graph-generators">Graph generators</h2>

<ul>
  <li>New graph generators: <code class="language-plaintext highlighter-rouge">static.fitness.game()</code>, <code class="language-plaintext highlighter-rouge">static.power.law.game()</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">barabasi.game()</code> was rewritten and it supports three algorithms now,
the default algorithm does not generate multiple or loop edges.
The graph generation process can now start from a supplied graph.</li>
  <li>The Watts-Strogatz graph generator, <code class="language-plaintext highlighter-rouge">igraph_watts_strogatz()</code> can 
now create graphs without loop edges.</li>
</ul>

<h2 id="others">Others</h2>

<ul>
  <li>Added the Spectral Coarse Graining algorithm, see <code class="language-plaintext highlighter-rouge">scg()</code>.</li>
  <li>The <code class="language-plaintext highlighter-rouge">cohesive.blocks()</code> function was rewritten in C, it is much faster
now. It has a nicer API, too. See <code class="language-plaintext highlighter-rouge">demo("cohesive")</code>.</li>
  <li>Added generic breadth-first and depth-first search implementations
with many callbacks, <code class="language-plaintext highlighter-rouge">graph.bfs()</code> and <code class="language-plaintext highlighter-rouge">graph_dfs()</code>.</li>
  <li>Support vertex and edge coloring in the VF2 (sub)graph isomorphism 
functions (<code class="language-plaintext highlighter-rouge">graph.isomorphic.vf2()</code>, <code class="language-plaintext highlighter-rouge">graph.count.isomorphisms.vf2()</code>, 
<code class="language-plaintext highlighter-rouge">graph.get.isomorphisms.vf2()</code>, <code class="language-plaintext highlighter-rouge">graph.subisomorphic.vf2()</code>, 
<code class="language-plaintext highlighter-rouge">graph.count.subisomorphisms.vf2()</code>, <code class="language-plaintext highlighter-rouge">graph.get.subisomorphisms.vf2()</code>).</li>
  <li>Assortativity coefficient, <code class="language-plaintext highlighter-rouge">assortativity()</code>, <code class="language-plaintext highlighter-rouge">assortativity.nominal()</code>
and <code class="language-plaintext highlighter-rouge">assortativity.degree()</code>.</li>
  <li>Vertex operators that work by vertex names: 
<code class="language-plaintext highlighter-rouge">graph.intersection.by.name()</code>, <code class="language-plaintext highlighter-rouge">graph.union.by.name()</code>,
<code class="language-plaintext highlighter-rouge">graph.difference.by.name()</code>. Thanks to Magnus Torfason for 
contributing his code!</li>
  <li>Function to calculate a non-induced subraph: <code class="language-plaintext highlighter-rouge">subgraph.edges()</code>.</li>
  <li>More comprehensive maximum flow and minimum cut calculation, 
see functions <code class="language-plaintext highlighter-rouge">graph.maxflow()</code>, <code class="language-plaintext highlighter-rouge">graph.mincut()</code>, <code class="language-plaintext highlighter-rouge">stCuts()</code>, <code class="language-plaintext highlighter-rouge">stMincuts()</code>.</li>
  <li>Check whether a directed graph is a DAG, <code class="language-plaintext highlighter-rouge">is.dag()</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">has.multiple()</code> to decide whether a graph has multiple edges.</li>
  <li>Added a function to calculate a diversity score for the vertices,
<code class="language-plaintext highlighter-rouge">graph.diversity()</code>.</li>
  <li>Graph Laplacian calculation (<code class="language-plaintext highlighter-rouge">graph.laplacian()</code>) supports edge 
weights now.</li>
  <li>Biconnected component calculation, <code class="language-plaintext highlighter-rouge">biconnected.components()</code> 
now returns the components themselves.</li>
  <li><code class="language-plaintext highlighter-rouge">bipartite.projection()</code> calculates multiplicity of edges.</li>
  <li>Maximum cardinality search: <code class="language-plaintext highlighter-rouge">maximum.cardinality.search()</code> and 
chordality test: <code class="language-plaintext highlighter-rouge">is.chordal()</code></li>
  <li>Convex hull computation, <code class="language-plaintext highlighter-rouge">convex.hull()</code>.</li>
  <li>Contract vertices, <code class="language-plaintext highlighter-rouge">contract.vertices()</code>.</li>
</ul>

<p>We also fixed numerous bugs, too many to include them here, sorry.
You may look at our bug tracker at https://bugs.launchpad.net/igraph
to check whether a bug was fixed or not. Thanks for all the people
reporting bugs. Special thanks to Minh Van Nguyen for a lot of bug
reports, documentation fixes and contributed code!</p>]]></content><author><name></name></author><category term="r" /><summary type="html"><![CDATA[Release Notes]]></summary></entry><entry><title type="html">C/igraph 0.5.3</title><link href="https://igraph.org/2009/11/22/igraph-0.5.3-c.html" rel="alternate" type="text/html" title="C/igraph 0.5.3" /><published>2009-11-22T00:00:00+00:00</published><updated>2009-11-22T00:00:00+00:00</updated><id>https://igraph.org/2009/11/22/igraph-0.5.3-c</id><content type="html" xml:base="https://igraph.org/2009/11/22/igraph-0.5.3-c.html"><![CDATA[<h2 id="bugs-corrected">Bugs corrected</h2>

<ul>
  <li>Betweenness and edge betweenness functions work for graphs with
many shortest paths now (up to the limit of <code class="language-plaintext highlighter-rouge">long long int</code>)</li>
  <li>The configure script fails if there is no C compiler available</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">igraph_community_spinglass</code>, when csize was a <code class="language-plaintext highlighter-rouge">NULL</code>
pointer, but membership was not</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">igraph_bipartite_projection</code> that caused occasional
crashes on some systems</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[Bugs corrected]]></summary></entry><entry><title type="html">python-igraph 0.5.3</title><link href="https://igraph.org/2009/11/22/igraph-0.5.3-python.html" rel="alternate" type="text/html" title="python-igraph 0.5.3" /><published>2009-11-22T00:00:00+00:00</published><updated>2009-11-22T00:00:00+00:00</updated><id>https://igraph.org/2009/11/22/igraph-0.5.3-python</id><content type="html" xml:base="https://igraph.org/2009/11/22/igraph-0.5.3-python.html"><![CDATA[<h2 id="new-in-the-python-interface">New in the Python interface</h2>

<ul>
  <li>Added support for weighted diameter</li>
  <li><code class="language-plaintext highlighter-rouge">get_eid()</code> considers edge directions by default from now on</li>
  <li>Fixed a memory leak in the attribute handler</li>
  <li><code class="language-plaintext highlighter-rouge">NaN</code> and <code class="language-plaintext highlighter-rouge">inf</code> are treated correctly now</li>
</ul>

<!--more-->

<h2 id="bugs-corrected-in-the-c-layer">Bugs corrected in the C layer</h2>

<ul>
  <li>Betweenness and edge betweenness functions work for graphs with
many shortest paths now (up to the limit of <code class="language-plaintext highlighter-rouge">long long int</code>)</li>
  <li>The configure script fails if there is no C compiler available</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">igraph_community_spinglass</code>, when csize was a <code class="language-plaintext highlighter-rouge">NULL</code>
pointer, but membership was not</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">igraph_bipartite_projection</code> that caused occasional
crashes on some systems</li>
</ul>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[New in the Python interface]]></summary></entry><entry><title type="html">R/igraph 0.5.3</title><link href="https://igraph.org/2009/11/22/igraph-0.5.3-r.html" rel="alternate" type="text/html" title="R/igraph 0.5.3" /><published>2009-11-22T00:00:00+00:00</published><updated>2009-11-22T00:00:00+00:00</updated><id>https://igraph.org/2009/11/22/igraph-0.5.3-r</id><content type="html" xml:base="https://igraph.org/2009/11/22/igraph-0.5.3-r.html"><![CDATA[<h2 id="bugs-corrected-in-the-r-interface">Bugs corrected in the R interface</h2>

<ul>
  <li>Some small changes to make <code class="language-plaintext highlighter-rouge">R CMD check</code> clean</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">graph.incidence</code>, the <code class="language-plaintext highlighter-rouge">directed</code> and <code class="language-plaintext highlighter-rouge">mode</code> arguments 
were not handled correctly</li>
  <li>Betweenness and edge betweenness functions work for graphs with
many shortest paths now (up to the limit of long long int)</li>
  <li>When compiling the package, the configure script fails if there is
no C compiler available</li>
  <li><code class="language-plaintext highlighter-rouge">igraph.from.graphNEL</code> creates the right number of loop edges now</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">bipartite.projection()</code> that caused occasional crashes 
on some systems</li>
</ul>]]></content><author><name></name></author><category term="r" /><summary type="html"><![CDATA[Bugs corrected in the R interface]]></summary></entry><entry><title type="html">C/igraph 0.5.2</title><link href="https://igraph.org/2009/04/10/igraph-0.5.2-c.html" rel="alternate" type="text/html" title="C/igraph 0.5.2" /><published>2009-04-10T00:00:00+00:00</published><updated>2009-04-10T00:00:00+00:00</updated><id>https://igraph.org/2009/04/10/igraph-0.5.2-c</id><content type="html" xml:base="https://igraph.org/2009/04/10/igraph-0.5.2-c.html"><![CDATA[<h2 id="release-notes">Release Notes</h2>

<p>This is another bug fix release, with a couple of new features. Here
are the important ones. See at the end for the complete list of changes.</p>

<h2 id="bipartite-graphs">Bipartite graphs</h2>

<p>Bipartite graphs have two kinds of vertices and edges are only allowed
to connect opposite kinds. Think of the Hollywood movie graph with
actors and movies. igraph 0.5.2 now contains some functions to deal
with these kind of networks.</p>

<!--more-->

<h2 id="the-label-propagation-community-finding-algorithm">The label propagation community finding algorithm</h2>

<p>This is a simple and intuitive community finding algorithm, published
by Raghavan et al. in 2007 (see docs for full citation). It works by
assigning labels to the vertices and then updating the labels based on
majority voting among the neighbors.</p>

<h2 id="3d-version-of-the-drl-layout-generator">3D version of the DrL layout generator</h2>

<p>The DrL layout generator was extended to generate three dimensional
layouts. Albeit slower than the regular 2D version, this is a nice
addition for those who do visualization in 3D.</p>

<h2 id="johnsons-shortest-path-algorithm">Johnson’s shortest path algorithm</h2>

<p>Johnson’s algorithm is a good choice for finding all shortest paths in
a network that has some negative edge weights, but no negative
cycles.</p>

<h2 id="average-nearest-neighbor-degree">Average nearest neighbor degree</h2>

<p>A new function was added to calculate the average degree of the
neighbors of all or some vertices. It supports the edge weighted
version of the measure as well.</p>

<h2 id="several-bugs-and-memory-leaks-corrected">Several bugs and memory leaks corrected</h2>

<p>Apart from the bug fixes, some functions were rewritten to speed them up.</p>

<h2 id="new-in-the-c-layer">New in the C layer</h2>

<ul>
  <li>Added progress bar support to <code class="language-plaintext highlighter-rouge">igraph_betweenness()</code> and 
<code class="language-plaintext highlighter-rouge">igraph_betweenness_estimate()</code>, <code class="language-plaintext highlighter-rouge">igraph_layout_drl()</code></li>
  <li>Speeded up <code class="language-plaintext highlighter-rouge">igraph_betweenness_estimate()</code>, <code class="language-plaintext highlighter-rouge">igraph_get_eid()</code>,
<code class="language-plaintext highlighter-rouge">igraph_are_connected()</code>, <code class="language-plaintext highlighter-rouge">igraph_get_eids()</code></li>
  <li>Added <code class="language-plaintext highlighter-rouge">igraph_get_eid2()</code></li>
  <li>Johnson’s shortest path algorithm added:
<code class="language-plaintext highlighter-rouge">igraph_shortest_paths_johnson()</code></li>
  <li>Average nearest neighbor degree calculation,
<code class="language-plaintext highlighter-rouge">igraph_avg_nearest_neighbor_degree()</code></li>
  <li>Weighted degree (also called strength) calculation,
<code class="language-plaintext highlighter-rouge">igraph_strength()</code></li>
  <li>Some functions to support bipartite graphs: <code class="language-plaintext highlighter-rouge">igraph_full_bipartite()</code>,
<code class="language-plaintext highlighter-rouge">igraph_bipartite_projection()</code>, <code class="language-plaintext highlighter-rouge">igraph_create_bipartite()</code>,
<code class="language-plaintext highlighter-rouge">igraph_incidence()</code>, <code class="language-plaintext highlighter-rouge">igraph_get_incidence()</code>,
<code class="language-plaintext highlighter-rouge">igraph_bipartite_projection_size()</code>, <code class="language-plaintext highlighter-rouge">igraph_is_bipartite()</code></li>
  <li>Added the label propagation community detection algorithm by
Raghavan et al., <code class="language-plaintext highlighter-rouge">igraph_community_label_propagation()</code></li>
  <li>Added an example that shows how to set the random number generator’s
seed from C (<code class="language-plaintext highlighter-rouge">examples/simple/random_seed.c</code>)</li>
  <li>Added a function to “unfold” a tree, <code class="language-plaintext highlighter-rouge">igraph_unfold_tree()</code></li>
  <li>C attribute handler updates: added functions to query many
vertices/edges at once</li>
  <li>Three dimensional DrL layout, <code class="language-plaintext highlighter-rouge">igraph_layout_drl_3d()</code></li>
</ul>

<h2 id="bugs-corrected-in-the-c-layer">Bugs corrected in the C layer</h2>

<ul>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">igraph_isomorphic_function_vf2()</code>, affecting all VF2
graph isomorphism functions</li>
  <li>VL graph generator in <code class="language-plaintext highlighter-rouge">igraph_degree_sequence_game()</code> checks now that
the sum of the degrees is even</li>
  <li>Many small corrections to make igraph compile with Microsoft Visual
Studio 2003, 2005 and 2008</li>
  <li>Many fixes for supporting various compilers, e.g. GCC 4.4 and Sun’s
C compiler</li>
  <li>Fix a bug when a graph was imported from LGL and exported to NCOL
format (#289596)</li>
  <li>Fixed memory leaks in <code class="language-plaintext highlighter-rouge">igraph_automorphisms()</code>,
<code class="language-plaintext highlighter-rouge">igraph_shortest_paths_bellman_ford()</code>,
<code class="language-plaintext highlighter-rouge">igraph_independent_vertex_sets()</code></li>
  <li>The GraphML reader checks the name of the attributes to avoid adding
a duplicate <code class="language-plaintext highlighter-rouge">id</code> attribute</li>
  <li>It is possible to change the <code class="language-plaintext highlighter-rouge">ncv</code> ARPACK parameter for
<code class="language-plaintext highlighter-rouge">igraph_community_leading_eigenvector()</code></li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">igraph_path_length_hist()</code>, <code class="language-plaintext highlighter-rouge">unconnected</code> was wrong
for unconnected and undirected graphs.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[Release Notes]]></summary></entry><entry><title type="html">python-igraph 0.5.2</title><link href="https://igraph.org/2009/04/10/igraph-0.5.2-python.html" rel="alternate" type="text/html" title="python-igraph 0.5.2" /><published>2009-04-10T00:00:00+00:00</published><updated>2009-04-10T00:00:00+00:00</updated><id>https://igraph.org/2009/04/10/igraph-0.5.2-python</id><content type="html" xml:base="https://igraph.org/2009/04/10/igraph-0.5.2-python.html"><![CDATA[<h2 id="release-notes">Release Notes</h2>

<p>This is another bug fix release, with a couple of new features. Here
are the important ones. See at the end for the complete list of changes.</p>

<h2 id="bipartite-graphs">Bipartite graphs</h2>

<p>Bipartite graphs have two kinds of vertices and edges are only allowed
to connect opposite kinds. Think of the Hollywood movie graph with
actors and movies. igraph 0.5.2 now contains some functions to deal
with these kind of networks.</p>

<!--more-->

<h2 id="the-label-propagation-community-finding-algorithm">The label propagation community finding algorithm</h2>

<p>This is a simple and intuitive community finding algorithm, published
by Raghavan et al. in 2007 (see docs for full citation). It works by
assigning labels to the vertices and then updating the labels based on
majority voting among the neighbors.</p>

<h2 id="3d-version-of-the-drl-layout-generator">3D version of the DrL layout generator</h2>

<p>The DrL layout generator was extended to generate three dimensional
layouts. Albeit slower than the regular 2D version, this is a nice
addition for those who do visualization in 3D.</p>

<h2 id="johnsons-shortest-path-algorithm">Johnson’s shortest path algorithm</h2>

<p>Johnson’s algorithm is a good choice for finding all shortest paths in
a network that has some negative edge weights, but no negative
cycles.</p>

<h2 id="average-nearest-neighbor-degree">Average nearest neighbor degree</h2>

<p>A new function was added to calculate the average degree of the
neighbors of all or some vertices. It supports the edge weighted
version of the measure as well.</p>

<h2 id="several-bugs-and-memory-leaks-corrected">Several bugs and memory leaks corrected</h2>

<p>Apart from the bug fixes, some functions were rewritten to speed them up.</p>

<h2 id="new-in-the-python-interface">New in the Python interface</h2>

<ul>
  <li>Speeded up betweenness estimation</li>
  <li>Johnson’s shortest paths algorithm added (selected automatically
by <code class="language-plaintext highlighter-rouge">Graph.shortest_paths()</code> if needed)</li>
  <li>Weighted degree (also called strength) calculation, <code class="language-plaintext highlighter-rouge">Graph.strength()</code></li>
  <li>Some new methods to support bipartite graphs: <code class="language-plaintext highlighter-rouge">Graph.Bipartite()</code>,
<code class="language-plaintext highlighter-rouge">Graph.is_bipartite()</code>, <code class="language-plaintext highlighter-rouge">Graph.get_indicence()</code>, <code class="language-plaintext highlighter-rouge">Graph.Incidence()</code>,
<code class="language-plaintext highlighter-rouge">Graph.bipartite_projection()</code>, <code class="language-plaintext highlighter-rouge">Graph.bipartite_projection_size()</code></li>
  <li>Added the label propagation community detection algorithm by
Raghavan et al., <code class="language-plaintext highlighter-rouge">Graph.community_label_propagation()</code></li>
  <li>Added a function to “unfold” a tree, <code class="language-plaintext highlighter-rouge">Graph.unfold_tree()</code></li>
  <li><code class="language-plaintext highlighter-rouge">setup.py</code> script improvements</li>
  <li>Graph plotting now supports <code class="language-plaintext highlighter-rouge">edge_arrow_size</code> and <code class="language-plaintext highlighter-rouge">edge_arrow_width</code></li>
  <li>Added <code class="language-plaintext highlighter-rouge">Graph.Formula</code> to create small graphs from a simple notation</li>
  <li><code class="language-plaintext highlighter-rouge">VertexSeq</code> and <code class="language-plaintext highlighter-rouge">EdgeSeq</code> objects can now be indexed by slices</li>
</ul>

<h2 id="bugs-corrected-in-the-c-layer">Bugs corrected in the C layer</h2>

<ul>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">igraph_isomorphic_function_vf2()</code>, affecting all VF2
graph isomorphism functions</li>
  <li>VL graph generator in <code class="language-plaintext highlighter-rouge">igraph_degree_sequence_game()</code> checks now that
the sum of the degrees is even</li>
  <li>Many small corrections to make igraph compile with Microsoft Visual
Studio 2003, 2005 and 2008</li>
  <li>Many fixes for supporting various compilers, e.g. GCC 4.4 and Sun’s
C compiler</li>
  <li>Fix a bug when a graph was imported from LGL and exported to NCOL
format (#289596)</li>
  <li>Fixed memory leaks in <code class="language-plaintext highlighter-rouge">igraph_automorphisms()</code>,
<code class="language-plaintext highlighter-rouge">igraph_shortest_paths_bellman_ford()</code>,
<code class="language-plaintext highlighter-rouge">igraph_independent_vertex_sets()</code></li>
  <li>The GraphML reader checks the name of the attributes to avoid adding
a duplicate <code class="language-plaintext highlighter-rouge">id</code> attribute</li>
  <li>It is possible to change the <code class="language-plaintext highlighter-rouge">ncv</code> ARPACK parameter for
<code class="language-plaintext highlighter-rouge">igraph_community_leading_eigenvector()</code></li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">igraph_path_length_hist()</code>, <code class="language-plaintext highlighter-rouge">unconnected</code> was wrong
for unconnected and undirected graphs.</li>
</ul>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[Release Notes]]></summary></entry><entry><title type="html">R/igraph 0.5.2</title><link href="https://igraph.org/2009/04/10/igraph-0.5.2-r.html" rel="alternate" type="text/html" title="R/igraph 0.5.2" /><published>2009-04-10T00:00:00+00:00</published><updated>2009-04-10T00:00:00+00:00</updated><id>https://igraph.org/2009/04/10/igraph-0.5.2-r</id><content type="html" xml:base="https://igraph.org/2009/04/10/igraph-0.5.2-r.html"><![CDATA[<h2 id="release-notes">Release Notes</h2>

<p>This is another bug fix release, with a couple of new features. Here
are the important ones. See at the end for the complete list of changes.</p>

<h2 id="bipartite-graphs">Bipartite graphs</h2>

<p>Bipartite graphs have two kinds of vertices and edges are only allowed
to connect opposite kinds. Think of the Hollywood movie graph with
actors and movies. igraph 0.5.2 now contains some functions to deal
with these kind of networks.</p>

<!--more-->

<h2 id="the-label-propagation-community-finding-algorithm">The label propagation community finding algorithm</h2>

<p>This is a simple and intuitive community finding algorithm, published
by Raghavan et al. in 2007 (see docs for full citation). It works by
assigning labels to the vertices and then updating the labels based on
majority voting among the neighbors.</p>

<h2 id="3d-version-of-the-drl-layout-generator">3D version of the DrL layout generator</h2>

<p>The DrL layout generator was extended to generate three dimensional
layouts. Albeit slower than the regular 2D version, this is a nice
addition for those who do visualization in 3D.</p>

<h2 id="r-gui-limited">R GUI (limited)</h2>

<p>A minimal, supported GUI is included now in the R package. It contains
only a small fraction of igraph capabilities, but can be still useful,
e.g. in teaching. You can start it by typing <code class="language-plaintext highlighter-rouge">tkigraph()</code>,
after loading the igraph package of course.</p>

<h2 id="johnsons-shortest-path-algorithm">Johnson’s shortest path algorithm</h2>

<p>Johnson’s algorithm is a good choice for finding all shortest paths in
a network that has some negative edge weights, but no negative
cycles.</p>

<h2 id="average-nearest-neighbor-degree">Average nearest neighbor degree</h2>

<p>A new function was added to calculate the average degree of the
neighbors of all or some vertices. It supports the edge weighted
version of the measure as well.</p>

<h2 id="curved-edges-in-r-plots">Curved edges in R plots</h2>

<p>Both <code class="language-plaintext highlighter-rouge">plot()</code> and <code class="language-plaintext highlighter-rouge">tkplot()</code> supports curved
edges. See <code class="language-plaintext highlighter-rouge">?igraph.plotting</code> for more details.</p>

<h2 id="several-bugs-and-memory-leaks-corrected">Several bugs and memory leaks corrected</h2>

<p>Apart from the bug fixes, some functions were rewritten to speed them up.</p>

<h2 id="new-in-the-r-interface">New in the R interface</h2>

<ul>
  <li>Added progress bar support to <code class="language-plaintext highlighter-rouge">beweenness()</code> and
<code class="language-plaintext highlighter-rouge">betweenness.estimate()</code>, <code class="language-plaintext highlighter-rouge">layout.drl()</code></li>
  <li>Speeded up betweenness estimation</li>
  <li>Speeded up <code class="language-plaintext highlighter-rouge">are.connected()</code></li>
  <li>Johnson’s shortest paths algorithm added</li>
  <li><code class="language-plaintext highlighter-rouge">shortest.paths()</code> has now an <code class="language-plaintext highlighter-rouge">algorithm</code> argument to choose from the
various implementations manually</li>
  <li>Always quote symbolic vertex names when printing graphs or edges</li>
  <li>Average nearest neighbor degree calculation, <code class="language-plaintext highlighter-rouge">graph.knn()</code></li>
  <li>Weighted degree (also called strength) calculation, <code class="language-plaintext highlighter-rouge">graph.strength()</code></li>
  <li>Some new functions to support bipartite graphs: <code class="language-plaintext highlighter-rouge">graph.bipartite()</code>,
<code class="language-plaintext highlighter-rouge">is.bipartite()</code>, <code class="language-plaintext highlighter-rouge">get.indicence()</code>, <code class="language-plaintext highlighter-rouge">graph.incidence()</code>,
<code class="language-plaintext highlighter-rouge">bipartite.projection()</code>, <code class="language-plaintext highlighter-rouge">bipartite.projection.size()</code></li>
  <li>Support for plotting curved edges with <code class="language-plaintext highlighter-rouge">plot.igraph()</code> and <code class="language-plaintext highlighter-rouge">tkplot()</code></li>
  <li>Added support for weighted graphs in <code class="language-plaintext highlighter-rouge">alpha.centrality()</code></li>
  <li>Added the label propagation community detection algorithm by
Raghavan et al., <code class="language-plaintext highlighter-rouge">label.propagation.community()</code></li>
  <li><code class="language-plaintext highlighter-rouge">cohesive.blocks()</code> now has a <code class="language-plaintext highlighter-rouge">cutsetHeuristic</code> argument to choose
between two cutset algorithms</li>
  <li>Added a function to “unfold” a tree, <code class="language-plaintext highlighter-rouge">unfold.tree()</code></li>
  <li>New <code class="language-plaintext highlighter-rouge">tkplot()</code> arguments to change the drawing area</li>
  <li>Added a minimal GUI, invoke it with <code class="language-plaintext highlighter-rouge">tkigraph()</code></li>
  <li>The DrL layout generator, <code class="language-plaintext highlighter-rouge">layout.drl()</code> has a three dimensional mode
now.</li>
</ul>

<h2 id="bugs-corrected-in-the-r-interface">Bugs corrected in the R interface</h2>

<ul>
  <li>Fixed a bug in VF2 graph isomorphism functions</li>
  <li>Fixed a bug when a sparse adjacency matrix was requested in
<code class="language-plaintext highlighter-rouge">get.adjacency()</code> and the graph was named</li>
  <li>VL graph generator in <code class="language-plaintext highlighter-rouge">degree.sequence.game()</code> checks now that
the sum of the degrees is even</li>
  <li>Many fixes for supporting various compilers, e.g. GCC 4.4 and Sun’s
C compiler</li>
  <li>Fixed memory leaks in <code class="language-plaintext highlighter-rouge">graph.automorphisms()</code>, Bellman-Ford
<code class="language-plaintext highlighter-rouge">shortest.paths()</code>, <code class="language-plaintext highlighter-rouge">independent.vertex.sets()</code></li>
  <li>Fix a bug when a graph was imported from LGL and exported to NCOL
format (#289596)</li>
  <li><code class="language-plaintext highlighter-rouge">cohesive.blocks()</code> creates its temporary file in the session
temporary directory</li>
  <li><code class="language-plaintext highlighter-rouge">write.graph()</code> and <code class="language-plaintext highlighter-rouge">read.graph()</code> now give error messages when unknown
arguments are given</li>
  <li>The GraphML reader checks the name of the attributes to avoid adding
a duplicate <code class="language-plaintext highlighter-rouge">id</code> attribute</li>
  <li>It is possible to change the <code class="language-plaintext highlighter-rouge">ncv</code> ARPACK parameter for
<code class="language-plaintext highlighter-rouge">leading.eigenvector.community()</code></li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">path.length.hist()</code>, <code class="language-plaintext highlighter-rouge">unconnected</code> was wrong
for unconnected and undirected graphs</li>
  <li>Better handling of attribute assingment via iterators, this is now
also clarified in the manual</li>
  <li>Better error messages for unknown vertex shapes</li>
  <li>Make R package unload cleanly if <code class="language-plaintext highlighter-rouge">unloadNamespace()</code> is used</li>
  <li>Fixed a bug in plotting square shaped vertices (#325244)</li>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">graph.adjacency()</code> when the matrix is a sparse matrix
of class <code class="language-plaintext highlighter-rouge">dgTMatrix</code></li>
</ul>]]></content><author><name></name></author><category term="r" /><summary type="html"><![CDATA[Release Notes]]></summary></entry><entry><title type="html">C/igraph 0.5.1</title><link href="https://igraph.org/2008/07/14/igraph-0.5.1-c.html" rel="alternate" type="text/html" title="C/igraph 0.5.1" /><published>2008-07-14T00:00:00+00:00</published><updated>2008-07-14T00:00:00+00:00</updated><id>https://igraph.org/2008/07/14/igraph-0.5.1-c</id><content type="html" xml:base="https://igraph.org/2008/07/14/igraph-0.5.1-c.html"><![CDATA[<h2 id="igraph-051-release-notes">igraph 0.5.1 Release Notes</h2>

<p>igraph 0.5.1 is a bugfix release, but it actually contains many 
important new things as well. Here is a brief summary about each of 
them. See below for the complete list of changes.</p>

<!--more-->

<h2 id="the-drl-layout-generator-was-added">The DrL layout generator was added</h2>

<p>This is a sophisticated and efficient layout generator written by 
Shawn Martin and colleagues. See more in the 
<a href="doc-0.5.1/html/ch14s01s04.html">reference
manual.</a></p>

<h2 id="uniform-sampling-of-random-graphs-with-given-degree-sequence">Uniform sampling of random graphs with given degree sequence</h2>

<p>A nice random graph generator that conditions on the degree of vertices 
was added. It can generate undirected connected graphs.
The algorithm and the implementation was done by Fabien Viger and Matthieu Latapy.
See more in the 
<a href="doc-0.5.1/html/igraph_degree_sequence_game.html">
reference manual.</a></p>

<h2 id="weighted-shortest-path-algorithms">Weighted shortest path algorithms</h2>

<p>Both the Dijkstra and the Belmann-Ford algorithms were added. 
See more in the<br />
<a href="doc-0.5.1/html/ch10s02.html">reference manual.</a></p>

<h2 id="function-to-test-edge-reciprocity">Function to test edge reciprocity</h2>

<p>Mutuality can be tested for each edge now. See more in the
<a href="doc-0.5.1/html/igraph_is_mutual.html">reference manual.</a></p>

<h2 id="new-in-the-c-layer">New in the C layer</h2>

<ul>
  <li>A new layout generator called DrL.</li>
  <li>Uniform sampling of random connected undirected graphs with a 
given degree sequence.</li>
  <li>Some stochastic test results are ignored (for spinglass community
detection, some Erdos-Renyi generator tests)</li>
  <li>Weighted shortest paths, Dijkstra’s algorithm.</li>
  <li>The unweigthed shortest path routine returns <code class="language-plaintext highlighter-rouge">Inf</code> for unreachable
vertices.</li>
  <li>New function, <code class="language-plaintext highlighter-rouge">igraph_adjlist</code> can create igraph graphs from 
adjacency lists.</li>
  <li>New function, <code class="language-plaintext highlighter-rouge">igraph_weighted_adjacency</code> can create weighted graphs 
from weight matrices.</li>
  <li>New function, <code class="language-plaintext highlighter-rouge">igraph_is_mutual</code> to search for mutual edges.</li>
  <li>Added inverse log-weighted similarity measure (a.k.a. Adamic/Adar
similarity).</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_preference_game</code> and <code class="language-plaintext highlighter-rouge">igraph_asymmetric_preference_game</code> were 
rewritten, they are O(|V|+|E|) now, instead of O(|V|^2).</li>
  <li>The Bellman-Ford shortest path algorithm was added.</li>
  <li>Added weighted variant of <code class="language-plaintext highlighter-rouge">igraph_get_shortest_paths</code>, based on
Dijkstra’s algorithm.</li>
  <li>Several small memory leaks were removed, and a big one from the Spinglass
community structure detection function</li>
</ul>

<h2 id="bugs-corrected-in-the-c-layer">Bugs corrected in the C layer</h2>

<ul>
  <li>Several bugs were corrected in the (still experimental) C attribute
handler.</li>
  <li>Pajek reader bug corrected, used to segfault if <code class="language-plaintext highlighter-rouge">*Vertices</code>
was missing.</li>
  <li>Directedness is handled correctly when writing GML files.
(But note that ‘correct’ conflicts the standard here.)</li>
  <li>Corrected a bug when calculating weighted, directed PageRank on an 
undirected graph. (Which does not make sense anyway.)</li>
  <li>Some code polish to make igraph compile with GCC 4.3</li>
  <li>Several bugs were fixed in the Reingold-Tilford layout to avoid 
edge crossings.</li>
  <li>A bug was fixed in the GraphML reader, when the value of a graph
attribute was not specified.</li>
  <li>Fixed a bug in the graph isomorphism routine for small (3-4 vertices)
graphs.</li>
  <li>Corrected the random sampling implementation (<code class="language-plaintext highlighter-rouge">igraph_random_sample</code>),
now it always generates unique numbers. This affects the 
G(n,m) Erdos-Renyi generator, it always generates simple graphs now.</li>
  <li>The basic igraph constructor (<code class="language-plaintext highlighter-rouge">igraph_empty_attrs</code>, all functions 
are expected to call this internally) now checks whether the number
of vertices is finite.</li>
  <li>The LGL, NCOL and Pajek graph readers handle errors properly now.</li>
  <li>The non-symmetric ARPACK solver returns results in a consistent form
now.</li>
  <li>The fast greedy community detection routine now checks that the graph
is simple.</li>
  <li>The LGL and NCOL parsers were corrected to work with all 
kinds of end-of-line encodings.</li>
  <li>Hub &amp; authority score calculations initialize ARPACK parameters now.x</li>
  <li>Fixed a bug in the Walktrap community detection routine, when applied 
to unconnected graphs.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[igraph 0.5.1 Release Notes]]></summary></entry><entry><title type="html">python-igraph 0.5.1</title><link href="https://igraph.org/2008/07/14/igraph-0.5.1-python.html" rel="alternate" type="text/html" title="python-igraph 0.5.1" /><published>2008-07-14T00:00:00+00:00</published><updated>2008-07-14T00:00:00+00:00</updated><id>https://igraph.org/2008/07/14/igraph-0.5.1-python</id><content type="html" xml:base="https://igraph.org/2008/07/14/igraph-0.5.1-python.html"><![CDATA[<h2 id="igraph-051-release-notes">igraph 0.5.1 Release Notes</h2>

<p>igraph 0.5.1 is a bugfix release, but it actually contains many 
important new things as well. Here is a brief summary about each of 
them. See below for the complete list of changes.</p>

<!--more-->

<h2 id="the-drl-layout-generator-was-added">The DrL layout generator was added</h2>

<p>This is a sophisticated and efficient layout generator written by 
Shawn Martin and colleagues. See more in the 
<a href="doc-0.5.1/python/igraph.GraphBase-class.html#layout_drl">
Python documentation</a>.</p>

<h2 id="uniform-sampling-of-random-graphs-with-given-degree-sequence">Uniform sampling of random graphs with given degree sequence</h2>

<p>A nice random graph generator that conditions on the degree of vertices 
was added. It can generate undirected connected graphs.
The algorithm and the implementation was done by Fabien Viger and
Matthieu Latapy. See more in the 
<a href="doc-0.5.1/python/igraph.GraphBase-class.html#Degree_Sequence">
Python documentation</a>.</p>

<h2 id="weighted-shortest-path-algorithms">Weighted shortest path algorithms</h2>

<p>Both the Dijkstra and the Belmann-Ford algorithms were added. 
See more in the 
<a href="doc-0.5.1/python/igraph.GraphBase-class.html#shortest_paths">
Python manual</a>.</p>

<h2 id="function-to-test-edge-reciprocity">Function to test edge reciprocity</h2>

<p>Mutuality can be tested for each edge now. See more in the 
<a href="doc-0.5.1/python/igraph.GraphBase-class.html#reciprocity">
Python manual</a>.</p>

<h2 id="new-in-the-python-interface">New in the Python interface</h2>

<ul>
  <li>A new layout generator called DrL.</li>
  <li>Uniform sampling of random connected undirected graphs with a 
given degree sequence.</li>
  <li>Methods parameters accepting <code class="language-plaintext highlighter-rouge">igraph.IN</code>, <code class="language-plaintext highlighter-rouge">igraph.OUT</code> and <code class="language-plaintext highlighter-rouge">igraph.ALL</code>
constants now also accept these as strings (<code class="language-plaintext highlighter-rouge">"in"</code>, <code class="language-plaintext highlighter-rouge">"out"</code> and <code class="language-plaintext highlighter-rouge">"all"</code>).
Prefix matches also allowed as long as the prefix match is unique.</li>
  <li><code class="language-plaintext highlighter-rouge">Graph.shortest_paths()</code> now supports edge weights (Dijkstra’s and
Bellman-Ford algorithm implemented)</li>
  <li><code class="language-plaintext highlighter-rouge">Graph.get_shortest_paths()</code> also supports edge weights
(only Dijkstra’s algorithm yet)</li>
  <li>Added <code class="language-plaintext highlighter-rouge">Graph.is_mutual()</code> to find mutual edges in a directed graph.</li>
  <li>Added inverse log-weighted similarity measure (a.k.a. Adamic/Adar
similarity).</li>
  <li><code class="language-plaintext highlighter-rouge">preference.game</code> and <code class="language-plaintext highlighter-rouge">asymmetric.preference.game</code> were 
rewritten, they are O(|V|+|E|) now, instead of O(|V|^2).</li>
  <li>ARPACK options can now be modified from the Python interface
(thanks to Kurt Jacobson)</li>
  <li><code class="language-plaintext highlighter-rouge">Layout.to_radial()</code> added – now you can create a top-down tree
layout by the Reingold-Tilford algorithm and then turn it to a
radial tree layout</li>
  <li>Added <code class="language-plaintext highlighter-rouge">Graph.write_pajek()</code> to save graphs in Pajek format</li>
  <li>Some vertex and edge related methods can now also be accessed via
the methods of <code class="language-plaintext highlighter-rouge">VertexSeq</code> and <code class="language-plaintext highlighter-rouge">EdgeSeq</code>, restricted to the current
vertex/edge sequence of course</li>
  <li>Visualisations now support triangle shaped vertices</li>
  <li>Added <code class="language-plaintext highlighter-rouge">Graph.mincut()</code></li>
  <li>Added <code class="language-plaintext highlighter-rouge">Graph.Weighted_Adjacency()</code> to create graphs from weighted
adjacency matrices</li>
  <li>Kamada-Kawai and Fruchterman-Reingold layouts now accept initial
vertex positions</li>
  <li><code class="language-plaintext highlighter-rouge">Graph.Preference()</code> and <code class="language-plaintext highlighter-rouge">Graph.Asymmetric_Preference()</code> were 
rewritten, they are O(|V|+|E|) now, instead of O(|V|^2).</li>
</ul>

<h2 id="bugs-corrected-in-the-python-interface">Bugs corrected in the Python interface</h2>

<ul>
  <li><code class="language-plaintext highlighter-rouge">Graph.constraint()</code> now properly returns floats instead of integers
(thanks to Eytan Bakshy)</li>
  <li>Graphs given by adjacency matrices are now finally loaded and saved
properly</li>
  <li><code class="language-plaintext highlighter-rouge">Graph.Preference()</code> now accepts floats in type distributions</li>
  <li>A small bug in <code class="language-plaintext highlighter-rouge">Graph.community_edge_betweenness()</code> corrected</li>
  <li>Some bugs in numeric attribute handling resolved</li>
  <li><code class="language-plaintext highlighter-rouge">VertexSeq</code> and <code class="language-plaintext highlighter-rouge">EdgeSeq</code> objects can now be subsetted by lists and
tuples as well</li>
  <li>Fixed a bug when dealing with extremely small layout sizes</li>
  <li>Eigenvector centality now always return positive values</li>
  <li><code class="language-plaintext highlighter-rouge">Graph.authority_score()</code> now really returns the authority scores
instead of the hub scores (blame copypasting)</li>
  <li>Pajek reader bug corrected, used to segfault if <code class="language-plaintext highlighter-rouge">*Vertices</code>
was missing.</li>
  <li>Directedness is handled correctly when writing GML files.
(But note that ‘correct’ conflicts the standard here.)</li>
  <li>Corrected a bug when calculating weighted, directed PageRank on an 
undirected graph. (Which does not make sense anyway.)</li>
  <li>Several bugs were fixed in the Reingold-Tilford layout to avoid 
edge crossings.</li>
  <li>A bug was fixed in the GraphML reader, when the value of a graph
attribute was not specified.</li>
  <li>Fixed a bug in the graph isomorphism routine for small (3-4 vertices)
graphs.</li>
  <li>Corrected the random sampling implementation (<code class="language-plaintext highlighter-rouge">igraph_random_sample</code>),
now it always generates unique numbers. This affects the 
G(n,m) Erdos-Renyi generator, it always generates simple graphs now.</li>
  <li>The LGL, NCOL and Pajek graph readers handle errors properly now.</li>
  <li>The non-symmetric ARPACK solver returns results in a consistent form
now.</li>
  <li>The fast greedy community detection routine now checks that the graph
is simple.</li>
  <li>The LGL and NCOL parsers were corrected to work with all 
kinds of end-of-line encodings.</li>
  <li>Hub &amp; authority score calculations initialize ARPACK parameters now.</li>
  <li>Fixed a bug in the Walktrap community detection routine, when applied 
to unconnected graphs.</li>
  <li>Several small memory leaks were removed, and a big one from the Spinglass
community structure detection function</li>
</ul>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[igraph 0.5.1 Release Notes]]></summary></entry><entry><title type="html">R/igraph 0.5.1</title><link href="https://igraph.org/2008/07/14/igraph-0.5.1-r.html" rel="alternate" type="text/html" title="R/igraph 0.5.1" /><published>2008-07-14T00:00:00+00:00</published><updated>2008-07-14T00:00:00+00:00</updated><id>https://igraph.org/2008/07/14/igraph-0.5.1-r</id><content type="html" xml:base="https://igraph.org/2008/07/14/igraph-0.5.1-r.html"><![CDATA[<h2 id="igraph-051-release-notes">igraph 0.5.1 Release Notes</h2>

<p>igraph 0.5.1 is a bugfix release, but it actually contains many 
important new things as well. Here is a brief summary about each of 
them. See below for the complete list of changes.</p>

<!--more-->

<h2 id="the-drl-layout-generator-was-added">The DrL layout generator was added</h2>

<p>This is a sophisticated and efficient layout generator written by 
Shawn Martin and colleagues. See more in the 
<a href="doc-0.5.1/R/layout.drl.html">manual</a>.</p>

<h2 id="uniform-sampling-of-random-graphs-with-given-degree-sequence">Uniform sampling of random graphs with given degree sequence</h2>

<p>A nice random graph generator that conditions on the degree of vertices 
was added. It can generate undirected connected graphs.
The algorithm and the implementation was done by
Fabien Viger and Matthieu Latapy. See more in the 
<a href="doc-0.5.1/R/degree.sequence.game.html">manual</a>.</p>

<h2 id="conversions">Conversions</h2>

<p>igraph includes some functions to convert graphs to and from 
<code class="language-plaintext highlighter-rouge">graphNEL</code> objects as defined in the graph package
(<a href="doc-0.5.1/R/graphNEL.html"><code class="language-plaintext highlighter-rouge">igraph.to.graphNEL</code></a>,
<a href="doc-0.5.1/R/graphNEL.html"><code class="language-plaintext highlighter-rouge">igraph.from.graphNEL</code></a>) and 
sparse matrices using the Matrix package 
(<a href="doc-0.5.1/R/conversion.html"><code class="language-plaintext highlighter-rouge">get.adjacency</code></a>, 
<a href="doc-0.5.1/R/graph.adjacency.html"><code class="language-plaintext highlighter-rouge">graph.adjacency</code></a>,
see the <code class="language-plaintext highlighter-rouge">sparse</code> argument).</p>

<h2 id="new-graph-constructors">New graph constructors</h2>

<p>A new function was added to create graphs from adjacency lists
(<a href="doc-0.5.1/R/graph.adjlist.html"><code class="language-plaintext highlighter-rouge">graph.adjlist</code></a>), 
and <a href="doc-0.5.1/R/graph.data.frame.html"><code class="language-plaintext highlighter-rouge">graph.data.frame</code></a>
has an argument call <code class="language-plaintext highlighter-rouge">vertices</code>, this allows easy
construction of graphs with vertex and edge meta data.</p>

<h2 id="weighted-shortest-path-algorithms">Weighted shortest path algorithms</h2>

<p>Both the Dijkstra and the Belmann-Ford algorithms were added. 
See more in the 
<a href="doc-0.5.1/R/shortest.paths.html">documentation</a>.</p>

<h2 id="function-to-test-edge-reciprocity">Function to test edge reciprocity</h2>

<p>Mutuality can be tested for each edge now. See more in the 
<a href="doc-0.5.1/R/is.mutual.html">documentation</a>.</p>

<h2 id="vertex-shapes">Vertex shapes</h2>

<p>The R interface now supports different vertex shapes when plotting. 
See more in the <a href="doc-0.5.1/R/igraph.vertex.shapes.html">
R documentation.</a></p>

<h2 id="new-in-the-r-interface">New in the R interface</h2>

<ul>
  <li>A new layout generator called DrL.</li>
  <li>Uniform sampling of random connected undirected graphs with a 
given degree sequence.</li>
  <li>Edge labels are plotted at 1/3 of the edge, this is better if 
the graph has mutual edges.</li>
  <li>Initial and experimental vertex shape support in <code class="language-plaintext highlighter-rouge">plot</code>.</li>
  <li>New function, <code class="language-plaintext highlighter-rouge">graph.adjlist</code> creates igraph graphs from
adjacency lists.</li>
  <li>Conversion to/from graphNEL graphs, from the <code class="language-plaintext highlighter-rouge">graph</code> R package.</li>
  <li>Fastgreedy community detection can utilize edge weights now, this 
was missing from the R interface.</li>
  <li>The <code class="language-plaintext highlighter-rouge">arrow.width</code> graphical parameter was added.</li>
  <li><code class="language-plaintext highlighter-rouge">graph.data.frame</code> has a new argument <code class="language-plaintext highlighter-rouge">vertices</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">graph.adjacency</code> and <code class="language-plaintext highlighter-rouge">get.adjacency</code> support sparse matrices, 
the <code class="language-plaintext highlighter-rouge">Matrix</code> package is required to use this functionality.</li>
  <li><code class="language-plaintext highlighter-rouge">graph.adjacency</code> adds column/row names as <code class="language-plaintext highlighter-rouge">name</code> attribute.</li>
  <li>Weighted shortest paths using Dijkstra’s or the Belmann-Ford 
algorithm.</li>
  <li>Shortest path functions return <code class="language-plaintext highlighter-rouge">Inf</code> for unreachable vertices.</li>
  <li>New function <code class="language-plaintext highlighter-rouge">is.mutual</code> to find mutual edges in a directed graph.</li>
  <li>Added inverse log-weighted similarity measure (a.k.a. Adamic/Adar
similarity).</li>
  <li><code class="language-plaintext highlighter-rouge">preference.game</code> and <code class="language-plaintext highlighter-rouge">asymmetric.preference.game</code> were 
rewritten, they are O(|V|+|E|) now, instead of O(|V|^2).</li>
  <li>Edge weight support in function <code class="language-plaintext highlighter-rouge">get.shortest.paths</code>, it uses 
Dijkstra’s algorithm.</li>
</ul>

<h2 id="bugs-corrected-in-the-r-interface">Bugs corrected in the R interface</h2>

<ul>
  <li>A bug was corrected in <code class="language-plaintext highlighter-rouge">write.pajek.bgraph</code>.</li>
  <li>Several bugs were corrected in <code class="language-plaintext highlighter-rouge">graph.adjacency</code>.</li>
  <li>Pajek reader bug corrected, used to segfault if <code class="language-plaintext highlighter-rouge">*Vertices</code>
was missing.</li>
  <li>Directedness is handled correctly when writing GML files.
(But note that ‘correct’ conflicts the standard here.)</li>
  <li>Corrected a bug when calculating weighted, directed PageRank on an 
undirected graph. (Which does not make sense anyway.)</li>
  <li>Several bugs were fixed in the Reingold-Tilford layout to avoid 
edge crossings.</li>
  <li>A bug was fixed in the GraphML reader, when the value of a graph
attribute was not specified.</li>
  <li>Fixed a bug in the graph isomorphism routine for small (3-4 vertices)
graphs.</li>
  <li>Corrected the random sampling implementation (<code class="language-plaintext highlighter-rouge">igraph_random_sample</code>),
now it always generates unique numbers. This affects the 
G(n,m) Erdos-Renyi generator, it always generates simple graphs now.</li>
  <li>The basic igraph constructor (<code class="language-plaintext highlighter-rouge">igraph_empty_attrs</code>, all functions 
are expected to call this internally) now checks whether the number
of vertices is finite.</li>
  <li>The LGL, NCOL and Pajek graph readers handle errors properly now.</li>
  <li>The non-symmetric ARPACK solver returns results in a consistent form
now.</li>
  <li>The fast greedy community detection routine now checks that the graph
is simple.</li>
  <li>The LGL and NCOL parsers were corrected to work with all 
kinds of end-of-line encodings.</li>
  <li>Hub &amp; authority score calculations initialize ARPACK parameters now.</li>
  <li>Fixed a bug in the Walktrap community detection routine, when applied 
to unconnected graphs.</li>
  <li>Several small memory leaks were removed, and a big one from the Spinglass
community structure detection function</li>
</ul>]]></content><author><name></name></author><category term="r" /><summary type="html"><![CDATA[igraph 0.5.1 Release Notes]]></summary></entry><entry><title type="html">C/igraph 0.5</title><link href="https://igraph.org/2008/02/14/igraph-0.5-c.html" rel="alternate" type="text/html" title="C/igraph 0.5" /><published>2008-02-14T00:00:00+00:00</published><updated>2008-02-14T00:00:00+00:00</updated><id>https://igraph.org/2008/02/14/igraph-0.5-c</id><content type="html" xml:base="https://igraph.org/2008/02/14/igraph-0.5-c.html"><![CDATA[<h2 id="release-notes">Release notes</h2>

<p>There are a lot of improvements and corrections in this version. 
We would like to thank all the people who sent comments, bug reports,
patches, or just questions. Without their contribution igraph would be 
definitely much less and worse than it is now. Please keep sending your 
comments and ideas!</p>

<p>Here is a list of major changes, with links to the relevant sections of the 
documentation. See below for the complete list of changes.</p>

<!--more-->

<h2 id="igraph-as-a-platform">igraph as a platform</h2>

<p>We took some step towards turning igraph to an efficient platform for 
implementing graph algorithms. In particular, we have a set of 
<a href="doc-0.5/html/ch06.html">utility types</a> that support general
scientific computing and working with graphs: vectors, matrices,
stacks, queues, heaps, adjacency lists, etc.</p>

<h2 id="graph-isomorphism">Graph isomorphism</h2>

<p>igraph includes the BLISS graph isomorphism algorithm and
implementation now. This and the improved VF2 implementation, which
can now calculate subgraph isomorphism, make igraph support the
bleeding edge of graph isomorphism algorithms. Many thanks to the
authors of BLISS. See the details in the 
<a href="doc-0.5/html/igraph-Isomorphism.html">Reference Manual</a>.</p>

<h2 id="arpack-for-eigenvalue-problems">ARPACK for eigenvalue problems</h2>

<p>ARPACK is a library for solving large scale sparse eigenvalue
problems. In igraph it is very handy, as many centrality problems are
in fact eigenvalue problems: Kleinberg’s hub and authority scores, 
PageRank, the leading eigenvector community detection algorithm are
some examples. Many thanks to the authors of ARPACK and James Fowler,
who suggested to include it in igraph.</p>

<p>See the details in the
<a href="doc-0.5/html/igraph-Arpack.html">Reference Manual</a>.</p>

<h2 id="other-bits">Other bits</h2>

<h3 id="create-famous-graphs-easily">Create famous graphs easily</h3>

<p>Some classic graphs can be created by giving their name. This is
very handy if one needs a test graph quickly. See 
<a href="doc-0.5/html/igraph_famous.html"><code class="language-plaintext highlighter-rouge">igraph_famous</code></a>.
(The idea is based on Combinatorica, a Mathematica extension.)</p>

<h3 id="improvements-for-weighted-graphs">Improvements for weighted graphs</h3>

<p>Many functions were updated to handle weighted graphs:
<a href="doc-0.5/html/igraph_community_fastgreedy.html">
fast greedy community detection</a>,
<a href="doc-0.5/html/igraph_pagerank.html">Page Rank</a>,
<a href="doc-0.5/html/igraph_modularity.html">modularity calculation</a>, 
<a href="doc-0.5/html/igraph_layout_fruchterman_reingold.html">
the Fruchterman-Reingold layout algorithm</a>.</p>

<h3 id="non-simple-graphs">Non-simple graphs</h3>

<p>Some functions were added and improved to handle non-simple graphs
(i.e. graphs with loop and/or multiple edges) better: testing that a
graph is simple (<a href="doc-0.5/html/igraph_is_simple.html">
<code class="language-plaintext highlighter-rouge">igraph_is_simple</code></a>),
testing for multiple edges (<a href="doc-0.5/html/igraph_is_multiple.html">
<code class="language-plaintext highlighter-rouge">igraph_is_multiple</code></a>), and counting the multiplicity of 
edges (<a href="doc-0.5/html/igraph_count_multiple.html">
<code class="language-plaintext highlighter-rouge">igraph_count_multiple</code></a>).</p>

<h3 id="the-graphopt-layout-algorithm">The graphopt layout algorithm</h3>

<p>This is a nice force-based layout algorithm. See the documentation of
details (<a href="doc-0.5/html/igraph_layout_graphopt.html">
<code class="language-plaintext highlighter-rouge">igraph_layout_graphopt</code></a>).</p>

<h3 id="support-for-the-dot-file-format">Support for the DOT file format</h3>

<p>igraph can now write graphs to files in the DOT format, used by
GraphViz. See documentation:
<a href="doc-0.5/html/igraph_write_graph_dot.html">
<code class="language-plaintext highlighter-rouge">igraph_write_graph_dot</code></a>.</p>

<h3 id="dyad-and-triad-census">Dyad and triad census</h3>

<p>Classic social network analysis tools for classifying the dyads
(<a href="doc-0.5/html/igraph_dyad_census.html">
<code class="language-plaintext highlighter-rouge">igraph_dyad_census</code></a>), and triads
(<a href="doc-0.5/html/igraph_triad_census.html">
<code class="language-plaintext highlighter-rouge">igraph_triad_census</code></a>) of a network.</p>

<h3 id="biconnected-components-and-articulation-points">Biconnected components and articulation points</h3>

<p>igraph is now able to calculate biconnected components
(<a href="doc-0.5/html/igraph_biconnected_components.html">
<code class="language-plaintext highlighter-rouge">igraph_biconnected_components</code></a>), and articulation points
(<a href="doc-0.5/html/igraph_articulation_points.html">
<code class="language-plaintext highlighter-rouge">igraph_articulation_points</code></a>).</p>

<h3 id="estimating-closeness-and-betweenness">Estimating closeness and betweenness</h3>

<p>These measures can be quickly estimated by specifying an upper bound
for path lengths to be considered. This is useful for larger graphs,
for which the calculation takes a long time. See documentation for
closeness (<a href="doc-0.5/html/igraph_closeness_estimate.html">
<code class="language-plaintext highlighter-rouge">igraph_closeness_estimate</code></a>),
betweenness (<a href="doc-0.5/html/igraph_betweenness_estimate.html">
<code class="language-plaintext highlighter-rouge">igraph_betweenness_estimate</code></a>), and edge betweenness
(<a href="doc-0.5/html/igraph_edge_betweenness_estimate.html">
<code class="language-plaintext highlighter-rouge">igraph_edge_betweenness_estimate</code></a>).</p>

<h3 id="functions-for-vertex-similarity-measures">Functions for vertex similarity measures</h3>

<p>Two vertex similarity measures based on the number of common neighbors
are introduced, the Jaccard
(<a href="doc-0.5/html/igraph_similarity_jaccard.html">
<code class="language-plaintext highlighter-rouge">igraph_similarity_jaccard</code></a>), and the Dice
(<a href="doc-0.5/html/igraph_similarity_dice.html">
<code class="language-plaintext highlighter-rouge">igraph_similarity_dice</code></a>).</p>

<h3 id="handle-attributes-from-c">Handle attributes from C</h3>

<p>An experimental C attribute interface was added. This allows using
graph/vertex/edge attributes when programming from C. <a href="doc-0.5/html/ch09s02.html">See
more here.</a></p>

<h2 id="new-in-the-c-library">New in the C library</h2>

<ul>
  <li>Many types (stack, matrix, dqueue, etc.) are templates now
They were also rewritten to provide a better organized interface</li>
  <li>VF2 graph isomorphism routines can check subgraph isomorphism now,
and they are able to return matching(s)</li>
  <li>The BLISS graph isomorphism algorithm is included in igraph now. See
<code class="language-plaintext highlighter-rouge">igraph_canonical_permutation</code>, <code class="language-plaintext highlighter-rouge">igraph_isomorphic_bliss</code></li>
  <li>We use ARPACK for eigenvalue/eigenvector calculation. This means that the
following functions were rewritten: <code class="language-plaintext highlighter-rouge">igraph_pagerank</code>,
<code class="language-plaintext highlighter-rouge">igraph_community_leading_eigenvector_*</code>. New functions based on
ARPACK: <code class="language-plaintext highlighter-rouge">igraph_eigenvector_centrality</code>, <code class="language-plaintext highlighter-rouge">igraph_hub_score</code>,
<code class="language-plaintext highlighter-rouge">igraph_authority_score</code>, <code class="language-plaintext highlighter-rouge">igraph_arpack_rssolve</code>, <code class="language-plaintext highlighter-rouge">igraph_arpack_rnsolve</code></li>
  <li>
    <p>Experimental C attribute interface added. I.e. it is possible to use
graph/vertex/edge attributes from C code now.</p>
  </li>
  <li>Edge weights for Fruchterman-Reingold layout.</li>
  <li>Line graph calculation.</li>
  <li>Kautz and de Bruijn graph generators</li>
  <li>Support for writing graphs in DOT format</li>
  <li>Jaccard and Dice similarity coefficients added</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_count_multiple</code> added</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_is_loop</code> and <code class="language-plaintext highlighter-rouge">igraph_is_multiple</code> “return” boolean vectors</li>
  <li>The graphopt layout algorithm was added, <code class="language-plaintext highlighter-rouge">igraph_layout_graphopt</code></li>
  <li>Generation of “famous” graphs, <code class="language-plaintext highlighter-rouge">igraph_famous</code></li>
  <li>Create graphs from LCF notation, <code class="language-plaintext highlighter-rouge">igraph_lcf</code>, <code class="language-plaintext highlighter-rouge">igraph_lcf_vector</code></li>
  <li><code class="language-plaintext highlighter-rouge">igraph_add_edge</code> adds a single edge to the graph</li>
  <li>Dyad census and triad cencus functions added</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_is_simple</code> added</li>
  <li>progress handlers are allowed to stop calculation</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_full_citation</code> to create full citation networks</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_path_length_hist</code>, create a histogram of path lengths</li>
  <li>forest fire model added</li>
  <li>DIMACS reader can handle different file types now</li>
  <li>Adjacency list types made public now (<code class="language-plaintext highlighter-rouge">igraph_adjlist_t</code>,
<code class="language-plaintext highlighter-rouge">igraph_adjedgelist_t</code>)</li>
  <li>Biconnected components and articulation points can be computed</li>
  <li>Eigenvector centrality computation</li>
  <li>Kleinberg’s hub and authority scores</li>
  <li>igraph_to_undirected handles attributes now</li>
  <li>Geometric random graph generator can return the coordinates of the vertices</li>
  <li>Function added to convert leading eigenvector community structure result to
a membership vector (<code class="language-plaintext highlighter-rouge">igraph_le_community_to_membership</code>)</li>
  <li>Weighted fast greedy community detection</li>
  <li>Weighted page rank calculation</li>
  <li>Functions for estimating closeness, betweenness, edge betweenness by 
introducing a cutoff for path lengths</li>
  <li>Weighted modularity calculation</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_permute_vertices</code> added</li>
  <li>Betweenness ans closeness calculations are speeded up</li>
  <li>Startup positions can be supplied to the Kamada-Kawai layout
algorithms</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_read_graph_*</code> functions can handle all possible line
terminators now (\r, \n, \r\n, \n\r)</li>
  <li>Error handling was rewritten for walktrap community detection,
the calculation can be interrupted now</li>
  <li>The maxflow/mincut functions allow to supply a null pointer for edge
capacities, implying unit capacities for all edges</li>
</ul>

<h2 id="bugs-corrected-in-the-c-library">Bugs corrected in the C library</h2>

<ul>
  <li>Memory leak fixed in adjacency list handling</li>
  <li>Memory leak fixed in maximal independent vertex set calculation</li>
  <li>Fixed a bug when rewiring undirected graphs with igraph_rewire</li>
  <li>Fixed edge betweenness community structure detection for unconnected graphs</li>
  <li>Make igraph compile with Sun Studio</li>
  <li>Betweenness bug fixed, when not computing for all vertices</li>
  <li>memory usage of clique finding reduced</li>
  <li>Corrected bugs for motif counts when not all motifs were counted,
but a <code class="language-plaintext highlighter-rouge">cut</code> vector was used</li>
  <li>Bugs fixed in trait games and cited type game</li>
  <li>Accept underscore as letter in GML files</li>
  <li>GML file directedness notation reversed, more logical this way</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[Release notes]]></summary></entry><entry><title type="html">python-igraph 0.5</title><link href="https://igraph.org/2008/02/14/igraph-0.5-python.html" rel="alternate" type="text/html" title="python-igraph 0.5" /><published>2008-02-14T00:00:00+00:00</published><updated>2008-02-14T00:00:00+00:00</updated><id>https://igraph.org/2008/02/14/igraph-0.5-python</id><content type="html" xml:base="https://igraph.org/2008/02/14/igraph-0.5-python.html"><![CDATA[<h2 id="release-notes">Release notes</h2>

<p>There are a lot of improvements and corrections in this version. 
We would like to thank all the people who sent comments, bug reports,
patches, or just questions. Without their contribution igraph would be 
definitely much less and worse than it is now. Please keep sending your 
comments and ideas!</p>

<p>Here is a list of major changes, with links to the relevant sections of the 
documentation. See below for the complete list of changes.</p>

<!--more-->

<h2 id="graph-isomorphism">Graph isomorphism</h2>

<p>igraph includes the BLISS graph isomorphism algorithm and
implementation now. This and the improved VF2 implementation, which
can now calculate subgraph isomorphism, make igraph support the
bleeding edge of graph isomorphism algorithms. Many thanks to the
authors of BLISS. See the details in the 
<a href="doc-0.5/python/igraph.GraphBase-class.html#isomorphic">Python
documentation.</a></p>

<h2 id="arpack-for-eigenvalue-problems">ARPACK for eigenvalue problems</h2>

<p>ARPACK is a library for solving large scale sparse eigenvalue
problems. In igraph it is very handy, as many centrality problems are
in fact eigenvalue problems: Kleinberg’s hub and authority scores, 
PageRank, the leading eigenvector community detection algorithm are
some examples. Many thanks to the authors of ARPACK and James Fowler,
who suggested to include it in igraph.</p>

<p>See the details in the
<a href="doc-0.5/python/igraph.Graph-class.html#evcent">evcent</a>,
<a href="doc-0.5/python/igraph.Graph-class.html#pagerank">pagerank</a>,
<a href="doc-0.5/python/igraph.Graph-class.html#hub_score">hub_score</a>, etc.
functions in the Python documentation.</p>

<h2 id="plotting">Plotting</h2>

<p>Plotting functionality based on the Cairo graphics library (so you need to
install python-cairo if you want to use it). Currently the following
objects can be plotted: graphs, adjacency matrices and dendrograms. Some
crude support for plotting histograms is also implemented. Plots can be
saved in PNG, SVG and PDF formats.</p>

<p>See the details <a href="doc-0.5/python/igraph.drawing-module.html">
in the documentation.</a></p>

<h2 id="other-bits">Other bits</h2>

<h3 id="shell-interface">Shell interface</h3>

<p>igraph can now be invoked by calling the script called
<code class="language-plaintext highlighter-rouge">igraph</code> from the command line. The script launches the
Python interpreter and automatically imports igraph functions into the
main namespace.</p>

<h3 id="create-famous-graphs-easily">Create famous graphs easily</h3>

<p>Some classic graphs can be created by giving their name. This is
very handy if one needs a test graph quickly. See 
<a href="doc-0.5/python/igraph.GraphBase-class.html#Famous">Famous</a>.
(The idea is based on Combinatorica, a Mathematica extension.)</p>

<h3 id="improvements-for-weighted-graphs">Improvements for weighted graphs</h3>

<p>Many functions were updated to handle weighted graphs:
<a href="doc-0.5/python/igraph.GraphBase-class.html#community_fastgreedy">
fast greedy community detection</a>,
<a href="doc-0.5/python/igraph.GraphBase-class.html#pagerank">
Page Rank</a>,
<a href="doc-0.5/python/igraph.GraphBase-class.html#modularity">
modularity calculation</a>,
<a href="doc-0.5/python/igraph.GraphBase-class.html#layout_fruchterman_reingold">
the Fruchterman-Reingold layout algorithm</a>.</p>

<h3 id="non-simple-graphs">Non-simple graphs</h3>

<p>Some functions were added and improved to handle non-simple graphs
(i.e. graphs with loop and/or multiple edges) better:
<a href="doc-0.5/python/igraph.GraphBase-class.html#is_simple">
testing that a graph is simple</a>,
 <a href="doc-0.5/python/igraph.GraphBase-class.html#is_loop">
testing for loop edges</a>, 
<a href="doc-0.5/python/igraph.GraphBase-class.html#is_multiple">
testing for multiple edges</a>) and
<a href="doc-0.5/python/igraph.GraphBase-class.html#count_multiple">
counting the multiplicity of edges</a>.</p>

<h3 id="pickling-support-in-python">Pickling support in Python</h3>

<p>igraph Graph objects can be serialized (pickled) in Python.</p>

<h3 id="the-graphopt-layout-algorithm">The graphopt layout algorithm</h3>

<p>This is a nice force-based layout algorithm. See the documentation of
<a href="doc-0.5/python/igraph.GraphBase-class.html#layout_graphopt">details</a>.</p>

<h3 id="support-for-the-dot-file-format">Support for the DOT file format</h3>

<p>igraph can now write graphs to files in the DOT format, used by
GraphViz. See
<a href="doc-0.5/python/igraph.GraphBase-class.html#write_dot">
documentation</a>.</p>

<h3 id="dyad-and-triad-census">Dyad and triad census</h3>

<p>Classic social network analysis tools for classifying the
<a href="doc-0.5/python/igraph.Graph-class.html#dyad_census">dyads</a> and
<a href="doc-0.5/python/igraph.Graph-class.html#triad_census">triads</a>
of a network.</p>

<h3 id="biconnected-components-and-articulation-points">Biconnected components and articulation points</h3>

<p>igraph is now able to calculate
<a href="doc-0.5/python/igraph.Graph-class.html#biconnected_components">
biconnected components</a> and
<a href="doc-0.5/python/igraph.Graph-class.html#biconnected_components">
articulation points</a>.</p>

<h3 id="estimating-closeness-and-betweenness">Estimating closeness and betweenness</h3>

<p>These measures can be quickly estimated by specifying an upper bound
for path lengths to be considered. This is useful for larger graphs,
for which the calculation takes a long time. See documentation for
<a href="doc-0.5/python/igraph.GraphBase-class.html#closeness">closeness</a>,
<a href="doc-0.5/python/igraph.GraphBase-class.html#betweenness">betweenness</a>
and <a href="doc-0.5/python/igraph.GraphBase-class.html#edge_betweenness">
edge betweenness</a>.</p>

<h3 id="functions-for-vertex-similarity-measures">Functions for vertex similarity measures</h3>

<p>Two vertex similarity measures based on the number of common neighbors
are introduced, the Jaccard
<a href="doc-0.5/python/igraph.GraphBase-class.html#similarity_jaccard">Jaccard</a>
and the 
<a href="doc-0.5/python/igraph.GraphBase-class.html#similarity_dice">Dice</a>
similarities.</p>

<h2 id="new-features">New features</h2>

<ul>
  <li>Added shell interface: igraph can now be invoked by calling the script called
<code class="language-plaintext highlighter-rouge">igraph</code> from the command line. The script launches the Python interpreter and
automatically imports igraph functions into the main namespace</li>
  <li>Pickling (serialization) support for <code class="language-plaintext highlighter-rouge">Graph</code> objects</li>
  <li>Plotting functionality based on the Cairo graphics library (so you need to
install python-cairo if you want to use it). Currently the following
objects can be plotted: graphs, adjacency matrices and dendrograms. Some
crude support for plotting histograms is also implemented. Plots can be
saved in PNG, SVG and PDF formats.</li>
  <li>Unified <code class="language-plaintext highlighter-rouge">Graph.layout</code> method for accessing layout algorithms</li>
  <li>Added interfaces to walktrap community detection and the BLISS isomorphism
algorithm</li>
  <li>Added dyad and triad census functionality and motif counting</li>
  <li><code class="language-plaintext highlighter-rouge">VertexSeq</code> and <code class="language-plaintext highlighter-rouge">EdgeSeq</code> objects can now be restricted to subsets of the
whole network (e.g., you can select vertices/edges based on attributes,
degree, centrality and so on)</li>
</ul>

<h2 id="new-in-the-c-library">New in the C library</h2>

<ul>
  <li>Many types (stack, matrix, dqueue, etc.) are templates now
They were also rewritten to provide a better organized interface</li>
  <li>VF2 graph isomorphism routines can check subgraph isomorphism now,
and they are able to return matching(s)</li>
  <li>The BLISS graph isomorphism algorithm is included in igraph now. See
<code class="language-plaintext highlighter-rouge">igraph_canonical_permutation</code>, <code class="language-plaintext highlighter-rouge">igraph_isomorphic_bliss</code></li>
  <li>We use ARPACK for eigenvalue/eigenvector calculation. This means that the
following functions were rewritten: <code class="language-plaintext highlighter-rouge">igraph_pagerank</code>,
<code class="language-plaintext highlighter-rouge">igraph_community_leading_eigenvector_*</code>. New functions based on
ARPACK: <code class="language-plaintext highlighter-rouge">igraph_eigenvector_centrality</code>, <code class="language-plaintext highlighter-rouge">igraph_hub_score</code>,
<code class="language-plaintext highlighter-rouge">igraph_authority_score</code>, <code class="language-plaintext highlighter-rouge">igraph_arpack_rssolve</code>, <code class="language-plaintext highlighter-rouge">igraph_arpack_rnsolve</code></li>
  <li>
    <p>Experimental C attribute interface added. I.e. it is possible to use
graph/vertex/edge attributes from C code now.</p>
  </li>
  <li>Edge weights for Fruchterman-Reingold layout.</li>
  <li>Line graph calculation.</li>
  <li>Kautz and de Bruijn graph generators</li>
  <li>Support for writing graphs in DOT format</li>
  <li>Jaccard and Dice similarity coefficients added</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_count_multiple</code> added</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_is_loop</code> and <code class="language-plaintext highlighter-rouge">igraph_is_multiple</code> “return” boolean vectors</li>
  <li>The graphopt layout algorithm was added, <code class="language-plaintext highlighter-rouge">igraph_layout_graphopt</code></li>
  <li>Generation of “famous” graphs, <code class="language-plaintext highlighter-rouge">igraph_famous</code></li>
  <li>Create graphs from LCF notation, <code class="language-plaintext highlighter-rouge">igraph_lcf</code>, <code class="language-plaintext highlighter-rouge">igraph_lcf_vector</code></li>
  <li><code class="language-plaintext highlighter-rouge">igraph_add_edge</code> adds a single edge to the graph</li>
  <li>Dyad census and triad cencus functions added</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_is_simple</code> added</li>
  <li>progress handlers are allowed to stop calculation</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_full_citation</code> to create full citation networks</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_path_length_hist</code>, create a histogram of path lengths</li>
  <li>forest fire model added</li>
  <li>DIMACS reader can handle different file types now</li>
  <li>Adjacency list types made public now (<code class="language-plaintext highlighter-rouge">igraph_adjlist_t</code>,
<code class="language-plaintext highlighter-rouge">igraph_adjedgelist_t</code>)</li>
  <li>Biconnected components and articulation points can be computed</li>
  <li>Eigenvector centrality computation</li>
  <li>Kleinberg’s hub and authority scores</li>
  <li>igraph_to_undirected handles attributes now</li>
  <li>Geometric random graph generator can return the coordinates of the vertices</li>
  <li>Function added to convert leading eigenvector community structure result to
a membership vector (<code class="language-plaintext highlighter-rouge">igraph_le_community_to_membership</code>)</li>
  <li>Weighted fast greedy community detection</li>
  <li>Weighted page rank calculation</li>
  <li>Functions for estimating closeness, betweenness, edge betweenness by 
introducing a cutoff for path lengths</li>
  <li>Weighted modularity calculation</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_permute_vertices</code> added</li>
  <li>Betweenness ans closeness calculations are speeded up</li>
  <li>Startup positions can be supplied to the Kamada-Kawai layout
algorithms</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_read_graph_*</code> functions can handle all possible line
terminators now (\r, \n, \r\n, \n\r)</li>
  <li>Error handling was rewritten for walktrap community detection,
the calculation can be interrupted now</li>
  <li>The maxflow/mincut functions allow to supply a null pointer for edge
capacities, implying unit capacities for all edges</li>
</ul>

<h2 id="bugs-corrected-in-the-c-library">Bugs corrected in the C library</h2>

<ul>
  <li>Memory leak fixed in adjacency list handling</li>
  <li>Memory leak fixed in maximal independent vertex set calculation</li>
  <li>Fixed a bug when rewiring undirected graphs with igraph_rewire</li>
  <li>Fixed edge betweenness community structure detection for unconnected graphs</li>
  <li>Make igraph compile with Sun Studio</li>
  <li>Betweenness bug fixed, when not computing for all vertices</li>
  <li>memory usage of clique finding reduced</li>
  <li>Corrected bugs for motif counts when not all motifs were counted,
but a <code class="language-plaintext highlighter-rouge">cut</code> vector was used</li>
  <li>Bugs fixed in trait games and cited type game</li>
  <li>Accept underscore as letter in GML files</li>
  <li>GML file directedness notation reversed, more logical this way</li>
</ul>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[Release notes]]></summary></entry><entry><title type="html">R/igraph 0.5</title><link href="https://igraph.org/2008/02/14/igraph-0.5-r.html" rel="alternate" type="text/html" title="R/igraph 0.5" /><published>2008-02-14T00:00:00+00:00</published><updated>2008-02-14T00:00:00+00:00</updated><id>https://igraph.org/2008/02/14/igraph-0.5-r</id><content type="html" xml:base="https://igraph.org/2008/02/14/igraph-0.5-r.html"><![CDATA[<h2 id="release-notes">Release notes</h2>

<p>There are a lot of improvements and corrections in this version. 
We would like to thank all the people who sent comments, bug reports,
patches, or just questions. Without their contribution igraph would be 
definitely much less and worse than it is now. Please keep sending your 
comments and ideas!</p>

<p>Here is a list of major changes, with links to the relevant sections of the 
documentation. See below for the complete list of changes.</p>

<!--more-->

<h2 id="graph-isomorphism">Graph isomorphism</h2>

<p>igraph includes the BLISS graph isomorphism algorithm and
implementation now. This and the improved VF2 implementation, which
can now calculate subgraph isomorphism, make igraph support the
bleeding edge of graph isomorphism algorithms. Many thanks to the
authors of BLISS. See the details in the 
<a href="doc-0.5/html/igraph-Isomorphism.html">Reference Manual</a>, in
the <a href="doc-0.5/R/graph.isomorphism.html">R documentation</a> or in the
<a href="doc-0.5/python/igraph.GraphBase-class.html#isomorphic">Python
documentation.</a></p>

<h2 id="arpack-for-eigenvalue-problems">ARPACK for eigenvalue problems</h2>

<p>ARPACK is a library for solving large scale sparse eigenvalue
problems. In igraph it is very handy, as many centrality problems are
in fact eigenvalue problems: Kleinberg’s hub and authority scores, 
PageRank, the leading eigenvector community detection algorithm are
some examples. Many thanks to the authors of ARPACK and James Fowler,
who suggested to include it in igraph.</p>

<p>See the details in the <a href="doc-0.5/R/arpack.html">documentation</a>.</p>

<h2 id="other-bits">Other bits</h2>

<h3 id="create-famous-graphs-easily">Create famous graphs easily</h3>

<p>Some classic graphs can be created by giving their name. This is
very handy if one needs a test graph quickly. See 
<a href="doc-0.5/R/graph.famous.html"><code class="language-plaintext highlighter-rouge">graph.famous()</code></a>.
(The idea is based on Combinatorica, a Mathematica extension.)</p>

<h3 id="create-graphs-using-formulas">Create graphs using formulas</h3>

<p>The new 
<a href="doc-0.5/R/graph.formula.html"><code class="language-plaintext highlighter-rouge">graph.formula()</code></a>
function provides a simple, concise way to create (small) graphs.
Numerous examples are included in the 
<a href="doc-0.5/R/graph.formula.html">manual page.</a></p>

<h3 id="improvements-for-weighted-graphs">Improvements for weighted graphs</h3>

<p>Many functions were updated to handle weighted graphs: fast greedy
community detection
(<a href="doc-0.5/R/fastgreedy.community.html"><code class="language-plaintext highlighter-rouge">fastgreedy.community</code></a>)
Page Rank (<a href="doc-0.5/R/page.rank.html"><code class="language-plaintext highlighter-rouge">page.rank</code></a>),
modularity calculation (<a href="doc-0.5/R/modularity.html">modularity</a>),
the Fruchterman-Reingold layout algorithm
(<a href="doc-0.5/R/layout.html"><code class="language-plaintext highlighter-rouge">layout.fruchterman.reingold</code></a>.</p>

<h3 id="non-simple-graphs">Non-simple graphs</h3>

<p>Some functions were added and improved to handle non-simple graphs
(i.e. graphs with loop and/or multiple edges) better: testing that a
graph is simple (<a href="doc-0.5/R/simplify.html"><code class="language-plaintext highlighter-rouge">simplify</code></a>),
testing for loop edges
(<a href="doc-0.5/R/is.multiple.html"><code class="language-plaintext highlighter-rouge">is.loop</code></a>), 
testing for multiple edges
(<a href="doc-0.5/R/is.multiple.html"><code class="language-plaintext highlighter-rouge">is.multiple</code></a>)
and counting the multiplicity of edges
(<a href="doc-0.5/R/is.multiple.html"><code class="language-plaintext highlighter-rouge">count.multiple</code></a>.</p>

<h3 id="the-graphopt-layout-algorithm">The graphopt layout algorithm</h3>

<p>This is a nice force-based layout algorithm. See the
<a href="doc-0.5/R/layout.html">documentation</a> for
details.</p>

<h3 id="support-for-the-dot-file-format">Support for the DOT file format</h3>

<p>igraph can now write graphs to files in the DOT format, used by
GraphViz. See the <a href="doc-0.5/R/write.graph.html">
documentation</a>.</p>

<h3 id="dyad-and-triad-census">Dyad and triad census</h3>

<p>Classic social network analysis tools for classifying the dyads 
(<a href="doc-0.5/R/dyad.census.html"><code class="language-plaintext highlighter-rouge">dyad.census</code></a>) and triads
(<a href="doc-0.5/html/igraph_triad_census.html"><code class="language-plaintext highlighter-rouge">triad.census</code></a>.</p>

<h3 id="biconnected-components-and-articulation-points">Biconnected components and articulation points</h3>

<p>igraph is now able to calculate 
<a href="doc-0.5/R/biconnected.components.html">
biconnected components</a> and<br />
<a href="doc-0.5/R/articulation.points.html">articulation points</a>.</p>

<h3 id="r-graphics-improvements">R graphics improvements</h3>

<p>There were some minor improvements in R graphics. New graphical
parameters: <code class="language-plaintext highlighter-rouge">frame</code>, <code class="language-plaintext highlighter-rouge">asp</code>, <code class="language-plaintext highlighter-rouge">rescale</code>
and <code class="language-plaintext highlighter-rouge">shape</code> for different vertex shapes, right now only
circles and squares are supported. 
<a href="doc-0.5/R/plot.graph.html"><code class="language-plaintext highlighter-rouge">plot.igraph</code></a> has as
argument (<code class="language-plaintext highlighter-rouge">add</code>) to plot many graphs on the same plot,
maybe on top of each other. It also supports the <code class="language-plaintext highlighter-rouge">main</code> and
<code class="language-plaintext highlighter-rouge">sub</code> arguments now. <a href="doc-0.5/R/plot.common.html">See more here.</a></p>

<h3 id="always-free-memory-in-r-after-an-interrupted-calculation">Always free memory in R after an interrupted calculation</h3>

<p>In previous versions of the igraph R package the allocated memory
was not freed if the computation was interrupted. This surely affected 
MS Windows platforms, maybe also OSX. (Not Linux.) igraph 0.5
correctly deallocates all memory on all platforms after an
interruption.</p>

<h3 id="estimating-closeness-and-betweenness">Estimating closeness and betweenness</h3>

<p>These measures can be quickly estimated by specifying an upper bound
for path lengths to be considered. This is useful for larger graphs,
for which the calculation takes a long time. See documentation for
<a href="doc-0.5/R/closeness.html">closeness</a>,
<a href="doc-0.5/R/betweenness.html">betweenness</a>, and
<a href="doc-0.5/html/igraph_edge_betweenness_estimate.html">
edge betweenness</a>.</p>

<h3 id="functions-for-vertex-similarity-measures">Functions for vertex similarity measures</h3>

<p>Two vertex similarity measures based on the number of common neighbors
are introduced, the Jaccard and Dice similarities.
See the <a href="doc-0.5/R/similarity.html">manual</a>
for details.</p>

<h3 id="proper-warnings-in-r">Proper warnings in R</h3>

<p>Up to now igraph warnings were dumped to the console when using the
igraph R package. In many cases this meant that they were effectively
lost. In the new version igraph warnings are converted to proper R
warnings.</p>

<h2 id="new-in-the-r-interface">New in the R interface</h2>

<ul>
  <li>The <code class="language-plaintext highlighter-rouge">rescale</code>, <code class="language-plaintext highlighter-rouge">asp</code> and <code class="language-plaintext highlighter-rouge">frame</code> graphical parameters were added</li>
  <li>Create graphs from a formula notation (<code class="language-plaintext highlighter-rouge">graph.formula</code>)</li>
  <li>Handle graph attributes properly</li>
  <li>Calculate the actual minimum cut for undirected graphs</li>
  <li>Adjacency lists, <code class="language-plaintext highlighter-rouge">get.adjlist</code> and <code class="language-plaintext highlighter-rouge">get.adjedgelist</code> added</li>
  <li>Eigenvector centrality computation is much faster now</li>
  <li>Proper R warnings, instead of writing the warning to the terminal</li>
  <li>R checks graphical parameters now, the unknown ones are not just
ignored, but an error message is given.</li>
  <li><code class="language-plaintext highlighter-rouge">plot.igraph</code> has an <code class="language-plaintext highlighter-rouge">add</code> argument now to compose plots with multiple
graphs</li>
  <li><code class="language-plaintext highlighter-rouge">plot.igraph</code> supports the <code class="language-plaintext highlighter-rouge">main</code> and <code class="language-plaintext highlighter-rouge">sub</code> arguments</li>
  <li><code class="language-plaintext highlighter-rouge">layout.norm</code> is public now, it can normalize a layout</li>
  <li>It is possible to supply startup positions to layout generators</li>
  <li>Always free memory when <code class="language-plaintext highlighter-rouge">CTRL+C/ESC is</code> pressed, in all operating
systems</li>
  <li><code class="language-plaintext highlighter-rouge">plot.igraph</code> can plot square vertices now, see the <code class="language-plaintext highlighter-rouge">shape</code> parameter</li>
  <li><code class="language-plaintext highlighter-rouge">graph.adjacency</code> rewritten when creating weighted graphs</li>
  <li>
    <p>We use <code class="language-plaintext highlighter-rouge">match.arg</code> whenever possible. This means that character scalar 
options can be abbreviated and they are always case insensitive</p>
  </li>
  <li>VF2 graph isomorphism routines can check subgraph isomorphism now,
and they are able to return matching(s)</li>
  <li>The BLISS graph isomorphism algorithm is included in igraph now. See
<code class="language-plaintext highlighter-rouge">canonical.permutation</code>, <code class="language-plaintext highlighter-rouge">graph.isomorphic.bliss</code></li>
  <li>We use ARPACK for eigenvalue/eigenvector calculation. This means that the
following functions were rewritten: <code class="language-plaintext highlighter-rouge">page.rank</code>,
<code class="language-plaintext highlighter-rouge">leading.eigenvector.community.*</code>, <code class="language-plaintext highlighter-rouge">evcent</code>. New functions based on
ARPACK: <code class="language-plaintext highlighter-rouge">hub.score</code>, <code class="language-plaintext highlighter-rouge">authority.score</code>, <code class="language-plaintext highlighter-rouge">arpack</code>.</li>
  <li>Edge weights for Fruchterman-Reingold layout (<code class="language-plaintext highlighter-rouge">layout.fruchterman.reingold</code>).</li>
  <li>Line graph calculation (<code class="language-plaintext highlighter-rouge">line.graph</code>)</li>
  <li>Kautz and de Bruijn graph generators (<code class="language-plaintext highlighter-rouge">graph.kautz</code>, <code class="language-plaintext highlighter-rouge">graph.de.bruijn</code>)</li>
  <li>Support for writing graphs in DOT format</li>
  <li>Jaccard and Dice similarity coefficients added (<code class="language-plaintext highlighter-rouge">similarity.jaccard</code>,
<code class="language-plaintext highlighter-rouge">similarity.dice</code>)</li>
  <li>Counting the multiplicity of edges (<code class="language-plaintext highlighter-rouge">count.multiple</code>)</li>
  <li>The graphopt layout algorithm was added, <code class="language-plaintext highlighter-rouge">layout.graphopt</code></li>
  <li>Generation of “famous” graphs (<code class="language-plaintext highlighter-rouge">graph.famous</code>).</li>
  <li>Create graphs from LCF notation (<code class="language-plaintext highlighter-rouge">graph.cf</code>).</li>
  <li>Dyad census and triad cencus functions (<code class="language-plaintext highlighter-rouge">dyad.census</code>, <code class="language-plaintext highlighter-rouge">triad.census</code>)</li>
  <li>Cheking for simple graphs (<code class="language-plaintext highlighter-rouge">is.simple</code>)</li>
  <li>Create full citation networks (<code class="language-plaintext highlighter-rouge">graph.full.citation</code>)</li>
  <li>Create a histogram of path lengths (<code class="language-plaintext highlighter-rouge">path.length.hist</code>)</li>
  <li>Forest fire model added (<code class="language-plaintext highlighter-rouge">forest.fire.game</code>)</li>
  <li>DIMACS reader can handle different file types now</li>
  <li>Biconnected components and articulation points (<code class="language-plaintext highlighter-rouge">biconnected.components</code>,
<code class="language-plaintext highlighter-rouge">articulation.points</code>)</li>
  <li>Kleinberg’s hub and authority scores (<code class="language-plaintext highlighter-rouge">hub.score</code>, <code class="language-plaintext highlighter-rouge">authority.score</code>)</li>
  <li><code class="language-plaintext highlighter-rouge">as.undirected</code> handles attributes now</li>
  <li>Geometric random graph generator (<code class="language-plaintext highlighter-rouge">grg.game</code>) can return the
coordinates of the vertices</li>
  <li>Function added to convert leading eigenvector community structure result to
a membership vector (<code class="language-plaintext highlighter-rouge">community.le.to.membership</code>)</li>
  <li>Weighted fast greedy community detection</li>
  <li>Weighted page rank calculation</li>
  <li>Functions for estimating closeness, betweenness, edge betweenness by 
introducing a cutoff for path lengths (<code class="language-plaintext highlighter-rouge">closeness.estimate</code>,
<code class="language-plaintext highlighter-rouge">betweenness.estimate</code>, <code class="language-plaintext highlighter-rouge">edge.betweenness.estimate</code>)</li>
  <li>Weighted modularity calculation</li>
  <li>Function for permuting vertices (<code class="language-plaintext highlighter-rouge">permute.vertices</code>)</li>
  <li>Betweenness and closeness calculations are speeded up</li>
  <li><code class="language-plaintext highlighter-rouge">read.graph</code> can handle all possible line terminators now (\r, \n, \r\n, \n\r)</li>
  <li>Error handling was rewritten for walktrap community detection,
the calculation can be interrupted now</li>
  <li>The maxflow/mincut functions allow to supply NULL pointer for edge
capacities, implying unit capacities for all edges</li>
</ul>

<h2 id="bugs-corrected-in-the-r-interface">Bugs corrected in the R interface</h2>

<ul>
  <li>Fixed a bug in <code class="language-plaintext highlighter-rouge">cohesive.blocks</code>, cohesive blocks were sometimes not
calculated correctly</li>
</ul>]]></content><author><name></name></author><category term="r" /><summary type="html"><![CDATA[Release notes]]></summary></entry><entry><title type="html">C/igraph 0.4.5</title><link href="https://igraph.org/2008/01/01/igraph-0.4.5-c.html" rel="alternate" type="text/html" title="C/igraph 0.4.5" /><published>2008-01-01T00:00:00+00:00</published><updated>2008-01-01T00:00:00+00:00</updated><id>https://igraph.org/2008/01/01/igraph-0.4.5-c</id><content type="html" xml:base="https://igraph.org/2008/01/01/igraph-0.4.5-c.html"><![CDATA[<h1 id="cigraph-045">C/igraph 0.4.5</h1>

<p>January 1, 2008</p>

<p>New:</p>

<ul>
  <li>Biconnected components and articulation points.</li>
</ul>

<p>New in the C library:</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_vector_bool_t</code> data type.</li>
</ul>

<p>Bug fixed:</p>

<ul>
  <li>Erdos-Renyi random graph generators rewritten.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.4.5]]></summary></entry><entry><title type="html">python-igraph 0.4.5</title><link href="https://igraph.org/2008/01/01/igraph-0.4.5-python.html" rel="alternate" type="text/html" title="python-igraph 0.4.5" /><published>2008-01-01T00:00:00+00:00</published><updated>2008-01-01T00:00:00+00:00</updated><id>https://igraph.org/2008/01/01/igraph-0.4.5-python</id><content type="html" xml:base="https://igraph.org/2008/01/01/igraph-0.4.5-python.html"><![CDATA[<h1 id="python-igraph-045">python-igraph 0.4.5</h1>

<p>January 1, 2008</p>

<p>New:</p>

<ul>
  <li>Biconnected components and articulation points.</li>
</ul>

<p>Bug fixed:</p>

<ul>
  <li>Erdos-Renyi random graph generators rewritten.</li>
</ul>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.4.5]]></summary></entry><entry><title type="html">R/igraph 0.4.5</title><link href="https://igraph.org/2008/01/01/igraph-0.4.5-r.html" rel="alternate" type="text/html" title="R/igraph 0.4.5" /><published>2008-01-01T00:00:00+00:00</published><updated>2008-01-01T00:00:00+00:00</updated><id>https://igraph.org/2008/01/01/igraph-0.4.5-r</id><content type="html" xml:base="https://igraph.org/2008/01/01/igraph-0.4.5-r.html"><![CDATA[<h1 id="rigraph-045">R/igraph 0.4.5</h1>

<p>January 1, 2008</p>

<p>New:</p>

<ul>
  <li>Cohesive block finding in the R interface, thanks to Peter McMahan
for contributing his code. See James Moody and Douglas R. White,
2003, in Structural Cohesion and Embeddedness: A Hierarchical
Conception of Social Groups American Sociological Review 68(1):1-25</li>
  <li>Biconnected components and articulation points.</li>
  <li>R interface: better printing of attributes.</li>
  <li>R interface: graph attributes can be used via <code class="language-plaintext highlighter-rouge">$</code>.</li>
</ul>

<p>Bug fixed:</p>

<ul>
  <li>Erdos-Renyi random graph generators rewritten.</li>
</ul>]]></content><author><name></name></author><category term="r" /><summary type="html"><![CDATA[R/igraph 0.4.5]]></summary></entry><entry><title type="html">C/igraph 0.4.4</title><link href="https://igraph.org/2007/10/03/igraph-0.4.4-c.html" rel="alternate" type="text/html" title="C/igraph 0.4.4" /><published>2007-10-03T00:00:00+00:00</published><updated>2007-10-03T00:00:00+00:00</updated><id>https://igraph.org/2007/10/03/igraph-0.4.4-c</id><content type="html" xml:base="https://igraph.org/2007/10/03/igraph-0.4.4-c.html"><![CDATA[<h1 id="cigraph-044">C/igraph 0.4.4</h1>

<p>October 3, 2007</p>

<p>Some bugs were fixed:</p>

<ul>
  <li>A bug was fixed in the Erdos-Renyi graph generator, which sometimes
added an extra vertex.</li>
  <li>MSVC compilation issues were fixed.</li>
  <li>MinGW compilation fixes.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.4.4]]></summary></entry><entry><title type="html">python-igraph 0.4.4</title><link href="https://igraph.org/2007/10/03/igraph-0.4.4-python.html" rel="alternate" type="text/html" title="python-igraph 0.4.4" /><published>2007-10-03T00:00:00+00:00</published><updated>2007-10-03T00:00:00+00:00</updated><id>https://igraph.org/2007/10/03/igraph-0.4.4-python</id><content type="html" xml:base="https://igraph.org/2007/10/03/igraph-0.4.4-python.html"><![CDATA[<h1 id="python-igraph-044">python-igraph 0.4.4</h1>

<p>October 3, 2007</p>

<p>Some bugs were fixed:</p>

<ul>
  <li>A bug was fixed in the Erdos-Renyi graph generator, which sometimes
added an extra vertex.</li>
  <li>MSVC compilation issues were fixed.</li>
  <li>MinGW compilation fixes.</li>
</ul>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.4.4]]></summary></entry><entry><title type="html">R/igraph 0.4.4</title><link href="https://igraph.org/2007/10/03/igraph-0.4.4-r.html" rel="alternate" type="text/html" title="R/igraph 0.4.4" /><published>2007-10-03T00:00:00+00:00</published><updated>2007-10-03T00:00:00+00:00</updated><id>https://igraph.org/2007/10/03/igraph-0.4.4-r</id><content type="html" xml:base="https://igraph.org/2007/10/03/igraph-0.4.4-r.html"><![CDATA[<h1 id="rigraph-044">R/igraph 0.4.4</h1>

<p>October 3, 2007</p>

<p>This release should work seemlessly with the new R 2.6.0 version.
Some other bugs were also fixed:</p>

<ul>
  <li>A bug was fixed in the Erdos-Renyi graph generator, which sometimes
added an extra vertex.</li>
  <li>MSVC compilation issues were fixed.</li>
  <li>MinGW compilation fixes.</li>
</ul>]]></content><author><name></name></author><category term="r" /><summary type="html"><![CDATA[R/igraph 0.4.4]]></summary></entry><entry><title type="html">C/igraph 0.4.3</title><link href="https://igraph.org/2007/08/13/igraph-0.4.3-c.html" rel="alternate" type="text/html" title="C/igraph 0.4.3" /><published>2007-08-13T00:00:00+00:00</published><updated>2007-08-13T00:00:00+00:00</updated><id>https://igraph.org/2007/08/13/igraph-0.4.3-c</id><content type="html" xml:base="https://igraph.org/2007/08/13/igraph-0.4.3-c.html"><![CDATA[<h1 id="cigraph-043">C/igraph 0.4.3</h1>

<p>August 13, 2007</p>

<p>The next one in the sequence of bugfix releases. Thanks to many people
sending bug reports. Here are the changes:</p>

<ul>
  <li>GraphML parser: entities and character data in multiple chunks are now handled correctly.</li>
  <li>A bug corrected in edge betweenness community structure detection,
it failed if called many times from the same program/session.</li>
  <li>Bug corrected in ‘adjacent edges’ edge iterator.</li>
  <li>Edge betweeness community structure: handle unconnected graphs properly.</li>
  <li>Fixed bug related to fast greedy community detection in unconnected graphs.</li>
  <li>Use a different kind of parser (Push) for reading GraphML files. This is almost
invisible for users but fixed a nondeterministic bug when reading in GraphML
files.</li>
  <li>Test suite should run correctly on Cygwin now.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.4.3]]></summary></entry><entry><title type="html">python-igraph 0.4.3</title><link href="https://igraph.org/2007/08/13/igraph-0.4.3-python.html" rel="alternate" type="text/html" title="python-igraph 0.4.3" /><published>2007-08-13T00:00:00+00:00</published><updated>2007-08-13T00:00:00+00:00</updated><id>https://igraph.org/2007/08/13/igraph-0.4.3-python</id><content type="html" xml:base="https://igraph.org/2007/08/13/igraph-0.4.3-python.html"><![CDATA[<h1 id="python-igraph-043">python-igraph 0.4.3</h1>

<p>August 13, 2007</p>

<p>The next one in the sequence of bugfix releases. Thanks to many people
sending bug reports. Here are the changes:</p>

<ul>
  <li>Some memory leaks removed when using attributes.</li>
  <li>GraphML parser: entities and character data in multiple chunks are now handled correctly.</li>
  <li>A bug corrected in edge betweenness community structure detection,
it failed if called many times from the same program/session.</li>
  <li>Bug corrected in ‘adjacent edges’ edge iterator.</li>
  <li>Python interface: edge and vertex attribute deletion bug corrected.</li>
  <li>Edge betweeness community structure: handle unconnected graphs properly.</li>
  <li>Fixed bug related to fast greedy community detection in unconnected graphs.</li>
  <li>Use a different kind of parser (Push) for reading GraphML files. This is almost
invisible for users but fixed a nondeterministic bug when reading in GraphML
files.</li>
  <li>Test suite should run correctly on Cygwin now.</li>
</ul>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.4.3]]></summary></entry><entry><title type="html">R/igraph 0.4.3</title><link href="https://igraph.org/2007/08/13/igraph-0.4.3-r.html" rel="alternate" type="text/html" title="R/igraph 0.4.3" /><published>2007-08-13T00:00:00+00:00</published><updated>2007-08-13T00:00:00+00:00</updated><id>https://igraph.org/2007/08/13/igraph-0.4.3-r</id><content type="html" xml:base="https://igraph.org/2007/08/13/igraph-0.4.3-r.html"><![CDATA[<h1 id="rigraph-043">R/igraph 0.4.3</h1>

<p>August 13, 2007</p>

<p>The next one in the sequence of bugfix releases. Thanks to many people
sending bug reports. Here are the changes:</p>

<ul>
  <li>Some memory leaks removed when using attributes from R or Python.</li>
  <li>GraphML parser: entities and character data in multiple chunks are now handled correctly.</li>
  <li>A bug corrected in edge betweenness community structure detection,
it failed if called many times from the same program/session.</li>
  <li>Bug corrected in ‘adjacent edges’ edge iterator.</li>
  <li>Edge betweeness community structure: handle unconnected graphs properly.</li>
  <li>Fixed bug related to fast greedy community detection in unconnected graphs.</li>
  <li>Use a different kind of parser (Push) for reading GraphML files. This is almost
invisible for users but fixed a nondeterministic bug when reading in GraphML
files.</li>
  <li>R interface: plot now handles properly if called with a vector as the edge.width
argument for directed graphs.</li>
  <li>R interface: bug (typo) corrected for walktrap.community and weighted graphs.</li>
  <li>Test suite should run correctly on Cygwin now.</li>
</ul>]]></content><author><name></name></author><category term="r" /><summary type="html"><![CDATA[R/igraph 0.4.3]]></summary></entry><entry><title type="html">C/igraph 0.4.2</title><link href="https://igraph.org/2007/06/07/igraph-0.4.2-c.html" rel="alternate" type="text/html" title="C/igraph 0.4.2" /><published>2007-06-07T00:00:00+00:00</published><updated>2007-06-07T00:00:00+00:00</updated><id>https://igraph.org/2007/06/07/igraph-0.4.2-c</id><content type="html" xml:base="https://igraph.org/2007/06/07/igraph-0.4.2-c.html"><![CDATA[<h1 id="cigraph-042">C/igraph 0.4.2</h1>

<p>June 7, 2007</p>

<p>This is another bugfix release.</p>

<p>Some other bits added:</p>

<ul>
  <li>circular Reingold-Tilford layout generator for trees</li>
  <li>corrected a bug, Pajek files are written properly under MS Windows now.</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.4.2]]></summary></entry><entry><title type="html">python-igraph 0.4.2</title><link href="https://igraph.org/2007/06/07/igraph-0.4.2-python.html" rel="alternate" type="text/html" title="python-igraph 0.4.2" /><published>2007-06-07T00:00:00+00:00</published><updated>2007-06-07T00:00:00+00:00</updated><id>https://igraph.org/2007/06/07/igraph-0.4.2-python</id><content type="html" xml:base="https://igraph.org/2007/06/07/igraph-0.4.2-python.html"><![CDATA[<h1 id="python-igraph-042">python-igraph 0.4.2</h1>

<p>June 7, 2007</p>

<p>This is another bugfix release. Some other bits added:</p>

<ul>
  <li>circular Reingold-Tilford layout generator for trees</li>
  <li>corrected a bug, Pajek files are written properly under MS Windows now.</li>
</ul>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.4.2]]></summary></entry><entry><title type="html">R/igraph 0.4.2</title><link href="https://igraph.org/2007/06/07/igraph-0.4.2-r.html" rel="alternate" type="text/html" title="R/igraph 0.4.2" /><published>2007-06-07T00:00:00+00:00</published><updated>2007-06-07T00:00:00+00:00</updated><id>https://igraph.org/2007/06/07/igraph-0.4.2-r</id><content type="html" xml:base="https://igraph.org/2007/06/07/igraph-0.4.2-r.html"><![CDATA[<h1 id="rigraph-042">R/igraph 0.4.2</h1>

<p>June 7, 2007</p>

<p>This is another bugfix release, as there was a serious bug in the 
R package of the previous version: it could not read and write graphs
to files in any format under MS Windows.</p>

<p>Some other bits added:</p>

<ul>
  <li>circular Reingold-Tilford layout generator for trees</li>
  <li>corrected a bug, Pajek files are written properly under MS Windows now.</li>
  <li><code class="language-plaintext highlighter-rouge">arrow.size</code> graphical edge parameter added in the R interface.</li>
</ul>]]></content><author><name></name></author><category term="r" /><summary type="html"><![CDATA[R/igraph 0.4.2]]></summary></entry><entry><title type="html">C/igraph 0.4.1</title><link href="https://igraph.org/2007/05/23/igraph-0.4.1-c.html" rel="alternate" type="text/html" title="C/igraph 0.4.1" /><published>2007-05-23T00:00:00+00:00</published><updated>2007-05-23T00:00:00+00:00</updated><id>https://igraph.org/2007/05/23/igraph-0.4.1-c</id><content type="html" xml:base="https://igraph.org/2007/05/23/igraph-0.4.1-c.html"><![CDATA[<h1 id="cigraph-041">C/igraph 0.4.1</h1>

<p>May 23, 2007</p>

<p>This is a minor release, it corrects a number of bugs.</p>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.4.1]]></summary></entry><entry><title type="html">python-igraph 0.4.1</title><link href="https://igraph.org/2007/05/23/igraph-0.4.1-python.html" rel="alternate" type="text/html" title="python-igraph 0.4.1" /><published>2007-05-23T00:00:00+00:00</published><updated>2007-05-23T00:00:00+00:00</updated><id>https://igraph.org/2007/05/23/igraph-0.4.1-python</id><content type="html" xml:base="https://igraph.org/2007/05/23/igraph-0.4.1-python.html"><![CDATA[<h1 id="python-igraph-041">python-igraph 0.4.1</h1>

<p>May 23, 2007</p>

<p>This is a minor release, it corrects a number of bugs.</p>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.4.1]]></summary></entry><entry><title type="html">R/igraph 0.4.1</title><link href="https://igraph.org/2007/05/23/igraph-0.4.1-r.html" rel="alternate" type="text/html" title="R/igraph 0.4.1" /><published>2007-05-23T00:00:00+00:00</published><updated>2007-05-23T00:00:00+00:00</updated><id>https://igraph.org/2007/05/23/igraph-0.4.1-r</id><content type="html" xml:base="https://igraph.org/2007/05/23/igraph-0.4.1-r.html"><![CDATA[<h1 id="rigraph-041">R/igraph 0.4.1</h1>

<p>May 23, 2007</p>

<p>This is a minor release, it corrects a number of bugs, mostly in the 
R package.</p>]]></content><author><name></name></author><category term="r" /><summary type="html"><![CDATA[R/igraph 0.4.1]]></summary></entry><entry><title type="html">C/igraph 0.4</title><link href="https://igraph.org/2007/05/21/igraph-0.4-c.html" rel="alternate" type="text/html" title="C/igraph 0.4" /><published>2007-05-21T00:00:00+00:00</published><updated>2007-05-21T00:00:00+00:00</updated><id>https://igraph.org/2007/05/21/igraph-0.4-c</id><content type="html" xml:base="https://igraph.org/2007/05/21/igraph-0.4-c.html"><![CDATA[<h1 id="cigraph-04">C/igraph 0.4</h1>

<p>May 21, 2007</p>

<p>The major new additions in this release is a bunch of community
detection algorithms and support for the GML file format. Here 
is the complete list of changes:</p>

<!--more-->

<h2 id="new-in-the-c-library">New in the C library</h2>

<ul>
  <li>internal representation changed</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_neighbors</code> always returns an ordered list</li>
  <li>
    <p><code class="language-plaintext highlighter-rouge">igraph_is_loop</code> and <code class="language-plaintext highlighter-rouge">igraph_is_multiple</code> added</p>
  </li>
  <li>topological sorting</li>
  <li>VF2 isomorphism algorithm</li>
  <li>support for reading the file format of the Graph Database for isomorphism</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_mincut</code> cat calculate the actual minimum cut</li>
  <li>girth calculation added, thanks to Keith Briggs</li>
  <li>
    <p>support for reading and writing GML files</p>
  </li>
  <li>Walktrap community detection algorithm added, thanks to Matthieu Latapy 
and Pascal Pons</li>
  <li>edge betweenness based community detection algorithm added</li>
  <li>fast greedy algorithm for community detection by Clauset et al. added
thanks to Aaron Clauset for sharing his code</li>
  <li>leading eigenvector community detection algorithm by Mark Newman added</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_to_membership</code> supporting function added, creates 
a membership vector from a community structure merge tree</li>
  <li>modularity calculation added</li>
</ul>

<h2 id="others">Others</h2>

<ul>
  <li>proper support for Debian packages (re)added</li>
  <li>many functions benefit from the new internal representation and are 
faster now: transitivity, reciprocity, graph operator functions like 
intersection and union, etc.</li>
  <li>igraph compiles with Microsoft Visual C++ now</li>
  <li>there were some internal changes to make igraph a real graph algorithm
platform in the near future, but these are undocumented now</li>
</ul>

<h2 id="bugs-corrected">Bugs corrected</h2>

<ul>
  <li>corrected a bug when reading Pajek files: directed graphs were read as
undirected</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.4]]></summary></entry><entry><title type="html">python-igraph 0.4</title><link href="https://igraph.org/2007/05/21/igraph-0.4-python.html" rel="alternate" type="text/html" title="python-igraph 0.4" /><published>2007-05-21T00:00:00+00:00</published><updated>2007-05-21T00:00:00+00:00</updated><id>https://igraph.org/2007/05/21/igraph-0.4-python</id><content type="html" xml:base="https://igraph.org/2007/05/21/igraph-0.4-python.html"><![CDATA[<h1 id="python-igraph-04">python-igraph 0.4</h1>

<p>May 21, 2007</p>

<p>The major new additions in this release is a bunch of community
detection algorithms and support for the GML file format. Here 
is the complete list of changes:</p>

<!--more-->

<h2 id="new-in-the-c-library">New in the C library</h2>

<ul>
  <li>internal representation changed</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_neighbors</code> always returns an ordered list</li>
  <li>
    <p><code class="language-plaintext highlighter-rouge">igraph_is_loop</code> and <code class="language-plaintext highlighter-rouge">igraph_is_multiple</code> added</p>
  </li>
  <li>topological sorting</li>
  <li>VF2 isomorphism algorithm</li>
  <li>support for reading the file format of the Graph Database for isomorphism</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_mincut</code> cat calculate the actual minimum cut</li>
  <li>girth calculation added, thanks to Keith Briggs</li>
  <li>
    <p>support for reading and writing GML files</p>
  </li>
  <li>Walktrap community detection algorithm added, thanks to Matthieu Latapy 
and Pascal Pons</li>
  <li>edge betweenness based community detection algorithm added</li>
  <li>fast greedy algorithm for community detection by Clauset et al. added
thanks to Aaron Clauset for sharing his code</li>
  <li>leading eigenvector community detection algorithm by Mark Newman added</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_community_to_membership</code> supporting function added, creates 
a membership vector from a community structure merge tree</li>
  <li>modularity calculation added</li>
</ul>

<h2 id="others">Others</h2>

<ul>
  <li>proper support for Debian packages (re)added</li>
  <li>many functions benefit from the new internal representation and are 
faster now: transitivity, reciprocity, graph operator functions like 
intersection and union, etc.</li>
  <li>igraph compiles with Microsoft Visual C++ now</li>
  <li>there were some internal changes to make igraph a real graph algorithm
platform in the near future, but these are undocumented now</li>
</ul>

<h2 id="bugs-corrected">Bugs corrected</h2>

<ul>
  <li>corrected a bug when reading Pajek files: directed graphs were read as
undirected</li>
</ul>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.4]]></summary></entry><entry><title type="html">R/igraph 0.4</title><link href="https://igraph.org/2007/05/21/igraph-0.4-r.html" rel="alternate" type="text/html" title="R/igraph 0.4" /><published>2007-05-21T00:00:00+00:00</published><updated>2007-05-21T00:00:00+00:00</updated><id>https://igraph.org/2007/05/21/igraph-0.4-r</id><content type="html" xml:base="https://igraph.org/2007/05/21/igraph-0.4-r.html"><![CDATA[<h1 id="rigraph-04">R/igraph 0.4</h1>

<p>May 21, 2007</p>

<p>The major new additions in this release is a bunch of community
detection algorithms and support for the GML file format. Here 
is the complete list of changes:</p>

<!--more-->

<h2 id="new-in-the-r-interface">New in the R interface</h2>

<ul>
  <li>as the internal representation changed, graphs stored with ‘save’ 
with an older igraph version cannot be read back with the new
version reliably.</li>
  <li>
    <p><code class="language-plaintext highlighter-rouge">neighbors</code> returns ordered lists</p>
  </li>
  <li>topological sorting</li>
  <li>VF2 isomorphism algorithm</li>
  <li>support for reading graphs from the Graph Database for isomorphism</li>
  <li>girth calculation added, thanks to Keith Briggs</li>
  <li>
    <p>support for reading and writing GML files</p>
  </li>
  <li>Walktrap community detection algorithm added, thanks to Matthieu Latapy 
and Pascal Pons</li>
  <li>edge betweenness based community detection algorithm added</li>
  <li>fast greedy algorithm for community detection by Clauset et al. added
thanks to Aaron Clauset for sharing his code</li>
  <li>leading eigenvector community detection algorithm by Mark Newman added</li>
  <li>functions for creating denrdograms from the output of the 
community detection algorithms added</li>
  <li><code class="language-plaintext highlighter-rouge">community.to.membership</code> supporting function added, creates 
a membership vector from a community structure merge tree</li>
  <li>
    <p>modularity calculation added</p>
  </li>
  <li>graphics parameter handling is completely rewritten, uniform handling 
of colors and fonts, make sure you read <code class="language-plaintext highlighter-rouge">?igraph.plotting</code></li>
  <li>new plotting parameter for edges: <code class="language-plaintext highlighter-rouge">arrow.mode</code></li>
  <li>a bug corrected when playing a nonlinear <code class="language-plaintext highlighter-rouge">barabasi.game</code></li>
  <li>better looking plotting in 3d using rglplot: edges are 3d too</li>
  <li><code class="language-plaintext highlighter-rouge">rglplot</code> layout is allowed to be two dimensional now</li>
  <li><code class="language-plaintext highlighter-rouge">rglplot</code> suspends updates while drawing, this makes it faster</li>
  <li>
    <p>loop edges are correctly plotted by all three plotting functions</p>
  </li>
  <li>better printing of attributes when printing graphs</li>
  <li>summary of a graph prints attribute names</li>
  <li><code class="language-plaintext highlighter-rouge">is.igraph</code> rewritten to make it possible to inherit from the <code class="language-plaintext highlighter-rouge">igraph</code> class</li>
  <li>somewhat better looking progress meter for functions which support it</li>
</ul>

<h2 id="others">Others</h2>

<ul>
  <li>many functions benefit from the new internal representation and are 
faster now: transitivity, reciprocity, graph operator functions like 
intersection and union, etc.</li>
  <li>igraph compiles with Microsoft Visual C++ now</li>
  <li>there were some internal changes to make igraph a real graph algorithm
platform in the near future, but these are undocumented now</li>
</ul>

<h2 id="bugs-corrected">Bugs corrected</h2>

<ul>
  <li>corrected a bug when reading Pajek files: directed graphs were read as
undirected</li>
</ul>]]></content><author><name></name></author><category term="r" /><summary type="html"><![CDATA[R/igraph 0.4]]></summary></entry><entry><title type="html">C/igraph 0.3.3</title><link href="https://igraph.org/2007/02/28/igraph-0.3.3-c.html" rel="alternate" type="text/html" title="C/igraph 0.3.3" /><published>2007-02-28T00:00:00+00:00</published><updated>2007-02-28T00:00:00+00:00</updated><id>https://igraph.org/2007/02/28/igraph-0.3.3-c</id><content type="html" xml:base="https://igraph.org/2007/02/28/igraph-0.3.3-c.html"><![CDATA[<h1 id="cigraph-033">C/igraph 0.3.3</h1>

<h2 id="new-in-the-c-library">New in the C library</h2>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_connect_neighborhood()</code>, nomen est omen</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_watts_strogatz_game()</code> and <code class="language-plaintext highlighter-rouge">igraph_rewire_edges()</code></li>
  <li>K-core decomposition: <code class="language-plaintext highlighter-rouge">igraph_coreness()</code></li>
  <li>Clique and independent vertex set related functions:
<code class="language-plaintext highlighter-rouge">igraph_cliques()</code>, <code class="language-plaintext highlighter-rouge">igraph_independent_vertex_sets()</code>,
<code class="language-plaintext highlighter-rouge">igraph_maximal_cliques()</code>, <code class="language-plaintext highlighter-rouge">igraph_maximal_independent_vertex_sets()</code>,
<code class="language-plaintext highlighter-rouge">igraph_independence_number()</code>, `igraph_clique_number(),
Some of these function were ported from the very_nauty library
of Keith Briggs, thanks Keith!</li>
  <li>The GraphML file format now supports graph attributes</li>
  <li>Transitivity calculation speeded up</li>
  <li>Correct transitivity calculation for multigraphs (ie. non-simple graphs)</li>
</ul>

<!--more-->

<h2 id="bugs-corrected">Bugs corrected</h2>

<ul>
  <li><code class="language-plaintext highlighter-rouge">make install</code> installs the library correctly on Cygwin now</li>
  <li>Pajek parser corrected to read files with MacOS newline characters correctly</li>
  <li>overflow bug in transitivity calculation for large graphs corrected</li>
  <li>an internal memcpy/memmove bug causing some segfaults removed</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.3.3]]></summary></entry><entry><title type="html">python-igraph 0.3.3</title><link href="https://igraph.org/2007/02/28/igraph-0.3.3-python.html" rel="alternate" type="text/html" title="python-igraph 0.3.3" /><published>2007-02-28T00:00:00+00:00</published><updated>2007-02-28T00:00:00+00:00</updated><id>https://igraph.org/2007/02/28/igraph-0.3.3-python</id><content type="html" xml:base="https://igraph.org/2007/02/28/igraph-0.3.3-python.html"><![CDATA[<h1 id="python-igraph-033">python-igraph 0.3.3</h1>

<h2 id="new-in-the-c-library">New in the C library</h2>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_connect_neighborhood()</code>, nomen est omen</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_watts_strogatz_game()</code> and <code class="language-plaintext highlighter-rouge">igraph_rewire_edges()</code></li>
  <li>K-core decomposition: <code class="language-plaintext highlighter-rouge">igraph_coreness()</code></li>
  <li>Clique and independent vertex set related functions:
<code class="language-plaintext highlighter-rouge">igraph_cliques()</code>, <code class="language-plaintext highlighter-rouge">igraph_independent_vertex_sets()</code>,
<code class="language-plaintext highlighter-rouge">igraph_maximal_cliques()</code>, <code class="language-plaintext highlighter-rouge">igraph_maximal_independent_vertex_sets()</code>,
<code class="language-plaintext highlighter-rouge">igraph_independence_number()</code>, `igraph_clique_number(),
Some of these function were ported from the very_nauty library
of Keith Briggs, thanks Keith!</li>
  <li>The GraphML file format now supports graph attributes</li>
  <li>Transitivity calculation speeded up</li>
  <li>Correct transitivity calculation for multigraphs (ie. non-simple graphs)</li>
</ul>

<!--more-->

<h2 id="bugs-corrected">Bugs corrected</h2>

<ul>
  <li><code class="language-plaintext highlighter-rouge">make install</code> installs the library correctly on Cygwin now</li>
  <li>Pajek parser corrected to read files with MacOS newline characters correctly</li>
  <li>overflow bug in transitivity calculation for large graphs corrected</li>
  <li>an internal memcpy/memmove bug causing some segfaults removed</li>
</ul>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.3.3]]></summary></entry><entry><title type="html">R/igraph 0.3.3</title><link href="https://igraph.org/2007/02/28/igraph-0.3.3-r.html" rel="alternate" type="text/html" title="R/igraph 0.3.3" /><published>2007-02-28T00:00:00+00:00</published><updated>2007-02-28T00:00:00+00:00</updated><id>https://igraph.org/2007/02/28/igraph-0.3.3-r</id><content type="html" xml:base="https://igraph.org/2007/02/28/igraph-0.3.3-r.html"><![CDATA[<h1 id="rigraph-033">R/igraph 0.3.3</h1>

<h2 id="new-in-the-r-interface">New in the R interface</h2>

<ul>
  <li><code class="language-plaintext highlighter-rouge">connect.neighborhood()</code></li>
  <li><code class="language-plaintext highlighter-rouge">watts.strogatz.game()</code> and <code class="language-plaintext highlighter-rouge">rewire.edges()</code></li>
  <li>K-core decomposition: <code class="language-plaintext highlighter-rouge">graph.coreness()</code></li>
  <li>added the <code class="language-plaintext highlighter-rouge">innei</code> and <code class="language-plaintext highlighter-rouge">outnei</code> shorthands for vertex sequence indexing
see <code class="language-plaintext highlighter-rouge">help(iterators)</code></li>
  <li>Clique and independent vertex set related functions:
<code class="language-plaintext highlighter-rouge">cliques</code>, <code class="language-plaintext highlighter-rouge">largest.cliques</code>, <code class="language-plaintext highlighter-rouge">maximal.cliques</code>, <code class="language-plaintext highlighter-rouge">clique.number</code>,
<code class="language-plaintext highlighter-rouge">independent.vertex.sets</code>, <code class="language-plaintext highlighter-rouge">largest.independent.vertex.sets</code>,
<code class="language-plaintext highlighter-rouge">maximal.independent.vertex.sets</code>, <code class="language-plaintext highlighter-rouge">independence.number</code></li>
  <li>The GraphML file format now supports graph attributes</li>
  <li><code class="language-plaintext highlighter-rouge">edge.lty</code> argument added to <code class="language-plaintext highlighter-rouge">plot.igraph</code> and <code class="language-plaintext highlighter-rouge">tkplot</code></li>
  <li>Transitivity calculation speeded up</li>
  <li>Correct transitivity calculation for multigraphs (ie. non-simple graphs)</li>
  <li><code class="language-plaintext highlighter-rouge">alpha.centrality added(),</code> calculates Bonacich alpha centrality, see docs.</li>
</ul>

<!--more-->

<h2 id="bugs-corrected">Bugs corrected</h2>

<ul>
  <li><code class="language-plaintext highlighter-rouge">make install</code> installs the library correctly on Cygwin now</li>
  <li>Pajek parser corrected to read files with MacOS newline characters correctly</li>
  <li>overflow bug in transitivity calculation for large graphs corrected</li>
  <li>an internal memcpy/memmove bug causing some segfaults removed</li>
  <li>R interface: <code class="language-plaintext highlighter-rouge">tkplot()</code> bug with graphs containing a <code class="language-plaintext highlighter-rouge">name</code> attribute</li>
  <li>R interface: attribute handling bug when adding vertices</li>
  <li>R interface: color selection bug corrected</li>
  <li>R interface: <code class="language-plaintext highlighter-rouge">plot.igraph()</code> when plotting loops</li>
</ul>]]></content><author><name></name></author><category term="r" /><summary type="html"><![CDATA[R/igraph 0.3.3]]></summary></entry><entry><title type="html">Python interface documentation</title><link href="https://igraph.org/2007/01/08/Python-interface-documentation.html" rel="alternate" type="text/html" title="Python interface documentation" /><published>2007-01-08T00:00:00+00:00</published><updated>2007-01-08T00:00:00+00:00</updated><id>https://igraph.org/2007/01/08/Python-interface-documentation</id><content type="html" xml:base="https://igraph.org/2007/01/08/Python-interface-documentation.html"><![CDATA[<h1 id="python-interface-documentation">Python interface documentation</h1>

<p>January 8, 2007</p>

<p>The documentation of the Python interface is available.
See section ‘documentation’ in the menu.</p>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[Python interface documentation]]></summary></entry><entry><title type="html">C/igraph 0.3.2</title><link href="https://igraph.org/2006/12/19/igraph-0.3.2-c.html" rel="alternate" type="text/html" title="C/igraph 0.3.2" /><published>2006-12-19T00:00:00+00:00</published><updated>2006-12-19T00:00:00+00:00</updated><id>https://igraph.org/2006/12/19/igraph-0.3.2-c</id><content type="html" xml:base="https://igraph.org/2006/12/19/igraph-0.3.2-c.html"><![CDATA[<h1 id="cigraph-032">C/igraph 0.3.2</h1>

<p>December 19, 2006</p>

<p>This is a new major release, it contains many new things:
geometric random graphs, local transitivity, etc.</p>

<!--more-->

<h2 id="changes-in-the-c-library">Changes in the C library</h2>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_maxdegree</code> added, calculates the maximum degree in the graph</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_grg_game</code>, geometric random graphs</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_density</code>, graph density calculation</li>
  <li>push-relabel maximum flow algorithm added, <code class="language-plaintext highlighter-rouge">igraph_maxflow_value</code></li>
  <li>minimum cut functions added based on maximum flow:
<code class="language-plaintext highlighter-rouge">igraph_st_mincut_value</code>, <code class="language-plaintext highlighter-rouge">igraph_mincut_value</code>, the Stoer-Wagner
algorithm is implemented for undirected graphs</li>
  <li>vertex connectivity functions, usually based on maximum flow:
<code class="language-plaintext highlighter-rouge">igraph_st_vertex_connectivity</code>, <code class="language-plaintext highlighter-rouge">igraph_vertex_connectivity</code></li>
  <li>edge connectivity functions, usually based on maximum flow:
<code class="language-plaintext highlighter-rouge">igraph_st_edge_connectivity</code>, <code class="language-plaintext highlighter-rouge">igraph_edge_connectivity</code></li>
  <li>other functions based on maximum flow: <code class="language-plaintext highlighter-rouge">igraph_edge_disjoint_paths</code>,
<code class="language-plaintext highlighter-rouge">igraph_vertex_disjoint_paths</code>, <code class="language-plaintext highlighter-rouge">igraph_adhesion</code>, <code class="language-plaintext highlighter-rouge">igraph_cohesion</code></li>
  <li>dimacs file format added</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_to_directed</code> handles attributes</li>
  <li>igraph_constraint calculation corrected, it handles weighted graphs</li>
  <li>spinglass-based community structure detection, the Joerg Reichardt –
Stefan Bornholdt algorithm added: <code class="language-plaintext highlighter-rouge">igraph_spinglass_community</code>,
<code class="language-plaintext highlighter-rouge">igraph_spinglass_my_community</code></li>
  <li><code class="language-plaintext highlighter-rouge">igraph_extended_chordal_ring</code>, it creates extended chordal rings</li>
  <li><code class="language-plaintext highlighter-rouge">no</code> argument added to <code class="language-plaintext highlighter-rouge">igraph_clusters</code>, it is possible to calculate
the number of clusters without calculating the clusters themselves</li>
  <li>minimum spanning tree functions keep attributes now and also the 
direction of the edges is kept in directed graphs</li>
  <li>there are separate functions to calculate different types of
transitivity now</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_delete_vertices</code> rewritten to allocate less memory for the new
graph</li>
  <li>neighborhood related functions added: <code class="language-plaintext highlighter-rouge">igraph_neighborhood</code>,
<code class="language-plaintext highlighter-rouge">igraph_neighborhood_size</code>, <code class="language-plaintext highlighter-rouge">igraph_neighborhood_graphs</code></li>
  <li>two new games added based on different node types:
<code class="language-plaintext highlighter-rouge">igraph_preference_game</code> and <code class="language-plaintext highlighter-rouge">igraph_asymmetric_preference_game</code></li>
  <li>Laplacian of a graph can be calculated by the <code class="language-plaintext highlighter-rouge">igraph_laplacian</code> function</li>
</ul>

<h2 id="bugs-corrected">Bugs corrected</h2>

<ul>
  <li>attribute handling bug when deleting edges corrected</li>
  <li>GraphML escaping and NaN handling corrected</li>
  <li>a bug in Erdos-Renyi graph generation corrected: it had problems 
with generating large directed graphs</li>
  <li>bug in constraint calculation corrected, it works well now</li>
  <li>fixed memory leaks in <code class="language-plaintext highlighter-rouge">igraph_read_graph_graphml</code></li>
  <li>error handling bug corrected in <code class="language-plaintext highlighter-rouge">igraph_read_graph_graphml</code></li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.3.2]]></summary></entry><entry><title type="html">python-igraph 0.3.2</title><link href="https://igraph.org/2006/12/19/igraph-0.3.2-python.html" rel="alternate" type="text/html" title="python-igraph 0.3.2" /><published>2006-12-19T00:00:00+00:00</published><updated>2006-12-19T00:00:00+00:00</updated><id>https://igraph.org/2006/12/19/igraph-0.3.2-python</id><content type="html" xml:base="https://igraph.org/2006/12/19/igraph-0.3.2-python.html"><![CDATA[<h1 id="python-igraph-032">python-igraph 0.3.2</h1>

<p>December 19, 2006</p>

<p>This is a new major release, it contains many new things:
geometric random graphs, local transitivity, etc.</p>

<!--more-->

<h2 id="changes-in-the-c-library">Changes in the C library</h2>

<ul>
  <li><code class="language-plaintext highlighter-rouge">igraph_maxdegree</code> added, calculates the maximum degree in the graph</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_grg_game</code>, geometric random graphs</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_density</code>, graph density calculation</li>
  <li>push-relabel maximum flow algorithm added, <code class="language-plaintext highlighter-rouge">igraph_maxflow_value</code></li>
  <li>minimum cut functions added based on maximum flow:
<code class="language-plaintext highlighter-rouge">igraph_st_mincut_value</code>, <code class="language-plaintext highlighter-rouge">igraph_mincut_value</code>, the Stoer-Wagner
algorithm is implemented for undirected graphs</li>
  <li>vertex connectivity functions, usually based on maximum flow:
<code class="language-plaintext highlighter-rouge">igraph_st_vertex_connectivity</code>, <code class="language-plaintext highlighter-rouge">igraph_vertex_connectivity</code></li>
  <li>edge connectivity functions, usually based on maximum flow:
<code class="language-plaintext highlighter-rouge">igraph_st_edge_connectivity</code>, <code class="language-plaintext highlighter-rouge">igraph_edge_connectivity</code></li>
  <li>other functions based on maximum flow: <code class="language-plaintext highlighter-rouge">igraph_edge_disjoint_paths</code>,
<code class="language-plaintext highlighter-rouge">igraph_vertex_disjoint_paths</code>, <code class="language-plaintext highlighter-rouge">igraph_adhesion</code>, <code class="language-plaintext highlighter-rouge">igraph_cohesion</code></li>
  <li>dimacs file format added</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_to_directed</code> handles attributes</li>
  <li>igraph_constraint calculation corrected, it handles weighted graphs</li>
  <li>spinglass-based community structure detection, the Joerg Reichardt –
Stefan Bornholdt algorithm added: <code class="language-plaintext highlighter-rouge">igraph_spinglass_community</code>,
<code class="language-plaintext highlighter-rouge">igraph_spinglass_my_community</code></li>
  <li><code class="language-plaintext highlighter-rouge">igraph_extended_chordal_ring</code>, it creates extended chordal rings</li>
  <li><code class="language-plaintext highlighter-rouge">no</code> argument added to <code class="language-plaintext highlighter-rouge">igraph_clusters</code>, it is possible to calculate
the number of clusters without calculating the clusters themselves</li>
  <li>minimum spanning tree functions keep attributes now and also the 
direction of the edges is kept in directed graphs</li>
  <li>there are separate functions to calculate different types of
transitivity now</li>
  <li><code class="language-plaintext highlighter-rouge">igraph_delete_vertices</code> rewritten to allocate less memory for the new
graph</li>
  <li>neighborhood related functions added: <code class="language-plaintext highlighter-rouge">igraph_neighborhood</code>,
<code class="language-plaintext highlighter-rouge">igraph_neighborhood_size</code>, <code class="language-plaintext highlighter-rouge">igraph_neighborhood_graphs</code></li>
  <li>two new games added based on different node types:
<code class="language-plaintext highlighter-rouge">igraph_preference_game</code> and <code class="language-plaintext highlighter-rouge">igraph_asymmetric_preference_game</code></li>
  <li>Laplacian of a graph can be calculated by the <code class="language-plaintext highlighter-rouge">igraph_laplacian</code> function</li>
</ul>

<h2 id="bugs-corrected">Bugs corrected</h2>

<ul>
  <li>attribute handling bug when deleting edges corrected</li>
  <li>GraphML escaping and NaN handling corrected</li>
  <li>a bug in Erdos-Renyi graph generation corrected: it had problems 
with generating large directed graphs</li>
  <li>bug in constraint calculation corrected, it works well now</li>
  <li>fixed memory leaks in <code class="language-plaintext highlighter-rouge">igraph_read_graph_graphml</code></li>
  <li>error handling bug corrected in <code class="language-plaintext highlighter-rouge">igraph_read_graph_graphml</code></li>
  <li>bug corrected in R version of <code class="language-plaintext highlighter-rouge">graph.laplacian</code> when normalized
Laplacian is requested</li>
  <li>memory leak corrected in <code class="language-plaintext highlighter-rouge">get.all.shortest.paths</code> in the R package</li>
</ul>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.3.2]]></summary></entry><entry><title type="html">R/igraph 0.3.2</title><link href="https://igraph.org/2006/12/19/igraph-0.3.2-r.html" rel="alternate" type="text/html" title="R/igraph 0.3.2" /><published>2006-12-19T00:00:00+00:00</published><updated>2006-12-19T00:00:00+00:00</updated><id>https://igraph.org/2006/12/19/igraph-0.3.2-r</id><content type="html" xml:base="https://igraph.org/2006/12/19/igraph-0.3.2-r.html"><![CDATA[<h1 id="rigraph-032">R/igraph 0.3.2</h1>

<p>December 19, 2006</p>

<p>This is a new major release, it contains many new things:
geometric random graphs, creating a graph with attributes from a data frame
in R, local transitivity, etc.</p>

<!--more-->

<h2 id="changes-in-the-r-interface">Changes in the R interface</h2>

<ul>
  <li><code class="language-plaintext highlighter-rouge">bonpow</code> function ported from SNA to calculate Bonacich power centrality</li>
  <li><code class="language-plaintext highlighter-rouge">get.adjacency</code> supports attributes now, this means that it sets the
colnames  and rownames attributes and can return attribute values in
the matrix instead of 0/1</li>
  <li><code class="language-plaintext highlighter-rouge">grg.game</code>, geometric random graphs</li>
  <li><code class="language-plaintext highlighter-rouge">graph.density</code>, graph density calculation</li>
  <li>edge and vertex attributes can be added easily now when added new
edges with <code class="language-plaintext highlighter-rouge">add.edges</code> or new vertices with <code class="language-plaintext highlighter-rouge">add.vertices</code></li>
  <li><code class="language-plaintext highlighter-rouge">graph.data.frame</code> creates graph from data frames, this can be used to 
create graphs with edge attributes easily</li>
  <li><code class="language-plaintext highlighter-rouge">plot.igraph</code> and <code class="language-plaintext highlighter-rouge">tkplot</code> can plot self-loop edges now</li>
  <li><code class="language-plaintext highlighter-rouge">graph.edgelist</code> to create a graph from an edge list, can also handle 
edge lists with symbolic names</li>
  <li><code class="language-plaintext highlighter-rouge">get.edgelist</code> has now a ‘names’ argument and can return symbolic
vertex names instead of vertex ids, by default id uses the <code class="language-plaintext highlighter-rouge">name</code>
vertex attribute is returned</li>
  <li>printing graphs on screen also prints symbolic symbolic names
(the <code class="language-plaintext highlighter-rouge">name</code> attribute if present)</li>
  <li>maximum flow and minimum cut functions: <code class="language-plaintext highlighter-rouge">graph.maxflow</code>, <code class="language-plaintext highlighter-rouge">graph.mincut</code></li>
  <li>vertex and edge connectivity: <code class="language-plaintext highlighter-rouge">edge.connectivity</code>, <code class="language-plaintext highlighter-rouge">vertex.connectivity</code></li>
  <li>edge and vertex disjoint paths: <code class="language-plaintext highlighter-rouge">edge.disjoint.paths</code>, 
<code class="language-plaintext highlighter-rouge">vertex.disjoint.paths</code></li>
  <li>White’s cohesion and adhesion measure: <code class="language-plaintext highlighter-rouge">graph.adhesion</code>, <code class="language-plaintext highlighter-rouge">graph.cohesion</code></li>
  <li>dimacs file format added</li>
  <li><code class="language-plaintext highlighter-rouge">as.directed</code> handles attributes now</li>
  <li>constraint corrected, it handles weighted graphs as well now</li>
  <li>weighted attribute to <code class="language-plaintext highlighter-rouge">graph.adjacency</code></li>
  <li>spinglass-based community structure detection, the Joerg Reichardt –
Stefan Bornholdt algorithm added: <code class="language-plaintext highlighter-rouge">spinglass.community</code></li>
  <li><code class="language-plaintext highlighter-rouge">graph.extended.chordal.ring</code>, extended chordal ring generation</li>
  <li><code class="language-plaintext highlighter-rouge">no.clusters</code> calculates the number of clusters without calculating
the clusters themselves</li>
  <li>minimum spanning tree functions updated to keep attributes</li>
  <li><code class="language-plaintext highlighter-rouge">transitivity</code> can calculate local transitivity as well</li>
  <li>neighborhood related functions added: <code class="language-plaintext highlighter-rouge">neighborhood</code>,
<code class="language-plaintext highlighter-rouge">neighborhood.size</code>, <code class="language-plaintext highlighter-rouge">graph.neighborhood</code></li>
  <li>new graph generators based on vertex types: <code class="language-plaintext highlighter-rouge">preference.game</code> and
<code class="language-plaintext highlighter-rouge">asymmetric.preference.game</code></li>
</ul>

<h2 id="bugs-corrected">Bugs corrected</h2>

<ul>
  <li>attribute handling bug when deleting edges corrected</li>
  <li>GraphML escaping and NaN handling corrected</li>
  <li>bug corrected to make it possible compile the R package without the 
libxml2 library</li>
  <li>a bug in Erdos-Renyi graph generation corrected: it had problems 
with generating large directed graphs</li>
  <li>bug in constraint calculation corrected, it works well now</li>
  <li>fixed memory leaks in <code class="language-plaintext highlighter-rouge">igraph_read_graph_graphml</code></li>
  <li>error handling bug corrected in <code class="language-plaintext highlighter-rouge">igraph_read_graph_graphml</code></li>
  <li>bug corrected in R version of <code class="language-plaintext highlighter-rouge">graph.laplacian</code> when normalized
Laplacian is requested</li>
  <li>memory leak corrected in <code class="language-plaintext highlighter-rouge">get.all.shortest.paths</code> in the R package</li>
</ul>]]></content><author><name></name></author><category term="r" /><summary type="html"><![CDATA[R/igraph 0.3.2]]></summary></entry><entry><title type="html">C/igraph 0.2.1</title><link href="https://igraph.org/2006/08/23/igraph-0.2.1-c.html" rel="alternate" type="text/html" title="C/igraph 0.2.1" /><published>2006-08-23T00:00:00+00:00</published><updated>2006-08-23T00:00:00+00:00</updated><id>https://igraph.org/2006/08/23/igraph-0.2.1-c</id><content type="html" xml:base="https://igraph.org/2006/08/23/igraph-0.2.1-c.html"><![CDATA[<h1 id="cigraph-021">C/igraph 0.2.1</h1>

<p>August 23, 2006</p>

<p>This is a bug-fix release. Bugs fixed:</p>

<ul>
  <li>igraph_reciprocity corrected to avoid segfaults</li>
  <li>some docs updates</li>
</ul>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.2.1]]></summary></entry><entry><title type="html">python-igraph 0.2.1</title><link href="https://igraph.org/2006/08/23/igraph-0.2.1-python.html" rel="alternate" type="text/html" title="python-igraph 0.2.1" /><published>2006-08-23T00:00:00+00:00</published><updated>2006-08-23T00:00:00+00:00</updated><id>https://igraph.org/2006/08/23/igraph-0.2.1-python</id><content type="html" xml:base="https://igraph.org/2006/08/23/igraph-0.2.1-python.html"><![CDATA[<h1 id="python-igraph-021">python-igraph 0.2.1</h1>

<p>August 23, 2006</p>

<p>This is a bug-fix release. Bugs fixed:</p>

<ul>
  <li>igraph_reciprocity corrected to avoid segfaults</li>
  <li>some docs updates</li>
</ul>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.2.1]]></summary></entry><entry><title type="html">R/igraph 0.2.1</title><link href="https://igraph.org/2006/08/23/igraph-0.2.1-r.html" rel="alternate" type="text/html" title="R/igraph 0.2.1" /><published>2006-08-23T00:00:00+00:00</published><updated>2006-08-23T00:00:00+00:00</updated><id>https://igraph.org/2006/08/23/igraph-0.2.1-r</id><content type="html" xml:base="https://igraph.org/2006/08/23/igraph-0.2.1-r.html"><![CDATA[<h1 id="rigraph-021">R/igraph 0.2.1</h1>

<p>August 23, 2006</p>

<p>This is a bug-fix release. Bugs fixed:</p>

<ul>
  <li>igraph_reciprocity (reciprocity in R) corrected to avoid segfaults</li>
  <li>some docs updates</li>
  <li>various R package updated to make it conform to the CRAN rules</li>
</ul>]]></content><author><name></name></author><category term="r" /><summary type="html"><![CDATA[R/igraph 0.2.1]]></summary></entry><entry><title type="html">C/igraph 0.2</title><link href="https://igraph.org/2006/08/18/igraph-0.2-c.html" rel="alternate" type="text/html" title="C/igraph 0.2" /><published>2006-08-18T00:00:00+00:00</published><updated>2006-08-18T00:00:00+00:00</updated><id>https://igraph.org/2006/08/18/igraph-0.2-c</id><content type="html" xml:base="https://igraph.org/2006/08/18/igraph-0.2-c.html"><![CDATA[<h1 id="cigraph-02">C/igraph 0.2</h1>

<p>August 18, 2006</p>

<p>Release time at last! There are many new things in igraph 0.2, the
most important ones:</p>

<ul>
  <li>reading writing Pajek and GraphML formats with attributes
(not all Pajek and GraphML files are supported, see documentation
for details)</li>
  <li>iterators totally rewritten, it is much faster and cleaner now</li>
  <li>the RANDEDU fast motif search algorithm is implemented</li>
  <li>many new graph generators, both games and regular graphs</li>
  <li>many new structural properties: transitivity, reciprocity, etc.</li>
  <li>graph operators: union, intersection, difference, structural holes, etc.</li>
  <li>conversion between directed and undirected graphs</li>
  <li>new layout algorithms for trees and large graphs, 3D layouts</li>
</ul>

<p>and many more.</p>

<p>Although this release was somewhat tested on Linux, MS Windows, Mac
OSX, Solaris 8 and FreeBSD, no heavy testing was done, so it might
contain bugs, and we kindly ask you to send bug reports to make igraph
better.</p>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.2]]></summary></entry><entry><title type="html">python-igraph 0.2</title><link href="https://igraph.org/2006/08/18/igraph-0.2-python.html" rel="alternate" type="text/html" title="python-igraph 0.2" /><published>2006-08-18T00:00:00+00:00</published><updated>2006-08-18T00:00:00+00:00</updated><id>https://igraph.org/2006/08/18/igraph-0.2-python</id><content type="html" xml:base="https://igraph.org/2006/08/18/igraph-0.2-python.html"><![CDATA[<h1 id="python-igraph-02">python-igraph 0.2</h1>

<p>August 18, 2006</p>

<p>Release time at last! There are many new things in igraph 0.2, the
most important ones:</p>

<ul>
  <li>reading writing Pajek and GraphML formats with attributes
(not all Pajek and GraphML files are supported, see documentation
for details)</li>
  <li>iterators totally rewritten, it is much faster and cleaner now</li>
  <li>the RANDEDU fast motif search algorithm is implemented</li>
  <li>many new graph generators, both games and regular graphs</li>
  <li>many new structural properties: transitivity, reciprocity, etc.</li>
  <li>graph operators: union, intersection, difference, structural holes, etc.</li>
  <li>conversion between directed and undirected graphs</li>
  <li>new layout algorithms for trees and large graphs, 3D layouts</li>
</ul>

<p>and many more.</p>

<p>Although this release was somewhat tested on Linux, MS Windows, Mac
OSX, Solaris 8 and FreeBSD, no heavy testing was done, so it might
contain bugs, and we kindly ask you to send bug reports to make igraph
better.</p>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.2]]></summary></entry><entry><title type="html">R/igraph 0.2</title><link href="https://igraph.org/2006/08/18/igraph-0.2-r.html" rel="alternate" type="text/html" title="R/igraph 0.2" /><published>2006-08-18T00:00:00+00:00</published><updated>2006-08-18T00:00:00+00:00</updated><id>https://igraph.org/2006/08/18/igraph-0.2-r</id><content type="html" xml:base="https://igraph.org/2006/08/18/igraph-0.2-r.html"><![CDATA[<h1 id="rigraph-02">R/igraph 0.2</h1>

<p>August 18, 2006</p>

<p>Release time at last! There are many new things in igraph 0.2, the
most important ones:</p>

<ul>
  <li>reading writing Pajek and GraphML formats with attributes
(not all Pajek and GraphML files are supported, see documentation
for details)</li>
  <li>iterators totally rewritten, it is much faster and cleaner now</li>
  <li>the RANDEDU fast motif search algorithm is implemented</li>
  <li>many new graph generators, both games and regular graphs</li>
  <li>many new structural properties: transitivity, reciprocity, etc.</li>
  <li>graph operators: union, intersection, difference, structural holes, etc.</li>
  <li>conversion between directed and undirected graphs</li>
  <li>new layout algorithms for trees and large graphs, 3D layouts</li>
</ul>

<p>and many more.</p>

<p>New things in the R package:</p>

<ul>
  <li>support for CTRL+C</li>
  <li>new functions: Graph Laplacian, Burt’s constraint, etc.</li>
  <li>vertex/edge sequences totally rewritten, smart indexing (see manual)</li>
  <li>new R manual and tutorial: ‘Network Analysis with igraph’, still 
under development but useful</li>
  <li>very basic 3D plotting using OpenGL</li>
</ul>

<p>Although this release was somewhat tested on Linux, MS Windows, Mac
OSX, Solaris 8 and FreeBSD, no heavy testing was done, so it might
contain bugs, and we kindly ask you to send bug reports to make igraph
better.</p>]]></content><author><name></name></author><category term="r" /><summary type="html"><![CDATA[R/igraph 0.2]]></summary></entry><entry><title type="html">igraph mailing lists</title><link href="https://igraph.org/2006/08/18/igraph-mailing-lists-c.html" rel="alternate" type="text/html" title="igraph mailing lists" /><published>2006-08-18T00:00:00+00:00</published><updated>2006-08-18T00:00:00+00:00</updated><id>https://igraph.org/2006/08/18/igraph-mailing-lists-c</id><content type="html" xml:base="https://igraph.org/2006/08/18/igraph-mailing-lists-c.html"><![CDATA[<h1 id="igraph-mailing-lists">igraph mailing lists</h1>

<p>August 18, 2006</p>

<p>I’ve set up two igraph mailing lists: <strong>igraph-help</strong> for
general igraph questions and discussion and
<strong>igraph-anonunce</strong> for announcements. See 
http://lists.nongnu.org/mailman/listinfo/igraph-help and
http://lists.nongnu.org/mailman/listinfo/igraph-announce
for subscription information, archives, etc.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[igraph mailing lists]]></summary></entry><entry><title type="html">C/igraph 0.1</title><link href="https://igraph.org/2006/01/30/igraph-0.1-c.html" rel="alternate" type="text/html" title="C/igraph 0.1" /><published>2006-01-30T00:00:00+00:00</published><updated>2006-01-30T00:00:00+00:00</updated><id>https://igraph.org/2006/01/30/igraph-0.1-c</id><content type="html" xml:base="https://igraph.org/2006/01/30/igraph-0.1-c.html"><![CDATA[<h1 id="cigraph-01">C/igraph 0.1</h1>

<p>January 30, 2006</p>

<p>After about a year of development this is the first “official” release 
of the igraph library. This release should be considered as beta 
software, but it should be useful in general. Please send your 
questions and comments.</p>]]></content><author><name></name></author><category term="c" /><summary type="html"><![CDATA[C/igraph 0.1]]></summary></entry><entry><title type="html">python-igraph 0.1</title><link href="https://igraph.org/2006/01/30/igraph-0.1-python.html" rel="alternate" type="text/html" title="python-igraph 0.1" /><published>2006-01-30T00:00:00+00:00</published><updated>2006-01-30T00:00:00+00:00</updated><id>https://igraph.org/2006/01/30/igraph-0.1-python</id><content type="html" xml:base="https://igraph.org/2006/01/30/igraph-0.1-python.html"><![CDATA[<h1 id="python-igraph-01">python-igraph 0.1</h1>

<p>January 30, 2006</p>

<p>After about a year of development this is the first “official” release 
of the igraph library. This release should be considered as beta 
software, but it should be useful in general. Please send your 
questions and comments.</p>]]></content><author><name></name></author><category term="python" /><summary type="html"><![CDATA[python-igraph 0.1]]></summary></entry><entry><title type="html">R/igraph 0.1</title><link href="https://igraph.org/2006/01/30/igraph-0.1-r.html" rel="alternate" type="text/html" title="R/igraph 0.1" /><published>2006-01-30T00:00:00+00:00</published><updated>2006-01-30T00:00:00+00:00</updated><id>https://igraph.org/2006/01/30/igraph-0.1-r</id><content type="html" xml:base="https://igraph.org/2006/01/30/igraph-0.1-r.html"><![CDATA[<h1 id="rigraph-01">R/igraph 0.1</h1>

<p>January 30, 2006</p>

<p>After about a year of development this is the first “official” release 
of the igraph library. This release should be considered as beta 
software, but it should be useful in general. Please send your 
questions and comments.</p>]]></content><author><name></name></author><category term="r" /><summary type="html"><![CDATA[R/igraph 0.1]]></summary></entry></feed>