microlens-submit 0.16.2__tar.gz → 0.16.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.
- microlens_submit-0.16.4/CHANGELOG.md +282 -0
- microlens_submit-0.16.4/CITATION.cff +9 -0
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/MANIFEST.in +4 -0
- {microlens_submit-0.16.2/microlens_submit.egg-info → microlens_submit-0.16.4}/PKG-INFO +15 -10
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/README.md +13 -9
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/__init__.py +1 -1
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/cli/commands/export.py +49 -8
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/cli/commands/init.py +16 -12
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/cli/commands/solutions.py +87 -34
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/cli/main.py +2 -1
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/error_messages.py +2 -1
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/models/solution.py +6 -0
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/models/submission.py +33 -2
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/text_symbols.py +22 -1
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/tier_validation.py +41 -35
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/utils.py +8 -1
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/validate_parameters.py +46 -0
- {microlens_submit-0.16.2 → microlens_submit-0.16.4/microlens_submit.egg-info}/PKG-INFO +15 -10
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit.egg-info/SOURCES.txt +2 -0
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit.egg-info/requires.txt +1 -0
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/pyproject.toml +2 -1
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/setup.py +1 -1
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/tests/test_cli.py +7 -7
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/tests/test_dossier_generation.py +1 -1
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/tests/test_dossier_pages.py +1 -1
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/tests/test_tier_validation.py +57 -56
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/LICENSE +0 -0
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/assets/github-desktop_logo.png +0 -0
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/assets/rges-pit_logo.png +0 -0
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/cli/__init__.py +0 -0
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/cli/__main__.py +0 -0
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/cli/commands/__init__.py +0 -0
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/cli/commands/dossier.py +0 -0
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/cli/commands/validation.py +0 -0
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/dossier/__init__.py +0 -0
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/dossier/dashboard.py +0 -0
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/dossier/event_page.py +0 -0
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/dossier/full_report.py +0 -0
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/dossier/solution_page.py +0 -0
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/dossier/utils.py +0 -0
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/models/__init__.py +0 -0
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit/models/event.py +0 -0
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit.egg-info/dependency_links.txt +0 -0
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit.egg-info/entry_points.txt +0 -0
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/microlens_submit.egg-info/top_level.txt +0 -0
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/setup.cfg +0 -0
- {microlens_submit-0.16.2 → microlens_submit-0.16.4}/tests/test_api.py +0 -0
|
@@ -0,0 +1,282 @@
|
|
|
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.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [0.16.4] - 2026-01-14
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- Added `remove-event`/`remove-solution` CLI commands and `remove_event`/`remove_solution` API helpers with a `--force` guard for hard deletes.
|
|
12
|
+
- Added `git_dir` metadata plus `set-git-dir` to capture Git info when the repo lives outside the submission directory.
|
|
13
|
+
- Added optional GPU fields in `hardware_info` (`gpu.model`, `gpu.count`, `gpu.memory_gb`) alongside platform/OS capture.
|
|
14
|
+
- Added non-Nexus hardware auto-fill using `psutil` for CPU and memory details.
|
|
15
|
+
- Added conda-forge recipe (`conda/recipe/meta.yaml`) to the version bump script (`scripts/bump_version`).
|
|
16
|
+
- Added sha256 update in `conda/recipe/meta.yaml` to the release workflow.
|
|
17
|
+
- Added a workflow release job to copy the local updated version on the conda-forge recipe to the feedstock fork (`AmberLee2427/microlens-submit-feedstock`) and send a PR, after PyPI release.
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
- Updated tiers to `beginner`/`experienced`; event ID validation now uses inclusive ranges and 3-digit IDs for `2018-test`.
|
|
22
|
+
- CLI numeric parsing now accepts leading decimals like `.001`.
|
|
23
|
+
- Clarified quickstart/tutorial guidance around working directories and hardware info requirements.
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
### Fixed
|
|
27
|
+
- CSV import now skips blank rows to avoid NoneType parsing errors.
|
|
28
|
+
- Validation messaging now highlights missing bands when flux parameters are provided.
|
|
29
|
+
- Improved Windows notes editor fallback for better default editor selection.
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
## [0.16.3] - 2025-10-28
|
|
33
|
+
|
|
34
|
+
### Added
|
|
35
|
+
- Publish to `conda-forge`.
|
|
36
|
+
|
|
37
|
+
### Fixed
|
|
38
|
+
- Include `pyproject.toml` and other metadata in the sdist so `pip install .` works (fixes conda builds).
|
|
39
|
+
|
|
40
|
+
## [0.16.2] - 2025-10-28
|
|
41
|
+
|
|
42
|
+
### Added
|
|
43
|
+
- conda build to release action
|
|
44
|
+
- local `.env` support
|
|
45
|
+
- Zenodo doi automation
|
|
46
|
+
- build wheel and conda build install smoke tests on Mac, Linux, and Windows, python 3.8 and 3.11
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
## [0.16.1] - 2025-10-27
|
|
50
|
+
|
|
51
|
+
### Added
|
|
52
|
+
- Release automation
|
|
53
|
+
- CI now installs from the wheel across 3.8/3.12 to mirror beta testers’ reports
|
|
54
|
+
|
|
55
|
+
### Changed
|
|
56
|
+
- `README.md` to clarify Quickstart
|
|
57
|
+
|
|
58
|
+
### Fixed
|
|
59
|
+
- `importlib_resources` version bug
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
## [0.16.0] - 2024-12-19
|
|
63
|
+
|
|
64
|
+
### Added
|
|
65
|
+
- **Tier Validation System**: Comprehensive tier-based validation for challenge submissions
|
|
66
|
+
- New `tier_validation.py` module with support for "standard", "advanced", "test", "2018-test", and "None" tiers
|
|
67
|
+
- Event ID validation against tier-specific event lists
|
|
68
|
+
- CLI tier validation with fallback to "None" for invalid tiers
|
|
69
|
+
- Comprehensive tier validation tests in `tests/test_tier_validation.py`
|
|
70
|
+
- **Enhanced Validation Logic**: Improved parameter validation and solution completeness checking
|
|
71
|
+
- Enhanced `validate_parameters.py` with better error messages and validation rules
|
|
72
|
+
- Improved validation for higher-order effects and parameter consistency
|
|
73
|
+
- Better handling of parameter uncertainties and type validation
|
|
74
|
+
- Enhanced solution completeness checking with more detailed feedback
|
|
75
|
+
- **Dossier Generation Enhancements**: Improved HTML dossier generation and browser integration
|
|
76
|
+
- Added model_type display at the top of each solution section in full dossier reports
|
|
77
|
+
- Added `--open` flag to `microlens-submit generate-dossier` CLI command for automatic browser opening
|
|
78
|
+
- Added `open: bool = False` parameter to `generate_dashboard_html()` API function
|
|
79
|
+
- Enhanced dossier navigation and metadata display
|
|
80
|
+
- **Submission Manual Integration**: Converted SUBMISSION_MANUAL.md to reStructuredText format and integrated into Sphinx documentation
|
|
81
|
+
- Moved submission manual to `docs/submission_manual.rst` for better documentation integration
|
|
82
|
+
- Updated all internal links and references to point to the new documentation location
|
|
83
|
+
- Added GitHub link to validate_submission.py script in the submission manual
|
|
84
|
+
- Removed old markdown file and logo references for cleaner documentation structure
|
|
85
|
+
|
|
86
|
+
### Changed
|
|
87
|
+
- **Validation System Architecture**: Improved validation workflow and error handling
|
|
88
|
+
- Enhanced CLI validation commands with better error reporting
|
|
89
|
+
- Improved validation integration across all CLI commands
|
|
90
|
+
- Better handling of validation warnings vs errors
|
|
91
|
+
- Enhanced parameter validation with more detailed feedback
|
|
92
|
+
- **Code Quality & Pre-commit Integration**: Comprehensive code cleanup and formatting improvements
|
|
93
|
+
- Fixed all pre-commit hook violations including line length, unused imports, and style issues
|
|
94
|
+
- Resolved f-string formatting issues in CLI commands
|
|
95
|
+
- Fixed line length violations in dossier generation code
|
|
96
|
+
- Removed unused imports across the codebase
|
|
97
|
+
- Ensured all tests pass in both Python 3.8 and 3.11 environments
|
|
98
|
+
- **Documentation Structure**: Improved documentation organization and accessibility
|
|
99
|
+
- Integrated submission manual into main documentation site
|
|
100
|
+
- Updated internal documentation links and references
|
|
101
|
+
- Enhanced documentation consistency and maintainability
|
|
102
|
+
- Updated API documentation and tutorial examples
|
|
103
|
+
|
|
104
|
+
### Fixed
|
|
105
|
+
- **Code Quality**: Resolved all pre-commit hook violations
|
|
106
|
+
- Fixed f-string formatting issues in CLI commands
|
|
107
|
+
- Resolved line length violations in dossier generation code
|
|
108
|
+
- Removed unused imports across the codebase
|
|
109
|
+
- Improved code consistency and maintainability
|
|
110
|
+
- **Validation Logic**: Enhanced parameter validation and error handling
|
|
111
|
+
- Improved validation for higher-order effects
|
|
112
|
+
- Better handling of parameter uncertainties
|
|
113
|
+
- Enhanced solution completeness checking
|
|
114
|
+
- More detailed validation feedback and error messages
|
|
115
|
+
|
|
116
|
+
## [0.15.0] - 2024-12-19
|
|
117
|
+
|
|
118
|
+
### Added
|
|
119
|
+
- New tier validation system with support for "standard", "advanced", "test", "2018-test", and "None" tiers
|
|
120
|
+
- Event ID validation against tier-specific event lists
|
|
121
|
+
- CLI tier validation with fallback to "None" for invalid tiers
|
|
122
|
+
- Comprehensive tier validation tests
|
|
123
|
+
|
|
124
|
+
### Changed
|
|
125
|
+
- Renamed "basic" tier to "standard" for better naming
|
|
126
|
+
- Updated tier hierarchy: standard < advanced (removed "expert" tier)
|
|
127
|
+
- Simplified to two challenge tiers: "standard" and "advanced"
|
|
128
|
+
|
|
129
|
+
## [0.14.0] - 2024-12-19
|
|
130
|
+
|
|
131
|
+
### Added
|
|
132
|
+
- **Modular Architecture**: Complete refactoring of the codebase for improved maintainability
|
|
133
|
+
- Split monolithic `dossier.py` into modular `dossier/` package with specialized modules
|
|
134
|
+
- Refactored CLI into `cli/` package with commands organized into separate modules
|
|
135
|
+
- Created `dossier/generator.py` for HTML generation logic
|
|
136
|
+
- Created `dossier/templates.py` for template management
|
|
137
|
+
- Created `dossier/utils.py` for dossier-specific utilities
|
|
138
|
+
- Created `cli/commands/` directory with specialized command modules
|
|
139
|
+
- Created `cli/utils.py` for CLI-specific utilities
|
|
140
|
+
- **Enhanced Error Messaging**: Comprehensive error handling improvements
|
|
141
|
+
- Added actionable suggestions for common typos and parameter errors
|
|
142
|
+
- Integrated validation warnings with helpful guidance
|
|
143
|
+
- Enhanced CLI error messages with specific recommendations
|
|
144
|
+
- Added parameter validation with user-friendly error descriptions
|
|
145
|
+
- **Improved CLI Help**: Enhanced command-line interface usability
|
|
146
|
+
- Added [BASIC] and [ADVANCED] tags to help users understand option complexity
|
|
147
|
+
- Improved option descriptions with practical usage examples
|
|
148
|
+
- Enhanced help text for complex parameters like `--limb-darkening-model`
|
|
149
|
+
- Added usage examples in command docstrings for better user guidance
|
|
150
|
+
|
|
151
|
+
### Changed
|
|
152
|
+
- **Code Organization**: Improved project structure and maintainability
|
|
153
|
+
- Separated concerns between dossier generation, CLI commands, and utilities
|
|
154
|
+
- Enhanced code readability and debugging capabilities
|
|
155
|
+
- Maintained backward compatibility with existing API and CLI interfaces
|
|
156
|
+
- Preserved all existing functionality while improving internal organization
|
|
157
|
+
- **Documentation**: Updated internal documentation to reflect new modular structure
|
|
158
|
+
- Enhanced docstrings with usage examples and parameter descriptions
|
|
159
|
+
- Improved code comments for better developer experience
|
|
160
|
+
- Maintained user-facing documentation consistency
|
|
161
|
+
|
|
162
|
+
### Fixed
|
|
163
|
+
- **Maintainability**: Resolved technical debt through modularization
|
|
164
|
+
- Eliminated monolithic files that were difficult to maintain
|
|
165
|
+
- Improved test organization and coverage
|
|
166
|
+
- Enhanced code reusability and separation of concerns
|
|
167
|
+
- **User Experience**: Better error handling and guidance
|
|
168
|
+
- More helpful error messages with actionable suggestions
|
|
169
|
+
- Clearer CLI help text with practical examples
|
|
170
|
+
- Improved parameter validation with user-friendly feedback
|
|
171
|
+
|
|
172
|
+
## [0.13.0] - 2024-12-19
|
|
173
|
+
|
|
174
|
+
### Added
|
|
175
|
+
- **Bulk CSV Import**: New CLI command `import-solutions` and API function `import_solutions_from_csv()` for importing multiple solutions from a CSV file in one step
|
|
176
|
+
- Supports column mapping via YAML parameter map files
|
|
177
|
+
- Handles solution aliases with uniqueness validation within events
|
|
178
|
+
- Supports duplicate handling (error/override/ignore), notes, dry-run, and validation options
|
|
179
|
+
- Properly converts literal `\n` characters to actual newlines in notes from CSV files
|
|
180
|
+
- See the tutorial and README for usage examples
|
|
181
|
+
- **Solution Aliases**: Human-readable identifiers for solutions with automatic uniqueness validation
|
|
182
|
+
- Aliases are displayed prominently in dossier generation and CLI output
|
|
183
|
+
- Integrated into all CLI commands that reference solutions
|
|
184
|
+
- Supports alias-based solution identification and management
|
|
185
|
+
- **Enhanced Notes Handling**: Improved handling of notes with literal escape sequences
|
|
186
|
+
- CSV import automatically converts literal `\n` and `\r` to actual newlines
|
|
187
|
+
- Added `convert_escapes` parameter to `set_notes()` method for controlled conversion
|
|
188
|
+
- Maintains backward compatibility with existing notes functionality
|
|
189
|
+
- **Test Data**: Added `tests/data/test_import.csv` as a comprehensive test file for CSV import functionality
|
|
190
|
+
- Used in both CLI and API tests as a real-world example and template for users
|
|
191
|
+
- Includes various parameter types, aliases, notes, and edge cases for testing
|
|
192
|
+
|
|
193
|
+
### Changed
|
|
194
|
+
- **Code Quality**: Improved formatting and readability throughout the codebase
|
|
195
|
+
- Added proper spacing and logical grouping in dense functions
|
|
196
|
+
- Enhanced code maintainability and debugging capabilities
|
|
197
|
+
- **Documentation**: Updated tutorial, README, and API documentation to cover CSV import and alias features
|
|
198
|
+
- **CLI Enhancements**: Added alias support to all solution-related CLI commands
|
|
199
|
+
|
|
200
|
+
### Fixed
|
|
201
|
+
- **Notes Rendering**: Fixed issue where literal `\n` characters in notes were rendered as text instead of line breaks in HTML
|
|
202
|
+
- CSV import now properly converts escape sequences to actual newlines
|
|
203
|
+
- Maintains compatibility with existing notes that don't need conversion
|
|
204
|
+
|
|
205
|
+
## [0.12.2] - 2024-12-19
|
|
206
|
+
|
|
207
|
+
### Fixed
|
|
208
|
+
- **Critical Bug Fix**: Renamed `Solution.validate()` method to `Solution.run_validation()` to resolve Pydantic conflict
|
|
209
|
+
- Pydantic was interpreting the `validate` method as a field validator, causing import errors
|
|
210
|
+
- This was breaking Sphinx documentation generation and module imports
|
|
211
|
+
- All references updated across API, CLI, tests, and documentation
|
|
212
|
+
- Method functionality remains identical, only the name changed
|
|
213
|
+
|
|
214
|
+
### Changed
|
|
215
|
+
- Updated all documentation and examples to use `run_validation()` instead of `validate()`
|
|
216
|
+
- Updated CLI commands and help text for consistency
|
|
217
|
+
- Updated test suite to use the new method name
|
|
218
|
+
|
|
219
|
+
## [0.12.1] - 2024-12-19
|
|
220
|
+
|
|
221
|
+
### Added
|
|
222
|
+
- **New CLI Command**: `set-hardware-info` for managing compute platform information
|
|
223
|
+
- Supports setting CPU, memory, platform, and Nexus image details
|
|
224
|
+
- Includes `--clear`, `--dry-run`, and update options
|
|
225
|
+
- Integrates with dossier generation for hardware documentation
|
|
226
|
+
- **Enhanced Documentation**: Comprehensive improvements to Sphinx documentation
|
|
227
|
+
- Expanded API reference with detailed examples and best practices
|
|
228
|
+
- Enhanced tutorial with step-by-step workflow and troubleshooting
|
|
229
|
+
- Improved index page with key features and quick start guide
|
|
230
|
+
- Added custom CSS styling for RGES-PIT color scheme
|
|
231
|
+
- **Example Parameter Files**: Created comprehensive example parameter files
|
|
232
|
+
- `tests/example_params.yaml` and `tests/example_params.json`
|
|
233
|
+
- Demonstrates different parameter formats, uncertainties, and model types
|
|
234
|
+
- Useful for testing and tutorial purposes
|
|
235
|
+
|
|
236
|
+
### Changed
|
|
237
|
+
- **Version Update**: Bumped version from v0.12.0-dev to v0.12.1
|
|
238
|
+
- **Documentation**: Updated all version references across codebase
|
|
239
|
+
- **Tutorial**: Updated CLI commands in `Submission_Tool_Tutorial.ipynb` to match current syntax
|
|
240
|
+
- **GitHub Logo**: Ensured GitHub logo is properly packaged and included in dossier generation
|
|
241
|
+
|
|
242
|
+
### Fixed
|
|
243
|
+
- **CI Test Failures**: Fixed test assertions for CLI comparison and validation commands
|
|
244
|
+
- Updated table header counting logic for solution comparison output
|
|
245
|
+
- Added missing repo_url setting in validation tests
|
|
246
|
+
- **Documentation Build**: Improved Sphinx configuration for better autodoc and theme options
|
|
247
|
+
|
|
248
|
+
## [0.12.0] - 2024-12-18
|
|
249
|
+
|
|
250
|
+
### Added
|
|
251
|
+
- **Comprehensive Documentation**: Complete Sphinx documentation with API reference, tutorial, and examples
|
|
252
|
+
- **Enhanced Dossier Generation**: Improved HTML dashboard with better styling and navigation
|
|
253
|
+
- **Parameter File Support**: Added support for JSON and YAML parameter files in CLI
|
|
254
|
+
- **Validation System**: Centralized parameter validation with comprehensive error checking
|
|
255
|
+
- **Hardware Information**: Automatic detection and manual setting of compute platform details
|
|
256
|
+
- **Notes Management**: Enhanced markdown notes support with file-based editing
|
|
257
|
+
- **Solution Comparison**: BIC-based solution ranking and relative probability calculation
|
|
258
|
+
- **Export Improvements**: Better handling of external files and automatic path updates
|
|
259
|
+
|
|
260
|
+
### Changed
|
|
261
|
+
- **API Improvements**: Enhanced Solution and Submission classes with better validation
|
|
262
|
+
- **CLI Enhancements**: More robust command-line interface with better error handling
|
|
263
|
+
- **Project Structure**: Improved organization with better separation of concerns
|
|
264
|
+
|
|
265
|
+
### Fixed
|
|
266
|
+
- **Bug Fixes**: Various fixes for data persistence, validation, and export functionality
|
|
267
|
+
- **Documentation**: Comprehensive docstring updates with Google style formatting
|
|
268
|
+
|
|
269
|
+
## [0.11.0] - 2024-12-17
|
|
270
|
+
|
|
271
|
+
### Added
|
|
272
|
+
- **Initial Release**: Basic submission management functionality
|
|
273
|
+
- **Core API**: Solution, Event, and Submission classes
|
|
274
|
+
- **CLI Interface**: Basic command-line tools for project management
|
|
275
|
+
- **Export Functionality**: ZIP archive creation for submissions
|
|
276
|
+
|
|
277
|
+
### Changed
|
|
278
|
+
- **Project Structure**: Organized code into logical modules
|
|
279
|
+
- **Documentation**: Basic README and docstrings
|
|
280
|
+
|
|
281
|
+
### Fixed
|
|
282
|
+
- **Initial Implementation**: Core functionality for microlensing submission management
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
message: "If you use microlens-submit, please cite it as below."
|
|
3
|
+
title: "microlens-submit"
|
|
4
|
+
version: "0.16.4"
|
|
5
|
+
authors:
|
|
6
|
+
- family-names: Malpas
|
|
7
|
+
given-names: Amber
|
|
8
|
+
url: "https://github.com/AmberLee2427/microlens-submit"
|
|
9
|
+
doi: "10.5281/zenodo.18246117"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: microlens-submit
|
|
3
|
-
Version: 0.16.
|
|
3
|
+
Version: 0.16.4
|
|
4
4
|
Summary: A tool for managing and submitting microlensing solutions
|
|
5
5
|
Home-page: https://github.com/AmberLee2427/microlens-submit
|
|
6
6
|
Author: Amber Malpas
|
|
@@ -29,6 +29,7 @@ Requires-Dist: typer[all]>=0.9.0
|
|
|
29
29
|
Requires-Dist: rich>=13.0.0
|
|
30
30
|
Requires-Dist: pyyaml>=6.0
|
|
31
31
|
Requires-Dist: markdown>=3.4.0
|
|
32
|
+
Requires-Dist: psutil>=5.9.0
|
|
32
33
|
Requires-Dist: importlib_resources>=1.0.0; python_version < "3.9"
|
|
33
34
|
Provides-Extra: dev
|
|
34
35
|
Requires-Dist: pytest; extra == "dev"
|
|
@@ -97,15 +98,19 @@ You can pass ``--no-color`` to any command if your terminal does not support ANS
|
|
|
97
98
|
1. Initialize your project:
|
|
98
99
|
|
|
99
100
|
```bash
|
|
100
|
-
microlens-submit init --team-name "Planet Pounders" --tier "
|
|
101
|
-
|
|
101
|
+
microlens-submit init --team-name "Planet Pounders" --tier "experienced" ./my_submission
|
|
102
|
+
cd ./my_submission
|
|
102
103
|
```
|
|
103
104
|
|
|
104
|
-
|
|
105
|
+
If you prefer to initialize inside an existing folder, run `microlens-submit init` without a path after `cd` into it.
|
|
106
|
+
|
|
107
|
+
To pass validation, you need to have provided a `repo_url` and `hardware_info` to the project and have a git project initialized in your sumission-project directory. On Roman Nexus, you can use `microlens-submit nexus-init` to auto-populate hardware info.
|
|
105
108
|
|
|
106
109
|
```bash
|
|
107
110
|
microlens-submit set-repo-url <url> ./
|
|
108
111
|
microlens-submit set-hardware-info --cpu-details "intel i7 xxx" --ram-gb 32 ./
|
|
112
|
+
# if your git repo lives elsewhere:
|
|
113
|
+
microlens-submit set-git-dir /path/to/repo ./
|
|
109
114
|
```
|
|
110
115
|
2. Add a new solution to an event:
|
|
111
116
|
|
|
@@ -152,7 +157,7 @@ import microlens_submit
|
|
|
152
157
|
# Load or create the project
|
|
153
158
|
sub = microlens_submit.load(project_path="./my_challenge_submission")
|
|
154
159
|
sub.team_name = "Planet Pounders"
|
|
155
|
-
sub.tier = "
|
|
160
|
+
sub.tier = "experienced"
|
|
156
161
|
|
|
157
162
|
# Get an event and add a solution
|
|
158
163
|
evt = sub.get_event("ogle-2025-blg-0042")
|
|
@@ -201,15 +206,15 @@ import this file directly.
|
|
|
201
206
|
|
|
202
207
|
Bibtex:
|
|
203
208
|
```
|
|
204
|
-
@software{
|
|
209
|
+
@software{malpas_2025_18246117,
|
|
205
210
|
author = {Malpas, Amber},
|
|
206
211
|
title = {microlens-submit},
|
|
207
212
|
month = oct,
|
|
208
213
|
year = 2025,
|
|
209
214
|
publisher = {Zenodo},
|
|
210
|
-
version = {v0.16.
|
|
211
|
-
doi = {10.5281/zenodo.
|
|
212
|
-
url = {https://doi.org/10.5281/zenodo.
|
|
215
|
+
version = {v0.16.3},
|
|
216
|
+
doi = {10.5281/zenodo.18246117},
|
|
217
|
+
url = {https://doi.org/10.5281/zenodo.18246117},
|
|
213
218
|
}
|
|
214
219
|
```
|
|
215
220
|
|
|
@@ -217,4 +222,4 @@ Cite without version:
|
|
|
217
222
|
Malpas, A. (2025). microlens-submit. Zenodo. https://doi.org/10.5281/zenodo.17459752
|
|
218
223
|
|
|
219
224
|
Cite current version:
|
|
220
|
-
Malpas, A. (2025). microlens-submit (v0.16.
|
|
225
|
+
Malpas, A. (2025). microlens-submit (v0.16.3). Zenodo. https://doi.org/10.5281/zenodo.17468488
|
|
@@ -48,15 +48,19 @@ You can pass ``--no-color`` to any command if your terminal does not support ANS
|
|
|
48
48
|
1. Initialize your project:
|
|
49
49
|
|
|
50
50
|
```bash
|
|
51
|
-
microlens-submit init --team-name "Planet Pounders" --tier "
|
|
52
|
-
|
|
51
|
+
microlens-submit init --team-name "Planet Pounders" --tier "experienced" ./my_submission
|
|
52
|
+
cd ./my_submission
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
If you prefer to initialize inside an existing folder, run `microlens-submit init` without a path after `cd` into it.
|
|
56
|
+
|
|
57
|
+
To pass validation, you need to have provided a `repo_url` and `hardware_info` to the project and have a git project initialized in your sumission-project directory. On Roman Nexus, you can use `microlens-submit nexus-init` to auto-populate hardware info.
|
|
56
58
|
|
|
57
59
|
```bash
|
|
58
60
|
microlens-submit set-repo-url <url> ./
|
|
59
61
|
microlens-submit set-hardware-info --cpu-details "intel i7 xxx" --ram-gb 32 ./
|
|
62
|
+
# if your git repo lives elsewhere:
|
|
63
|
+
microlens-submit set-git-dir /path/to/repo ./
|
|
60
64
|
```
|
|
61
65
|
2. Add a new solution to an event:
|
|
62
66
|
|
|
@@ -103,7 +107,7 @@ import microlens_submit
|
|
|
103
107
|
# Load or create the project
|
|
104
108
|
sub = microlens_submit.load(project_path="./my_challenge_submission")
|
|
105
109
|
sub.team_name = "Planet Pounders"
|
|
106
|
-
sub.tier = "
|
|
110
|
+
sub.tier = "experienced"
|
|
107
111
|
|
|
108
112
|
# Get an event and add a solution
|
|
109
113
|
evt = sub.get_event("ogle-2025-blg-0042")
|
|
@@ -152,15 +156,15 @@ import this file directly.
|
|
|
152
156
|
|
|
153
157
|
Bibtex:
|
|
154
158
|
```
|
|
155
|
-
@software{
|
|
159
|
+
@software{malpas_2025_18246117,
|
|
156
160
|
author = {Malpas, Amber},
|
|
157
161
|
title = {microlens-submit},
|
|
158
162
|
month = oct,
|
|
159
163
|
year = 2025,
|
|
160
164
|
publisher = {Zenodo},
|
|
161
|
-
version = {v0.16.
|
|
162
|
-
doi = {10.5281/zenodo.
|
|
163
|
-
url = {https://doi.org/10.5281/zenodo.
|
|
165
|
+
version = {v0.16.3},
|
|
166
|
+
doi = {10.5281/zenodo.18246117},
|
|
167
|
+
url = {https://doi.org/10.5281/zenodo.18246117},
|
|
164
168
|
}
|
|
165
169
|
```
|
|
166
170
|
|
|
@@ -168,4 +172,4 @@ Cite without version:
|
|
|
168
172
|
Malpas, A. (2025). microlens-submit. Zenodo. https://doi.org/10.5281/zenodo.17459752
|
|
169
173
|
|
|
170
174
|
Cite current version:
|
|
171
|
-
Malpas, A. (2025). microlens-submit (v0.16.
|
|
175
|
+
Malpas, A. (2025). microlens-submit (v0.16.3). Zenodo. https://doi.org/10.5281/zenodo.17468488
|
|
@@ -42,10 +42,13 @@ def export(
|
|
|
42
42
|
|
|
43
43
|
def remove_event(
|
|
44
44
|
event_id: str,
|
|
45
|
-
force: bool = typer.Option(False, "--force", help="
|
|
45
|
+
force: bool = typer.Option(False, "--force", help="Required to remove an event (prevents accidents)"),
|
|
46
46
|
project_path: Path = typer.Argument(Path("."), help="Project directory"),
|
|
47
47
|
) -> None:
|
|
48
|
-
"""Remove an entire event and all its solutions from the submission.
|
|
48
|
+
"""Remove an entire event and all its solutions from the submission.
|
|
49
|
+
|
|
50
|
+
This action is destructive and requires --force to proceed.
|
|
51
|
+
"""
|
|
49
52
|
submission = load(str(project_path))
|
|
50
53
|
|
|
51
54
|
if event_id not in submission.events:
|
|
@@ -57,13 +60,11 @@ def remove_event(
|
|
|
57
60
|
|
|
58
61
|
if not force:
|
|
59
62
|
typer.echo(
|
|
60
|
-
f"{symbol('warning')}
|
|
63
|
+
f"{symbol('warning')} Refusing to remove event '{event_id}' without --force "
|
|
64
|
+
f"({solution_count} solutions)."
|
|
61
65
|
)
|
|
62
|
-
typer.echo("
|
|
63
|
-
|
|
64
|
-
if not confirm:
|
|
65
|
-
typer.echo(f"{symbol('error')} Operation cancelled")
|
|
66
|
-
raise typer.Exit(0)
|
|
66
|
+
typer.echo(f"{symbol('hint')} Consider deactivating solutions instead, or re-run with --force to proceed.")
|
|
67
|
+
raise typer.Exit(0)
|
|
67
68
|
|
|
68
69
|
try:
|
|
69
70
|
removed = submission.remove_event(event_id, force=force)
|
|
@@ -94,11 +95,33 @@ def set_repo_url(
|
|
|
94
95
|
)
|
|
95
96
|
|
|
96
97
|
|
|
98
|
+
def set_git_dir(
|
|
99
|
+
git_dir: Path = typer.Argument(..., help="Path to the git working tree"),
|
|
100
|
+
project_path: Path = typer.Argument(Path("."), help="Project directory"),
|
|
101
|
+
) -> None:
|
|
102
|
+
"""Set or update the git working tree path in the submission metadata."""
|
|
103
|
+
sub = load(str(project_path))
|
|
104
|
+
git_dir_path = git_dir.expanduser().resolve()
|
|
105
|
+
if not git_dir_path.exists():
|
|
106
|
+
raise typer.BadParameter(f"git_dir does not exist: {git_dir_path}")
|
|
107
|
+
sub.git_dir = str(git_dir_path)
|
|
108
|
+
sub.save()
|
|
109
|
+
console.print(
|
|
110
|
+
Panel(
|
|
111
|
+
f"Set git_dir to {git_dir_path} in {project_path}/submission.json",
|
|
112
|
+
style="bold green",
|
|
113
|
+
)
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
|
|
97
117
|
def set_hardware_info(
|
|
98
118
|
cpu: Optional[str] = typer.Option(None, "--cpu", help="CPU model/description"),
|
|
99
119
|
cpu_details: Optional[str] = typer.Option(None, "--cpu-details", help="Detailed CPU information"),
|
|
100
120
|
memory_gb: Optional[float] = typer.Option(None, "--memory-gb", help="Memory in GB"),
|
|
101
121
|
ram_gb: Optional[float] = typer.Option(None, "--ram-gb", help="RAM in GB (alternative to --memory-gb)"),
|
|
122
|
+
gpu: Optional[str] = typer.Option(None, "--gpu", help="GPU model/description"),
|
|
123
|
+
gpu_count: Optional[int] = typer.Option(None, "--gpu-count", help="Number of GPUs"),
|
|
124
|
+
gpu_memory_gb: Optional[float] = typer.Option(None, "--gpu-memory-gb", help="GPU memory per device in GB"),
|
|
102
125
|
platform: Optional[str] = typer.Option(
|
|
103
126
|
None,
|
|
104
127
|
"--platform",
|
|
@@ -153,6 +176,24 @@ def set_hardware_info(
|
|
|
153
176
|
changes.append(f"Set nexus_image: {nexus_image}")
|
|
154
177
|
sub.hardware_info["nexus_image"] = nexus_image
|
|
155
178
|
|
|
179
|
+
if any(value is not None for value in (gpu, gpu_count, gpu_memory_gb)):
|
|
180
|
+
gpu_info = sub.hardware_info.get("gpu")
|
|
181
|
+
if not isinstance(gpu_info, dict):
|
|
182
|
+
gpu_info = {}
|
|
183
|
+
if gpu is not None:
|
|
184
|
+
if gpu_info.get("model") != gpu:
|
|
185
|
+
changes.append(f"Set gpu.model: {gpu}")
|
|
186
|
+
gpu_info["model"] = gpu
|
|
187
|
+
if gpu_count is not None:
|
|
188
|
+
if gpu_info.get("count") != gpu_count:
|
|
189
|
+
changes.append(f"Set gpu.count: {gpu_count}")
|
|
190
|
+
gpu_info["count"] = gpu_count
|
|
191
|
+
if gpu_memory_gb is not None:
|
|
192
|
+
if gpu_info.get("memory_gb") != gpu_memory_gb:
|
|
193
|
+
changes.append(f"Set gpu.memory_gb: {gpu_memory_gb}")
|
|
194
|
+
gpu_info["memory_gb"] = gpu_memory_gb
|
|
195
|
+
sub.hardware_info["gpu"] = gpu_info
|
|
196
|
+
|
|
156
197
|
# Show dry run results
|
|
157
198
|
if dry_run:
|
|
158
199
|
if changes:
|
|
@@ -17,6 +17,7 @@ def init(
|
|
|
17
17
|
team_name: str = typer.Option(..., help="Team name"),
|
|
18
18
|
tier: str = typer.Option(..., help="Challenge tier"),
|
|
19
19
|
project_path: Path = typer.Argument(Path("."), help="Project directory"),
|
|
20
|
+
show_warnings: bool = True,
|
|
20
21
|
) -> None:
|
|
21
22
|
"""Create a new submission project in the specified directory.
|
|
22
23
|
|
|
@@ -29,7 +30,7 @@ def init(
|
|
|
29
30
|
|
|
30
31
|
Args:
|
|
31
32
|
team_name: Name of the participating team (e.g., "Team Alpha").
|
|
32
|
-
tier: Challenge tier level (e.g., "
|
|
33
|
+
tier: Challenge tier level (e.g., "beginner", "experienced").
|
|
33
34
|
project_path: Directory where the project will be created.
|
|
34
35
|
Defaults to current directory if not specified.
|
|
35
36
|
|
|
@@ -38,10 +39,10 @@ def init(
|
|
|
38
39
|
|
|
39
40
|
Example:
|
|
40
41
|
# Create project in current directory
|
|
41
|
-
microlens-submit init --team-name "Team Alpha" --tier "
|
|
42
|
+
microlens-submit init --team-name "Team Alpha" --tier "experienced"
|
|
42
43
|
|
|
43
44
|
# Create project in specific directory
|
|
44
|
-
microlens-submit init --team-name "Team Beta" --tier "
|
|
45
|
+
microlens-submit init --team-name "Team Beta" --tier "beginner" ./my_submission
|
|
45
46
|
|
|
46
47
|
# Project structure created:
|
|
47
48
|
# ./my_submission/
|
|
@@ -100,12 +101,15 @@ def init(
|
|
|
100
101
|
)
|
|
101
102
|
|
|
102
103
|
# Run warnings-only validation
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
104
|
+
if show_warnings:
|
|
105
|
+
warnings = sub.run_validation_warnings()
|
|
106
|
+
if warnings:
|
|
107
|
+
console.print(f"[yellow]{symbol('warning')} Project initialized with warnings:[/yellow]")
|
|
108
|
+
for warning in warnings:
|
|
109
|
+
console.print(f" [yellow]• {warning}[/yellow]")
|
|
110
|
+
console.print(
|
|
111
|
+
f"[yellow]{symbol('hint')} These warnings will become errors when saving or exporting.[/yellow]"
|
|
112
|
+
)
|
|
109
113
|
|
|
110
114
|
# Try to save, but don't fail if there are validation errors
|
|
111
115
|
try:
|
|
@@ -134,13 +138,13 @@ def nexus_init(
|
|
|
134
138
|
|
|
135
139
|
Args:
|
|
136
140
|
team_name: Name of the participating team (e.g., "Team Alpha").
|
|
137
|
-
tier: Challenge tier level (e.g., "
|
|
141
|
+
tier: Challenge tier level (e.g., "beginner", "experienced").
|
|
138
142
|
project_path: Directory where the project will be created.
|
|
139
143
|
Defaults to current directory if not specified.
|
|
140
144
|
|
|
141
145
|
Example:
|
|
142
146
|
# Initialize project with Nexus platform info
|
|
143
|
-
microlens-submit nexus-init --team-name "Team Alpha" --tier "
|
|
147
|
+
microlens-submit nexus-init --team-name "Team Alpha" --tier "experienced" ./project
|
|
144
148
|
|
|
145
149
|
# This will automatically detect:
|
|
146
150
|
# - CPU model from /proc/cpuinfo
|
|
@@ -152,7 +156,7 @@ def nexus_init(
|
|
|
152
156
|
environment. It will silently skip any environment information that
|
|
153
157
|
cannot be detected (e.g., if running outside of Nexus).
|
|
154
158
|
"""
|
|
155
|
-
init(team_name=team_name, tier=tier, project_path=project_path)
|
|
159
|
+
init(team_name=team_name, tier=tier, project_path=project_path, show_warnings=False)
|
|
156
160
|
sub = load(str(project_path))
|
|
157
161
|
sub.autofill_nexus_info()
|
|
158
162
|
|