"""Core extractor library for Atomizer. Available extractors: - Displacement: extract_displacement - Stress: extract_solid_stress (von Mises), extract_principal_stress - Frequency: extract_frequency - Mass (BDF): extract_mass_from_bdf - Mass (Expression): extract_mass_from_expression - Mass (Part): extract_part_mass_material, extract_part_mass, PartMassExtractor - Strain Energy: extract_strain_energy, extract_total_strain_energy - SPC Forces: extract_spc_forces, extract_total_reaction_force - Zernike: extract_zernike_from_op2, ZernikeExtractor (telescope mirrors) - Part Introspection: introspect_part (comprehensive NX .prt analysis) - Custom: CustomExtractorLoader for user-defined Python extractors Phase 2 Extractors (2025-12-06): - Principal stress extraction (sigma1, sigma2, sigma3) - Strain energy extraction (element strain energy) - SPC forces extraction (reaction forces at boundary conditions) Phase 3 Extractors (2025-12-06): - Temperature extraction (thermal analysis: SOL 153/159) - Thermal gradient extraction - Heat flux extraction - Modal mass extraction (modal effective mass from F06) Phase 4 Extractors (2025-12-19): - Part Introspection (E12): Comprehensive .prt analysis (expressions, mass, materials, attributes, groups, features) Phase 5 Extractors (2026-01-17): - Custom Extractor Loader: Dynamic loading and execution of user-defined Python extractors from AtomizerSpec v2.0 (sandboxed execution with security validation) """ # Zernike extractor for telescope mirror optimization (standard Z-only method) from optimization_engine.extractors.extract_zernike import ( ZernikeExtractor, extract_zernike_from_op2, extract_zernike_filtered_rms, extract_zernike_relative_rms, ) # Analytic (parabola-based) Zernike extractor (accounts for lateral X/Y displacement) # Uses parabola formula - requires knowing focal length from optimization_engine.extractors.extract_zernike_opd import ( ZernikeAnalyticExtractor, extract_zernike_analytic, extract_zernike_analytic_filtered_rms, compare_zernike_methods, # Backwards compatibility (deprecated) ZernikeOPDExtractor as _ZernikeOPDExtractor_deprecated, ) # OPD-based Zernike extractor (uses actual mesh geometry, no shape assumption) # MOST RIGOROUS method - RECOMMENDED for telescope mirror optimization # Supports ANNULAR APERTURES (mirrors with central holes) via inner_radius parameter from optimization_engine.extractors.extract_zernike_figure import ( ZernikeOPDExtractor, extract_zernike_opd, extract_zernike_opd_filtered_rms, compute_zernike_coefficients_annular, # Backwards compatibility (deprecated) ZernikeFigureExtractor, extract_zernike_figure, extract_zernike_figure_rms, ) # Part mass and material extractor (from NX .prt files) from optimization_engine.extractors.extract_part_mass_material import ( extract_part_mass_material, extract_part_mass, extract_part_material, PartMassExtractor, ) # Von Mises stress extraction from optimization_engine.extractors.extract_von_mises_stress import ( extract_solid_stress, ) # Principal stress extraction (Phase 2) from optimization_engine.extractors.extract_principal_stress import ( extract_principal_stress, extract_max_principal_stress, extract_min_principal_stress, ) # Strain energy extraction (Phase 2) from optimization_engine.extractors.extract_strain_energy import ( extract_strain_energy, extract_total_strain_energy, extract_strain_energy_density, ) # SPC forces / reaction forces extraction (Phase 2) from optimization_engine.extractors.extract_spc_forces import ( extract_spc_forces, extract_total_reaction_force, extract_reaction_component, check_force_equilibrium, ) # Temperature extraction (Phase 3) from optimization_engine.extractors.extract_temperature import ( extract_temperature, extract_temperature_gradient, extract_heat_flux, get_max_temperature, ) # Modal mass extraction (Phase 3) from optimization_engine.extractors.extract_modal_mass import ( extract_modal_mass, extract_frequencies, get_first_frequency, get_modal_mass_ratio, ) # Part introspection (Phase 4) - comprehensive .prt analysis from optimization_engine.extractors.introspect_part import ( introspect_part, get_expressions_dict, get_expression_value, print_introspection_summary, ) # Custom extractor loader (Phase 5) - dynamic Python extractors from AtomizerSpec v2.0 from optimization_engine.extractors.custom_extractor_loader import ( CustomExtractor, CustomExtractorLoader, CustomExtractorContext, ExtractorSecurityError, ExtractorValidationError, load_custom_extractors, execute_custom_extractor, validate_custom_extractor, ) # Spec extractor builder - builds extractors from AtomizerSpec from optimization_engine.extractors.spec_extractor_builder import ( SpecExtractorBuilder, build_extractors_from_spec, get_extractor_outputs, list_available_builtin_extractors, ) __all__ = [ # Part mass & material (from .prt) 'extract_part_mass_material', 'extract_part_mass', 'extract_part_material', 'PartMassExtractor', # Stress extractors 'extract_solid_stress', 'extract_principal_stress', 'extract_max_principal_stress', 'extract_min_principal_stress', # Strain energy 'extract_strain_energy', 'extract_total_strain_energy', 'extract_strain_energy_density', # SPC forces / reactions 'extract_spc_forces', 'extract_total_reaction_force', 'extract_reaction_component', 'check_force_equilibrium', # Zernike (telescope mirrors) - Standard Z-only method 'ZernikeExtractor', 'extract_zernike_from_op2', 'extract_zernike_filtered_rms', 'extract_zernike_relative_rms', # Zernike OPD (RECOMMENDED - uses actual geometry, no shape assumption) # Supports annular apertures via inner_radius parameter 'ZernikeOPDExtractor', 'extract_zernike_opd', 'extract_zernike_opd_filtered_rms', 'compute_zernike_coefficients_annular', # Zernike Analytic (parabola-based with lateral displacement correction) 'ZernikeAnalyticExtractor', 'extract_zernike_analytic', 'extract_zernike_analytic_filtered_rms', 'compare_zernike_methods', # Backwards compatibility (deprecated) 'ZernikeFigureExtractor', 'extract_zernike_figure', 'extract_zernike_figure_rms', # Temperature (Phase 3 - thermal) 'extract_temperature', 'extract_temperature_gradient', 'extract_heat_flux', 'get_max_temperature', # Modal mass (Phase 3 - dynamics) 'extract_modal_mass', 'extract_frequencies', 'get_first_frequency', 'get_modal_mass_ratio', # Part introspection (Phase 4) 'introspect_part', 'get_expressions_dict', 'get_expression_value', 'print_introspection_summary', # Custom extractor loader (Phase 5) 'CustomExtractor', 'CustomExtractorLoader', 'CustomExtractorContext', 'ExtractorSecurityError', 'ExtractorValidationError', 'load_custom_extractors', 'execute_custom_extractor', 'validate_custom_extractor', # Spec extractor builder 'SpecExtractorBuilder', 'build_extractors_from_spec', 'get_extractor_outputs', 'list_available_builtin_extractors', ]