Files
Atomizer/tests/test_zernike_insight.py
Anto01 f13563d7ab 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>
2025-12-23 19:47:37 -05:00

32 lines
1.0 KiB
Python

"""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')