@tomdurrant is the plan to still have a very lightweight rompy-core or to keep that as a place that developers would put common cross cutting functionality. I think a "read-only" rompy-core could make it difficult to identify and develop common functionality.
For example some analysis suggests
| Category |
Duplicated Module/Concept |
Files / Classes Involved |
Recommended Action |
Priority |
| Testing |
Generic Test Utilities |
test_utils.py (compare_files, compare_nmls, etc.) |
Move to a single rompy_core/tests/utils.py. |
High |
| Data Handling |
Tidal Data Processing |
TidalDataset |
Move to rompy_core/boundary.py. |
High |
| Data Handling |
Boundary Condition Abstractions |
BoundaryHandler, BoundaryConfig, ElevationType, VelocityType |
Move to rompy_core/boundary.py. Refactor SWAN to use them. |
Medium |
| Configuration |
Base Namelist Model |
NamelistBaseModel |
Move to rompy_core/namelist.py. Update all models to inherit. |
High |
| Developer Tools |
AI-based Model Generation |
generate_models.py (ClaudeClient) |
Move to a central rompy_core/scripts/ directory. |
Medium |
| Plotting |
Visualization Base Logic |
Various plot_* functions |
Create rompy_core.plotting with base classes. Refactor model-specific plots to inherit. |
Low |