Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Topological feature calculators infrastructure.
This package helps one to calculate features for a given graph. All features are implemented in python codes, and some features have also an accelerated version written in C++. Among the accelerated features, one can find a code for calculating 3- and 4-motifs using VDMC, a distributed algorithm to calculate 3- and 4-motifs in a GPU-parallelized way.
The set of all vertex features implemented in graph-measures is the following:
Feature | Feature's name in code | Is available in gpu? | Output size for directed graph | Output size for undirected graph |
---|---|---|---|---|
Average neighbor degree | average_neighbor_degree | NO | N x 1 | N x 1 |
Degree^ | degree | NO | N x 2 | N x 1 |
In degree | in_degree | NO | N x 1 | - - - - - - - |
Out degree | out_degree | NO | N x 1 | - - - - - - - |
Louvain^^ | louvain | NO | - - - - - - - | N x 1 |
Hierarchy energy | hierarchy_energy | NO | ||
Motifs3 | motif3 | YES | N x 13 | N x 2 |
Motifs4 | motif4 | YES | N x 199 | N x 6 |
K core | k_core | YES | N x 1 | N x 1 |
Attraction basin | attractor_basin | YES | N x 1 | - - - - - - - |
Page Rank | page_rank | YES | N x 1 | N x 1 |
Fiedler vector | fiedler_vector | NO | - - - - - - - | N x 1 |
Closeness centrality | closeness_centrality | NO | N x 1 | N x 1 |
Eccentricity | eccentricity | NO | N x 1 | N x 1 |
Load centrality | load_centrality | NO | N x 1 | N x 1 |
BFS moments | bfs_moments | NO | N x 2 | N x 2 |
Flow | flow | YES | N x 1 | - - - - - - - |
Betweenness centrality | betweenness_centrality | NO | N x 1 | N x 1 |
Communicability betweenness centrality | communicability_betweenness_centrality | NO | - - - - - - - | N x ? |
Eigenvector centrality | eigenvector_centrality | NO | N x 1 | N x 1 |
Clustering coefficient | clustering_coefficient | NO | N x 1 | N x 1 |
Square clustering coefficient | square_clustering_coefficient | NO | N x 1 | N x 1 |
Generalized degree | generalized_degree | NO | - - - - - - - | N x 16 |
All pairs shortest path length | all_pairs_shortest_path_length | NO | N x N | N x N |
^ Degree - In the undirected case return the sum of the in degree and the out degree.
^^Louvain - Implement Louvain community detection method, then associate to each vertex the number of vertices in its community.
Aside from those, there are some other edge features. Some more information regarding the features can be found in the files of features_meta.
setuptools
networkx==2.6.3
pandas
numpy
matplotlib
scipy
scikit-learn
python-louvain
bitstring
future
torch
Both versions currently are not supported with the pip installation.
To use the accelerated version, one must use Linux operation system and Anaconda distribution, with the follow the next steps:
Go to the package's GitHub website and manually download:
graphMeasures
.runMakefileACC.py
.You might need to download a zip of the repository and extract the necessary files.
Place both the file and the directory inside your project, and run runMakefileACC.py
.
Move to the boost environment: conda activate boost
(The environment was created in step 2).
Use the package as explained in the section How To Use?
The full functionality of the package is currently available on a Linux machine, with a Conda environment.
pip install graph-measures
Note: On Linux+Conda the installation might take longer (about 5-10 minuets) due to the compilation of the c++ files.
Even though one has installed the package as graph-measures
, The package should be imported from the code as graphMesaures
. Hence, use:
from graphMeasures import FeatureCalculator
There are two main methods to calculate features:
0,1
0,2
1,3
3,2
Now, an implementation of feature calculations on this graph looks like this:
import os
from graphMeasures import FeatureCalculator
# set of features to be calculated
feats = ["motif3", "louvain"]
# path to the graph's edgelist or nx.Graph object
graph = os.path.join("measure_tests", "example_graph.txt")
# The path in which one would like to save the pickled features calculated in the process.
dir_path = ""
# More options are shown here. For information about them, refer to the file.
ftr_calc = FeatureCalculator(path, feats, dir_path=dir_path, acc=True, directed=False,
gpu=True, device=0, verbose=True)
# Calculates the features. If one do not want the features to be saved,
# one should set the parameter 'should_dump' to False (set to True by default).
# If the features was already saved, you can set force_build to be True.
ftr_calc.calculate_features(force_build=True)
features = ftr_calc.get_features() # return pandas Dataframe with the features
Note: If one set acc=True
without using a Linux+Conda machine, an exception will be thrown.gpu=True
without using a Linux+Conda machine that has cuda available on it, an exception will be thrown.
For now, you can calculate only motifs for edges. Unfortunately, you will have to do it separately from the nodes features. There are two options for motif calculation - python version, and accelerated version (in CPP). The python version is always available, but the accelerated version available only on linux machine (the makefile targets linux, but the code should work for any os). Anyway, if you have a suitable machine, the accelerated version is more recommended.
To run the accelerated version you should do:
graphMeasures/edges_features/acc_features/acc/
make
. If the makefile ends normally, a so file should be in a dir named bin.Execution example:
import networkx as nx
from graphMeasures.edges_features.feature_calculator import FeatureCalculator
path = "./data/graph.txt"
gnx = nx.read_edgelist(path, delimiter=",", create_using=nx.DiGraph)
# acc signs if we will use the accelerated version.
calculator = FeatureCalculator(["motif3", "motif4"], gnx, acc=True)
calculator.build()
# The result will be a pandas Dataframe named calculator.df.
print(calculator.df)
This package was written by Yolo lab's team from Bar-Ilan University.
For questions, comments or suggestions you can contact louzouy@math.biu.ac.il.
FAQs
A python package for calculating topological graph features on cpu/gpu
We found that graph-measures demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.