GSEGUtils 0.5.2__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.
- gsegutils-0.5.2/.git_archival.txt +3 -0
- gsegutils-0.5.2/.gitattributes +1 -0
- gsegutils-0.5.2/.github/actions/setup-python-deps/action.yml +23 -0
- gsegutils-0.5.2/.github/workflows/ci.yml +88 -0
- gsegutils-0.5.2/.github/workflows/publish-pypi.yml +53 -0
- gsegutils-0.5.2/.github/workflows/publish-testpypi.yml +53 -0
- gsegutils-0.5.2/.github/workflows/release-please.yml +55 -0
- gsegutils-0.5.2/.gitignore +199 -0
- gsegutils-0.5.2/.license-header.txt +12 -0
- gsegutils-0.5.2/.pre-commit-config.yaml +61 -0
- gsegutils-0.5.2/.readthedocs.yaml +24 -0
- gsegutils-0.5.2/.release-please-manifest.json +3 -0
- gsegutils-0.5.2/CHANGELOG.md +280 -0
- gsegutils-0.5.2/CITATION.cff +47 -0
- gsegutils-0.5.2/LICENSE +35 -0
- gsegutils-0.5.2/MIGRATION-v1.0.md +198 -0
- gsegutils-0.5.2/PKG-INFO +147 -0
- gsegutils-0.5.2/README.md +70 -0
- gsegutils-0.5.2/docs/Makefile +20 -0
- gsegutils-0.5.2/docs/README.md +45 -0
- gsegutils-0.5.2/docs/make.bat +35 -0
- gsegutils-0.5.2/docs/source/API.rst +11 -0
- gsegutils-0.5.2/docs/source/BaseArrays.rst +140 -0
- gsegutils-0.5.2/docs/source/GSEGUtils.base_arrays.rst +10 -0
- gsegutils-0.5.2/docs/source/GSEGUtils.base_types.rst +54 -0
- gsegutils-0.5.2/docs/source/GSEGUtils.lazy_disk_cache.rst +10 -0
- gsegutils-0.5.2/docs/source/GSEGUtils.util.rst +9 -0
- gsegutils-0.5.2/docs/source/GSEGUtils.validators.rst +8 -0
- gsegutils-0.5.2/docs/source/LazyDiskCache.rst +5 -0
- gsegutils-0.5.2/docs/source/_static/gseg_utils_theme.css +7 -0
- gsegutils-0.5.2/docs/source/about.rst +75 -0
- gsegutils-0.5.2/docs/source/conf.py +79 -0
- gsegutils-0.5.2/docs/source/index.rst +19 -0
- gsegutils-0.5.2/mypy.ini +84 -0
- gsegutils-0.5.2/pyproject.toml +104 -0
- gsegutils-0.5.2/pyrightconfig.json +9 -0
- gsegutils-0.5.2/release-please-config.json +28 -0
- gsegutils-0.5.2/setup.cfg +4 -0
- gsegutils-0.5.2/src/GSEGUtils/__init__.py +53 -0
- gsegutils-0.5.2/src/GSEGUtils/__init__.pyi +48 -0
- gsegutils-0.5.2/src/GSEGUtils/_version.py +24 -0
- gsegutils-0.5.2/src/GSEGUtils/base_arrays.py +717 -0
- gsegutils-0.5.2/src/GSEGUtils/base_types.py +516 -0
- gsegutils-0.5.2/src/GSEGUtils/config.py +68 -0
- gsegutils-0.5.2/src/GSEGUtils/constants.py +40 -0
- gsegutils-0.5.2/src/GSEGUtils/generate_init_stubs.py +435 -0
- gsegutils-0.5.2/src/GSEGUtils/lazy_disk_cache/__init__.py +33 -0
- gsegutils-0.5.2/src/GSEGUtils/lazy_disk_cache/disk_backed_ndarray.py +171 -0
- gsegutils-0.5.2/src/GSEGUtils/lazy_disk_cache/disk_backed_store.py +500 -0
- gsegutils-0.5.2/src/GSEGUtils/lazy_disk_cache/lazy_disk_cache.py +543 -0
- gsegutils-0.5.2/src/GSEGUtils/logging_setup.py +109 -0
- gsegutils-0.5.2/src/GSEGUtils/py.typed +0 -0
- gsegutils-0.5.2/src/GSEGUtils/singleton.py +78 -0
- gsegutils-0.5.2/src/GSEGUtils/util.py +374 -0
- gsegutils-0.5.2/src/GSEGUtils/validators.py +759 -0
- gsegutils-0.5.2/src/GSEGUtils.egg-info/PKG-INFO +147 -0
- gsegutils-0.5.2/src/GSEGUtils.egg-info/SOURCES.txt +75 -0
- gsegutils-0.5.2/src/GSEGUtils.egg-info/dependency_links.txt +1 -0
- gsegutils-0.5.2/src/GSEGUtils.egg-info/requires.txt +18 -0
- gsegutils-0.5.2/src/GSEGUtils.egg-info/scm_file_list.json +71 -0
- gsegutils-0.5.2/src/GSEGUtils.egg-info/scm_version.json +8 -0
- gsegutils-0.5.2/src/GSEGUtils.egg-info/top_level.txt +1 -0
- gsegutils-0.5.2/tests/benchmarks/__init__.py +6 -0
- gsegutils-0.5.2/tests/benchmarks/conftest.py +80 -0
- gsegutils-0.5.2/tests/benchmarks/test_lazy_disk_cache.py +83 -0
- gsegutils-0.5.2/tests/benchmarks/test_singleton.py +38 -0
- gsegutils-0.5.2/tests/test_base_arrays.py +1031 -0
- gsegutils-0.5.2/tests/test_base_types.py +0 -0
- gsegutils-0.5.2/tests/test_constants.py +31 -0
- gsegutils-0.5.2/tests/test_generate_init_stubs.py +208 -0
- gsegutils-0.5.2/tests/test_lazy_disk_cache.py +881 -0
- gsegutils-0.5.2/tests/test_pydantic_library.py +157 -0
- gsegutils-0.5.2/tests/test_singleton.py +118 -0
- gsegutils-0.5.2/tests/test_util.py +225 -0
- gsegutils-0.5.2/tests/test_validators.py +922 -0
- gsegutils-0.5.2/tests/test_validators_contract.py +73 -0
- gsegutils-0.5.2/tests/utils.py +18 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.git_archival.txt export-subst
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
name: Setup Python + deps (GSEGUtils)
|
|
2
|
+
description: >
|
|
3
|
+
Set up Python 3.12, restore pip cache, and install GSEGUtils[dev]. The
|
|
4
|
+
caller MUST run `actions/checkout` BEFORE invoking this composite —
|
|
5
|
+
GitHub needs the repo on the runner filesystem to find this action.yml.
|
|
6
|
+
Intentionally asymmetric with the pchandler variant — omits the
|
|
7
|
+
deploy-key SSH step (no cross-repo git+ssh dep). See pchandler workspace
|
|
8
|
+
Phase 8 CONTEXT.md Claude's Discretion §Composite action scope.
|
|
9
|
+
|
|
10
|
+
runs:
|
|
11
|
+
using: composite
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
|
14
|
+
with:
|
|
15
|
+
python-version: "3.12"
|
|
16
|
+
|
|
17
|
+
- uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
|
18
|
+
with:
|
|
19
|
+
path: ~/.cache/pip
|
|
20
|
+
key: pip-${{ runner.os }}-3.12-${{ hashFiles('pyproject.toml') }}
|
|
21
|
+
|
|
22
|
+
- shell: bash
|
|
23
|
+
run: pip install .[dev]
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main, refactor/gsd]
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
lint:
|
|
10
|
+
name: Lint (pre-commit)
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: write
|
|
15
|
+
pull-requests: write
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- name: Checkout
|
|
19
|
+
uses: actions/checkout@v4
|
|
20
|
+
with:
|
|
21
|
+
# On PRs, check out the head branch so pushes work
|
|
22
|
+
ref: ${{ github.event_name == 'pull_request' && github.head_ref || '' }}
|
|
23
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
24
|
+
fetch-depth: 0
|
|
25
|
+
|
|
26
|
+
- uses: actions/setup-python@v5
|
|
27
|
+
with:
|
|
28
|
+
python-version: "3.12"
|
|
29
|
+
|
|
30
|
+
- name: Run pre-commit on PRs
|
|
31
|
+
if: github.event_name == 'pull_request'
|
|
32
|
+
uses: pre-commit/action@v3.0.1
|
|
33
|
+
with:
|
|
34
|
+
extra_args: --all-files
|
|
35
|
+
|
|
36
|
+
- name: Run pre-commit on push
|
|
37
|
+
if: github.event_name == 'push'
|
|
38
|
+
uses: pre-commit/action@v3.0.1
|
|
39
|
+
with:
|
|
40
|
+
extra_args: --all-files
|
|
41
|
+
|
|
42
|
+
tests:
|
|
43
|
+
name: Tests (pytest)
|
|
44
|
+
needs: [lint]
|
|
45
|
+
runs-on: ubuntu-latest
|
|
46
|
+
steps:
|
|
47
|
+
- uses: actions/checkout@v4
|
|
48
|
+
|
|
49
|
+
- uses: actions/setup-python@v5
|
|
50
|
+
with:
|
|
51
|
+
python-version: "3.12"
|
|
52
|
+
|
|
53
|
+
- name: Cache pip
|
|
54
|
+
uses: actions/cache@v4
|
|
55
|
+
with:
|
|
56
|
+
path: ~/.cache/pip
|
|
57
|
+
key: pip-${{ runner.os }}-3.12-${{ hashFiles('pyproject.toml') }}
|
|
58
|
+
|
|
59
|
+
- name: Install dev deps
|
|
60
|
+
run: pip install .[dev]
|
|
61
|
+
|
|
62
|
+
- name: Pyright (informational)
|
|
63
|
+
id: pyright
|
|
64
|
+
continue-on-error: true
|
|
65
|
+
uses: jakebailey/pyright-action@v3
|
|
66
|
+
with:
|
|
67
|
+
annotate: warnings
|
|
68
|
+
# NOTE: leave the `warnings` input UNSET — setting it to `true` would
|
|
69
|
+
# ESCALATE warnings to exit 1 (Pitfall 2 in 01-RESEARCH.md). The
|
|
70
|
+
# warn-only semantics come from the step-level continue-on-error flag.
|
|
71
|
+
working-directory: .
|
|
72
|
+
|
|
73
|
+
- name: Upload pyright report
|
|
74
|
+
if: always()
|
|
75
|
+
uses: actions/upload-artifact@v4
|
|
76
|
+
with:
|
|
77
|
+
name: pyright-report-${{ github.run_id }}
|
|
78
|
+
path: .pyright-report.json
|
|
79
|
+
if-no-files-found: ignore
|
|
80
|
+
|
|
81
|
+
- name: Run tests
|
|
82
|
+
run: pytest -m "not benchmark" --cov=GSEGUtils --cov-report=xml
|
|
83
|
+
|
|
84
|
+
- name: Upload coverage to Codecov
|
|
85
|
+
if: success()
|
|
86
|
+
uses: codecov/codecov-action@v4
|
|
87
|
+
with:
|
|
88
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
"on":
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
build:
|
|
9
|
+
name: Build distribution
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
permissions:
|
|
12
|
+
contents: read
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
|
15
|
+
with:
|
|
16
|
+
fetch-depth: 0
|
|
17
|
+
fetch-tags: true
|
|
18
|
+
|
|
19
|
+
- uses: ./.github/actions/setup-python-deps
|
|
20
|
+
|
|
21
|
+
- name: Build wheel and sdist
|
|
22
|
+
run: |
|
|
23
|
+
pip install build
|
|
24
|
+
python -m build --wheel --sdist
|
|
25
|
+
|
|
26
|
+
- name: Upload dist artifacts
|
|
27
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
28
|
+
with:
|
|
29
|
+
name: dist-${{ github.run_id }}
|
|
30
|
+
path: dist/
|
|
31
|
+
retention-days: 1
|
|
32
|
+
|
|
33
|
+
publish-to-pypi:
|
|
34
|
+
name: Publish to PyPI
|
|
35
|
+
needs: build
|
|
36
|
+
runs-on: ubuntu-latest
|
|
37
|
+
environment:
|
|
38
|
+
name: pypi
|
|
39
|
+
url: https://pypi.org/p/GSEGUtils
|
|
40
|
+
permissions:
|
|
41
|
+
id-token: write # OIDC token for trusted publisher + Sigstore signing
|
|
42
|
+
attestations: write # per PYPI-01 locked spec
|
|
43
|
+
steps:
|
|
44
|
+
- name: Download dist artifacts
|
|
45
|
+
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
46
|
+
with:
|
|
47
|
+
name: dist-${{ github.run_id }}
|
|
48
|
+
path: dist/
|
|
49
|
+
|
|
50
|
+
- name: Publish to PyPI
|
|
51
|
+
uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0
|
|
52
|
+
# attestations: true is the default — PEP 740 attestation auto-produced by the action
|
|
53
|
+
# No repository-url override (defaults to https://upload.pypi.org/legacy/)
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
name: Publish to TestPyPI
|
|
2
|
+
|
|
3
|
+
"on":
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
|
|
6
|
+
jobs:
|
|
7
|
+
build:
|
|
8
|
+
name: Build distribution (TestPyPI)
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
|
14
|
+
with:
|
|
15
|
+
fetch-depth: 0
|
|
16
|
+
fetch-tags: true
|
|
17
|
+
|
|
18
|
+
- uses: ./.github/actions/setup-python-deps
|
|
19
|
+
|
|
20
|
+
- name: Build wheel and sdist
|
|
21
|
+
run: |
|
|
22
|
+
pip install build
|
|
23
|
+
python -m build --wheel --sdist
|
|
24
|
+
|
|
25
|
+
- name: Upload dist artifacts
|
|
26
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
27
|
+
with:
|
|
28
|
+
name: dist-testpypi-${{ github.run_id }}
|
|
29
|
+
path: dist/
|
|
30
|
+
retention-days: 1
|
|
31
|
+
|
|
32
|
+
publish-to-testpypi:
|
|
33
|
+
name: Publish to TestPyPI
|
|
34
|
+
needs: build
|
|
35
|
+
runs-on: ubuntu-latest
|
|
36
|
+
environment:
|
|
37
|
+
name: testpypi
|
|
38
|
+
url: https://test.pypi.org/p/GSEGUtils
|
|
39
|
+
permissions:
|
|
40
|
+
id-token: write # OIDC token for trusted publisher (D-09: no attestations:write)
|
|
41
|
+
steps:
|
|
42
|
+
- name: Download dist artifacts
|
|
43
|
+
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
44
|
+
with:
|
|
45
|
+
name: dist-testpypi-${{ github.run_id }}
|
|
46
|
+
path: dist/
|
|
47
|
+
|
|
48
|
+
- name: Publish to TestPyPI
|
|
49
|
+
uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0
|
|
50
|
+
with:
|
|
51
|
+
repository-url: https://test.pypi.org/legacy/
|
|
52
|
+
attestations: false # D-09: TestPyPI PEP 740 support inconsistent; dry-run proves pipeline not signing
|
|
53
|
+
skip-existing: true # allow repeat dispatches from same HEAD without failure (RESEARCH Pitfall 2)
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
name: release-please
|
|
2
|
+
on:
|
|
3
|
+
workflow_run:
|
|
4
|
+
workflows:
|
|
5
|
+
- CI
|
|
6
|
+
types: [completed]
|
|
7
|
+
branches:
|
|
8
|
+
- main
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: write
|
|
12
|
+
pull-requests: write
|
|
13
|
+
issues: write
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
release-please:
|
|
17
|
+
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
steps:
|
|
20
|
+
- id: app-token
|
|
21
|
+
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
|
|
22
|
+
with:
|
|
23
|
+
app-id: ${{ secrets.APP_ID }}
|
|
24
|
+
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
|
25
|
+
|
|
26
|
+
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
|
27
|
+
with:
|
|
28
|
+
fetch-depth: 0
|
|
29
|
+
fetch-tags: true
|
|
30
|
+
token: ${{ steps.app-token.outputs.token }}
|
|
31
|
+
|
|
32
|
+
- uses: googleapis/release-please-action@45996ed1f6d02564a971a2fa1b5860e934307cf7 # v5.0.0
|
|
33
|
+
id: release
|
|
34
|
+
with:
|
|
35
|
+
token: ${{ steps.app-token.outputs.token }}
|
|
36
|
+
config-file: release-please-config.json
|
|
37
|
+
# release-type: python
|
|
38
|
+
|
|
39
|
+
- name: Tag major and minor versions
|
|
40
|
+
if: ${{ steps.release.outputs.release_created == 'true' }}
|
|
41
|
+
run: |
|
|
42
|
+
git config user.name github-actions[bot]
|
|
43
|
+
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
|
|
44
|
+
|
|
45
|
+
# Clean up old tags if they exist
|
|
46
|
+
git tag -d v${{ steps.release.outputs.major }} || true
|
|
47
|
+
git tag -d v${{ steps.release.outputs.major }}.${{ steps.release.outputs.minor }} || true
|
|
48
|
+
git push origin :refs/tags/v${{ steps.release.outputs.major }} || true
|
|
49
|
+
git push origin :refs/tags/v${{ steps.release.outputs.major }}.${{ steps.release.outputs.minor }} || true
|
|
50
|
+
|
|
51
|
+
# Create and push new tags
|
|
52
|
+
git tag -a v${{ steps.release.outputs.major }} -m "Release v${{ steps.release.outputs.major }}"
|
|
53
|
+
git tag -a v${{ steps.release.outputs.major }}.${{ steps.release.outputs.minor }} -m "Release v${{ steps.release.outputs.major }}.${{ steps.release.outputs.minor }}"
|
|
54
|
+
git push origin v${{ steps.release.outputs.major }}
|
|
55
|
+
git push origin v${{ steps.release.outputs.major }}.${{ steps.release.outputs.minor }}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
# Actions
|
|
2
|
+
src/**/_version.py
|
|
3
|
+
|
|
4
|
+
# Old files
|
|
5
|
+
_old/
|
|
6
|
+
_scrap/
|
|
7
|
+
_future/
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
# BAK files
|
|
11
|
+
**/*.bak
|
|
12
|
+
|
|
13
|
+
# Created by .ignore support plugin (hsz.mobi)
|
|
14
|
+
### Python template
|
|
15
|
+
# Byte-compiled / optimized / DLL files
|
|
16
|
+
__pycache__/
|
|
17
|
+
*.py[cod]
|
|
18
|
+
*$py.class
|
|
19
|
+
|
|
20
|
+
# C extensions
|
|
21
|
+
*.so
|
|
22
|
+
|
|
23
|
+
# Distribution / packaging
|
|
24
|
+
.Python
|
|
25
|
+
env/
|
|
26
|
+
build/
|
|
27
|
+
develop-eggs/
|
|
28
|
+
dist/
|
|
29
|
+
downloads/
|
|
30
|
+
eggs/
|
|
31
|
+
.eggs/
|
|
32
|
+
lib/
|
|
33
|
+
lib64/
|
|
34
|
+
parts/
|
|
35
|
+
sdist/
|
|
36
|
+
var/
|
|
37
|
+
*.egg-info/
|
|
38
|
+
.installed.cfg
|
|
39
|
+
*.egg
|
|
40
|
+
|
|
41
|
+
# PyInstaller
|
|
42
|
+
# Usually these files are written by a python script from a template
|
|
43
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
44
|
+
*.manifest
|
|
45
|
+
*.spec
|
|
46
|
+
|
|
47
|
+
# Installer logs
|
|
48
|
+
pip-log.txt
|
|
49
|
+
pip-delete-this-directory.txt
|
|
50
|
+
|
|
51
|
+
# Unit test / coverage reports
|
|
52
|
+
htmlcov/
|
|
53
|
+
.tox/
|
|
54
|
+
.coverage
|
|
55
|
+
.coverage.*
|
|
56
|
+
.cache
|
|
57
|
+
nosetests.xml
|
|
58
|
+
coverage.xml
|
|
59
|
+
*,cover
|
|
60
|
+
.hypothesis/
|
|
61
|
+
|
|
62
|
+
# Translations
|
|
63
|
+
*.mo
|
|
64
|
+
*.pot
|
|
65
|
+
|
|
66
|
+
# Django stuff:
|
|
67
|
+
*.log
|
|
68
|
+
local_settings.py
|
|
69
|
+
|
|
70
|
+
# Flask stuff:
|
|
71
|
+
instance/
|
|
72
|
+
.webassets-cache
|
|
73
|
+
|
|
74
|
+
# Scrapy stuff:
|
|
75
|
+
.scrapy
|
|
76
|
+
|
|
77
|
+
# Sphinx documentation
|
|
78
|
+
docs/_build/
|
|
79
|
+
|
|
80
|
+
# PyBuilder
|
|
81
|
+
target/
|
|
82
|
+
|
|
83
|
+
# IPython Notebook
|
|
84
|
+
.ipynb_checkpoints
|
|
85
|
+
|
|
86
|
+
# pyenv
|
|
87
|
+
.python-version
|
|
88
|
+
|
|
89
|
+
# celery beat schedule file
|
|
90
|
+
celerybeat-schedule
|
|
91
|
+
|
|
92
|
+
# dotenv
|
|
93
|
+
.env
|
|
94
|
+
|
|
95
|
+
# virtualenv
|
|
96
|
+
venv/
|
|
97
|
+
ENV/
|
|
98
|
+
|
|
99
|
+
# Spyder project settings
|
|
100
|
+
.spyderproject
|
|
101
|
+
|
|
102
|
+
# Rope project settings
|
|
103
|
+
.ropeproject
|
|
104
|
+
### VirtualEnv template
|
|
105
|
+
# Virtualenv
|
|
106
|
+
# http://iamzed.com/2009/05/07/a-primer-on-virtualenv/
|
|
107
|
+
[Bb]in
|
|
108
|
+
[Ii]nclude
|
|
109
|
+
[Ll]ib
|
|
110
|
+
[Ll]ib64
|
|
111
|
+
[Ll]ocal
|
|
112
|
+
[Ss]cripts
|
|
113
|
+
pyvenv.cfg
|
|
114
|
+
.venv
|
|
115
|
+
pip-selfcheck.json
|
|
116
|
+
|
|
117
|
+
### JetBrains template
|
|
118
|
+
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
|
|
119
|
+
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
|
120
|
+
|
|
121
|
+
# User-specific stuff
|
|
122
|
+
.idea/**/workspace.xml
|
|
123
|
+
.idea/**/tasks.xml
|
|
124
|
+
.idea/**/usage.statistics.xml
|
|
125
|
+
.idea/**/dictionaries
|
|
126
|
+
.idea/**/shelf
|
|
127
|
+
|
|
128
|
+
# AWS User-specific
|
|
129
|
+
.idea/**/aws.xml
|
|
130
|
+
|
|
131
|
+
# Generated files
|
|
132
|
+
.idea/**/contentModel.xml
|
|
133
|
+
|
|
134
|
+
# Sensitive or high-churn files
|
|
135
|
+
.idea/**/dataSources/
|
|
136
|
+
.idea/**/dataSources.ids
|
|
137
|
+
.idea/**/dataSources.local.xml
|
|
138
|
+
.idea/**/sqlDataSources.xml
|
|
139
|
+
.idea/**/dynamic.xml
|
|
140
|
+
.idea/**/uiDesigner.xml
|
|
141
|
+
.idea/**/dbnavigator.xml
|
|
142
|
+
|
|
143
|
+
# Gradle
|
|
144
|
+
.idea/**/gradle.xml
|
|
145
|
+
.idea/**/libraries
|
|
146
|
+
|
|
147
|
+
# Gradle and Maven with auto-import
|
|
148
|
+
# When using Gradle or Maven with auto-import, you should exclude module files,
|
|
149
|
+
# since they will be recreated, and may cause churn. Uncomment if using
|
|
150
|
+
# auto-import.
|
|
151
|
+
# .idea/artifacts
|
|
152
|
+
# .idea/compiler.xml
|
|
153
|
+
# .idea/jarRepositories.xml
|
|
154
|
+
# .idea/modules.xml
|
|
155
|
+
# .idea/*.iml
|
|
156
|
+
# .idea/modules
|
|
157
|
+
# *.iml
|
|
158
|
+
# *.ipr
|
|
159
|
+
|
|
160
|
+
# CMake
|
|
161
|
+
cmake-build-*/
|
|
162
|
+
|
|
163
|
+
# Mongo Explorer plugin
|
|
164
|
+
.idea/**/mongoSettings.xml
|
|
165
|
+
|
|
166
|
+
# File-based project format
|
|
167
|
+
*.iws
|
|
168
|
+
|
|
169
|
+
# IntelliJ
|
|
170
|
+
out/
|
|
171
|
+
|
|
172
|
+
# mpeltonen/sbt-idea plugin
|
|
173
|
+
.idea_modules/
|
|
174
|
+
|
|
175
|
+
# JIRA plugin
|
|
176
|
+
atlassian-ide-plugin.xml
|
|
177
|
+
|
|
178
|
+
# Cursive Clojure plugin
|
|
179
|
+
.idea/replstate.xml
|
|
180
|
+
|
|
181
|
+
# SonarLint plugin
|
|
182
|
+
.idea/sonarlint/
|
|
183
|
+
|
|
184
|
+
# Crashlytics plugin (for Android Studio and IntelliJ)
|
|
185
|
+
com_crashlytics_export_strings.xml
|
|
186
|
+
crashlytics.properties
|
|
187
|
+
crashlytics-build.properties
|
|
188
|
+
fabric.properties
|
|
189
|
+
|
|
190
|
+
# Editor-based Rest Client
|
|
191
|
+
.idea/httpRequests
|
|
192
|
+
|
|
193
|
+
# Android studio 3.1+ serialized cache file
|
|
194
|
+
.idea/caches/build_file_checksums.ser
|
|
195
|
+
|
|
196
|
+
# idea folder, uncomment if you don't need it
|
|
197
|
+
.idea/
|
|
198
|
+
|
|
199
|
+
.vscode/
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
GSEGUtils – General utility functions and classes for GSEG research/projects
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025–2026 ETH Zurich
|
|
4
|
+
Department of Civil, Environmental and Geomatic Engineering (D-BAUG)
|
|
5
|
+
Institute of Geodesy and Photogrammetry
|
|
6
|
+
Geosensors and Engineering Geodesy
|
|
7
|
+
|
|
8
|
+
Authors:
|
|
9
|
+
Nicholas Meyer
|
|
10
|
+
Jon Allemand
|
|
11
|
+
|
|
12
|
+
SPDX-License-Identifier: BSD-3-Clause
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/Lucas-C/pre-commit-hooks
|
|
3
|
+
rev: v1.5.4
|
|
4
|
+
hooks:
|
|
5
|
+
- id: insert-license
|
|
6
|
+
name: Insert project banner into Python files
|
|
7
|
+
files: ^src/.*\.(py|pyi)$
|
|
8
|
+
exclude: ^(?:tests/|examples/|\.venv/|venv/|\.git/|build/|dist/|docs/_build/|\.mypy_cache/|\.pytest_cache/|\.ruff_cache/|\.tox/|\.eggs/|site-packages/)
|
|
9
|
+
args:
|
|
10
|
+
- --license-filepath=.license-header.txt
|
|
11
|
+
- --comment-style=#
|
|
12
|
+
- --use-current-year
|
|
13
|
+
- --allow-past-years
|
|
14
|
+
- --detect-license-in-X-top-lines=30
|
|
15
|
+
|
|
16
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
17
|
+
rev: v5.0.0
|
|
18
|
+
hooks:
|
|
19
|
+
- id: trailing-whitespace
|
|
20
|
+
- id: end-of-file-fixer
|
|
21
|
+
- id: check-yaml
|
|
22
|
+
- id: check-toml
|
|
23
|
+
- id: check-added-large-files
|
|
24
|
+
|
|
25
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
26
|
+
rev: v0.15.12
|
|
27
|
+
hooks:
|
|
28
|
+
- id: ruff-check
|
|
29
|
+
args: ["--fix"]
|
|
30
|
+
- id: ruff-format
|
|
31
|
+
|
|
32
|
+
- repo: https://github.com/pre-commit/mirrors-mypy
|
|
33
|
+
rev: v1.17.1
|
|
34
|
+
hooks:
|
|
35
|
+
- id: mypy
|
|
36
|
+
args: ["--config-file", "mypy.ini"]
|
|
37
|
+
pass_filenames: false
|
|
38
|
+
# The pydantic.mypy plugin is loaded by mypy at startup (see mypy.ini
|
|
39
|
+
# `plugins = pydantic.mypy`). mirrors-mypy runs in an isolated venv,
|
|
40
|
+
# so plugin packages must be declared as additional_dependencies here.
|
|
41
|
+
additional_dependencies:
|
|
42
|
+
- "pydantic~=2.11"
|
|
43
|
+
- "numpy>=2.0,<2.4"
|
|
44
|
+
- "numpydantic~=1.10"
|
|
45
|
+
|
|
46
|
+
- repo: local
|
|
47
|
+
hooks:
|
|
48
|
+
- id: pyright-informational
|
|
49
|
+
name: pyright (informational, never blocks)
|
|
50
|
+
# language: python + additional_dependencies so the hook works in CI
|
|
51
|
+
# (lint job installs only `pre-commit` — no system pyright). The pip
|
|
52
|
+
# `pyright` package fetches its Node binary at install time. Local dev
|
|
53
|
+
# already has pyright via `pip install -e .[dev]`, so this is a no-op
|
|
54
|
+
# there. The `|| true` keeps the hook non-blocking regardless.
|
|
55
|
+
entry: bash -c 'pyright "$@" || true' --
|
|
56
|
+
language: python
|
|
57
|
+
additional_dependencies: ["pyright~=1.1"]
|
|
58
|
+
types: [python]
|
|
59
|
+
require_serial: true
|
|
60
|
+
pass_filenames: false
|
|
61
|
+
verbose: true
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Read the Docs configuration file
|
|
2
|
+
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
|
3
|
+
|
|
4
|
+
# Required
|
|
5
|
+
version: 2
|
|
6
|
+
|
|
7
|
+
# Set the OS, Python version, and other tools you might need
|
|
8
|
+
build:
|
|
9
|
+
os: ubuntu-24.04
|
|
10
|
+
tools:
|
|
11
|
+
python: "3.12"
|
|
12
|
+
jobs:
|
|
13
|
+
post_build:
|
|
14
|
+
- if [ -f "$READTHEDOCS_OUTPUT/html/LICENSE" ]; then mv "$READTHEDOCS_OUTPUT/html/LICENSE" "$READTHEDOCS_OUTPUT/html/LICENSE.txt"; fi
|
|
15
|
+
|
|
16
|
+
sphinx:
|
|
17
|
+
configuration: docs/source/conf.py
|
|
18
|
+
|
|
19
|
+
python:
|
|
20
|
+
install:
|
|
21
|
+
- method: pip
|
|
22
|
+
path: .
|
|
23
|
+
extra_requirements:
|
|
24
|
+
- doc
|