COBRA (part2)#

import cobra
from cobra.io import load_model

from cobra.flux_analysis import pfba
from cobra.flux_analysis import flux_variability_analysis as fva

import matplotlib.pyplot as plt
import seaborn as sns
model = load_model("textbook")
iJO1366 = load_model("iJO1366")

loopless FVA#

loop_reactions = [model.reactions.FRD7, model.reactions.SUCDi]
fva(model, reaction_list=loop_reactions, loopless=False)
minimum maximum
FRD7 0.000000 994.935624
SUCDi 5.064376 1000.000000
fva(model, reaction_list=loop_reactions, loopless=True)
minimum maximum
FRD7 0.000000 0.000000
SUCDi 5.064376 5.064376
# the pfba result is loopless
pfba(model, reactions=loop_reactions)
Optimal solution with objective value 518.422
fluxes reduced_costs
FRD7 0.000000 2.0
SUCDi 5.064376 -2.0

sampling#

from cobra.sampling.sampling import sample

sample_sol = sample(model, n=500, method="achr", seed=42)
sample_sol
ACALD ACALDt ACKr ACONTa ACONTb ACt2r ADK1 AKGDH AKGt2r ALCD2x ... RPI SUCCt2_2 SUCCt3 SUCDi SUCOAS TALA THD2 TKT1 TKT2 TPI
0 -4.481049 -2.839536 -0.692066 10.400648 10.400648 -0.692066 1.447077 2.863317 -2.111812 -1.641514 ... -0.473490 7.617392 7.755262 668.357990 -2.863317 0.443197 10.572209 0.443197 0.431015 9.462570
1 -0.779492 -0.306596 -1.228626 9.692888 9.692888 -1.228626 0.803017 6.370141 -0.624974 -0.472896 ... -1.768979 54.942941 55.715224 228.596170 -6.370141 1.742761 20.705869 1.742761 1.732218 7.964277
2 -1.894114 -0.000275 -2.042404 10.224750 10.224750 -2.042404 23.343452 0.506826 -0.730009 -1.893839 ... -1.786536 2.198418 2.489977 157.916141 -0.506826 1.743003 16.349777 1.743003 1.725496 8.148869
3 -2.744765 -1.672897 -2.614114 10.072536 10.072536 -2.614114 27.016072 0.673947 -0.144805 -1.071868 ... -1.381710 5.290880 5.481744 312.917036 -0.673947 1.353696 1.576802 1.353696 1.342431 8.469745
4 -2.268587 -1.607942 -1.956047 10.569591 10.569591 -1.956047 21.357706 0.710054 -0.030531 -0.660645 ... -0.404616 0.392730 0.717260 210.551417 -0.710054 0.403182 8.391685 0.403182 0.402606 8.877392
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
495 -1.737207 -0.139157 -2.341014 8.442549 8.442549 -2.341014 13.972420 6.964895 -0.105927 -1.598050 ... -0.325714 3.037855 3.842827 749.170998 -6.964895 0.260207 12.009416 0.260207 0.233864 8.667894
496 -2.722180 -0.874131 -0.443545 8.406808 8.406808 -0.443545 6.791994 6.810047 -0.268406 -1.848049 ... -0.214831 3.730362 3.739047 614.090280 -6.810047 0.186045 3.669406 0.186045 0.174468 8.005361
497 -2.419389 -1.605232 -0.504441 8.367405 8.367405 -0.504441 5.450679 7.142090 -0.787086 -0.814157 ... -1.190919 1.405163 1.442118 508.715987 -7.142090 1.188660 10.135013 1.188660 1.187752 8.793684
498 -2.385252 -2.063094 -0.892249 10.006036 10.006036 -0.892249 8.676443 9.162217 -0.440909 -0.322158 ... -3.029975 6.964370 8.344490 796.548686 -9.162217 3.023853 8.749494 3.023853 3.021390 6.443540
499 -1.377505 -0.401815 -0.327920 10.720754 10.720754 -0.327920 6.088160 7.475451 -0.279166 -0.975690 ... -1.746282 6.887537 7.211974 584.377912 -7.475451 1.621293 21.983079 1.621293 1.571030 7.689503

500 rows × 95 columns

sns.displot(sample_sol["ACALD"], kde=True)
<seaborn.axisgrid.FacetGrid at 0x7fdc1f6d6490>
_images/17f3f07e16f7e9e2727cb4b05215769338f6a5d452ecc6e1ccede5c52490c101.png
sns.set(style="white")
f, ax = plt.subplots(figsize=(22, 18))
sns.heatmap(sample_sol.loc[:, (sample_sol != 0).all(axis=0)].corr(), cmap="YlGnBu", center=0, square=True, linewidths=.1, cbar_kws={"shrink": .5})
<Axes: >
_images/e22801ee56fb536bbcf7b3a5769c313992a51a0fded4c9e45482aafd3d43e0d4.png

Gene and reaction essentiality#

from cobra.flux_analysis import (
    single_gene_deletion, single_reaction_deletion, double_gene_deletion,
    double_reaction_deletion)

print('complete model: ', model.slim_optimize())
with model:
    model.reactions.PFK.knock_out()
    print('pfk knocked out: ', model.slim_optimize())
complete model:  0.8739215069684334
pfk knocked out:  0.7040369478590247
gene_deletion_results = single_gene_deletion(model)

gene_deletion_results
ids growth status
0 {b4015} 0.873922 optimal
1 {b0008} 0.873922 optimal
2 {b2417} 0.873922 optimal
3 {b0734} 0.873922 optimal
4 {b3114} 0.873922 optimal
... ... ... ...
132 {b0979} 0.873922 optimal
133 {b0733} 0.873922 optimal
134 {b3528} 0.873922 optimal
135 {b3115} 0.873922 optimal
136 {b0728} 0.858307 optimal

137 rows × 3 columns

# essential genes
gene_deletion_results[(gene_deletion_results["status"] != "optimal") | gene_deletion_results["growth"] < 0.1]
ids growth status
rxn_deletion_results = single_reaction_deletion(model)
rxn_deletion_results
ids growth status
0 {GAPD} 6.384785e-18 optimal
1 {MALt2_2} 8.739215e-01 optimal
2 {FORti} 8.739215e-01 optimal
3 {PPCK} 8.739215e-01 optimal
4 {O2t} 2.116629e-01 optimal
... ... ... ...
90 {Biomass_Ecoli_core} 0.000000e+00 optimal
91 {TALA} 8.647592e-01 optimal
92 {TPI} 7.040369e-01 optimal
93 {PFK} 7.040369e-01 optimal
94 {ICL} 8.739215e-01 optimal

95 rows × 3 columns

# essential reactions
rxn_deletion_results[(rxn_deletion_results["status"] != "optimal") | rxn_deletion_results["growth"] < 0.1]
ids growth status
20 {GLNS} 0.0 optimal
82 {EX_pi_e} 0.0 optimal
90 {Biomass_Ecoli_core} 0.0 optimal
del_double_genes = double_gene_deletion(model)
del_double_genes[(del_double_genes["status"] != "optimal") | del_double_genes["growth"] < 0.1]
ids growth status
242 {b0728, b1136} 0.0 optimal
351 {b2926, b1241} 0.0 optimal
573 {b3870, b1779} 0.0 optimal
574 {b2926, b1297} 0.0 optimal
2162 {b0451, s0001} 0.0 optimal
2270 {b1136} 0.0 optimal
2364 {b3738, b1136} 0.0 optimal
2496 {b2779, b3612} 0.0 optimal
3125 {b1812, b1136} 0.0 optimal
3489 {b0734, b1136} 0.0 optimal
3921 {b2281, b1136} 0.0 optimal
4004 {b2926, b1479} 0.0 optimal
4100 {b2779, b2465} 0.0 optimal
4910 {b4090, b1779} 0.0 optimal
4952 {b3114, b1136} 0.0 optimal
5075 {b0721, b1136} 0.0 optimal
5116 {b2779, b1621} 0.0 optimal
5160 {b0720, b0474} 0.0 optimal
5499 {b3403, b1136} 0.0 optimal
5676 {b0720, b0904} 0.0 optimal
5972 {b0720, b1819} 0.0 optimal
6018 {b0114, b1136} 0.0 optimal
6206 {b0722, b1136} 0.0 optimal
6281 {b0720, b1478} 0.0 optimal
6327 {b0720, b2286} 0.0 optimal
6721 {b0978, b1136} 0.0 optimal
7160 {b2465, b2935} 0.0 optimal
7174 {b3528, b1779} 0.0 optimal
7175 {b1676, b1779} 0.0 optimal
7176 {b2417, b0720} 0.0 optimal
7668 {b2779, b4077} 0.0 optimal
7669 {b2779, b3952} 0.0 optimal
7983 {b0720, b1773} 0.0 optimal
8228 {b0810, b1136} 0.0 optimal
8268 {b0720, b4301} 0.0 optimal
8495 {b2926, b0485} 0.0 optimal
8575 {b2926, b0116} 0.0 optimal
8635 {b0978, b2926} 0.0 optimal
8850 {b2587, b1136} 0.0 optimal
9100 {b0720, b1101} 0.0 optimal
9148 {b0720, b1380} 0.0 optimal
del_double_rxns = double_reaction_deletion(model)
del_double_rxns[(del_double_rxns["status"] != "optimal") | del_double_rxns["growth"] < 0.1]
ids growth status
19 {PPC, NH4t} 0.0 optimal
20 {ACONTb, ACKr} 0.0 optimal
39 {AKGDH, GLNS} 0.0 optimal
40 {GLNS, ATPM} 0.0 optimal
46 {GLUt2r, PGM} 0.0 optimal
... ... ... ...
4463 {EX_pi_e, Biomass_Ecoli_core} 0.0 optimal
4502 {TALA, Biomass_Ecoli_core} 0.0 optimal
4515 {Biomass_Ecoli_core, GAPD} 0.0 optimal
4521 {FORti, NH4t} 0.0 optimal
4539 {NH4t, MALS} 0.0 optimal

274 rows × 3 columns

Consistency testing#

# find block reactions (cannot generate flux)
blocked_reactions = cobra.flux_analysis.find_blocked_reactions(iJO1366)
blocked_reactions
['DM_aacald_c',
 'EX_14glucan_e',
 'EX_23camp_e',
 'EX_23ccmp_e',
 'EX_23cgmp_e',
 'EX_23cump_e',
 'EX_23dappa_e',
 'EX_26dap__M_e',
 'EX_2ddglcn_e',
 'EX_34dhpac_e',
 'EX_3amp_e',
 'EX_3cmp_e',
 'EX_3gmp_e',
 'EX_3hcinnm_e',
 'EX_3hpppn_e',
 'EX_3ump_e',
 'EX_4hoxpacd_e',
 'EX_LalaDglu_e',
 'EX_LalaLglu_e',
 'EX_acac_e',
 'EX_acgal_e',
 'EX_acgal1p_e',
 'EX_acgam_e',
 'EX_acgam1p_e',
 'EX_acmana_e',
 'EX_acmum_e',
 'EX_acnam_e',
 'EX_adocbl_e',
 'EX_ag_e',
 'EX_ala_B_e',
 'EX_all__D_e',
 'EX_amp_e',
 'EX_arab__L_e',
 'EX_arbt_e',
 'EX_arbtn_e',
 'EX_arbtn_fe3_e',
 'EX_ascb__L_e',
 'EX_aso3_e',
 'EX_btn_e',
 'EX_but_e',
 'EX_butso3_e',
 'EX_cbi_e',
 'EX_cd2_e',
 'EX_chol_e',
 'EX_chtbs_e',
 'EX_cm_e',
 'EX_cmp_e',
 'EX_cpgn_e',
 'EX_cpgn_un_e',
 'EX_crn_e',
 'EX_crn__D_e',
 'EX_csn_e',
 'EX_cu_e',
 'EX_cyan_e',
 'EX_cynt_e',
 'EX_cys__D_e',
 'EX_dad_2_e',
 'EX_damp_e',
 'EX_dca_e',
 'EX_dcmp_e',
 'EX_dcyt_e',
 'EX_ddca_e',
 'EX_dgmp_e',
 'EX_dgsn_e',
 'EX_dimp_e',
 'EX_din_e',
 'EX_dms_e',
 'EX_dmso_e',
 'EX_dopa_e',
 'EX_doxrbcn_e',
 'EX_dtmp_e',
 'EX_dump_e',
 'EX_duri_e',
 'EX_ethso3_e',
 'EX_f6p_e',
 'EX_fald_e',
 'EX_fe3dcit_e',
 'EX_fe3dhbzs_e',
 'EX_fe3hox_e',
 'EX_fe3hox_un_e',
 'EX_fecrm_e',
 'EX_fecrm_un_e',
 'EX_feoxam_e',
 'EX_feoxam_un_e',
 'EX_fru_e',
 'EX_frulys_e',
 'EX_fruur_e',
 'EX_fuc__L_e',
 'EX_fum_e',
 'EX_fusa_e',
 'EX_g1p_e',
 'EX_g3pc_e',
 'EX_g3pi_e',
 'EX_g3ps_e',
 'EX_g6p_e',
 'EX_gal_e',
 'EX_gal_bD_e',
 'EX_gal1p_e',
 'EX_galct__D_e',
 'EX_galctn__D_e',
 'EX_galctn__L_e',
 'EX_galt_e',
 'EX_galur_e',
 'EX_gam_e',
 'EX_gam6p_e',
 'EX_gbbtn_e',
 'EX_gdp_e',
 'EX_glcr_e',
 'EX_glcur_e',
 'EX_glcur1p_e',
 'EX_gln__L_e',
 'EX_glyb_e',
 'EX_glyc2p_e',
 'EX_gmp_e',
 'EX_gsn_e',
 'EX_gthox_e',
 'EX_gtp_e',
 'EX_h2_e',
 'EX_h2o2_e',
 'EX_hacolipa_e',
 'EX_halipa_e',
 'EX_hdca_e',
 'EX_hdcea_e',
 'EX_hg2_e',
 'EX_imp_e',
 'EX_inost_e',
 'EX_isetac_e',
 'EX_lcts_e',
 'EX_lipoate_e',
 'EX_lyx__L_e',
 'EX_mal__D_e',
 'EX_malt_e',
 'EX_malthx_e',
 'EX_maltpt_e',
 'EX_malttr_e',
 'EX_maltttr_e',
 'EX_man_e',
 'EX_man6p_e',
 'EX_manglyc_e',
 'EX_melib_e',
 'EX_met__D_e',
 'EX_met__L_e',
 'EX_metsox_R__L_e',
 'EX_metsox_S__L_e',
 'EX_mincyc_e',
 'EX_minohp_e',
 'EX_mmet_e',
 'EX_mnl_e',
 'EX_mso3_e',
 'EX_n2o_e',
 'EX_na1_e',
 'EX_nac_e',
 'EX_nmn_e',
 'EX_no_e',
 'EX_no2_e',
 'EX_no3_e',
 'EX_novbcn_e',
 'EX_o16a4colipa_e',
 'EX_o2s_e',
 'EX_ocdca_e',
 'EX_ocdcea_e',
 'EX_octa_e',
 'EX_orot_e',
 'EX_pacald_e',
 'EX_peamn_e',
 'EX_pnto__R_e',
 'EX_ppa_e',
 'EX_ppal_e',
 'EX_pppn_e',
 'EX_ppt_e',
 'EX_progly_e',
 'EX_psclys_e',
 'EX_pser__L_e',
 'EX_pydam_e',
 'EX_pydx_e',
 'EX_pydxn_e',
 'EX_r5p_e',
 'EX_rfamp_e',
 'EX_rib__D_e',
 'EX_rmn_e',
 'EX_sbt__D_e',
 'EX_sel_e',
 'EX_ser__D_e',
 'EX_skm_e',
 'EX_slnt_e',
 'EX_so2_e',
 'EX_so3_e',
 'EX_sucr_e',
 'EX_sulfac_e',
 'EX_tartr__D_e',
 'EX_tartr__L_e',
 'EX_taur_e',
 'EX_tcynt_e',
 'EX_thm_e',
 'EX_thrp_e',
 'EX_tma_e',
 'EX_tmao_e',
 'EX_tre_e',
 'EX_tsul_e',
 'EX_ttdca_e',
 'EX_ttdcea_e',
 'EX_ttrcyc_e',
 'EX_tungs_e',
 'EX_tym_e',
 'EX_tyrp_e',
 'EX_uacgam_e',
 'EX_udpacgal_e',
 'EX_udpg_e',
 'EX_udpgal_e',
 'EX_udpglcur_e',
 'EX_ump_e',
 'EX_xmp_e',
 'EX_xyl__D_e',
 'EX_xylu__L_e',
 '14GLUCANabcpp',
 '14GLUCANtexi',
 '23CAMPtex',
 '23CCMPtex',
 '23CGMPtex',
 '23CUMPtex',
 '23DAPPAt2pp',
 '23DAPPAtex',
 '23PDE2pp',
 '23PDE4pp',
 '23PDE7pp',
 '23PDE9pp',
 '26DAHtex',
 '2DGULRGx',
 '2DGULRGy',
 '2DGULRx',
 '2DGULRy',
 '34dhpactex',
 '3AMPtex',
 '3CMPtex',
 '3GMPtex',
 '3HCINNMH',
 '3HPPPNH',
 '3KGK',
 '3NTD2pp',
 '3NTD4pp',
 '3NTD7pp',
 '3NTD9pp',
 '3OXCOAT',
 '3UMPtex',
 '42A12BOOXpp',
 '4HOXPACDtex',
 '4HTHRS',
 'AAMYL',
 'AAMYLpp',
 'AB6PGH',
 'ACACCT',
 'ACACt2pp',
 'ACACtex',
 'ACANTHAT',
 'ACBIPGT',
 'ACGAL1PPpp',
 'ACGAL1Ptex',
 'ACGALtex',
 'ACGAM1PPpp',
 'ACGAM1Ptex',
 'ACGAptspp',
 'ACGAtex',
 'ACMANAptspp',
 'ACMANAtex',
 'ACMUMptspp',
 'ACMUMtex',
 'ACNAMt2pp',
 'ACNAMtex',
 'ACNML',
 'ACONIs',
 'ACONMT',
 'ACPS1',
 'ADOCBIK',
 'ADOCBLS',
 'ADOCBLabcpp',
 'ADOCBLtonex',
 'AGt3',
 'ALATRS',
 'ALDD19xr',
 'ALDD3y',
 'ALDD4',
 'ALLK',
 'ALLPI',
 'ALLULPE',
 'ALLabcpp',
 'ALLtex',
 'ALPATE160pp',
 'ALPATG160pp',
 'ALTRH',
 'AMALT1',
 'AMALT2',
 'AMALT3',
 'AMALT4',
 'AMANAPEr',
 'AMANK',
 'AMPTASEPG',
 'AMPtex',
 'AP5AH',
 'APCS',
 'APPLDHr',
 'ARAI',
 'ARBTptspp',
 'ARBTtex',
 'ARBtex',
 'ARGTRS',
 'ASCBPL',
 'ASCBptspp',
 'ASCBtex',
 'ASNTRS',
 'ASO3t8pp',
 'ASO3tex',
 'ASPTRS',
 'ASR',
 'BALAt2pp',
 'BALAtex',
 'BETALDHx',
 'BETALDHy',
 'BSORx',
 'BSORy',
 'BTNt2ipp',
 'BTNtex',
 'BUTCT',
 'BUTSO3abcpp',
 'BUTSO3tex',
 'BUTt2rpp',
 'BUTtex',
 'BWCOGDS1',
 'BWCOGDS2',
 'BWCOS',
 'CAT',
 'CBIAT',
 'CBItonex',
 'CBIuabcpp',
 'CCGS',
 'CD2tex',
 'CDGR',
 'CDGS',
 'CFAS160E',
 'CFAS160G',
 'CFAS180E',
 'CFAS180G',
 'CHLabcpp',
 'CHLt2pp',
 'CHLtex',
 'CHOLD',
 'CHTBSptspp',
 'CHTBStex',
 'CINNDO',
 'CMPtex',
 'CPH4S',
 'CRNBTCT',
 'CRNCAL2',
 'CRNCAR',
 'CRNCBCT',
 'CRNCDH',
 'CRNDCAL2',
 'CRNDtex',
 'CRNt7pp',
 'CRNtex',
 'CSNt2pp',
 'CSNtex',
 'CTBTCAL2',
 'CU1Opp',
 'CU1abcpp',
 'CUt3',
 'CUtex',
 'CYANST',
 'CYANSTpp',
 'CYANtex',
 'CYNTAH',
 'CYNTt2pp',
 'CYNTtex',
 'CYSDDS',
 'CYSDabcpp',
 'CYSDtex',
 'CYSSADS',
 'CYSTRS',
 'DADNt2pp',
 'DADNtex',
 'DAMPtex',
 'DAPAL',
 'DAPabcpp',
 'DC6PH',
 'DCAtex',
 'DCMPtex',
 'DCYTt2pp',
 'DCYTtex',
 'DDCAtexi',
 'DDGALK',
 'DDGLCNt2rpp',
 'DDGLCNtex',
 'DDGLK',
 'DDPGALA',
 'DGMPtex',
 'DGSNt2pp',
 'DGSNtex',
 'DHACOAH',
 'DHCIND',
 'DHCINDO',
 'DHMPTR',
 'DHNPTE',
 'DHPPD',
 'DHPTDNR',
 'DHPTDNRN',
 'DHPTPE',
 'DIMPtex',
 'DINSt2pp',
 'DINStex',
 'DKGLCNR1',
 'DKGLCNR2x',
 'DKGLCNR2y',
 'DMSOR1',
 'DMSOR1pp',
 'DMSOR2',
 'DMSOR2pp',
 'DMSOtex',
 'DMSOtpp',
 'DMStex',
 'DOGULNR',
 'DOPAtex',
 'DSBAO1',
 'DSBAO2',
 'DSBCGT',
 'DSBDR',
 'DSBGGT',
 'DSERt2pp',
 'DSERtex',
 'DTARTD',
 'DTMPtex',
 'DUMPtex',
 'DURADx',
 'DURIt2pp',
 'DURItex',
 'DXYLK',
 'ETHSO3abcpp',
 'ETHSO3tex',
 'F6Pt6_2pp',
 'F6Ptex',
 'FACOAL100t2pp',
 'FACOAL80t2pp',
 'FALDH2',
 'FALDtex',
 'FALDtpp',
 'FALGTHLs',
 'FCI',
 'FCLK',
 'FCLPA',
 'FDMO',
 'FDMO2',
 'FDMO3',
 'FDMO4',
 'FDMO6',
 'FE3DCITabcpp',
 'FE3DCITtonex',
 'FE3DHBZR',
 'FE3DHBZSabcpp',
 'FE3DHBZStonex',
 'FESD2s',
 'FFSD',
 'FHL',
 'FMETTRS',
 'FORCT',
 'FRUK',
 'FRULYSDG',
 'FRULYSE',
 'FRULYSK',
 'FRULYSt2pp',
 'FRULYStex',
 'FRUURt2rpp',
 'FRUURtex',
 'FRUpts2pp',
 'FRUptspp',
 'FRUtex',
 'FUCtex',
 'FUCtpp',
 'FUMt2_2pp',
 'FUMt2_3pp',
 'FUMtex',
 'G1PPpp',
 'G1Ptex',
 'G2PP',
 'G2PPpp',
 'G3PCabcpp',
 'G3PCtex',
 'G3PIabcpp',
 'G3PItex',
 'G3PSabcpp',
 'G3PStex',
 'G6Pt6_2pp',
 'G6Ptex',
 'GAL1PPpp',
 'GAL1Ptex',
 'GALBDtex',
 'GALCTD',
 'GALCTLO',
 'GALCTND',
 'GALCTNLt2pp',
 'GALCTNLtex',
 'GALCTNt2pp',
 'GALCTNtex',
 'GALCTt2rpp',
 'GALCTtex',
 'GALKr',
 'GALM2pp',
 'GALS3',
 'GALTptspp',
 'GALTtex',
 'GALURt2rpp',
 'GALURtex',
 'GALabcpp',
 'GALt2pp',
 'GALtex',
 'GAM6Pt6_2pp',
 'GAMAN6Ptex',
 'GAMptspp',
 'GAMtex',
 'GBBTNtex',
 'GDMANE',
 'GDPtex',
 'GHBDHx',
 'GLCATr',
 'GLCRAL',
 'GLCRD',
 'GLCRt2rpp',
 'GLCRtex',
 'GLCUR1Ptex',
 'GLCURt2rpp',
 'GLCURtex',
 'GLNTRS',
 'GLNabcpp',
 'GLNtex',
 'GLTPD',
 'GLUNpp',
 'GLYBabcpp',
 'GLYBt2pp',
 'GLYBtex',
 'GLYC2Pabcpp',
 'GLYC2Ptex',
 'GLYTRS',
 'GMAND',
 'GMPtex',
 'GOFUCR',
 'GP4GH',
 'GPDDA1',
 'GPDDA1pp',
 'GPDDA3',
 'GPDDA3pp',
 'GPDDA5',
 'GPDDA5pp',
 'GSNt2pp',
 'GSNtex',
 'GTHOXtex',
 'GTPtex',
 'GUI1',
 'GUI2',
 'GUR1PPpp',
 'H2O2tex',
 'H2tex',
 'H2tpp',
 'HADPCOADH3',
 'HCINNMt2rpp',
 'HCINNMtex',
 'HCYSMT2',
 'HDCAtexi',
 'HDCEAtexi',
 'HETZK',
 'HG2abcpp',
 'HG2t3pp',
 'HG2tex',
 'HISTRS',
 'HKNDDH',
 'HKNTDH',
 'HMPK1',
 'HOPNTAL',
 'HPPPNDO',
 'HPPPNt2rpp',
 'HPPPNtex',
 'HYD1pp',
 'HYD2pp',
 'HYD3pp',
 'ILETRS',
 'IMPtex',
 'INOSTt4pp',
 'INSTtex',
 'ISETACabcpp',
 'ISETACtex',
 'KG6PDC',
 'LACZ',
 'LACZpp',
 'LALADGLUtex',
 'LALADGLUtpp',
 'LALALGLUtex',
 'LALALGLUtpp',
 'LCTStex',
 'LEUTRS',
 'LIPAHT2ex',
 'LIPAHTex',
 'LIPAMPL',
 'LIPATPT',
 'LIPOt2pp',
 'LIPOtex',
 'LPLIPAL2ATE120',
 'LPLIPAL2ATE140',
 'LPLIPAL2ATE141',
 'LPLIPAL2ATE160',
 'LPLIPAL2ATE161',
 'LPLIPAL2ATE180',
 'LPLIPAL2ATE181',
 'LPLIPAL2ATG120',
 'LPLIPAL2ATG140',
 'LPLIPAL2ATG141',
 'LPLIPAL2ATG160',
 'LPLIPAL2ATG161',
 'LPLIPAL2ATG180',
 'LPLIPAL2ATG181',
 'LYSTRS',
 'LYXI',
 'LYXt2pp',
 'LYXtex',
 'M1PD',
 'MALDDH',
 'MALDt2_2pp',
 'MALDtex',
 'MALTATr',
 'MALTHXabcpp',
 'MALTHXtexi',
 'MALTPTabcpp',
 'MALTPTtexi',
 'MALTTRabcpp',
 'MALTTRtexi',
 'MALTTTRabcpp',
 'MALTTTRtexi',
 'MALTabcpp',
 'MALTptspp',
 'MALTtexi',
 'MAN6PI',
 'MAN6Pt6_2pp',
 'MAN6Ptex',
 'MANAO',
 'MANGLYCptspp',
 'MANGLYCtex',
 'MANPGH',
 'MANptspp',
 'MANtex',
 'MCPST',
 'MELIBtex',
 'METDabcpp',
 'METDtex',
 'METSOX1abcpp',
 'METSOX1tex',
 'METSOX2abcpp',
 'METSOX2tex',
 'METTRS',
 'METabcpp',
 'METtex',
 'MI1PP',
 'MINOHPtexi',
 'MLTG1',
 'MLTG2',
 'MMETt2pp',
 'MMETtex',
 'MNLptspp',
 'MNLtex',
 'MNNH',
 'MSO3abcpp',
 'MSO3tex',
 'MTRPOX',
 'N2Otex',
 'N2Otpp',
 'NACtex',
 'NACtpp',
 'NAtex',
 'NHFRBO',
 'NMNPtpp',
 'NMNt7pp',
 'NMNtex',
 'NNDMBRT',
 'NO2t2rpp',
 'NO2tex',
 'NO3R1bpp',
 'NO3R1pp',
 'NO3R2bpp',
 'NO3R2pp',
 'NO3t7pp',
 'NO3tex',
 'NODOx',
 'NODOy',
 'NOtex',
 'NOtpp',
 'NTD10pp',
 'NTD11pp',
 'NTD12pp',
 'NTD1pp',
 'NTD2pp',
 'NTD3pp',
 'NTD4pp',
 'NTD5pp',
 'NTD6pp',
 'NTD7pp',
 'NTD8pp',
 'NTD9pp',
 'NTP11',
 'NTP12',
 'NTP3pp',
 'NTRIR2x',
 'NTRIR3pp',
 'NTRIR4pp',
 'O16A4COLIPAabctex',
 'O16A4Lpp',
 'O16AP1pp',
 'O16AP2pp',
 'O16AP3pp',
 'O16AT',
 'O16AUNDtpp',
 'O16GALFT',
 'O16GLCT1',
 'O16GLCT2',
 'O2Stex',
 'OCDCAtexi',
 'OCDCEAtexi',
 'OCTAtex',
 'OP4ENH',
 'OROTt2_2pp',
 'OROTtex',
 'OXCDC',
 'OXCOAHDH',
 'OXDHCOAT',
 'PACALDt2rpp',
 'PACALDtex',
 'PACCOAE',
 'PACCOAL',
 'PEAMNOpp',
 'PEAMNtex',
 'PFK_2',
 'PGLYCP',
 'PHETRS',
 'PHYTSpp',
 'PNTOt4pp',
 'PNTOtex',
 'PPALtex',
 'PPALtpp',
 'PPAt4pp',
 'PPAtex',
 'PPPNDO',
 'PPPNt2rpp',
 'PPPNtex',
 'PPTHpp',
 'PPTtex',
 'PROGLYabcpp',
 'PROGLYtex',
 'PROTRS',
 'PSCLYSt2pp',
 'PSCLYStex',
 'PSERtex',
 'PSP_Lpp',
 'PTHRpp',
 'PYDAMtex',
 'PYDAMtpp',
 'PYDXNtex',
 'PYDXNtpp',
 'PYDXtex',
 'PYDXtpp',
 'QMO2',
 'QMO3',
 'R5PPpp',
 'R5Ptex',
 'RBK_L1',
 'RBP4E',
 'REPHACCOAI',
 'RIBabcpp',
 'RIBtex',
 'RMI',
 'RMK',
 'RMNtex',
 'RMNtpp',
 'RMPA',
 'RZ5PP',
 'SARCOX',
 'SBTPD',
 'SBTptspp',
 'SBTtex',
 'SELCYSS',
 'SELGTHR',
 'SELGTHR2',
 'SELGTHR3',
 'SELNPS',
 'SELR',
 'SELtex',
 'SELtpp',
 'SERTRS',
 'SERTRS2',
 'SFGTHi',
 'SKMt2pp',
 'SKMtex',
 'SLNTtex',
 'SLNTtpp',
 'SO2tex',
 'SO2tpp',
 'SO3tex',
 'SPMDAT1',
 'SPMDAT2',
 'SPODM',
 'SPODMpp',
 'SUCASPtpp',
 'SUCFUMtpp',
 'SUCMALtpp',
 'SUCRtex',
 'SUCTARTtpp',
 'SUCptspp',
 'SULFACabcpp',
 'SULFACtex',
 'TAGURr',
 'TARTD',
 'TARTRDtex',
 'TARTRt7pp',
 'TARTRtex',
 'TARTt2_3pp',
 'TAUDO',
 'TAURabcpp',
 'TAURtex',
 'TCYNTtex',
 'TDSR1',
 'TDSR2',
 'TGBPA',
 'THMabcpp',
 'THMtex',
 'THRPtex',
 'THRTRS',
 'TMAOR1',
 'TMAOR1pp',
 'TMAOR2',
 'TMAOR2pp',
 'TMAOtex',
 'TMAtex',
 'TMK',
 'TPRDCOAS',
 'TREHpp',
 'TREptspp',
 'TREtex',
 'TRPTRS',
 'TSULabcpp',
 'TSULtex',
 'TTDCAtexi',
 'TTDCEAtexi',
 'TUNGSabcpp',
 'TUNGStex',
 'TYMtex',
 'TYROXDApp',
 'TYRPpp',
 'TYRPtex',
 'TYRTRS',
 'ThDPAT',
 'UACGALPpp',
 'UACGAMPpp',
 'UACGAMtex',
 'UDPACGALtex',
 'UDPG4E',
 'UDPGALM',
 'UDPGALPpp',
 'UDPGALtex',
 'UDPGLCURtex',
 'UDPGPpp',
 'UDPGtex',
 'UGLCURPpp',
 'UGLT',
 'UMPtex',
 'VALTRS',
 'WCOS',
 'X5PL3E',
 'XMPtex',
 'XYLI1',
 'XYLK',
 'XYLK2',
 'XYLUt2pp',
 'XYLUtex',
 'XYLabcpp',
 'XYLt2pp',
 'XYLtex']
from cobra.flux_analysis import fastcc

consistent_iJO1366 = fastcc(iJO1366)
consistent_iJO1366
/home/runner/.virtualenvs/.venv/lib/python3.11/site-packages/cobra/core/group.py:147: UserWarning: need to pass in a list
  warn("need to pass in a list")
Name iJO1366
Memory address 7fdc1fcece10
Number of metabolites 1155
Number of reactions 1703
Number of genes 1019
Number of groups 37
Objective expression 1.0*BIOMASS_Ec_iJO1366_core_53p95M - 1.0*BIOMASS_Ec_iJO1366_core_53p95M_reverse_5c8b1
Compartments cytosol, extracellular space, periplasm
iJO1366
Name iJO1366
Memory address 7fdc20637510
Number of metabolites 1805
Number of reactions 2583
Number of genes 1367
Number of groups 37
Objective expression 1.0*BIOMASS_Ec_iJO1366_core_53p95M - 1.0*BIOMASS_Ec_iJO1366_core_53p95M_reverse_5c8b1
Compartments cytosol, extracellular space, periplasm
len(set([r.id for r in consistent_iJO1366.reactions]) ^ (set([r.id for r in iJO1366.reactions]) - set(blocked_reactions)))
2
set([r.id for r in consistent_iJO1366.reactions]) ^ (set([r.id for r in iJO1366.reactions]) - set(blocked_reactions))
{'ARBt2rpp', 'CTECOAI6'}