groupoid 0.1.0.dev5__tar.gz → 0.1.0.dev6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/.github/workflows/auto-tag-release.yml +23 -5
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/.github/workflows/docs-deploy.yml +1 -1
- groupoid-0.1.0.dev6/.github/workflows/release.yml +624 -0
- groupoid-0.1.0.dev6/.zenodo.json +39 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/CHANGELOG.md +70 -1
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/CITATION.cff +1 -1
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/LIMITATIONS.md +13 -7
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/PKG-INFO +8 -4
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/PROBLEMS.md +29 -5
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/README.md +7 -3
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/REPRODUCE.md +1 -1
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/STATUS.md +4 -4
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/codemeta.json +1 -1
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/groupoid/__init__.py +1 -1
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/groupoid/aggregation.py +29 -7
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/groupoid/cohomology.py +9 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/groupoid/persistence.py +9 -1
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/groupoid/transport.py +42 -23
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/groupoid.egg-info/PKG-INFO +8 -4
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/groupoid.egg-info/SOURCES.txt +1 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/pyproject.toml +5 -4
- groupoid-0.1.0.dev6/tests/test_audit_regressions.py +250 -0
- groupoid-0.1.0.dev6/tests/test_release_workflow_integrity.py +784 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/tests/test_transport_validation.py +30 -18
- groupoid-0.1.0.dev5/.github/workflows/release.yml +0 -222
- groupoid-0.1.0.dev5/.zenodo.json +0 -39
- groupoid-0.1.0.dev5/tests/test_release_workflow_integrity.py +0 -100
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/.github/ISSUE_TEMPLATE/mathematical_correction.md +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/.github/dependabot.yml +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/.github/scripts/install_torch_cpu.sh +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/.github/workflows/ci.yml +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/.gitignore +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/.pre-commit-config.yaml +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/CONTRIBUTING.md +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/CORRECTION_NOTICE.md +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/LICENSE +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/SECURITY.md +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/benchmarks/__init__.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/benchmarks/conftest.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/benchmarks/test_karcher_benchmark.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/docs/api.md +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/docs/index.md +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/docs/overrides/404.html +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/docs/quickstart.md +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/docs/theory.md +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/examples/README.md +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/examples/__init__.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/examples/synthetic_curve_demo.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/experiments/PREREGISTRATION.md +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/experiments/README.md +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/experiments/RESULTS.md +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/experiments/analyze.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/experiments/results.json +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/experiments/run_benchmark.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/groupoid/groupoid.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/groupoid/laplacian.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/groupoid/manifold.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/groupoid/optimizer.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/groupoid/sheaf.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/groupoid.egg-info/dependency_links.txt +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/groupoid.egg-info/requires.txt +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/groupoid.egg-info/top_level.txt +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/mkdocs.yml +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/scripts/bind_release_sbom.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/scripts/reproduce_sheaf_laplacian.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/setup.cfg +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/tests/__init__.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/tests/test_aggregation_disconnected.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/tests/test_cohomology_cocycle.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/tests/test_coverage_gaps.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/tests/test_defensive_paths.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/tests/test_imports.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/tests/test_integration.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/tests/test_optimizer_validation.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/tests/test_persistence.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/tests/test_persistence_dimension_labels.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/tests/test_pipeline_integration.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/tests/test_release_sbom_binding.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/tests/test_scientific_corrections.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/tests/test_sheaf_laplacian.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/tests/test_smoke.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/tests/theory/__init__.py +0 -0
- {groupoid-0.1.0.dev5 → groupoid-0.1.0.dev6}/tests/theory/test_mathematical_invariants.py +0 -0
|
@@ -23,17 +23,23 @@ name: Auto Tag Release
|
|
|
23
23
|
# missing, so a pre-existing manual tag always takes precedence and this
|
|
24
24
|
# workflow becomes a no-op for that version.
|
|
25
25
|
|
|
26
|
+
# Tag only a main commit whose CI run succeeded. The tag-exists check below
|
|
27
|
+
# keeps this idempotent for CI runs on commits that did not bump the version.
|
|
26
28
|
on:
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
- pyproject.toml
|
|
29
|
+
workflow_run:
|
|
30
|
+
workflows: ["CI"]
|
|
31
|
+
types: [completed]
|
|
31
32
|
|
|
32
33
|
permissions:
|
|
33
34
|
contents: read
|
|
34
35
|
|
|
35
36
|
jobs:
|
|
36
37
|
tag:
|
|
38
|
+
if: >-
|
|
39
|
+
${{ github.event.workflow_run.conclusion == 'success' &&
|
|
40
|
+
github.event.workflow_run.event == 'push' &&
|
|
41
|
+
github.event.workflow_run.head_branch == 'main' &&
|
|
42
|
+
github.event.workflow_run.head_repository.full_name == github.repository }}
|
|
37
43
|
runs-on: ubuntu-latest
|
|
38
44
|
permissions:
|
|
39
45
|
contents: write # push the tag
|
|
@@ -41,14 +47,26 @@ jobs:
|
|
|
41
47
|
steps:
|
|
42
48
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
43
49
|
with:
|
|
50
|
+
ref: ${{ github.event.workflow_run.head_sha }}
|
|
44
51
|
fetch-depth: 0 # need full tag history to check for an existing tag
|
|
45
52
|
|
|
46
53
|
- name: Create the release tag if this version doesn't have one yet, and dispatch the release
|
|
47
54
|
env:
|
|
48
55
|
GH_TOKEN: ${{ github.token }}
|
|
56
|
+
CI_SHA: ${{ github.event.workflow_run.head_sha }}
|
|
49
57
|
run: |
|
|
50
58
|
set -euo pipefail
|
|
51
59
|
|
|
60
|
+
# Tag only the exact commit that passed CI, and only while it is
|
|
61
|
+
# still the head of main.
|
|
62
|
+
ci_sha="${CI_SHA}"
|
|
63
|
+
[ "$(git rev-parse HEAD)" = "${ci_sha}" ]
|
|
64
|
+
main_sha="$(gh api "repos/${GITHUB_REPOSITORY}/git/ref/heads/main" --jq .object.sha)"
|
|
65
|
+
if [ "${main_sha}" != "${ci_sha}" ]; then
|
|
66
|
+
echo "main advanced past ${ci_sha}; the newer head's CI run decides."
|
|
67
|
+
exit 0
|
|
68
|
+
fi
|
|
69
|
+
|
|
52
70
|
version=$(grep -m1 '^version = "' pyproject.toml | sed -E 's/version = "(.*)"/\1/')
|
|
53
71
|
if [ -z "${version}" ]; then
|
|
54
72
|
echo "::error::could not extract a version from pyproject.toml"
|
|
@@ -60,7 +78,7 @@ jobs:
|
|
|
60
78
|
# anything else. A version that doesn't match this is presumably
|
|
61
79
|
# intentional and unusual enough to want a human tagging it by
|
|
62
80
|
# hand rather than this automation guessing.
|
|
63
|
-
if ! echo "${version}" | grep -Eq '^[0-9]
|
|
81
|
+
if ! echo "${version}" | grep -Eq '^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(\.dev(0|[1-9][0-9]*)|a(0|[1-9][0-9]*)|b(0|[1-9][0-9]*)|rc(0|[1-9][0-9]*))?$'; then
|
|
64
82
|
echo "::error::version '${version}' is not a recognized release format (expected X.Y.Z, optionally with .devN/aN/bN/rcN, no local metadata); refusing to tag automatically. Tag it manually if this is intentional."
|
|
65
83
|
exit 1
|
|
66
84
|
fi
|