0 purchases
pyrgg 1.5
PyRGG: Python Random Graph Generator
Overview
PyRGG is a user-friendly synthetic random graph generator that is written in Python and supports multiple graph file formats, such as DIMACS-Graph files. It can generate graphs of various sizes and is specifically designed to create input files for a wide range of graph-based research applications, including testing, benchmarking, and performance analysis of graph processing frameworks. PyRGG is aimed at computer scientists who are studying graph algorithms and graph processing frameworks.
Open Hub
PyPI Counter
Github Stars
Branch
master
dev
CI
Code Quality
Installation
PyPI
Check Python Packaging User Guide
pip install pyrgg==1.5
Source Code
Download Version 1.5 or Latest Source
pip install .
Conda
Check Conda Managing Package
conda install -c sepandhaghighi pyrgg
Exe Version (Only Windows)
Download Exe-Version 1.5
Run PYRGG-1.5.exe
System Requirements
Pyrgg will likely run on a modern dual core PC. Typical configuration is:
Dual Core CPU (2.0 Ghz+)
4GB of RAM
Note that it may run on lower end equipment though good performance is not guaranteed.
Usage
Open CMD (Windows) or Terminal (Linux)
Run pyrgg or python -m pyrgg (or run PYRGG.exe)
Enter data
Engines
PyRGG
Parameter
Description
Vertices Number
The total number of vertices in the graph
Min Edge Number
The minimum number of edges connected to each vertex
Max Edge Number
The maximum number of edges connected to each vertex
Weighted / Unweighted
Specifies whether the graph is weighted or unweighted
Min Weight
The minimum weight of the edges (if weighted)
Max Weight
The maximum weight of the edges (if weighted)
Signed / Unsigned
Specifies whether the edge weights are signed or unsigned
Directed / Undirected
Specifies whether the graph is directed or undirected
Self Loop / No Self Loop
Specifies whether self-loop is allowed or not
Simple / Multigraph
Specifies whether the graph is a simple graph or a multigraph
Erdős–Rényi-Gilbert
Parameter
Description
Vertices Number
The total number of vertices in the graph
Probability
The probability for edge creation between any two vertices
Directed / Undirected
Specifies whether the graph is directed or undirected
Supported Formats
DIMACS
p sp <number of vertices> <number of edges>
a <head_1> <tail_1> <weight_1>
.
.
.
a <head_n> <tail_n> <weight_n>
Document
Sample 1 (100 Vertices , 3KB)
Sample 2 (1000 Vertices , 13KB)
Sample 3 (1000000 Vertices , 7MB)
Sample 4 (5000000 Vertices , 37MB)
CSV
<head_1>,<tail_1>,<weight_1>
.
.
.
<head_n>,<tail_n>,<weight_n>
Document
Sample 1 (100 Vertices , 3KB)
Sample 2 (1000 Vertices , 51KB)
TSV
<head_1> <tail_1> <weight_1>
.
.
.
<head_n> <tail_n> <weight_n>
Document
Sample 1 (100 Vertices , 29KB)
Sample 2 (1000 Vertices , 420KB)
JSON
{
"properties": {
"directed": true,
"signed": true,
"multigraph": true,
"weighted": true,
"self_loop": true
},
"graph": {
"nodes":[
{
"id": 1
},
.
.
.
{
"id": n
}
],
"edges":[
{
"source": head_1,
"target": tail_1,
"weight": weight_1
},
.
.
.
{
"source": head_n,
"target": tail_n,
"weight": weight_n
}
]
}
}
Document
Sample 1 (100 Vertices , 26KB)
Sample 2 (1000 Vertices , 494KB)
YAML
graph:
edges:
- source: head_1
target: tail_1
weight: weight_1
.
.
.
- source: head_n
target: tail_n
weight: weight_n
nodes:
- id: 1
.
.
.
- id: n
properties:
directed: true
multigraph: true
self_loop: true
signed: true
weighted: true
Document
Sample 1 (30 Vertices , 6KB)
Sample 2 (100 Vertices , 35KB)
Weighted Edge List
<head_1> <tail_1> <weight_1>
.
.
.
<head_n> <tail_n> <weight_n>
Document
Sample 1 (100 Vertices , 5KB)
Sample 2 (1000 Vertices , 192KB)
ASP
node(1).
.
.
.
node(n).
edge(head_1,tail_1,weight_1).
.
.
.
edge(head_n,tail_n,weight_n).
Document
Sample 1 (100 Vertices , 7KB)
Sample 2 (1000 Vertices , 76KB)
Trivial Graph Format
1
.
.
.
n
#
1 2 weight_1
.
.
.
n k weight_n
Document
Sample 1 (100 Vertices , 4KB)
Sample 2 (1000 Vertices , 61KB)
UCINET DL Format
dl
format=edgelist1
n=<number of vertices>
data:
1 2 weight_1
.
.
.
n k weight_n
Document
Sample 1 (100 Vertices , 8KB)
Sample 2 (1000 Vertices , 729KB)
Matrix Market
%%MatrixMarket matrix coordinate real general
<number of vertices> <number of vertices> <number of edges>
<head_1> <tail_1> <weight_1>
.
.
.
<head_n> <tail_n> <weight_n>
Document
Sample 1 (100 Vertices , 59KB)
Sample 2 (1000 Vertices , 1.8MB)
Graph Line
<head_1> <tail_1>:<weight_1> <tail_2>:<weight_2> ... <tail_n>:<weight_n>
<head_2> <tail_1>:<weight_1> <tail_2>:<weight_2> ... <tail_n>:<weight_n>
.
.
.
<head_n> <tail_1>:<weight_1> <tail_2>:<weight_2> ... <tail_n>:<weight_n>
Sample 1 (100 Vertices , 17KB)
Sample 2 (1000 Vertices , 2.4MB)
GDF
nodedef>name VARCHAR,label VARCHAR
node_1,node_1_label
node_2,node_2_label
.
.
.
node_n,node_n_label
edgedef>node1 VARCHAR,node2 VARCHAR, weight DOUBLE
node_1,node_2,weight_1
node_1,node_3,weight_2
.
.
.
node_n,node_2,weight_n
Sample 1 (100 Vertices , 21KB)
Sample 2 (1000 Vertices , 690KB)
GML
graph
[
multigraph 0
directed 0
node
[
id 1
label "Node 1"
]
node
[
id 2
label "Node 2"
]
.
.
.
node
[
id n
label "Node n"
]
edge
[
source 1
target 2
value W1
]
edge
[
source 2
target 4
value W2
]
.
.
.
edge
[
source n
target r
value Wn
]
]
Document
Sample 1 (100 Vertices , 120KB)
Sample 2 (1000 Vertices , 2.4MB)
GEXF
<?xml version="1.0" encoding="UTF-8"?>
<gexf xmlns="http://www.gexf.net/1.2draft" version="1.2">
<meta lastmodifieddate="2009-03-20">
<creator>PyRGG</creator>
<description>File Name</description>
</meta>
<graph defaultedgetype="directed">
<nodes>
<node id="1" label="Node 1" />
<node id="2" label="Node 2" />
...
</nodes>
<edges>
<edge id="1" source="1" target="2" weight="400" />
...
</edges>
</graph>
</gexf>
Document
Sample 1 (100 Vertices , 63KB)
Sample 2 (1000 Vertices , 6.4MB)
Graphviz
graph example
{
node1 -- node2 [weight=W1];
node3 -- node4 [weight=W2];
node1 -- node3 [weight=W3];
.
.
.
}
Document
Sample 1 (100 Vertices , 11KB)
Sample 2 (1000 Vertices , 106KB)
Online Visualization
Pickle
⚠️ Binary format
Document
Sample 1 (100 Vertices , 12KB)
Sample 2 (1000 Vertices , 340KB)
Example of Usage
Generate synthetic data for graph processing frameworks (some of them mentioned here) performance-analysis
Medusa
Totem
Frog
CuSha
Generate synthetic data for graph benchmark suite like GAP
Similar Works
Random Modular Network Generator Generates random graphs with tunable strength of community structure
randomGraph very simple random graph generator in MATLAB
Graph1 Random Graph Generator with Max capacity paths (C++)
Issues & Bug Reports
Just fill an issue and describe it. We'll check it ASAP!
or send an email to [email protected].
You can also join our discord server
Citing
If you use pyrgg in your research, please cite the JOSS paper ;-)
@article{Haghighi2017,
doi = {10.21105/joss.00331},
url = {https://doi.org/10.21105/joss.00331},
year = {2017},
month = {sep},
publisher = {The Open Journal},
volume = {2},
number = {17},
author = {Sepand Haghighi},
title = {Pyrgg: Python Random Graph Generator},
journal = {The Journal of Open Source Software}
}
JOSS
Zenodo
References
1- 9th DIMACS Implementation Challenge - Shortest Paths
2- Problem Based Benchmark Suite
3- MaximalClique - ASP Competition 2013
4- Pitas, Ioannis, ed. Graph-based social media analysis. Vol. 39. CRC Press, 2016.
5- Roughan, Matthew, and Jonathan Tuke. "The hitchhikers guide to sharing graph data." 2015 3rd International Conference on Future Internet of Things and Cloud. IEEE, 2015.
6- Borgatti, Stephen P., Martin G. Everett, and Linton C. Freeman. "Ucinet for Windows: Software for social network analysis." Harvard, MA: analytic technologies 6 (2002).
7- Matrix Market: File Formats
8- Social Network Visualizer
9- Adar, Eytan. "GUESS: a language and interface for graph exploration." Proceedings of the SIGCHI conference on Human Factors in computing systems. 2006.
10- Skiena, Steven S. The algorithm design manual. Springer International Publishing, 2020.
11- Chakrabarti, Deepayan, Yiping Zhan, and Christos Faloutsos. "R-MAT: A recursive model for graph mining." Proceedings of the 2004 SIAM International Conference on Data Mining. Society for Industrial and Applied Mathematics, 2004.
12- Zhong, Jianlong, and Bingsheng He. "An overview of medusa: simplified graph processing on gpus." ACM SIGPLAN Notices 47.8 (2012): 283-284.
13- Ellson, John, et al. "Graphviz and dynagraph—static and dynamic graph drawing tools." Graph drawing software. Springer, Berlin, Heidelberg, 2004. 127-148.
14- Gilbert, Edgar N. "Random graphs." The Annals of Mathematical Statistics 30.4 (1959): 1141-1144.
15- Erdős, Paul, and Alfréd Rényi. "On the strength of connectedness of a random graph." Acta Mathematica Hungarica 12.1 (1961): 261-267.
Logo designed by Zahra Mobasher
Show Your Support
Star This Repo
Give a ⭐️ if this project helped you!
Donate to Our Project
If you do like our project and we hope that you do, can you please support us? Our project is not and is never going to be working for profit. We need the money just so we can continue doing what we do ;-) .
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog
and this project adheres to Semantic Versioning.
Unreleased
1.5 - 2024-09-16
Added
feature_request.yml template
config.yml for issue template
pyrgg.engines package
pyrgg.engines.pyrgg module
pyrgg.engines.erdos_reyni_gilbert module
Erdős-Rényi-Gilbert generation model
Generation engine menu
handle_string function
handle_pos_int function
handle_output_format function
handle_engine function
SECURITY.md
Changed
Metadata in files modified
Python 3.5 support dropped
Bug report template modified
Cprofile tests separated in files for engines
README.md modified
Python 3.12 added to test.yml
Menu options bug fixed
Test system modified
engine parameter added to logger function
MENU_ITEMS1 parameter changed to MENU_ITEMS
MENU_ITEMS2 parameter changed to PYRGG_ENGINE_PARAMS
_update_using_first_menu function changed to _update_using_menu
_update_using_second_menu function changed to _update_with_engine_params
ITEM_CONVERTORS renamed to ITEM_HANDLERS
Website domain changed to https://www.pyrgg.site
Removed
dimacs_init function
1.4 - 2023-07-06
Added
check_for_config function
load_config function
save_config function
Changed
README.md modified
Logo changed
codecov removed from dev-requirements.txt
Test system modified
Error messages updated
1.3 - 2022-11-30
Added
Graphviz(DOT) format
Changed
asciinema instruction video updated
Test system modified
README.md modified
Python 3.11 added to test.yml
CLI mode updated
dev-requirements.txt updated
To-do list moved to TODO.md
1.2 - 2022-09-07
Added
Anaconda workflow
Discord badge
Changed
Menu optimized
Docstrings modified
branch_gen function modified
edge_gen function modified
precision and min_edge parameters added to branch_gen function
random_edge parameter removed from branch_gen function
Test system modified
AUTHORS.md updated
License updated
README.md modified
Python 3.10 added to test.yml
Removed
sign_gen function
random_edge_limits function
1.1 - 2021-06-09
Added
requirements-splitter.py
is_weighted function
_write_properties_to_json function
PYRGG_TEST_MODE parameter
Changed
Test system modified
JSON, YAML and Pickle formats value changed from string to number
properties section added to JSON, YAML and Pickle formats
_write_to_json function renamed to _write_data_to_json
logger function modified
time_convert function modified
branch_gen function modified
References updated
1.0 - 2021-01-11
Added
Number of files option
Changed
All flags type changed to bool
Menu optimized
The logger function enhanced.
Time format in the logger changed to %Y-%m-%d %H:%M:%S
dl_maker function modified
tgf_maker function modified
gdf_maker function modified
run function modified
0.9 - 2020-10-07
Added
GEXF format
Float weight support
tox.ini
Changed
Menu optimized
pyrgg.py renamed to graph_gen.py
Other functions moved to functions.py
Test system modified
params.py refactored
graph_gen.py refactored
functions.py refactored
weight_str_to_number function renamed to convert_str_to_number
branch_gen function bugs fixed
input_filter function bug fixed
gl_maker function bug fixed
CONTRIBUTING.md updated
AUTHORS.md updated
Removed
print_test function
left_justify function
justify function
zero_insert function
0.8 - 2020-08-19
Added
GDF format
GML format
Changed
CLI snapshots updated
AUTHORS.md updated
0.7 - 2020-08-07
Added
Graph Line format
Changed
Menu optimized
0.6 - 2020-07-24
Added
Matrix Market format
Changed
json_maker function optimized
dl_maker function optimized
tgf_maker function optimized
lp_maker function optimized
0.5 - 2020-07-01
Added
TSV format
Multigraph control
Changed
branch_gen function modified
Website changed to https://www.pyrgg.ir
0.4 - 2020-06-17
Added
Self loop control
Github action
Changed
appveyor.yml updated
0.3 - 2019-11-29
Added
__version__ variable
CHANGELOG.md
dev-requirements.txt
requirements.txt
CODE_OF_CONDUCT.md
ISSUE_TEMPLATE.md
PULL_REQUEST_TEMPLATE.md
CONTRIBUTING.md
version_check.py
pyrgg_profile.py
Unweighted graph
Undirected graph
Exe version
Changed
Test system modified
README.md modified
Docstrings modified
get_input function modified
edge_gen function modified
Parameters moved to params.py
0.2 - 2017-09-20
Added
CSV format
YAML format
Weighted edge list format (WEL)
ASP format
Trivial graph format (TGF)
UCINET DL format
Pickle format
0.1 - 2017-08-19
Added
DIMACS format
JSON format
README
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.