"""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, ) # Displacement extraction from optimization_engine.extractors.extract_displacement import ( extract_displacement, ) # Mass extraction from BDF from optimization_engine.extractors.extract_mass_from_bdf import ( extract_mass_from_bdf, ) # 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__ = [ # Displacement extraction "extract_displacement", # Mass extraction (from BDF) "extract_mass_from_bdf", # 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", ]