| 1 | ;;; GNU Guix --- Functional package management for GNU |
| 2 | ;;; Copyright © 2017, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net> |
| 3 | ;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com> |
| 4 | ;;; Copyright © 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr> |
| 5 | ;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il> |
| 6 | ;;; Copyright © 2019 Andreas Enge <andreas@enge.fr> |
| 7 | ;;; Copyright © 2020 Alexander Krotov <krotov@iitp.ru> |
| 8 | ;;; Copyright © 2020 Pierre Langlois <pierre.langlos@gmx.com> |
| 9 | ;;; |
| 10 | ;;; This file is part of GNU Guix. |
| 11 | ;;; |
| 12 | ;;; GNU Guix is free software; you can redistribute it and/or modify it |
| 13 | ;;; under the terms of the GNU General Public License as published by |
| 14 | ;;; the Free Software Foundation; either version 3 of the License, or (at |
| 15 | ;;; your option) any later version. |
| 16 | ;;; |
| 17 | ;;; GNU Guix is distributed in the hope that it will be useful, but |
| 18 | ;;; WITHOUT ANY WARRANTY; without even the implied warranty of |
| 19 | ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 20 | ;;; GNU General Public License for more details. |
| 21 | ;;; |
| 22 | ;;; You should have received a copy of the GNU General Public License |
| 23 | ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. |
| 24 | |
| 25 | (define-module (gnu packages graph) |
| 26 | #:use-module (guix download) |
| 27 | #:use-module (guix git-download) |
| 28 | #:use-module (guix packages) |
| 29 | #:use-module (guix utils) |
| 30 | #:use-module (guix build-system cmake) |
| 31 | #:use-module (guix build-system gnu) |
| 32 | #:use-module (guix build-system python) |
| 33 | #:use-module (guix build-system r) |
| 34 | #:use-module ((guix licenses) #:prefix license:) |
| 35 | #:use-module (gnu packages) |
| 36 | #:use-module (gnu packages gcc) |
| 37 | #:use-module (gnu packages autotools) |
| 38 | #:use-module (gnu packages bioconductor) |
| 39 | #:use-module (gnu packages bioinformatics) |
| 40 | #:use-module (gnu packages check) |
| 41 | #:use-module (gnu packages compression) |
| 42 | #:use-module (gnu packages cran) |
| 43 | #:use-module (gnu packages gd) |
| 44 | #:use-module (gnu packages graphviz) |
| 45 | #:use-module (gnu packages maths) |
| 46 | #:use-module (gnu packages multiprecision) |
| 47 | #:use-module (gnu packages pkg-config) |
| 48 | #:use-module (gnu packages python) |
| 49 | #:use-module (gnu packages python-science) |
| 50 | #:use-module (gnu packages python-web) |
| 51 | #:use-module (gnu packages python-xyz) |
| 52 | #:use-module (gnu packages statistics) |
| 53 | #:use-module (gnu packages swig) |
| 54 | #:use-module (gnu packages time) |
| 55 | #:use-module (gnu packages xml)) |
| 56 | |
| 57 | (define-public igraph |
| 58 | (package |
| 59 | (name "igraph") |
| 60 | (version "0.8.1") |
| 61 | (source |
| 62 | (origin |
| 63 | (method url-fetch) |
| 64 | (uri (string-append "https://github.com/igraph/igraph/releases/" |
| 65 | "download/" version "/igraph-" version ".tar.gz")) |
| 66 | (sha256 |
| 67 | (base32 "0wbvrac3ip3lqmbkckhnxa2swlbc86l1h8mazdlb618kx3winvi6")))) |
| 68 | (build-system gnu-build-system) |
| 69 | (arguments |
| 70 | `(#:configure-flags |
| 71 | (list "--with-external-glpk" |
| 72 | "--with-external-blas" |
| 73 | "--with-external-lapack"))) |
| 74 | (inputs |
| 75 | `(("gmp" ,gmp) |
| 76 | ("glpk" ,glpk) |
| 77 | ("libxml2" ,libxml2) |
| 78 | ("lapack" ,lapack) |
| 79 | ("openblas" ,openblas) |
| 80 | ("zlib" ,zlib))) |
| 81 | (home-page "https://igraph.org") |
| 82 | (synopsis "Network analysis and visualization") |
| 83 | (description |
| 84 | "This package provides a library for the analysis of networks and graphs. |
| 85 | It can handle large graphs very well and provides functions for generating |
| 86 | random and regular graphs, graph visualization, centrality methods and much |
| 87 | more.") |
| 88 | (license license:gpl2+))) |
| 89 | |
| 90 | (define-public python-igraph |
| 91 | (package (inherit igraph) |
| 92 | (name "python-igraph") |
| 93 | (version "0.8.0") |
| 94 | (source |
| 95 | (origin |
| 96 | (method url-fetch) |
| 97 | (uri (pypi-uri "python-igraph" version)) |
| 98 | (sha256 |
| 99 | (base32 |
| 100 | "13mbrlmnbgbzw6y8ws7wj0a3ly3in8j4l1ngi6yxvgvxxi4bprj7")))) |
| 101 | (build-system python-build-system) |
| 102 | (arguments |
| 103 | '(#:configure-flags |
| 104 | (list "--use-pkg-config") |
| 105 | #:phases |
| 106 | (modify-phases %standard-phases |
| 107 | (replace 'build |
| 108 | (lambda _ |
| 109 | (invoke "python" "./setup.py" "build" "--use-pkg-config"))) |
| 110 | (delete 'check) |
| 111 | (add-after 'install 'check |
| 112 | (lambda* (#:key inputs outputs #:allow-other-keys) |
| 113 | (add-installed-pythonpath inputs outputs) |
| 114 | (invoke "pytest" "-v")))))) |
| 115 | (inputs |
| 116 | `(("igraph" ,igraph))) |
| 117 | (propagated-inputs |
| 118 | `(("python-texttable" ,python-texttable))) |
| 119 | (native-inputs |
| 120 | `(("pkg-config" ,pkg-config) |
| 121 | ("python-pytest" ,python-pytest))) |
| 122 | (home-page "https://pypi.org/project/python-igraph/") |
| 123 | (synopsis "Python bindings for the igraph network analysis library"))) |
| 124 | |
| 125 | (define-public r-igraph |
| 126 | (package |
| 127 | (name "r-igraph") |
| 128 | (version "1.2.5") |
| 129 | (source |
| 130 | (origin |
| 131 | (method url-fetch) |
| 132 | (uri (cran-uri "igraph" version)) |
| 133 | (sha256 |
| 134 | (base32 |
| 135 | "126z1ygbmi3g7hk97snf22rnx680dyi30idssm5zacba5rdngp8c")))) |
| 136 | (build-system r-build-system) |
| 137 | (native-inputs |
| 138 | `(("gfortran" ,gfortran))) |
| 139 | (inputs |
| 140 | `(("gmp" ,gmp) |
| 141 | ("glpk" ,glpk) |
| 142 | ("libxml2" ,libxml2) |
| 143 | ("zlib" ,zlib))) |
| 144 | (propagated-inputs |
| 145 | `(("r-magrittr" ,r-magrittr) |
| 146 | ("r-matrix" ,r-matrix) |
| 147 | ("r-pkgconfig" ,r-pkgconfig))) |
| 148 | (home-page "https://igraph.org") |
| 149 | (synopsis "Network analysis and visualization") |
| 150 | (description |
| 151 | "This package provides routines for simple graphs and network analysis. |
| 152 | It can handle large graphs very well and provides functions for generating |
| 153 | random and regular graphs, graph visualization, centrality methods and much |
| 154 | more.") |
| 155 | (license license:gpl2+))) |
| 156 | |
| 157 | (define-public r-diffusionmap |
| 158 | (package |
| 159 | (name "r-diffusionmap") |
| 160 | (version "1.2.0") |
| 161 | (source |
| 162 | (origin |
| 163 | (method url-fetch) |
| 164 | (uri (cran-uri "diffusionMap" version)) |
| 165 | (sha256 |
| 166 | (base32 |
| 167 | "1rvk7069brlm1s9kqj4c31mwwr3mw4hmhay95cjjjfmw5xclff2j")))) |
| 168 | (properties `((upstream-name . "diffusionMap"))) |
| 169 | (build-system r-build-system) |
| 170 | (propagated-inputs |
| 171 | `(("r-igraph" ,r-igraph) |
| 172 | ("r-matrix" ,r-matrix) |
| 173 | ("r-scatterplot3d" ,r-scatterplot3d))) |
| 174 | (home-page "https://www.r-project.org") |
| 175 | (synopsis "Diffusion map") |
| 176 | (description "This package implements the diffusion map method of data |
| 177 | parametrization, including creation and visualization of diffusion maps, |
| 178 | clustering with diffusion K-means and regression using the adaptive regression |
| 179 | model.") |
| 180 | (license license:gpl2))) |
| 181 | |
| 182 | (define-public r-rgraphviz |
| 183 | (package |
| 184 | (name "r-rgraphviz") |
| 185 | (version "2.32.0") |
| 186 | (source |
| 187 | (origin |
| 188 | (method url-fetch) |
| 189 | (uri (bioconductor-uri "Rgraphviz" version)) |
| 190 | (sha256 |
| 191 | (base32 |
| 192 | "1calpvzgcz6v7s4x6bf35kj83sga95zjp7x87p5d3qnbv7q2wz5y")))) |
| 193 | (properties `((upstream-name . "Rgraphviz"))) |
| 194 | (build-system r-build-system) |
| 195 | ;; FIXME: Rgraphviz bundles the sources of an older variant of |
| 196 | ;; graphviz. It does not build with the latest version of graphviz, so |
| 197 | ;; we do not add graphviz to the inputs. |
| 198 | (inputs `(("zlib" ,zlib))) |
| 199 | (propagated-inputs |
| 200 | `(("r-graph" ,r-graph))) |
| 201 | (native-inputs |
| 202 | `(("pkg-config" ,pkg-config))) |
| 203 | (home-page "https://bioconductor.org/packages/Rgraphviz") |
| 204 | (synopsis "Plotting capabilities for R graph objects") |
| 205 | (description |
| 206 | "This package interfaces R with the graphviz library for plotting R graph |
| 207 | objects from the @code{graph} package.") |
| 208 | (license license:epl1.0))) |
| 209 | |
| 210 | (define-public r-rbiofabric |
| 211 | (let ((commit "666c2ae8b0a537c006592d067fac6285f71890ac") |
| 212 | (revision "1")) |
| 213 | (package |
| 214 | (name "r-rbiofabric") |
| 215 | (version (string-append "0.3-" revision "." (string-take commit 7))) |
| 216 | (source (origin |
| 217 | (method git-fetch) |
| 218 | (uri (git-reference |
| 219 | (url "https://github.com/wjrl/RBioFabric") |
| 220 | (commit commit))) |
| 221 | (file-name (string-append name "-" version "-checkout")) |
| 222 | (sha256 |
| 223 | (base32 |
| 224 | "1yahqrcrqpbcywv73y9rlmyz8apdnp08afialibrr93ch0p06f8z")))) |
| 225 | (build-system r-build-system) |
| 226 | (propagated-inputs |
| 227 | `(("r-igraph" ,r-igraph))) |
| 228 | (home-page "http://www.biofabric.org/") |
| 229 | (synopsis "BioFabric network visualization") |
| 230 | (description "This package provides an implementation of the function |
| 231 | @code{bioFabric} for creating scalable network digrams where nodes are |
| 232 | represented by horizontal lines, and edges are represented by vertical |
| 233 | lines.") |
| 234 | (license license:expat)))) |
| 235 | |
| 236 | (define-public python-plotly |
| 237 | (package |
| 238 | (name "python-plotly") |
| 239 | (version "4.8.1") |
| 240 | (source (origin |
| 241 | (method git-fetch) |
| 242 | (uri (git-reference |
| 243 | (url "https://github.com/plotly/plotly.py") |
| 244 | (commit (string-append "v" version)))) |
| 245 | (file-name (git-file-name name version)) |
| 246 | (sha256 |
| 247 | (base32 |
| 248 | "08ab677gr85m10zhixr6dnmlfws8q6sra7nhyb8nf3r8dx1ffqhz")))) |
| 249 | (build-system python-build-system) |
| 250 | (arguments |
| 251 | `(#:phases |
| 252 | (modify-phases %standard-phases |
| 253 | (add-after 'unpack 'chdir |
| 254 | (lambda _ |
| 255 | (chdir "packages/python/plotly") |
| 256 | #t)) |
| 257 | (replace 'check |
| 258 | (lambda _ |
| 259 | (invoke "pytest" "-x" "plotly/tests/test_core") |
| 260 | (invoke "pytest" "-x" "plotly/tests/test_io") |
| 261 | ;; FIXME: Add optional dependencies and enable their tests. |
| 262 | ;; (invoke "pytest" "-x" "plotly/tests/test_optional") |
| 263 | (invoke "pytest" "_plotly_utils/tests"))) |
| 264 | (add-before 'reset-gzip-timestamps 'make-files-writable |
| 265 | (lambda* (#:key outputs #:allow-other-keys) |
| 266 | (let ((out (assoc-ref outputs "out"))) |
| 267 | (for-each (lambda (file) (chmod file #o644)) |
| 268 | (find-files out "\\.gz")) |
| 269 | #t)))))) |
| 270 | (native-inputs |
| 271 | `(("python-pytest" ,python-pytest))) |
| 272 | (propagated-inputs |
| 273 | `(("python-decorator" ,python-decorator) |
| 274 | ("python-ipywidgets" ,python-ipywidgets) |
| 275 | ("python-pandas" ,python-pandas) |
| 276 | ("python-requests" ,python-requests) |
| 277 | ("python-retrying" ,python-retrying) |
| 278 | ("python-six" ,python-six) |
| 279 | ("python-statsmodels" ,python-statsmodels) |
| 280 | ("python-xarray" ,python-xarray))) |
| 281 | (home-page "https://plotly.com/python/") |
| 282 | (synopsis "Interactive plotting library for Python") |
| 283 | (description "Plotly's Python graphing library makes interactive, |
| 284 | publication-quality graphs online. Examples of how to make line plots, scatter |
| 285 | plots, area charts, bar charts, error bars, box plots, histograms, heatmaps, |
| 286 | subplots, multiple-axes, polar charts, and bubble charts. ") |
| 287 | (license license:expat))) |
| 288 | |
| 289 | (define-public python-plotly-2.4.1 |
| 290 | (package (inherit python-plotly) |
| 291 | (version "2.4.1") |
| 292 | (source |
| 293 | (origin |
| 294 | (method url-fetch) |
| 295 | (uri (pypi-uri "plotly" version)) |
| 296 | (sha256 |
| 297 | (base32 |
| 298 | "0s9gk2fl53x8wwncs3fwii1vzfngr0sskv15v3mpshqmrqfrk27m")))) |
| 299 | (native-inputs '()) |
| 300 | (propagated-inputs |
| 301 | `(("python-decorator" ,python-decorator) |
| 302 | ("python-nbformat" ,python-nbformat) |
| 303 | ("python-pandas" ,python-pandas) |
| 304 | ("python-pytz" ,python-pytz) |
| 305 | ("python-requests" ,python-requests) |
| 306 | ("python-six" ,python-six))) |
| 307 | (arguments |
| 308 | '(#:tests? #f)))) ; The tests are not distributed in the release |
| 309 | |
| 310 | (define-public python2-plotly |
| 311 | (package-with-python2 python-plotly-2.4.1)) |
| 312 | |
| 313 | (define-public python-louvain |
| 314 | (package |
| 315 | (name "python-louvain") |
| 316 | (version "0.6.1") |
| 317 | ;; The tarball on Pypi does not include the tests. |
| 318 | (source (origin |
| 319 | (method git-fetch) |
| 320 | (uri (git-reference |
| 321 | (url "https://github.com/vtraag/louvain-igraph") |
| 322 | (commit version))) |
| 323 | (file-name (git-file-name name version)) |
| 324 | (sha256 |
| 325 | (base32 |
| 326 | "0w31537sifkf65sck1iaip5i6d8g64pa3wdwad83d6p9jwkck57k")))) |
| 327 | (build-system python-build-system) |
| 328 | (propagated-inputs |
| 329 | `(("python-ddt" ,python-ddt) |
| 330 | ("python-igraph" ,python-igraph))) |
| 331 | (inputs |
| 332 | `(("igraph" ,igraph))) |
| 333 | (native-inputs |
| 334 | `(("pkg-config" ,pkg-config) |
| 335 | ("python-pytest" ,python-pytest))) |
| 336 | (home-page "https://github.com/vtraag/louvain-igraph") |
| 337 | (synopsis "Algorithm for methods of community detection in large networks") |
| 338 | (description |
| 339 | "This package provides an implementation of the Louvain algorithm for use |
| 340 | with igraph. Louvain is a general algorithm for methods of community |
| 341 | detection in large networks. |
| 342 | |
| 343 | This package has been superseded by the @code{leidenalg} package and should |
| 344 | not be used for new projects.") |
| 345 | (license license:gpl3+))) |
| 346 | |
| 347 | (define-public faiss |
| 348 | (package |
| 349 | (name "faiss") |
| 350 | (version "1.5.0") |
| 351 | (source (origin |
| 352 | (method git-fetch) |
| 353 | (uri (git-reference |
| 354 | (url "https://github.com/facebookresearch/faiss") |
| 355 | (commit (string-append "v" version)))) |
| 356 | (file-name (git-file-name name version)) |
| 357 | (sha256 |
| 358 | (base32 |
| 359 | "0pk15jfa775cy2pqmzq62nhd6zfjxmpvz5h731197c28aq3zw39w")) |
| 360 | (modules '((guix build utils))) |
| 361 | (snippet |
| 362 | '(begin |
| 363 | (substitute* "utils.cpp" |
| 364 | (("#include <immintrin.h>") |
| 365 | "#ifdef __SSE__\n#include <immintrin.h>\n#endif")) |
| 366 | #t)))) |
| 367 | (build-system cmake-build-system) |
| 368 | (arguments |
| 369 | `(#:configure-flags |
| 370 | (list "-DBUILD_WITH_GPU=OFF" ; thanks, but no thanks, CUDA. |
| 371 | "-DBUILD_TUTORIAL=OFF") ; we don't need those |
| 372 | #:phases |
| 373 | (modify-phases %standard-phases |
| 374 | (add-after 'unpack 'prepare-build |
| 375 | (lambda _ |
| 376 | (let ((features (list ,@(let ((system (or (%current-target-system) |
| 377 | (%current-system)))) |
| 378 | (cond |
| 379 | ((string-prefix? "x86_64" system) |
| 380 | '("-mavx" "-msse2" "-mpopcnt")) |
| 381 | ((string-prefix? "i686" system) |
| 382 | '("-msse2" "-mpopcnt")) |
| 383 | (else |
| 384 | '())))))) |
| 385 | (substitute* "CMakeLists.txt" |
| 386 | (("-m64") "") |
| 387 | (("-mpopcnt") "") ; only some architectures |
| 388 | (("-msse4") |
| 389 | (string-append |
| 390 | (string-join features) |
| 391 | " -I" (getcwd))) |
| 392 | ;; Build also the shared library |
| 393 | (("ARCHIVE DESTINATION lib") |
| 394 | "LIBRARY DESTINATION lib") |
| 395 | (("add_library.*" m) |
| 396 | "\ |
| 397 | add_library(objlib OBJECT ${faiss_cpu_headers} ${faiss_cpu_cpp}) |
| 398 | set_property(TARGET objlib PROPERTY POSITION_INDEPENDENT_CODE 1) |
| 399 | add_library(${faiss_lib}_static STATIC $<TARGET_OBJECTS:objlib>) |
| 400 | add_library(${faiss_lib} SHARED $<TARGET_OBJECTS:objlib>) |
| 401 | install(TARGETS ${faiss_lib}_static ARCHIVE DESTINATION lib) |
| 402 | \n"))) |
| 403 | |
| 404 | ;; See https://github.com/facebookresearch/faiss/issues/520 |
| 405 | (substitute* "IndexScalarQuantizer.cpp" |
| 406 | (("#define USE_AVX") "")) |
| 407 | |
| 408 | ;; Make header files available for compiling tests. |
| 409 | (mkdir-p "faiss") |
| 410 | (for-each (lambda (file) |
| 411 | (mkdir-p (string-append "faiss/" (dirname file))) |
| 412 | (copy-file file (string-append "faiss/" file))) |
| 413 | (find-files "." "\\.h$")) |
| 414 | #t)) |
| 415 | (replace 'check |
| 416 | (lambda _ |
| 417 | (invoke "make" "-C" "tests" |
| 418 | (format #f "-j~a" (parallel-job-count))))) |
| 419 | (add-after 'install 'remove-tests |
| 420 | (lambda* (#:key outputs #:allow-other-keys) |
| 421 | (delete-file-recursively |
| 422 | (string-append (assoc-ref outputs "out") |
| 423 | "/test")) |
| 424 | #t))))) |
| 425 | (inputs |
| 426 | `(("openblas" ,openblas))) |
| 427 | (native-inputs |
| 428 | `(("googletest" ,googletest))) |
| 429 | (home-page "https://github.com/facebookresearch/faiss") |
| 430 | (synopsis "Efficient similarity search and clustering of dense vectors") |
| 431 | (description "Faiss is a library for efficient similarity search and |
| 432 | clustering of dense vectors. It contains algorithms that search in sets of |
| 433 | vectors of any size, up to ones that possibly do not fit in RAM. It also |
| 434 | contains supporting code for evaluation and parameter tuning.") |
| 435 | (license license:bsd-3))) |
| 436 | |
| 437 | (define-public python-faiss |
| 438 | (package (inherit faiss) |
| 439 | (name "python-faiss") |
| 440 | (build-system python-build-system) |
| 441 | (arguments |
| 442 | `(#:phases |
| 443 | (modify-phases %standard-phases |
| 444 | (add-after 'unpack 'chdir |
| 445 | (lambda _ (chdir "python") #t)) |
| 446 | (add-after 'chdir 'build-swig |
| 447 | (lambda* (#:key inputs #:allow-other-keys) |
| 448 | (with-output-to-file "../makefile.inc" |
| 449 | (lambda () |
| 450 | (let ((python-version ,(version-major+minor (package-version python)))) |
| 451 | (format #t "\ |
| 452 | PYTHONCFLAGS =-I~a/include/python~am/ -I~a/lib/python~a/site-packages/numpy/core/include |
| 453 | LIBS = -lpython~am -lfaiss |
| 454 | SHAREDFLAGS = -shared -fopenmp |
| 455 | CXXFLAGS = -fpermissive -fopenmp -fPIC |
| 456 | CPUFLAGS = ~{~a ~}~%" |
| 457 | (assoc-ref inputs "python*") python-version |
| 458 | (assoc-ref inputs "python-numpy") python-version |
| 459 | python-version |
| 460 | (list ,@(let ((system (or (%current-target-system) |
| 461 | (%current-system)))) |
| 462 | (cond |
| 463 | ((string-prefix? "x86_64" system) |
| 464 | '("-mavx" "-msse2" "-mpopcnt")) |
| 465 | ((string-prefix? "i686" system) |
| 466 | '("-msse2" "-mpopcnt")) |
| 467 | (else |
| 468 | '())))))))) |
| 469 | (substitute* "Makefile" |
| 470 | (("../libfaiss.a") "")) |
| 471 | (invoke "make" "cpu")))))) |
| 472 | (inputs |
| 473 | `(("faiss" ,faiss) |
| 474 | ("openblas" ,openblas) |
| 475 | ("python*" ,python) |
| 476 | ("swig" ,swig))) |
| 477 | (propagated-inputs |
| 478 | `(("python-matplotlib" ,python-matplotlib) |
| 479 | ("python-numpy" ,python-numpy))) |
| 480 | (description "Faiss is a library for efficient similarity search and |
| 481 | clustering of dense vectors. This package provides Python bindings to the |
| 482 | Faiss library."))) |
| 483 | |
| 484 | (define-public python-leidenalg |
| 485 | (package |
| 486 | (name "python-leidenalg") |
| 487 | (version "0.7.0") |
| 488 | (source |
| 489 | (origin |
| 490 | (method url-fetch) |
| 491 | (uri (pypi-uri "leidenalg" version)) |
| 492 | (sha256 |
| 493 | (base32 |
| 494 | "15fwld9hdw357rd026mzcwpah5liy4f33vc9x9kwy37g71b2rjf1")))) |
| 495 | (build-system python-build-system) |
| 496 | (arguments '(#:tests? #f)) ; tests are not included |
| 497 | (native-inputs |
| 498 | `(("pkg-config" ,pkg-config))) |
| 499 | (inputs |
| 500 | `(("igraph" ,igraph))) |
| 501 | (propagated-inputs |
| 502 | `(("python-igraph" ,python-igraph))) |
| 503 | (home-page "https://github.com/vtraag/leidenalg") |
| 504 | (synopsis "Community detection in large networks") |
| 505 | (description |
| 506 | "Leiden is a general algorithm for methods of community detection in |
| 507 | large networks. This package implements the Leiden algorithm in C++ and |
| 508 | exposes it to Python. Besides the relative flexibility of the implementation, |
| 509 | it also scales well, and can be run on graphs of millions of nodes (as long as |
| 510 | they can fit in memory). The core function is @code{find_partition} which |
| 511 | finds the optimal partition using the Leiden algorithm, which is an extension |
| 512 | of the Louvain algorithm, for a number of different methods.") |
| 513 | (license license:gpl3+))) |
| 514 | |
| 515 | (define-public edge-addition-planarity-suite |
| 516 | (package |
| 517 | (name "edge-addition-planarity-suite") |
| 518 | (version "3.0.0.5") |
| 519 | (source |
| 520 | (origin |
| 521 | (method git-fetch) |
| 522 | (uri (git-reference |
| 523 | (url (string-append "https://github.com/graph-algorithms/" |
| 524 | name)) |
| 525 | (commit (string-append "Version_" version)))) |
| 526 | (file-name (git-file-name name version)) |
| 527 | (sha256 |
| 528 | (base32 |
| 529 | "01cm7ay1njkfsdnmnvh5zwc7wg7x189hq1vbfhh9p3ihrbnmqzh8")))) |
| 530 | (build-system gnu-build-system) |
| 531 | (native-inputs |
| 532 | `(("autoconf" ,autoconf) |
| 533 | ("automake" ,automake) |
| 534 | ("libtool" ,libtool))) |
| 535 | (synopsis "Embedding of planar graphs") |
| 536 | (description "The package provides a reference implementation of the |
| 537 | linear time edge addition algorithm for embedding planar graphs and |
| 538 | isolating planarity obstructions.") |
| 539 | (license license:bsd-3) |
| 540 | (home-page |
| 541 | "https://github.com/graph-algorithms/edge-addition-planarity-suite"))) |
| 542 | |
| 543 | (define-public rw |
| 544 | (package |
| 545 | (name "rw") |
| 546 | ;; There is a version 0.8, but the tarball is broken with symlinks |
| 547 | ;; to /usr/share. |
| 548 | (version "0.7") |
| 549 | (source (origin |
| 550 | (method url-fetch) |
| 551 | (uri (string-append "mirror://sourceforge/rankwidth/" |
| 552 | "rw-" version ".tar.gz")) |
| 553 | (sha256 |
| 554 | (base32 |
| 555 | "1rv2v42x2506x7f10349m1wpmmfxrv9l032bkminni2gbip9cjg0")))) |
| 556 | (build-system gnu-build-system) |
| 557 | (native-inputs |
| 558 | `(("pkg-config" ,pkg-config))) |
| 559 | (inputs |
| 560 | `(("igraph" ,igraph))) |
| 561 | (home-page "https://sourceforge.net/projects/rankwidth/") |
| 562 | (synopsis "Rank-width and rank-decomposition of graphs") |
| 563 | (description "rw computes rank-width and rank-decompositions |
| 564 | of graphs.") |
| 565 | (license license:gpl2+))) |
| 566 | |
| 567 | (define-public mscgen |
| 568 | (package |
| 569 | (name "mscgen") |
| 570 | (version "0.20") |
| 571 | (source |
| 572 | (origin |
| 573 | (method url-fetch) |
| 574 | (uri (string-append "http://www.mcternan.me.uk/mscgen/software/mscgen-src-" |
| 575 | version ".tar.gz")) |
| 576 | (sha256 |
| 577 | (base32 |
| 578 | "08yw3maxhn5fl1lff81gmcrpa4j9aas4mmby1g9w5qcr0np82d1w")))) |
| 579 | (build-system gnu-build-system) |
| 580 | (native-inputs |
| 581 | `(("pkg-config" ,pkg-config))) |
| 582 | (inputs |
| 583 | `(("gd" ,gd))) |
| 584 | (home-page "http://www.mcternan.me.uk/mscgen/") |
| 585 | (synopsis "Message Sequence Chart Generator") |
| 586 | (description "Mscgen is a small program that parses Message Sequence Chart |
| 587 | descriptions and produces PNG, SVG, EPS or server side image maps (ismaps) as |
| 588 | the output. Message Sequence Charts (MSCs) are a way of representing entities |
| 589 | and interactions over some time period and are often used in combination with |
| 590 | SDL. MSCs are popular in Telecoms to specify how protocols operate although |
| 591 | MSCs need not be complicated to create or use. Mscgen aims to provide a simple |
| 592 | text language that is clear to create, edit and understand, which can also be |
| 593 | transformed into common image formats for display or printing.") |
| 594 | (license license:gpl2+))) |