seismic-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.
Files changed (49) hide show
  1. seismic_utac-1.0.0/.github/ISSUE_TEMPLATE/bug_report.md +35 -0
  2. seismic_utac-1.0.0/.github/ISSUE_TEMPLATE/feature_request.md +29 -0
  3. seismic_utac-1.0.0/.github/PULL_REQUEST_TEMPLATE.md +31 -0
  4. seismic_utac-1.0.0/.github/workflows/ci.yml +63 -0
  5. seismic_utac-1.0.0/.github/workflows/release.yml +79 -0
  6. seismic_utac-1.0.0/.gitignore +22 -0
  7. seismic_utac-1.0.0/.pre-commit-config.yaml +17 -0
  8. seismic_utac-1.0.0/.zenodo.json +62 -0
  9. seismic_utac-1.0.0/CHANGELOG.md +22 -0
  10. seismic_utac-1.0.0/CONTRIBUTING.md +47 -0
  11. seismic_utac-1.0.0/LICENSE +21 -0
  12. seismic_utac-1.0.0/PKG-INFO +194 -0
  13. seismic_utac-1.0.0/README.md +149 -0
  14. seismic_utac-1.0.0/README_QUICKSTART.md +52 -0
  15. seismic_utac-1.0.0/RELEASE_GUIDE.md +42 -0
  16. seismic_utac-1.0.0/data/bak1989_targets.yaml +29 -0
  17. seismic_utac-1.0.0/data/iris_catalog_summary.yaml +10 -0
  18. seismic_utac-1.0.0/docs/cli.md +90 -0
  19. seismic_utac-1.0.0/docs/index.md +52 -0
  20. seismic_utac-1.0.0/docs/templates.md +111 -0
  21. seismic_utac-1.0.0/mkdocs.yml +45 -0
  22. seismic_utac-1.0.0/pyproject.toml +103 -0
  23. seismic_utac-1.0.0/src/diamond_setup/__init__.py +4 -0
  24. seismic_utac-1.0.0/src/diamond_setup/_types.py +13 -0
  25. seismic_utac-1.0.0/src/diamond_setup/cli.py +183 -0
  26. seismic_utac-1.0.0/src/diamond_setup/preset.py +84 -0
  27. seismic_utac-1.0.0/src/diamond_setup/templates/AGENT.md +25 -0
  28. seismic_utac-1.0.0/src/diamond_setup/templates/__init__.py +13 -0
  29. seismic_utac-1.0.0/src/diamond_setup/templates/genesis.py +84 -0
  30. seismic_utac-1.0.0/src/diamond_setup/templates/minimal.py +171 -0
  31. seismic_utac-1.0.0/src/diamond_setup/validator.py +67 -0
  32. seismic_utac-1.0.0/src/seismic_utac/__init__.py +8 -0
  33. seismic_utac-1.0.0/src/seismic_utac/aftershock.py +112 -0
  34. seismic_utac-1.0.0/src/seismic_utac/b_value_monitor.py +76 -0
  35. seismic_utac-1.0.0/src/seismic_utac/benchmark.py +113 -0
  36. seismic_utac-1.0.0/src/seismic_utac/catalog_loader.py +85 -0
  37. seismic_utac-1.0.0/src/seismic_utac/cli.py +103 -0
  38. seismic_utac-1.0.0/src/seismic_utac/constants.py +17 -0
  39. seismic_utac-1.0.0/src/seismic_utac/crep_seismic.py +79 -0
  40. seismic_utac-1.0.0/src/seismic_utac/entropy_seismic.py +91 -0
  41. seismic_utac-1.0.0/src/seismic_utac/gutenberg_richter.py +99 -0
  42. seismic_utac-1.0.0/src/seismic_utac/strain_accumulation.py +65 -0
  43. seismic_utac-1.0.0/src/seismic_utac/system.py +310 -0
  44. seismic_utac-1.0.0/tests/__init__.py +0 -0
  45. seismic_utac-1.0.0/tests/test_cli.py +101 -0
  46. seismic_utac-1.0.0/tests/test_preset.py +90 -0
  47. seismic_utac-1.0.0/tests/test_seismic_utac.py +200 -0
  48. seismic_utac-1.0.0/tests/test_validator.py +54 -0
  49. seismic_utac-1.0.0/uv.lock +1637 -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 seismic-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,63 @@
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 + mypy)
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 src tests
26
+ - name: Run mypy
27
+ run: mypy src
28
+
29
+ test:
30
+ name: Tests (Python ${{ matrix.python-version }})
31
+ runs-on: ubuntu-latest
32
+ strategy:
33
+ fail-fast: false
34
+ matrix:
35
+ python-version: ["3.10", "3.11", "3.12"]
36
+ steps:
37
+ - uses: actions/checkout@v4
38
+ - uses: actions/setup-python@v5
39
+ with:
40
+ python-version: ${{ matrix.python-version }}
41
+ - name: Install dependencies
42
+ run: pip install -e ".[dev]"
43
+ - name: Run pytest with coverage
44
+ run: pytest --cov=src --cov-report=xml
45
+ - name: Upload coverage
46
+ if: matrix.python-version == '3.11'
47
+ uses: codecov/codecov-action@v4
48
+ with:
49
+ token: ${{ secrets.CODECOV_TOKEN }}
50
+ files: coverage.xml
51
+
52
+ docs:
53
+ name: Docs (mkdocs --strict)
54
+ runs-on: ubuntu-latest
55
+ steps:
56
+ - uses: actions/checkout@v4
57
+ - uses: actions/setup-python@v5
58
+ with:
59
+ python-version: "3.11"
60
+ - name: Install dev dependencies
61
+ run: pip install -e ".[dev]"
62
+ - name: Build docs
63
+ run: mkdocs build --strict
@@ -0,0 +1,79 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*.*.*"
7
+
8
+ permissions:
9
+ contents: write
10
+ id-token: write
11
+
12
+ jobs:
13
+ build:
14
+ name: Build distribution
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+ with:
19
+ fetch-depth: 0
20
+ - uses: actions/setup-python@v5
21
+ with:
22
+ python-version: "3.11"
23
+ - name: Install build tools
24
+ run: pip install build
25
+ - name: Build wheel and sdist
26
+ run: python -m build
27
+ - name: Upload artifacts
28
+ uses: actions/upload-artifact@v4
29
+ with:
30
+ name: dist
31
+ path: dist/
32
+
33
+ publish-pypi:
34
+ name: Publish to PyPI
35
+ needs: build
36
+ runs-on: ubuntu-latest
37
+ environment:
38
+ name: pypi
39
+ steps:
40
+ - uses: actions/download-artifact@v4
41
+ with:
42
+ name: dist
43
+ path: dist/
44
+ - name: Publish to PyPI
45
+ uses: pypa/gh-action-pypi-publish@release/v1
46
+
47
+ github-release:
48
+ name: Create GitHub Release
49
+ needs: publish-pypi
50
+ runs-on: ubuntu-latest
51
+ steps:
52
+ - uses: actions/checkout@v4
53
+ - uses: actions/download-artifact@v4
54
+ with:
55
+ name: dist
56
+ path: dist/
57
+ - name: Create GitHub Release
58
+ uses: softprops/action-gh-release@v2
59
+ with:
60
+ files: dist/*
61
+ generate_release_notes: true
62
+ draft: false
63
+ prerelease: ${{ contains(github.ref, 'alpha') || contains(github.ref, 'beta') || contains(github.ref, 'rc') }}
64
+
65
+ publish-zenodo:
66
+ name: Publish to Zenodo
67
+ needs: github-release
68
+ runs-on: ubuntu-latest
69
+ steps:
70
+ - uses: actions/checkout@v4
71
+ - name: Upload to Zenodo
72
+ run: |
73
+ echo "Zenodo upload triggered for tag ${{ github.ref_name }}"
74
+ echo "Configure ZENODO_TOKEN secret and zenodraft/action for automatic upload."
75
+ # Replace with actual zenodo-upload action when token is configured:
76
+ # uses: zenodraft/action@main
77
+ # with:
78
+ # concept-doi: 10.5281/zenodo.XXXXXXXX # <- enter your concept DOI
79
+ # token: ${{ secrets.ZENODO_TOKEN }}
@@ -0,0 +1,22 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.egg-info/
5
+ .eggs/
6
+ dist/
7
+ build/
8
+ .venv/
9
+ .uv/
10
+
11
+ # Testing
12
+ .coverage
13
+ htmlcov/
14
+ .pytest_cache/
15
+
16
+ # Docs
17
+ site/
18
+
19
+ # Editors
20
+ .vscode/
21
+ .idea/
22
+ *.swp
@@ -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,62 @@
1
+ {
2
+ "title": "seismic-utac: Earthquake Seismicity & Gutenberg-Richter SOC (GenesisAeon Package 23)",
3
+ "version": "1.0.0",
4
+ "description": "UTAC/CREP model of global earthquake seismicity. Models the Gutenberg-Richter power law as a CREP-mediated Self-Organized Critical (SOC) phenomenon. Calibrated against the IRIS 50-year global catalog (154,383 earthquakes, magnitudes 0.01–8.40, 6 global regions). Implements the Diamond interface (run_cycle, get_crep_state, get_utac_state, get_phase_events, to_zenodo_record) and yields Γ_seismic ≈ 0.200 at the crustal SOC regime (b ≈ 1.7). Part of the GenesisAeon Entropy Atlas Expansion (Packages 23–30).",
5
+ "keywords": [
6
+ "seismicity",
7
+ "Gutenberg-Richter",
8
+ "SOC",
9
+ "self-organized criticality",
10
+ "CREP",
11
+ "UTAC",
12
+ "b-value",
13
+ "Omori-Utsu",
14
+ "earthquake",
15
+ "geophysics",
16
+ "entropy",
17
+ "GenesisAeon",
18
+ "Package 23"
19
+ ],
20
+ "creators": [
21
+ {
22
+ "name": "Römer, Johann",
23
+ "affiliation": "MOR Research Collective"
24
+ }
25
+ ],
26
+ "license": "MIT",
27
+ "upload_type": "software",
28
+ "access_right": "open",
29
+ "related_identifiers": [
30
+ {
31
+ "identifier": "10.1029/JB094iB11p15635",
32
+ "relation": "isSupplementTo",
33
+ "scheme": "doi",
34
+ "resource_type": "publication-article"
35
+ },
36
+ {
37
+ "identifier": "10.1029/2002JB002230",
38
+ "relation": "isSupplementTo",
39
+ "scheme": "doi",
40
+ "resource_type": "publication-article"
41
+ },
42
+ {
43
+ "identifier": "10.1016/j.chaos.2020.110634",
44
+ "relation": "isSupplementTo",
45
+ "scheme": "doi",
46
+ "resource_type": "publication-article"
47
+ },
48
+ {
49
+ "identifier": "10.5281/zenodo.19645351",
50
+ "relation": "isDocumentedBy",
51
+ "scheme": "doi",
52
+ "resource_type": "publication"
53
+ },
54
+ {
55
+ "identifier": "https://github.com/GenesisAeon/seismic-utac",
56
+ "relation": "isSupplementedBy",
57
+ "scheme": "url"
58
+ }
59
+ ],
60
+ "language": "eng",
61
+ "notes": "GenesisAeon Entropy Atlas — Package 23 of 30. CREP criticality position: Γ ≈ 0.200 (crustal SOC regime). The b-value decrease before major earthquakes maps onto rising Γ — a falsifiable UTAC precursor signal testable against SCEDC real-time data."
62
+ }
@@ -0,0 +1,22 @@
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
+ - Full Diamond Interface implementation on `SeismicUTAC` (`run_cycle`,
15
+ `get_crep_state`, `get_utac_state`, `get_phase_events`,
16
+ `to_zenodo_record`).
17
+ - Governance docs: `RELEASE_GUIDE.md`, `CONTRIBUTING.md`, issue/PR
18
+ templates.
19
+
20
+ ### Changed
21
+ - Project metadata (`pyproject.toml`, `.zenodo.json`) bumped to version
22
+ 1.0.0.
@@ -0,0 +1,47 @@
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]"` (or `uv sync --dev`).
13
+ 4. Run the test suite: `pytest`.
14
+
15
+ ## Code style
16
+
17
+ - Format and lint with `ruff` (`ruff format`, `ruff check`).
18
+ - Type-check with `mypy` (strict mode is enabled in `pyproject.toml`).
19
+ - Keep functions documented with docstrings.
20
+
21
+ ## Diamond Interface
22
+
23
+ This package implements the GenesisAeon Diamond Interface
24
+ (`run_cycle`, `get_crep_state`, `get_utac_state`, `get_phase_events`,
25
+ `to_zenodo_record`) on `SeismicUTAC`. Any change to these methods'
26
+ signatures or return shapes is a **breaking change** and requires a
27
+ MAJOR version bump (see `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 is part of a research framework. If your contribution touches the
44
+ seismicity/Gutenberg-Richter SOC model (e.g. the calibrated `Γ_seismic`
45
+ value, b-value fits, or precursor-signal claims), please:
46
+ - Cite the source (paper, dataset, or prior GenesisAeon Zenodo record).
47
+ - Clearly mark speculative vs. validated claims.
@@ -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.
@@ -0,0 +1,194 @@
1
+ Metadata-Version: 2.4
2
+ Name: seismic-utac
3
+ Version: 1.0.0
4
+ Summary: Package 23: Earthquake Seismicity & Gutenberg-Richter SOC - UTAC/CREP model (GenesisAeon)
5
+ Project-URL: Homepage, https://github.com/GenesisAeon/seismic-utac
6
+ Project-URL: Repository, https://github.com/GenesisAeon/seismic-utac
7
+ Project-URL: Documentation, https://genesisaeon.github.io/seismic-utac
8
+ Project-URL: Issues, https://github.com/GenesisAeon/seismic-utac/issues
9
+ Project-URL: Zenodo, https://doi.org/10.5281/zenodo.XXXXXXX
10
+ Project-URL: Bak & Tang (1989), https://doi.org/10.1029/JB094iB11p15635
11
+ Author-email: Johann Römer <joberoemer@gmail.com>
12
+ Maintainer-email: GenesisAeon <joberoemer@gmail.com>
13
+ License: MIT
14
+ License-File: LICENSE
15
+ Keywords: CREP,GenesisAeon,Gutenberg-Richter,Omori-Utsu,SOC,UTAC,b-value,earthquake,entropy,geophysics,seismicity,self-organized-criticality
16
+ Classifier: Development Status :: 4 - Beta
17
+ Classifier: Intended Audience :: Science/Research
18
+ Classifier: License :: OSI Approved :: MIT License
19
+ Classifier: Programming Language :: Python :: 3
20
+ Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Topic :: Scientific/Engineering :: Information Analysis
24
+ Classifier: Topic :: Scientific/Engineering :: Physics
25
+ Requires-Python: >=3.10
26
+ Requires-Dist: numpy>=1.26
27
+ Requires-Dist: pydantic>=2.7
28
+ Requires-Dist: pyyaml>=6.0
29
+ Requires-Dist: rich>=13.7.0
30
+ Requires-Dist: scipy>=1.13
31
+ Requires-Dist: typer>=0.12.0
32
+ Provides-Extra: dev
33
+ Requires-Dist: mkdocs-material>=9.5.0; extra == 'dev'
34
+ Requires-Dist: mkdocs>=1.6.0; extra == 'dev'
35
+ Requires-Dist: mypy>=1.10.0; extra == 'dev'
36
+ Requires-Dist: pre-commit>=3.7.0; extra == 'dev'
37
+ Requires-Dist: pytest-cov>=5.0.0; extra == 'dev'
38
+ Requires-Dist: pytest>=8.0.0; extra == 'dev'
39
+ Requires-Dist: ruff>=0.6.0; extra == 'dev'
40
+ Requires-Dist: types-pyyaml>=6.0; extra == 'dev'
41
+ Provides-Extra: docs
42
+ Requires-Dist: mkdocs-material>=9.5.0; extra == 'docs'
43
+ Requires-Dist: mkdocs>=1.6.0; extra == 'docs'
44
+ Description-Content-Type: text/markdown
45
+
46
+ # seismic-utac
47
+
48
+ **Package 23 — Earthquake Seismicity & Gutenberg-Richter SOC**
49
+ GenesisAeon · MOR Research Collective
50
+
51
+ [![CI](https://github.com/GenesisAeon/seismic-utac/actions/workflows/ci.yml/badge.svg)](https://github.com/GenesisAeon/seismic-utac/actions/workflows/ci.yml)
52
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue)](https://www.python.org)
53
+ [![Package 23](https://img.shields.io/badge/GenesisAeon-Package%2023-blueviolet)](https://github.com/GenesisAeon/seismic-utac)
54
+ [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)
55
+ [![DOI](https://img.shields.io/badge/DOI-10.1029%2FJB094iB11p15635-orange)](https://doi.org/10.1029/JB094iB11p15635)
56
+
57
+ Models global earthquake seismicity as a **UTAC (Unified Threshold-Activated Criticality)** system,
58
+ grounding the Gutenberg-Richter power law as a CREP-mediated Self-Organized Critical (SOC)
59
+ phenomenon. Calibrated against the IRIS 50-year global catalog (154,383 earthquakes).
60
+
61
+ > Bak, P. & Tang, C. (1989). Earthquakes as a self-organized critical phenomenon.
62
+ > *J. Geophys. Res.* 94(B11), 15,635. [DOI: 10.1029/JB094iB11p15635](https://doi.org/10.1029/JB094iB11p15635)
63
+
64
+ ---
65
+
66
+ ## CREP Criticality Position
67
+
68
+ ```
69
+ Γ_seismic ≈ 0.200 (b-value = 1.7, crustal SOC regime)
70
+
71
+ Spectrum: Qubit(0.050) — Cellular(0.090) — Seismic(0.200) — AMOC/Neural(0.251) — BTW(0.296)
72
+ ```
73
+
74
+ The b-value decrease before major earthquakes maps directly onto rising Γ — a falsifiable
75
+ UTAC precursor signal.
76
+
77
+ ---
78
+
79
+ ## Install
80
+
81
+ ```bash
82
+ pip install -e ".[dev]"
83
+ # or
84
+ uv sync --dev
85
+ ```
86
+
87
+ ## Quickstart
88
+
89
+ ```python
90
+ from seismic_utac import SeismicUTAC
91
+
92
+ system = SeismicUTAC()
93
+ result = system.run_cycle(duration_years=50.0)
94
+
95
+ print(f"Γ = {result['gamma']:.4f}") # ≈ 0.200
96
+ print(f"b-value = {result['b_value']:.3f}") # ≈ 1.7
97
+ print(f"Phase events: {len(result['phase_events'])}")
98
+ ```
99
+
100
+ ## CLI
101
+
102
+ ```bash
103
+ # Run full 50-year UTAC cycle
104
+ seismic-utac run --catalog iris --region global --duration 50
105
+
106
+ # Monitor b-value and phase transition risk
107
+ seismic-utac b-value-monitor --region southern-california
108
+
109
+ # Forecast probability of M≥7.5 within 365 days
110
+ seismic-utac predict --magnitude 7.5 --horizon 365
111
+
112
+ # Run benchmark suite against Bak & Tang (1989) targets
113
+ seismic-utac benchmark
114
+ ```
115
+
116
+ ## Diamond Interface
117
+
118
+ `SeismicUTAC` implements the full GenesisAeon Diamond contract:
119
+
120
+ | Method | Returns |
121
+ |--------|---------|
122
+ | `run_cycle(duration_years)` | Full cycle result dict |
123
+ | `get_crep_state()` | `{C, R, E, P, Gamma}` |
124
+ | `get_utac_state()` | `{H, dH_dt, H_star, K_eff}` |
125
+ | `get_phase_events()` | List of M≥6.5 rupture events |
126
+ | `to_zenodo_record()` | Zenodo-compatible metadata dict |
127
+
128
+ Also: `b_value_current()`, `predict_major_event_probability(magnitude, horizon_days)`
129
+
130
+ ## Physical Mapping
131
+
132
+ | UTAC variable | Seismic meaning |
133
+ |---------------|----------------|
134
+ | `H(t)` | Normalised crustal strain energy ∈ [0, 1] |
135
+ | `H*` | Critical strain at GR rollover (b-value change point) |
136
+ | `K` | Max energy before M8+ event (~10¹⁷ J) |
137
+ | `Γ` | CREP tensor from b-value, foreshock clustering, entropy |
138
+ | `r` | Tectonic strain loading rate (~0.05/year) |
139
+
140
+ ## Benchmark Targets
141
+
142
+ | Target | Expected | Tolerance |
143
+ |--------|----------|-----------|
144
+ | `b_value_global` | 1.00 | ±0.10 |
145
+ | `b_value_swarm_max` | 2.50 | ±0.30 |
146
+ | `gamma_seismic` | 0.200 | ±0.03 |
147
+ | `aftershock_omori_p` | 1.10 | ±0.10 |
148
+
149
+ ```bash
150
+ uv run pytest tests/test_seismic_utac.py -v
151
+ ```
152
+
153
+ ## Repository Structure
154
+
155
+ ```
156
+ seismic-utac/
157
+ ├── src/seismic_utac/
158
+ │ ├── system.py # SeismicUTAC — Diamond interface
159
+ │ ├── gutenberg_richter.py # GR law, b-value MLE (Aki 1965)
160
+ │ ├── strain_accumulation.py # Crustal strain energy → UTAC H(t)
161
+ │ ├── b_value_monitor.py # Sliding-window b-value tracker
162
+ │ ├── entropy_seismic.py # Permutation entropy → CREP P
163
+ │ ├── crep_seismic.py # Seismic CREP tensor
164
+ │ ├── aftershock.py # Omori-Utsu aftershock model
165
+ │ ├── catalog_loader.py # Synthetic + YAML catalog loader
166
+ │ ├── benchmark.py # Bak & Tang (1989) benchmark suite
167
+ │ ├── cli.py # Typer CLI
168
+ │ └── constants.py # SIGMA=2.2, B_SOC_TYPICAL=1.7, …
169
+ ├── data/
170
+ │ ├── iris_catalog_summary.yaml
171
+ │ └── bak1989_targets.yaml
172
+ └── tests/
173
+ └── test_seismic_utac.py # 17 tests, all passing
174
+ ```
175
+
176
+ ## References
177
+
178
+ - Bak & Tang (1989). [DOI: 10.1029/JB094iB11p15635](https://doi.org/10.1029/JB094iB11p15635)
179
+ - Al-Kindy & Main (2003). [DOI: 10.1029/2002JB002230](https://doi.org/10.1029/2002JB002230)
180
+ - da Silva et al. (2021). [DOI: 10.1016/j.chaos.2020.110634](https://doi.org/10.1016/j.chaos.2020.110634)
181
+
182
+ ## Citation
183
+
184
+ [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.PLACEHOLDER.svg)](https://doi.org/10.5281/zenodo.PLACEHOLDER)
185
+
186
+ DOI will be assigned automatically on first GitHub Release once
187
+ Zenodo–GitHub integration is enabled for this repo.
188
+
189
+ ---
190
+
191
+ Also includes the **diamond-setup** scaffold tool used to generate this project.
192
+ Run `diamond scaffold <name>` to create new GenesisAeon packages.
193
+
194
+ Built with [uv](https://docs.astral.sh/uv/) · [NumPy](https://numpy.org/) · [SciPy](https://scipy.org/) · [Typer](https://typer.tiangolo.com/) · [Rich](https://rich.readthedocs.io/)