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.
- seismic_utac-1.0.0/.github/ISSUE_TEMPLATE/bug_report.md +35 -0
- seismic_utac-1.0.0/.github/ISSUE_TEMPLATE/feature_request.md +29 -0
- seismic_utac-1.0.0/.github/PULL_REQUEST_TEMPLATE.md +31 -0
- seismic_utac-1.0.0/.github/workflows/ci.yml +63 -0
- seismic_utac-1.0.0/.github/workflows/release.yml +79 -0
- seismic_utac-1.0.0/.gitignore +22 -0
- seismic_utac-1.0.0/.pre-commit-config.yaml +17 -0
- seismic_utac-1.0.0/.zenodo.json +62 -0
- seismic_utac-1.0.0/CHANGELOG.md +22 -0
- seismic_utac-1.0.0/CONTRIBUTING.md +47 -0
- seismic_utac-1.0.0/LICENSE +21 -0
- seismic_utac-1.0.0/PKG-INFO +194 -0
- seismic_utac-1.0.0/README.md +149 -0
- seismic_utac-1.0.0/README_QUICKSTART.md +52 -0
- seismic_utac-1.0.0/RELEASE_GUIDE.md +42 -0
- seismic_utac-1.0.0/data/bak1989_targets.yaml +29 -0
- seismic_utac-1.0.0/data/iris_catalog_summary.yaml +10 -0
- seismic_utac-1.0.0/docs/cli.md +90 -0
- seismic_utac-1.0.0/docs/index.md +52 -0
- seismic_utac-1.0.0/docs/templates.md +111 -0
- seismic_utac-1.0.0/mkdocs.yml +45 -0
- seismic_utac-1.0.0/pyproject.toml +103 -0
- seismic_utac-1.0.0/src/diamond_setup/__init__.py +4 -0
- seismic_utac-1.0.0/src/diamond_setup/_types.py +13 -0
- seismic_utac-1.0.0/src/diamond_setup/cli.py +183 -0
- seismic_utac-1.0.0/src/diamond_setup/preset.py +84 -0
- seismic_utac-1.0.0/src/diamond_setup/templates/AGENT.md +25 -0
- seismic_utac-1.0.0/src/diamond_setup/templates/__init__.py +13 -0
- seismic_utac-1.0.0/src/diamond_setup/templates/genesis.py +84 -0
- seismic_utac-1.0.0/src/diamond_setup/templates/minimal.py +171 -0
- seismic_utac-1.0.0/src/diamond_setup/validator.py +67 -0
- seismic_utac-1.0.0/src/seismic_utac/__init__.py +8 -0
- seismic_utac-1.0.0/src/seismic_utac/aftershock.py +112 -0
- seismic_utac-1.0.0/src/seismic_utac/b_value_monitor.py +76 -0
- seismic_utac-1.0.0/src/seismic_utac/benchmark.py +113 -0
- seismic_utac-1.0.0/src/seismic_utac/catalog_loader.py +85 -0
- seismic_utac-1.0.0/src/seismic_utac/cli.py +103 -0
- seismic_utac-1.0.0/src/seismic_utac/constants.py +17 -0
- seismic_utac-1.0.0/src/seismic_utac/crep_seismic.py +79 -0
- seismic_utac-1.0.0/src/seismic_utac/entropy_seismic.py +91 -0
- seismic_utac-1.0.0/src/seismic_utac/gutenberg_richter.py +99 -0
- seismic_utac-1.0.0/src/seismic_utac/strain_accumulation.py +65 -0
- seismic_utac-1.0.0/src/seismic_utac/system.py +310 -0
- seismic_utac-1.0.0/tests/__init__.py +0 -0
- seismic_utac-1.0.0/tests/test_cli.py +101 -0
- seismic_utac-1.0.0/tests/test_preset.py +90 -0
- seismic_utac-1.0.0/tests/test_seismic_utac.py +200 -0
- seismic_utac-1.0.0/tests/test_validator.py +54 -0
- 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,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
|
+
[](https://github.com/GenesisAeon/seismic-utac/actions/workflows/ci.yml)
|
|
52
|
+
[](https://www.python.org)
|
|
53
|
+
[](https://github.com/GenesisAeon/seismic-utac)
|
|
54
|
+
[](LICENSE)
|
|
55
|
+
[](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
|
+
[](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/)
|