Skip to content

Commit

Permalink
Merge branch 'master' into feat/steiner
Browse files Browse the repository at this point in the history
  • Loading branch information
szhorvat authored Jul 6, 2024
2 parents b884fa2 + 251091a commit 24dce05
Show file tree
Hide file tree
Showing 302 changed files with 8,920 additions and 2,658 deletions.
9 changes: 9 additions & 0 deletions .all-contributorsrc
Original file line number Diff line number Diff line change
Expand Up @@ -585,6 +585,15 @@
"contributions": [
"code"
]
},
{
"login": "gendelpiekel",
"name": "Michael",
"avatar_url": "https://avatars.githubusercontent.com/u/14215028?v=4",
"profile": "https://github.com/gendelpiekel",
"contributions": [
"code"
]
}
],
"contributorsPerLine": 7
Expand Down
12 changes: 8 additions & 4 deletions .azure/build-win.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,14 @@ parameters:
- name: vcpkg_target_triplet
type: string
default: 'x64-windows-static-md'
- name: vsver # for choosing a VS toolset, see https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B#Internal_version_numbering
- name: vsver
# For choosing a VS toolset, see https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B#Internal_version_numbering
# Generally, 14.1 is VS2017, 14.2 is VS2019, while 14.3 and 14.4 are VS2022. Use a single digit after the dot to\
# be flexible with the patch version the current runner has installed. Note that VS 2022 17.10 and later require
# a version of 14.4 instead of 14.3, see:
# https://devblogs.microsoft.com/cppblog/msvc-toolset-minor-version-number-14-40-in-vs-2022-v17-10/
type: string
default: '14.1' # VS2017
default: '14.2' # VS2019

steps:
- task: Cache@2
Expand Down Expand Up @@ -96,8 +101,7 @@ steps:
set CXX=cl.exe
set CC=cl.exe
cmake .. -DCMAKE_PREFIX_PATH=%CONDA%\Library\lib ^
-DIGRAPH_USE_INTERNAL_BLAS=${{ parameters.int_blas }} ^
cmake .. -DIGRAPH_USE_INTERNAL_BLAS=${{ parameters.int_blas }} ^
-DIGRAPH_USE_INTERNAL_LAPACK=${{ parameters.int_lapack }} ^
-DIGRAPH_USE_INTERNAL_ARPACK=${{ parameters.int_arpack }} ^
-DIGRAPH_USE_INTERNAL_GLPK=${{ parameters.int_glpk }} ^
Expand Down
1 change: 1 addition & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<!-- Please disclose any use of LLMs (ChatGPT, Copilot, Gemini, etc.) during the preparation of this PR. -->
2 changes: 1 addition & 1 deletion .github/stale.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 60
daysUntilStale: 28

# Number of days of inactivity before a stale issue is closed
daysUntilClose: 14
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/cifuzz.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,14 @@ jobs:
fuzz-seconds: 720
output-sarif: true
- name: Upload Crash
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
if: failure() && steps.build.outcome == 'success'
with:
name: artifacts
path: ./out/artifacts
- name: Upload Sarif
if: always() && steps.build.outcome == 'success'
uses: github/codeql-action/upload-sarif@v2
uses: github/codeql-action/upload-sarif@v3
with:
# Path to SARIF file relative to the root of the repository
sarif_file: cifuzz-sarif/results.sarif
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/codecov.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,5 @@ jobs:

- name: Codecov.io
uses: codecov/codecov-action@v4
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
4 changes: 4 additions & 0 deletions .github/workflows/coverity.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ jobs:
coverity:
runs-on: ubuntu-latest

# Do not run in forks
if: github.repository == 'igraph/igraph'

steps:
- name: Install dependencies
run: sudo apt-get install bison flex libarpack2-dev libglpk-dev libgmp-dev libxml2-dev
Expand All @@ -21,6 +24,7 @@ jobs:
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: 'develop'

- name: Create build environment
run: cmake -E make_directory ${{github.workspace}}/build
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/stimulus.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ jobs:
ci:
runs-on: ubuntu-latest
env:
STIMULUS_VERSION: "0.19.0"
STIMULUS_VERSION: "0.21.6"
steps:
# Use Clang for more informative error messages
- name: Install Clang
Expand Down
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ exclude: "(^vendor/|\\.patch$)"

repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.4.0
rev: v4.6.0
hooks:
- id: mixed-line-ending
args: ["--fix=lf"]
Expand Down
93 changes: 92 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,100 @@

## [master]

### Fixed

- `igraph_layout_drl()` and `igraph_layout_drl_3d()` would crash with an assertion failure when interrupted. This is now fixed.
- Removed broken interruption support from `igraph_community_spinglass_single()`.

### Deprecated

- `igraph_minimum_spanning_tree_prim()` and `igraph_minimum_spanning_tree_unweighted()` are deprecated. Use `igraph_minimum_spanning_tree()` in conjunction with `igraph_subgraph_from_edges()` instead.

### Other

- Fixed multiple memory leaks in benchmark programs.
- Documentation improvements.

## [0.10.13]

### Added

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

### Fixed

- Fixed a bug that incorrectly cached that a graph has no multiple edges when `igraph_init_adjlist()` was called with `IGRAPH_NO_LOOPS` and `IGRAPH_NO_MULTIPLE` and all the multi-edges were loop edges.
- `igraph_is_forest()` 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.
- `igraph_hub_and_authority_scores()` no longer clips negative results to zeros when negative weights are present.
- Fixed an assertion failure in `igraph_realize_bipartite_degree_sequence()` with some non-graphical degree sequences when requesting simple bipartite graphs.
- `igraph_static_fitness_game()` checks the input more carefully, and avoids an infinite loop in rare edge cases, such as when (almost) all fitness scores are zero.
- `igraph_arpack_rnsolve()` used the incorrect error message text for some errors. This is now corrected.
- Corrected the detection of some MSVC-specific bitset intrinsics during configuration.
- Corrected a bug in the fallback implementation of `igraph_bitset_countl_zero()` when `IGRAPH_INTEGER_SIZE` was set to 32. This fallback implementation was _not_ used with GCC, Clang, or MSVC.

### Changed

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

### Other

- Documentation improvements.
- Reduced the memory usage of several functions by using bitsets instead of boolean vectors.
- `igraph_vector_intersect_sorted()` has better performance when the input vector sizes are similar.

## [0.10.12] - 2024-05-06

### Added

- `igraph_transitive_closure()` computes the transitive closure of a graph (experimental function).
- `igraph_reachability()` determines which vertices are reachable from each other in a graph (experimental function).
- `igraph_count_reachable()` counts how many vertices are reachable from each vertex (experimental function).
- Added a bitset data structure, `igraph_bitset_t`, and a set of corresponding functions (experimental functionality).

### Fixed

- `igraph_community_label_propagation()` is now interruptible.
- `igraph_is_bipartite()` would on rare occasions return invalid results when the cache was employed.
- `igraph_weighted_adjacency()` correctly passes through NaN values with `IGRAPH_ADJ_MAX`, and correctly recognizes symmetric adjacency matrices containing NaN values with `IGRAPH_ADJ_UNDIRECTED`.
- `igraph_read_graph_gml()` 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 `igraph_integer_t` size.
- Fixed a performance issue in `igraph_read_graph_graphml()` with files containing a very large number of entities, such as `&gt;`.
- `igraph_read_graph_pajek()` has improved vertex ID validation that better matches that of Pajek's own behavior.

### Changed

- `igraph_eigenvector_centrality()` 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.

### Deprecated

- `igraph_transitive_closure_dag()` is deprecated in favour of `igraph_transitive_closure()`

### Other

- Documentation improvements.
- `igraph_strength()` and `igraph_degree(loops=false)` are now faster when calculating values for all vertices (contributed by @gendelpiekel in #2602)

## [0.10.11] - 2024-04-02

### Added

- `igraph_is_complete()` checks whether there is a connection between all pairs of vertices (experimental function, contributed by Aymeric Agon-Rambosson @aagon in #2510).
- `igraph_join()` creates the _join_ of two graphs (experimental function, contributed by Quinn Buratynski @GanzuraTheConsumer in #2508).

### Fixed

Expand Down Expand Up @@ -1320,7 +1409,9 @@ Some of the highlights are:
- Provide proper support for Windows, using `__declspec(dllexport)` and `__declspec(dllimport)` for `DLL`s and static usage by using `#define IGRAPH_STATIC 1`.
- Provided integer versions of `dqueue` and `stack` data types.

[master]: https://github.com/igraph/igraph/compare/0.10.11..master
[master]: https://github.com/igraph/igraph/compare/0.10.13..master
[0.10.13]: https://github.com/igraph/igraph/compare/0.10.12..0.10.13
[0.10.12]: https://github.com/igraph/igraph/compare/0.10.11..0.10.12
[0.10.11]: https://github.com/igraph/igraph/compare/0.10.10..0.10.11
[0.10.10]: https://github.com/igraph/igraph/compare/0.10.9..0.10.10
[0.10.9]: https://github.com/igraph/igraph/compare/0.10.8..0.10.9
Expand Down
2 changes: 1 addition & 1 deletion CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ authors:
family-names: Noom
identifiers:
- type: doi
value: 10.5281/zenodo.4319996
value: 10.5281/zenodo.3630268
description: Zenodo
repository-code: 'https://github.com/igraph/igraph'
url: 'https://igraph.org'
Expand Down
7 changes: 4 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
# * SKIP_REGULAR_EXPRESSION to handle skipped tests properly (3.16)
# * CheckLinkerFlag for HAVE_NEW_DTAGS test (3.18)
# * cmake -E cat (3.18)
cmake_minimum_required(VERSION 3.18...3.27)
cmake_minimum_required(VERSION 3.18...3.29)

# Add etc/cmake to CMake's search path so we can put our private stuff there
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/etc/cmake)
Expand Down Expand Up @@ -113,10 +113,11 @@ endif()
check_symbol_exists(_configthreadlocale locale.h HAVE__CONFIGTHREADLOCALE)
cmake_pop_check_state()

# Check for 128-bit integer multiplication support, floating-point endianness
# and support for built-in overflow detection.
# Check for 128-bit integer multiplication support, floating-point endianness,
# support for built-in overflow detection and fast bit operation support.
include(ieee754_endianness)
include(uint128_support)
include(bit_operations_support)
include(safe_math_support)

if(NOT HAVE_USELOCALE AND NOT HAVE__CONFIGTHREADLOCALE)
Expand Down
Loading

0 comments on commit 24dce05

Please sign in to comment.