pax_global_header 0000666 0000000 0000000 00000000064 15053222211 0014503 g ustar 00root root 0000000 0000000 52 comment=6f6ed59f280b05a2b9f22def9177c11823ff2bab
sepandhaghighi-pyrgg-6f6ed59/ 0000775 0000000 0000000 00000000000 15053222211 0016226 5 ustar 00root root 0000000 0000000 sepandhaghighi-pyrgg-6f6ed59/.coveragerc 0000664 0000000 0000000 00000000253 15053222211 0020347 0 ustar 00root root 0000000 0000000 [run]
branch = True
omit =
*/pyrgg/__main__.py
*/pyrgg/__init__.py
[report]
# Regexes for lines to exclude from consideration
exclude_lines =
pragma: no cover
sepandhaghighi-pyrgg-6f6ed59/.github/ 0000775 0000000 0000000 00000000000 15053222211 0017566 5 ustar 00root root 0000000 0000000 sepandhaghighi-pyrgg-6f6ed59/.github/CODE_OF_CONDUCT.md 0000664 0000000 0000000 00000006423 15053222211 0022372 0 ustar 00root root 0000000 0000000 # Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at info@pyrgg.site. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq
sepandhaghighi-pyrgg-6f6ed59/.github/CONTRIBUTING.md 0000664 0000000 0000000 00000001310 15053222211 0022012 0 ustar 00root root 0000000 0000000 # Contribution
Changes and improvements are more than welcome! ❤️ Feel free to fork and open a pull request.
Please consider the following :
1. Fork it!
2. Create your feature branch (under `dev` branch)
3. Add your functions/methods to proper files
4. Add standard `docstring` to your functions/methods
5. Add tests for your functions/methods (`doctest` testcases in `test` folder)
6. Pass all CI tests
7. Update `References` section in `README.md` (`MLA` format)
8. Update `CHANGELOG.md`
- Describe changes under `[Unreleased]` section
9. Update `AUTHORS.md`
- Add your name under `# Other Contributors #` section
10. Submit a pull request into `dev` (please complete the pull request template) sepandhaghighi-pyrgg-6f6ed59/.github/FUNDING.yml 0000664 0000000 0000000 00000000052 15053222211 0021400 0 ustar 00root root 0000000 0000000 custom: https://www.pyrgg.site/donate.html sepandhaghighi-pyrgg-6f6ed59/.github/ISSUE_TEMPLATE/ 0000775 0000000 0000000 00000000000 15053222211 0021751 5 ustar 00root root 0000000 0000000 sepandhaghighi-pyrgg-6f6ed59/.github/ISSUE_TEMPLATE/bug_report.yml 0000664 0000000 0000000 00000005467 15053222211 0024660 0 ustar 00root root 0000000 0000000 name: Bug Report
description: File a bug report
title: "[Bug]: "
body:
- type: markdown
attributes:
value: |
Thanks for your time to fill out this bug report!
- type: input
id: contact
attributes:
label: Contact details
description: How can we get in touch with you if we need more info?
placeholder: ex. email@example.com
validations:
required: false
- type: textarea
id: what-happened
attributes:
label: What happened?
description: Provide a clear and concise description of what the bug is.
placeholder: >
Tell us a description of the bug.
validations:
required: true
- type: textarea
id: step-to-reproduce
attributes:
label: Steps to reproduce
description: Provide details of how to reproduce the bug.
placeholder: >
ex. 1. Go to '...'
validations:
required: true
- type: textarea
id: expected-behavior
attributes:
label: Expected behavior
description: What did you expect to happen?
placeholder: >
ex. I expected '...' to happen
validations:
required: true
- type: textarea
id: actual-behavior
attributes:
label: Actual behavior
description: What did actually happen?
placeholder: >
ex. Instead '...' happened
validations:
required: true
- type: dropdown
id: operating-system
attributes:
label: Operating system
description: Which operating system are you using?
options:
- Windows
- macOS
- Linux
default: 0
validations:
required: true
- type: dropdown
id: python-version
attributes:
label: Python version
description: Which version of Python are you using?
options:
- Python 3.13
- Python 3.12
- Python 3.11
- Python 3.10
- Python 3.9
- Python 3.8
- Python 3.7
- Python 3.6
- Python 3.5
default: 1
validations:
required: true
- type: dropdown
id: Pyrgg-version
attributes:
label: PyRGG version
description: Which version of PyRGG are you using?
options:
- PyRGG 1.8
- PyRGG 1.7
- PyRGG 1.6
- PyRGG 1.5
- PyRGG 1.4
- PyRGG 1.3
- PyRGG 1.2
- PyRGG 1.1
- PyRGG 1.0
- PyRGG 0.9
- PyRGG 0.8
- PyRGG 0.7
- PyRGG 0.6
- PyRGG 0.5
- PyRGG 0.4
- PyRGG 0.3
- PyRGG 0.2
- PyRGG 0.1
default: 0
validations:
required: true
- type: textarea
id: logs
attributes:
label: Relevant log output
description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
render: shell
sepandhaghighi-pyrgg-6f6ed59/.github/ISSUE_TEMPLATE/config.yml 0000664 0000000 0000000 00000000264 15053222211 0023743 0 ustar 00root root 0000000 0000000 blank_issues_enabled: false
contact_links:
- name: Discord
url: https://discord.com/invite/dfYAWVMaCW
about: Ask questions and discuss with other PyRGG community members
sepandhaghighi-pyrgg-6f6ed59/.github/ISSUE_TEMPLATE/feature_request.yml 0000664 0000000 0000000 00000001707 15053222211 0025704 0 ustar 00root root 0000000 0000000 name: Feature Request
description: Suggest a feature for this project
title: "[Feature]: "
body:
- type: textarea
id: description
attributes:
label: Describe the feature you want to add
placeholder: >
I'd like to be able to [...]
validations:
required: true
- type: textarea
id: possible-solution
attributes:
label: Describe your proposed solution
placeholder: >
I think this could be done by [...]
validations:
required: false
- type: textarea
id: alternatives
attributes:
label: Describe alternatives you've considered, if relevant
placeholder: >
Another way to do this would be [...]
validations:
required: false
- type: textarea
id: additional-context
attributes:
label: Additional context
placeholder: >
Add any other context or screenshots about the feature request here.
validations:
required: false
sepandhaghighi-pyrgg-6f6ed59/.github/PULL_REQUEST_TEMPLATE.md 0000664 0000000 0000000 00000000160 15053222211 0023364 0 ustar 00root root 0000000 0000000 #### Reference Issues/PRs
#### What does this implement/fix? Explain your changes.
#### Any other comments?
sepandhaghighi-pyrgg-6f6ed59/.github/dependabot.yml 0000664 0000000 0000000 00000000245 15053222211 0022417 0 ustar 00root root 0000000 0000000 version: 2
updates:
- package-ecosystem: pip
directory: "/"
schedule:
interval: weekly
time: "01:30"
open-pull-requests-limit: 10
target-branch: dev
sepandhaghighi-pyrgg-6f6ed59/.github/workflows/ 0000775 0000000 0000000 00000000000 15053222211 0021623 5 ustar 00root root 0000000 0000000 sepandhaghighi-pyrgg-6f6ed59/.github/workflows/publish_conda.yaml 0000664 0000000 0000000 00000000671 15053222211 0025325 0 ustar 00root root 0000000 0000000 name: publish_conda
on:
push:
# Sequence of patterns matched against refs/tags
tags:
- '*' # Push events to matching v*, i.e. v1.0, v20.15.10
jobs:
publish:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v1
- name: publish-to-conda
uses: sepandhaghighi/conda-package-publish-action@v1.2
with:
subDir: 'otherfile'
AnacondaToken: ${{ secrets.ANACONDA_TOKEN }}
sepandhaghighi-pyrgg-6f6ed59/.github/workflows/publish_pypi.yml 0000664 0000000 0000000 00000001754 15053222211 0025064 0 ustar 00root root 0000000 0000000 # This workflow will upload a Python Package using Twine when a release is created
# For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries
name: Upload Python Package
on:
push:
# Sequence of patterns matched against refs/tags
tags:
- '*' # Push events to matching v*, i.e. v1.0, v20.15.10
jobs:
deploy:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
with:
python-version: '3.x'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install setuptools wheel twine
- name: Build and publish
env:
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
run: |
python setup.py sdist bdist_wheel
twine upload dist/*.tar.gz
twine upload dist/*.whl
sepandhaghighi-pyrgg-6f6ed59/.github/workflows/test.yml 0000664 0000000 0000000 00000005073 15053222211 0023332 0 ustar 00root root 0000000 0000000 # This workflow will install Python dependencies, run tests with a variety of Python versions
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
name: CI
on:
push:
branches:
- master
- dev
pull_request:
branches:
- master
- dev
env:
TEST_PYTHON_VERSION: 3.9
TEST_OS: 'ubuntu-22.04'
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04, windows-2022, macOS-13]
python-version: [3.7, 3.8, 3.9, 3.10.5, 3.11.0, 3.12.0, 3.13.0]
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Installation
run: |
python -m pip install --upgrade pip
pip install .
- name: First test
run: |
pyrgg test
pyrgg --version
- name: Test requirements Installation
run: |
python otherfile/requirements-splitter.py
pip install --upgrade --upgrade-strategy=only-if-needed -r test-requirements.txt
- name: Test with pytest
run: |
python -m pytest test --cov=pyrgg --cov-report=term
- name: Version check
run: |
python otherfile/version_check.py
if: matrix.python-version == env.TEST_PYTHON_VERSION
- name: Other tests
run: |
python -m vulture pyrgg/ otherfile/ setup.py --min-confidence 65 --exclude=__init__.py --sort-by-size
python -m bandit -r pyrgg -s B311,B403
python -m pydocstyle -v --match-dir=pyrgg
if: matrix.python-version == env.TEST_PYTHON_VERSION
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
fail_ci_if_error: false
if: matrix.python-version == env.TEST_PYTHON_VERSION && matrix.os == env.TEST_OS
- name: cProfile - PyRGG Engine
run: |
python -m cProfile -s cumtime otherfile/profiles/pyrgg_profile.py
- name: cProfile - Erdos Reyni Gilbert Engine
run: |
python -m cProfile -s cumtime otherfile/profiles/erg_profile.py
- name: cProfile - Erdos Reyni Engine
run: |
python -m cProfile -s cumtime otherfile/profiles/er_profile.py
- name: cProfile - Stochastic Block Model Engine
run: |
python -m cProfile -s cumtime otherfile/profiles/sbm_profile.py
- name: cProfile - Barabasi-Albert Engine
run: |
python -m cProfile -s cumtime otherfile/profiles/ba_profile.py
sepandhaghighi-pyrgg-6f6ed59/.gitignore 0000664 0000000 0000000 00000002410 15053222211 0020213 0 ustar 00root root 0000000 0000000 # Created by .ignore support plugin (hsz.mobi)
### Python template
# Byte-compiled / optimized / DLL files
node_modules/
datasets/
__pycache__/
*.py[cod]
*$py.class
*.gr
*.json
*.csv
*.wel
*.lp
*.p
*.dl
*.tgf
# C extensions
*.so
# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover
.hypothesis/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# dotenv
.env
# virtualenv
.venv/
venv/
ENV/
# Spyder project settings
.spyderproject
# Rope project settings
.ropeproject
### Example user template template
### Example user template
# IntelliJ project files
.idea
*.iml
out
gen
sepandhaghighi-pyrgg-6f6ed59/AUTHORS.md 0000664 0000000 0000000 00000000613 15053222211 0017675 0 ustar 00root root 0000000 0000000 # Core Developers
----------
- Sepand Haghighi - Open Science Laboratory ([Github](https://github.com/sepandhaghighi))
- Sadra Sabouri - Open Science Laboratory ([Github](https://github.com/sadrasabouri))
# Other Contributors
----------
- [@zhmbshr](https://github.com/zhmbshr) **
- [@ivanovmg](https://github.com/ivanovmg)
- [@ahmadsalimi](https://github.com/ahmadsalimi)
** Graphic designer sepandhaghighi-pyrgg-6f6ed59/CHANGELOG.md 0000664 0000000 0000000 00000016472 15053222211 0020051 0 ustar 00root root 0000000 0000000 # Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
## [Unreleased]
## [1.8] - 2025-08-26
### Added
- `pyrgg.engines.barabasi_albert` module
### Changed
- CLI messages for stochastic block model updated
- `README.md` modified
- `min_edge` renamed to `min_edges`
- `max_edge` renamed to `max_edges`
- `weight_dic` renamed to `weight_dict`
- `edge_dic` renamed to `edge_dict`
### Removed
- `handle_prob_matrix` function
- `handle_pos_list` function
## [1.7] - 2025-05-15
### Added
- `pyrgg.engines.stochastic_block_model` module
### Changed
- `Python 3.6` support dropped
- Test system modified
## [1.6] - 2024-11-13
### Added
- `pyrgg.engines.erdos_reyni` module
- `save_log` function
### Changed
- PyPI badge in `README.md` updated
- `logger` function format for `erdos_reyni_gilbert` changed
- GitHub actions are limited to the `dev` and `master` branches
- `README.md` modified
- `build_exe.bat` modified
- `Python 3.13` added to `test.yml`
## [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](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](https://asciinema.org) 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](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
[Unreleased]: https://github.com/sepandhaghighi/pyrgg/compare/v1.8...dev
[1.8]: https://github.com/sepandhaghighi/pyrgg/compare/v1.7...v1.8
[1.7]: https://github.com/sepandhaghighi/pyrgg/compare/v1.6...v1.7
[1.6]: https://github.com/sepandhaghighi/pyrgg/compare/v1.5...v1.6
[1.5]: https://github.com/sepandhaghighi/pyrgg/compare/v1.4...v1.5
[1.4]: https://github.com/sepandhaghighi/pyrgg/compare/v1.3...v1.4
[1.3]: https://github.com/sepandhaghighi/pyrgg/compare/v1.2...v1.3
[1.2]: https://github.com/sepandhaghighi/pyrgg/compare/v1.1...v1.2
[1.1]: https://github.com/sepandhaghighi/pyrgg/compare/v1.0...v1.1
[1.0]: https://github.com/sepandhaghighi/pyrgg/compare/v0.9...v1.0
[0.9]: https://github.com/sepandhaghighi/pyrgg/compare/v0.8...v0.9
[0.8]: https://github.com/sepandhaghighi/pyrgg/compare/v0.7...v0.8
[0.7]: https://github.com/sepandhaghighi/pyrgg/compare/v0.6...v0.7
[0.6]: https://github.com/sepandhaghighi/pyrgg/compare/v0.5...v0.6
[0.5]: https://github.com/sepandhaghighi/pyrgg/compare/v0.4...v0.5
[0.4]: https://github.com/sepandhaghighi/pyrgg/compare/v0.3...v0.4
[0.3]: https://github.com/sepandhaghighi/pyrgg/compare/v0.2...v0.3
[0.2]: https://github.com/sepandhaghighi/pyrgg/compare/v0.1...v0.2
[0.1]: https://github.com/sepandhaghighi/pyrgg/compare/1e238cd...v0.1
sepandhaghighi-pyrgg-6f6ed59/LICENSE 0000664 0000000 0000000 00000002122 15053222211 0017230 0 ustar 00root root 0000000 0000000 MIT License
Copyright (c) 2017 Sepand Haghighi
Copyright (c) 2021 Sadra Sabouri
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
sepandhaghighi-pyrgg-6f6ed59/MANIFEST.in 0000664 0000000 0000000 00000000256 15053222211 0017767 0 ustar 00root root 0000000 0000000 include LICENSE
include *.md
include *.spec
include *.txt
include *.yml
include *.ini
recursive-include paper *.bib
recursive-include paper *.md
recursive-include paper *.pdf sepandhaghighi-pyrgg-6f6ed59/PYRGG.spec 0000664 0000000 0000000 00000001457 15053222211 0020001 0 ustar 00root root 0000000 0000000 # -*- mode: python -*-
block_cipher = None
pyrgg_version = "1.8"
a = Analysis(['pyrgg/__main__.py'],
pathex=['pyrgg'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='PYRGG-'+pyrgg_version,
debug=False,
strip=False,
upx=True,
runtime_tmpdir=None,
icon='otherfile/icon.ico',
version="otherfile/Version.rc",
console=True )
sepandhaghighi-pyrgg-6f6ed59/README.md 0000664 0000000 0000000 00000050371 15053222211 0017513 0 ustar 00root root 0000000 0000000
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](https://packaging.python.org/installing/)
- `pip install pyrgg==1.8`
### Source Code
- Download [Version 1.8](https://github.com/sepandhaghighi/pyrgg/archive/v1.8.zip) or [Latest Source ](https://github.com/sepandhaghighi/pyrgg/archive/dev.zip)
- `pip install .`
### Conda
- Check [Conda Managing Package](https://conda.io)
- `conda install -c sepandhaghighi pyrgg`
### Exe Version
⚠️ Only Windows
⚠️ For PyRGG targeting Windows < 10, the user needs to take special care to include the Visual C++ run-time `.dlls`(for more information visit [here](https://pyinstaller.org/en/v3.3.1/usage.html#windows))
- Download [Exe-Version 1.8](https://github.com/sepandhaghighi/pyrgg/releases/download/v1.8/PYRGG-1.8.exe)
- Run `PYRGG-1.8.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 (n) |
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 (n) |
The total number of vertices in the graph |
Probability (p) |
The probability for an edge creation between any two vertices |
Directed / Undirected |
Specifies whether the graph is directed or undirected |
### Erdős–Rényi
Parameter |
Description |
Vertices Number (n) |
The total number of vertices in the graph |
Edge Number (m) |
The total number of edges in the graph |
Directed / Undirected |
Specifies whether the graph is directed or undirected |
### Stochastic Block Model
Parameter |
Description |
Vertices Number (n) |
The total number of vertices in the graph |
Block Number (k) |
The number of blocks (disjoint subsets) |
Block Sizes ([|C1|, |C2|, ... |Ck|]) |
List of block sizes. The should sum up to n (n = |C1|+|C2|+...+|Ck|). |
Probability Matrix ([[P11, P12, ..., P1k], ... [Pk1, Pk2, ..., Pkk]]) |
Edge probabilities for between and within block connections. For undirected graph only the upper triangular indices would be counted. |
Directed / Undirected |
Specifies whether the graph is directed or undirected |
Self Loop / No Self Loop |
Specifies whether self-loop is allowed or not |
### Barabási-Albert
Parameter |
Description |
Vertices Number (n) |
The total number of vertices in the graph |
Attaching Edge Number (k) |
The number of edges to attach to a new node |
## Supported Formats
### DIMACS
```
p sp
a
.
.
.
a
```
* [Document](http://www.diag.uniroma1.it/challenge9/format.shtml)
* [Sample 1](https://www.dropbox.com/s/i80tnwuuv4iyqet/100.gr.gz?dl=0) (100 Vertices , 3KB)
* [Sample 2](https://www.dropbox.com/s/lqk42pwu7o4xauv/1000.gr.gz?dl=0) (1000 Vertices , 13KB)
* [Sample 3](https://www.dropbox.com/s/93dp8cjs6lnu83u/1000000.gr.gz?dl=0) (1000000 Vertices , 7MB)
* [Sample 4](https://www.dropbox.com/s/rrxdc4wt0ldonfk/5000000.gr.gz?dl=0) (5000000 Vertices , 37MB)
### CSV
```
,,
.
.
.
,,
```
* [Document](https://en.wikipedia.org/wiki/Comma-separated_values)
* [Sample 1](https://www.dropbox.com/s/dmld0eadftnatr5/100.csv?dl=0) (100 Vertices , 3KB)
* [Sample 2](https://www.dropbox.com/s/juxah4nwamzdegr/1000.csv?dl=0) (1000 Vertices , 51KB)
### TSV
```
.
.
.
```
* [Document](https://en.wikipedia.org/wiki/Tab-separated_values)
* [Sample 1](https://www.dropbox.com/s/j3zgs4kx2paxe75/100.tsv?dl=0) (100 Vertices , 29KB)
* [Sample 2](https://www.dropbox.com/s/ykagmjgwlpim6dq/1000.tsv?dl=0) (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](https://en.wikipedia.org/wiki/JSON)
* [Sample 1](https://www.dropbox.com/s/yvevoyb8559nytb/100.json?dl=0) (100 Vertices , 26KB)
* [Sample 2](https://www.dropbox.com/s/f6kljlch7p2rfhy/1000.json?dl=0) (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](https://en.wikipedia.org/wiki/YAML)
* [Sample 1](https://www.dropbox.com/s/9seljohtoqjzjzy/30.yaml?dl=0) (30 Vertices , 6KB)
* [Sample 2](https://www.dropbox.com/s/wtfh38rgmn29npi/100.yaml?dl=0) (100 Vertices , 35KB)
### Weighted Edge List
```
.
.
.
```
* [Document](http://www.cs.cmu.edu/~pbbs/benchmarks/graphIO.html)
* [Sample 1](https://www.dropbox.com/s/moie1xb2wj90y33/100.wel?dl=0) (100 Vertices , 5KB)
* [Sample 2](https://www.dropbox.com/s/h6pohl60okhdnt7/1000.wel?dl=0) (1000 Vertices , 192KB)
### ASP
```
node(1).
.
.
.
node(n).
edge(head_1,tail_1,weight_1).
.
.
.
edge(head_n,tail_n,weight_n).
```
* [Document](https://www.mat.unical.it/aspcomp2013/MaximalClique)
* [Sample 1](https://www.dropbox.com/s/4bufa1m4uamv48z/100.lp?dl=0) (100 Vertices , 7KB)
* [Sample 2](https://www.dropbox.com/s/w79fh1qva64namw/1000.lp?dl=0) (1000 Vertices , 76KB)
### Trivial Graph Format
```
1
.
.
.
n
#
1 2 weight_1
.
.
.
n k weight_n
```
* [Document](https://en.wikipedia.org/wiki/Trivial_Graph_Format)
* [Sample 1](https://www.dropbox.com/s/tehb6f3gz2o5v9c/100.tgf?dl=0) (100 Vertices , 4KB)
* [Sample 2](https://www.dropbox.com/s/9mjeq4w973189cc/1000.tgf?dl=0) (1000 Vertices , 61KB)
### UCINET DL Format
```
dl
format=edgelist1
n=
data:
1 2 weight_1
.
.
.
n k weight_n
```
* [Document](https://sites.google.com/site/ucinetsoftware/home)
* [Sample 1](https://www.dropbox.com/s/82wrl86uowwjud2/100.dl?dl=0) (100 Vertices , 8KB)
* [Sample 2](https://www.dropbox.com/s/kbzbsy47uvfqdsi/1000.dl?dl=0) (1000 Vertices , 729KB)
### Matrix Market
```
%%MatrixMarket matrix coordinate real general
.
.
.
```
* [Document](https://math.nist.gov/MatrixMarket/formats.html)
* [Sample 1](https://www.dropbox.com/s/ztw3vg0roups82q/100.mtx?dl=0) (100 Vertices , 59KB)
* [Sample 2](https://www.dropbox.com/s/skjjvbbzrpvryl4/1000.mtx?dl=0) (1000 Vertices , 1.8MB)
### Graph Line
```
: : ... :
: : ... :
.
.
.
: : ... :
```
* [Sample 1](https://www.dropbox.com/s/obmmb5nw1lca9z3/100.gl?dl=0) (100 Vertices , 17KB)
* [Sample 2](https://www.dropbox.com/s/intufsbudnmfv8m/1000.gl?dl=0) (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](https://www.dropbox.com/s/7dqox0f8e1f859s/100.gdf?dl=0) (100 Vertices , 21KB)
* [Sample 2](https://www.dropbox.com/s/xabjzpp0p5sr4b9/1000.gdf?dl=0) (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](https://en.wikipedia.org/wiki/Graph_Modelling_Language)
* [Sample 1](https://www.dropbox.com/s/g9uvywn1fwt9aq7/100.gml?dl=0) (100 Vertices , 120KB)
* [Sample 2](https://www.dropbox.com/s/5gt5udezy56mlz9/1000.gml?dl=0) (1000 Vertices , 2.4MB)
### GEXF
```
PyRGG
File Name
...
...
```
* [Document](https://github.com/gephi/gexf/wiki/Basic-Concepts#network-topology)
* [Sample 1](https://www.dropbox.com/s/kgx8xl9j0dpk4us/100.gexf?dl=0) (100 Vertices , 63KB)
* [Sample 2](https://www.dropbox.com/s/7a380kf35buvusr/1000.gexf?dl=0) (1000 Vertices , 6.4MB)
### Graphviz
```
graph example
{
node1 -- node2 [weight=W1];
node3 -- node4 [weight=W2];
node1 -- node3 [weight=W3];
.
.
.
}
```
* [Document](https://graphviz.org/doc/info/lang.html)
* [Sample 1](https://www.dropbox.com/s/ukev1hi4kguomri/100.gv?dl=0) (100 Vertices , 11KB)
* [Sample 2](https://www.dropbox.com/s/vpvvliz96mdea1p/1000.gv?dl=0) (1000 Vertices , 106KB)
* [Online Visualization](https://dreampuf.github.io/GraphvizOnline/)
### Pickle
⚠️ Binary format
* [Document](https://docs.python.org/3.10/library/pickle.html)
* [Sample 1](https://www.dropbox.com/s/4s8zt9i13z39gts/100.p?dl=0) (100 Vertices , 12KB)
* [Sample 2](https://www.dropbox.com/s/fzurqu5au0p1b54/1000.p?dl=0) (1000 Vertices , 340KB)
## Issues & Bug Reports
Just fill an issue and describe it. We'll check it ASAP!
or send an email to [info@pyrgg.site](mailto:info@pyrgg.site "info@pyrgg.site").
You can also join our discord server
## Cite
If you use PyRGG in your research, we would appreciate citations to the following paper:
[Haghighi, S., 2017. Pyrgg: Python Random Graph Generator. *Journal of Open Source Software*, 2(17), p.331.](https://joss.theoj.org/papers/10.21105/joss.00331)
```bibtex
@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.
16- Barabási, Albert-László, and Réka Albert. "Emergence of scaling in random networks." science 286.5439 (1999): 509-512.
## 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 ;-) .
sepandhaghighi-pyrgg-6f6ed59/SECURITY.md 0000664 0000000 0000000 00000000750 15053222211 0020021 0 ustar 00root root 0000000 0000000 # Security Policy
## Supported Versions
| Version | Supported |
| ------------- | ------------------ |
| 1.8 | :white_check_mark: |
| < 1.8 | :x: |
## Reporting a Vulnerability
Please report security vulnerabilities by email to [info@pyrgg.site](mailto:info@pyrgg.site "info@pyrgg.site").
If the security vulnerability is accepted, a dedicated bugfix release will be issued as soon as possible (depending on the complexity of the fix). sepandhaghighi-pyrgg-6f6ed59/autopep8.bat 0000664 0000000 0000000 00000000616 15053222211 0020466 0 ustar 00root root 0000000 0000000 python -m autopep8 pyrgg --recursive --aggressive --aggressive --in-place --pep8-passes 2000 --max-line-length 120 --verbose
python -m autopep8 setup.py --recursive --aggressive --aggressive --in-place --pep8-passes 2000 --max-line-length 120 --verbose
python -m autopep8 otherfile/version_check.py --recursive --aggressive --aggressive --in-place --pep8-passes 2000 --max-line-length 120 --verbose sepandhaghighi-pyrgg-6f6ed59/build_exe.bat 0000664 0000000 0000000 00000000421 15053222211 0020653 0 ustar 00root root 0000000 0000000 @echo off
FOR /F "tokens=* USEBACKQ" %%F IN (`python --version`) DO (
SET py_version_str=%%F
)
SET py_version=%py_version_str:~7%
echo Your Python Version : %py_version%
echo Recommended Python Version : ^>= 3.7
echo -----
echo -----
python -m PyInstaller PYRGG.spec
pause sepandhaghighi-pyrgg-6f6ed59/codecov.yml 0000664 0000000 0000000 00000000307 15053222211 0020373 0 ustar 00root root 0000000 0000000 codecov:
require_ci_to_pass: yes
coverage:
precision: 2
round: up
range: "70...100"
status:
patch:
default:
enabled: no
project:
default:
threshold: 1%
sepandhaghighi-pyrgg-6f6ed59/dev-requirements.txt 0000664 0000000 0000000 00000000255 15053222211 0022270 0 ustar 00root root 0000000 0000000 art==6.5
pyyaml==6.0.2
scipy>=1.2.0
networkx>=2.1
pydot>=1.2.4
pytest>=4.3.1
pytest-cov>=2.6.1
setuptools>=40.8.0
vulture>=1.0
bandit>=1.5.1
pydocstyle>=3.0.0
flake8>=3.5.0
sepandhaghighi-pyrgg-6f6ed59/otherfile/ 0000775 0000000 0000000 00000000000 15053222211 0020207 5 ustar 00root root 0000000 0000000 sepandhaghighi-pyrgg-6f6ed59/otherfile/RELEASE.md 0000664 0000000 0000000 00000003134 15053222211 0021612 0 ustar 00root root 0000000 0000000 # PyRGG Release Instructions
**Last Update: 2025-05-08**
1. Create the `release` branch under `dev`
2. Update all version tags
1. `setup.py`
2. `README.md`
3. `SECURITY.md`
4. `PYRGG.spec`
5. `otherfile/version_check.py`
6. `otherfile/meta.yaml`
7. `otherfile/Version.rc`
8. `pyrgg/params.py`
3. Update `CHANGELOG.md`
1. Add a new header under `Unreleased` section (Example: `## [0.1] - 2022-08-17`)
2. Add a new compare link to the end of the file (Example: `[0.2]: https://github.com/sepandhaghighi/pyrgg/compare/v0.1...v0.2`)
3. Update `dev` compare link (Example: `[Unreleased]: https://github.com/sepandhaghighi/pyrgg/compare/v0.2...dev`)
4. Update `.github/ISSUE_TEMPLATE/bug_report.yml`
1. Add new version tag to `PyRGG version` dropbox options
5. Create a PR from `release` to `dev`
1. Title: `Version x.x` (Example: `Version 0.1`)
2. Tag all related issues
3. Labels: `release`
4. Set milestone
5. Wait for all CI pass
6. Need review (**1** reviewer)
7. Squash and merge
8. Delete `release` branch
6. Merge `dev` branch into `master`
1. Checkout to `master`
2. `git merge dev`
3. `git push origin master`
4. Wait for all CI pass
7. Build EXE file
1. Run `build_exe.bat` (Use `Python >= 3.7`)
8. Create a new release
1. Target branch: `master`
2. Tag: `vx.x` (Example: `v0.1`)
3. Title: `Version x.x` (Example: `Version 0.1`)
4. Copy changelogs
5. Tag all related issues
6. Upload EXE file
9. Bump!!
10. Close this version issues
11. Close milestone
12. Update website
1. `git checkout gh-pages`
2. Update all version tags
1. `index.html`
3. Update size of files
1. `index.html` sepandhaghighi-pyrgg-6f6ed59/otherfile/Version.rc 0000664 0000000 0000000 00000001460 15053222211 0022163 0 ustar 00root root 0000000 0000000 VSVersionInfo(
ffi=FixedFileInfo(
filevers=(1, 8, 0, 0),
prodvers=(1, 8, 0, 0),
mask=0x3f,
flags=0x0,
OS=0x40004,
fileType=0x1,
subtype=0x0,
date=(0, 0)
),
kids=[
StringFileInfo(
[
StringTable(
u'040904B0',
[StringStruct(u'CompanyName', u'PyRGG Development Team'),
StringStruct(u'FileDescription', u'PYRGG.exe'),
StringStruct(u'FileVersion', u'1.8.0.0'),
StringStruct(u'InternalName', u'PYRGG.exe'),
StringStruct(u'LegalCopyright', u'Copyright (c) 2025 PyRGG Development Team'),
StringStruct(u'OriginalFilename', u'PYRGG.exe'),
StringStruct(u'ProductName', u'PyRGG'),
StringStruct(u'ProductVersion', u'1, 8, 0, 0')])
]),
VarFileInfo([VarStruct(u'Translation', [1033, 1200])])
]
) sepandhaghighi-pyrgg-6f6ed59/otherfile/donate-button.png 0000664 0000000 0000000 00000017772 15053222211 0023516 0 ustar 00root root 0000000 0000000 PNG
IHDR n pHYs ~ PLTEGpL 000...333333000000000333,,,***&&&
"""(((000"""(((...&&&,,,&&&((( """&&&,,,,,,"""***&&& 333000...&&&(((666,,,$$$坝***:::<<<ٳ888Տ"""LLL>>>̅ RRRfffHHHVVVZZZFFF݇XXXᱱ^^^é@@@JJJPPPDDDBBBpppbbbttt\\\~~~NNN```rrrTTTjjjvvvnnn|||xxxzzzlllA 5tRNS 3Uwf"Dfݻݪw̪"3̈D3DDfDDfU3ẅ vIDATx["GƓ6y&3y'Wٟ$.}kdߑeUtdPE$0¸FG_Uu6'R]S꣏xo~ym9=x-qgy5h=k||Ɲq\?/}ˈGx1R<+~!o(s,{62a;}aρmI^W+H\-W=T_ݘlWxoP@*y`qq!3v%z<֗7JħXބA^<~nq528
lá!LrZK}&>~Q&®L Dǘg<