feat: Major update - Physics docs, Zernike OPD, insights, NX journals, tools
Documentation: - Add docs/06_PHYSICS/ with Zernike fundamentals and OPD method docs - Add docs/guides/CMA-ES_EXPLAINED.md optimization guide - Update CLAUDE.md and ATOMIZER_CONTEXT.md with current architecture - Update OP_01_CREATE_STUDY protocol Planning: - Add DYNAMIC_RESPONSE plans for random vibration/PSD support - Add OPTIMIZATION_ENGINE_MIGRATION_PLAN for code reorganization Insights System: - Update design_space, modal_analysis, stress_field, thermal_field insights - Improve error handling and data validation NX Journals: - Add analyze_wfe_zernike.py for Zernike WFE analysis - Add capture_study_images.py for automated screenshots - Add extract_expressions.py and introspect_part.py utilities - Add user_generated_journals/journal_top_view_image_taking.py Tests & Tools: - Add comprehensive Zernike OPD test suite - Add audit_v10 tests for WFE validation - Add tools for Pareto graphs and mirror data extraction - Add migrate_studies_to_topics.py utility Knowledge Base: - Initialize LAC (Learning Atomizer Core) with failure/success patterns Dashboard: - Update Setup.tsx and launch_dashboard.py - Add restart-dev.bat helper script 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
31
tests/test_zernike_insight.py
Normal file
31
tests/test_zernike_insight.py
Normal file
@@ -0,0 +1,31 @@
|
||||
"""Test script for Zernike WFE insight with OPD method."""
|
||||
import sys
|
||||
from pathlib import Path
|
||||
sys.path.insert(0, str(Path(__file__).parent.parent))
|
||||
|
||||
from optimization_engine.insights.zernike_wfe import ZernikeWFEInsight
|
||||
from optimization_engine.insights.base import InsightConfig
|
||||
|
||||
study = Path('studies/M1_Mirror/m1_mirror_cost_reduction_V9')
|
||||
insight = ZernikeWFEInsight(study)
|
||||
|
||||
if insight.can_generate():
|
||||
print('Insight can be generated!')
|
||||
print(f'OP2: {insight.op2_path}')
|
||||
print(f'Geo: {insight.geo_path}')
|
||||
config = InsightConfig()
|
||||
result = insight.generate(config)
|
||||
if result.success:
|
||||
n_files = len(result.summary.get('html_files', []))
|
||||
print(f'Success! Generated {n_files} files')
|
||||
for f in result.summary.get('html_files', []):
|
||||
print(f' - {Path(f).name}')
|
||||
print()
|
||||
print('Summary:')
|
||||
for k, v in result.summary.items():
|
||||
if k != 'html_files':
|
||||
print(f' {k}: {v}')
|
||||
else:
|
||||
print(f'Failed: {result.error}')
|
||||
else:
|
||||
print('Cannot generate insight')
|
||||
Reference in New Issue
Block a user