Skip to content
Merged

V1 #4

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
0219c46
first major
andreafailla Aug 19, 2024
dbb2a09
second major update (untested)
andreafailla Oct 3, 2024
503f5ea
Edge attrs
andreafailla Oct 7, 2024
9ab83ce
Typings, docs, black
andreafailla Oct 7, 2024
ba5973e
readability
andreafailla Oct 7, 2024
d7deee3
changed tid parameters to start/end slice
andreafailla Oct 8, 2024
c8b4af0
json IO
andreafailla Oct 8, 2024
b7589a0
refactoring
andreafailla Oct 17, 2024
c2ce5ce
ASH (tested)
andreafailla Jun 28, 2025
808bf63
Allow backend switch
andreafailla Jun 30, 2025
c003281
utils (tested)
andreafailla Jul 2, 2025
0430a89
support for high-performance computation of random walks
andreafailla Jul 2, 2025
0a949d2
Update test_ash.py
andreafailla Jul 2, 2025
2519608
docs
andreafailla Jul 2, 2025
ef51cfe
test edits
andreafailla Jul 2, 2025
9166940
s_centralities (tested)
andreafailla Jul 2, 2025
3bd66ff
Update profile test and add utils init
andreafailla Jul 2, 2025
af764a1
⚡️ improve performance
andreafailla Jul 2, 2025
2818dca
🐛 fixed errors in method name
andreafailla Jul 3, 2025
129355a
🎨 Black formatting
andreafailla Jul 3, 2025
119fdbe
🔧 Refactor ASH initialization to remove edge_attributes parameter and…
andreafailla Jul 3, 2025
738834a
✅ Test walks and distances
andreafailla Jul 4, 2025
5323988
✅ Test attribute analysis
andreafailla Jul 4, 2025
22a6202
✅ Test IO
andreafailla Jul 4, 2025
b83769d
✅ Test paths
andreafailla Jul 4, 2025
70ce831
✨ Introduce static random walks
andreafailla Jul 4, 2025
8ebb1e9
🎨 Black
andreafailla Jul 4, 2025
eaf3b59
✅ Test walks
andreafailla Jul 5, 2025
47185db
⚡️ Improved edge insertion on interval backend
andreafailla Jul 6, 2025
4f52863
✅ Test IO (temporal attributes)
andreafailla Jul 16, 2025
d281b16
✨ Separated node profiles and node attributes
andreafailla Jul 16, 2025
19df906
♻️ Moved profile aggregation to utils
andreafailla Jul 16, 2025
ba3f682
✨ Time-respecting random walks
andreafailla Jul 16, 2025
8b260e9
✨ Added hypergraph generators
andreafailla Jul 17, 2025
d543180
✨ Implemented HIF read/write
andreafailla Sep 16, 2025
f907db1
🐛 Time-respecting random walks fix
andreafailla Sep 16, 2025
cd82d3a
♻️ Refactored attribute retrieval to return dicts for consistency
andreafailla Sep 16, 2025
88b8ae8
🍻 Tutorial
andreafailla Sep 18, 2025
30ef826
🐛 handle networkx returning a generator from v3.13
andreafailla Sep 22, 2025
d55969f
🐛 handle static hypergraphs
andreafailla Sep 22, 2025
4d424d9
🎨 Formatting
andreafailla Sep 22, 2025
d8f84c1
📝 Docs
andreafailla Sep 22, 2025
ab9952c
⚡️ Improve presence store
andreafailla Nov 3, 2025
4b82f2a
📝 docstring examples
andreafailla Nov 3, 2025
16f1671
⚡️ Improve presence store
andreafailla Nov 3, 2025
f91afc1
✨ Added s parameter to random walks and rwhs
andreafailla Nov 3, 2025
04b0e93
Reorganize test suite with hierarchical structure
andreafailla Nov 3, 2025
4a3681e
Add Multi-Ego Network module
andreafailla Nov 4, 2025
b3d0e8f
Update multiego docstrings to Sphinx style and add documentation
andreafailla Nov 4, 2025
91f0fb1
Reorganize test suite with hierarchical structure
andreafailla Nov 4, 2025
47b740e
🩹 Patch & uniform randwalks and segregation API
andreafailla Nov 4, 2025
a107f85
Standardize type annotations: int = None → Optional[int] = None
andreafailla Nov 4, 2025
24b27ad
docs: switch to Furo theme and reorganize reference structure
andreafailla Nov 4, 2025
09e99b9
feat: add visualization module with static and temporal plots
andreafailla Nov 4, 2025
04976d2
docs: add autosummary documentation for multiego module
andreafailla Nov 4, 2025
3091d56
update gitignore
andreafailla Nov 4, 2025
fa711ed
refactor: make start and end optional in multiego functions
andreafailla Nov 5, 2025
f1418f2
refactor: enforce strict time-respecting constraints in temporal walks
andreafailla Nov 6, 2025
dd794d2
Improve time-respecting random walks and enhance test coverage
andreafailla Nov 6, 2025
731540f
Tutorials
andreafailla Nov 19, 2025
a2c0e82
Merge origin/features into main — prefer features (content taken from…
andreafailla Nov 19, 2025
36abcbd
Update requirements, and remove outdated test files and utility funct…
andreafailla Nov 19, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions .github/workflows/test_ubuntu.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# This workflow will install Python dependencies, run tests and lint 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: Test and Coverage (Ubuntu)

on:
push:
branches: [ master ]
pull_request:
branches: [ master ]

jobs:
build:

runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: [3.9]

steps:
- uses: actions/checkout@v2
- uses: conda-incubator/setup-miniconda@v2
with:
auto-update-conda: true
python-version: ${{ matrix.python-version }}


- name: Install pip dependencies
run: |

python -m pip install --upgrade pip
pip install .
pip install -r requirements.txt
python -m pip install flake8 pytest
pip install pytest pytest-cov
pip install coveralls

- name: Lint with flake8
run: |
# stop the build if there are Python syntax errors or undefined names
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics

- name: Test with pytest
run: |
pytest --cov-config=.coveragerc --cov=./ --cov-report=xml

- name: codecov
uses: codecov/codecov-action@v1
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -127,3 +127,5 @@ dmypy.json

# Pyre type checker
.pyre/
.DS_Store
.vscode/settings.json
38 changes: 21 additions & 17 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -1,21 +1,25 @@
MIT License
BSD 2-Clause License

Copyright (c) 2023 Giulio Rossetti, Salvatore Citraro, Andrea Failla
Copyright (c) 2017, Giulio Rossetti
All rights reserved.

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:
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

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.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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.
55 changes: 0 additions & 55 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,56 +1 @@
# Attributed Stream Hypergraph (ASH)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![Documentation Status](https://readthedocs.org/projects/ash-model/badge/?version=latest)](https://ash-model.readthedocs.io//en/latest/?badge=latest)
[![pyversions](https://img.shields.io/pypi/pyversions/ash-model.svg)](https://badge.fury.io/py/ash-model)
[![PyPI version](https://badge.fury.io/py/ash-model.svg)](https://badge.fury.io/py/ash-model)
[![SBD++](https://img.shields.io/badge/Available%20on-SoBigData%2B%2B-green)](https://sobigdata.d4science.org/group/sobigdata-gateway/explore?siteId=20371853)

![plot](./docs/ASH_logo_full.png)

``ASH`` is a Python software package that allows to represent and analyze dynamic hypergraphs enriched with node attributes.


If you use ``ASH`` as support to your research consider citing:

> A. Failla, S. Citraro, G. Rossetti
>
> **Attributed Stream Hypergraphs: temporal modeling of node-attributed high-order interactions.**
>
> [arXiv:2303.18226](https://arxiv.org/abs/2303.18226)
> 2023

## Tutorial and Online Environments

Check out the official [tutorial](https://ash-model.readthedocs.io/en/latest/tutorial.html) to get started!

If you would like to test ``ASH`` functionalities without installing anything on your machine consider using the preconfigured Jupyter Hub instances offered by [SoBigData++](https://sobigdata.d4science.org/group/sobigdata-gateway/explore?siteId=20371853).

## Installation

``ASH`` *requires* python>=3.9.

To install the latest version of our library just download (or clone) the current project, open a terminal and run the following commands:

```bash
pip install -r requirements.txt
pip install .
```

Alternatively use pip
```bash
pip install ash_model
```

or conda
```bash
conda config --add channels giuliorossetti
conda config --add channels conda-forge
conda install ash_model
```

## Collaborate with us!

``ASH`` is an active project, any contribution is welcome!

If you like to include your model in ASH feel free to fork the project, open an issue and contact us.

17 changes: 16 additions & 1 deletion ash_model/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,19 @@
from __future__ import absolute_import

import ash_model.classes
__version__ = "1.0.0"

# from ash_model import classes, generators, measures, paths, readwrite, utils
from ash_model.classes import ASH, NProfile
from ash_model.classes.presence_store import (
PresenceStore,
DensePresenceStore,
IntervalPresenceStore,
)

__all__ = [
"ASH",
"NProfile",
"PresenceStore",
"DensePresenceStore",
"IntervalPresenceStore",
]
1 change: 1 addition & 0 deletions ash_model/classes/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
from .undirected import ASH
from .node_profile import NProfile
from .presence_store import DensePresenceStore, IntervalPresenceStore
Loading
Loading