academic/louvain-community: Added (Louvain Detection Library).

Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
This commit is contained in:
Willy Sudiarto Raharjo 2024-03-29 21:33:47 +07:00
parent 35df5d6107
commit 5339c24f35
No known key found for this signature in database
GPG key ID: 3F617144D7238786
4 changed files with 237 additions and 0 deletions

View file

@ -0,0 +1,98 @@
[License: LGPL v3] [build]
Multi-criteria community detection library
This library makes the Louvain community detection system
significantly easier to use. Example code:
#include "louvain_communities/louvain_communities.h" #include
<iostream>
int main(int /*argc*/, char** /*argv*/) { LouvainC::Communities
graph;
//First community graph.add_edge(1, 2, 2L);
graph.add_edge(1, 3, 2L); graph.add_edge(1, 4, 2L);
graph.add_edge(2, 3, 2L); graph.add_edge(2, 4, 2L);
graph.add_edge(3, 4, 2L);
//Second community graph.add_edge(4, 5, 2L);
graph.add_edge(4, 6, 2L); graph.add_edge(4, 7, 2L);
graph.add_edge(5, 6, 2L); graph.add_edge(5, 7, 2L);
graph.add_edge(6, 7, 2L);
//Weak connection between 1st and 2nd communities
graph.add_edge(1, 4, 0.1L);
//Calculate communities gplain.calculate(true);
//Get community mapping auto r = gplain.get_mapping();
for(auto& vert_to_comm: r) { std::cout << "Vertext " <<
vert_to_comm.first << " is in community " << vert_to_comm.second <<
std::endl; } }
How to build
To build:
git clone https://github.com/meelgroup/louvain-community cd
louvain-community mkdir build && cd build cmake .. make -j4 sudo
make install
In case you are going to use the system in another cmake based
project, you dont even need to install. In these cases, you can
look for the library in your CMakeLists.txt file via:
find_package(louvain_communities CONFIG) if
(louvain_communities_FOUND) message(STATUS "Found Louvain
Communities library") message(STATUS "Louvain Communities dynamic
lib: ${LOUVAIN_COMMUNITIES_LIBRARIES}") message(STATUS "Louvain
Communities include dirs: ${LOUVAIN_COMMUNITIES_INCLUDE_DIRS}")
else() message(FATAL_ERROR "Cannot find Louvain Communities
libraries. Please install it! Exiting.") endif()
To compile a static library simply do:
git clone https://github.com/meelgroup/louvain-community cd
louvain-community mkdir build && cd build cmake -DSTATICCOMPILE=ON
.. make -j4 sudo make install
Testing
To test:
pip install python-louvain
git clone https://github.com/jlguillaume/louvain cd louvain make
-j4
git clone https://github.com/meelgroup/louvain-community cd
louvain-community mkdir build && cd build ln -s ../scritps/* . ln
-s ../../louvain/louvain . ./mytest.py 50-10-9-q.cnf.gz.no_w.cnf
awk '{print "gplain.add_edge(" $1 ", " $2 ", " $3 "L);"}' graph.txt
> ../src/mygraph.cpp cmake -DENABLE_TESTING=ON .. make -j4
> ./test.sh 50-10-9-q.cnf.gz.no_w.cnf
To check how well the communities fit a graph generated via VIG
(“Variable Incidence Graph”) graph-generation from a DIMACS CNF and
a layout engine using the spring method:
pip install python-louvain git clone
https://github.com/meelgroup/louvain-community cd louvain-community
mkdir build && cd build ln -s ../scritps/* . ./mytest.py
50-10-9-q.cnf.gz.no_w.cnf --draw
References
Based on Community Detection “Louvain”, version 0.3, from
SourceForge
Based on the article “Fast unfolding of community hierarchies in
large networks” Copyright (C) 2008 V. Blondel, J.-L. Guillaume, R.
Lambiotte, E. Lefebvre
And based on the article Copyright (C) 2013 R. Campigotto, P. Conde
Céspedes, J.-L. Guillaume
Authors: E. Lefebvre, adapted by J.-L. Guillaume and R. Campigotto,
Mate Soos

View file

@ -0,0 +1,110 @@
#!/bin/bash
# Slackware build script for louvain-community
# Copyright 2024 Caterino Tommaso, T.O.P. USA
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
cd $(dirname $0) ; CWD=$(pwd)
PRGNAM=louvain-community
VERSION=${VERSION:-681a711}
FULLHASH=${FULLHASH:-681a711a530ded0b25af72ee4881d453a80ac8ac}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i586 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
fi
if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
exit 0
fi
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
elif [ "$ARCH" = "aarch64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$FULLHASH
tar xvf $CWD/$PRGNAM-$FULLHASH.tar.gz
cd $PRGNAM-$FULLHASH
chown -R root:root .
find -L . \
\( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
-o -perm 511 \) -exec chmod 755 {} \+ -o \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+
mkdir -p build
cd build
cmake \
-DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
-DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
-DCMAKE_INSTALL_PREFIX=/usr \
-DLIB_SUFFIX=${LIBDIRSUFFIX} \
-DCMAKE_BUILD_TYPE=Release ..
make
make install/strip DESTDIR=$PKG
cd ..
rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la
find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
find $PKG -name perllocal.pod -o -name ".packlist" -o -name "*.bs" | xargs rm -f || true
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a \
LICENSE.txt README.md \
$PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE

View file

@ -0,0 +1,10 @@
PRGNAM="louvain-community"
VERSION="681a711"
HOMEPAGE="https://github.com/meelgroup/louvain-community"
DOWNLOAD="https://github.com/meelgroup/louvain-community/archive/681a711.tar.gz"
MD5SUM="f148a5a439ccf5c47a9795c31350b467"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""
MAINTAINER="Caterino Tommaso, T.O.P."
EMAIL="aNOlan_aversa@lavabiSPAMt.com (remove NO and SPAM)"

View file

@ -0,0 +1,19 @@
# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description.
# Line up the first '|' above the ':' following the base package name, and
# the '|' on the right side marks the last column you can put a character in.
# You must make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
louvain-community: louvain-community (Louvain Community Detection Library)
louvain-community:
louvain-community: This graph algorithms library finds communities in networks.
louvain-community:
louvain-community: It is a requirement for cryptominisat's advanced statistics option.
louvain-community:
louvain-community:
louvain-community:
louvain-community:
louvain-community:
louvain-community: