# Optimization Engine Reorganization - Migration Plan ## Comprehensive Guide for Safe Codebase Restructuring **Document Version**: 1.0 **Created**: 2025-12-23 **Status**: PLANNING - Do Not Execute Without Review **Risk Level**: HIGH - Affects 557+ locations across 276 files --- ## Executive Summary This document provides a complete migration plan for reorganizing `optimization_engine/` from 50+ loose files to a clean modular structure. This is a **high-impact refactoring** that requires careful execution. ### Impact Summary | Category | Files Affected | Lines to Change | |----------|----------------|-----------------| | Python imports (internal) | 90+ files | ~145 changes | | Python imports (studies) | 30+ folders | ~153 changes | | Python imports (tests) | 30+ files | ~79 changes | | Python imports (dashboard) | 3 files | ~11 changes | | Documentation (protocols, skills) | 119 files | ~200 changes | | JSON configs | 4 files | ~50 changes | | **TOTAL** | **276 files** | **~640 changes** | --- ## Part 1: Current State Analysis ### 1.1 Top-Level Files Requiring Migration These 50+ files at `optimization_engine/` root need to move: ``` SURROGATES (6 files) → processors/surrogates/ ├── neural_surrogate.py ├── generic_surrogate.py ├── adaptive_surrogate.py ├── simple_mlp_surrogate.py ├── active_learning_surrogate.py └── surrogate_tuner.py OPTIMIZATION CORE (7 files) → core/ ├── runner.py ├── runner_with_neural.py ├── base_runner.py ├── intelligent_optimizer.py ├── method_selector.py ├── strategy_selector.py └── strategy_portfolio.py NX INTEGRATION (6 files) → nx/ ├── nx_solver.py ├── nx_updater.py ├── nx_session_manager.py ├── solve_simulation.py ├── solve_simulation_simple.py └── model_cleanup.py STUDY MANAGEMENT (5 files) → study/ ├── study_creator.py ├── study_wizard.py ├── study_state.py ├── study_reset.py └── study_continuation.py REPORTING (5 files) → reporting/ ├── generate_report.py ├── generate_report_markdown.py ├── comprehensive_results_analyzer.py ├── visualizer.py └── landscape_analyzer.py CONFIG (4 files) → config/ ├── config_manager.py ├── optimization_config_builder.py ├── optimization_setup_wizard.py └── capability_matcher.py AGENTS/RESEARCH (5 files) → agents/ or future/ ├── research_agent.py ├── pynastran_research_agent.py ├── targeted_research_planner.py ├── workflow_decomposer.py └── step_classifier.py MISC (remaining ~15 files) - evaluate individually ├── logger.py → utils/ ├── op2_extractor.py → extractors/ ├── extractor_library.py → extractors/ ├── export_expressions.py → nx/ ├── import_expressions.py → nx/ ├── mesh_converter.py → nx/ ├── simulation_validator.py → validators/ ├── auto_doc.py → utils/ ├── auto_trainer.py → processors/surrogates/ ├── realtime_tracking.py → utils/ ├── benchmarking_substudy.py → study/ ├── codebase_analyzer.py → utils/ ├── training_data_exporter.py → processors/surrogates/ ├── pruning_logger.py → utils/ ├── adaptive_characterization.py → processors/ └── generate_history_from_trials.py → study/ ``` ### 1.2 Well-Organized Directories (Keep As-Is) These are already properly organized: ``` extractors/ ✓ 20+ extractors, clean __init__.py insights/ ✓ 8 insight types, registry pattern hooks/ ✓ nx_cad/, nx_cae/ subdirs gnn/ ✓ Neural surrogate for Zernike templates/ ✓ Config templates schemas/ ✓ JSON schemas validators/ ✓ Validation code plugins/ ✓ Hook manager system utils/ ✓ Utility functions custom_functions/ ✓ NX material generator model_discovery/ ✓ Model introspection future/ ✓ Experimental code ``` --- ## Part 2: Target Structure ### 2.1 Proposed Final Structure ``` optimization_engine/ │ ├── __init__.py # Updated with backwards-compat aliases │ ├── core/ # NEW - Optimization engine core │ ├── __init__.py │ ├── runner.py │ ├── base_runner.py │ ├── runner_with_neural.py │ ├── intelligent_optimizer.py │ ├── method_selector.py │ ├── strategy_selector.py │ └── strategy_portfolio.py │ ├── processors/ # NEW - Data processing & algorithms │ ├── __init__.py │ ├── surrogates/ │ │ ├── __init__.py │ │ ├── neural_surrogate.py │ │ ├── generic_surrogate.py │ │ ├── adaptive_surrogate.py │ │ ├── simple_mlp_surrogate.py │ │ ├── active_learning_surrogate.py │ │ ├── surrogate_tuner.py │ │ ├── auto_trainer.py │ │ └── training_data_exporter.py │ │ │ └── dynamic_response/ # NEW - From master plan │ ├── __init__.py │ ├── modal_database.py │ ├── transfer_functions.py │ ├── random_vibration.py │ ├── psd_profiles.py │ └── utils/ │ ├── nx/ # NEW - NX/Nastran integration │ ├── __init__.py │ ├── solver.py # Was nx_solver.py │ ├── updater.py # Was nx_updater.py │ ├── session_manager.py # Was nx_session_manager.py │ ├── solve_simulation.py │ ├── solve_simulation_simple.py │ ├── model_cleanup.py │ ├── export_expressions.py │ ├── import_expressions.py │ └── mesh_converter.py │ ├── study/ # NEW - Study management │ ├── __init__.py │ ├── creator.py # Was study_creator.py │ ├── wizard.py # Was study_wizard.py │ ├── state.py # Was study_state.py │ ├── reset.py # Was study_reset.py │ ├── continuation.py # Was study_continuation.py │ ├── benchmarking.py # Was benchmarking_substudy.py │ └── history_generator.py # Was generate_history_from_trials.py │ ├── reporting/ # NEW - Reports and analysis │ ├── __init__.py │ ├── report_generator.py │ ├── markdown_report.py │ ├── results_analyzer.py │ ├── visualizer.py │ └── landscape_analyzer.py │ ├── config/ # NEW - Configuration │ ├── __init__.py │ ├── manager.py │ ├── builder.py │ ├── setup_wizard.py │ └── capability_matcher.py │ ├── extractors/ # EXISTING - Add op2_extractor, extractor_library ├── insights/ # EXISTING ├── hooks/ # EXISTING ├── gnn/ # EXISTING ├── templates/ # EXISTING ├── schemas/ # EXISTING ├── validators/ # EXISTING - Add simulation_validator ├── plugins/ # EXISTING ├── utils/ # EXISTING - Add logger, auto_doc, etc. ├── custom_functions/ # EXISTING ├── model_discovery/ # EXISTING └── future/ # EXISTING - Move agents here ├── research_agent.py ├── pynastran_research_agent.py ├── targeted_research_planner.py ├── workflow_decomposer.py └── step_classifier.py ``` --- ## Part 3: Import Mapping Tables ### 3.1 Old → New Import Mapping This is the critical reference for all updates: ```python # CORE OPTIMIZATION "from optimization_engine.runner" → "from optimization_engine.core.runner" "from optimization_engine.base_runner" → "from optimization_engine.core.base_runner" "from optimization_engine.runner_with_neural" → "from optimization_engine.core.runner_with_neural" "from optimization_engine.intelligent_optimizer" → "from optimization_engine.core.intelligent_optimizer" "from optimization_engine.method_selector" → "from optimization_engine.core.method_selector" "from optimization_engine.strategy_selector" → "from optimization_engine.core.strategy_selector" "from optimization_engine.strategy_portfolio" → "from optimization_engine.core.strategy_portfolio" # SURROGATES "from optimization_engine.neural_surrogate" → "from optimization_engine.processors.surrogates.neural_surrogate" "from optimization_engine.generic_surrogate" → "from optimization_engine.processors.surrogates.generic_surrogate" "from optimization_engine.adaptive_surrogate" → "from optimization_engine.processors.surrogates.adaptive_surrogate" "from optimization_engine.simple_mlp_surrogate" → "from optimization_engine.processors.surrogates.simple_mlp_surrogate" "from optimization_engine.active_learning_surrogate" → "from optimization_engine.processors.surrogates.active_learning_surrogate" "from optimization_engine.surrogate_tuner" → "from optimization_engine.processors.surrogates.surrogate_tuner" # NX INTEGRATION "from optimization_engine.nx_solver" → "from optimization_engine.nx.solver" "from optimization_engine.nx_updater" → "from optimization_engine.nx.updater" "from optimization_engine.nx_session_manager" → "from optimization_engine.nx.session_manager" "from optimization_engine.solve_simulation" → "from optimization_engine.nx.solve_simulation" "from optimization_engine.model_cleanup" → "from optimization_engine.nx.model_cleanup" "from optimization_engine.export_expressions" → "from optimization_engine.nx.export_expressions" "from optimization_engine.import_expressions" → "from optimization_engine.nx.import_expressions" "from optimization_engine.mesh_converter" → "from optimization_engine.nx.mesh_converter" # STUDY MANAGEMENT "from optimization_engine.study_creator" → "from optimization_engine.study.creator" "from optimization_engine.study_wizard" → "from optimization_engine.study.wizard" "from optimization_engine.study_state" → "from optimization_engine.study.state" "from optimization_engine.study_reset" → "from optimization_engine.study.reset" "from optimization_engine.study_continuation" → "from optimization_engine.study.continuation" # REPORTING "from optimization_engine.generate_report" → "from optimization_engine.reporting.report_generator" "from optimization_engine.generate_report_markdown" → "from optimization_engine.reporting.markdown_report" "from optimization_engine.comprehensive_results" → "from optimization_engine.reporting.results_analyzer" "from optimization_engine.visualizer" → "from optimization_engine.reporting.visualizer" "from optimization_engine.landscape_analyzer" → "from optimization_engine.reporting.landscape_analyzer" # CONFIG "from optimization_engine.config_manager" → "from optimization_engine.config.manager" "from optimization_engine.optimization_config_builder" → "from optimization_engine.config.builder" "from optimization_engine.optimization_setup_wizard" → "from optimization_engine.config.setup_wizard" "from optimization_engine.capability_matcher" → "from optimization_engine.config.capability_matcher" # UTILITIES (moving to utils/) "from optimization_engine.logger" → "from optimization_engine.utils.logger" "from optimization_engine.auto_doc" → "from optimization_engine.utils.auto_doc" "from optimization_engine.realtime_tracking" → "from optimization_engine.utils.realtime_tracking" "from optimization_engine.codebase_analyzer" → "from optimization_engine.utils.codebase_analyzer" "from optimization_engine.pruning_logger" → "from optimization_engine.utils.pruning_logger" # RESEARCH/AGENTS (moving to future/) "from optimization_engine.research_agent" → "from optimization_engine.future.research_agent" "from optimization_engine.workflow_decomposer" → "from optimization_engine.future.workflow_decomposer" "from optimization_engine.step_classifier" → "from optimization_engine.future.step_classifier" ``` ### 3.2 Backwards Compatibility Aliases Add to `optimization_engine/__init__.py` for transition period: ```python # BACKWARDS COMPATIBILITY ALIASES # These allow old imports to work during migration period # Remove after all code is updated # Core from optimization_engine.core.runner import * from optimization_engine.core.base_runner import * from optimization_engine.core.intelligent_optimizer import * # NX from optimization_engine.nx import solver as nx_solver from optimization_engine.nx import updater as nx_updater from optimization_engine.nx import session_manager as nx_session_manager from optimization_engine.nx import solve_simulation # Study from optimization_engine.study import creator as study_creator from optimization_engine.study import wizard as study_wizard from optimization_engine.study import state as study_state # Surrogates from optimization_engine.processors.surrogates import neural_surrogate from optimization_engine.processors.surrogates import generic_surrogate # Config from optimization_engine.config import manager as config_manager # Utils from optimization_engine.utils import logger # Deprecation warnings (optional) import warnings def __getattr__(name): deprecated = { 'nx_solver': 'optimization_engine.nx.solver', 'study_creator': 'optimization_engine.study.creator', # ... more mappings } if name in deprecated: warnings.warn( f"Importing {name} from optimization_engine is deprecated. " f"Use {deprecated[name]} instead.", DeprecationWarning, stacklevel=2 ) # Return the module anyway for compatibility raise AttributeError(f"module 'optimization_engine' has no attribute '{name}'") ``` --- ## Part 4: Files Requiring Updates ### 4.1 Internal optimization_engine Files (90+ files) **Highest-impact internal files:** | File | Imports to Update | Priority | |------|-------------------|----------| | `runner.py` | nx_solver, config_manager, extractors | Critical | | `base_runner.py` | config_manager, validators | Critical | | `intelligent_optimizer.py` | runner, neural_surrogate, method_selector | Critical | | `runner_with_neural.py` | runner, neural_surrogate | High | | `gnn/gnn_optimizer.py` | polar_graph, zernike_gnn, nx_solver | High | | `hooks/nx_cad/*.py` | nx_session_manager | High | | `plugins/hook_manager.py` | validators, config | Medium | ### 4.2 Study Scripts (30+ folders, 153 imports) **Pattern in every study's `run_optimization.py`:** ```python # BEFORE from optimization_engine.nx_solver import run_nx_simulation from optimization_engine.extractors import ZernikeExtractor from optimization_engine.gnn.gnn_optimizer import ZernikeGNNOptimizer # AFTER from optimization_engine.nx.solver import run_nx_simulation from optimization_engine.extractors import ZernikeExtractor # unchanged from optimization_engine.gnn.gnn_optimizer import ZernikeGNNOptimizer # unchanged ``` **Studies requiring updates:** ``` studies/ ├── M1_Mirror/ │ ├── m1_mirror_adaptive_V*/run_optimization.py (12 files) │ └── [other variants] ├── Simple_Bracket/ │ ├── bracket_*/run_optimization.py (8 files) ├── UAV_Arm/ │ ├── */run_optimization.py (4 files) ├── Drone_Gimbal/ ├── Simple_Beam/ └── [others] ``` ### 4.3 Test Files (30+ files, 79 imports) Located in `tests/`: ``` tests/ ├── test_extractors.py ├── test_zernike_*.py (5+ files) ├── test_neural_surrogate.py ├── test_gnn_*.py ├── test_nx_solver.py ├── test_study_*.py └── [others] ``` ### 4.4 Dashboard Backend (3 files, 11 imports) ``` atomizer-dashboard/backend/api/ ├── main.py # sys.path setup ├── routes/optimization.py # study management imports └── routes/insights.py # insight imports ``` ### 4.5 Documentation Files (119 files) **Protocols requiring updates:** | Protocol | References | Changes Needed | |----------|------------|----------------| | SYS_10_IMSO.md | intelligent_optimizer | core.intelligent_optimizer | | SYS_12_EXTRACTOR_LIBRARY.md | extractors/* | None (unchanged) | | SYS_14_NEURAL_ACCELERATION.md | neural_surrogate, gnn/* | processors.surrogates.* | | SYS_15_METHOD_SELECTOR.md | method_selector | core.method_selector | | OP_01_CREATE_STUDY.md | study_creator, study_wizard | study.creator, study.wizard | | OP_02_RUN_OPTIMIZATION.md | runner, nx_solver | core.runner, nx.solver | **Skill files requiring updates:** | Skill File | Changes | |------------|---------| | 01_CHEATSHEET.md | Path references | | core/study-creation-core.md | Import examples | | modules/extractors-catalog.md | Directory paths | | modules/neural-acceleration.md | Surrogate imports | ### 4.6 JSON Configuration Files (4 files) **feature_registry.json** (878 lines, 50+ path references): ```json // BEFORE "file_path": "optimization_engine/neural_surrogate.py" // AFTER "file_path": "optimization_engine/processors/surrogates/neural_surrogate.py" ``` --- ## Part 5: Migration Execution Plan ### Phase 0: Pre-Migration (30 min) 1. **Create full backup** ```bash git stash # Save any uncommitted changes git checkout -b refactor/optimization-engine-reorganization cp -r optimization_engine optimization_engine_backup ``` 2. **Run baseline tests** ```bash python -m pytest tests/ -v --tb=short > baseline_tests.log 2>&1 ``` 3. **Document current working state** - Run one study end-to-end - Verify dashboard loads - Note any existing failures ### Phase 1: Create Directory Structure (15 min) ```bash # Create new directories mkdir -p optimization_engine/core mkdir -p optimization_engine/processors/surrogates mkdir -p optimization_engine/processors/dynamic_response mkdir -p optimization_engine/nx mkdir -p optimization_engine/study mkdir -p optimization_engine/reporting mkdir -p optimization_engine/config # Create __init__.py files touch optimization_engine/core/__init__.py touch optimization_engine/processors/__init__.py touch optimization_engine/processors/surrogates/__init__.py touch optimization_engine/processors/dynamic_response/__init__.py touch optimization_engine/nx/__init__.py touch optimization_engine/study/__init__.py touch optimization_engine/reporting/__init__.py touch optimization_engine/config/__init__.py ``` ### Phase 2: Move Files (30 min) **Execute in this order to minimize circular import issues:** ```bash # 1. UTILITIES FIRST (no dependencies) mv optimization_engine/logger.py optimization_engine/utils/ mv optimization_engine/auto_doc.py optimization_engine/utils/ mv optimization_engine/realtime_tracking.py optimization_engine/utils/ mv optimization_engine/codebase_analyzer.py optimization_engine/utils/ mv optimization_engine/pruning_logger.py optimization_engine/utils/ # 2. CONFIG (low dependencies) mv optimization_engine/config_manager.py optimization_engine/config/manager.py mv optimization_engine/optimization_config_builder.py optimization_engine/config/builder.py mv optimization_engine/optimization_setup_wizard.py optimization_engine/config/setup_wizard.py mv optimization_engine/capability_matcher.py optimization_engine/config/capability_matcher.py # 3. NX INTEGRATION mv optimization_engine/nx_solver.py optimization_engine/nx/solver.py mv optimization_engine/nx_updater.py optimization_engine/nx/updater.py mv optimization_engine/nx_session_manager.py optimization_engine/nx/session_manager.py mv optimization_engine/solve_simulation.py optimization_engine/nx/ mv optimization_engine/solve_simulation_simple.py optimization_engine/nx/ mv optimization_engine/model_cleanup.py optimization_engine/nx/ mv optimization_engine/export_expressions.py optimization_engine/nx/ mv optimization_engine/import_expressions.py optimization_engine/nx/ mv optimization_engine/mesh_converter.py optimization_engine/nx/ # 4. SURROGATES mv optimization_engine/neural_surrogate.py optimization_engine/processors/surrogates/ mv optimization_engine/generic_surrogate.py optimization_engine/processors/surrogates/ mv optimization_engine/adaptive_surrogate.py optimization_engine/processors/surrogates/ mv optimization_engine/simple_mlp_surrogate.py optimization_engine/processors/surrogates/ mv optimization_engine/active_learning_surrogate.py optimization_engine/processors/surrogates/ mv optimization_engine/surrogate_tuner.py optimization_engine/processors/surrogates/ mv optimization_engine/auto_trainer.py optimization_engine/processors/surrogates/ mv optimization_engine/training_data_exporter.py optimization_engine/processors/surrogates/ # 5. STUDY MANAGEMENT mv optimization_engine/study_creator.py optimization_engine/study/creator.py mv optimization_engine/study_wizard.py optimization_engine/study/wizard.py mv optimization_engine/study_state.py optimization_engine/study/state.py mv optimization_engine/study_reset.py optimization_engine/study/reset.py mv optimization_engine/study_continuation.py optimization_engine/study/continuation.py mv optimization_engine/benchmarking_substudy.py optimization_engine/study/benchmarking.py mv optimization_engine/generate_history_from_trials.py optimization_engine/study/history_generator.py # 6. REPORTING mv optimization_engine/generate_report.py optimization_engine/reporting/report_generator.py mv optimization_engine/generate_report_markdown.py optimization_engine/reporting/markdown_report.py mv optimization_engine/comprehensive_results_analyzer.py optimization_engine/reporting/results_analyzer.py mv optimization_engine/visualizer.py optimization_engine/reporting/ mv optimization_engine/landscape_analyzer.py optimization_engine/reporting/ # 7. CORE (depends on many things, do last) mv optimization_engine/runner.py optimization_engine/core/ mv optimization_engine/base_runner.py optimization_engine/core/ mv optimization_engine/runner_with_neural.py optimization_engine/core/ mv optimization_engine/intelligent_optimizer.py optimization_engine/core/ mv optimization_engine/method_selector.py optimization_engine/core/ mv optimization_engine/strategy_selector.py optimization_engine/core/ mv optimization_engine/strategy_portfolio.py optimization_engine/core/ # 8. RESEARCH/FUTURE mv optimization_engine/research_agent.py optimization_engine/future/ mv optimization_engine/pynastran_research_agent.py optimization_engine/future/ mv optimization_engine/targeted_research_planner.py optimization_engine/future/ mv optimization_engine/workflow_decomposer.py optimization_engine/future/ mv optimization_engine/step_classifier.py optimization_engine/future/ # 9. REMAINING MISC mv optimization_engine/op2_extractor.py optimization_engine/extractors/ mv optimization_engine/extractor_library.py optimization_engine/extractors/ mv optimization_engine/simulation_validator.py optimization_engine/validators/ mv optimization_engine/adaptive_characterization.py optimization_engine/processors/ ``` ### Phase 3: Update Internal Imports (1-2 hours) **Use sed/grep for bulk updates:** ```bash # Example sed commands (run from project root) # NX imports find . -name "*.py" -exec sed -i 's/from optimization_engine\.nx_solver/from optimization_engine.nx.solver/g' {} + find . -name "*.py" -exec sed -i 's/from optimization_engine\.nx_updater/from optimization_engine.nx.updater/g' {} + find . -name "*.py" -exec sed -i 's/from optimization_engine\.nx_session_manager/from optimization_engine.nx.session_manager/g' {} + find . -name "*.py" -exec sed -i 's/from optimization_engine\.solve_simulation/from optimization_engine.nx.solve_simulation/g' {} + # Study imports find . -name "*.py" -exec sed -i 's/from optimization_engine\.study_creator/from optimization_engine.study.creator/g' {} + find . -name "*.py" -exec sed -i 's/from optimization_engine\.study_wizard/from optimization_engine.study.wizard/g' {} + find . -name "*.py" -exec sed -i 's/from optimization_engine\.study_state/from optimization_engine.study.state/g' {} + # Config imports find . -name "*.py" -exec sed -i 's/from optimization_engine\.config_manager/from optimization_engine.config.manager/g' {} + # Core imports find . -name "*.py" -exec sed -i 's/from optimization_engine\.runner import/from optimization_engine.core.runner import/g' {} + find . -name "*.py" -exec sed -i 's/from optimization_engine\.base_runner/from optimization_engine.core.base_runner/g' {} + find . -name "*.py" -exec sed -i 's/from optimization_engine\.intelligent_optimizer/from optimization_engine.core.intelligent_optimizer/g' {} + # Surrogate imports find . -name "*.py" -exec sed -i 's/from optimization_engine\.neural_surrogate/from optimization_engine.processors.surrogates.neural_surrogate/g' {} + find . -name "*.py" -exec sed -i 's/from optimization_engine\.generic_surrogate/from optimization_engine.processors.surrogates.generic_surrogate/g' {} + # Logger find . -name "*.py" -exec sed -i 's/from optimization_engine\.logger/from optimization_engine.utils.logger/g' {} + ``` **Handle edge cases manually:** - `import optimization_engine.nx_solver` (without `from`) - Dynamic imports using `importlib` - String references in configs ### Phase 4: Create __init__.py Files (30 min) **Example: `optimization_engine/core/__init__.py`** ```python """ Optimization Engine Core Main optimization runners and algorithm selection. """ from .runner import OptimizationRunner from .base_runner import BaseRunner from .intelligent_optimizer import IntelligentOptimizer, IMSO from .method_selector import MethodSelector from .strategy_selector import StrategySelector from .strategy_portfolio import StrategyPortfolio __all__ = [ 'OptimizationRunner', 'BaseRunner', 'IntelligentOptimizer', 'IMSO', 'MethodSelector', 'StrategySelector', 'StrategyPortfolio', ] ``` **Create similar for each new directory.** ### Phase 5: Add Backwards Compatibility (30 min) Update `optimization_engine/__init__.py`: ```python """ Optimization Engine for Atomizer Reorganized structure (v2.0): - core/ - Optimization runners - processors/ - Data processing (surrogates, dynamic response) - nx/ - NX/Nastran integration - study/ - Study management - reporting/ - Reports and analysis - config/ - Configuration - extractors/ - Physics extraction - insights/ - Visualizations - gnn/ - Graph neural networks - hooks/ - NX hooks """ # Re-export commonly used items at top level for convenience from optimization_engine.core.runner import OptimizationRunner from optimization_engine.core.intelligent_optimizer import IMSO from optimization_engine.nx.solver import run_nx_simulation, NXSolver from optimization_engine.study.creator import create_study from optimization_engine.config.manager import ConfigManager # Backwards compatibility aliases (deprecated) # These will be removed in a future version import warnings as _warnings def _deprecated_import(old_name, new_location): _warnings.warn( f"Importing '{old_name}' directly from optimization_engine is deprecated. " f"Use '{new_location}' instead.", DeprecationWarning, stacklevel=3 ) # Lazy loading for backwards compatibility def __getattr__(name): # Map old names to new locations _compat_map = { 'nx_solver': ('optimization_engine.nx.solver', 'nx_solver'), 'nx_updater': ('optimization_engine.nx.updater', 'nx_updater'), 'study_creator': ('optimization_engine.study.creator', 'study_creator'), 'config_manager': ('optimization_engine.config.manager', 'config_manager'), 'runner': ('optimization_engine.core.runner', 'runner'), 'neural_surrogate': ('optimization_engine.processors.surrogates.neural_surrogate', 'neural_surrogate'), } if name in _compat_map: module_path, attr = _compat_map[name] _deprecated_import(name, module_path) import importlib module = importlib.import_module(module_path) return module raise AttributeError(f"module 'optimization_engine' has no attribute '{name}'") ``` ### Phase 6: Update Documentation (1 hour) **Use sed for bulk updates in markdown:** ```bash # Update protocol files find docs/protocols -name "*.md" -exec sed -i 's/optimization_engine\/nx_solver/optimization_engine\/nx\/solver/g' {} + find docs/protocols -name "*.md" -exec sed -i 's/optimization_engine\/study_creator/optimization_engine\/study\/creator/g' {} + # ... etc for all mappings # Update .claude skills find .claude -name "*.md" -exec sed -i 's/optimization_engine\.nx_solver/optimization_engine.nx.solver/g' {} + # ... etc ``` **Manual review needed for:** - Code examples in markdown - Directory structure diagrams - Command-line examples ### Phase 7: Update JSON Configs (30 min) **feature_registry.json** - Use a Python script: ```python import json with open('optimization_engine/feature_registry.json', 'r') as f: registry = json.load(f) # Define path mappings path_map = { 'optimization_engine/neural_surrogate.py': 'optimization_engine/processors/surrogates/neural_surrogate.py', 'optimization_engine/nx_solver.py': 'optimization_engine/nx/solver.py', # ... all other mappings } def update_paths(obj): if isinstance(obj, dict): for key, value in obj.items(): if key == 'file_path' and value in path_map: obj[key] = path_map[value] else: update_paths(value) elif isinstance(obj, list): for item in obj: update_paths(item) update_paths(registry) with open('optimization_engine/feature_registry.json', 'w') as f: json.dump(registry, f, indent=2) ``` ### Phase 8: Testing & Validation (1-2 hours) ```bash # 1. Run Python import tests python -c "from optimization_engine.core.runner import OptimizationRunner" python -c "from optimization_engine.nx.solver import run_nx_simulation" python -c "from optimization_engine.study.creator import create_study" python -c "from optimization_engine.processors.surrogates.neural_surrogate import NeuralSurrogate" # 2. Run backwards compatibility tests python -c "from optimization_engine import nx_solver" # Should work with deprecation warning # 3. Run test suite python -m pytest tests/ -v --tb=short # 4. Test a study end-to-end cd studies/Simple_Bracket/bracket_displacement_maximizing python run_optimization.py --trials 2 --dry-run # 5. Test dashboard cd atomizer-dashboard python backend/api/main.py # Should start without import errors ``` ### Phase 9: Cleanup (15 min) ```bash # Remove backup after successful testing rm -rf optimization_engine_backup # Remove any .pyc files that might cache old imports find . -name "*.pyc" -delete find . -name "__pycache__" -type d -exec rm -rf {} + # Commit git add -A git commit -m "refactor: Reorganize optimization_engine into modular structure - Move 50+ top-level files into logical subdirectories - Create core/, processors/, nx/, study/, reporting/, config/ - Add backwards compatibility aliases with deprecation warnings - Update all imports across codebase (640+ changes) - Update documentation and protocols BREAKING: Direct imports from optimization_engine.* are deprecated. Use new paths like optimization_engine.core.runner instead. 🤖 Generated with [Claude Code](https://claude.com/claude-code)" ``` --- ## Part 6: Rollback Plan If migration fails: ```bash # Option 1: Git reset (if not committed) git checkout -- . # Option 2: Restore backup rm -rf optimization_engine mv optimization_engine_backup optimization_engine # Option 3: Git revert (if committed) git revert HEAD ``` --- ## Part 7: Post-Migration Tasks ### 7.1 Update LAC Knowledge Base Record the migration in LAC: ```python from knowledge_base.lac import get_lac lac = get_lac() lac.record_insight( category="architecture", context="optimization_engine reorganization", insight="Migrated 50+ files into modular structure. New paths: " "core/, processors/, nx/, study/, reporting/, config/. " "Backwards compat aliases provided with deprecation warnings.", confidence=1.0, tags=["refactoring", "architecture", "breaking-change"] ) ``` ### 7.2 Update CLAUDE.md Add section about new structure. ### 7.3 Schedule Deprecation Removal After 2-4 weeks of stable operation: - Remove backwards compatibility aliases - Update remaining old imports - Clean up __init__.py files --- ## Part 8: Time Estimate Summary | Phase | Task | Time | |-------|------|------| | 0 | Pre-migration (backup, baseline) | 30 min | | 1 | Create directory structure | 15 min | | 2 | Move files | 30 min | | 3 | Update internal imports | 1-2 hours | | 4 | Create __init__.py files | 30 min | | 5 | Add backwards compatibility | 30 min | | 6 | Update documentation | 1 hour | | 7 | Update JSON configs | 30 min | | 8 | Testing & validation | 1-2 hours | | 9 | Cleanup & commit | 15 min | | **TOTAL** | | **6-8 hours** | --- ## Part 9: Decision Points ### Option A: Full Migration Now - **Pros**: Clean structure, enables dynamic_response cleanly - **Cons**: 6-8 hours work, risk of breakage - **When**: When you have a dedicated half-day ### Option B: Minimal Migration (processors/ only) - **Pros**: Low risk, enables dynamic_response - **Cons**: Leaves technical debt, inconsistent structure - **When**: If you need dynamic_response urgently ### Option C: Defer Migration - **Pros**: Zero risk now - **Cons**: Dynamic_response goes in awkward location - **When**: If stability is critical --- ## Appendix A: Automated Migration Script A Python script to automate most of the migration: ```python #!/usr/bin/env python """ optimization_engine Migration Script Run with: python migrate_optimization_engine.py --dry-run Then: python migrate_optimization_engine.py --execute """ import os import re import shutil from pathlib import Path # ... full script would be ~200 lines # Handles: directory creation, file moves, import updates, __init__ generation ``` Would you like me to create this full automation script? --- *This plan ensures a safe, reversible migration with clear validation steps.*