Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
3603e3a
Update ECT with example in documentation
yemeen Oct 1, 2025
78b3c00
Simplify header in ECT documentation
yemeen Oct 1, 2025
222f677
Add ECTResult class to modules.rst
yemeen Oct 1, 2025
3f27dcc
Update ECTResult class to manipulate ECT matrices efficiently
yemeen Oct 1, 2025
c0749c0
remove todos
yemeen Oct 2, 2025
83bd9d0
update tut link
yemeen Oct 2, 2025
2840775
clean up ect documentation
yemeen Oct 2, 2025
877394d
Add documentation and test updates to pull request template
yemeen Oct 2, 2025
dea5225
Merge pull request #65 from MunchLab/improve-docs
lizliz Oct 2, 2025
917f338
Merge pull request #66 from MunchLab/update-template
lizliz Oct 2, 2025
b862957
add radial plotting
yemeen Oct 2, 2025
8873aec
Bump version to 1.2.1 in pyproject.toml
yemeen Oct 2, 2025
71f6bec
add new compression function and remove redundant calculation
yemeen Oct 3, 2025
2c467e5
Bump version to 1.2.2 in pyproject.toml
yemeen Oct 3, 2025
55b28fc
Refactor imports and add ECTResult functionalities
yemeen Oct 3, 2025
00cda42
Revert "add radial plotting"
yemeen Oct 3, 2025
cc3bd58
Merge pull request #67 from MunchLab/radial-ect
lizliz Oct 3, 2025
bdd24b2
Merge branch 'main' into compressed-ect
lizliz Oct 3, 2025
03cec49
Merge pull request #68 from MunchLab/compressed-ect
lizliz Oct 3, 2025
94678e6
update readme to reflect new changes
yemeen Nov 22, 2025
bdb4661
Merge pull request #70 from MunchLab/update-readme-again
lizliz Nov 24, 2025
fd93e9a
Update index.rst
yemeen Dec 29, 2025
6bba7d0
Update README.md
yemeen Dec 29, 2025
50a68b4
Merge pull request #79 from MunchLab/yemeen-patch-1
yemeen Jan 21, 2026
45c26ad
Merge branch 'main' into include-statement-of-need
yemeen Jan 21, 2026
684452d
Merge pull request #78 from MunchLab/include-statement-of-need
yemeen Jan 21, 2026
1568234
fix center type
yemeen Jan 21, 2026
ec8878f
Merge branch 'main' of https://github.com/MunchLab/ect into fix-tutor…
yemeen Jan 21, 2026
264dc7a
Merge pull request #91 from MunchLab/fix-tutorial-graph
yemeen Jan 21, 2026
96af593
fix formatting
yemeen Jan 21, 2026
bbd0460
Merge pull request #92 from MunchLab/fix-extra-formatting
yemeen Jan 21, 2026
d085956
remove heuristic
yemeen Jan 21, 2026
88178b9
Merge pull request #93 from MunchLab/fix-shape-heuristic
yemeen Jan 21, 2026
eb5573b
Get rid of old docs folder and extra notebooks from the main repo. Ma…
lizliz Jan 22, 2026
c7225b1
More cleanup
lizliz Jan 22, 2026
e39c843
Yet more documentation cleanup
lizliz Jan 22, 2026
8e61acd
Documentation expansion and/or cleanup
lizliz Jan 22, 2026
cd5598b
Updates to contribution page
lizliz Jan 22, 2026
7b4677e
Merge pull request #94 from MunchLab/DocumentationCleanup
yemeen Jan 22, 2026
5b9c08c
Add test for notebook tutorial execution
yemeen Jan 29, 2026
f6a473f
Update version to 1.2.3 and add nbformat and nbclient
yemeen Jan 29, 2026
d7c2bc7
remove notebook specific tests
yemeen Jan 29, 2026
67d9e8e
Update documentation configuration and workflow settings for
yemeen Jan 29, 2026
91fa6e9
Merge branch 'main' of https://github.com/MunchLab/ect into notebook-…
yemeen Jan 29, 2026
13f294f
Add installation of python3 Jupyter kernel
yemeen Jan 29, 2026
5734f57
Add ipykernel to the list of installed packages
yemeen Jan 29, 2026
b3abfa8
Add pandas library to the documentation workflow
yemeen Jan 29, 2026
b92f6bc
add outline extraction
yemeen Jan 29, 2026
c9de1f0
add sect and dect citations
yemeen Jan 29, 2026
e189b10
Update statement of need to include target users and fields
yemeen Jan 29, 2026
d7f323e
update in text citations correctly and fix typos
yemeen Jan 29, 2026
79e0278
Merge pull request #95 from MunchLab/notebook-tests
lizliz Jan 29, 2026
62548f3
Merge branch 'main' of github.com:MunchLab/ect into reviewer-edits
lizliz Feb 19, 2026
2e30455
Adding sections
lizliz Feb 19, 2026
94f9a2f
Ensure uniform thresholds validation in ECT calculation
yemeen Feb 19, 2026
585f399
Merge branch 'reviewer-edits' of https://github.com/MunchLab/ect into…
yemeen Feb 19, 2026
66e30da
Added a bunch of references
lizliz Feb 19, 2026
cc3aae7
Merge branch 'reviewer-edits' of github.com:MunchLab/ect into reviewe…
lizliz Feb 19, 2026
bd09319
Minor edits
lizliz Feb 19, 2026
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
22 changes: 19 additions & 3 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
<!--- Provide a general summary of your changes in the Title above -->
# Pull Request

## Summary
<!--- Provide a brief summary of your changes -->

## Description
<!--- Describe your changes in detail -->
Expand All @@ -17,11 +20,24 @@
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] Documentation update
- [ ] Code refactoring
- [ ] Performance improvement
- [ ] Test improvement

## Checklist
<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
- [ ] My code follows the code style of this project. (`make clean`)
- [ ] I have incremented the version number in the `pyproject.toml` file.
- [ ] I have added tests to cover my changes.
- [ ] I have incremented the version number in the `pyproject.toml` file (if applicable).
- [ ] I have added tests to cover my changes (if applicable).
- [ ] All new and existing tests passed. (`make tests`)
- [ ] I have updated the documentation (if applicable).
- [ ] My changes generate no new warnings.
- [ ] I have added any necessary new dependencies to `pyproject.toml`.

## Additional Notes
<!--- Add any additional notes, concerns, or questions for reviewers -->

## Screenshots (if applicable)
<!--- Add screenshots to help explain your changes if they are visual in nature -->
2 changes: 1 addition & 1 deletion .github/workflows/compile-paper.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
on:
push:
branches: [JOSS-Paper]
branches: [JOSS-Paper, reviewer-edits]
workflow_dispatch:

jobs:
Expand Down
32 changes: 17 additions & 15 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
name: Build and Deploy Docs
on:
push:
branches: [ "main" ]
branches: ["main"]
paths:
- 'doc_source/**'
- 'src/ect/**'
- "doc_source/**"
- "src/ect/**"
pull_request:
branches: [ "main" ]
paths:
- 'doc_source/**'
- 'src/ect/**'
branches: ["main"]

jobs:
docs:
Expand All @@ -20,36 +17,41 @@ jobs:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Install uv
uses: astral-sh/setup-uv@v5

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version-file: "pyproject.toml"

- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y pandoc

- name: Create venv and install dependencies
run: |
uv venv
source .venv/bin/activate
uv pip install -e .
uv pip install sphinx sphinx-rtd-theme nbsphinx autopep8 myst-parser

uv pip install sphinx sphinx-rtd-theme nbsphinx autopep8 myst-parser ipykernel pandas

- name: Install python3 Jupyter kernel
run: |
source .venv/bin/activate
python -m ipykernel install --user --name python3 --display-name "Python 3"

- name: Build documentation
run: |
source .venv/bin/activate
make html

- name: Deploy to GitHub Pages
if: github.event_name == 'push'
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./docs
force_orphan: true
force_orphan: true
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ benchmarks/results/*
src/ect/embed_graph.py
src/ect/embed_cw.py

.vscode
docs_local

.conda*
.vscode/*

Expand Down
1,924 changes: 0 additions & 1,924 deletions Extra_Notebooks/CodingFiguresFern.ipynb

This file was deleted.

386 changes: 0 additions & 386 deletions Extra_Notebooks/Matisse_ECT.ipynb

This file was deleted.

79 changes: 0 additions & 79 deletions Extra_Notebooks/Mesh.ipynb

This file was deleted.

1,891 changes: 0 additions & 1,891 deletions Extra_Notebooks/Playing_with_Spirals.ipynb

This file was deleted.

388 changes: 0 additions & 388 deletions Extra_Notebooks/tutorial_cw.ipynb

This file was deleted.

779 changes: 0 additions & 779 deletions Extra_Notebooks/tutorial_graph.ipynb

This file was deleted.

6 changes: 6 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@ html:
mkdir docs
sphinx-build -b html doc_source docs

html-local:
# Running sphinx-build to build html files in a local docs folder
rm -rf docs_local
mkdir docs_local
sphinx-build -b html doc_source docs_local

benchmark:
python benchmarks/run_benchmarks.py

Expand Down
45 changes: 35 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
# `ect`: A python package for computing the Euler Characteristic Transform

Python computation tools for computing the Euler Characteristic Transform of embedded graphs.
Python computation tools for computing the Euler Characteristic Transform of embedded complexes.

## Description

Right now, the content includes stuff for doing ECT on graphs embedded in 2D. Eventually the goal is to get voxel versions, higher dimensional simplicial complexes, etc in here.
The package provides fast tools for computing the Euler Characteristic Transform (ECT) on embedded cell complexes in any ambient dimension. You build a complex (vertices, edges, and optional higher‑dimensional cells), choose a set of directions and thresholds, and compute either the exact ECT or its smoothed/differentiable variants. Results come back as NumPy arrays with metadata, plotting helpers, and distance utilities, making it straightforward to visualize transforms and compare shapes. The core is implemented with NumPy and Numba, with optional validation of geometric and structural constraints when constructing complexes.

- `EmbeddedComplex`: convert point clouds into complexes with vertices, edges, and higher‑dimensional cells with embedded coordinates.
- `ECT`, `SECT`, `DECT` : ECT calculations along with the smooth and differentiable variants over sampled directions and transforms.
- `Directions`: uniform, random, or custom directions (angles in 2D; vectors in any dimension)
- Results as `ECTResult`: behaves like a NumPy array, with plotting and distance helpers
- Optional geometric/structural validation when building complexes

For more information on the ECT, see:

Expand All @@ -15,18 +21,14 @@ For more information on the ECT, see:
### Documentation and tutorials

- The documentation is available at: [munchlab.github.io/ect](https://munchlab.github.io/ect/)
- A tutorial jupyter notebook can be found [here](https://munchlab.github.io/ect/notebooks/Tutorial-ECT_for_embedded_graphs.html)

### Dependencies
- A tutorial jupyter notebook can be found [here](https://munchlab.github.io/ect/notebooks/Tutorial-EmbeddedComplex.html)

- `networkx`
- `numpy`
- `matplotlib`
- `numba`

### Installing

The package can be installed using pip:
Requires Python 3.10+.

Install from PyPI:

```{bash}
pip install ect
Expand All @@ -40,12 +42,35 @@ cd ect
pip install .
```

### Quickstart

Compute an ECT for a simple embedded triangle and plot it.

```python
from ect import ECT, EmbeddedComplex

G = EmbeddedComplex()
G.add_node("a", [0.0, 0.0])
G.add_node("b", [1.0, 0.0])
G.add_node("c", [0.5, 0.8])
G.add_edge("a", "b")
G.add_edge("b", "c")
G.add_edge("c", "a")

ect = ECT(num_dirs=32, num_thresh=128)
result = ect.calculate(G)
result.plot()
```



## Authors

This code was written by [Liz Munch](https://elizabethmunch.com/) along with her research group and collaborators. People who have contributed to `ect` include:

- [Sarah McGuire](https://www.sarah-mcguire.com/)
- [Yemeen Ayub](https://yemeen.com/)
- [Dan Chitwood](https://github.com/DanChitwood)

## License

Expand Down
9 changes: 9 additions & 0 deletions doc_source/ECTResult.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# ECTResult

`ECTResult` class provides a fast way to manipulate ECT matrices while also maintaining properties of being a numpy array.


```{eval-rst}
.. automodule:: ect.results
:members:
```
Loading