amoc-utac 1.0.0__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.
- amoc_utac-1.0.0/.github/ISSUE_TEMPLATE/bug_report.md +35 -0
- amoc_utac-1.0.0/.github/ISSUE_TEMPLATE/feature_request.md +29 -0
- amoc_utac-1.0.0/.github/PULL_REQUEST_TEMPLATE.md +31 -0
- amoc_utac-1.0.0/.github/workflows/ci.yml +48 -0
- amoc_utac-1.0.0/.github/workflows/release.yml +118 -0
- amoc_utac-1.0.0/.gitignore +22 -0
- amoc_utac-1.0.0/.pre-commit-config.yaml +17 -0
- amoc_utac-1.0.0/.zenodo.json +33 -0
- amoc_utac-1.0.0/CHANGELOG.md +20 -0
- amoc_utac-1.0.0/CITATION.cff +65 -0
- amoc_utac-1.0.0/CONTRIBUTING.md +48 -0
- amoc_utac-1.0.0/LICENSE +21 -0
- amoc_utac-1.0.0/PKG-INFO +108 -0
- amoc_utac-1.0.0/README.md +71 -0
- amoc_utac-1.0.0/README_QUICKSTART.md +52 -0
- amoc_utac-1.0.0/RELEASE_GUIDE.md +42 -0
- amoc_utac-1.0.0/amoc_utac/__init__.py +29 -0
- amoc_utac-1.0.0/amoc_utac/benchmark.py +95 -0
- amoc_utac-1.0.0/amoc_utac/cli.py +161 -0
- amoc_utac-1.0.0/amoc_utac/constants.py +52 -0
- amoc_utac-1.0.0/amoc_utac/crep_amoc.py +110 -0
- amoc_utac-1.0.0/amoc_utac/ethics_gate.py +89 -0
- amoc_utac-1.0.0/amoc_utac/fingerprint.py +99 -0
- amoc_utac-1.0.0/amoc_utac/freshwater.py +60 -0
- amoc_utac-1.0.0/amoc_utac/rapid_loader.py +113 -0
- amoc_utac-1.0.0/amoc_utac/system.py +336 -0
- amoc_utac-1.0.0/amoc_utac/tension_metric.py +73 -0
- amoc_utac-1.0.0/amoc_utac/tipping_predictor.py +182 -0
- amoc_utac-1.0.0/data/rapid_mocha_summary.yaml +38 -0
- amoc_utac-1.0.0/data/van_westen_2024_targets.yaml +81 -0
- amoc_utac-1.0.0/docs/cli.md +88 -0
- amoc_utac-1.0.0/docs/index.md +37 -0
- amoc_utac-1.0.0/docs/templates.md +111 -0
- amoc_utac-1.0.0/mkdocs.yml +43 -0
- amoc_utac-1.0.0/notebooks/01_amoc_utac_overview.ipynb +107 -0
- amoc_utac-1.0.0/notebooks/02_rapid_crep_analysis.ipynb +93 -0
- amoc_utac-1.0.0/notebooks/03_tipping_prediction.ipynb +73 -0
- amoc_utac-1.0.0/notebooks/04_gamma_amoc_calibration.ipynb +112 -0
- amoc_utac-1.0.0/pyproject.toml +90 -0
- amoc_utac-1.0.0/src/diamond_setup/__init__.py +4 -0
- amoc_utac-1.0.0/src/diamond_setup/_types.py +13 -0
- amoc_utac-1.0.0/src/diamond_setup/cli.py +183 -0
- amoc_utac-1.0.0/src/diamond_setup/preset.py +84 -0
- amoc_utac-1.0.0/src/diamond_setup/templates/__init__.py +13 -0
- amoc_utac-1.0.0/src/diamond_setup/templates/genesis.py +84 -0
- amoc_utac-1.0.0/src/diamond_setup/templates/minimal.py +143 -0
- amoc_utac-1.0.0/src/diamond_setup/validator.py +67 -0
- amoc_utac-1.0.0/tests/__init__.py +0 -0
- amoc_utac-1.0.0/tests/test_diamond_interface.py +149 -0
- amoc_utac-1.0.0/tests/test_fingerprint.py +98 -0
- amoc_utac-1.0.0/tests/test_freshwater.py +91 -0
- amoc_utac-1.0.0/tests/test_tipping_predictor.py +107 -0
- amoc_utac-1.0.0/uv.lock +1210 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug report
|
|
3
|
+
about: Report something that isn't working as expected
|
|
4
|
+
title: "[BUG] "
|
|
5
|
+
labels: bug
|
|
6
|
+
assignees: ""
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Description
|
|
10
|
+
|
|
11
|
+
A clear and concise description of the bug.
|
|
12
|
+
|
|
13
|
+
## Steps to reproduce
|
|
14
|
+
|
|
15
|
+
1. ...
|
|
16
|
+
2. ...
|
|
17
|
+
3. ...
|
|
18
|
+
|
|
19
|
+
## Expected behavior
|
|
20
|
+
|
|
21
|
+
What you expected to happen.
|
|
22
|
+
|
|
23
|
+
## Actual behavior
|
|
24
|
+
|
|
25
|
+
What actually happened (include full error messages / tracebacks if any).
|
|
26
|
+
|
|
27
|
+
## Environment
|
|
28
|
+
|
|
29
|
+
- Package version: (`pip show amoc-utac` or `git describe --tags`)
|
|
30
|
+
- Python version:
|
|
31
|
+
- OS:
|
|
32
|
+
|
|
33
|
+
## Additional context
|
|
34
|
+
|
|
35
|
+
Anything else relevant — logs, screenshots, related issues.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Feature request
|
|
3
|
+
about: Suggest a new feature, module, or enhancement
|
|
4
|
+
title: "[FEATURE] "
|
|
5
|
+
labels: enhancement
|
|
6
|
+
assignees: ""
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Summary
|
|
10
|
+
|
|
11
|
+
A clear and concise description of the feature.
|
|
12
|
+
|
|
13
|
+
## Motivation
|
|
14
|
+
|
|
15
|
+
Why is this needed? What problem does it solve, or what new capability
|
|
16
|
+
does it enable within the GenesisAeon ecosystem?
|
|
17
|
+
|
|
18
|
+
## Proposed approach
|
|
19
|
+
|
|
20
|
+
How might this be implemented? (Sketches, pseudocode, references to
|
|
21
|
+
related GenesisAeon packages or Diamond Interface methods are welcome.)
|
|
22
|
+
|
|
23
|
+
## Alternatives considered
|
|
24
|
+
|
|
25
|
+
Any alternative approaches you've thought about.
|
|
26
|
+
|
|
27
|
+
## Additional context
|
|
28
|
+
|
|
29
|
+
Links to relevant papers, prior discussion, or related issues/PRs.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
## Summary
|
|
2
|
+
|
|
3
|
+
What does this PR do, in one or two sentences?
|
|
4
|
+
|
|
5
|
+
## Related issue(s)
|
|
6
|
+
|
|
7
|
+
Closes #...
|
|
8
|
+
|
|
9
|
+
## Type of change
|
|
10
|
+
|
|
11
|
+
- [ ] Bug fix
|
|
12
|
+
- [ ] New feature
|
|
13
|
+
- [ ] Breaking change (Diamond Interface or other public API)
|
|
14
|
+
- [ ] Documentation
|
|
15
|
+
- [ ] Tooling / CI / release process
|
|
16
|
+
- [ ] Dependency update
|
|
17
|
+
|
|
18
|
+
## Checklist
|
|
19
|
+
|
|
20
|
+
- [ ] Tests added/updated and passing locally (`pytest`)
|
|
21
|
+
- [ ] `CHANGELOG.md` updated under `## [Unreleased]`
|
|
22
|
+
- [ ] Documentation updated (README, docstrings, notebooks if relevant)
|
|
23
|
+
- [ ] If this changes `run_cycle` / `get_crep_state` / `get_utac_state` /
|
|
24
|
+
`get_phase_events` / `to_zenodo_record`: noted as a breaking change
|
|
25
|
+
and version bump plan described above
|
|
26
|
+
- [ ] If this touches scientific claims/predictions: sources cited and
|
|
27
|
+
speculative vs. validated status is clear
|
|
28
|
+
|
|
29
|
+
## Additional notes
|
|
30
|
+
|
|
31
|
+
Anything reviewers should know.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: ["main", "master", "claude/**"]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: ["main", "master"]
|
|
8
|
+
|
|
9
|
+
concurrency:
|
|
10
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
11
|
+
cancel-in-progress: true
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
lint:
|
|
15
|
+
name: Lint (ruff)
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
- uses: actions/setup-python@v5
|
|
20
|
+
with:
|
|
21
|
+
python-version: "3.11"
|
|
22
|
+
- name: Install dev dependencies
|
|
23
|
+
run: pip install -e ".[dev]"
|
|
24
|
+
- name: Run ruff
|
|
25
|
+
run: ruff check amoc_utac tests
|
|
26
|
+
|
|
27
|
+
test:
|
|
28
|
+
name: Tests (Python ${{ matrix.python-version }})
|
|
29
|
+
runs-on: ubuntu-latest
|
|
30
|
+
strategy:
|
|
31
|
+
fail-fast: false
|
|
32
|
+
matrix:
|
|
33
|
+
python-version: ["3.11", "3.12"]
|
|
34
|
+
steps:
|
|
35
|
+
- uses: actions/checkout@v4
|
|
36
|
+
- uses: actions/setup-python@v5
|
|
37
|
+
with:
|
|
38
|
+
python-version: ${{ matrix.python-version }}
|
|
39
|
+
- name: Install dependencies
|
|
40
|
+
run: pip install -e ".[dev]"
|
|
41
|
+
- name: Run pytest with coverage
|
|
42
|
+
run: pytest --cov=amoc_utac --cov-report=xml -v
|
|
43
|
+
- name: Upload coverage
|
|
44
|
+
if: matrix.python-version == '3.11'
|
|
45
|
+
uses: codecov/codecov-action@v4
|
|
46
|
+
with:
|
|
47
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
48
|
+
files: coverage.xml
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*.*.*"
|
|
7
|
+
- "v*.*.*-rc*"
|
|
8
|
+
- "v*.*.*-alpha*"
|
|
9
|
+
- "v*.*.*-beta*"
|
|
10
|
+
|
|
11
|
+
permissions:
|
|
12
|
+
contents: write
|
|
13
|
+
id-token: write # for PyPI trusted publishing, if configured
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
build:
|
|
17
|
+
name: Build distribution
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@v4
|
|
21
|
+
with:
|
|
22
|
+
fetch-depth: 0
|
|
23
|
+
|
|
24
|
+
- name: Set up Python
|
|
25
|
+
uses: actions/setup-python@v5
|
|
26
|
+
with:
|
|
27
|
+
python-version: "3.12"
|
|
28
|
+
|
|
29
|
+
- name: Install build tooling
|
|
30
|
+
run: python -m pip install --upgrade pip build
|
|
31
|
+
|
|
32
|
+
- name: Build sdist and wheel
|
|
33
|
+
run: python -m build
|
|
34
|
+
|
|
35
|
+
- name: Upload build artifacts
|
|
36
|
+
uses: actions/upload-artifact@v4
|
|
37
|
+
with:
|
|
38
|
+
name: dist
|
|
39
|
+
path: dist/
|
|
40
|
+
|
|
41
|
+
test:
|
|
42
|
+
name: Run test suite
|
|
43
|
+
runs-on: ubuntu-latest
|
|
44
|
+
steps:
|
|
45
|
+
- uses: actions/checkout@v4
|
|
46
|
+
|
|
47
|
+
- name: Set up Python
|
|
48
|
+
uses: actions/setup-python@v5
|
|
49
|
+
with:
|
|
50
|
+
python-version: "3.12"
|
|
51
|
+
|
|
52
|
+
- name: Install package with dev/test extras
|
|
53
|
+
run: |
|
|
54
|
+
python -m pip install --upgrade pip
|
|
55
|
+
if python -c "import tomllib" 2>/dev/null; then :; fi
|
|
56
|
+
pip install -e ".[dev]" 2>/dev/null || pip install -e ".[test]" 2>/dev/null || pip install -e "."
|
|
57
|
+
pip install pytest pytest-cov
|
|
58
|
+
|
|
59
|
+
- name: Run tests
|
|
60
|
+
run: pytest -q || pytest -q --no-header
|
|
61
|
+
|
|
62
|
+
publish-canary:
|
|
63
|
+
name: Publish canary (TestPyPI + pre-release)
|
|
64
|
+
needs: [build, test]
|
|
65
|
+
if: contains(github.ref_name, '-rc') || contains(github.ref_name, '-alpha') || contains(github.ref_name, '-beta')
|
|
66
|
+
runs-on: ubuntu-latest
|
|
67
|
+
environment: testpypi
|
|
68
|
+
steps:
|
|
69
|
+
- uses: actions/download-artifact@v4
|
|
70
|
+
with:
|
|
71
|
+
name: dist
|
|
72
|
+
path: dist/
|
|
73
|
+
|
|
74
|
+
- name: Publish to TestPyPI
|
|
75
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
76
|
+
with:
|
|
77
|
+
repository-url: https://test.pypi.org/legacy/
|
|
78
|
+
password: ${{ secrets.TEST_PYPI_API_TOKEN }}
|
|
79
|
+
skip-existing: true
|
|
80
|
+
|
|
81
|
+
- name: Create GitHub pre-release
|
|
82
|
+
uses: softprops/action-gh-release@v2
|
|
83
|
+
with:
|
|
84
|
+
files: dist/*
|
|
85
|
+
prerelease: true
|
|
86
|
+
generate_release_notes: true
|
|
87
|
+
|
|
88
|
+
publish-production:
|
|
89
|
+
name: Publish production (PyPI + release + Zenodo archive)
|
|
90
|
+
needs: [build, test]
|
|
91
|
+
if: ${{ !contains(github.ref_name, '-rc') && !contains(github.ref_name, '-alpha') && !contains(github.ref_name, '-beta') }}
|
|
92
|
+
runs-on: ubuntu-latest
|
|
93
|
+
environment: pypi
|
|
94
|
+
steps:
|
|
95
|
+
- uses: actions/download-artifact@v4
|
|
96
|
+
with:
|
|
97
|
+
name: dist
|
|
98
|
+
path: dist/
|
|
99
|
+
|
|
100
|
+
- name: Publish to PyPI
|
|
101
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
102
|
+
with:
|
|
103
|
+
password: ${{ secrets.PYPI_API_TOKEN }}
|
|
104
|
+
skip-existing: true
|
|
105
|
+
|
|
106
|
+
- name: Create GitHub Release
|
|
107
|
+
uses: softprops/action-gh-release@v2
|
|
108
|
+
with:
|
|
109
|
+
files: dist/*
|
|
110
|
+
prerelease: false
|
|
111
|
+
generate_release_notes: true
|
|
112
|
+
|
|
113
|
+
# NOTE: Zenodo archival of this GitHub Release happens automatically
|
|
114
|
+
# IF this repo has Zenodo-GitHub integration enabled at
|
|
115
|
+
# https://zenodo.org/account/settings/github/ (a per-repo, per-owner
|
|
116
|
+
# OAuth toggle on zenodo.org — cannot be set from a workflow file).
|
|
117
|
+
# Once enabled, every GitHub Release like this one mints/updates a
|
|
118
|
+
# Zenodo DOI automatically using the .zenodo.json metadata in this repo.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
3
|
+
rev: v0.6.0
|
|
4
|
+
hooks:
|
|
5
|
+
- id: ruff
|
|
6
|
+
args: [--fix]
|
|
7
|
+
- id: ruff-format
|
|
8
|
+
|
|
9
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
10
|
+
rev: v4.6.0
|
|
11
|
+
hooks:
|
|
12
|
+
- id: trailing-whitespace
|
|
13
|
+
- id: end-of-file-fixer
|
|
14
|
+
- id: check-yaml
|
|
15
|
+
- id: check-toml
|
|
16
|
+
- id: check-merge-conflict
|
|
17
|
+
- id: debug-statements
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "amoc-utac — P18: AMOC collapse early warning — GenesisAeon Package 18 (UTAC/CREP dynamical system)",
|
|
3
|
+
"description": "<p>AMOC collapse early warning — GenesisAeon Package 18 (UTAC/CREP dynamical system). The UTAC-Logistic ODE identifies critical thresholds in Atlantic Meridional Overturning Circulation (AMOC) strength time series, enabling early-warning detection of potential collapse events; CREP metrics characterise coherence and emergence in thermohaline circulation dynamics.</p><p>Part of the <strong>GenesisAeon</strong> ecosystem (P18, domain: oceanography / AMOC tipping). Within the GenesisAeon CREP Criticality Spectrum, this package's characteristic coupling value is Γ ≈ 0.251.</p><p>See <a href=\"https://github.com/GenesisAeon/amoc-utac\">github.com/GenesisAeon/amoc-utac</a> for source, documentation, and reproducibility notebooks.</p>",
|
|
4
|
+
"creators": [
|
|
5
|
+
{
|
|
6
|
+
"name": "Römer, Johann",
|
|
7
|
+
"affiliation": "Independent Researcher / MOR Research Collective"
|
|
8
|
+
}
|
|
9
|
+
],
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"upload_type": "software",
|
|
12
|
+
"access_right": "open",
|
|
13
|
+
"keywords": [
|
|
14
|
+
"GenesisAeon",
|
|
15
|
+
"P18",
|
|
16
|
+
"oceanography / AMOC tipping",
|
|
17
|
+
"UTAC",
|
|
18
|
+
"CREP",
|
|
19
|
+
"open science"
|
|
20
|
+
],
|
|
21
|
+
"related_identifiers": [
|
|
22
|
+
{
|
|
23
|
+
"identifier": "10.5281/zenodo.19645351",
|
|
24
|
+
"relation": "isPartOf",
|
|
25
|
+
"resource_type": "publication-article",
|
|
26
|
+
"scheme": "doi"
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"version": "1.0.0",
|
|
30
|
+
"communities": [
|
|
31
|
+
{ "identifier": "genesisaeon" }
|
|
32
|
+
]
|
|
33
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [1.0.0] - 2026
|
|
11
|
+
### Added
|
|
12
|
+
- Initial v1.0.0 release as part of the GenesisAeon ecosystem-wide 1.0.0
|
|
13
|
+
milestone.
|
|
14
|
+
- Standardized release tooling: `.zenodo.json`, GitHub Actions release
|
|
15
|
+
workflow (`.github/workflows/release.yml`), `RELEASE_GUIDE.md`,
|
|
16
|
+
`CONTRIBUTING.md`, issue/PR templates.
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- Project metadata (`pyproject.toml`) normalized: version bumped from
|
|
20
|
+
0.1.0 to 1.0.0.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
message: >
|
|
3
|
+
If you use amoc-utac in your research, please cite both this software
|
|
4
|
+
and the primary reference (van Westen et al. 2024).
|
|
5
|
+
|
|
6
|
+
title: "amoc-utac — Atlantic Meridional Overturning Circulation Collapse Early Warning"
|
|
7
|
+
version: 0.1.0
|
|
8
|
+
date-released: "2026-04-23"
|
|
9
|
+
license: MIT
|
|
10
|
+
repository-code: "https://github.com/genesisaeon/amoc-utac"
|
|
11
|
+
|
|
12
|
+
authors:
|
|
13
|
+
- family-names: Römer
|
|
14
|
+
given-names: Johann
|
|
15
|
+
affiliation: "MOR Research Collective"
|
|
16
|
+
|
|
17
|
+
abstract: >
|
|
18
|
+
GenesisAeon Package 18. Models the Atlantic Meridional Overturning
|
|
19
|
+
Circulation (AMOC) as a UTAC dynamical system with CREP tensor coupling.
|
|
20
|
+
Central result: Γ_AMOC = arctanh(η=0.50) / σ=2.2 ≈ 0.251, placing AMOC
|
|
21
|
+
in the medium-CREP regime and establishing cross-domain universality with
|
|
22
|
+
neural criticality (Package 20) at the 50% homeostatic efficiency setpoint.
|
|
23
|
+
|
|
24
|
+
keywords:
|
|
25
|
+
- AMOC
|
|
26
|
+
- tipping point
|
|
27
|
+
- UTAC
|
|
28
|
+
- CREP
|
|
29
|
+
- ocean circulation
|
|
30
|
+
- GenesisAeon
|
|
31
|
+
- early warning signal
|
|
32
|
+
- critical slowing down
|
|
33
|
+
|
|
34
|
+
references:
|
|
35
|
+
- type: article
|
|
36
|
+
title: >
|
|
37
|
+
Physics-based early warning signal shows that AMOC is on tipping course
|
|
38
|
+
authors:
|
|
39
|
+
- family-names: van Westen
|
|
40
|
+
given-names: René M.
|
|
41
|
+
- family-names: Kliphuis
|
|
42
|
+
given-names: Michiel
|
|
43
|
+
- family-names: Dijkstra
|
|
44
|
+
given-names: Henk A.
|
|
45
|
+
journal: "Science Advances"
|
|
46
|
+
volume: 10
|
|
47
|
+
issue: 6
|
|
48
|
+
year: 2024
|
|
49
|
+
doi: 10.1126/sciadv.adk1189
|
|
50
|
+
|
|
51
|
+
- type: article
|
|
52
|
+
title: "Warning of a forthcoming collapse of the AMOC"
|
|
53
|
+
authors:
|
|
54
|
+
- family-names: Ditlevsen
|
|
55
|
+
given-names: Peter
|
|
56
|
+
- family-names: Ditlevsen
|
|
57
|
+
given-names: Susanne
|
|
58
|
+
journal: "Nature Communications"
|
|
59
|
+
year: 2023
|
|
60
|
+
doi: 10.1038/s41467-023-39810-w
|
|
61
|
+
|
|
62
|
+
identifiers:
|
|
63
|
+
- type: doi
|
|
64
|
+
value: 10.5281/zenodo.19645351
|
|
65
|
+
description: "Zenodo archive"
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
Thanks for your interest in contributing to this GenesisAeon ecosystem
|
|
4
|
+
package!
|
|
5
|
+
|
|
6
|
+
## Getting started
|
|
7
|
+
|
|
8
|
+
1. Fork and clone the repository.
|
|
9
|
+
2. Create a virtual environment: `python -m venv .venv && source .venv/bin/activate`
|
|
10
|
+
(or `.venv\Scripts\activate` on Windows).
|
|
11
|
+
3. Install in editable mode with dev dependencies:
|
|
12
|
+
`pip install -e ".[dev]"`.
|
|
13
|
+
4. Run the test suite: `pytest`.
|
|
14
|
+
|
|
15
|
+
## Code style
|
|
16
|
+
|
|
17
|
+
- Format and lint with `ruff check amoc_utac tests`.
|
|
18
|
+
- Type-check with `mypy` (this repo uses `strict = true`).
|
|
19
|
+
- Keep functions documented with docstrings.
|
|
20
|
+
|
|
21
|
+
## Diamond Interface
|
|
22
|
+
|
|
23
|
+
`amoc_utac.AmocUTAC` implements the GenesisAeon Diamond Interface
|
|
24
|
+
(`run_cycle`, `get_crep_state`, `get_utac_state`, `get_phase_events`,
|
|
25
|
+
`to_zenodo_record`). Any change to these methods' signatures or return
|
|
26
|
+
shapes is a **breaking change** and requires a MAJOR version bump (see
|
|
27
|
+
`RELEASE_GUIDE.md`).
|
|
28
|
+
|
|
29
|
+
## Pull requests
|
|
30
|
+
|
|
31
|
+
- One logical change per PR.
|
|
32
|
+
- Add or update tests for any behavioral change.
|
|
33
|
+
- Update `CHANGELOG.md` under an `## [Unreleased]` section.
|
|
34
|
+
- Fill out the PR template (`.github/PULL_REQUEST_TEMPLATE.md`).
|
|
35
|
+
|
|
36
|
+
## Reporting issues
|
|
37
|
+
|
|
38
|
+
Please use the issue templates in `.github/ISSUE_TEMPLATE/` — they help us
|
|
39
|
+
triage bug reports vs. feature requests quickly.
|
|
40
|
+
|
|
41
|
+
## Scientific claims
|
|
42
|
+
|
|
43
|
+
This package implements a physics-based early-warning model for AMOC
|
|
44
|
+
collapse (Γ_AMOC ≈ 0.251). If your contribution touches the scientific
|
|
45
|
+
model, prediction, or benchmark data:
|
|
46
|
+
- Cite the source (e.g. van Westen et al. 2024, Ditlevsen & Ditlevsen
|
|
47
|
+
2023).
|
|
48
|
+
- Clearly mark speculative vs. validated claims.
|
amoc_utac-1.0.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 JohannRömer
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
amoc_utac-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: amoc-utac
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: AMOC collapse early warning — GenesisAeon Package 18 (UTAC/CREP dynamical system)
|
|
5
|
+
Project-URL: Homepage, https://github.com/genesisaeon/amoc-utac
|
|
6
|
+
Project-URL: Repository, https://github.com/genesisaeon/amoc-utac
|
|
7
|
+
Project-URL: Zenodo, https://doi.org/10.5281/zenodo.19645351
|
|
8
|
+
Project-URL: Reference, https://doi.org/10.1126/sciadv.adk1189
|
|
9
|
+
Author-email: Johann Römer <j.roemer@mor-research.org>
|
|
10
|
+
License: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: AMOC,CREP,GenesisAeon,UTAC,climate,early warning,ocean circulation,tipping point
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Topic :: Scientific/Engineering :: Atmospheric Science
|
|
20
|
+
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
21
|
+
Requires-Python: >=3.11
|
|
22
|
+
Requires-Dist: matplotlib>=3.9
|
|
23
|
+
Requires-Dist: numpy>=1.26
|
|
24
|
+
Requires-Dist: pyyaml>=6.0
|
|
25
|
+
Requires-Dist: rich>=13.7.0
|
|
26
|
+
Requires-Dist: scipy>=1.13
|
|
27
|
+
Requires-Dist: typer>=0.12.0
|
|
28
|
+
Provides-Extra: dev
|
|
29
|
+
Requires-Dist: mypy>=1.10.0; extra == 'dev'
|
|
30
|
+
Requires-Dist: pytest-cov>=5.0.0; extra == 'dev'
|
|
31
|
+
Requires-Dist: pytest>=8.0.0; extra == 'dev'
|
|
32
|
+
Requires-Dist: ruff>=0.6.0; extra == 'dev'
|
|
33
|
+
Provides-Extra: notebooks
|
|
34
|
+
Requires-Dist: ipykernel>=6.0.0; extra == 'notebooks'
|
|
35
|
+
Requires-Dist: jupyter>=1.0.0; extra == 'notebooks'
|
|
36
|
+
Description-Content-Type: text/markdown
|
|
37
|
+
|
|
38
|
+
# amoc-utac
|
|
39
|
+
|
|
40
|
+
> GenesisAeon Package 18 — Atlantic Meridional Overturning Circulation as UTAC System
|
|
41
|
+
|
|
42
|
+
<p align="center">
|
|
43
|
+
<a href="https://doi.org/10.5281/zenodo.19645351"><img src="https://zenodo.org/badge/DOI/10.5281/zenodo.19645351.svg" alt="DOI (GenesisAeon Whitepaper)"/></a>
|
|
44
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="MIT License"/></a>
|
|
45
|
+
<a href="https://creativecommons.org/licenses/by/4.0/"><img src="https://img.shields.io/badge/docs-CC%20BY%204.0-lightblue.svg" alt="CC BY 4.0"/></a>
|
|
46
|
+
<a href="https://github.com/GenesisAeon/genesis-os"><img src="https://img.shields.io/badge/part%20of-genesis--os-blueviolet" alt="Part of genesis-os"/></a>
|
|
47
|
+
<img src="https://img.shields.io/badge/UTAC-package%2018-orange" alt="Package 18"/>
|
|
48
|
+
</p>
|
|
49
|
+
|
|
50
|
+
**AMOC modelled as UTAC dynamical system** with physics-based early-warning from van Westen et al. (2024).
|
|
51
|
+
|
|
52
|
+
**Key result**: Γ_AMOC ≈ 0.251 (medium-CREP) → same universality point as neural criticality (η = 50 %).
|
|
53
|
+
|
|
54
|
+
## Installation
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
pip install amoc-utac
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
For development:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
pip install -e ".[dev]"
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Quickstart
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
amoc-utac run --duration 120
|
|
70
|
+
amoc-utac tipping-estimate
|
|
71
|
+
amoc-utac zenodo-export
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Integration in genesis-os
|
|
75
|
+
|
|
76
|
+
```python
|
|
77
|
+
from genesis_os import GenesisOS
|
|
78
|
+
os = GenesisOS()
|
|
79
|
+
amoc = os.load_package(18)
|
|
80
|
+
results = amoc.run_cycle(duration_years=120)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Benchmark
|
|
84
|
+
|
|
85
|
+
Validated against RAPID array, van Westen 2024 & Ditlevsen 2023.
|
|
86
|
+
|
|
87
|
+
## Falsifiable Prediction
|
|
88
|
+
|
|
89
|
+
AMOC crosses 50 % weakening (H* = 0.5 K) between 2045–2065.
|
|
90
|
+
|
|
91
|
+
## Role in the GenesisAeon Ecosystem
|
|
92
|
+
|
|
93
|
+
`amoc-utac` is **P18** in the GenesisAeon ecosystem, covering the
|
|
94
|
+
oceanography / AMOC tipping domain. It applies the UTAC-Logistic ODE and
|
|
95
|
+
CREP metrics to the Atlantic Meridional Overturning Circulation, sharing
|
|
96
|
+
its criticality framework (Γ ≈ 0.251) with sibling packages across other
|
|
97
|
+
domains (e.g. neuroscience, heliophysics).
|
|
98
|
+
|
|
99
|
+
## Citation
|
|
100
|
+
|
|
101
|
+
[](https://doi.org/10.5281/zenodo.PLACEHOLDER)
|
|
102
|
+
|
|
103
|
+
DOI will be assigned automatically on first GitHub Release once
|
|
104
|
+
Zenodo–GitHub integration is enabled for this repo.
|
|
105
|
+
|
|
106
|
+
## License
|
|
107
|
+
|
|
108
|
+
Code: MIT • Docs & Data: CC BY 4.0
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# amoc-utac
|
|
2
|
+
|
|
3
|
+
> GenesisAeon Package 18 — Atlantic Meridional Overturning Circulation as UTAC System
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<a href="https://doi.org/10.5281/zenodo.19645351"><img src="https://zenodo.org/badge/DOI/10.5281/zenodo.19645351.svg" alt="DOI (GenesisAeon Whitepaper)"/></a>
|
|
7
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="MIT License"/></a>
|
|
8
|
+
<a href="https://creativecommons.org/licenses/by/4.0/"><img src="https://img.shields.io/badge/docs-CC%20BY%204.0-lightblue.svg" alt="CC BY 4.0"/></a>
|
|
9
|
+
<a href="https://github.com/GenesisAeon/genesis-os"><img src="https://img.shields.io/badge/part%20of-genesis--os-blueviolet" alt="Part of genesis-os"/></a>
|
|
10
|
+
<img src="https://img.shields.io/badge/UTAC-package%2018-orange" alt="Package 18"/>
|
|
11
|
+
</p>
|
|
12
|
+
|
|
13
|
+
**AMOC modelled as UTAC dynamical system** with physics-based early-warning from van Westen et al. (2024).
|
|
14
|
+
|
|
15
|
+
**Key result**: Γ_AMOC ≈ 0.251 (medium-CREP) → same universality point as neural criticality (η = 50 %).
|
|
16
|
+
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
pip install amoc-utac
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
For development:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
pip install -e ".[dev]"
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Quickstart
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
amoc-utac run --duration 120
|
|
33
|
+
amoc-utac tipping-estimate
|
|
34
|
+
amoc-utac zenodo-export
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Integration in genesis-os
|
|
38
|
+
|
|
39
|
+
```python
|
|
40
|
+
from genesis_os import GenesisOS
|
|
41
|
+
os = GenesisOS()
|
|
42
|
+
amoc = os.load_package(18)
|
|
43
|
+
results = amoc.run_cycle(duration_years=120)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Benchmark
|
|
47
|
+
|
|
48
|
+
Validated against RAPID array, van Westen 2024 & Ditlevsen 2023.
|
|
49
|
+
|
|
50
|
+
## Falsifiable Prediction
|
|
51
|
+
|
|
52
|
+
AMOC crosses 50 % weakening (H* = 0.5 K) between 2045–2065.
|
|
53
|
+
|
|
54
|
+
## Role in the GenesisAeon Ecosystem
|
|
55
|
+
|
|
56
|
+
`amoc-utac` is **P18** in the GenesisAeon ecosystem, covering the
|
|
57
|
+
oceanography / AMOC tipping domain. It applies the UTAC-Logistic ODE and
|
|
58
|
+
CREP metrics to the Atlantic Meridional Overturning Circulation, sharing
|
|
59
|
+
its criticality framework (Γ ≈ 0.251) with sibling packages across other
|
|
60
|
+
domains (e.g. neuroscience, heliophysics).
|
|
61
|
+
|
|
62
|
+
## Citation
|
|
63
|
+
|
|
64
|
+
[](https://doi.org/10.5281/zenodo.PLACEHOLDER)
|
|
65
|
+
|
|
66
|
+
DOI will be assigned automatically on first GitHub Release once
|
|
67
|
+
Zenodo–GitHub integration is enabled for this repo.
|
|
68
|
+
|
|
69
|
+
## License
|
|
70
|
+
|
|
71
|
+
Code: MIT • Docs & Data: CC BY 4.0
|