chore: Clean up orphaned files and update .gitignore
- Delete orphaned files: temp_compare.py, run_cleanup.py - Delete stale cache files from archive/temp_outputs/ - Update .gitignore with .coverage.*, .obsidian/ entries 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,209 +0,0 @@
|
||||
# Morning Summary - November 17, 2025
|
||||
|
||||
## Good Morning! Here's What Was Done While You Slept 🌅
|
||||
|
||||
### Critical Bugs Fixed ✅
|
||||
|
||||
**1. Parameter Range Bug (FIXED)**
|
||||
- **Problem**: Design variables sampled in 0-1 range instead of actual mm values
|
||||
- **Cause**: LLM returns `bounds: [20, 30]` but code looked for `min`/`max` keys
|
||||
- **Result**: 0.27mm thickness instead of 27mm!
|
||||
- **Fix**: Updated [llm_optimization_runner.py](optimization_engine/llm_optimization_runner.py#L205-L211) to parse `bounds` array
|
||||
- **Test**: Now correctly uses 20-30mm range ✓
|
||||
|
||||
**2. Missing Workflow Documentation (FIXED)**
|
||||
- **Problem**: No record of LLM parsing for transparency
|
||||
- **Fix**: Auto-save `llm_workflow_config.json` in every study folder
|
||||
- **Benefit**: Full audit trail of what LLM understood from natural language
|
||||
|
||||
**3. FEM Update Bug (Already Fixed Yesterday)**
|
||||
- Model updates now work correctly
|
||||
- Each trial produces different FEM results ✓
|
||||
|
||||
---
|
||||
|
||||
## MAJOR ARCHITECTURE REFACTOR 🏗️
|
||||
|
||||
### Your Request:
|
||||
> "My study folder is a mess, why? I want some order and real structure to develop an insanely good engineering software that evolve with time."
|
||||
|
||||
### Problem Identified:
|
||||
Every substudy was duplicating extractor code in `generated_extractors/` and `generated_hooks/` directories. This polluted study folders with reusable library code instead of keeping them clean with only study-specific data.
|
||||
|
||||
### Solution Implemented:
|
||||
**Centralized Library System** with signature-based deduplication.
|
||||
|
||||
#### Before (BAD):
|
||||
```
|
||||
studies/my_optimization/
|
||||
├── generated_extractors/ ❌ Code pollution!
|
||||
│ ├── extract_displacement.py
|
||||
│ ├── extract_von_mises_stress.py
|
||||
│ └── extract_mass.py
|
||||
├── generated_hooks/ ❌ Code pollution!
|
||||
├── llm_workflow_config.json
|
||||
└── optimization_results.json
|
||||
```
|
||||
|
||||
#### After (GOOD):
|
||||
```
|
||||
optimization_engine/extractors/ ✓ Core library
|
||||
├── extract_displacement.py
|
||||
├── extract_von_mises_stress.py
|
||||
├── extract_mass.py
|
||||
└── catalog.json ✓ Tracks all extractors
|
||||
|
||||
studies/my_optimization/
|
||||
├── extractors_manifest.json ✓ Just references!
|
||||
├── llm_workflow_config.json ✓ Study config
|
||||
├── optimization_results.json ✓ Results only
|
||||
└── optimization_history.json ✓ History only
|
||||
```
|
||||
|
||||
### Key Benefits:
|
||||
1. **Clean Study Folders**: Only metadata (no code!)
|
||||
2. **Code Reuse**: Same extractor = single file in library
|
||||
3. **Deduplication**: Automatic via signature matching
|
||||
4. **Professional**: Production-grade architecture
|
||||
5. **Evolves**: Library grows, studies stay clean
|
||||
|
||||
---
|
||||
|
||||
## New Components Created
|
||||
|
||||
### 1. ExtractorLibrary (`extractor_library.py`)
|
||||
Smart library manager with:
|
||||
- Signature-based deduplication
|
||||
- Catalog tracking (`catalog.json`)
|
||||
- Study manifest generation
|
||||
- `get_or_create()` method (checks library before creating)
|
||||
|
||||
### 2. Updated Components
|
||||
- **ExtractorOrchestrator**: Now uses core library instead of per-study generation
|
||||
- **LLMOptimizationRunner**: Removed `generated_extractors/` and `generated_hooks/` directory creation
|
||||
- **Test Suite**: Updated to verify clean study structure
|
||||
|
||||
---
|
||||
|
||||
## Test Results
|
||||
|
||||
### E2E Test: ✅ PASSED (18/18 checks)
|
||||
|
||||
**Study folder now contains**:
|
||||
- ✅ `extractors_manifest.json` (references to core library)
|
||||
- ✅ `llm_workflow_config.json` (what LLM understood)
|
||||
- ✅ `optimization_results.json` (best design)
|
||||
- ✅ `optimization_history.json` (all trials)
|
||||
- ✅ `.db` file (Optuna database)
|
||||
|
||||
**Core library now contains**:
|
||||
- ✅ `extract_displacement.py` (reusable!)
|
||||
- ✅ `extract_von_mises_stress.py` (reusable!)
|
||||
- ✅ `extract_mass.py` (reusable!)
|
||||
- ✅ `catalog.json` (tracks everything)
|
||||
|
||||
**NO MORE**:
|
||||
- ❌ `generated_extractors/` pollution
|
||||
- ❌ `generated_hooks/` pollution
|
||||
- ❌ Duplicate extractor code
|
||||
|
||||
---
|
||||
|
||||
## Commits Made
|
||||
|
||||
**1. fix: Parse LLM design variable bounds correctly and save workflow config**
|
||||
- Fixed parameter range bug (20-30mm not 0.2-1.0mm)
|
||||
- Added workflow config saving for transparency
|
||||
|
||||
**2. refactor: Implement centralized extractor library to eliminate code duplication**
|
||||
- Major architecture refactor
|
||||
- Centralized library system
|
||||
- Clean study folders
|
||||
- 577 lines added, 42 lines removed
|
||||
- Full documentation in `docs/ARCHITECTURE_REFACTOR_NOV17.md`
|
||||
|
||||
---
|
||||
|
||||
## Documentation Created
|
||||
|
||||
### [ARCHITECTURE_REFACTOR_NOV17.md](docs/ARCHITECTURE_REFACTOR_NOV17.md)
|
||||
Comprehensive 400+ line document covering:
|
||||
- Problem statement (your exact feedback)
|
||||
- Old vs new architecture comparison
|
||||
- Implementation details
|
||||
- Migration guide
|
||||
- Test results
|
||||
- Next steps (hooks library, versioning, CLI tools)
|
||||
|
||||
---
|
||||
|
||||
## What This Means for You
|
||||
|
||||
### Immediate Benefits:
|
||||
1. **Clean Studies**: Your study folders are now professional and minimal
|
||||
2. **Code Reuse**: Core library grows, studies don't duplicate code
|
||||
3. **Transparency**: Every study has full audit trail (workflow config)
|
||||
4. **Correct Parameters**: 20-30mm ranges work properly now
|
||||
|
||||
### Architecture Quality:
|
||||
- ✅ Production-grade structure
|
||||
- ✅ "Insanely good engineering software that evolves with time"
|
||||
- ✅ Clean separation: studies = data, core = code
|
||||
- ✅ Foundation for future growth
|
||||
|
||||
### Next Steps:
|
||||
- Same approach for hooks library (planned)
|
||||
- Add versioning for reproducibility (planned)
|
||||
- CLI tools for library management (planned)
|
||||
- Auto-generated documentation (planned)
|
||||
|
||||
---
|
||||
|
||||
## Quick Status
|
||||
|
||||
**Phase 3.2 Week 1**: ✅ COMPLETE
|
||||
- [OK] Task 1.2: Wire LLMOptimizationRunner to production
|
||||
- [OK] Task 1.3: Create minimal working example
|
||||
- [OK] Task 1.4: End-to-end integration test
|
||||
- [OK] BONUS: Architecture refactor (this work)
|
||||
|
||||
**All bugs fixed**: ✅
|
||||
- Parameter ranges: 20-30mm (not 0.2-1.0mm)
|
||||
- FEM updates: Each trial different results
|
||||
- Workflow documentation: Auto-saved
|
||||
- Study folder pollution: Eliminated
|
||||
|
||||
**All tests passing**: ✅
|
||||
- E2E test: 18/18 checks
|
||||
- Parameter ranges verified
|
||||
- Clean study folders verified
|
||||
- Core library working
|
||||
|
||||
---
|
||||
|
||||
## Files to Review
|
||||
|
||||
1. **docs/ARCHITECTURE_REFACTOR_NOV17.md** - Full architecture explanation
|
||||
2. **optimization_engine/extractor_library.py** - New library manager
|
||||
3. **studies/.../extractors_manifest.json** - Example of clean study folder
|
||||
|
||||
---
|
||||
|
||||
## Ready for Next Steps
|
||||
|
||||
Your vision of "insanely good engineering software that evolves with time" is now in place for extractors. The architecture is production-grade, clean, and ready to scale.
|
||||
|
||||
Same approach can be applied to hooks, then documentation generation, then versioning - all building on this solid foundation.
|
||||
|
||||
Have a great morning! ☕
|
||||
|
||||
---
|
||||
|
||||
**Commits**: 3 total today
|
||||
**Files Changed**: 8 (5 modified, 3 created)
|
||||
**Lines Added**: 600+
|
||||
**Architecture**: Transformed from messy to production-grade
|
||||
**Tests**: All passing ✅
|
||||
**Documentation**: Comprehensive ✅
|
||||
|
||||
Sleep well achieved! 😴 → 🎯
|
||||
Binary file not shown.
@@ -1,29 +0,0 @@
|
||||
[
|
||||
{
|
||||
"iteration": 1,
|
||||
"n_training_samples": 55,
|
||||
"confidence_score": 0.48,
|
||||
"mass_mape": 5.199446351686856,
|
||||
"freq_mape": 46.23527454811865,
|
||||
"avg_selected_uncertainty": 0.3559015095233917,
|
||||
"status": "LOW_CONFIDENCE"
|
||||
},
|
||||
{
|
||||
"iteration": 2,
|
||||
"n_training_samples": 60,
|
||||
"confidence_score": 0.6,
|
||||
"mass_mape": 5.401324621678541,
|
||||
"freq_mape": 88.80499920325646,
|
||||
"avg_selected_uncertainty": 0.23130142092704772,
|
||||
"status": "MEDIUM_CONFIDENCE"
|
||||
},
|
||||
{
|
||||
"iteration": 3,
|
||||
"n_training_samples": 65,
|
||||
"confidence_score": 0.6,
|
||||
"mass_mape": 4.867728649442469,
|
||||
"freq_mape": 76.78009245481465,
|
||||
"avg_selected_uncertainty": 0.17344236522912979,
|
||||
"status": "MEDIUM_CONFIDENCE"
|
||||
}
|
||||
]
|
||||
Binary file not shown.
@@ -1,530 +0,0 @@
|
||||
fatal: not a git repository (or any of the parent directories): .git
|
||||
|
||||
================================================================================
|
||||
ATOMIZER - INTERACTIVE OPTIMIZATION SETUP
|
||||
================================================================================
|
||||
|
||||
|
||||
[Atomizer] Welcome to Atomizer! I'll help you set up your optimization.
|
||||
|
||||
|
||||
[Atomizer] First, I need to know about your model files.
|
||||
|
||||
|
||||
[User] I have a bracket model:
|
||||
|
||||
- Part file: tests\Bracket.prt
|
||||
- Simulation file: tests\Bracket_sim1.sim
|
||||
|
||||
[Atomizer] Great! Let me initialize the Setup Wizard to analyze your model...
|
||||
|
||||
|
||||
================================================================================
|
||||
STEP 1: MODEL INTROSPECTION
|
||||
================================================================================
|
||||
|
||||
|
||||
[Atomizer] I'm reading your NX model to find available design parameters...
|
||||
|
||||
|
||||
[Atomizer] Found 4 expressions in your model:
|
||||
|
||||
- support_angle: 32.0 degrees
|
||||
- tip_thickness: 24.0 mm
|
||||
- p3: 10.0 mm
|
||||
- support_blend_radius: 10.0 mm
|
||||
|
||||
[Atomizer] Which parameters would you like to use as design variables?
|
||||
|
||||
|
||||
[User] I want to optimize tip_thickness and support_angle
|
||||
|
||||
|
||||
[Atomizer] Perfect! Now, what's your optimization goal?
|
||||
|
||||
|
||||
[User] I want to maximize displacement while keeping stress below
|
||||
|
||||
a safety factor of 4. The material is Aluminum 6061-T6.
|
||||
|
||||
================================================================================
|
||||
STEP 2: BASELINE SIMULATION
|
||||
================================================================================
|
||||
|
||||
|
||||
[Atomizer] To validate your setup, I need to run ONE baseline simulation.
|
||||
|
||||
|
||||
[Atomizer] This will generate an OP2 file that I can analyze to ensure
|
||||
|
||||
|
||||
[Atomizer] the extraction pipeline will work correctly.
|
||||
|
||||
|
||||
[Atomizer]
|
||||
|
||||
|
||||
[Atomizer] Running baseline simulation with current parameter values...
|
||||
|
||||
|
||||
[NX SOLVER] Starting simulation...
|
||||
Input file: Bracket_sim1.sim
|
||||
Working dir: tests
|
||||
Mode: Journal
|
||||
Deleted 3 old result file(s) to force fresh solve
|
||||
[JOURNAL OUTPUT]
|
||||
Mesh-Based Errors Summary
|
||||
-------------------------
|
||||
|
||||
Total: 0 errors and 0 warnings
|
||||
|
||||
|
||||
Material-Based Errors Summary
|
||||
-----------------------------
|
||||
|
||||
Total: 0 errors and 0 warnings
|
||||
|
||||
|
||||
Solution-Based Errors Summary
|
||||
-----------------------------
|
||||
|
||||
Iterative Solver Option
|
||||
More than 80 percent of the elements in this model are 3D elements.
|
||||
It is therefore recommended that you turn ON the Element Iterative Solver in the "Edit
|
||||
Solution" dialog.
|
||||
|
||||
Total: 0 errors and 0 warnings
|
||||
|
||||
|
||||
Load/BC-Based Errors Summary
|
||||
----------------------------
|
||||
|
||||
Total: 0 errors and 0 warnings
|
||||
|
||||
|
||||
Nastran Model Setup Check completed
|
||||
|
||||
|
||||
|
||||
|
||||
*** 20:33:59 ***
|
||||
Starting Nastran Exporter
|
||||
|
||||
*** 20:33:59 ***
|
||||
Writing file
|
||||
c:\Users\antoi\Documents\Atomaste\Atomizer\tests\bracket_sim1-solution_1.dat
|
||||
|
||||
*** 20:33:59 ***
|
||||
Writing SIMCENTER NASTRAN 2412.0 compatible deck
|
||||
|
||||
*** 20:33:59 ***
|
||||
Writing Nastran System section
|
||||
|
||||
*** 20:33:59 ***
|
||||
Writing File Management section
|
||||
|
||||
*** 20:33:59 ***
|
||||
Writing Executive Control section
|
||||
|
||||
*** 20:33:59 ***
|
||||
Writing Case Control section
|
||||
|
||||
*** 20:33:59 ***
|
||||
Writing Bulk Data section
|
||||
|
||||
*** 20:33:59 ***
|
||||
Writing Nodes
|
||||
|
||||
*** 20:33:59 ***
|
||||
Writing Elements
|
||||
|
||||
*** 20:33:59 ***
|
||||
Writing Physical Properties
|
||||
|
||||
*** 20:33:59 ***
|
||||
Writing Materials
|
||||
|
||||
*** 20:33:59 ***
|
||||
Writing Degree-of-Freedom Sets
|
||||
|
||||
*** 20:33:59 ***
|
||||
Writing Loads and Constraints
|
||||
|
||||
*** 20:33:59 ***
|
||||
Writing Coordinate Systems
|
||||
|
||||
*** 20:33:59 ***
|
||||
Validating Solution Setup
|
||||
|
||||
*** 20:33:59 ***
|
||||
Summary of Bulk Data cards written
|
||||
|
||||
+----------+----------+
|
||||
| NAME | NUMBER |
|
||||
+----------+----------+
|
||||
| CHEXA | 306 |
|
||||
| CPENTA | 10 |
|
||||
| FORCE | 3 |
|
||||
| GRID | 585 |
|
||||
| MAT1 | 1 |
|
||||
| MATT1 | 1 |
|
||||
| PARAM | 6 |
|
||||
| PSOLID | 1 |
|
||||
| SPC | 51 |
|
||||
| TABLEM1 | 3 |
|
||||
+----------+----------+
|
||||
|
||||
*** 20:33:59 ***
|
||||
Nastran Deck Successfully Written
|
||||
|
||||
[JOURNAL] Opening simulation: c:\Users\antoi\Documents\Atomaste\Atomizer\tests\Bracket_sim1.sim
|
||||
[JOURNAL] Checking for open parts...
|
||||
[JOURNAL] Opening simulation fresh from disk...
|
||||
[JOURNAL] STEP 1: Updating Bracket.prt geometry...
|
||||
[JOURNAL] Rebuilding geometry with new expression values...
|
||||
[JOURNAL] Bracket geometry updated (0 errors)
|
||||
[JOURNAL] STEP 2: Opening Bracket_fem1.fem...
|
||||
[JOURNAL] Updating FE Model...
|
||||
[JOURNAL] FE Model updated with new geometry!
|
||||
[JOURNAL] STEP 3: Switching back to sim part...
|
||||
[JOURNAL] Switched back to sim part
|
||||
[JOURNAL] Starting solve...
|
||||
[JOURNAL] Solve submitted!
|
||||
[JOURNAL] Solutions solved: -1779619210
|
||||
[JOURNAL] Solutions failed: 32764
|
||||
[JOURNAL] Solutions skipped: 1218183744
|
||||
[JOURNAL] Saving simulation to ensure output files are written...
|
||||
[JOURNAL] Save complete!
|
||||
[JOURNAL ERRORS]
|
||||
Journal execution results for c:\Users\antoi\Documents\Atomaste\Atomizer\tests\_temp_solve_journal.py...
|
||||
Syntax errors:
|
||||
Line 0: Traceback (most recent call last):
|
||||
File "c:\Users\antoi\Documents\Atomaste\Atomizer\tests\_temp_solve_journal.py", line 247, in <module>
|
||||
sys.exit(0 if success else 1)
|
||||
[NX SOLVER] Waiting for solve to complete...
|
||||
[NX SOLVER] Output files detected after 0.5s
|
||||
[NX SOLVER] Complete in 4.3s
|
||||
[NX SOLVER] Results: bracket_sim1-solution_1.op2
|
||||
|
||||
[Atomizer] Baseline simulation complete! OP2 file: bracket_sim1-solution_1.op2
|
||||
|
||||
|
||||
================================================================================
|
||||
STEP 3: OP2 INTROSPECTION
|
||||
================================================================================
|
||||
|
||||
|
||||
[Atomizer] Now I'll analyze the OP2 file to see what's actually in there...
|
||||
|
||||
DEBUG: op2.py:614 combine=True
|
||||
DEBUG: op2.py:615 -------- reading op2 with read_mode=1 (array sizing) --------
|
||||
INFO: op2_scalar.py:1960 op2_filename = 'tests\\bracket_sim1-solution_1.op2'
|
||||
DEBUG: op2_reader.py:323 date = (11, 16, 25)
|
||||
WARNING: version.py:88 nx version='2412' is not supported
|
||||
DEBUG: op2_reader.py:403 mode='nx' version='2412'
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'IBULK' (explicit bulk data)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'ICASE' (explicit case control)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'CASECC' (case control)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'PVT0' (PARAM cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GPL' (grid point list)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GPDT' (grid point locations)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'EPT' (property cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'MPT' (material cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM2' (element cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM3' (constraint cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM4' (load cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM1' (grid/coord cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'BGPDT' (grid points in cid=0 frame)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'DIT' (TABLEx cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'EQEXIN' (internal/external ids)
|
||||
DEBUG: op2_reader.py:672 eqexin idata=(101, 585, 0, 0, 0, 0, 0)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'OQG1' (spc/mpc forces)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'BOUGV1' (g-set U in cid=0 frame)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'OES1' (linear stress)
|
||||
DEBUG: oes.py:2840 numwide_real=193
|
||||
DEBUG: oes.py:2840 numwide_real=151
|
||||
DEBUG: op2.py:634 -------- reading op2 with read_mode=2 (array filling) --------
|
||||
DEBUG: op2_reader.py:323 date = (11, 16, 25)
|
||||
WARNING: version.py:88 nx version='2412' is not supported
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'IBULK' (explicit bulk data)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'ICASE' (explicit case control)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'CASECC' (case control)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'PVT0' (PARAM cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GPL' (grid point list)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GPDT' (grid point locations)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'EPT' (property cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'MPT' (material cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM2' (element cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM3' (constraint cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM4' (load cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM1' (grid/coord cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'BGPDT' (grid points in cid=0 frame)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'DIT' (TABLEx cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'EQEXIN' (internal/external ids)
|
||||
DEBUG: op2_reader.py:672 eqexin idata=(101, 585, 0, 0, 0, 0, 0)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'OQG1' (spc/mpc forces)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'BOUGV1' (g-set U in cid=0 frame)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'OES1' (linear stress)
|
||||
DEBUG: oes.py:2840 numwide_real=193
|
||||
DEBUG: oes.py:2840 numwide_real=151
|
||||
DEBUG: op2.py:932 combine_results
|
||||
DEBUG: op2.py:648 finished reading op2
|
||||
|
||||
[Atomizer] Here's what I found in your OP2 file:
|
||||
|
||||
- Element types with stress: CHEXA, CPENTA
|
||||
- Available results: displacement, stress
|
||||
- Number of elements: 0
|
||||
- Number of nodes: 0
|
||||
|
||||
================================================================================
|
||||
STEP 4: LLM-GUIDED CONFIGURATION
|
||||
================================================================================
|
||||
|
||||
|
||||
[Atomizer] Based on your goal and the OP2 contents, here's what I recommend:
|
||||
|
||||
|
||||
[Atomizer]
|
||||
|
||||
|
||||
[Atomizer] OBJECTIVE:
|
||||
|
||||
|
||||
[Atomizer] - Maximize displacement (minimize negative displacement)
|
||||
|
||||
|
||||
[Atomizer]
|
||||
|
||||
|
||||
[Atomizer] EXTRACTIONS:
|
||||
|
||||
|
||||
[Atomizer] - Extract displacement from OP2
|
||||
|
||||
|
||||
[Atomizer] - Extract stress from CHEXA elements
|
||||
|
||||
|
||||
[Atomizer] (I detected these element types in your model)
|
||||
|
||||
|
||||
[Atomizer]
|
||||
|
||||
|
||||
[Atomizer] CALCULATIONS:
|
||||
|
||||
|
||||
[Atomizer] - Calculate safety factor: SF = 276 MPa / max_stress
|
||||
|
||||
|
||||
[Atomizer] - Negate displacement for minimization
|
||||
|
||||
|
||||
[Atomizer]
|
||||
|
||||
|
||||
[Atomizer] CONSTRAINT:
|
||||
|
||||
|
||||
[Atomizer] - Enforce SF >= 4.0 with penalty
|
||||
|
||||
|
||||
[Atomizer]
|
||||
|
||||
|
||||
[Atomizer] DESIGN VARIABLES:
|
||||
|
||||
|
||||
[Atomizer] - tip_thickness: 24.0 mm (suggest range: 15-25 mm)
|
||||
|
||||
|
||||
[Atomizer] - support_angle: 32.0 degrees (suggest range: 20-40 deg)
|
||||
|
||||
|
||||
[User] That looks good! Let's use those ranges.
|
||||
|
||||
|
||||
================================================================================
|
||||
STEP 5: PIPELINE VALIDATION (DRY RUN)
|
||||
================================================================================
|
||||
|
||||
|
||||
[Atomizer] Before running 20-30 optimization trials, let me validate that
|
||||
|
||||
|
||||
[Atomizer] EVERYTHING works correctly with your baseline OP2 file...
|
||||
|
||||
|
||||
[Atomizer]
|
||||
|
||||
|
||||
[Atomizer] Running dry-run validation...
|
||||
|
||||
DEBUG: op2.py:614 combine=True
|
||||
DEBUG: op2.py:615 -------- reading op2 with read_mode=1 (array sizing) --------
|
||||
INFO: op2_scalar.py:1960 op2_filename = 'tests\\bracket_sim1-solution_1.op2'
|
||||
DEBUG: op2_reader.py:323 date = (11, 16, 25)
|
||||
WARNING: version.py:88 nx version='2412' is not supported
|
||||
DEBUG: op2_reader.py:403 mode='nx' version='2412'
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'IBULK' (explicit bulk data)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'ICASE' (explicit case control)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'CASECC' (case control)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'PVT0' (PARAM cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GPL' (grid point list)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GPDT' (grid point locations)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'EPT' (property cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'MPT' (material cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM2' (element cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM3' (constraint cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM4' (load cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM1' (grid/coord cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'BGPDT' (grid points in cid=0 frame)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'DIT' (TABLEx cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'EQEXIN' (internal/external ids)
|
||||
DEBUG: op2_reader.py:672 eqexin idata=(101, 585, 0, 0, 0, 0, 0)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'OQG1' (spc/mpc forces)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'BOUGV1' (g-set U in cid=0 frame)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'OES1' (linear stress)
|
||||
DEBUG: oes.py:2840 numwide_real=193
|
||||
DEBUG: oes.py:2840 numwide_real=151
|
||||
DEBUG: op2.py:634 -------- reading op2 with read_mode=2 (array filling) --------
|
||||
DEBUG: op2_reader.py:323 date = (11, 16, 25)
|
||||
WARNING: version.py:88 nx version='2412' is not supported
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'IBULK' (explicit bulk data)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'ICASE' (explicit case control)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'CASECC' (case control)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'PVT0' (PARAM cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GPL' (grid point list)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GPDT' (grid point locations)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'EPT' (property cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'MPT' (material cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM2' (element cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM3' (constraint cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM4' (load cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM1' (grid/coord cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'BGPDT' (grid points in cid=0 frame)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'DIT' (TABLEx cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'EQEXIN' (internal/external ids)
|
||||
DEBUG: op2_reader.py:672 eqexin idata=(101, 585, 0, 0, 0, 0, 0)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'OQG1' (spc/mpc forces)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'BOUGV1' (g-set U in cid=0 frame)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'OES1' (linear stress)
|
||||
DEBUG: oes.py:2840 numwide_real=193
|
||||
DEBUG: oes.py:2840 numwide_real=151
|
||||
DEBUG: op2.py:932 combine_results
|
||||
DEBUG: op2.py:648 finished reading op2
|
||||
DEBUG: op2.py:614 combine=True
|
||||
DEBUG: op2.py:615 -------- reading op2 with read_mode=1 (array sizing) --------
|
||||
INFO: op2_scalar.py:1960 op2_filename = 'tests\\bracket_sim1-solution_1.op2'
|
||||
DEBUG: op2_reader.py:323 date = (11, 16, 25)
|
||||
Extraction failed: extract_solid_stress - No ctetra stress results in OP2
|
||||
\u274c extract_solid_stress: No ctetra stress results in OP2
|
||||
\u274c calculate_safety_factor: name 'max_von_mises' is not defined
|
||||
Required input 'min_force' not found in context
|
||||
Hook 'ratio_hook' failed: Missing required input: min_force
|
||||
Traceback (most recent call last):
|
||||
File "c:\Users\antoi\Documents\Atomaste\Atomizer\optimization_engine\plugins\hooks.py", line 72, in execute
|
||||
result = self.function(context)
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "c:\Users\antoi\Documents\Atomaste\Atomizer\optimization_engine\plugins\post_calculation\min_to_avg_ratio_hook.py", line 38, in ratio_hook
|
||||
raise ValueError(f"Missing required input: min_force")
|
||||
ValueError: Missing required input: min_force
|
||||
Hook 'ratio_hook' failed: Missing required input: min_force
|
||||
Required input 'max_stress' not found in context
|
||||
Hook 'safety_factor_hook' failed: Missing required input: max_stress
|
||||
Traceback (most recent call last):
|
||||
File "c:\Users\antoi\Documents\Atomaste\Atomizer\optimization_engine\plugins\hooks.py", line 72, in execute
|
||||
result = self.function(context)
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "c:\Users\antoi\Documents\Atomaste\Atomizer\optimization_engine\plugins\post_calculation\safety_factor_hook.py", line 38, in safety_factor_hook
|
||||
raise ValueError(f"Missing required input: max_stress")
|
||||
ValueError: Missing required input: max_stress
|
||||
Hook 'safety_factor_hook' failed: Missing required input: max_stress
|
||||
Required input 'norm_stress' not found in context
|
||||
Hook 'weighted_objective_hook' failed: Missing required input: norm_stress
|
||||
Traceback (most recent call last):
|
||||
File "c:\Users\antoi\Documents\Atomaste\Atomizer\optimization_engine\plugins\hooks.py", line 72, in execute
|
||||
result = self.function(context)
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "c:\Users\antoi\Documents\Atomaste\Atomizer\optimization_engine\plugins\post_calculation\weighted_objective_test.py", line 38, in weighted_objective_hook
|
||||
raise ValueError(f"Missing required input: norm_stress")
|
||||
ValueError: Missing required input: norm_stress
|
||||
Hook 'weighted_objective_hook' failed: Missing required input: norm_stress
|
||||
\u26a0\ufe0f No explicit objective, using: max_displacement
|
||||
WARNING: version.py:88 nx version='2412' is not supported
|
||||
DEBUG: op2_reader.py:403 mode='nx' version='2412'
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'IBULK' (explicit bulk data)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'ICASE' (explicit case control)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'CASECC' (case control)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'PVT0' (PARAM cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GPL' (grid point list)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GPDT' (grid point locations)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'EPT' (property cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'MPT' (material cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM2' (element cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM3' (constraint cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM4' (load cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM1' (grid/coord cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'BGPDT' (grid points in cid=0 frame)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'DIT' (TABLEx cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'EQEXIN' (internal/external ids)
|
||||
DEBUG: op2_reader.py:672 eqexin idata=(101, 585, 0, 0, 0, 0, 0)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'OQG1' (spc/mpc forces)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'BOUGV1' (g-set U in cid=0 frame)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'OES1' (linear stress)
|
||||
DEBUG: oes.py:2840 numwide_real=193
|
||||
DEBUG: oes.py:2840 numwide_real=151
|
||||
DEBUG: op2.py:634 -------- reading op2 with read_mode=2 (array filling) --------
|
||||
DEBUG: op2_reader.py:323 date = (11, 16, 25)
|
||||
WARNING: version.py:88 nx version='2412' is not supported
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'IBULK' (explicit bulk data)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'ICASE' (explicit case control)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'CASECC' (case control)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'PVT0' (PARAM cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GPL' (grid point list)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GPDT' (grid point locations)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'EPT' (property cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'MPT' (material cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM2' (element cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM3' (constraint cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM4' (load cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM1' (grid/coord cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'BGPDT' (grid points in cid=0 frame)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'DIT' (TABLEx cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'EQEXIN' (internal/external ids)
|
||||
DEBUG: op2_reader.py:672 eqexin idata=(101, 585, 0, 0, 0, 0, 0)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'OQG1' (spc/mpc forces)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'BOUGV1' (g-set U in cid=0 frame)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'OES1' (linear stress)
|
||||
DEBUG: oes.py:2840 numwide_real=193
|
||||
DEBUG: oes.py:2840 numwide_real=151
|
||||
DEBUG: op2.py:932 combine_results
|
||||
DEBUG: op2.py:648 finished reading op2
|
||||
|
||||
[Wizard] VALIDATION RESULTS:
|
||||
[Wizard] [OK] extractor: ['max_displacement', 'max_disp_node', 'max_disp_x', 'max_disp_y', 'max_disp_z']
|
||||
[Wizard] [FAIL] extractor: No ctetra stress results in OP2
|
||||
[Wizard] [FAIL] calculation: name 'max_von_mises' is not defined
|
||||
[Wizard] [OK] calculation: Created ['neg_displacement']
|
||||
[Wizard] [OK] hook: 3 results
|
||||
[Wizard] [OK] objective: 0.36178338527679443
|
||||
|
||||
|
||||
================================================================================
|
||||
VALIDATION FAILED!
|
||||
================================================================================
|
||||
|
||||
|
||||
[Atomizer] The validation found issues that need to be fixed:
|
||||
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "c:\Users\antoi\Documents\Atomaste\Atomizer\tests\interactive_optimization_setup.py", line 324, in <module>
|
||||
main()
|
||||
File "c:\Users\antoi\Documents\Atomaste\Atomizer\tests\interactive_optimization_setup.py", line 316, in main
|
||||
print(f" [ERROR] {result.message}")
|
||||
File "C:\Users\antoi\anaconda3\envs\test_env\Lib\encodings\cp1252.py", line 19, in encode
|
||||
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
UnicodeEncodeError: 'charmap' codec can't encode character '\u274c' in position 19: character maps to <undefined>
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
@@ -1,122 +0,0 @@
|
||||
fatal: not a git repository (or any of the parent directories): .git
|
||||
================================================================================
|
||||
HYBRID MODE - AUTOMATED STUDY CREATION
|
||||
================================================================================
|
||||
|
||||
[1/5] Creating study structure...
|
||||
[OK] Study directory: circular_plate_frequency_tuning
|
||||
|
||||
[2/5] Copying model files...
|
||||
[OK] Copied 4 files
|
||||
|
||||
[3/5] Installing workflow configuration...
|
||||
[OK] Workflow: circular_plate_frequency_tuning
|
||||
[OK] Variables: 2
|
||||
[OK] Objectives: 1
|
||||
|
||||
[4/5] Running benchmarking (validating simulation setup)...
|
||||
Running INTELLIGENT benchmarking...
|
||||
- Solving ALL solutions in .sim file
|
||||
- Discovering all available results
|
||||
- Matching objectives to results
|
||||
|
||||
|
||||
================================================================================
|
||||
INTELLIGENT SETUP - COMPLETE ANALYSIS
|
||||
================================================================================
|
||||
|
||||
[Phase 1/4] Extracting ALL expressions from model...
|
||||
[NX] Exporting expressions from Circular_Plate.prt to .exp format...
|
||||
[OK] Expressions exported to: c:\Users\antoi\Documents\Atomaste\Atomizer\studies\circular_plate_frequency_tuning\1_setup\model\Circular_Plate_expressions.exp
|
||||
[OK] Found 4 expressions
|
||||
- inner_diameter: 130.24581665835925 MilliMeter
|
||||
- p0: None MilliMeter
|
||||
- p1: 0.0 MilliMeter
|
||||
- plate_thickness: 5.190705791851906 MilliMeter
|
||||
|
||||
[Phase 2/4] Solving ALL solutions in .sim file...
|
||||
[OK] Solved 0 solutions
|
||||
|
||||
[Phase 3/4] Analyzing ALL result files...
|
||||
DEBUG: op2.py:614 combine=True
|
||||
DEBUG: op2.py:615 -------- reading op2 with read_mode=1 (array sizing) --------
|
||||
INFO: op2_scalar.py:1960 op2_filename = 'c:\\Users\\antoi\\Documents\\Atomaste\\Atomizer\\studies\\circular_plate_frequency_tuning\\1_setup\\model\\circular_plate_sim1-solution_1.op2'
|
||||
DEBUG: op2_reader.py:323 date = (11, 18, 25)
|
||||
WARNING: version.py:88 nx version='2412' is not supported
|
||||
DEBUG: op2_reader.py:403 mode='nx' version='2412'
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'IBULK' (explicit bulk data)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'ICASE' (explicit case control)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'CASECC' (case control)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'PVT0' (PARAM cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GPL' (grid point list)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GPDT' (grid point locations)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'EPT' (property cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'MPT' (material cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM2' (element cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM4' (load cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM1' (grid/coord cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'BGPDT' (grid points in cid=0 frame)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'EQEXIN' (internal/external ids)
|
||||
DEBUG: op2_reader.py:672 eqexin idata=(101, 613, 0, 0, 0, 0, 0)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'OQG1' (spc/mpc forces)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'BOUGV1' (g-set U in cid=0 frame)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'OES1' (linear stress)
|
||||
DEBUG: op2.py:634 -------- reading op2 with read_mode=2 (array filling) --------
|
||||
DEBUG: op2_reader.py:323 date = (11, 18, 25)
|
||||
WARNING: version.py:88 nx version='2412' is not supported
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'IBULK' (explicit bulk data)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'ICASE' (explicit case control)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'CASECC' (case control)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'PVT0' (PARAM cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GPL' (grid point list)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GPDT' (grid point locations)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'EPT' (property cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'MPT' (material cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM2' (element cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM4' (load cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'GEOM1' (grid/coord cards)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'BGPDT' (grid points in cid=0 frame)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'EQEXIN' (internal/external ids)
|
||||
DEBUG: op2_reader.py:672 eqexin idata=(101, 613, 0, 0, 0, 0, 0)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'OQG1' (spc/mpc forces)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'BOUGV1' (g-set U in cid=0 frame)
|
||||
DEBUG: op2_scalar.py:2173 table_name=b'OES1' (linear stress)
|
||||
DEBUG: op2.py:932 combine_results
|
||||
DEBUG: op2.py:648 finished reading op2
|
||||
[OK] Found 1 result files
|
||||
- displacements: 613 entries in circular_plate_sim1-solution_1.op2
|
||||
|
||||
[Phase 4/4] Matching objectives to available results...
|
||||
[OK] Objective mapping complete
|
||||
- frequency_error
|
||||
Solution: NONE
|
||||
Result type: eigenvalues
|
||||
Extractor: extract_first_frequency
|
||||
|
||||
================================================================================
|
||||
ANALYSIS COMPLETE
|
||||
================================================================================
|
||||
|
||||
[OK] Expressions found: 4
|
||||
[OK] Solutions found: 4
|
||||
[OK] Results discovered: 1
|
||||
[OK] Objectives matched: 1
|
||||
- frequency_error: eigenvalues from 'NONE' (ERROR confidence)
|
||||
[OK] Simulation validated
|
||||
[OK] Extracted 0 results
|
||||
|
||||
[4.5/5] Generating configuration report...
|
||||
Traceback (most recent call last):
|
||||
File "c:\Users\antoi\Documents\Atomaste\Atomizer\create_circular_plate_study.py", line 70, in <module>
|
||||
main()
|
||||
File "c:\Users\antoi\Documents\Atomaste\Atomizer\create_circular_plate_study.py", line 52, in main
|
||||
study_dir = creator.create_from_workflow(
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "c:\Users\antoi\Documents\Atomaste\Atomizer\optimization_engine\hybrid_study_creator.py", line 100, in create_from_workflow
|
||||
self._generate_configuration_report(study_dir, workflow, benchmark_results)
|
||||
File "c:\Users\antoi\Documents\Atomaste\Atomizer\optimization_engine\hybrid_study_creator.py", line 757, in _generate_configuration_report
|
||||
f.write(content)
|
||||
File "C:\Users\antoi\anaconda3\envs\test_env\Lib\encodings\cp1252.py", line 19, in encode
|
||||
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
UnicodeEncodeError: 'charmap' codec can't encode characters in position 1535-1536: character maps to <undefined>
|
||||
@@ -1,19 +0,0 @@
|
||||
{
|
||||
"stats": {
|
||||
"total_time": 3.4194347858428955,
|
||||
"avg_trial_time_ms": 0.25935888290405273,
|
||||
"trials_per_second": 584.8919851550838,
|
||||
"extrapolation_count": 1757,
|
||||
"extrapolation_pct": 87.85
|
||||
},
|
||||
"pareto_summary": {
|
||||
"total": 407,
|
||||
"confident": 0,
|
||||
"needs_fea": 407
|
||||
},
|
||||
"top_designs": [
|
||||
{
|
||||
"mass": 717.7724576426426,
|
||||
"frequency": 15.794277791999079,
|
||||
"uncertainty": 0.3945587883026621,
|
||||
"needs_fea":
|
||||
Reference in New Issue
Block a user