skempi-foldx 0.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- skempi_foldx-0.2.2/CHANGELOG.md +636 -0
- skempi_foldx-0.2.2/CITATION.cff +155 -0
- skempi_foldx-0.2.2/CONTRIBUTING.md +163 -0
- skempi_foldx-0.2.2/LICENSE +21 -0
- skempi_foldx-0.2.2/MANIFEST.in +32 -0
- skempi_foldx-0.2.2/NOTICE +88 -0
- skempi_foldx-0.2.2/PKG-INFO +500 -0
- skempi_foldx-0.2.2/README.md +464 -0
- skempi_foldx-0.2.2/docs/DETERMINISM.md +360 -0
- skempi_foldx-0.2.2/docs/PROTOCOL.md +88 -0
- skempi_foldx-0.2.2/docs/REFERENCES.md +198 -0
- skempi_foldx-0.2.2/docs/STORE.md +328 -0
- skempi_foldx-0.2.2/docs/USAGE.md +387 -0
- skempi_foldx-0.2.2/docs/VERSIONS.md +366 -0
- skempi_foldx-0.2.2/docs/assets/STORE_COMPOSITION.txt +73 -0
- skempi_foldx-0.2.2/docs/assets/VERSION_COMPARE.txt +182 -0
- skempi_foldx-0.2.2/docs/assets/store_composition.png +0 -0
- skempi_foldx-0.2.2/docs/assets/version_compare.png +0 -0
- skempi_foldx-0.2.2/docs/assets/version_compare_matrix.png +0 -0
- skempi_foldx-0.2.2/experiments/agreement_stats.py +196 -0
- skempi_foldx-0.2.2/experiments/backfill_role_names.py +172 -0
- skempi_foldx-0.2.2/experiments/build_per_definition_store.py +310 -0
- skempi_foldx-0.2.2/experiments/compare_versions.py +844 -0
- skempi_foldx-0.2.2/experiments/coverage_report.py +188 -0
- skempi_foldx-0.2.2/experiments/recompute_alternate_interfaces.py +214 -0
- skempi_foldx-0.2.2/experiments/repair_ablation.py +493 -0
- skempi_foldx-0.2.2/experiments/repair_convergence.py +117 -0
- skempi_foldx-0.2.2/experiments/repair_sweep/README.md +147 -0
- skempi_foldx-0.2.2/experiments/repair_sweep/chain_finalize.sh +93 -0
- skempi_foldx-0.2.2/experiments/repair_sweep/launch_sweep.sh +36 -0
- skempi_foldx-0.2.2/experiments/repair_sweep/list_hashes.py +204 -0
- skempi_foldx-0.2.2/experiments/repair_sweep/residue_check.py +134 -0
- skempi_foldx-0.2.2/experiments/repair_sweep/sweep_mp.py +209 -0
- skempi_foldx-0.2.2/experiments/store_composition.py +571 -0
- skempi_foldx-0.2.2/pyproject.toml +78 -0
- skempi_foldx-0.2.2/setup.cfg +4 -0
- skempi_foldx-0.2.2/skempi_foldx/__init__.py +107 -0
- skempi_foldx-0.2.2/skempi_foldx/config.py +163 -0
- skempi_foldx-0.2.2/skempi_foldx/data/CONSOLIDATION_REPORT.txt +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/corrections_from_0_1_0.csv +32 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1A22_A_B.json +610 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1A4Y_A_B.json +226 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1AHW_AB_C.json +137 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1AK4_A_D.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1AO7_ABC_DE.json +969 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1B2S_A_D.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1B2U_A_D.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1B3S_A_D.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1B41_A_B.json +50 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1BD2_ABC_DE.json +136 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1BJ1_HL_VW.json +222 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1BP3_A_B.json +242 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1BRS_A_D.json +781 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1C1Y_A_B.json +66 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1C4Z_ABC_D.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1CHO_EFG_I.json +1446 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1CZ8_HL_VW.json +290 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1DAN_HL_UT.json +511 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1DQJ_AB_C.json +239 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1DVF_AB_CD.json +239 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1E50_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1EFN_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1EMV_A_B.json +226 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1FCC_A_C.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1FSS_A_B.json +82 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1GC1_G_C.json +52 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1GL0_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1GL1_A_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1GUA_A_B.json +66 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1HE8_A_B.json +242 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1JRH_LH_I.json +222 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1JTG_A_B.json +2194 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1K8R_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1KNE_A_P.json +578 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1LFD_A_B.json +514 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1MAH_A_F.json +82 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1MHP_HL_A.json +460 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1MLC_AB_E.json +289 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1MQ8_A_B.json +130 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1N8Z_AB_C.json +68 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1OHZ_A_B.json +98 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1PPF_E_I.json +970 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1QAB_ABCD_E.json +222 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1R0R_E_I.json +1310 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1REW_AB_C.json +443 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1SBB_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1TM1_E_I.json +86 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1VFB_AB_C.json +256 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1WQJ_I_B.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1XXM_A_C.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1Y4A_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1YCS_A_B.json +146 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1YQV_HL_Y.json +52 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1YY9_CD_A.json +69 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/1Z7X_W_X.json +86 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/2ABZ_B_E.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/2B2X_HL_A.json +1565 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/2C5D_AB_CD.json +341 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/2C5D_A_C.json +222 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/2CCL_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/2DVW_A_B.json +114 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/2G2U_A_B.json +306 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/2J0T_A_D.json +137 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/2KSO_A_B.json +178 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/2NOJ_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/2NY7_HL_G.json +205 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/2NYY_DC_A.json +52 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/2NZ9_DC_A.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/2O3B_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/2OOB_A_B.json +82 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/2P5E_ABC_DE.json +86 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/2PCC_A_B.json +114 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/2PYE_ABC_DE.json +103 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/2QJ9_AB_C.json +69 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/2QJA_AB_C.json +69 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/2QJB_AB_C.json +69 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/2VN5_A_B.json +402 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/2WPT_A_B.json +322 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3AAA_AB_C.json +82 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3BDY_HL_V.json +120 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3BE1_HL_A.json +137 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3BIW_A_E.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3BP8_A_C.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3D3V_ABC_DE.json +69 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3EG5_A_B.json +50 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3G6D_LH_A.json +137 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3HFM_HL_Y.json +460 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3HG1_ABC_DE.json +834 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3IDX_HL_G.json +205 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3KUD_A_B.json +258 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3L5X_A_HL.json +596 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3LZF_AB_HL.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3M63_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3MZG_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3MZW_A_B.json +370 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3NGB_HL_G.json +86 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3PWP_ABC_DE.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3QDG_ABC_DE.json +52 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3QDJ_ABC_DE.json +52 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3QIB_ABP_CD.json +52 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3S9D_A_B.json +994 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3SE3_B_A.json +528 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3SE3_B_C.json +52 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3SE4_B_C.json +52 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3SF4_A_D.json +51 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3SGB_E_I.json +1514 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3U82_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3UIG_A_P.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3UIH_A_P.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3UII_A_P.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/3VR6_ABCDEF_GH.json +222 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4B0M_A_BM.json +68 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4CPA_A_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4CVW_A_C.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4E6K_AB_G.json +86 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4FTV_ABC_DE.json +170 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4FZA_A_B.json +50 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4G0N_A_B.json +690 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4G2V_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4GNK_A_B.json +66 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4GU0_A_E.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4GXU_ABCDEF_MN.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4J2L_A_CD.json +82 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4JEU_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4JFD_ABC_DE.json +120 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4JFE_ABC_DE.json +120 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4JPK_HL_A.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4K71_A_BC.json +162 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4KRL_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4KRO_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4KRP_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4L3E_ABC_DE.json +120 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4MNQ_ABC_DE.json +273 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4MYW_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4N8V_G_ABC.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4NKQ_C_AB.json +290 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4OFY_A_D.json +50 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4RA0_A_C.json +137 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4RS1_A_B.json +226 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4UYP_A_D.json +171 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4UYQ_A_B.json +162 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4WND_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4X4M_AB_E.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4Y61_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4YFD_A_B.json +66 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/4YH7_A_B.json +66 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/5C6T_HL_A.json +103 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/5CYK_A_B.json +66 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/5E9D_AB_CDE.json +154 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/5M2O_A_B.json +146 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/5TAR_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/5UFE_A_B.json +66 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/5UFQ_A_C.json +52 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_mp/5XCO_A_B.json +306 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1A22_A_B.json +2290 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1A4Y_A_B.json +530 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1ACB_E_I.json +120 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1AHW_AB_C.json +171 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1AK4_A_D.json +290 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1AO7_ABC_DE.json +1601 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1B2S_A_D.json +51 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1B2U_A_D.json +51 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1B3S_A_D.json +51 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1B41_A_B.json +386 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1BD2_ABC_DE.json +186 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1BJ1_HL_VW.json +188 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1BP3_A_B.json +738 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1BRS_A_D.json +507 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1C1Y_A_B.json +258 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1C4Z_ABC_D.json +812 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1CBW_FGH_I.json +545 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1CHO_EFG_I.json +3265 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1CSE_E_I.json +120 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1CSO_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1CT0_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1CT2_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1CT4_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1CZ8_HL_VW.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1DAN_HL_UT.json +1531 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1DQJ_AB_C.json +370 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1DVF_AB_CD.json +454 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1E50_A_B.json +274 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1E96_A_B.json +114 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1EAW_A_B.json +450 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1EFN_A_B.json +50 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1EMV_A_B.json +754 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1F47_A_B.json +210 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1F5R_A_I.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1FC2_C_D.json +324 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1FCC_A_C.json +154 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1FFW_A_B.json +322 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1FR2_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1FSS_A_B.json +386 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1FY8_E_I.json +52 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1GC1_G_C.json +1123 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1GCQ_AB_C.json +137 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1GL0_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1GL1_A_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1GRN_A_B.json +50 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1GUA_A_B.json +210 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1H9D_A_B.json +114 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1HE8_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1IAR_A_B.json +658 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1JCK_A_B.json +178 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1JRH_LH_I.json +749 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1JTD_A_B.json +594 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1JTG_A_B.json +946 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1K8R_A_B.json +322 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1KAC_A_B.json +50 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1KIP_AB_C.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1KIQ_AB_C.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1KIR_AB_C.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1KNE_A_P.json +230 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1KTZ_A_B.json +450 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1LFD_A_B.json +626 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1LP9_ABC_EF.json +66 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1M9E_A_D.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1MAH_A_F.json +162 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1MHP_HL_A.json +1174 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1MI5_ABC_DE.json +681 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1MLC_AB_E.json +202 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1N8O_ABC_E.json +69 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1N8Z_AB_C.json +219 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1NCA_N_LH.json +86 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1NMB_N_LH.json +154 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1OGA_ABC_DE.json +808 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1P69_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1P6A_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1PPF_E_I.json +3248 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1QRN_ABC_DE.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1QSE_ABC_DE.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1QSF_ABC_DE.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1R0R_E_I.json +3265 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1REW_AB_C.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1S0W_A_C.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1S1Q_A_B.json +114 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1SBB_A_B.json +66 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1SBN_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1SGD_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1SGE_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1SGN_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1SGP_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1SGQ_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1SGY_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1SIB_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1SMF_E_I.json +103 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1TM1_E_I.json +307 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1TM3_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1TM4_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1TM5_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1TM7_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1TMG_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1TO1_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1U7F_B_AC.json +52 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1UUZ_A_D.json +98 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1VFB_AB_C.json +837 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1WQJ_I_B.json +86 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1X1W_A_D.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1X1X_A_D.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1XD3_A_B.json +306 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1XGP_AB_C.json +86 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1XGQ_AB_C.json +86 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1XGR_AB_C.json +86 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1XGT_AB_C.json +86 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1XGU_AB_C.json +86 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1Y1K_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1Y33_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1Y34_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1Y3B_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1Y3C_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1Y3D_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1Y48_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1YCS_A_B.json +66 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1YQV_HL_Y.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1YY9_CD_A.json +290 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/1Z7X_W_X.json +307 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2A9K_A_B.json +50 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2AJF_A_E.json +184 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2AK4_ABC_DE.json +586 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2AW2_A_B.json +66 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2B0U_AB_C.json +137 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2B0Z_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2B10_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2B11_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2B12_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2B2X_HL_A.json +69 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2B42_A_B.json +66 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2BDN_HL_A.json +222 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2BNQ_ABC_DE.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2BNR_ABC_DE.json +435 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2BTF_A_P.json +86 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2C0L_A_B.json +82 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2C5D_A_C.json +86 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2DSQ_I_G.json +86 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2DVW_A_B.json +98 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2E7L_EQ_AD.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2FTL_E_I.json +545 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2G2U_A_B.json +450 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2G2W_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2GOX_A_B.json +50 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2GYK_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2HLE_A_B.json +50 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2HRK_A_B.json +146 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2I26_N_L.json +52 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2J0T_A_D.json +290 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2J12_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2J1K_C_T.json +69 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2J8U_ABC_EF.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2JCC_ABC_EF.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2JEL_LH_P.json +766 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2KSO_A_B.json +98 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2NU0_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2NU1_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2NU2_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2NU4_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2NYY_DC_A.json +528 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2NZ9_DC_A.json +341 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2O3B_A_B.json +130 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2OI9_AQ_BC.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2OOB_A_B.json +66 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2P5E_ABC_DE.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2PCB_A_B.json +114 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2PCC_A_B.json +114 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2REX_A_B.json +66 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2SGP_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2SGQ_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2SIC_E_I.json +188 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2UWE_ABC_EF.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2VIR_AB_C.json +52 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2VIS_AB_C.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2VLN_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2VLO_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2VLP_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2VLQ_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2VLR_ABC_DE.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/2WPT_A_B.json +482 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3AAA_AB_C.json +199 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3B4V_AB_C.json +137 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3BK3_A_C.json +239 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3BN9_B_CD.json +613 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3BP8_A_C.json +51 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3BT1_A_U.json +4098 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3BTD_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3BTE_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3BTF_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3BTG_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3BTH_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3BTM_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3BTQ_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3BTT_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3BTW_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3BX1_A_C.json +137 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3C60_CD_AB.json +613 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3D3V_ABC_DE.json +86 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3D5R_A_C.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3D5S_A_C.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3EG5_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3EQS_A_B.json +178 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3EQY_A_C.json +205 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3F1S_A_B.json +130 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3G6D_LH_A.json +69 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3H9S_ABC_DE.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3HFM_HL_Y.json +1225 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3HG1_ABC_DE.json +103 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3HH2_AB_C.json +137 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3KBH_A_E.json +133 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3KUD_A_B.json +66 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3L5X_A_HL.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3LB6_A_C.json +82 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3LNZ_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3LZF_AB_HL.json +50 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3M62_A_B.json +338 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3M63_A_B.json +194 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3MZG_A_B.json +178 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3MZW_A_B.json +66 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3N06_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3N0P_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3N4I_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3N85_A_LH.json +171 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3NCB_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3NCC_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3NGB_HL_G.json +715 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3NPS_A_BC.json +450 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3NVN_B_A.json +86 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3NVQ_B_A.json +86 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3PWP_ABC_DE.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3Q3J_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3Q8D_A_E.json +194 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3QDG_ABC_DE.json +290 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3QDJ_ABC_DE.json +307 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3QFJ_ABC_DE.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3QHY_A_B.json +418 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3QIB_ABP_CD.json +437 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3R9A_AC_B.json +98 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3RF3_A_C.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3S9D_A_B.json +1314 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3SE3_B_A.json +307 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3SE4_B_A.json +324 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3SE4_B_C.json +273 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3SE8_HL_G.json +494 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3SE9_HL_G.json +443 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3SEK_B_C.json +137 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3SF4_A_D.json +101 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3SGB_E_I.json +3265 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3SZK_AB_C.json +375 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3TGK_E_I.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3U82_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3UIG_A_P.json +162 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3UII_A_P.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3VR6_ABCDEF_GH.json +120 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3W2D_A_HL.json +114 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/3WWN_A_B.json +66 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4B0M_A_BM.json +185 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4BFI_A_B.json +210 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4CPA_A_I.json +154 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4CVW_A_C.json +152 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4E6K_AB_G.json +69 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4EKD_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4FTV_ABC_DE.json +118 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4FZA_A_B.json +130 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4G0N_A_B.json +498 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4G2V_A_B.json +50 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4GNK_A_B.json +66 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4GXU_ABCDEF_MN.json +50 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4HFK_A_BD.json +147 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4HRN_A_D.json +86 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4HSA_AB_C.json +82 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4I77_HL_Z.json +222 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4J2L_A_CD.json +100 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4JEU_A_B.json +114 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4JFD_ABC_DE.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4JFE_ABC_DE.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4JFF_ABC_DE.json +137 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4JGH_ABC_D.json +35 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4JPK_HL_A.json +171 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4K71_A_BC.json +114 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4KRL_A_B.json +50 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4KRO_A_B.json +50 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4KRP_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4L0P_A_B.json +114 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4L3E_ABC_DE.json +134 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4LRX_AB_CD.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4MNQ_ABC_DE.json +52 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4MYW_A_B.json +34 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4N8V_G_ABC.json +222 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4NKQ_C_AB.json +613 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4NM8_ABCDEF_HL.json +171 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4NZW_A_B.json +114 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4O27_A_B.json +130 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4OFY_A_D.json +198 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4OZG_ABJ_GH.json +222 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4P23_CD_AB.json +613 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4P5T_CD_AB.json +613 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4PWX_AB_CD.json +436 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4RA0_A_C.json +52 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4RS1_A_B.json +802 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4U6H_AB_E.json +69 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4WND_A_B.json +50 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4X4M_AB_E.json +120 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4Y61_A_B.json +114 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4YEB_A_B.json +114 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4YFD_A_B.json +130 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4YH7_A_B.json +114 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/4ZS6_HL_A.json +86 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/5C6T_HL_A.json +341 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/5CXB_A_B.json +98 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/5CYK_A_B.json +50 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/5DWU_HL_AB.json +86 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/5E6P_A_B.json +130 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/5E9D_AB_CDE.json +154 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/5F4E_A_B.json +242 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/5K39_A_B.json +130 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/5M2O_A_B.json +258 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/5TAR_A_B.json +146 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/5UFE_A_B.json +82 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/5UFQ_A_C.json +66 -0
- skempi_foldx-0.2.2/skempi_foldx/data/results_sp/5XCO_A_B.json +194 -0
- skempi_foldx-0.2.2/skempi_foldx/exclusions.py +280 -0
- skempi_foldx-0.2.2/skempi_foldx/lookup.py +730 -0
- skempi_foldx-0.2.2/skempi_foldx/run.py +591 -0
- skempi_foldx-0.2.2/skempi_foldx/skempi.py +211 -0
- skempi_foldx-0.2.2/skempi_foldx/store.py +550 -0
- skempi_foldx-0.2.2/skempi_foldx/terms.py +68 -0
- skempi_foldx-0.2.2/skempi_foldx.egg-info/PKG-INFO +500 -0
- skempi_foldx-0.2.2/skempi_foldx.egg-info/SOURCES.txt +529 -0
- skempi_foldx-0.2.2/skempi_foldx.egg-info/dependency_links.txt +1 -0
- skempi_foldx-0.2.2/skempi_foldx.egg-info/requires.txt +12 -0
- skempi_foldx-0.2.2/skempi_foldx.egg-info/top_level.txt +1 -0
- skempi_foldx-0.2.2/tests/conftest.py +24 -0
- skempi_foldx-0.2.2/tests/test_skempi_foldx.py +3061 -0
- skempi_foldx-0.2.2/tests/test_version_consistency.py +532 -0
|
@@ -0,0 +1,636 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Energy values are tied to a version. A mutation's ΔΔG depends on the whole mutation list it was
|
|
4
|
+
computed in, so a rebuilt store is mostly a different measurement rather than a correction of the
|
|
5
|
+
same one — values from two versions are not interchangeable within one table. Where a release does
|
|
6
|
+
correct a value rather than recompute it, the entry says so and counts them. Entries below say
|
|
7
|
+
explicitly whether a release changes them.
|
|
8
|
+
|
|
9
|
+
## 0.2.2 — 2026-09-09
|
|
10
|
+
|
|
11
|
+
**First release on PyPI.** `pip install skempi-foldx==0.2.2` is now the documented install.
|
|
12
|
+
Earlier releases are installable only from their git tags, which is how every release before this
|
|
13
|
+
one was distributed.
|
|
14
|
+
|
|
15
|
+
**No data changed.** The shipped store is byte-identical to 0.2.0 — same 4340 single-point and
|
|
16
|
+
1767 multi-point records, same values on all twelve terms, verified by the digest the suite pins
|
|
17
|
+
over every shipped `(arm, identifier, mutation, term, value)`. A version names a measurement in
|
|
18
|
+
this package, so a version that moves no measurement says so explicitly: **0.2.0 and 0.2.2 are the
|
|
19
|
+
same numbers**, and a result computed against either stays correct without qualification. Nothing
|
|
20
|
+
here supersedes 0.2.0 as a measurement; it supersedes it only as a distribution.
|
|
21
|
+
|
|
22
|
+
### Why 0.2.2 and not 0.2.1
|
|
23
|
+
|
|
24
|
+
A `v0.2.1` tag was published in August and withdrawn, and `CHANGELOG.md` records that a pin naming
|
|
25
|
+
it now fails outright. Reusing the number would have made that true statement false and would have
|
|
26
|
+
silently re-pointed any surviving `@v0.2.1` pin at unrelated content — the same defect this
|
|
27
|
+
release series exists to correct. 0.2.1 is skipped.
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
|
|
31
|
+
- The install instructions name PyPI.
|
|
32
|
+
- **Every link in `README.md` is absolute and pinned to this tag.** The README is the long
|
|
33
|
+
description, so it is also the PyPI project page, and PyPI's renderer leaves a relative path
|
|
34
|
+
alone: `](docs/STORE.md)` resolves against the project page URL and 404s. Thirty-two links --
|
|
35
|
+
every `docs/` reference, `CHANGELOG.md`, `NOTICE`, `CITATION.cff` — were relative, correct on
|
|
36
|
+
GitHub and dead for anyone arriving from PyPI. They name `blob/v0.2.2/` rather than `blob/main/`
|
|
37
|
+
so an old release's page keeps showing that release's claims. In-page anchors were already
|
|
38
|
+
safe; the renderer rewrites those. A test now fails on any relative link, on a pinned link
|
|
39
|
+
naming another version, and on one naming a path not in the tree.
|
|
40
|
+
- **The install-identity command no longer raises on an install from a file.** It read
|
|
41
|
+
`direct_url.json['vcs_info']['commit_id']`, guarded only against the file's absence — but a
|
|
42
|
+
wheel or sdist installed from a path writes `archive_info` instead, so the command raised
|
|
43
|
+
`KeyError` for a case the surrounding paragraph named as handled. It now reports the commit for
|
|
44
|
+
a git install, the archive for a file install, and `installed from PyPI` when there is no
|
|
45
|
+
`direct_url.json` at all.
|
|
46
|
+
- `CONTRIBUTING.md` describes publishing to an existing project rather than creating one, since
|
|
47
|
+
the trusted publisher is now registered and the pending form no longer applies.
|
|
48
|
+
- `tests/test_version_consistency.py` now requires a `skempi-foldx==<version>` pin in the README
|
|
49
|
+
and checks it tracks `pyproject.toml`. Until this release it asserted the opposite, because a
|
|
50
|
+
PyPI pin was a command that failed for every reader.
|
|
51
|
+
|
|
52
|
+
## 0.2.0 — 2026-09-08
|
|
53
|
+
|
|
54
|
+
**An earlier `v0.2.0` tag, and a `v0.2.1` that existed briefly, have been withdrawn and replaced
|
|
55
|
+
by this release.** The two behave differently. `v0.2.1` no longer exists, so a pin naming it fails
|
|
56
|
+
outright; an install from it also reports `__version__ == "0.2.1"`, a version this changelog does
|
|
57
|
+
not record, and moving off it lowers the version string while raising the content. `v0.2.0` still
|
|
58
|
+
exists but now points at this tree, so a pin naming it still resolves — silently, to different
|
|
59
|
+
content than before, and `__version__` does not distinguish the two. Neither tag reached PyPI,
|
|
60
|
+
which had no release of this package until 0.2.2. No energy value differs
|
|
61
|
+
between those trees and this one,
|
|
62
|
+
so a result quoting the numbers stays correct; what they lacked was the `role` field on 16
|
|
63
|
+
records, described under [chain
|
|
64
|
+
mappings](#chain-mappings-and-16-role-names-lost-to-a-fused-column) below, and corrected metadata.
|
|
65
|
+
`__version__` does not distinguish them — for a git install the `direct_url.json` in an installed
|
|
66
|
+
distribution records the commit, and does.
|
|
67
|
+
|
|
68
|
+
The `v0.2.0` tag has been moved more than once: it was re-pointed on 2026-09-09 after this
|
|
69
|
+
release's documentation was corrected, and the earlier object is unreachable. **No energy value
|
|
70
|
+
differs across any of those moves** — the shipped store is byte-identical, and the suite now pins
|
|
71
|
+
a digest over every value so that a silent change is impossible within a version. What changed was
|
|
72
|
+
documentation, tests and CI. An install taken from `v0.2.0` at any point holds the right numbers;
|
|
73
|
+
reinstall only to get the corrected documentation and the packaging fixes.
|
|
74
|
+
|
|
75
|
+
To move an install off any of them, pip needs telling, since the version already matches:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
pip install --force-reinstall \
|
|
79
|
+
"git+https://github.com/cchin29/skempi-foldx@v0.2.0"
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**Energy values: 1850 of 6003 changed, and 4145 did not**, and eight could not be compared.
|
|
83
|
+
26 of those changes are corrections — the interface-definition fix below, where 0.1.0 scored a
|
|
84
|
+
record against a pairing excluding the chain it mutates. Five more such records were registered as
|
|
85
|
+
defective but are zero in both releases, so they are not among the 1850: the registry counts 31
|
|
86
|
+
defective records, of which 26 moved. All 31 are under `2C5D` and `3SE4`: `3SE3` is the third code
|
|
87
|
+
SKEMPI defines twice, but its second definition contributes no mutation the first lacks, so
|
|
88
|
+
0.1.0's pooling under the first stranded nothing there. `3SE3`'s own values do change between the
|
|
89
|
+
releases, but as ordinary recomputation rather than as corrections. The other 1824 changes are not
|
|
90
|
+
corrections: the two releases disagree there because a FoldX energy is a property of the run that
|
|
91
|
+
produced it, not of the mutation alone, and neither run's value is the more correct one.
|
|
92
|
+
|
|
93
|
+
`BuildModel` is deterministic: the same repaired structure and the same `individual_list.txt`
|
|
94
|
+
prefix return the same number, to the last decimal, every time. What moves a number is the list it
|
|
95
|
+
was computed in —
|
|
96
|
+
|
|
97
|
+
a record is a function of (repaired structure, mutation list), not of the mutation
|
|
98
|
+
|
|
99
|
+
— so the same mutation computed in a per-benchmark subset and in its complex's union list are two
|
|
100
|
+
different measurements, and neither is the more correct one. The dependence is measured; the
|
|
101
|
+
mechanism is not established, and FoldX's own documentation describes each line of the list as an
|
|
102
|
+
independent mutant built from the input structure. [docs/DETERMINISM.md](docs/DETERMINISM.md) sets
|
|
103
|
+
out the evidence and is explicit about what it does not show.
|
|
104
|
+
|
|
105
|
+
0.2.0 computes every record in its complex's full union list, one list per interface definition.
|
|
106
|
+
Records whose 0.1.0 list already matched came out identical across all twelve terms; the rest
|
|
107
|
+
moved. The split is very uneven between the arms, because 0.1.0's single-point values already came
|
|
108
|
+
mostly from union lists while its multi-point arm came from a per-benchmark campaign:
|
|
109
|
+
|
|
110
|
+
| arm | unchanged | changed | |
|
|
111
|
+
|---|---:|---:|---:|
|
|
112
|
+
| single-point | 3970 | 262 | 6% |
|
|
113
|
+
| multi-point | 175 | 1588 | 90% |
|
|
114
|
+
|
|
115
|
+
Eight of the 6003 are not comparable: the eight doubled-code mutations that no longer resolve by
|
|
116
|
+
code alone. `1S0W AB142F` was a ninth until the fixed chain-mapping parser gave its record a
|
|
117
|
+
`role` name; it now pairs, and is identical across the releases.
|
|
118
|
+
|
|
119
|
+
Among the 1850 that moved, the median shift in `Interaction Energy` is 0.208 kcal/mol and 69% are
|
|
120
|
+
under 0.5 — but the tail reaches 9.96, at `4K71_A_BC GA503R,AA545V` (11.05 → 1.09), and 129
|
|
121
|
+
records change sign between stabilising and destabilising.
|
|
122
|
+
|
|
123
|
+
The changes are concentrated rather than scattered: all 262 single-point ones fall in 29 of the
|
|
124
|
+
323 paired interface definitions, and every multi-point definition that came through unchanged
|
|
125
|
+
holds four or fewer variants. Within a changed list, the size of the shift tracks side-chain
|
|
126
|
+
repacking freedom — crowded sites, many simultaneous substitutions, bulky flexible replacements —
|
|
127
|
+
while alanine substitutions barely move.
|
|
128
|
+
|
|
129
|
+
Against experiment the two releases are equivalent on the records they share: single-point Spearman
|
|
130
|
+
0.435 → 0.436, multi-point 0.574 → 0.587, on 4053 and 1576 rows. Restricted to the records that
|
|
131
|
+
actually changed, a paired bootstrap puts every interval across zero, so **the data does not
|
|
132
|
+
separate the releases on agreement with experiment** — the multi-point figure moves in the
|
|
133
|
+
direction a union-list value should, and not by enough to claim. As a feature column they track at
|
|
134
|
+
ρ 0.994 (single-point, MAE 0.016) and ρ 0.944 (multi-point, MAE 0.469). **A single-point model
|
|
135
|
+
trained on 0.1.0 is not invalidated by 0.2.0**; a multi-point one is measurably sensitive to which
|
|
136
|
+
release produced its features, and a retrain is what settles the size.
|
|
137
|
+
|
|
138
|
+
The case for 0.2.0 is the interface-definition fix and one list composition per definition, not
|
|
139
|
+
better correlation with experiment.
|
|
140
|
+
|
|
141
|
+
**Do not mix 0.1.0 and 0.2.0 values in one table.** Two thirds of the store is unchanged, so a
|
|
142
|
+
mixed table looks self-consistent while a third of its rows are a different measurement. Pin a tag.
|
|
143
|
+
|
|
144
|
+
Record-by-record counts, magnitudes, the scatter and the reproduction recipe are in
|
|
145
|
+
[docs/VERSIONS.md](docs/VERSIONS.md).
|
|
146
|
+
|
|
147
|
+
### The record unit — the SKEMPI identifier
|
|
148
|
+
|
|
149
|
+
A record is now named `<pdb>_<group1>_<group2>` — `1BRS_A_D`, `2C5D_A_C`, `2C5D_AB_CD` — because
|
|
150
|
+
that is what SKEMPI names a row by, and three codes appear under two such names. 0.1.0 keyed on the
|
|
151
|
+
code, kept whichever pairing came first, and pooled the rest under it, so 31 records were scored
|
|
152
|
+
against an interface excluding the chain they mutate. That failure was invisible in the output: a
|
|
153
|
+
mutation outside the analysed pair moves neither side of `IE(mut) − IE(wt)` and returns a clean
|
|
154
|
+
zero, indistinguishable from a measurement of no effect.
|
|
155
|
+
|
|
156
|
+
Across the three codes, 26 of 0.1.0's records were zero on all twelve terms — a different set of
|
|
157
|
+
26 from the corrections counted above, overlapping it in 15 members. Recomputed against their own
|
|
158
|
+
pairings, **15 of those 26 carry real signal**, up to 6.85 kcal/mol — `3SE4_B_A RA226A` goes
|
|
159
|
+
0.0000 → 6.8535.
|
|
160
|
+
|
|
161
|
+
`load_skempi` is keyed by identifier and `SkempiComplex` carries `.id`; `by_pdb()` regroups for the
|
|
162
|
+
steps that are per structure. `FoldxLookup` resolves a bare code wherever it names one record —
|
|
163
|
+
ambiguity is per `(code, mutation)`, not per code, and affects **8 of the 111** mutations under
|
|
164
|
+
those three (`2C5D`'s two definitions share none at all). For the 8, `get` returns its default and
|
|
165
|
+
`require` raises naming both identifiers rather than choosing. `definitions_of(code)` lists them.
|
|
166
|
+
|
|
167
|
+
**Removed**: `COLLAPSED_INTERFACES`, `CollapsedInterface`, `N_INTERFACE_SUSPECT`,
|
|
168
|
+
`interface_suspect()`, `FoldxLookup.is_interface_suspect()`, `SkempiComplex.alternate_groups` and
|
|
169
|
+
`mutations_outside_interface()`. They described a defect this layout does not have, and a guard
|
|
170
|
+
that can no longer fire is worse than no guard — it reads as a check that passed.
|
|
171
|
+
|
|
172
|
+
**Added**: `SkempiComplex.id`, `by_pdb()`, `pool_by_code()`, `code_of()`,
|
|
173
|
+
`FoldxLookup.definitions_of()`, `FoldxLookup.is_malformed()`, `MALFORMED_ROWS`, `MalformedRow`,
|
|
174
|
+
`is_malformed()` and `announce_malformed()`.
|
|
175
|
+
|
|
176
|
+
**Added — `skempi_foldx/data/corrections_from_0_1_0.csv`.** The 31 records the 0.1.0 registry
|
|
177
|
+
flagged as scored against a pairing excluding the chain they mutate: the 26 whose values moved and
|
|
178
|
+
the 5 that are zero in both releases. It carries *both* releases' keys, because 11 of the 26 are
|
|
179
|
+
keyed differently — 0.1.0 names them under the bare code with the other pairing's chain letter, so
|
|
180
|
+
`3SE4_B_A DA117A` here is `3SE4 DB117A` there — and a join on the 0.2.0 name alone finds nothing
|
|
181
|
+
for exactly the records with the largest corrections, which reads as "unaffected". It ships in
|
|
182
|
+
both the sdist and the wheel, so the question "is one of my rows provably wrong?" is answerable
|
|
183
|
+
from an install, without a checkout:
|
|
184
|
+
|
|
185
|
+
```python
|
|
186
|
+
import csv, importlib.resources as res
|
|
187
|
+
with res.files("skempi_foldx").joinpath("data/corrections_from_0_1_0.csv").open() as fh:
|
|
188
|
+
corrections = {(r["pdb_010"], r["mutation_010"]) for r in csv.DictReader(fh)
|
|
189
|
+
if r["moved"] == "True"}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Also added, all for asking a question that previously only a warning answered:
|
|
193
|
+
`check_identifier()` and `check_code()`, which validate a SKEMPI identifier and a PDB code where
|
|
194
|
+
either becomes a filename; `FoldxLookup.conflicts`, the names that resolved to more than one
|
|
195
|
+
record, one entry per additional claimant as `ConsolidationReport.summary` counts them; and
|
|
196
|
+
`FoldxLookup.pooled_codes`, the codes indexed both as a record key and as interface definitions.
|
|
197
|
+
|
|
198
|
+
That last one names the single route by which a bare doubled code can still answer. A store
|
|
199
|
+
keyed by PDB code — every store this package shipped before 0.2.0 — pools a code's definitions
|
|
200
|
+
under one name, and an exact key hit resolves before the ambiguity refusal is consulted, so
|
|
201
|
+
mixing that store with an identifier-keyed one returns the pooled record rather than the
|
|
202
|
+
pairing-specific one. Which record the caller wanted is not decidable here, so the condition is
|
|
203
|
+
reported rather than resolved. Loading one store convention at a time avoids it entirely.
|
|
204
|
+
|
|
205
|
+
**Changed — the agreement check no longer fails open.** `audit()` and `consolidate()` decide
|
|
206
|
+
whether two sources agree from `max|Δ|` across the shared terms, and two comparisons that cannot
|
|
207
|
+
be made were reading as comparisons that succeeded. A non-finite term returned `nan`, and every
|
|
208
|
+
comparison against `nan` is False, so a source pair disagreeing `1.0` against `NaN` was reported
|
|
209
|
+
as agreeing; `json.loads` accepts bare `NaN`, so a foreign results directory can supply one. Two
|
|
210
|
+
records sharing no term at all returned `0.0`, reported as identical. Both now return infinity.
|
|
211
|
+
`term_vector` refuses a non-finite term for the same reason, which `FoldxLookup.vector` already
|
|
212
|
+
did — the two are documented as the same operation and must not disagree about what a valid
|
|
213
|
+
record is.
|
|
214
|
+
|
|
215
|
+
**Changed — a `mapping_dir=` that contradicts the store is refused rather than believed.** A
|
|
216
|
+
record that ships a `role` already carries this computation's known-good answer. When the
|
|
217
|
+
recompute from a supplied mapping directory disagrees, the mapping files describe different
|
|
218
|
+
residue numbering than the ones that built the store, and installing the recomputed name would
|
|
219
|
+
alias a label belonging to another mutation — answered confidently and counted as covered. The
|
|
220
|
+
shipped name now wins, `FoldxLookup.role_mismatches` lists the disagreements and a warning names
|
|
221
|
+
them. With correct mappings the recompute is exactly idempotent, so this cannot fire on good
|
|
222
|
+
input. `load_chain_mapping` also now requires a single-character chain and a numeric residue
|
|
223
|
+
number, since a header row previously parsed as a chain of its own and shifted every later
|
|
224
|
+
offset — one way a mapping set comes to disagree in the first place.
|
|
225
|
+
|
|
226
|
+
**Changed — `reindex_by_skempi_id` announces a collision instead of dropping a record.** Two
|
|
227
|
+
records re-keying onto one name is a collision, not a merge; the first is kept, as `consolidate()`
|
|
228
|
+
does, and the rest are reported. It stays an identity map on the shipped store. The store-level
|
|
229
|
+
`coverage()` docstring now says plainly that it resolves no naming — on the bundled store it
|
|
230
|
+
reports 19.6% where `FoldxLookup.coverage()` reports 100% over the same rows.
|
|
231
|
+
|
|
232
|
+
**Changed — identity-based role inference no longer guesses a residue number.** With
|
|
233
|
+
`skempi_csv=` but no `mapping_dir=`, `FoldxLookup` infers a record's role-chain name by matching
|
|
234
|
+
substitution identity. The role convention renumbers each chain by the cumulative residue count of
|
|
235
|
+
the chains before it in its group; that inference has no residue counts, so the author position is
|
|
236
|
+
the role position only for the first chain of a group. For any other chain it produced a label in
|
|
237
|
+
neither convention — the role chain letter with the author number — which named no record and so
|
|
238
|
+
installed an alias onto whichever record carried that substitution. On the bundled store that was
|
|
239
|
+
863 aliases, each answering a role label that belongs to a different mutation, counted as covered,
|
|
240
|
+
with `is_exact` still reporting `True`. Such labels are now refused, leaving them unresolved;
|
|
241
|
+
`mapping_dir=` resolves them exactly, as it always did.
|
|
242
|
+
|
|
243
|
+
**Changed — every name that becomes a path is validated where it becomes one.** A record
|
|
244
|
+
identifier and a PDB code are both parsed from column 0 of a caller-supplied `skempi_v2.csv`,
|
|
245
|
+
which nothing upstream constrains, and both reach the filesystem: `write_store` and
|
|
246
|
+
`FoldxConfig.result_path`/`complex_work_dir`/`find_repaired` build filenames from an identifier,
|
|
247
|
+
`run.py` and `load_chain_mapping` build them from a code. Each validates at the join rather than
|
|
248
|
+
at the parse, because the join is the one place every route passes through.
|
|
249
|
+
`experiments/build_per_definition_store.py` checks the whole store before it removes the previous
|
|
250
|
+
one, since a removal partway through would cost the data the check exists to protect.
|
|
251
|
+
|
|
252
|
+
### Contents
|
|
253
|
+
|
|
254
|
+
| | definitions | codes | records | of SKEMPI | excluding `1KBH` |
|
|
255
|
+
|---|---:|---:|---:|---|---|
|
|
256
|
+
| single-point | 323 | 322 | **4340** | 4340 / 4343 | **100%** |
|
|
257
|
+
| multi-point | 154 | 152 | **1767** | 1767 / 1850 | **100%** |
|
|
258
|
+
|
|
259
|
+
The entire shortfall is `1KBH` — 3 single-point and 83 multi-point — whose `RepairPDB` does not
|
|
260
|
+
terminate under FoldX 5.1. No amount of compute closes it. Quote the denominators with the
|
|
261
|
+
exclusion stated; a bare "of 1850" implies a target that does not exist.
|
|
262
|
+
|
|
263
|
+
The denominators count per definition, which is why they differ from 0.1.0's by-code 4337 and 1848.
|
|
264
|
+
|
|
265
|
+
### One key convention, and a shipped role name
|
|
266
|
+
|
|
267
|
+
Every key is SKEMPI's author-chain form: 4340 and 1767 records with `key == cleaned`, no
|
|
268
|
+
exceptions. 0.1.0's single-point arm split 3012/1226 between that form and the role-chain form;
|
|
269
|
+
its multi-point arm was already all author form, so the mixture was 4777/1226 across the store.
|
|
270
|
+
|
|
271
|
+
Because one convention alone would strand role-labelled split files, a record whose role name
|
|
272
|
+
differs from its key now carries that name in a **`role`** field, computed from the chain mappings
|
|
273
|
+
at build time — 3887 of 6107 records. For all 2220 of the rest the role form *is* the key, because
|
|
274
|
+
the chain sits first in its group and so carries offset 0. Asked by identifier, the two together
|
|
275
|
+
recover every one of 0.1.0's 1226 role keys.
|
|
276
|
+
|
|
277
|
+
A field rather than a second key convention, deliberately: `skempi_v2.csv` is not redistributable,
|
|
278
|
+
so a consumer resolving role labels at read time would need the one input they cannot have.
|
|
279
|
+
|
|
280
|
+
### Chain mappings, and 16 role names lost to a fused column
|
|
281
|
+
|
|
282
|
+
`load_chain_mapping` reads each chain's residue count from a SKEMPI `.mapping` file, and
|
|
283
|
+
`to_role_form` accumulates those counts into the offsets a role-chain name is built from. The
|
|
284
|
+
files are fixed-width, so **an author number of 1000 or more runs into the chain letter** and the
|
|
285
|
+
line arrives as three whitespace fields rather than four — `ALA C1001 1`. Requiring four fields
|
|
286
|
+
dropped every such residue. Eleven of 345 mapping files carry them.
|
|
287
|
+
|
|
288
|
+
Two consequences, both silent:
|
|
289
|
+
|
|
290
|
+
* `2NYY` and `2NZ9` chain A measured **971 residues instead of 1267**, so `to_role_form` rejected
|
|
291
|
+
14 in-range mutations as out of range.
|
|
292
|
+
* `1S0W` and `1XXM` lost the **whole** of chain C, whose residues are numbered 1001–1165, so the
|
|
293
|
+
group loop bailed before any arithmetic and 2 more records got no name.
|
|
294
|
+
|
|
295
|
+
Neither raises. A role-keyed join simply missed those 16 records, since `None` is also how
|
|
296
|
+
`to_role_form` refuses an insertion code. Worse in principle than in fact: for a *later* chain in
|
|
297
|
+
a group, a short count does not decline anything — it shifts every subsequent offset, aliasing
|
|
298
|
+
records onto residues they do not describe. The field is now split back apart in
|
|
299
|
+
`load_chain_mapping`, where the damage starts, rather than guarded against downstream.
|
|
300
|
+
|
|
301
|
+
The 16 names were added to the shipped store by `experiments/backfill_role_names.py`, which
|
|
302
|
+
derives them from the interface identifier alone and so needs neither the mapping files nor
|
|
303
|
+
`skempi_v2.csv`. It is an audit script, not a CI gate; what CI holds is the store, through
|
|
304
|
+
`test_shipped_store_matches_the_backfill_rule`.
|
|
305
|
+
|
|
306
|
+
Verified two ways rather than argued. Recomputing the role name of **all 6107** shipped records
|
|
307
|
+
with the fixed parser reproduces every one — 0 additions, 0 losses, 0 disagreements — so the store
|
|
308
|
+
and its build script agree again. And against the withdrawn `v0.2.0` tag the store gains 16 role
|
|
309
|
+
fields and **changes no value**: 6107 records compared field by field, 0 non-`role` differences.
|
|
310
|
+
The same holds against the tree the withdrawn `v0.2.1` tag pointed at, whose store is identical to
|
|
311
|
+
the first's. Neither tree is reachable from any tag now, so the comparison is stated here rather
|
|
312
|
+
than reproducible.
|
|
313
|
+
|
|
314
|
+
### Coverage figures and the interface identifier
|
|
315
|
+
|
|
316
|
+
`experiments/coverage_report.py` reduced a split's sequence id to its bare PDB code, discarding
|
|
317
|
+
the chain groups the id carries. That made `3SE4` and `3SE3` — the codes SKEMPI defines under two
|
|
318
|
+
pairings — unresolvable, since a bare code then has two right answers, and it *conflated* the two
|
|
319
|
+
pairings' rows in the denominator as well. It now reads `1A22.A.B_A` as `1A22_A_B`.
|
|
320
|
+
|
|
321
|
+
**That fix alone accounts for the whole change**: the splits this store was built for go from
|
|
322
|
+
4153/4159 and 1632/1634 to full coverage at 4165 and 1636, with the role names making no
|
|
323
|
+
difference to those two figures. The 16 recovered names move a different split — a 1100-row
|
|
324
|
+
S1102 partition goes from 1099 to 1100, on `1S0W`.
|
|
325
|
+
|
|
326
|
+
### Provenance
|
|
327
|
+
|
|
328
|
+
Sources are the repair sweep's `round_1` for the 468 definition-arms whose code SKEMPI defines
|
|
329
|
+
once, and nine per-definition campaigns for `2C5D`, `3SE3` and `3SE4`, from
|
|
330
|
+
`recompute_alternate_interfaces.py --all-definitions`. `round_1` cannot serve those three: its
|
|
331
|
+
worklist pools both definitions into one list, so its values belong to no single pairing's list.
|
|
332
|
+
|
|
333
|
+
**Mixing the two is measured, not assumed.** `3SE3`'s `B,A` multi-point arm was recomputed as a
|
|
334
|
+
per-definition campaign seeded from the *original* campaign's repaired structure, while `round_1`
|
|
335
|
+
came from the *sweep's own* repair chain: 30 of 30 records agree to the last decimal, on an
|
|
336
|
+
identical mutation-list hash.
|
|
337
|
+
|
|
338
|
+
Per-record `_source` names the campaign. `CONSOLIDATION_REPORT.txt` is rewritten to match — each
|
|
339
|
+
record has exactly one source by construction, so there is no precedence order and no conflicts to
|
|
340
|
+
arbitrate. The report ships as written by `experiments/build_per_definition_store.py`; there is no
|
|
341
|
+
regeneration script, deliberately, since one pointed at this store would overwrite the shipped
|
|
342
|
+
report with a description of a store that no longer exists.
|
|
343
|
+
|
|
344
|
+
Against SKEMPI's measured ΔΔG the shipped values reach Spearman **0.437** single-point (4081 rows)
|
|
345
|
+
and **0.587** multi-point (1580), deduplicating on `(identifier, mutation)` and keeping the first
|
|
346
|
+
row. Keeping the last gives 0.439 and 0.589 — worth stating, since the two differ in the third
|
|
347
|
+
decimal and nothing in the data says which convention a reader assumed.
|
|
348
|
+
|
|
349
|
+
### Substitution order in a multi-point label
|
|
350
|
+
|
|
351
|
+
Six multi-point *mutants* are written two ways — SKEMPI lists both orderings, and both are
|
|
352
|
+
computed and shipped, so these six mutants account for twelve of the 1767 records:
|
|
353
|
+
|
|
354
|
+
| record | spellings | \|Δ Interaction Energy\| |
|
|
355
|
+
|---|---|---:|
|
|
356
|
+
| `1JTG_A_B` | `DB49A,KA208A` / `KA208A,DB49A` | 0.499 |
|
|
357
|
+
| `1JTG_A_B` | `DB49A,RA217A` / `RA217A,DB49A` | 0.647 |
|
|
358
|
+
| `1JTG_A_B` | `DB49A,SA105A` / `SA105A,DB49A` | 0.481 |
|
|
359
|
+
| `2WPT_A_B` | `DA30A,FB79A` / `FB79A,DA30A` | 0.639 |
|
|
360
|
+
| `3S9D_A_B` | `EB66A,RA120A` / `RA120A,EB66A` | 0.014 |
|
|
361
|
+
| `4L3E_ABC_DE` | `RA65A,YD26A` / `YD26A,RA65A` | 0.078 |
|
|
362
|
+
|
|
363
|
+
They are not duplicates of each other: order is part of the mutation list, so the two spellings
|
|
364
|
+
are two positions in that list and the energies differ accordingly — by up to 0.647 kcal/mol here.
|
|
365
|
+
A consumer canonicalising a label by sorting its substitutions collapses each pair and keeps an
|
|
366
|
+
arbitrary one of the two. Neither is more correct; if you canonicalise, do it consistently and say
|
|
367
|
+
which you kept.
|
|
368
|
+
|
|
369
|
+
### Malformed SKEMPI rows
|
|
370
|
+
|
|
371
|
+
`MALFORMED_ROWS` is a trust guard on computed values, not a compute guard. Nothing about the two
|
|
372
|
+
`2C5D` rows resists computation: the string names three substitutions, FoldX returns the energy of
|
|
373
|
+
those three, and every comparator pipeline whose source was read computes the same mutant. What is
|
|
374
|
+
defective is the arity the label claims — 3-substitution mutants recorded as 4.
|
|
375
|
+
|
|
376
|
+
So they are computed, shipped and flagged rather than dropped. Dropping them would leave
|
|
377
|
+
`is_malformed()` and the load-time warning guarding an empty set, and would move the other 17
|
|
378
|
+
values in that complex's list, since a record is a property of the list it was computed in.
|
|
379
|
+
`announce_malformed` names the rows and returns them without touching the list.
|
|
380
|
+
|
|
381
|
+
The registry is new in 0.2.0, so no 0.1.0 consumer has a symbol to migrate. It is recorded here
|
|
382
|
+
because the two rows are shipped in both releases and a reader needs to know what they are.
|
|
383
|
+
|
|
384
|
+
### Findings from the 0.1.0-era campaign directories
|
|
385
|
+
|
|
386
|
+
Four results computed from the pipeline's own campaign output — the `scratch/` directories a run
|
|
387
|
+
leaves behind, which are not shipped. The first two answer questions the 0.1.0 documentation left
|
|
388
|
+
open; the last two came out of the same material:
|
|
389
|
+
|
|
390
|
+
- `CONSOLIDATION_REPORT.txt` became regenerable again, which established one correction to the
|
|
391
|
+
0.1.0 report: its conflict line counted source-pair rows and called them mutations, so "1970
|
|
392
|
+
mutations present in more than one source" should have read "1027 mutations … giving 1970
|
|
393
|
+
source-pair disagreements". The overstatement was ~1.9×. The report this release ships is
|
|
394
|
+
written by `experiments/build_per_definition_store.py` and describes a store with one source
|
|
395
|
+
per record, so it has no conflict line at all.
|
|
396
|
+
- The repair-count question is **answered on both halves**. Energy by
|
|
397
|
+
`experiments/repair_convergence.py`; structure from the sweep's per-round `repair_round_<r>.pdb`
|
|
398
|
+
chain. `RepairPDB` moves side chains only (Cα RMSD exactly 0.0000 at every step, all 344
|
|
399
|
+
complexes). Against the structure's 0.23 convergence ratio, the *typical* single-point mutation
|
|
400
|
+
settles faster (median 0.16) and the *average* settles slower (mean 0.57); multi-point is
|
|
401
|
+
slower on both. Ranking is robust regardless — round 1 vs round 4 Spearman 0.9295 / 0.9492.
|
|
402
|
+
- **Two SKEMPI rows are malformed upstream**, both in `2C5D_AB_CD`, both shipped in 0.1.0:
|
|
403
|
+
`RA32E,KA34E,RB32E,KA34E` and `EC30R,EC33R,ED30R,EC33R` each repeat a substitution instead of
|
|
404
|
+
applying the symmetric partner (`KB34E`, `ED33R`). Verified against `skempi_v2.csv` — 2 of 7085
|
|
405
|
+
rows, the only such rows in the file. They are 3-substitution mutants labelled as 4-substitution.
|
|
406
|
+
**Registered** in `skempi_foldx.MALFORMED_ROWS` at mutation granularity and deliberately not
|
|
407
|
+
corrected. Reading the published source of the comparator pipelines shows no pipeline drops them
|
|
408
|
+
and all compute the same 3-substitution mutant, so the values here are not anomalous — the
|
|
409
|
+
discrepancy is confined to the arity label, which the surveyed pipelines record inconsistently (3
|
|
410
|
+
in USP-ddG, 4 in RDE-Network and MINT) while all compute the same three-substitution mutant.
|
|
411
|
+
- `docs/DETERMINISM.md`'s agreement statistics are recomputed and no longer marked unverified,
|
|
412
|
+
by `experiments/agreement_stats.py`. **A comparison count of 10631, quoted in 0.1.0's
|
|
413
|
+
`docs/DETERMINISM.md`, is not reproducible from the campaign directories and has been retired**;
|
|
414
|
+
the single correct population is 1527 shared mutations over 5870 comparisons, which the
|
|
415
|
+
determinism table already described. Every quantity in that table moved — pooled RMSD 0.45 →
|
|
416
|
+
0.524, ICC 0.96 → 0.972, sign flips 2.4% → 3.0% — and the least-stable term is entropy mainchain
|
|
417
|
+
(0.923), not torsional clash. The qualitative conclusions are unchanged.
|
|
418
|
+
|
|
419
|
+
### Fixed — claims about other groups' work, published in 0.1.0
|
|
420
|
+
|
|
421
|
+
These were measured or attributed wrongly in 0.1.0's documentation, which remains public. Each is
|
|
422
|
+
restated as what can be checked against the cited source:
|
|
423
|
+
|
|
424
|
+
- The CATH-ddG test split was described as 39% multi-point. It is **33%** — 270 of 813 rows,
|
|
425
|
+
recomputed from that project's own released split. The 13 complexes the repair-count measurement
|
|
426
|
+
runs on were labelled a "T≥10 tier"; that paper defines no such tier, and the threshold is its
|
|
427
|
+
per-PPI metric filter of ten rows per PPI. They hold 699 of the 813, `1JTG_A_B` alone
|
|
428
|
+
contributing 275 — rows rather than distinct mutations, a distinction the text now draws, since
|
|
429
|
+
those 275 rows are the 194 mutations this store holds for that definition.
|
|
430
|
+
- The repair sweep's rationale claimed 5× repair moved the per-structure Spearman "past the
|
|
431
|
+
published single-point FoldX row of 0.4458". The 5× interval is [0.3455, 0.5695] and spans that
|
|
432
|
+
value rather than resolving against it — which is what `docs/DETERMINISM.md` already said, and
|
|
433
|
+
what the sweep's own summary now says.
|
|
434
|
+
- The repair-count discussion asserted that two papers reporting gains on binding data "both
|
|
435
|
+
confound repair count with other pipeline changes", naming and citing neither. Restated as what
|
|
436
|
+
can be checked: no report isolates repair count from the other changes made alongside it.
|
|
437
|
+
- The comparator survey counted three works reporting a FoldX baseline that appears elsewhere.
|
|
438
|
+
There is a fourth outside the ΔΔG tables: PPIformer reports no FoldX ΔΔG row, but its
|
|
439
|
+
antibody-retrieval table carries one and states that it is reproduced from RDE-Network. The
|
|
440
|
+
survey's own thesis is that a reported FoldX baseline is not always a fresh run, so an em-dashed
|
|
441
|
+
row was hiding an instance of it. Of the three already counted, two were given an innocent
|
|
442
|
+
reading and the third now carries the caveat the section's own sourcing note implies: a value
|
|
443
|
+
may be attributed in a section not read.
|
|
444
|
+
- A comparator that dedupes without a comment was described as doing so "silently" beside one that
|
|
445
|
+
does it "deliberately". The evidence in the same paragraph shows the behaviour is load-bearing
|
|
446
|
+
either way, so the adverbs were doing work the data does not support.
|
|
447
|
+
- GearBind states "we use FoldX 4 for mutant structure generation" — the only work surveyed to
|
|
448
|
+
name a major version other than 5, and a comparability axis the survey raises for CATH-ddG's 5.0
|
|
449
|
+
against this store's 5.1. It went unrecorded.
|
|
450
|
+
- CATH-ddG's `RepairPDB` count was attributed to supplementary section 1.4, which prints the
|
|
451
|
+
command lines but states no count. The quoted string is in section 1.11, on computational
|
|
452
|
+
efficiency.
|
|
453
|
+
- RDE-Network's widely-quoted 0.3789 is a per-structure **Pearson**. Every other correlation in
|
|
454
|
+
these documents is a Spearman, so leaving the metric unnamed invited the wrong reading.
|
|
455
|
+
- The FoldX documentation says structures should be repaired before modelling without naming a
|
|
456
|
+
count; "FoldX's manual recommends one repair" is Usmanova et al.'s reading of it, and is now
|
|
457
|
+
attributed to them. The `--numberOfRuns` discussion likewise now records that the vendor's two
|
|
458
|
+
pages differ — one says "normally it should be set to 1", the other recommends 3.
|
|
459
|
+
- Two figures carrying the argument that the observed spread is not FoldX noise — the ±3.5 kcal/mol
|
|
460
|
+
binding interval and the 0.46 kcal/mol calibration SD — were quoted without sources. Both are now
|
|
461
|
+
in `docs/REFERENCES.md`, which claims to cover every work named under `docs/`.
|
|
462
|
+
- A claim that every published baseline row "was produced at the single-run default" was an
|
|
463
|
+
inference from the default presented as knowledge. What is checkable, and now stated, is that
|
|
464
|
+
none of those papers records a run count at all.
|
|
465
|
+
|
|
466
|
+
### Fixed — citation metadata
|
|
467
|
+
|
|
468
|
+
- `CITATION.cff` carried `license: MIT AND CC-BY-4.0`. That is an SPDX *expression*, and CFF 1.2's
|
|
469
|
+
`license` field takes an identifier or an array of them — an array the schema reads as **OR**, so
|
|
470
|
+
neither spelling states the licence this work is under. The field is omitted rather than guessed
|
|
471
|
+
at: `LICENSE`, `NOTICE` and `pyproject.toml`'s `MIT AND CC-BY-4.0` are the record, and CFF cannot
|
|
472
|
+
express it. Dropping it is deliberate, not an oversight — an array here would publish that a
|
|
473
|
+
consumer may take the whole work under MIT alone, discarding the CC BY attribution that `NOTICE`
|
|
474
|
+
states as a licence term rather than a courtesy, on data derived from SKEMPI 2.0.
|
|
475
|
+
- Two works cited in the prose were absent from `references` — the Protein Data Bank, and
|
|
476
|
+
RDE-Network among the surveyed comparator pipelines.
|
|
477
|
+
|
|
478
|
+
### Added
|
|
479
|
+
|
|
480
|
+
- Release-metadata tests, `tests/test_version_consistency.py`. The version is written in
|
|
481
|
+
`__version__`, `pyproject.toml`, `CITATION.cff`, this file's newest heading and three times in the
|
|
482
|
+
README; the supported Python range is written in the `requires-python` specifier, the
|
|
483
|
+
classifiers and the CI matrix. Nothing checked either group, and an unchecked version
|
|
484
|
+
declaration is how a tag comes to describe a tree it does not match.
|
|
485
|
+
- Among them, `test_readme_install_pin_matches_pyproject`: the install command is a version
|
|
486
|
+
declaration too, and the one with the shortest path to a reader. For a package distributed by
|
|
487
|
+
git tag, a stale `@vX.Y.Z` there does not merely misdocument, it installs the previous release.
|
|
488
|
+
- `test_dev_extra_names_the_parsers_this_file_needs`. Without `tomli` and `pyyaml` most of that
|
|
489
|
+
suite is import-guarded into silence — a green bar reporting that nothing ran. Read as raw text,
|
|
490
|
+
since using the TOML parser to check that the TOML parser is declared would skip in exactly the
|
|
491
|
+
case worth catching.
|
|
492
|
+
- `test_requires_python_excludes_nothing_it_advertises`, for the `!=3.x.*` form. A floor and a
|
|
493
|
+
ceiling cannot express it, so an exclusion would leave three files disagreeing with no bound out
|
|
494
|
+
of place to notice.
|
|
495
|
+
- A CI step refusing a tag whose name disagrees with the version in the tree it points at. The tag
|
|
496
|
+
is what publish.yml uploads, so it is the one version declaration that lives outside the
|
|
497
|
+
tree and could not be checked from inside it.
|
|
498
|
+
- The bundled multi-point definition count and the role-name alias are asserted in the suite as
|
|
499
|
+
well as in the wheel-build step of both workflows. There they read as duplicates of assertions
|
|
500
|
+
made elsewhere and are not: the wheel check answers whether the store survived packaging, which
|
|
501
|
+
no test of the source tree can.
|
|
502
|
+
- Continuous integration, `.github/workflows/tests.yml` — 0.1.0 shipped no `.github/` at all.
|
|
503
|
+
Six interpreters, and it runs on version tags as well as `main` and pull requests: a tag can
|
|
504
|
+
point at a commit the branch never ran, and for a git-tag-installed package that tag is what a
|
|
505
|
+
consumer resolves. Every action in both workflows is pinned by
|
|
506
|
+
commit SHA, with the version in a trailing comment: a tag is a mutable ref, and an action that
|
|
507
|
+
moves under a workflow holding `id-token: write` moves what can mint a PyPI token.
|
|
508
|
+
- `publish.yml` also accepts `workflow_dispatch`, against a tag. A tag push is still the release,
|
|
509
|
+
but a first upload to a project PyPI has never seen needs a trusted publisher registered first,
|
|
510
|
+
and that is a browser action outside this repository — so every gate here can pass and the
|
|
511
|
+
upload still fail on configuration alone. Without a manual trigger the only remedies are
|
|
512
|
+
re-running a failed run or moving a published tag. The version assert reads `GITHUB_REF_NAME`,
|
|
513
|
+
so dispatching against a branch is refused, which is the intended behaviour.
|
|
514
|
+
- The local-path scan, `.github/leakscan.sh`, a script rather than a command for each caller to
|
|
515
|
+
copy, so that CI and the pre-release checklist in `CONTRIBUTING.md` cannot drift apart — two
|
|
516
|
+
copies of a pattern this fiddly will not stay in step. The pattern does not match its own source
|
|
517
|
+
line, which is what lets it scan `.github/` at all. It reaches capitalised home directories, the
|
|
518
|
+
JSON-escaped spelling of a path separator, and remote-host forms that name no command, and it
|
|
519
|
+
scans `NOTICE` and `LICENSE` — while not firing on a PEP 508 direct reference, a registry
|
|
520
|
+
digest, or an email address followed by a colon.
|
|
521
|
+
- `CONTRIBUTING.md`. The licence is `MIT AND CC-BY-4.0`, not a plain OSI licence, so the terms a
|
|
522
|
+
contribution is offered under are not inferable from the file layout — and a data contribution
|
|
523
|
+
is not the same kind of thing as a code one here. It also carries the pre-release checks that
|
|
524
|
+
only hold for the tree a release is built from rather than for the commit.
|
|
525
|
+
|
|
526
|
+
### Corrected before publication
|
|
527
|
+
|
|
528
|
+
A full review of every published surface — numeric recomputation against the shipped store,
|
|
529
|
+
cross-document consistency, standalone reading, three audiences, and release mechanics with
|
|
530
|
+
mutation testing — ran against this tree before the tag was moved. No energy value changed. What
|
|
531
|
+
it found:
|
|
532
|
+
|
|
533
|
+
- **The install instructions named PyPI, where this package does not exist.** The Quickstart's
|
|
534
|
+
first command was `pip install skempi-foldx==0.2.0`, and five further passages asserted a PyPI
|
|
535
|
+
presence. Every release installs from its git tag; the documents now say so, and a test refuses
|
|
536
|
+
a `skempi-foldx==` pin in the README.
|
|
537
|
+
- **"Neither withdrawn tag resolves" was half wrong, in the dangerous direction.** `v0.2.1` fails
|
|
538
|
+
outright, but `v0.2.0` resolves to this tree — silently, with different content than the
|
|
539
|
+
withdrawn one. Both cases are now stated separately.
|
|
540
|
+
- **The version-detection one-liner crashed on the install it was written for.**
|
|
541
|
+
`direct_url.json` exists only for a git or local install, so `json.loads` was handed `None`. It
|
|
542
|
+
now reports rather than raising, and the release's commit can be obtained from the remote, since
|
|
543
|
+
a release cannot state its own hash.
|
|
544
|
+
- **Counts that summed the two arms were labelled as distinct entities.** 477 is `(arm,
|
|
545
|
+
definition)` pairs, not interface definitions — there are 347, because 130 appear in both arms.
|
|
546
|
+
The same applied to 476 paired tiles, to 151 definitions holding one record (97 distinct), and
|
|
547
|
+
to "4343 single-point mutations", which counts entries: the shipped 4340 are 4334 distinct
|
|
548
|
+
mutations. Each is now labelled, with the distinct figure alongside.
|
|
549
|
+
- **`docs/DETERMINISM.md` gave a both-arms count in a single-point-only paragraph** (194 where the
|
|
550
|
+
arm holds 58), and the changelog called six multi-point *mutants* six *records*; they are twelve.
|
|
551
|
+
- **The repair-count claim this release retracted survived in two code files.**
|
|
552
|
+
`config.py` and `experiments/repair_ablation.py` still called one pass "FoldX's own documented
|
|
553
|
+
recommendation" after the prose had re-attributed that reading to Usmanova et al.
|
|
554
|
+
`docs/REFERENCES.md` stated their finding without the qualifier that it concerns *folding* ΔΔG.
|
|
555
|
+
- **The README under-stated the repair-count evidence its own docs carry**, quoting only a
|
|
556
|
+
13-complex pilot and dismissing it, where the completed four-round sweep over 344 complexes
|
|
557
|
+
finds no round after which the store stops changing.
|
|
558
|
+
- **Platform provenance was in the wrong document.** The architecture split between the two inputs
|
|
559
|
+
is now in `docs/STORE.md`'s provenance section, alongside the repair count.
|
|
560
|
+
- **A statistic no shipped script computes has been removed** rather than restated: the χ-angle
|
|
561
|
+
Mann-Whitney p-value could not be reproduced from the tree. The counts and medians it summarised
|
|
562
|
+
remain, and are regenerable.
|
|
563
|
+
- **`experiments/repair_ablation.py` described the 0.1.0 store shape** and a scope size that the
|
|
564
|
+
rebuild changed (98 complexes, now 99).
|
|
565
|
+
- **Both `MALFORMED_ROWS` sat unmarked in the corrections table**, which a 0.1.0 consumer is told
|
|
566
|
+
to check against; they are now footnoted as wrong in *both* releases.
|
|
567
|
+
- **`CONTRIBUTING.md` mis-stated the release mechanics** — that the recommended push forces (it
|
|
568
|
+
does not), that pushing a tag is the whole release (the upload can still fail on configuration),
|
|
569
|
+
and that a *version* rather than a *project* PyPI has never seen is the case needing care.
|
|
570
|
+
|
|
571
|
+
### Hardened
|
|
572
|
+
|
|
573
|
+
- **`publish.yml` refused a branch by name, not by kind.** The version assert compared
|
|
574
|
+
`GITHUB_REF_NAME` against `pyproject.toml`, so a `workflow_dispatch` against a branch named
|
|
575
|
+
`0.2.0` — a release-prep branch named after its version is an ordinary thing to make — passed
|
|
576
|
+
it and would have published an untagged tree. The job now refuses any ref that is not a tag,
|
|
577
|
+
and does so as a failure rather than a skipped step.
|
|
578
|
+
- `actions/checkout` no longer persists the job token into the one job that executes the tagged
|
|
579
|
+
tree.
|
|
580
|
+
- **Five invariants had no test that noticed them being broken**, found by mutating each and
|
|
581
|
+
re-running the suite: the refusal to infer an author form from a name SKEMPI does not list
|
|
582
|
+
(a third route to the fabricated-alias class this release exists to close); building a role name
|
|
583
|
+
from the record's own interface definition rather than another pairing of its code; first-store-
|
|
584
|
+
wins on a conflict; the shipped store containing no excluded complex; and the energy values
|
|
585
|
+
themselves, now pinned by digest.
|
|
586
|
+
|
|
587
|
+
### Changed
|
|
588
|
+
|
|
589
|
+
- Python classifiers name **3.9 through 3.14** individually, and CI builds all six. 0.1.0's
|
|
590
|
+
metadata said only `Programming Language :: Python :: 3`; there was never a resolution reason to
|
|
591
|
+
advertise less than the package supports — it has no dependencies — only an untested one. The
|
|
592
|
+
3.9 leg is pinned to `ubuntu-24.04` pre-emptively: `actions/python-versions` publishes no
|
|
593
|
+
`linux-26.04` build for 3.9 at any patch level, 3.9 having reached end of life before that image
|
|
594
|
+
existed. `ubuntu-latest` still resolves to 24.04 today, so that pin is
|
|
595
|
+
currently a no-op; 3.10 reaches end of life in October 2026 and its 26.04 coverage begins only
|
|
596
|
+
at 3.10.20, so a second entry is expected on the same grounds.
|
|
597
|
+
- `MANIFEST.in` names files by extension instead of grafting `docs/`, `tests/` and `experiments/`.
|
|
598
|
+
A graft walks the filesystem rather than git, so it shipped whatever running the pipeline left
|
|
599
|
+
behind — including `rotabase.txt`, which is FoldX's own licensed support data and not this
|
|
600
|
+
project's to redistribute, and a generated CSV withheld because it carries per-row SKEMPI
|
|
601
|
+
affinity data. The protection is defeated by a stale `egg-info/SOURCES.txt`, so `CONTRIBUTING.md`
|
|
602
|
+
gives the clean-build check that catches it.
|
|
603
|
+
- **This release was not distributed on PyPI**, and installs from its git tag. `publish.yml`
|
|
604
|
+
shipped ready — it uploads on a version tag via Trusted Publishing, gated on the ref being a
|
|
605
|
+
tag, on the tag matching `pyproject.toml`, on the suite, and on the shipped store being present
|
|
606
|
+
in the built wheel — but no upload was made from it. A PyPI upload cannot be undone, and here a
|
|
607
|
+
version names a measurement rather than a code state, so the first upload was made its own
|
|
608
|
+
release rather than a side effect of this one; that is 0.2.2, which carries these same energies.
|
|
609
|
+
- `Changelog` and `Issues` join the project URLs.
|
|
610
|
+
- The `dev` extra names `build`, which the pre-release checklist in `CONTRIBUTING.md` invokes.
|
|
611
|
+
- Entries here are newest-first, per Keep a Changelog.
|
|
612
|
+
- README code blocks are kept narrow, so they are not clipped where the rendered description
|
|
613
|
+
column is narrower than GitHub's.
|
|
614
|
+
|
|
615
|
+
## 0.1.0 — 2026-08-01
|
|
616
|
+
|
|
617
|
+
First public release. **Energy values: initial.**
|
|
618
|
+
|
|
619
|
+
- 6003 records over 344 complexes: 4238 single-point mutations across 322, and 1765 multi-point
|
|
620
|
+
variants across 152. Twelve `AnalyseComplex` terms per record, as mutant minus wild-type.
|
|
621
|
+
- `FoldxLookup` resolves the naming conventions a mutation appears under, which is the
|
|
622
|
+
difference between 65.4% and 99.6% coverage on a split whose labels are role-chain.
|
|
623
|
+
- Every value computed with a single `RepairPDB` pass, at FoldX 5.1.
|
|
624
|
+
|
|
625
|
+
Known limitations, each documented where it applies:
|
|
626
|
+
|
|
627
|
+
- **Three PDB codes carry two SKEMPI interface definitions each** (`2C5D`, `3SE3`, `3SE4`). The
|
|
628
|
+
parser keys on the code, so 31 records are scored against an interface excluding the chain they
|
|
629
|
+
mutate. `interface_suspect()` identifies them; `experiments/recompute_alternate_interfaces.py`
|
|
630
|
+
recomputes them. Fixing the parser moves the coverage denominators, so it is held for 0.2.0
|
|
631
|
+
where the store is rebuilt to match.
|
|
632
|
+
- **2494 of 4238 single-point values came from a per-benchmark campaign** rather than from one
|
|
633
|
+
built around each complex's full mutation list. For 27 of those complexes, 287 records, that
|
|
634
|
+
list is a strict subset of the complex's full one, and a value is a property of the list it was
|
|
635
|
+
computed in.
|
|
636
|
+
- **`1KBH` is excluded**: `RepairPDB` does not terminate on it under FoldX 5.1.
|