Release interface workflows, AI pipelines, and research environment - #3
Conversation
deleted: _tmp_poscar_write_check/layer1.vasp deleted: _tmp_poscar_write_check/layer2.vasp deleted: _tmp_poscar_write_check/layer3.vasp modified: dataset/fullerenes/fullerene_xyz/analysis_20260122/structures.csv new file: fullerene_diffusion_poc/README.md new file: fullerene_diffusion_poc/api.py new file: fullerene_diffusion_poc/checkpoints/best_model.pt new file: fullerene_diffusion_poc/checkpoints/checkpoint_epoch_10.pt new file: fullerene_diffusion_poc/checkpoints/checkpoint_epoch_20.pt new file: fullerene_diffusion_poc/config.yaml new file: fullerene_diffusion_poc/dataset.py new file: fullerene_diffusion_poc/diffusion_utils.py new file: fullerene_diffusion_poc/evaluate.py new file: fullerene_diffusion_poc/generate.py new file: fullerene_diffusion_poc/generated/C60_sample_000.xyz new file: fullerene_diffusion_poc/generated/C60_sample_001.xyz new file: fullerene_diffusion_poc/generated/C60_sample_002.xyz new file: fullerene_diffusion_poc/generated/C60_sample_003.xyz new file: fullerene_diffusion_poc/generated/C60_sample_004.xyz new file: fullerene_diffusion_poc/generated/C60_sample_005.xyz new file: fullerene_diffusion_poc/generated/C60_sample_006.xyz new file: fullerene_diffusion_poc/generated/C60_sample_007.xyz new file: fullerene_diffusion_poc/generated/C60_sample_008.xyz new file: fullerene_diffusion_poc/generated/C60_sample_009.xyz new file: fullerene_diffusion_poc/generated/C60_sample_010.xyz new file: fullerene_diffusion_poc/generated/C60_sample_011.xyz new file: fullerene_diffusion_poc/generated/C60_sample_012.xyz new file: fullerene_diffusion_poc/generated/C60_sample_013.xyz new file: fullerene_diffusion_poc/generated/C60_sample_014.xyz new file: fullerene_diffusion_poc/generated/C60_sample_015.xyz new file: fullerene_diffusion_poc/generated/C60_sample_016.xyz new file: fullerene_diffusion_poc/generated/C60_sample_017.xyz new file: fullerene_diffusion_poc/generated/C60_sample_018.xyz new file: fullerene_diffusion_poc/generated/C60_sample_019.xyz new file: fullerene_diffusion_poc/generated/C60_sample_020.xyz new file: fullerene_diffusion_poc/generated/C60_sample_021.xyz new file: fullerene_diffusion_poc/generated/C60_sample_022.xyz new file: fullerene_diffusion_poc/generated/C60_sample_023.xyz new file: fullerene_diffusion_poc/generated/C60_sample_024.xyz new file: fullerene_diffusion_poc/generated/C60_sample_025.xyz new file: fullerene_diffusion_poc/generated/C60_sample_026.xyz new file: fullerene_diffusion_poc/generated/C60_sample_027.xyz new file: fullerene_diffusion_poc/generated/C60_sample_028.xyz new file: fullerene_diffusion_poc/generated/C60_sample_029.xyz new file: fullerene_diffusion_poc/generated/C60_sample_030.xyz new file: fullerene_diffusion_poc/generated/C60_sample_031.xyz new file: fullerene_diffusion_poc/generated/C60_sample_032.xyz new file: fullerene_diffusion_poc/generated/C60_sample_033.xyz new file: fullerene_diffusion_poc/generated/C60_sample_034.xyz new file: fullerene_diffusion_poc/generated/C60_sample_035.xyz new file: fullerene_diffusion_poc/generated/C60_sample_036.xyz new file: fullerene_diffusion_poc/generated/C60_sample_037.xyz new file: fullerene_diffusion_poc/generated/C60_sample_038.xyz new file: fullerene_diffusion_poc/generated/C60_sample_039.xyz new file: fullerene_diffusion_poc/generated/C60_sample_040.xyz new file: fullerene_diffusion_poc/generated/C60_sample_041.xyz new file: fullerene_diffusion_poc/generated/C60_sample_042.xyz new file: fullerene_diffusion_poc/generated/C60_sample_043.xyz new file: fullerene_diffusion_poc/generated/C60_sample_044.xyz new file: fullerene_diffusion_poc/generated/C60_sample_045.xyz new file: fullerene_diffusion_poc/generated/C60_sample_046.xyz new file: fullerene_diffusion_poc/generated/C60_sample_047.xyz new file: fullerene_diffusion_poc/generated/C60_sample_048.xyz new file: fullerene_diffusion_poc/generated/C60_sample_049.xyz new file: fullerene_diffusion_poc/generated/evaluation_comprehensive.png new file: fullerene_diffusion_poc/model.py new file: fullerene_diffusion_poc/requirements.txt new file: fullerene_diffusion_poc/server.py new file: fullerene_diffusion_poc/train.py modified: interfaceml/__pycache__/__init__.cpython-38.pyc modified: interfaceml/core/__pycache__/__init__.cpython-38.pyc modified: interfaceml/core/__pycache__/io.cpython-38.pyc modified: interfaceml/core/__pycache__/layering.cpython-38.pyc modified: interfaceml/web/app.py modified: interfaceml/web/static/css/style.css modified: interfaceml/web/static/js/app.js modified: interfaceml/web/templates/index.html
deleted: fullerene_diffusion_poc/checkpoints/best_model.pt deleted: fullerene_diffusion_poc/checkpoints/checkpoint_epoch_10.pt deleted: fullerene_diffusion_poc/checkpoints/checkpoint_epoch_20.pt modified: fullerene_diffusion_poc/config.yaml modified: fullerene_diffusion_poc/generate.py deleted: fullerene_diffusion_poc/generated/C60_sample_000.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_001.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_002.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_003.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_004.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_005.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_006.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_007.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_008.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_009.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_010.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_011.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_012.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_013.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_014.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_015.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_016.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_017.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_018.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_019.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_020.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_021.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_022.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_023.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_024.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_025.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_026.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_027.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_028.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_029.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_030.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_031.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_032.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_033.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_034.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_035.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_036.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_037.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_038.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_039.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_040.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_041.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_042.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_043.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_044.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_045.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_046.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_047.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_048.xyz deleted: fullerene_diffusion_poc/generated/C60_sample_049.xyz new file: fullerene_diffusion_poc/generated/epoch_10/C60_sample_000.xyz new file: fullerene_diffusion_poc/generated/epoch_10/C60_sample_001.xyz new file: fullerene_diffusion_poc/generated/epoch_10/C60_sample_002.xyz new file: fullerene_diffusion_poc/generated/epoch_10/C60_sample_003.xyz new file: fullerene_diffusion_poc/generated/epoch_10/C60_sample_004.xyz new file: fullerene_diffusion_poc/generated/epoch_10/metrics.json new file: fullerene_diffusion_poc/generated/epoch_20/C60_sample_000.xyz new file: fullerene_diffusion_poc/generated/epoch_20/C60_sample_001.xyz new file: fullerene_diffusion_poc/generated/epoch_20/C60_sample_002.xyz new file: fullerene_diffusion_poc/generated/epoch_20/C60_sample_003.xyz new file: fullerene_diffusion_poc/generated/epoch_20/C60_sample_004.xyz new file: fullerene_diffusion_poc/generated/epoch_20/metrics.json new file: fullerene_diffusion_poc/generated/epoch_30/C60_sample_000.xyz new file: fullerene_diffusion_poc/generated/epoch_30/C60_sample_001.xyz new file: fullerene_diffusion_poc/generated/epoch_30/C60_sample_002.xyz new file: fullerene_diffusion_poc/generated/epoch_30/C60_sample_003.xyz new file: fullerene_diffusion_poc/generated/epoch_30/C60_sample_004.xyz new file: fullerene_diffusion_poc/generated/epoch_30/metrics.json new file: fullerene_diffusion_poc/generated/epoch_40/C60_sample_000.xyz new file: fullerene_diffusion_poc/generated/epoch_40/C60_sample_001.xyz new file: fullerene_diffusion_poc/generated/epoch_40/C60_sample_002.xyz new file: fullerene_diffusion_poc/generated/epoch_40/C60_sample_003.xyz new file: fullerene_diffusion_poc/generated/epoch_40/C60_sample_004.xyz new file: fullerene_diffusion_poc/generated/epoch_40/metrics.json new file: fullerene_diffusion_poc/generated/epoch_50/C60_sample_000.xyz new file: fullerene_diffusion_poc/generated/epoch_50/C60_sample_001.xyz new file: fullerene_diffusion_poc/generated/epoch_50/C60_sample_002.xyz new file: fullerene_diffusion_poc/generated/epoch_50/C60_sample_003.xyz new file: fullerene_diffusion_poc/generated/epoch_50/C60_sample_004.xyz new file: fullerene_diffusion_poc/generated/epoch_50/metrics.json modified: fullerene_diffusion_poc/model.py new file: fullerene_diffusion_poc/monitor_training.py new file: fullerene_diffusion_poc/run_complete_pipeline.py modified: fullerene_diffusion_poc/train.py new file: fullerene_diffusion_poc/training_log.txt
modified: INTEGRATION_GUIDE.md modified: QUICK_START.md modified: README.md modified: START_HERE.md modified: build_heterojunctions/README.md deleted: build_heterojunctions/__pycache__/__init__.cpython-313.pyc deleted: build_heterojunctions/__pycache__/_utils_layering.cpython-313.pyc deleted: build_heterojunctions/__pycache__/_utils_structures.cpython-313.pyc deleted: build_heterojunctions/__pycache__/_utils_xyz.cpython-313.pyc deleted: build_heterojunctions/__pycache__/auto_interface_builder.cpython-310.pyc deleted: build_heterojunctions/__pycache__/auto_interface_builder.cpython-313.pyc deleted: build_heterojunctions/__pycache__/delta_density_cube.cpython-313.pyc deleted: build_heterojunctions/__pycache__/fix_interface_layers.cpython-313.pyc deleted: build_heterojunctions/__pycache__/fixed_atoms_from_xyz.cpython-313.pyc deleted: build_heterojunctions/__pycache__/interface_builder.cpython-313.pyc modified: build_heterojunctions/_utils_layering.py modified: build_heterojunctions/_utils_structures.py modified: build_heterojunctions/_utils_xyz.py new file: build_heterojunctions/batch_adsorbate_builder.py modified: build_heterojunctions/fix_interface_layers.py modified: docs/DOS_PHYSICS_EXPLANATION.md modified: docs/GETTING_STARTED.md new file: docs/HIGH_THROUGHPUT_WORKFLOW.md modified: docs/LAYER_SPLITTING.md new file: docs/MATHEMATICAL_OVERVIEW.md modified: docs/SMART_SPLITTING_ALGORITHM.md modified: interfaceml/__pycache__/__init__.cpython-313.pyc modified: interfaceml/__pycache__/__init__.cpython-38.pyc new file: interfaceml/ai/__init__.py new file: interfaceml/ai/interface_generator.py new file: interfaceml/ai/local_gnn.py modified: interfaceml/core/__init__.py modified: interfaceml/core/__pycache__/__init__.cpython-313.pyc modified: interfaceml/core/__pycache__/__init__.cpython-38.pyc modified: interfaceml/core/__pycache__/io.cpython-313.pyc modified: interfaceml/core/__pycache__/io.cpython-38.pyc modified: interfaceml/core/__pycache__/layering.cpython-313.pyc modified: interfaceml/core/__pycache__/layering.cpython-38.pyc new file: interfaceml/core/adsorbate.py deleted: interfaceml/utils/__pycache__/__init__.cpython-313.pyc deleted: interfaceml/utils/__pycache__/geometry.cpython-313.pyc deleted: interfaceml/web/__pycache__/app.cpython-313.pyc new file: interfaceml/web/ai.py modified: interfaceml/web/app.py new file: interfaceml/web/core.py new file: interfaceml/web/dos.py new file: interfaceml/web/routes/__init__.py new file: interfaceml/web/routes/ai_routes.py new file: interfaceml/web/routes/common.py new file: interfaceml/web/routes/dos_routes.py new file: interfaceml/web/routes/interface.py new file: interfaceml/web/static/css/docs.css modified: interfaceml/web/static/css/style.css modified: interfaceml/web/static/js/app.js new file: interfaceml/web/static/js/docs.js new file: interfaceml/web/templates/docs.html modified: interfaceml/web/templates/index.html new file: interfaceml/web/utils.py deleted: relax_slab/.DS_Store modified: setup.py deleted: structures/.DS_Store deleted: structures/etl/.DS_Store deleted: structures/heterojunctions/.DS_Store deleted: structures/perovskites/.DS_Store modified: templates/README_templates.md new file: tests/conftest.py new file: tests/test_web_health.py
…T → retrain Implements a 5-phase pipeline that connects the fullerene/perovskite generative models with the batch interface builder and CP2K DFT calculations. The pipeline generates structures, builds interfaces, prepares CP2K inputs + SLURM scripts (user submits manually), then parses DFT results and prepares retraining data. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
new file: .github/workflows/ci.yml modified: INTEGRATION_GUIDE.md modified: README.md modified: build_heterojunctions/batch_adsorbate_builder.py modified: build_heterojunctions/expand_cif_cell.py modified: build_heterojunctions/fix_interface_layers.py modified: build_heterojunctions/interface_builder.py modified: build_heterojunctions/stack_slabs_relax.py modified: docs/HIGH_THROUGHPUT_WORKFLOW.md new file: docs/figures/ai_painn_flow_interface_prostyle.py deleted: fullerene_diffusion_poc/VERSION deleted: fullerene_diffusion_poc/config.yaml deleted: fullerene_diffusion_poc/generate.py deleted: fullerene_diffusion_poc/model.py deleted: fullerene_diffusion_poc/train.py renamed: fullerene_diffusion_poc/.gitignore -> fullerene_e3gen/.gitignore renamed: fullerene_diffusion_poc/CHANGELOG.md -> fullerene_e3gen/CHANGELOG.md renamed: fullerene_diffusion_poc/README.md -> fullerene_e3gen/README.md new file: fullerene_e3gen/VERSION new file: fullerene_e3gen/_check_training.py new file: fullerene_e3gen/_diagnose_interface.py renamed: fullerene_diffusion_poc/api.py -> fullerene_e3gen/api.py new file: fullerene_e3gen/checkpoints/archive_v1_jan31/best_model.pt new file: fullerene_e3gen/checkpoints/archive_v1_jan31/checkpoint_epoch_10.pt new file: fullerene_e3gen/checkpoints/archive_v1_jan31/checkpoint_epoch_100.pt new file: fullerene_e3gen/checkpoints/archive_v1_jan31/checkpoint_epoch_110.pt new file: fullerene_e3gen/checkpoints/archive_v1_jan31/checkpoint_epoch_120.pt new file: fullerene_e3gen/checkpoints/archive_v1_jan31/checkpoint_epoch_130.pt new file: fullerene_e3gen/checkpoints/archive_v1_jan31/checkpoint_epoch_140.pt new file: fullerene_e3gen/checkpoints/archive_v1_jan31/checkpoint_epoch_150.pt new file: fullerene_e3gen/checkpoints/archive_v1_jan31/checkpoint_epoch_20.pt new file: fullerene_e3gen/checkpoints/archive_v1_jan31/checkpoint_epoch_30.pt new file: fullerene_e3gen/checkpoints/archive_v1_jan31/checkpoint_epoch_40.pt new file: fullerene_e3gen/checkpoints/archive_v1_jan31/checkpoint_epoch_50.pt new file: fullerene_e3gen/checkpoints/archive_v1_jan31/checkpoint_epoch_60.pt new file: fullerene_e3gen/checkpoints/archive_v1_jan31/checkpoint_epoch_70.pt new file: fullerene_e3gen/checkpoints/archive_v1_jan31/checkpoint_epoch_80.pt new file: fullerene_e3gen/checkpoints/archive_v1_jan31/checkpoint_epoch_90.pt new file: fullerene_e3gen/checkpoints/archive_v1_jan31/topology_gnn.pt new file: fullerene_e3gen/checkpoints/archive_v4_collapsed/best_model.pt new file: fullerene_e3gen/checkpoints/archive_v4_collapsed/checkpoint_epoch_100.pt new file: fullerene_e3gen/checkpoints/archive_v4_collapsed/checkpoint_epoch_150.pt new file: fullerene_e3gen/checkpoints/archive_v4_collapsed/checkpoint_epoch_200.pt new file: fullerene_e3gen/checkpoints/archive_v4_collapsed/checkpoint_epoch_250.pt new file: fullerene_e3gen/checkpoints/archive_v4_collapsed/checkpoint_epoch_300.pt new file: fullerene_e3gen/checkpoints/archive_v4_collapsed/checkpoint_epoch_350.pt new file: fullerene_e3gen/checkpoints/archive_v4_collapsed/checkpoint_epoch_400.pt new file: fullerene_e3gen/checkpoints/archive_v4_collapsed/checkpoint_epoch_450.pt new file: fullerene_e3gen/checkpoints/archive_v4_collapsed/checkpoint_epoch_50.pt new file: fullerene_e3gen/checkpoints/archive_v4_collapsed/checkpoint_epoch_500.pt new file: fullerene_e3gen/checkpoints/archive_v5_no_learning/best_model.pt new file: fullerene_e3gen/checkpoints/archive_v6_invariant_bug/best_model.pt new file: fullerene_e3gen/checkpoints/archive_v6_invariant_bug/checkpoint_epoch_100.pt new file: fullerene_e3gen/checkpoints/archive_v6_invariant_bug/checkpoint_epoch_150.pt new file: fullerene_e3gen/checkpoints/archive_v6_invariant_bug/checkpoint_epoch_50.pt new file: fullerene_e3gen/checkpoints/painn_fm/best_model.pt new file: fullerene_e3gen/checkpoints/painn_fm/checkpoint_epoch_100.pt new file: fullerene_e3gen/checkpoints/painn_fm/checkpoint_epoch_150.pt new file: fullerene_e3gen/checkpoints/painn_fm/checkpoint_epoch_200.pt new file: fullerene_e3gen/checkpoints/painn_fm/checkpoint_epoch_250.pt new file: fullerene_e3gen/checkpoints/painn_fm/checkpoint_epoch_300.pt new file: fullerene_e3gen/checkpoints/painn_fm/checkpoint_epoch_50.pt new file: fullerene_e3gen/config.yaml new file: fullerene_e3gen/config_finetune.yaml new file: fullerene_e3gen/config_painn_fm.yaml new file: fullerene_e3gen/config_v2.yaml renamed: fullerene_diffusion_poc/dataset.py -> fullerene_e3gen/dataset.py new file: fullerene_e3gen/diagnose_v6.py renamed: fullerene_diffusion_poc/diffusion_utils.py -> fullerene_e3gen/diffusion_utils.py renamed: fullerene_diffusion_poc/docs/QUICKSTART_V3.md -> fullerene_e3gen/docs/QUICKSTART_V3.md renamed: fullerene_diffusion_poc/docs/architecture.md -> fullerene_e3gen/docs/architecture.md renamed: fullerene_diffusion_poc/docs/archive/COMPLETE_ANALYSIS.md -> fullerene_e3gen/docs/archive/COMPLETE_ANALYSIS.md renamed: fullerene_diffusion_poc/docs/archive/CRITICAL_FIX_NORMALIZATION.md -> fullerene_e3gen/docs/archive/CRITICAL_FIX_NORMALIZATION.md renamed: fullerene_diffusion_poc/docs/archive/DIAGNOSIS_SUMMARY.md -> fullerene_e3gen/docs/archive/DIAGNOSIS_SUMMARY.md renamed: fullerene_diffusion_poc/docs/archive/FINAL_RECOMMENDATIONS.md -> fullerene_e3gen/docs/archive/FINAL_RECOMMENDATIONS.md renamed: fullerene_diffusion_poc/docs/archive/FINAL_STATUS_REPORT.md -> fullerene_e3gen/docs/archive/FINAL_STATUS_REPORT.md renamed: fullerene_diffusion_poc/docs/archive/geometry_optimization_guide.md -> fullerene_e3gen/docs/archive/geometry_optimization_guide.md renamed: fullerene_diffusion_poc/docs/archive/improvements_v3.md -> fullerene_e3gen/docs/archive/improvements_v3.md renamed: fullerene_diffusion_poc/docs/archive/training_report_20260130.md -> fullerene_e3gen/docs/archive/training_report_20260130.md renamed: fullerene_diffusion_poc/evaluate.py -> fullerene_e3gen/evaluate.py new file: fullerene_e3gen/flow_matching.py new file: fullerene_e3gen/generate.py new file: fullerene_e3gen/model.py new file: fullerene_e3gen/model_painn.py renamed: fullerene_diffusion_poc/monitor_training.py -> fullerene_e3gen/monitor_training.py renamed: fullerene_diffusion_poc/requirements.txt -> fullerene_e3gen/requirements.txt renamed: fullerene_diffusion_poc/server.py -> fullerene_e3gen/server.py renamed: fullerene_diffusion_poc/synthetic_topology.py -> fullerene_e3gen/synthetic_topology.py renamed: fullerene_diffusion_poc/template_bank.py -> fullerene_e3gen/template_bank.py renamed: fullerene_diffusion_poc/templates/generate_templates.py -> fullerene_e3gen/templates/generate_templates.py renamed: fullerene_diffusion_poc/topology_gnn.py -> fullerene_e3gen/topology_gnn.py renamed: fullerene_diffusion_poc/topology_loss_v2.py -> fullerene_e3gen/topology_loss_v2.py new file: fullerene_e3gen/train.py renamed: fullerene_diffusion_poc/train_topology_gnn.py -> fullerene_e3gen/train_topology_gnn.py new file: fullerene_e3gen/tune_guidance.py renamed: fullerene_diffusion_poc/units.py -> fullerene_e3gen/units.py new file: fullerene_e3gen/validate_output.py new file: fullerene_e3gen/validate_v7.py renamed: fullerene_diffusion_poc/validate_xyz.py -> fullerene_e3gen/validate_xyz.py deleted: interfaceml/__pycache__/__init__.cpython-313.pyc deleted: interfaceml/__pycache__/__init__.cpython-38.pyc modified: interfaceml/ai/interface_generator.py modified: interfaceml/ai/local_gnn.py deleted: interfaceml/core/__pycache__/__init__.cpython-313.pyc deleted: interfaceml/core/__pycache__/__init__.cpython-38.pyc deleted: interfaceml/core/__pycache__/io.cpython-313.pyc deleted: interfaceml/core/__pycache__/io.cpython-38.pyc deleted: interfaceml/core/__pycache__/layering.cpython-313.pyc deleted: interfaceml/core/__pycache__/layering.cpython-38.pyc modified: interfaceml/core/adsorbate.py modified: interfaceml/utils/geometry.py modified: interfaceml/utils/performance.py modified: interfaceml/web/ai.py modified: interfaceml/web/app.py modified: interfaceml/web/routes/ai_routes.py modified: interfaceml/web/static/css/style.css modified: interfaceml/web/static/js/app.js new file: interfaceml/web/tasks.py modified: interfaceml/web/templates/index.html new file: perovskite_e3gen/__init__.py new file: perovskite_e3gen/api.py new file: perovskite_e3gen/config.yaml new file: perovskite_e3gen/dataset.py new file: perovskite_e3gen/evaluate.py new file: perovskite_e3gen/flow_matching.py new file: perovskite_e3gen/generate.py new file: perovskite_e3gen/model.py new file: perovskite_e3gen/physics_loss.py new file: perovskite_e3gen/train.py new file: perovskite_e3gen/units.py new file: pyproject.toml modified: setup.py modified: start_web.sh new file: tests/test_core_adsorbate.py new file: tests/test_core_io.py new file: tests/test_generate_utils.py new file: tests/test_geometry.py new file: tests/test_model_and_diffusion.py new file: tests/test_performance.py new file: tests/test_validation.py modified: tests/test_web_health.py
new file: fullerene_diffusion_poc/README.md new file: fullerene_diffusion_poc/VERSION new file: fullerene_diffusion_poc/api.py new file: fullerene_diffusion_poc/config.yaml new file: fullerene_diffusion_poc/generate.py new file: fullerene_diffusion_poc/model.py new file: fullerene_diffusion_poc/synthetic_topology.py new file: fullerene_diffusion_poc/topology_gnn.py new file: fullerene_diffusion_poc/topology_loss_v2.py new file: fullerene_diffusion_poc/train.py new file: fullerene_diffusion_poc/train_topology_gnn.py
Add interface construction, DFT preparation, and research containers
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 131e91a36e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| sys.path.insert(0, str(Path(__file__).resolve().parent.parent / "perovskite_e3gen")) | ||
| from api import PerovskiteAPI |
There was a problem hiding this comment.
Import the perovskite API under a distinct module name
The normal generate_round order imports the fullerene implementation first, which registers fullerene_e3gen/api.py as sys.modules["api"]. Inserting perovskite_e3gen at the front of sys.path here does not replace that cached module, so this import looks for PerovskiteAPI in the fullerene module and raises ImportError before any perovskite structures or interfaces can be generated. Use package-qualified imports or load each implementation under a unique module name.
Useful? React with 👍 / 👎.
| checkpoint: "fullerene_e3gen/checkpoints/best_model.pt" | ||
| C_values: [60, 70, 80] # Carbon counts to generate | ||
| num_samples_per_C: 5 | ||
| perovskite: | ||
| checkpoint: "perovskite_e3gen/checkpoints/best_model.pt" |
There was a problem hiding this comment.
Point the active-learning defaults at available checkpoints
A stock python -m active_learning run passes these exact paths to FullereneAPI and PerovskiteAPI, but neither fullerene_e3gen/checkpoints/best_model.pt nor any perovskite_e3gen/checkpoints/best_model.pt is included in this commit. The generation phase therefore fails with a missing-checkpoint error before the workflow can produce components; ship the intended models, select the tracked PaiNN checkpoint where appropriate, or make the required external checkpoint locations explicit and configurable.
Useful? React with 👍 / 👎.
Promotes the accumulated development work to
main, adding AI component generation, active-learning orchestration, coherent interface construction, and CP2K/SLURM preparation to the research workflow. Provides a reproducible ARM64 CPU environment with InterfaceML Web, JupyterLab, and a persistent research workspace.The release also includes the earlier fullerene/perovskite model work, web and batch interface refactoring, packaging fixes, documentation updates, and lint/format cleanup. Coherent interface construction preserves site metadata and termination ordering; DFT preparation retains fixed-atom constraints and returns actionable failures.
Scope
develat131e91a36e4dbda67c7eb15cbe62a91cdcf8f41c; base:mainat67a4bf51346eaa6a0dbcdf25cc0dec5cd323edad.devel, one dataset CSV update, and removal of tracked caches and temporary files. Those historical assets are part of this release scope.Validation
645ff74c3038e123ddb163e19107d6d0a2cb3e2a.main.Validation Limits
continue-on-error); a successful workflow does not establish a clean type-check result.