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.
Files changed (104) hide show
  1. so_campaign_manager-0.0.4/.flake8 +3 -0
  2. so_campaign_manager-0.0.4/.gitattributes +1 -0
  3. so_campaign_manager-0.0.4/.github/dependabot.yml +11 -0
  4. so_campaign_manager-0.0.4/.github/workflows/lint.yaml +17 -0
  5. so_campaign_manager-0.0.4/.github/workflows/release.yaml +31 -0
  6. so_campaign_manager-0.0.4/.github/workflows/test.yaml +23 -0
  7. so_campaign_manager-0.0.4/.gitignore +169 -0
  8. so_campaign_manager-0.0.4/.pre-commit-config.yaml +29 -0
  9. so_campaign_manager-0.0.4/.readthedocs.yaml +15 -0
  10. so_campaign_manager-0.0.4/CONTRIBUTING.md +59 -0
  11. so_campaign_manager-0.0.4/LICENSE +24 -0
  12. so_campaign_manager-0.0.4/MANIFEST.in +3 -0
  13. so_campaign_manager-0.0.4/PKG-INFO +179 -0
  14. so_campaign_manager-0.0.4/README.md +137 -0
  15. so_campaign_manager-0.0.4/docs/Makefile +20 -0
  16. so_campaign_manager-0.0.4/docs/README.md +173 -0
  17. so_campaign_manager-0.0.4/docs/_static/custom.css +74 -0
  18. so_campaign_manager-0.0.4/docs/advanced_topics.rst +933 -0
  19. so_campaign_manager-0.0.4/docs/api.rst +131 -0
  20. so_campaign_manager-0.0.4/docs/api_complete.rst +152 -0
  21. so_campaign_manager-0.0.4/docs/architecture.rst +671 -0
  22. so_campaign_manager-0.0.4/docs/conf.py +165 -0
  23. so_campaign_manager-0.0.4/docs/developer_guide.rst +406 -0
  24. so_campaign_manager-0.0.4/docs/direction_null_test_workflow.md +159 -0
  25. so_campaign_manager-0.0.4/docs/faq.rst +782 -0
  26. so_campaign_manager-0.0.4/docs/index.rst +102 -0
  27. so_campaign_manager-0.0.4/docs/installation.rst +70 -0
  28. so_campaign_manager-0.0.4/docs/quickstart.rst +127 -0
  29. so_campaign_manager-0.0.4/docs/tutorial.rst +830 -0
  30. so_campaign_manager-0.0.4/docs/user_guide.rst +242 -0
  31. so_campaign_manager-0.0.4/docs/workflows.rst +231 -0
  32. so_campaign_manager-0.0.4/examples/campaign.toml +63 -0
  33. so_campaign_manager-0.0.4/pyproject.toml +108 -0
  34. so_campaign_manager-0.0.4/setup.cfg +4 -0
  35. so_campaign_manager-0.0.4/src/so_campaign_manager.egg-info/PKG-INFO +179 -0
  36. so_campaign_manager-0.0.4/src/so_campaign_manager.egg-info/SOURCES.txt +102 -0
  37. so_campaign_manager-0.0.4/src/so_campaign_manager.egg-info/dependency_links.txt +1 -0
  38. so_campaign_manager-0.0.4/src/so_campaign_manager.egg-info/entry_points.txt +2 -0
  39. so_campaign_manager-0.0.4/src/so_campaign_manager.egg-info/requires.txt +36 -0
  40. so_campaign_manager-0.0.4/src/so_campaign_manager.egg-info/top_level.txt +1 -0
  41. so_campaign_manager-0.0.4/src/socm/__about__.py +34 -0
  42. so_campaign_manager-0.0.4/src/socm/__init__.py +0 -0
  43. so_campaign_manager-0.0.4/src/socm/__main__.py +35 -0
  44. so_campaign_manager-0.0.4/src/socm/bookkeeper/__init__.py +1 -0
  45. so_campaign_manager-0.0.4/src/socm/bookkeeper/bookkeeper.py +488 -0
  46. so_campaign_manager-0.0.4/src/socm/configs/slurmise.toml +2 -0
  47. so_campaign_manager-0.0.4/src/socm/core/__init__.py +1 -0
  48. so_campaign_manager-0.0.4/src/socm/core/models.py +235 -0
  49. so_campaign_manager-0.0.4/src/socm/enactor/__init__.py +3 -0
  50. so_campaign_manager-0.0.4/src/socm/enactor/base.py +123 -0
  51. so_campaign_manager-0.0.4/src/socm/enactor/dryrun_enactor.py +216 -0
  52. so_campaign_manager-0.0.4/src/socm/enactor/rp_enactor.py +273 -0
  53. so_campaign_manager-0.0.4/src/socm/execs/__init__.py +3 -0
  54. so_campaign_manager-0.0.4/src/socm/execs/mapmaking.py +73 -0
  55. so_campaign_manager-0.0.4/src/socm/planner/__init__.py +2 -0
  56. so_campaign_manager-0.0.4/src/socm/planner/base.py +87 -0
  57. so_campaign_manager-0.0.4/src/socm/planner/heft_planner.py +442 -0
  58. so_campaign_manager-0.0.4/src/socm/resources/__init__.py +5 -0
  59. so_campaign_manager-0.0.4/src/socm/resources/perlmutter.py +22 -0
  60. so_campaign_manager-0.0.4/src/socm/resources/tiger.py +24 -0
  61. so_campaign_manager-0.0.4/src/socm/resources/universe.py +18 -0
  62. so_campaign_manager-0.0.4/src/socm/utils/__init__.py +0 -0
  63. so_campaign_manager-0.0.4/src/socm/utils/misc.py +90 -0
  64. so_campaign_manager-0.0.4/src/socm/utils/states.py +17 -0
  65. so_campaign_manager-0.0.4/src/socm/workflows/__init__.py +41 -0
  66. so_campaign_manager-0.0.4/src/socm/workflows/ml_mapmaking.py +111 -0
  67. so_campaign_manager-0.0.4/src/socm/workflows/ml_null_tests/__init__.py +10 -0
  68. so_campaign_manager-0.0.4/src/socm/workflows/ml_null_tests/base.py +117 -0
  69. so_campaign_manager-0.0.4/src/socm/workflows/ml_null_tests/day_night_null_test.py +132 -0
  70. so_campaign_manager-0.0.4/src/socm/workflows/ml_null_tests/direction_null_test.py +133 -0
  71. so_campaign_manager-0.0.4/src/socm/workflows/ml_null_tests/elevation_null_test.py +118 -0
  72. so_campaign_manager-0.0.4/src/socm/workflows/ml_null_tests/moon_close_null_test.py +165 -0
  73. so_campaign_manager-0.0.4/src/socm/workflows/ml_null_tests/moonrise_set_null_test.py +151 -0
  74. so_campaign_manager-0.0.4/src/socm/workflows/ml_null_tests/pwv_null_test.py +118 -0
  75. so_campaign_manager-0.0.4/src/socm/workflows/ml_null_tests/sun_close_null_test.py +173 -0
  76. so_campaign_manager-0.0.4/src/socm/workflows/ml_null_tests/time_null_test.py +76 -0
  77. so_campaign_manager-0.0.4/src/socm/workflows/ml_null_tests/wafer_null_test.py +175 -0
  78. so_campaign_manager-0.0.4/src/socm/workflows/sat_simulation.py +76 -0
  79. so_campaign_manager-0.0.4/tests/__init__.py +0 -0
  80. so_campaign_manager-0.0.4/tests/conftest.py +296 -0
  81. so_campaign_manager-0.0.4/tests/test_bookkeeper.py +106 -0
  82. so_campaign_manager-0.0.4/tests/test_cli.py +81 -0
  83. so_campaign_manager-0.0.4/tests/test_core_models.py +235 -0
  84. so_campaign_manager-0.0.4/tests/test_core_models_mocked.py +571 -0
  85. so_campaign_manager-0.0.4/tests/test_dryrun_enactor.py +609 -0
  86. so_campaign_manager-0.0.4/tests/test_perlmutter_resource.py +221 -0
  87. so_campaign_manager-0.0.4/tests/test_planner.py +280 -0
  88. so_campaign_manager-0.0.4/tests/test_planner_base.py +206 -0
  89. so_campaign_manager-0.0.4/tests/test_tiger_resource.py +225 -0
  90. so_campaign_manager-0.0.4/tests/test_universe_resource.py +188 -0
  91. so_campaign_manager-0.0.4/tests/test_utils.py +393 -0
  92. so_campaign_manager-0.0.4/tests/test_utils_misc.py +253 -0
  93. so_campaign_manager-0.0.4/tests/workflows/conftest.py +88 -0
  94. so_campaign_manager-0.0.4/tests/workflows/test_direction_null_tests.py +71 -0
  95. so_campaign_manager-0.0.4/tests/workflows/test_dn_null_tests.py +71 -0
  96. so_campaign_manager-0.0.4/tests/workflows/test_elevation_null_tests.py +68 -0
  97. so_campaign_manager-0.0.4/tests/workflows/test_mlworkflows.py +106 -0
  98. so_campaign_manager-0.0.4/tests/workflows/test_moon_dist_null_tests.py +66 -0
  99. so_campaign_manager-0.0.4/tests/workflows/test_moonrise_null_test.py +74 -0
  100. so_campaign_manager-0.0.4/tests/workflows/test_null_test_base.py +138 -0
  101. so_campaign_manager-0.0.4/tests/workflows/test_pwv_null_tests.py +92 -0
  102. so_campaign_manager-0.0.4/tests/workflows/test_sun_dist_null_tests.py +66 -0
  103. so_campaign_manager-0.0.4/tests/workflows/test_time_null_tests.py +66 -0
  104. so_campaign_manager-0.0.4/tests/workflows/test_wafer_null_tests.py +67 -0
@@ -0,0 +1,3 @@
1
+ [flake8]
2
+ max-line-length = 90
3
+ extend-ignore = E203
@@ -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,3 @@
1
+ include MANIFEST.in README.md
2
+
3
+ recursive-include src *.toml
@@ -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
+ [![PyPI - Version](https://img.shields.io/pypi/v/so_campaign_manager.svg)](https://pypi.org/project/so_campaign_manager)
44
+ [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/so_campaign_manager.svg)](https://pypi.org/project/so_campaign_manager)
45
+ ![CI workflow](https://github.com/simonsobs/so_campaign_manager/actions/workflows/test.yaml/badge.svg)
46
+ [![Coverage Status](https://coveralls.io/repos/github/simonsobs/so_campaign_manager/badge.svg?branch=main)](https://coveralls.io/github/simonsobs/so_campaign_manager?branch=main)
47
+ [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.15784156.svg)](https://doi.org/10.5281/zenodo.15784156)
48
+ [![Docs Status](https://readthedocs.org/projects/so-campaign-manager/badge/?version=latest&style=flat)](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