Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
261 changes: 187 additions & 74 deletions .github/workflows/model-qc.yml

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion code/test/annotationTest.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
"metChEBIID": r"CHEBI:\d+",
"metHMDBID": r"HMDB\d+",
"metPubChemID": r"\d+",
"metMetaNetXID": r"MNXM\d+",
"metMetaNetXID": r"MNXM\d+|WATER", # WATER is MetaNetX's id for H2O
"metSeedID": r"cpd\d{5}",
"metLipidMapsID": r"LM[A-Z]{2}\w+",
"metEHMNID": r"C[A-Z]\d+",
Expand Down
9 changes: 6 additions & 3 deletions code/test/memoteSnapshot.py
Original file line number Diff line number Diff line change
Expand Up @@ -220,10 +220,13 @@ def main() -> int:
skip = SLOW_TESTS if subset else None
kind = "core subset" if subset else "full suite"

# Use Gurobi when a full licence is configured; the genome-scale consistency
# and FVA MILPs are impractical with GLPK.
if os.environ.get("GRB_LICENSE_FILE"):
# The full suite's genome-scale consistency and FVA MILPs are impractical with
# GLPK, so it uses Gurobi when a licence is configured. The core subset skips
# those tests and always uses GLPK, so it never takes a Gurobi licence session.
if not subset and os.environ.get("GRB_LICENSE_FILE"):
cobra.Configuration().solver = "gurobi"
else:
cobra.Configuration().solver = "glpk"

# memote reads an SBML model, so convert the canonical YAML model to a
# temporary SBML file first (memote fails on a .yml directly). Load via
Expand Down
5 changes: 3 additions & 2 deletions code/test/qcStatus.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@
tasks_verification 0/21
yamllint pass

Upsert (read, set the one key, rewrite) keeps it order-independent and rerun-safe,
and because the QC steps run sequentially in one job there is no contention. Keys
Upsert (read, set the one key, rewrite) keeps it order-independent and rerun-safe.
The model-QC checks run as parallel jobs, each on its own copy of the file; each job
passes on only the keys it changed, and the report job sets those in one file. Keys
are a fixed set, so nothing stale accumulates.

CLI (used by the workflow's shell steps):
Expand Down
67 changes: 67 additions & 0 deletions data/deprecatedIdentifiers/deprecatedMetabolites.tsv
Original file line number Diff line number Diff line change
Expand Up @@ -2273,4 +2273,71 @@ MAM00209c MAM00209 C16237 M00209 MNXM96070 m00209c m00209c
MAM00210c MAM00210 C16236 M00210 MNXM4090 m00210c m00210c
MAM01622x MAM01622 b2coa C00877 CHEBI:15473 5280381 HC00572 b2coa MNXM214 m01622p m01622p
MAM01690m MAM01690 dhap C00111 CHEBI:16108 668 HC00109 dhap MNXM77 m01690m m01690m
MAM03971e MAM03971 Temp001 temp001s
MAM20005c MAM20005 CHEBI:76645 72551583 MNXM145653
MAM20006c MAM20006 CHEBI:76647 6437827 LMFA01170034 MNXM23130
MAM20009c MAM20009 C00472 HMDB0003364 CHEBI:16509 4650 MNXM740100
MAM20010c MAM20010 hqn C00530 HMDB0002434 CHEBI:17594 785 MNXM376
MAM20016n MAM20016 C04707 HMDB0003175 CHEBI:57400 5280719 LMFA03010030 MNXM1619
MAM20025i MAM20025 CHEBI:76636 72551575 MNXM146872
MAM20029i MAM20029 CHEBI:76628 169433 LMFA01050165 MNXM22530
MAM20031i MAM20031 CHEBI:132031 13111890 MNXM163120
MAM20033c MAM20033 gal_bD C00962 HMDB0003449 CHEBI:27667 439353 MNXM112
MAM20044c MAM20044 C19624 HMDB0304092 CHEBI:76298 52940145 MNXM6762
MAM20046c MAM20046 ocdcal C01838 HMDB0002384 CHEBI:17034 12533 LMFA06000098 MNXM2269
MAM20048c MAM20048 ddcal C02278 HMDB0033933 CHEBI:27836 8194 LMFA06000071 MNXM11432
MAM20053r MAM20053 octal C01545 HMDB0001140 CHEBI:17935 454 LMFA06000028 MNXM2705
MAM02878m MAM02878 alpam HMDB0006239 CHEBI:50622 24906333 LMFA08010025 alpam MNXM81220 m02878m m02878m
MAM03569c MAM03569 eidi1114ac C16525 HMDB0005060 CHEBI:77220 6439848 LMFA01031043 eidi1114ac MNXM1106188 eidi1114ac_c
MAM03569e MAM03569 eidi1114ac C16525 HMDB0005060 CHEBI:77220 6439848 LMFA01031043 eidi1114ac MNXM1106188 eidi1114ac_s
MAM00030c MAM00030 CN0023 C19559 HMDB0062223 CHEBI:82558 174597 M00030 MNXM13488 m00030c m00030c
MAM03171m MAM03171 2docopencoa CHEBI:76416 72193788 2docopencoa MNXM1103977 2docopencoa_m
MAM03171x MAM03171 2docopencoa CHEBI:76416 72193788 2docopencoa MNXM1103977 2docopencoa_p
MAM03284m MAM03284 5eipencoa C16165 HMDB0006514 CHEBI:63539 56927904 LMFA07050122 5eipencoa MNXM1105681 5eipencoa_m
MAM03972m MAM03972 tetd7ecoa CHEBI:232643 122706044 LMFA07050476 tetd7ecoa MNXM1102104 tetd7ecoa_m
MAM03353r MAM03353 CE4824 C16167 CHEBI:63543 56928006 LMFA07050141 CE4824 CE4824 MNXM1104016 CE4824_r
MAM00382c MAM00382 CE5304 HMDB0062298 5283052 LMFA03010051 M00382 MNXM734305 m00382c m00382c
MAM00392c MAM00392 15kprostgf2 C05960 HMDB0004240 CHEBI:133409 5280887 LMFA03010026 M00392 MNXM1104949 m00392c m00392c
MAM00435c MAM00435 CN0021 C19489 HMDB0060341 CHEBI:82517 53297434 M00435 MNXM9729 m00435c m00435c
MAM00625c MAM00625 HMDB0002103 CHEBI:76591 123976 LMST01010147 M00625 MNXM1363872 m00625c m00625c
MAM00625m MAM00625 HMDB0002103 CHEBI:76591 123976 LMST01010147 M00625 MNXM1363872 m00625m m00625m
MAM00653c MAM00653 2hglut C02630 HMDB0059655 CHEBI:17084 43 LMFA01050483 M00653 MNXM1101251 m00653c m00653c
MAM00678m MAM00678 HMDB0001168 22833562 CE2435 dec24dicoa MNXM1104903 m00678m m00678m
MAM00678x MAM00678 HMDB0001168 22833562 CE2435 dec24dicoa MNXM1104903 m00678p m00678p
MAM03368c MAM03368 cholcoaone C05467 HMDB0006891 CHEBI:27379 440690 LMST01010216 CE5169 CE5169 MNXM1104105 CE5169_c
MAM00750c MAM00750 thcholst C01301 HMDB0003533 CHEBI:48940 439479 LMST04030164 HC00757 thcholst MNXM730282 m00750c m00750c
MAM00750m MAM00750 thcholst C01301 HMDB0003533 CHEBI:48940 439479 LMST04030164 HC00757 thcholst MNXM730282 m00750m m00750m
MAM00942c MAM00942 CE2313 HMDB0062381 CHEBI:78904 167817 LMST01010277 M00942 MNXM731211 m00942c m00942c
MAM01006c MAM01006 hretn C16677 HMDB0006254 CHEBI:63795 6438629 LMPR01090025 hretn MNXM1107685 m01006c m01006c
MAM01006e MAM01006 hretn C16677 HMDB0006254 CHEBI:63795 6438629 LMPR01090025 hretn MNXM1107685 m01006s m01006s
MAM01006n MAM01006 hretn C16677 HMDB0006254 CHEBI:63795 6438629 LMPR01090025 hretn MNXM1107685 m01006n
MAM03276c MAM03276 4mtob C01180 HMDB0001553 CHEBI:133493 473 LMFA01060170 4mtob MNXM276 4mtob_c
MAM01067c MAM01067 M01067 C22136 HMDB0304222 CHEBI:52386 22298942 LMST01010168 M01067 MNXM733491 m01067c m01067c
MAM01092c MAM01092 C05446 HMDB0001231 CHEBI:17278 193321 CE0232 M01092 MNXM162569 m01092c m01092c
MAM01092m MAM01092 C05446 HMDB0001231 CHEBI:17278 193321 CE0232 M01092 MNXM162569 m01092m m01092m
MAM03571m MAM03571 eitetcoa C02249 CHEBI:15514 5497113 LMFA07050288 eitetcoa MNXM1104493 eitetcoa_m
MAM03571x MAM03571 eitetcoa C02249 CHEBI:15514 5497113 LMFA07050288 eitetcoa MNXM1104493 eitetcoa_p
MAM01392c MAM01392 3hivac C20827 HMDB0000754 CHEBI:37084 69362 LMFA01050396 CE2028 CE2028 MNXM36533 m01392c m01392c
MAM01392e MAM01392 3hivac C20827 HMDB0000754 CHEBI:37084 69362 LMFA01050396 CE2028 CE2028 MNXM36533 m01392s
MAM04079c MAM04079 xolest205_hs HMDB0006731 CHEBI:84969 10372299 LMST01020015 xolest205_hs MNXM45917 xolest205_hs_c
MAM04079e MAM04079 xolest205_hs HMDB0006731 CHEBI:84969 10372299 LMST01020015 xolest205_hs MNXM45917 xolest205_hs_s
MAM04079l MAM04079 xolest205_hs HMDB0006731 CHEBI:84969 10372299 LMST01020015 xolest205_hs MNXM45917 xolest205_hs_l
MAM03978x MAM03978 tetdecdicoa 21252281 tetdecdicoa MNXM1364053 tetdecdicoa_p
MAM02146c MAM02146 i C05590 HMDB0012238 CHEBI:43451 24841 M02146 MNXM1371248 m02146c m02146c
MAM03787c MAM03787 ocdcya C01595 HMDB0000673 CHEBI:137735 5280450 LMFA01030120 ocdcya MNXM1108069 ocdcya_c
MAM03790c MAM03790 ocdececrn CHEBI:165598 53477830 ocdececrn MNXM1371268 ocdececrn_c
MAM03790m MAM03790 ocdececrn CHEBI:165598 53477830 ocdececrn MNXM1371268 ocdececrn_m
MAM03862c MAM03862 phacgly C05598 HMDB0000821 CHEBI:27480 68144 phacgly MNXM4775 phacgly_c
MAM03862e MAM03862 phacgly C05598 HMDB0000821 CHEBI:27480 68144 phacgly MNXM4775 phacgly_s
MAM03553m MAM03553 dmhptcoa CHEBI:84847 90008792 dmhptcoa MNXM1104111 dmhptcoa_m
MAM10030c MAM10030 C17649 CHEBI:133661 92805 LMST04010064 MNXM738311 m10030c
MAM10030e MAM10030 C17649 CHEBI:133661 92805 LMST04010064 MNXM738311 m10030s
MAM10026c MAM10026 thyochol C15516 CHEBI:52022 11954195 LMST05040010 MNXM1094293 m10026c
MAM10026e MAM10026 thyochol C15516 CHEBI:52022 11954195 LMST05040010 MNXM1094293 m10026s
MAM03032c MAM03032 CN0022 C19490 HMDB0060517 CHEBI:82518 156317 M03032 MNXM13085 m03032c m03032c
MAM20035c MAM20035 Glc_aD C00267 HMDB0003345 CHEBI:17925 79025 MNXM1105027
MAM20042c MAM20042 HMDB0010735 CHEBI:72745 5282743 LMFA01030054 MNXM31465
MAM20050c MAM20050 dcal C12307 HMDB0011623 CHEBI:31457 8175 LMFA06000052 MNXM7260
MAM20052c MAM20052 ttdcal HMDB0034283 CHEBI:84067 31291 LMFA06000078 MNXM13002
MAM20055c MAM20055 hpal C14390 HMDB0031475 CHEBI:34787 8130 LMFA06000001 MNXM8711
MAM20057c MAM20057 C16502 HMDB0303953 CHEBI:83276 5275507 MNXM735429
34 changes: 34 additions & 0 deletions data/deprecatedIdentifiers/deprecatedReactions.tsv
Original file line number Diff line number Diff line change
Expand Up @@ -405,3 +405,37 @@ MAR08610 HMR_8610 0 HMR_8610
MAR00449 R00848;R00849 r0205 R-HSA-188467 GLYC3PFADm;r0205 MNXR99875;MNXR106713 HMR_0449;HMR_0483 RCR12494;RCR21050 0 RHEA:31283;RHEA:18977 HMR_0449;HMR_0483
MAR01169 R00849;R00848 G3PD2m R00848C r0205 G3PD2m;r0205;HMR_0482 MNXR99878;MNXR106713;MNXR192664 HMR_0483;HMR_0482 RCR21050;RCR14578 0 RHEA:18977 G3PD2m;HMR_0483;HMR_0482;MAR00482;MAR00483
MAR08111 DHAPtm DHAPtc MNXR97366 0 DHAPtc
MAR08543 R03973 IDHPOXOX2b IDHPOXOX2b MNXR138528 HMR_8543 RCR14343 0 HMR_8543
MAR08544 R03539 IDHPOXOXb IDHPOXOXb MNXR138529 HMR_8544 RCR14344 0 HMR_8544
MAR01338 RE3422C HMR_1338;RE3422C MNXR103895 HMR_1338 RCR13330 0 HMR_1338
MAR01784 R08505 R-HSA-191983 P45027A1m MNXR205321 HMR_1784 RCR10924 0 HMR_1784
MAR01797 R07372 RE1803C RE1803C MNXR102296 HMR_1797 RCR13668 0 RHEA:19041 HMR_1797
MAR01802 R04807 RE1805M HMR_1802 HMR_1802 RCR10925 0 RHEA:14373 HMR_1802
MAR01803 R03507 RE2625C MNXR103703 HMR_1803 RCR13671 0 RHEA:40231 HMR_1803
MAR01806 R03507 RE2625M HMR_1806 RCR13673 0 RHEA:40231 HMR_1806
MAR08700 R08392 RAHY RAHY MNXR192028 HMR_8700 RCR13921 0 HMR_8700
MAR07052 R09416 RN0027C HMR_7052 MNXR104052 HMR_7052 RCR14068 0 HMR_7052
MAR07055 R09417 RN0028C HMR_7055 MNXR104053 HMR_7055 RCR14742 0 HMR_7055
MAR07056 R09418 RN0029C HMR_7056 MNXR104054 HMR_7056 RCR14743 0 HMR_7056
MAR03209 RE2625M RE2625M 0 RE2625M
MAR03420 RE3134C RE3134C MNXR103804 0 RHEA:46812 RE3134C
MAR03766 RE3251C RE3251C MNXR103851 0 RE3251C
MAR03768 RE3251M RE3251M MNXR103851 0 RE3251M
MAR03815 R03506 RE3346C RE3346C MNXR108215 0 RE3346C
MAR09934 R02683 15KPROSTGF2c 15KPROSTGF2c MNXR189137 0 15KPROSTGF2c
MAR09941 R05841 PHACGLYc PHACGLYc MNXR188659 0 RHEA:27850 RHEA:27850 PHACGLYc
MAR09945 XOLEST205CEH XOLEST205CEH MNXR158799 0 XOLEST205CEH
MAR09948 R08190 CE4843HYDc CE4843HYDc MNXR111762 0 CE4843HYDc
MAR10166 CE4843t CE4843t MNXR155166 0 CE4843t
MAR10167 CE4843td CE4843td MNXR155167 0 CE4843td
MAR10423 PHACGLYt PHACGLYt MNXR157011 0 PHACGLYt
MAR10424 EX_phacgly_e EX_phacgly[e] 0 EX_phacgly[e]
MAR10455 XOL27OHtmc XOL27OHtmc MNXR207080 0 XOL27OHtmc
MAR11527 3HIVActe 3HIVActe MNXR155148 0 3HIVActe
MAR11528 EX_3hivac_e EX_3hivac[e] 0 EX_3hivac[e]
MAR12221 EX_hyochol_e EX_hyochol[e] 0 EX_hyochol[e]
MAR12230 EX_thyochol_e EX_thyochol[e] 0 EX_thyochol[e]
MAR12262 HYOCHOLabc HYOCHOLabc 0 HYOCHOLabc
MAR12264 HYOCHOLt2 HYOCHOLt2 0 HYOCHOLt2
MAR12294 THYOCHOLabc THYOCHOLabc MNXR162993 0 THYOCHOLabc
MAR13041 EX_M00008_e EX_M00008[e] 0 EX_M00008[e]
12 changes: 6 additions & 6 deletions data/testResults/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@ own files. The pull request in each row is the one whose run last wrote those fi

| Result file(s) | Produced by | Last updated by |
| --- | --- | --- |
| `qc_duplicate_keys.csv`, `qc_empty_reactions.csv`, `qc_annotation_consistency.csv`, `qc_deprecation_completeness.csv`, `qc_metabolite_completeness.csv`, `qc_reaction_sanity.csv`, `qc_duplicate_reactions.csv`, `qc_unused_entities.csv`, `qc_growth_blockers.csv` | `qcModelChecks.py` | **PR #1103** (model QC checks) |
| `qc_annotation_issues.csv` | `annotationTest.py` | **PR #1103** (model QC checks) |
| `qc_status.tsv` (round-trip, YAML lint, metabolic tasks, growth) | `testYamlConversion.py`, `testMetabolicTasks.py`, `action-yamllint`, `qcModelChecks.py` (via `qcStatus.py`) | **PR #1103** (model QC checks) |
| `macaw_results.tsv`, `balance_results.csv`, `qc_structure_consistency.csv` | `macawTests.py`, `balanceTest.py`, `structureConsistencyTest.py` | **PR #1103** (MACAW and balance) |
| `memote_score.md` | `memoteSnapshot.py` (fast subset every PR; full suite via `/run memote`) | **PR #1103** (MEMOTE) |
| `gene-essential.csv`, `gene-essential_summary.md` | `gradedEssentiality.py` via `/run gene-essentiality` | **PR #1103** (gene essentiality) |
| `qc_duplicate_keys.csv`, `qc_empty_reactions.csv`, `qc_annotation_consistency.csv`, `qc_deprecation_completeness.csv`, `qc_metabolite_completeness.csv`, `qc_reaction_sanity.csv`, `qc_duplicate_reactions.csv`, `qc_unused_entities.csv`, `qc_growth_blockers.csv` | `qcModelChecks.py` | **PR #1090** (model QC checks) |
| `qc_annotation_issues.csv` | `annotationTest.py` | **PR #1090** (model QC checks) |
| `qc_status.tsv` (round-trip, YAML lint, metabolic tasks, growth) | `testYamlConversion.py`, `testMetabolicTasks.py`, `action-yamllint`, `qcModelChecks.py` (via `qcStatus.py`) | **PR #1090** (model QC checks) |
| `macaw_results.tsv`, `balance_results.csv`, `qc_structure_consistency.csv` | `macawTests.py`, `balanceTest.py`, `structureConsistencyTest.py` | **PR #1090** (MACAW and balance) |
| `memote_score.md` | `memoteSnapshot.py` (fast subset every PR; full suite via `/run memote`) | **PR #1090** (MEMOTE) |
| `gene-essential.csv`, `gene-essential_summary.md` | `gradedEssentiality.py` via `/run gene-essentiality` | **PR #1090** (gene essentiality) |

## 2. What each check means

Expand Down
1 change: 0 additions & 1 deletion data/testResults/balance_results.csv
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,6 @@ MAR07621,[protein] to [protein]-L-arginine conversion,C:1;H:1;N:1;O:1;R:2;X:-1,
MAR07625,NAD+:protein-L-arginine ADP-D-ribosyltransferase,C:-1;H:-1;N:-1;O:-1;R:-2;X:1,
MAR07741,Ferredoxin:NADP+ oxidoreductase,,-2
MAR08029,"signal peptidase I ([protein]-N6,N6,N6-trimethyl-L-lysine)",C:-1;H:-1;N:-1;O:-1;R:-2;X:1,
MAR08607,4-methylthio-2-oxobutanoic acid to glutamate conversion,,-2
MAR08615,ATP:cob(I)alamin Co-beta-adenosyltransferase,,1
MAR09487,NAD+:poly(adenosine diphosphate D-ribose)ADP-D-ribosyltransferase,,2
MAR09491,E2 ubiquitin-conjugating enzyme ([protein]-L-lysine),,-1
Expand Down
Loading