so-campaign-manager 0.0.4__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.
- so_campaign_manager-0.0.4/.flake8 +3 -0
- so_campaign_manager-0.0.4/.gitattributes +1 -0
- so_campaign_manager-0.0.4/.github/dependabot.yml +11 -0
- so_campaign_manager-0.0.4/.github/workflows/lint.yaml +17 -0
- so_campaign_manager-0.0.4/.github/workflows/release.yaml +31 -0
- so_campaign_manager-0.0.4/.github/workflows/test.yaml +23 -0
- so_campaign_manager-0.0.4/.gitignore +169 -0
- so_campaign_manager-0.0.4/.pre-commit-config.yaml +29 -0
- so_campaign_manager-0.0.4/.readthedocs.yaml +15 -0
- so_campaign_manager-0.0.4/CONTRIBUTING.md +59 -0
- so_campaign_manager-0.0.4/LICENSE +24 -0
- so_campaign_manager-0.0.4/MANIFEST.in +3 -0
- so_campaign_manager-0.0.4/PKG-INFO +179 -0
- so_campaign_manager-0.0.4/README.md +137 -0
- so_campaign_manager-0.0.4/docs/Makefile +20 -0
- so_campaign_manager-0.0.4/docs/README.md +173 -0
- so_campaign_manager-0.0.4/docs/_static/custom.css +74 -0
- so_campaign_manager-0.0.4/docs/advanced_topics.rst +933 -0
- so_campaign_manager-0.0.4/docs/api.rst +131 -0
- so_campaign_manager-0.0.4/docs/api_complete.rst +152 -0
- so_campaign_manager-0.0.4/docs/architecture.rst +671 -0
- so_campaign_manager-0.0.4/docs/conf.py +165 -0
- so_campaign_manager-0.0.4/docs/developer_guide.rst +406 -0
- so_campaign_manager-0.0.4/docs/direction_null_test_workflow.md +159 -0
- so_campaign_manager-0.0.4/docs/faq.rst +782 -0
- so_campaign_manager-0.0.4/docs/index.rst +102 -0
- so_campaign_manager-0.0.4/docs/installation.rst +70 -0
- so_campaign_manager-0.0.4/docs/quickstart.rst +127 -0
- so_campaign_manager-0.0.4/docs/tutorial.rst +830 -0
- so_campaign_manager-0.0.4/docs/user_guide.rst +242 -0
- so_campaign_manager-0.0.4/docs/workflows.rst +231 -0
- so_campaign_manager-0.0.4/examples/campaign.toml +63 -0
- so_campaign_manager-0.0.4/pyproject.toml +108 -0
- so_campaign_manager-0.0.4/setup.cfg +4 -0
- so_campaign_manager-0.0.4/src/so_campaign_manager.egg-info/PKG-INFO +179 -0
- so_campaign_manager-0.0.4/src/so_campaign_manager.egg-info/SOURCES.txt +102 -0
- so_campaign_manager-0.0.4/src/so_campaign_manager.egg-info/dependency_links.txt +1 -0
- so_campaign_manager-0.0.4/src/so_campaign_manager.egg-info/entry_points.txt +2 -0
- so_campaign_manager-0.0.4/src/so_campaign_manager.egg-info/requires.txt +36 -0
- so_campaign_manager-0.0.4/src/so_campaign_manager.egg-info/top_level.txt +1 -0
- so_campaign_manager-0.0.4/src/socm/__about__.py +34 -0
- so_campaign_manager-0.0.4/src/socm/__init__.py +0 -0
- so_campaign_manager-0.0.4/src/socm/__main__.py +35 -0
- so_campaign_manager-0.0.4/src/socm/bookkeeper/__init__.py +1 -0
- so_campaign_manager-0.0.4/src/socm/bookkeeper/bookkeeper.py +488 -0
- so_campaign_manager-0.0.4/src/socm/configs/slurmise.toml +2 -0
- so_campaign_manager-0.0.4/src/socm/core/__init__.py +1 -0
- so_campaign_manager-0.0.4/src/socm/core/models.py +235 -0
- so_campaign_manager-0.0.4/src/socm/enactor/__init__.py +3 -0
- so_campaign_manager-0.0.4/src/socm/enactor/base.py +123 -0
- so_campaign_manager-0.0.4/src/socm/enactor/dryrun_enactor.py +216 -0
- so_campaign_manager-0.0.4/src/socm/enactor/rp_enactor.py +273 -0
- so_campaign_manager-0.0.4/src/socm/execs/__init__.py +3 -0
- so_campaign_manager-0.0.4/src/socm/execs/mapmaking.py +73 -0
- so_campaign_manager-0.0.4/src/socm/planner/__init__.py +2 -0
- so_campaign_manager-0.0.4/src/socm/planner/base.py +87 -0
- so_campaign_manager-0.0.4/src/socm/planner/heft_planner.py +442 -0
- so_campaign_manager-0.0.4/src/socm/resources/__init__.py +5 -0
- so_campaign_manager-0.0.4/src/socm/resources/perlmutter.py +22 -0
- so_campaign_manager-0.0.4/src/socm/resources/tiger.py +24 -0
- so_campaign_manager-0.0.4/src/socm/resources/universe.py +18 -0
- so_campaign_manager-0.0.4/src/socm/utils/__init__.py +0 -0
- so_campaign_manager-0.0.4/src/socm/utils/misc.py +90 -0
- so_campaign_manager-0.0.4/src/socm/utils/states.py +17 -0
- so_campaign_manager-0.0.4/src/socm/workflows/__init__.py +41 -0
- so_campaign_manager-0.0.4/src/socm/workflows/ml_mapmaking.py +111 -0
- so_campaign_manager-0.0.4/src/socm/workflows/ml_null_tests/__init__.py +10 -0
- so_campaign_manager-0.0.4/src/socm/workflows/ml_null_tests/base.py +117 -0
- so_campaign_manager-0.0.4/src/socm/workflows/ml_null_tests/day_night_null_test.py +132 -0
- so_campaign_manager-0.0.4/src/socm/workflows/ml_null_tests/direction_null_test.py +133 -0
- so_campaign_manager-0.0.4/src/socm/workflows/ml_null_tests/elevation_null_test.py +118 -0
- so_campaign_manager-0.0.4/src/socm/workflows/ml_null_tests/moon_close_null_test.py +165 -0
- so_campaign_manager-0.0.4/src/socm/workflows/ml_null_tests/moonrise_set_null_test.py +151 -0
- so_campaign_manager-0.0.4/src/socm/workflows/ml_null_tests/pwv_null_test.py +118 -0
- so_campaign_manager-0.0.4/src/socm/workflows/ml_null_tests/sun_close_null_test.py +173 -0
- so_campaign_manager-0.0.4/src/socm/workflows/ml_null_tests/time_null_test.py +76 -0
- so_campaign_manager-0.0.4/src/socm/workflows/ml_null_tests/wafer_null_test.py +175 -0
- so_campaign_manager-0.0.4/src/socm/workflows/sat_simulation.py +76 -0
- so_campaign_manager-0.0.4/tests/__init__.py +0 -0
- so_campaign_manager-0.0.4/tests/conftest.py +296 -0
- so_campaign_manager-0.0.4/tests/test_bookkeeper.py +106 -0
- so_campaign_manager-0.0.4/tests/test_cli.py +81 -0
- so_campaign_manager-0.0.4/tests/test_core_models.py +235 -0
- so_campaign_manager-0.0.4/tests/test_core_models_mocked.py +571 -0
- so_campaign_manager-0.0.4/tests/test_dryrun_enactor.py +609 -0
- so_campaign_manager-0.0.4/tests/test_perlmutter_resource.py +221 -0
- so_campaign_manager-0.0.4/tests/test_planner.py +280 -0
- so_campaign_manager-0.0.4/tests/test_planner_base.py +206 -0
- so_campaign_manager-0.0.4/tests/test_tiger_resource.py +225 -0
- so_campaign_manager-0.0.4/tests/test_universe_resource.py +188 -0
- so_campaign_manager-0.0.4/tests/test_utils.py +393 -0
- so_campaign_manager-0.0.4/tests/test_utils_misc.py +253 -0
- so_campaign_manager-0.0.4/tests/workflows/conftest.py +88 -0
- so_campaign_manager-0.0.4/tests/workflows/test_direction_null_tests.py +71 -0
- so_campaign_manager-0.0.4/tests/workflows/test_dn_null_tests.py +71 -0
- so_campaign_manager-0.0.4/tests/workflows/test_elevation_null_tests.py +68 -0
- so_campaign_manager-0.0.4/tests/workflows/test_mlworkflows.py +106 -0
- so_campaign_manager-0.0.4/tests/workflows/test_moon_dist_null_tests.py +66 -0
- so_campaign_manager-0.0.4/tests/workflows/test_moonrise_null_test.py +74 -0
- so_campaign_manager-0.0.4/tests/workflows/test_null_test_base.py +138 -0
- so_campaign_manager-0.0.4/tests/workflows/test_pwv_null_tests.py +92 -0
- so_campaign_manager-0.0.4/tests/workflows/test_sun_dist_null_tests.py +66 -0
- so_campaign_manager-0.0.4/tests/workflows/test_time_null_tests.py +66 -0
- so_campaign_manager-0.0.4/tests/workflows/test_wafer_null_tests.py +67 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
src/socm/_version.py export-subst
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# To get started with Dependabot version updates, you'll need to specify which
|
|
2
|
+
# package ecosystems to update and where the package manifests are located.
|
|
3
|
+
# Please see the documentation for all configuration options:
|
|
4
|
+
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
|
|
5
|
+
|
|
6
|
+
version: 2
|
|
7
|
+
updates:
|
|
8
|
+
- package-ecosystem: "github-actions"
|
|
9
|
+
directory: "/"
|
|
10
|
+
schedule:
|
|
11
|
+
interval: "weekly"
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
name: Formatting
|
|
2
|
+
permissions:
|
|
3
|
+
contents: read
|
|
4
|
+
pull-requests: write
|
|
5
|
+
|
|
6
|
+
on: [push, pull_request]
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
lint:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
steps:
|
|
12
|
+
- uses: actions/checkout@v6
|
|
13
|
+
- uses: astral-sh/ruff-action@v3
|
|
14
|
+
with:
|
|
15
|
+
src: "./src"
|
|
16
|
+
- uses: isort/isort-action@master
|
|
17
|
+
continue-on-error: true
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
name: Release Campaign Manager
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
deploy:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
environment: release
|
|
11
|
+
permissions:
|
|
12
|
+
id-token: write
|
|
13
|
+
strategy:
|
|
14
|
+
matrix:
|
|
15
|
+
python-version: ["3.11", "3.12"]
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- name: Checkout repository
|
|
19
|
+
uses: actions/checkout@v4
|
|
20
|
+
|
|
21
|
+
- name: Install uv
|
|
22
|
+
uses: astral-sh/setup-uv@v5
|
|
23
|
+
|
|
24
|
+
- name: Set up Python
|
|
25
|
+
run: uv python install ${{ matrix.python-version }}
|
|
26
|
+
|
|
27
|
+
- name: Build package
|
|
28
|
+
run: uv build
|
|
29
|
+
|
|
30
|
+
- name: Publish package distributions to PyPI
|
|
31
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
name: Tests
|
|
2
|
+
permissions:
|
|
3
|
+
contents: read
|
|
4
|
+
pull-requests: write
|
|
5
|
+
|
|
6
|
+
on: [push, pull_request]
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
Test:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
steps:
|
|
12
|
+
- uses: actions/checkout@v6
|
|
13
|
+
- uses: actions/setup-python@v6
|
|
14
|
+
with:
|
|
15
|
+
python-version: "3.12"
|
|
16
|
+
cache: "pip"
|
|
17
|
+
- run: |
|
|
18
|
+
pip install https://github.com/simonsobs/sotodlib/archive/master.tar.gz
|
|
19
|
+
pip install -e ".[dev]"
|
|
20
|
+
pytest -vvv tests/ --cov --cov-append
|
|
21
|
+
- uses: coverallsapp/github-action@v2
|
|
22
|
+
with:
|
|
23
|
+
file: .coverage
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
share/python-wheels/
|
|
24
|
+
*.egg-info/
|
|
25
|
+
.installed.cfg
|
|
26
|
+
*.egg
|
|
27
|
+
MANIFEST
|
|
28
|
+
|
|
29
|
+
# PyInstaller
|
|
30
|
+
# Usually these files are written by a python script from a template
|
|
31
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
32
|
+
*.manifest
|
|
33
|
+
*.spec
|
|
34
|
+
|
|
35
|
+
# Installer logs
|
|
36
|
+
pip-log.txt
|
|
37
|
+
pip-delete-this-directory.txt
|
|
38
|
+
|
|
39
|
+
# Unit test / coverage reports
|
|
40
|
+
htmlcov/
|
|
41
|
+
.tox/
|
|
42
|
+
.nox/
|
|
43
|
+
.coverage
|
|
44
|
+
.coverage.*
|
|
45
|
+
.cache
|
|
46
|
+
nosetests.xml
|
|
47
|
+
coverage.xml
|
|
48
|
+
*.cover
|
|
49
|
+
*.py,cover
|
|
50
|
+
.hypothesis/
|
|
51
|
+
.pytest_cache/
|
|
52
|
+
cover/
|
|
53
|
+
|
|
54
|
+
# Translations
|
|
55
|
+
*.mo
|
|
56
|
+
*.pot
|
|
57
|
+
|
|
58
|
+
# Django stuff:
|
|
59
|
+
*.log
|
|
60
|
+
local_settings.py
|
|
61
|
+
db.sqlite3
|
|
62
|
+
db.sqlite3-journal
|
|
63
|
+
|
|
64
|
+
# Flask stuff:
|
|
65
|
+
instance/
|
|
66
|
+
.webassets-cache
|
|
67
|
+
|
|
68
|
+
# Scrapy stuff:
|
|
69
|
+
.scrapy
|
|
70
|
+
|
|
71
|
+
# Sphinx documentation
|
|
72
|
+
docs/_build/
|
|
73
|
+
|
|
74
|
+
# PyBuilder
|
|
75
|
+
.pybuilder/
|
|
76
|
+
target/
|
|
77
|
+
|
|
78
|
+
# Jupyter Notebook
|
|
79
|
+
.ipynb_checkpoints
|
|
80
|
+
|
|
81
|
+
# IPython
|
|
82
|
+
profile_default/
|
|
83
|
+
ipython_config.py
|
|
84
|
+
|
|
85
|
+
# pyenv
|
|
86
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
87
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
88
|
+
# .python-version
|
|
89
|
+
|
|
90
|
+
# pipenv
|
|
91
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
92
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
93
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
94
|
+
# install all needed dependencies.
|
|
95
|
+
#Pipfile.lock
|
|
96
|
+
|
|
97
|
+
# poetry
|
|
98
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
99
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
100
|
+
# commonly ignored for libraries.
|
|
101
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
102
|
+
#poetry.lock
|
|
103
|
+
|
|
104
|
+
# pdm
|
|
105
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
106
|
+
#pdm.lock
|
|
107
|
+
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
|
108
|
+
# in version control.
|
|
109
|
+
# https://pdm.fming.dev/#use-with-ide
|
|
110
|
+
.pdm.toml
|
|
111
|
+
|
|
112
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
113
|
+
__pypackages__/
|
|
114
|
+
|
|
115
|
+
# Celery stuff
|
|
116
|
+
celerybeat-schedule
|
|
117
|
+
celerybeat.pid
|
|
118
|
+
|
|
119
|
+
# SageMath parsed files
|
|
120
|
+
*.sage.py
|
|
121
|
+
|
|
122
|
+
# Environments
|
|
123
|
+
.env
|
|
124
|
+
.venv
|
|
125
|
+
env/
|
|
126
|
+
venv/
|
|
127
|
+
ENV/
|
|
128
|
+
env.bak/
|
|
129
|
+
venv.bak/
|
|
130
|
+
|
|
131
|
+
# Spyder project settings
|
|
132
|
+
.spyderproject
|
|
133
|
+
.spyproject
|
|
134
|
+
|
|
135
|
+
# Rope project settings
|
|
136
|
+
.ropeproject
|
|
137
|
+
|
|
138
|
+
# mkdocs documentation
|
|
139
|
+
/site
|
|
140
|
+
|
|
141
|
+
# mypy
|
|
142
|
+
.mypy_cache/
|
|
143
|
+
.dmypy.json
|
|
144
|
+
dmypy.json
|
|
145
|
+
|
|
146
|
+
# Pyre type checker
|
|
147
|
+
.pyre/
|
|
148
|
+
|
|
149
|
+
# pytype static type analyzer
|
|
150
|
+
.pytype/
|
|
151
|
+
|
|
152
|
+
# Cython debug symbols
|
|
153
|
+
cython_debug/
|
|
154
|
+
|
|
155
|
+
# PyCharm
|
|
156
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
157
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
158
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
159
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
160
|
+
.idea/
|
|
161
|
+
|
|
162
|
+
# VSCode
|
|
163
|
+
.vscode/
|
|
164
|
+
|
|
165
|
+
# Custom
|
|
166
|
+
tmpdev/
|
|
167
|
+
|
|
168
|
+
# setuptools-scm generated version file
|
|
169
|
+
src/socm/__about__.py
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/pycqa/isort
|
|
3
|
+
rev: 6.0.1
|
|
4
|
+
hooks:
|
|
5
|
+
- id: isort
|
|
6
|
+
|
|
7
|
+
- repo: https://github.com/charliermarsh/ruff-pre-commit
|
|
8
|
+
rev: v0.12.5
|
|
9
|
+
hooks:
|
|
10
|
+
- id: ruff
|
|
11
|
+
|
|
12
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
13
|
+
rev: v5.0.0
|
|
14
|
+
hooks:
|
|
15
|
+
- id: check-yaml
|
|
16
|
+
- id: end-of-file-fixer
|
|
17
|
+
- id: trailing-whitespace
|
|
18
|
+
- id: check-added-large-files
|
|
19
|
+
- id: check-toml
|
|
20
|
+
- id: check-merge-conflict
|
|
21
|
+
- id: debug-statements
|
|
22
|
+
|
|
23
|
+
# Replace commitsar with conventional commit checker
|
|
24
|
+
- repo: https://github.com/compilerla/conventional-pre-commit
|
|
25
|
+
rev: v2.1.1
|
|
26
|
+
hooks:
|
|
27
|
+
- id: conventional-pre-commit
|
|
28
|
+
stages: [commit-msg]
|
|
29
|
+
args: [] # default: [feat, fix, ci, chore, docs, style, refactor, perf, test, build, revert]
|
|
@@ -0,0 +1,15 @@
|
|
|
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.13"
|
|
12
|
+
|
|
13
|
+
# Build documentation in the "docs/" directory with Sphinx
|
|
14
|
+
sphinx:
|
|
15
|
+
configuration: docs/conf.py
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Contributing to SO Campaign Manager
|
|
2
|
+
|
|
3
|
+
Thank you for your interest in contributing to SO Campaign Manager! This document provides guidelines for contributing to the project.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
For detailed contributing guidelines, please see our **[Developer Guide](docs/developer_guide.rst)**.
|
|
8
|
+
|
|
9
|
+
## Development Setup
|
|
10
|
+
|
|
11
|
+
1. **Fork and clone** the repository
|
|
12
|
+
2. **Set up development environment**:
|
|
13
|
+
```bash
|
|
14
|
+
python -m venv env
|
|
15
|
+
source env/bin/activate # On Windows: env\Scripts\activate
|
|
16
|
+
pip install -e ".[dev]"
|
|
17
|
+
```
|
|
18
|
+
3. **Install pre-commit hooks** (optional but recommended):
|
|
19
|
+
```bash
|
|
20
|
+
pip install pre-commit
|
|
21
|
+
pre-commit install
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Code Standards
|
|
25
|
+
|
|
26
|
+
- **PEP8 compliance is mandatory** - use `flake8` to check
|
|
27
|
+
- **Optional formatting** with `darker` for progressive formatting
|
|
28
|
+
- **Write tests** for new functionality
|
|
29
|
+
- **Document your code** with Google-style docstrings
|
|
30
|
+
|
|
31
|
+
## Pull Request Process
|
|
32
|
+
|
|
33
|
+
1. Create a feature branch from `main`
|
|
34
|
+
2. Make your changes with appropriate tests
|
|
35
|
+
3. Ensure tests pass and code style is correct
|
|
36
|
+
4. Submit a pull request with a clear description
|
|
37
|
+
|
|
38
|
+
## Documentation
|
|
39
|
+
|
|
40
|
+
- All public APIs should be documented
|
|
41
|
+
- Update relevant documentation for changes
|
|
42
|
+
- Build docs locally: `cd docs && make html`
|
|
43
|
+
|
|
44
|
+
## Getting Help
|
|
45
|
+
|
|
46
|
+
- 📚 **[Full Documentation](docs/index.rst)** - Complete guides and API reference
|
|
47
|
+
- 🐛 **[GitHub Issues](https://github.com/simonsobs/so_campaign_manager/issues)** - Bug reports and feature requests
|
|
48
|
+
- 💬 **[GitHub Discussions](https://github.com/simonsobs/so_campaign_manager/discussions)** - Questions and general discussion
|
|
49
|
+
|
|
50
|
+
## Types of Contributions
|
|
51
|
+
|
|
52
|
+
We welcome:
|
|
53
|
+
- 🐛 Bug fixes
|
|
54
|
+
- ✨ New features
|
|
55
|
+
- 📝 Documentation improvements
|
|
56
|
+
- 🧪 Test improvements
|
|
57
|
+
- 🔧 Performance optimizations
|
|
58
|
+
|
|
59
|
+
For detailed information about development workflow, code style, testing, and more, please refer to our **[Developer Guide](docs/developer_guide.rst)**.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
BSD 2-Clause License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025, Simons Observatory
|
|
4
|
+
|
|
5
|
+
Redistribution and use in source and binary forms, with or without
|
|
6
|
+
modification, are permitted provided that the following conditions are met:
|
|
7
|
+
|
|
8
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
9
|
+
list of conditions and the following disclaimer.
|
|
10
|
+
|
|
11
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
+
this list of conditions and the following disclaimer in the documentation
|
|
13
|
+
and/or other materials provided with the distribution.
|
|
14
|
+
|
|
15
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
16
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
17
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
18
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
19
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
20
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
21
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
22
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
23
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
24
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: so_campaign_manager
|
|
3
|
+
Version: 0.0.4
|
|
4
|
+
Summary: A campaign manager to execute SO mapmaking campaign
|
|
5
|
+
Author-email: Giannis Paraskevakos <iparask@princeton.edu>
|
|
6
|
+
Requires-Python: <3.13,>=3.11
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
Requires-Dist: numpy
|
|
10
|
+
Requires-Dist: pydantic>=2.0
|
|
11
|
+
Requires-Dist: radical.pilot; sys_platform != "darwin"
|
|
12
|
+
Requires-Dist: networkx
|
|
13
|
+
Requires-Dist: toml
|
|
14
|
+
Requires-Dist: click
|
|
15
|
+
Requires-Dist: sotodlib
|
|
16
|
+
Requires-Dist: astral
|
|
17
|
+
Requires-Dist: slurmise; sys_platform != "darwin"
|
|
18
|
+
Requires-Dist: humanfriendly
|
|
19
|
+
Provides-Extra: dev
|
|
20
|
+
Requires-Dist: ruff; extra == "dev"
|
|
21
|
+
Requires-Dist: darker; extra == "dev"
|
|
22
|
+
Requires-Dist: flake8; extra == "dev"
|
|
23
|
+
Requires-Dist: isort; extra == "dev"
|
|
24
|
+
Requires-Dist: pytest-cov>=2.6; extra == "dev"
|
|
25
|
+
Requires-Dist: coveralls>=1.5; extra == "dev"
|
|
26
|
+
Requires-Dist: pytest>=4.6; extra == "dev"
|
|
27
|
+
Requires-Dist: hypothesis; extra == "dev"
|
|
28
|
+
Requires-Dist: pre-commit; extra == "dev"
|
|
29
|
+
Requires-Dist: mypy>=1.0.0; extra == "dev"
|
|
30
|
+
Requires-Dist: taskipy; extra == "dev"
|
|
31
|
+
Requires-Dist: types-networkx; extra == "dev"
|
|
32
|
+
Requires-Dist: types-pytz; extra == "dev"
|
|
33
|
+
Requires-Dist: types-toml; extra == "dev"
|
|
34
|
+
Requires-Dist: types-mock; extra == "dev"
|
|
35
|
+
Provides-Extra: docs
|
|
36
|
+
Requires-Dist: sphinx; extra == "docs"
|
|
37
|
+
Requires-Dist: sphinx_rtd_theme; extra == "docs"
|
|
38
|
+
Requires-Dist: sphinxcontrib-napoleon; extra == "docs"
|
|
39
|
+
Requires-Dist: sphinx-autodoc-typehints; extra == "docs"
|
|
40
|
+
Requires-Dist: myst-parser; extra == "docs"
|
|
41
|
+
Dynamic: license-file
|
|
42
|
+
|
|
43
|
+
[](https://pypi.org/project/so_campaign_manager)
|
|
44
|
+
[](https://pypi.org/project/so_campaign_manager)
|
|
45
|
+

|
|
46
|
+
[](https://coveralls.io/github/simonsobs/so_campaign_manager?branch=main)
|
|
47
|
+
[](https://doi.org/10.5281/zenodo.15784156)
|
|
48
|
+
[](https://so-campaign-manager.readthedocs.io)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
## SO Campaign Manager
|
|
52
|
+
|
|
53
|
+
This repository holds the code of the software tools that will run the mapmaking campaign on Tiger 3.
|
|
54
|
+
|
|
55
|
+
The project has three big aspects:
|
|
56
|
+
1. Providing a method to submit new workflows, update existing ones and delete via configuration or a series of commands
|
|
57
|
+
2. Based on the workflow configuration set the resource requirement accordingly and submit it to SLURM. Resource configuration can be based on:
|
|
58
|
+
1. Total size of observations and their file distribution
|
|
59
|
+
2. A specific observation mapping between processes and files
|
|
60
|
+
3. Node memory and node processor performance.
|
|
61
|
+
3. Use a workflow management tool to execute all workflows in the minimum amount of time.
|
|
62
|
+
|
|
63
|
+
## Documentation
|
|
64
|
+
|
|
65
|
+
📚 **[Full Documentation](docs/index.rst)** - Complete documentation including:
|
|
66
|
+
|
|
67
|
+
- [Installation Guide](docs/installation.rst) - Setup and installation instructions
|
|
68
|
+
- [Quick Start](docs/quickstart.rst) - Get started quickly with examples
|
|
69
|
+
- [User Guide](docs/user_guide.rst) - Comprehensive usage guide
|
|
70
|
+
- [API Reference](docs/api.rst) - Complete API documentation
|
|
71
|
+
- [Workflow Guide](docs/workflows.rst) - Available workflows and how to use them
|
|
72
|
+
- [Developer Guide](docs/developer_guide.rst) - Contributing and development setup
|
|
73
|
+
|
|
74
|
+
### Building Documentation
|
|
75
|
+
|
|
76
|
+
To build the HTML documentation locally:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
cd docs
|
|
80
|
+
pip install sphinx sphinx-rtd-theme
|
|
81
|
+
make html
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
The documentation will be available in `docs/_build/html/index.html`.
|
|
85
|
+
|
|
86
|
+
## Quick Start
|
|
87
|
+
|
|
88
|
+
Install the package:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
pip install so_campaign_manager
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Create a configuration file (`campaign.toml`):
|
|
95
|
+
|
|
96
|
+
```toml
|
|
97
|
+
[campaign]
|
|
98
|
+
deadline = "2d"
|
|
99
|
+
|
|
100
|
+
[campaign.resources]
|
|
101
|
+
nodes = 4
|
|
102
|
+
cores-per-node = 112
|
|
103
|
+
|
|
104
|
+
[campaign.ml-mapmaking]
|
|
105
|
+
context = "file:///path/to/context.yaml"
|
|
106
|
+
output_dir = "/path/to/output"
|
|
107
|
+
bands = "f090"
|
|
108
|
+
# ... other parameters
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Run your campaign:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
socm -t campaign.toml
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
For detailed examples and configuration options, see the [documentation](docs/).
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Development guide
|
|
122
|
+
|
|
123
|
+
### Branching model
|
|
124
|
+
|
|
125
|
+
* the latest development is in the `main` branch.
|
|
126
|
+
* bug fixes:
|
|
127
|
+
* branch of `main`, naming convention: `fix/issue_1234` (reference github issue). `hotfix/issue_1234` if it is a major issue that needs resolution as soon as possible.
|
|
128
|
+
* fix in that branch, and test
|
|
129
|
+
* create pull request toward `main`
|
|
130
|
+
* code review, then merge
|
|
131
|
+
* major development activities go into feature branches
|
|
132
|
+
* branch `main` into `feature/feature_name`
|
|
133
|
+
* work on that feature branch
|
|
134
|
+
* on completion, merge `main` into the feature branch.
|
|
135
|
+
* test the feature branch
|
|
136
|
+
* create a pull request for merging the feature branch into `main` (that should be a fast-forward now)
|
|
137
|
+
* merging of feature branches into `main` should be only after code review
|
|
138
|
+
* documentation changes are handled like fix or feature branches, depending on size and impact, similar to code changes
|
|
139
|
+
|
|
140
|
+
#### Branch Naming
|
|
141
|
+
|
|
142
|
+
* `main`: *never* commit directly
|
|
143
|
+
* `feature/abc`: development of new features
|
|
144
|
+
* `fix/abc_123`: referring to ticket 123
|
|
145
|
+
* `hotfix/abc_123`: referring to ticket 123, to be released right after merge to master
|
|
146
|
+
* `tmp/abc`: temporary branch, will be deleted soon
|
|
147
|
+
* `test/abc`: test some integration, like a merge of two feature branches
|
|
148
|
+
|
|
149
|
+
For the latter: assume you want to test how `feature/a` works in combination with `feature/b`, then:
|
|
150
|
+
* `git checkout feature/a`
|
|
151
|
+
* `git checkout -b test/a_b`
|
|
152
|
+
* `git merge feature/b`
|
|
153
|
+
* do tests
|
|
154
|
+
|
|
155
|
+
#### Branching Policies
|
|
156
|
+
|
|
157
|
+
All branches are short living. To support this, only a limited number of branches should be open at any point in time. Only `N` branches for fixes and `M << N` branches for features should be open for each developer - other features / issues have to wait.
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
### Ensure PEP8 compliance (mandatory) and format your code with Darker (optional)
|
|
161
|
+
|
|
162
|
+
`darker` is a *partial formatting* tool that helps to reformat new or modified code lines so the codebase progressively adapts a code style instead of doing a full reformat, which would be a big commitment. It was designed with the ``black`` formatter in mind, hence the name.
|
|
163
|
+
|
|
164
|
+
In this repo **we only require PEP8 compliance**, so if you want to make sure that your PR passes the darker bot, you'll need both darker and `flake8`:
|
|
165
|
+
|
|
166
|
+
pip install darker flake8
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
You'll also need the original codebase so darker can first get a diff between the current ``develop`` branch and your code.
|
|
170
|
+
After making your changes to your local branch, check your modifications on the package:
|
|
171
|
+
|
|
172
|
+
darker --diff -r origin/develop package/src -L flake8
|
|
173
|
+
|
|
174
|
+
Darker will first suggest changes so that the new code lines comply with ``black``'s rules, and then show flake8 errors and warnings.
|
|
175
|
+
|
|
176
|
+
You are free to skip the diffs and then manually fix the PEP8 faults.
|
|
177
|
+
Or if you're ok with the suggested formatting changes, just apply the suggested fixes: ::
|
|
178
|
+
|
|
179
|
+
darker -r origin/develop package/scr -L flake8
|