gsrap 0.7.0__py3-none-any.whl → 0.7.1__py3-none-any.whl
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.
- gsrap/.ipynb_checkpoints/__init__-checkpoint.py +31 -4
- gsrap/__init__.py +31 -4
- gsrap/commons/.ipynb_checkpoints/biomass-checkpoint.py +4 -0
- gsrap/commons/.ipynb_checkpoints/coeffs-checkpoint.py +1 -1
- gsrap/commons/.ipynb_checkpoints/fluxbal-checkpoint.py +1 -1
- gsrap/commons/biomass.py +4 -0
- gsrap/commons/coeffs.py +1 -1
- gsrap/commons/fluxbal.py +1 -1
- gsrap/mkmodel/.ipynb_checkpoints/gapfillutils-checkpoint.py +3 -0
- gsrap/mkmodel/.ipynb_checkpoints/mkmodel-checkpoint.py +10 -3
- gsrap/mkmodel/gapfillutils.py +3 -0
- gsrap/mkmodel/mkmodel.py +10 -3
- gsrap/parsedb/.ipynb_checkpoints/annotation-checkpoint.py +3 -0
- gsrap/parsedb/.ipynb_checkpoints/completeness-checkpoint.py +7 -4
- gsrap/parsedb/.ipynb_checkpoints/introduce-checkpoint.py +16 -1
- gsrap/parsedb/.ipynb_checkpoints/parsedb-checkpoint.py +1 -1
- gsrap/parsedb/.ipynb_checkpoints/repeating-checkpoint.py +7 -0
- gsrap/parsedb/annotation.py +3 -0
- gsrap/parsedb/completeness.py +7 -4
- gsrap/parsedb/introduce.py +16 -1
- gsrap/parsedb/parsedb.py +1 -1
- gsrap/parsedb/repeating.py +7 -0
- gsrap/runsims/.ipynb_checkpoints/simplegrowth-checkpoint.py +6 -7
- gsrap/runsims/simplegrowth.py +6 -7
- {gsrap-0.7.0.dist-info → gsrap-0.7.1.dist-info}/METADATA +1 -1
- {gsrap-0.7.0.dist-info → gsrap-0.7.1.dist-info}/RECORD +29 -29
- {gsrap-0.7.0.dist-info → gsrap-0.7.1.dist-info}/LICENSE.txt +0 -0
- {gsrap-0.7.0.dist-info → gsrap-0.7.1.dist-info}/WHEEL +0 -0
- {gsrap-0.7.0.dist-info → gsrap-0.7.1.dist-info}/entry_points.txt +0 -0
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import argparse
|
|
2
2
|
import sys
|
|
3
3
|
import traceback
|
|
4
|
+
import requests
|
|
4
5
|
import importlib.metadata
|
|
5
6
|
from datetime import datetime
|
|
7
|
+
from packaging import version
|
|
6
8
|
|
|
7
9
|
|
|
8
10
|
import cobra
|
|
@@ -29,8 +31,9 @@ solver_name = solver_name.replace("_interface", '')
|
|
|
29
31
|
def main():
|
|
30
32
|
|
|
31
33
|
|
|
32
|
-
# define the header of main- and sub-commands.
|
|
33
|
-
|
|
34
|
+
# define the header of main- and sub-commands.
|
|
35
|
+
current_version = importlib.metadata.metadata("gsrap")["Version"]
|
|
36
|
+
header = f'gsrap v{current_version},\ndeveloped by Gioele Lazzari (gioele.lazzari@univr.it).'
|
|
34
37
|
|
|
35
38
|
|
|
36
39
|
# create the command line arguments:
|
|
@@ -117,12 +120,36 @@ def main():
|
|
|
117
120
|
# set up the logger:
|
|
118
121
|
logger = get_logger('gsrap', args.verbose)
|
|
119
122
|
|
|
120
|
-
|
|
123
|
+
|
|
121
124
|
|
|
122
125
|
# show a welcome message:
|
|
123
126
|
set_header_trailer_formatter(logger.handlers[0])
|
|
124
127
|
logger.info(header + '\n')
|
|
125
|
-
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
# check if newer version is available
|
|
132
|
+
try:
|
|
133
|
+
response = requests.get(f"https://pypi.org/pypi/gsrap/json", timeout=3) # sends an HTTP GET request to the given URL
|
|
134
|
+
response.raise_for_status() # check the HTTP status code (e.g. 200, 404, 500): if not in the 2xx success range, raise requests.exceptions.HTTPError
|
|
135
|
+
data = response.json()
|
|
136
|
+
newest_version = data["info"]["version"]
|
|
137
|
+
except Exception as error: # eg requests.exceptions.Timeout, requests.exceptions.HTTPError
|
|
138
|
+
logger.info(f'Can\'t retrieve the number of the newest version. Please contact the developer reporting the following error: "{error}".')
|
|
139
|
+
logger.info('') # still no formatting here
|
|
140
|
+
# do not exit, continue with the program
|
|
141
|
+
if version.parse(current_version) < version.parse(newest_version):
|
|
142
|
+
warning_message = f"███ Last version is v{newest_version} and you have v{current_version}: please update gsrap! ███"
|
|
143
|
+
border = ''.join(['█' for i in range(len(warning_message))])
|
|
144
|
+
logger.info(border)
|
|
145
|
+
logger.info(warning_message)
|
|
146
|
+
logger.info(border)
|
|
147
|
+
logger.info('') # still no formatting here
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
# print the full command line:
|
|
152
|
+
command_line = ''
|
|
126
153
|
for arg, value in vars(args).items():
|
|
127
154
|
if arg == 'subcommand': command_line = command_line + f"gsrap {value} "
|
|
128
155
|
else: command_line = command_line + f"--{arg} {value} "
|
gsrap/__init__.py
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import argparse
|
|
2
2
|
import sys
|
|
3
3
|
import traceback
|
|
4
|
+
import requests
|
|
4
5
|
import importlib.metadata
|
|
5
6
|
from datetime import datetime
|
|
7
|
+
from packaging import version
|
|
6
8
|
|
|
7
9
|
|
|
8
10
|
import cobra
|
|
@@ -29,8 +31,9 @@ solver_name = solver_name.replace("_interface", '')
|
|
|
29
31
|
def main():
|
|
30
32
|
|
|
31
33
|
|
|
32
|
-
# define the header of main- and sub-commands.
|
|
33
|
-
|
|
34
|
+
# define the header of main- and sub-commands.
|
|
35
|
+
current_version = importlib.metadata.metadata("gsrap")["Version"]
|
|
36
|
+
header = f'gsrap v{current_version},\ndeveloped by Gioele Lazzari (gioele.lazzari@univr.it).'
|
|
34
37
|
|
|
35
38
|
|
|
36
39
|
# create the command line arguments:
|
|
@@ -117,12 +120,36 @@ def main():
|
|
|
117
120
|
# set up the logger:
|
|
118
121
|
logger = get_logger('gsrap', args.verbose)
|
|
119
122
|
|
|
120
|
-
|
|
123
|
+
|
|
121
124
|
|
|
122
125
|
# show a welcome message:
|
|
123
126
|
set_header_trailer_formatter(logger.handlers[0])
|
|
124
127
|
logger.info(header + '\n')
|
|
125
|
-
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
# check if newer version is available
|
|
132
|
+
try:
|
|
133
|
+
response = requests.get(f"https://pypi.org/pypi/gsrap/json", timeout=3) # sends an HTTP GET request to the given URL
|
|
134
|
+
response.raise_for_status() # check the HTTP status code (e.g. 200, 404, 500): if not in the 2xx success range, raise requests.exceptions.HTTPError
|
|
135
|
+
data = response.json()
|
|
136
|
+
newest_version = data["info"]["version"]
|
|
137
|
+
except Exception as error: # eg requests.exceptions.Timeout, requests.exceptions.HTTPError
|
|
138
|
+
logger.info(f'Can\'t retrieve the number of the newest version. Please contact the developer reporting the following error: "{error}".')
|
|
139
|
+
logger.info('') # still no formatting here
|
|
140
|
+
# do not exit, continue with the program
|
|
141
|
+
if version.parse(current_version) < version.parse(newest_version):
|
|
142
|
+
warning_message = f"███ Last version is v{newest_version} and you have v{current_version}: please update gsrap! ███"
|
|
143
|
+
border = ''.join(['█' for i in range(len(warning_message))])
|
|
144
|
+
logger.info(border)
|
|
145
|
+
logger.info(warning_message)
|
|
146
|
+
logger.info(border)
|
|
147
|
+
logger.info('') # still no formatting here
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
# print the full command line:
|
|
152
|
+
command_line = ''
|
|
126
153
|
for arg, value in vars(args).items():
|
|
127
154
|
if arg == 'subcommand': command_line = command_line + f"gsrap {value} "
|
|
128
155
|
else: command_line = command_line + f"--{arg} {value} "
|
|
@@ -190,6 +190,10 @@ def introduce_universal_biomass(logger, dbexp, universe):
|
|
|
190
190
|
r.build_reaction_from_string(rstring)
|
|
191
191
|
|
|
192
192
|
|
|
193
|
+
# add SBO annotation
|
|
194
|
+
r.annotation['sbo'] = ['SBO:0000629'] # biomass reaction
|
|
195
|
+
|
|
196
|
+
|
|
193
197
|
# set as objective:
|
|
194
198
|
universe.objective = 'Biomass'
|
|
195
199
|
|
|
@@ -267,7 +267,7 @@ def compute_exp_LIPIDS_coeffs(logger, model, MWF, LIPIDS_PL, LIPIDS_FA):
|
|
|
267
267
|
r.bounds = (0, 1000)
|
|
268
268
|
r.gene_reaction_rule = 'spontaneous'
|
|
269
269
|
r.update_genes_from_gpr()
|
|
270
|
-
|
|
270
|
+
|
|
271
271
|
|
|
272
272
|
# determine 'L' formula and charge (charge should be -1 like every fatty acid)
|
|
273
273
|
L_dict = dict() # for 1 mol
|
gsrap/commons/biomass.py
CHANGED
|
@@ -190,6 +190,10 @@ def introduce_universal_biomass(logger, dbexp, universe):
|
|
|
190
190
|
r.build_reaction_from_string(rstring)
|
|
191
191
|
|
|
192
192
|
|
|
193
|
+
# add SBO annotation
|
|
194
|
+
r.annotation['sbo'] = ['SBO:0000629'] # biomass reaction
|
|
195
|
+
|
|
196
|
+
|
|
193
197
|
# set as objective:
|
|
194
198
|
universe.objective = 'Biomass'
|
|
195
199
|
|
gsrap/commons/coeffs.py
CHANGED
|
@@ -267,7 +267,7 @@ def compute_exp_LIPIDS_coeffs(logger, model, MWF, LIPIDS_PL, LIPIDS_FA):
|
|
|
267
267
|
r.bounds = (0, 1000)
|
|
268
268
|
r.gene_reaction_rule = 'spontaneous'
|
|
269
269
|
r.update_genes_from_gpr()
|
|
270
|
-
|
|
270
|
+
|
|
271
271
|
|
|
272
272
|
# determine 'L' formula and charge (charge should be -1 like every fatty acid)
|
|
273
273
|
L_dict = dict() # for 1 mol
|
gsrap/commons/fluxbal.py
CHANGED
|
@@ -64,6 +64,7 @@ def create_model_incore(params):
|
|
|
64
64
|
# remove universal orphans
|
|
65
65
|
model = remove_universal_orphans(logger, model)
|
|
66
66
|
|
|
67
|
+
|
|
67
68
|
|
|
68
69
|
###### PRUNING
|
|
69
70
|
logger.info("Reading provided eggnog-mapper annotation...")
|
|
@@ -77,6 +78,7 @@ def create_model_incore(params):
|
|
|
77
78
|
translate_remaining_kos(logger, model, eggnog_ko_to_gids)
|
|
78
79
|
restore_gene_annotations(logger, model, universe, eggonog_gid_to_kos)
|
|
79
80
|
|
|
81
|
+
|
|
80
82
|
|
|
81
83
|
###### GAPFILLING
|
|
82
84
|
# force inclusion of reactions:
|
|
@@ -103,30 +105,35 @@ def create_model_incore(params):
|
|
|
103
105
|
if type(df_P)==int: return 1
|
|
104
106
|
|
|
105
107
|
|
|
106
|
-
###### POLISHING 2
|
|
107
|
-
# remove disconnected metabolites
|
|
108
|
-
model = remove_disconnected(logger, model)
|
|
109
108
|
|
|
109
|
+
###### POLISHING 2
|
|
110
110
|
# remove unsed sinks and demands
|
|
111
111
|
model = remove_sinks_demands(logger, model)
|
|
112
|
+
|
|
113
|
+
# remove disconnected metabolites
|
|
114
|
+
model = remove_disconnected(logger, model)
|
|
112
115
|
|
|
116
|
+
|
|
113
117
|
|
|
114
118
|
# # # # # DERIVATION ENDS HERE # # # # #
|
|
115
119
|
log_metrics(logger, model)
|
|
116
120
|
log_unbalances(logger, model)
|
|
117
121
|
|
|
118
122
|
|
|
123
|
+
|
|
119
124
|
###### CHECKS
|
|
120
125
|
# check blocked metabolites / dead-ends
|
|
121
126
|
df_S = biosynthesis_on_media(logger, model, dbexp, args.gap_fill, args.biosynth)
|
|
122
127
|
if type(df_S)==int: return 1
|
|
123
128
|
|
|
124
129
|
|
|
130
|
+
|
|
125
131
|
###### POLISHING 3
|
|
126
132
|
# reset growth environment befor saving the model
|
|
127
133
|
gempipe.reset_growth_env(model)
|
|
128
134
|
|
|
129
135
|
|
|
136
|
+
|
|
130
137
|
# output the model:
|
|
131
138
|
logger.info("Writing strain-specific model...")
|
|
132
139
|
cobra.io.save_json_model(model, f'{args.outdir}/{model.id}.json') # JSON
|
gsrap/mkmodel/gapfillutils.py
CHANGED
gsrap/mkmodel/mkmodel.py
CHANGED
|
@@ -64,6 +64,7 @@ def create_model_incore(params):
|
|
|
64
64
|
# remove universal orphans
|
|
65
65
|
model = remove_universal_orphans(logger, model)
|
|
66
66
|
|
|
67
|
+
|
|
67
68
|
|
|
68
69
|
###### PRUNING
|
|
69
70
|
logger.info("Reading provided eggnog-mapper annotation...")
|
|
@@ -77,6 +78,7 @@ def create_model_incore(params):
|
|
|
77
78
|
translate_remaining_kos(logger, model, eggnog_ko_to_gids)
|
|
78
79
|
restore_gene_annotations(logger, model, universe, eggonog_gid_to_kos)
|
|
79
80
|
|
|
81
|
+
|
|
80
82
|
|
|
81
83
|
###### GAPFILLING
|
|
82
84
|
# force inclusion of reactions:
|
|
@@ -103,30 +105,35 @@ def create_model_incore(params):
|
|
|
103
105
|
if type(df_P)==int: return 1
|
|
104
106
|
|
|
105
107
|
|
|
106
|
-
###### POLISHING 2
|
|
107
|
-
# remove disconnected metabolites
|
|
108
|
-
model = remove_disconnected(logger, model)
|
|
109
108
|
|
|
109
|
+
###### POLISHING 2
|
|
110
110
|
# remove unsed sinks and demands
|
|
111
111
|
model = remove_sinks_demands(logger, model)
|
|
112
|
+
|
|
113
|
+
# remove disconnected metabolites
|
|
114
|
+
model = remove_disconnected(logger, model)
|
|
112
115
|
|
|
116
|
+
|
|
113
117
|
|
|
114
118
|
# # # # # DERIVATION ENDS HERE # # # # #
|
|
115
119
|
log_metrics(logger, model)
|
|
116
120
|
log_unbalances(logger, model)
|
|
117
121
|
|
|
118
122
|
|
|
123
|
+
|
|
119
124
|
###### CHECKS
|
|
120
125
|
# check blocked metabolites / dead-ends
|
|
121
126
|
df_S = biosynthesis_on_media(logger, model, dbexp, args.gap_fill, args.biosynth)
|
|
122
127
|
if type(df_S)==int: return 1
|
|
123
128
|
|
|
124
129
|
|
|
130
|
+
|
|
125
131
|
###### POLISHING 3
|
|
126
132
|
# reset growth environment befor saving the model
|
|
127
133
|
gempipe.reset_growth_env(model)
|
|
128
134
|
|
|
129
135
|
|
|
136
|
+
|
|
130
137
|
# output the model:
|
|
131
138
|
logger.info("Writing strain-specific model...")
|
|
132
139
|
cobra.io.save_json_model(model, f'{args.outdir}/{model.id}.json') # JSON
|
|
@@ -66,6 +66,9 @@ def translate_annotate_genes(logger, model, idcollection_dict):
|
|
|
66
66
|
g.annotation['ec'] = list(ko_to_ecs[ko])
|
|
67
67
|
g.annotation['cog'] = list(ko_to_cogs[ko])
|
|
68
68
|
g.annotation['go'] = list(ko_to_gos[ko])
|
|
69
|
+
|
|
70
|
+
# add SBO annotation
|
|
71
|
+
g.annotation['sbo'] = ['SBO:0000243'] # demand reaction
|
|
69
72
|
|
|
70
73
|
|
|
71
74
|
|
|
@@ -43,10 +43,10 @@ def check_completeness(logger, model, progress, module, focus, eggnog, zeroes, i
|
|
|
43
43
|
for eggfile in eggnog:
|
|
44
44
|
eggset = parse_eggnog(model, eggfile, idcollection_dict)
|
|
45
45
|
kr_uni = kr_uni.union(eggset)
|
|
46
|
-
kr_uni_label = f"
|
|
46
|
+
kr_uni_label = f"{len(eggnog)} eggnog annotations"
|
|
47
47
|
else:
|
|
48
48
|
kr_uni = idcollection_dict['kr']
|
|
49
|
-
kr_uni_label = "
|
|
49
|
+
kr_uni_label = "whole KEGG"
|
|
50
50
|
|
|
51
51
|
|
|
52
52
|
# get all the 'kr' annotations in the model
|
|
@@ -55,7 +55,10 @@ def check_completeness(logger, model, progress, module, focus, eggnog, zeroes, i
|
|
|
55
55
|
if 'kegg.reaction' in r.annotation.keys():
|
|
56
56
|
for kr_id in r.annotation['kegg.reaction']:
|
|
57
57
|
kr_ids_modeled.add(kr_id)
|
|
58
|
-
|
|
58
|
+
kr_uni_missing = len(kr_uni - kr_ids_modeled.intersection(kr_uni))
|
|
59
|
+
kr_uni_coverage = len(kr_ids_modeled.intersection(kr_uni)) / len(kr_uni) * 100
|
|
60
|
+
logger.info(f"Coverage for '{kr_uni_label}': {round(kr_uni_coverage, 0)}% ({kr_uni_missing} missing).")
|
|
61
|
+
|
|
59
62
|
|
|
60
63
|
|
|
61
64
|
# get all the map / md codes:
|
|
@@ -147,7 +150,7 @@ def check_completeness(logger, model, progress, module, focus, eggnog, zeroes, i
|
|
|
147
150
|
'missing': missing,
|
|
148
151
|
'md_ids': [j['md_id'] for j in i['mds']],
|
|
149
152
|
})
|
|
150
|
-
|
|
153
|
+
|
|
151
154
|
|
|
152
155
|
# order list by '%' of completness and print:
|
|
153
156
|
list_coverage = sorted(list_coverage, key=lambda x: x['perc_completeness'], reverse=True)
|
|
@@ -141,6 +141,10 @@ def introduce_metabolites(logger, db, model, idcollection_dict, kegg_compound_to
|
|
|
141
141
|
# save as list:
|
|
142
142
|
for ankey in ankeys:
|
|
143
143
|
m.annotation[ankey] = list(m.annotation[ankey])
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
# add SBO annotation
|
|
147
|
+
m.annotation['sbo'] = ['SBO:0000247'] # generic metabolite
|
|
144
148
|
|
|
145
149
|
|
|
146
150
|
|
|
@@ -264,7 +268,8 @@ def introduce_transporters(logger, db, model, idcollection_dict, kegg_reaction_t
|
|
|
264
268
|
m_e.name = m_c.name
|
|
265
269
|
m_e.formula = m_c.formula
|
|
266
270
|
m_e.charge = m_c.charge
|
|
267
|
-
|
|
271
|
+
|
|
272
|
+
m_e.annotation = m_c.annotation # transfer all annotations, including SBO!
|
|
268
273
|
|
|
269
274
|
|
|
270
275
|
def add_exchange_reaction(model, mid_e):
|
|
@@ -283,6 +288,10 @@ def introduce_transporters(logger, db, model, idcollection_dict, kegg_reaction_t
|
|
|
283
288
|
r.bounds = (-1000, 1000)
|
|
284
289
|
else:
|
|
285
290
|
r.bounds = (0, 1000)
|
|
291
|
+
|
|
292
|
+
# add SBO annotation
|
|
293
|
+
r.annotation['sbo'] = ['SBO:0000627'] # exchange reaction
|
|
294
|
+
|
|
286
295
|
|
|
287
296
|
|
|
288
297
|
|
|
@@ -418,6 +427,9 @@ def introduce_sinks_demands(logger, model):
|
|
|
418
427
|
r.name = f"Sink for {model.metabolites.get_by_id(f'{puremid}_c').name}"
|
|
419
428
|
r.build_reaction_from_string(f'{puremid}_c <=> ')
|
|
420
429
|
r.bounds = (-1000, 1000)
|
|
430
|
+
|
|
431
|
+
# add SBO annotation
|
|
432
|
+
r.annotation['sbo'] = ['SBO:0000632'] # sink reaction
|
|
421
433
|
|
|
422
434
|
|
|
423
435
|
for puremid in demands:
|
|
@@ -427,6 +439,9 @@ def introduce_sinks_demands(logger, model):
|
|
|
427
439
|
r.name = f"Demand for {model.metabolites.get_by_id(f'{puremid}_c').name}"
|
|
428
440
|
r.build_reaction_from_string(f'{puremid}_c --> ')
|
|
429
441
|
r.bounds = (0, 1000)
|
|
442
|
+
|
|
443
|
+
# add SBO annotation
|
|
444
|
+
r.annotation['sbo'] = ['SBO:0000628'] # demand reaction
|
|
430
445
|
|
|
431
446
|
|
|
432
447
|
return model
|
|
@@ -125,6 +125,13 @@ def add_reaction(logger, model, rid, row, kr_ids, kegg_reaction_to_others, addty
|
|
|
125
125
|
r.annotation[ankey] = list(r.annotation[ankey])
|
|
126
126
|
|
|
127
127
|
|
|
128
|
+
# add SBO annotation
|
|
129
|
+
if addtype=='R':
|
|
130
|
+
r.annotation['sbo'] = ['SBO:0000176'] # metabolic reaction
|
|
131
|
+
else:
|
|
132
|
+
r.annotation['sbo'] = ['SBO:0000185'] # transport reaction
|
|
133
|
+
|
|
134
|
+
|
|
128
135
|
# check if unbalanced
|
|
129
136
|
if r.check_mass_balance() != {}:
|
|
130
137
|
logger.error(f"{itemtype} '{r.id}' is unbalanced: {r.check_mass_balance()}.")
|
gsrap/parsedb/annotation.py
CHANGED
|
@@ -66,6 +66,9 @@ def translate_annotate_genes(logger, model, idcollection_dict):
|
|
|
66
66
|
g.annotation['ec'] = list(ko_to_ecs[ko])
|
|
67
67
|
g.annotation['cog'] = list(ko_to_cogs[ko])
|
|
68
68
|
g.annotation['go'] = list(ko_to_gos[ko])
|
|
69
|
+
|
|
70
|
+
# add SBO annotation
|
|
71
|
+
g.annotation['sbo'] = ['SBO:0000243'] # demand reaction
|
|
69
72
|
|
|
70
73
|
|
|
71
74
|
|
gsrap/parsedb/completeness.py
CHANGED
|
@@ -43,10 +43,10 @@ def check_completeness(logger, model, progress, module, focus, eggnog, zeroes, i
|
|
|
43
43
|
for eggfile in eggnog:
|
|
44
44
|
eggset = parse_eggnog(model, eggfile, idcollection_dict)
|
|
45
45
|
kr_uni = kr_uni.union(eggset)
|
|
46
|
-
kr_uni_label = f"
|
|
46
|
+
kr_uni_label = f"{len(eggnog)} eggnog annotations"
|
|
47
47
|
else:
|
|
48
48
|
kr_uni = idcollection_dict['kr']
|
|
49
|
-
kr_uni_label = "
|
|
49
|
+
kr_uni_label = "whole KEGG"
|
|
50
50
|
|
|
51
51
|
|
|
52
52
|
# get all the 'kr' annotations in the model
|
|
@@ -55,7 +55,10 @@ def check_completeness(logger, model, progress, module, focus, eggnog, zeroes, i
|
|
|
55
55
|
if 'kegg.reaction' in r.annotation.keys():
|
|
56
56
|
for kr_id in r.annotation['kegg.reaction']:
|
|
57
57
|
kr_ids_modeled.add(kr_id)
|
|
58
|
-
|
|
58
|
+
kr_uni_missing = len(kr_uni - kr_ids_modeled.intersection(kr_uni))
|
|
59
|
+
kr_uni_coverage = len(kr_ids_modeled.intersection(kr_uni)) / len(kr_uni) * 100
|
|
60
|
+
logger.info(f"Coverage for '{kr_uni_label}': {round(kr_uni_coverage, 0)}% ({kr_uni_missing} missing).")
|
|
61
|
+
|
|
59
62
|
|
|
60
63
|
|
|
61
64
|
# get all the map / md codes:
|
|
@@ -147,7 +150,7 @@ def check_completeness(logger, model, progress, module, focus, eggnog, zeroes, i
|
|
|
147
150
|
'missing': missing,
|
|
148
151
|
'md_ids': [j['md_id'] for j in i['mds']],
|
|
149
152
|
})
|
|
150
|
-
|
|
153
|
+
|
|
151
154
|
|
|
152
155
|
# order list by '%' of completness and print:
|
|
153
156
|
list_coverage = sorted(list_coverage, key=lambda x: x['perc_completeness'], reverse=True)
|
gsrap/parsedb/introduce.py
CHANGED
|
@@ -141,6 +141,10 @@ def introduce_metabolites(logger, db, model, idcollection_dict, kegg_compound_to
|
|
|
141
141
|
# save as list:
|
|
142
142
|
for ankey in ankeys:
|
|
143
143
|
m.annotation[ankey] = list(m.annotation[ankey])
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
# add SBO annotation
|
|
147
|
+
m.annotation['sbo'] = ['SBO:0000247'] # generic metabolite
|
|
144
148
|
|
|
145
149
|
|
|
146
150
|
|
|
@@ -264,7 +268,8 @@ def introduce_transporters(logger, db, model, idcollection_dict, kegg_reaction_t
|
|
|
264
268
|
m_e.name = m_c.name
|
|
265
269
|
m_e.formula = m_c.formula
|
|
266
270
|
m_e.charge = m_c.charge
|
|
267
|
-
|
|
271
|
+
|
|
272
|
+
m_e.annotation = m_c.annotation # transfer all annotations, including SBO!
|
|
268
273
|
|
|
269
274
|
|
|
270
275
|
def add_exchange_reaction(model, mid_e):
|
|
@@ -283,6 +288,10 @@ def introduce_transporters(logger, db, model, idcollection_dict, kegg_reaction_t
|
|
|
283
288
|
r.bounds = (-1000, 1000)
|
|
284
289
|
else:
|
|
285
290
|
r.bounds = (0, 1000)
|
|
291
|
+
|
|
292
|
+
# add SBO annotation
|
|
293
|
+
r.annotation['sbo'] = ['SBO:0000627'] # exchange reaction
|
|
294
|
+
|
|
286
295
|
|
|
287
296
|
|
|
288
297
|
|
|
@@ -418,6 +427,9 @@ def introduce_sinks_demands(logger, model):
|
|
|
418
427
|
r.name = f"Sink for {model.metabolites.get_by_id(f'{puremid}_c').name}"
|
|
419
428
|
r.build_reaction_from_string(f'{puremid}_c <=> ')
|
|
420
429
|
r.bounds = (-1000, 1000)
|
|
430
|
+
|
|
431
|
+
# add SBO annotation
|
|
432
|
+
r.annotation['sbo'] = ['SBO:0000632'] # sink reaction
|
|
421
433
|
|
|
422
434
|
|
|
423
435
|
for puremid in demands:
|
|
@@ -427,6 +439,9 @@ def introduce_sinks_demands(logger, model):
|
|
|
427
439
|
r.name = f"Demand for {model.metabolites.get_by_id(f'{puremid}_c').name}"
|
|
428
440
|
r.build_reaction_from_string(f'{puremid}_c --> ')
|
|
429
441
|
r.bounds = (0, 1000)
|
|
442
|
+
|
|
443
|
+
# add SBO annotation
|
|
444
|
+
r.annotation['sbo'] = ['SBO:0000628'] # demand reaction
|
|
430
445
|
|
|
431
446
|
|
|
432
447
|
return model
|
gsrap/parsedb/parsedb.py
CHANGED
gsrap/parsedb/repeating.py
CHANGED
|
@@ -125,6 +125,13 @@ def add_reaction(logger, model, rid, row, kr_ids, kegg_reaction_to_others, addty
|
|
|
125
125
|
r.annotation[ankey] = list(r.annotation[ankey])
|
|
126
126
|
|
|
127
127
|
|
|
128
|
+
# add SBO annotation
|
|
129
|
+
if addtype=='R':
|
|
130
|
+
r.annotation['sbo'] = ['SBO:0000176'] # metabolic reaction
|
|
131
|
+
else:
|
|
132
|
+
r.annotation['sbo'] = ['SBO:0000185'] # transport reaction
|
|
133
|
+
|
|
134
|
+
|
|
128
135
|
# check if unbalanced
|
|
129
136
|
if r.check_mass_balance() != {}:
|
|
130
137
|
logger.error(f"{itemtype} '{r.id}' is unbalanced: {r.check_mass_balance()}.")
|
|
@@ -12,9 +12,7 @@ from ..commons import verify_growth
|
|
|
12
12
|
def grow_on_media(logger, model, dbexp, media, fva, universe_in_parsedb=False):
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
if universe_in_parsedb:
|
|
17
|
-
log_for_parsedb = []
|
|
15
|
+
|
|
18
16
|
|
|
19
17
|
|
|
20
18
|
# check if requested
|
|
@@ -58,7 +56,10 @@ def grow_on_media(logger, model, dbexp, media, fva, universe_in_parsedb=False):
|
|
|
58
56
|
res_fba = verify_growth(model, boolean=False)
|
|
59
57
|
df_G.loc[obj_id, f'{medium}'] = res_fba
|
|
60
58
|
if universe_in_parsedb:
|
|
61
|
-
|
|
59
|
+
if res_fba == 'infeasible' or res_fba == 0.0:
|
|
60
|
+
logger.warning(f"Growth on '{medium}': {res_fba}.")
|
|
61
|
+
else:
|
|
62
|
+
logger.info(f"Growth on '{medium}': {res_fba}.")
|
|
62
63
|
|
|
63
64
|
|
|
64
65
|
# perform FVA if requested:
|
|
@@ -68,7 +69,5 @@ def grow_on_media(logger, model, dbexp, media, fva, universe_in_parsedb=False):
|
|
|
68
69
|
for rid, row in df_fva.iterrows():
|
|
69
70
|
df_G.loc[rid, f'{medium}'] = f"({round(row['minimum'], 3)}, {round(row['maximum'], 3)})"
|
|
70
71
|
|
|
71
|
-
|
|
72
|
-
if universe_in_parsedb:
|
|
73
|
-
logger.info(f"Results: {'; '.join(log_for_parsedb)}.")
|
|
72
|
+
|
|
74
73
|
return df_G
|
gsrap/runsims/simplegrowth.py
CHANGED
|
@@ -12,9 +12,7 @@ from ..commons import verify_growth
|
|
|
12
12
|
def grow_on_media(logger, model, dbexp, media, fva, universe_in_parsedb=False):
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
if universe_in_parsedb:
|
|
17
|
-
log_for_parsedb = []
|
|
15
|
+
|
|
18
16
|
|
|
19
17
|
|
|
20
18
|
# check if requested
|
|
@@ -58,7 +56,10 @@ def grow_on_media(logger, model, dbexp, media, fva, universe_in_parsedb=False):
|
|
|
58
56
|
res_fba = verify_growth(model, boolean=False)
|
|
59
57
|
df_G.loc[obj_id, f'{medium}'] = res_fba
|
|
60
58
|
if universe_in_parsedb:
|
|
61
|
-
|
|
59
|
+
if res_fba == 'infeasible' or res_fba == 0.0:
|
|
60
|
+
logger.warning(f"Growth on '{medium}': {res_fba}.")
|
|
61
|
+
else:
|
|
62
|
+
logger.info(f"Growth on '{medium}': {res_fba}.")
|
|
62
63
|
|
|
63
64
|
|
|
64
65
|
# perform FVA if requested:
|
|
@@ -68,7 +69,5 @@ def grow_on_media(logger, model, dbexp, media, fva, universe_in_parsedb=False):
|
|
|
68
69
|
for rid, row in df_fva.iterrows():
|
|
69
70
|
df_G.loc[rid, f'{medium}'] = f"({round(row['minimum'], 3)}, {round(row['maximum'], 3)})"
|
|
70
71
|
|
|
71
|
-
|
|
72
|
-
if universe_in_parsedb:
|
|
73
|
-
logger.info(f"Results: {'; '.join(log_for_parsedb)}.")
|
|
72
|
+
|
|
74
73
|
return df_G
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
gsrap/.ipynb_checkpoints/__init__-checkpoint.py,sha256=
|
|
2
|
-
gsrap/__init__.py,sha256=
|
|
1
|
+
gsrap/.ipynb_checkpoints/__init__-checkpoint.py,sha256=93coHbPQfWL7XSudRvKh5RGgqJbyOvECVmMaHPfShOU,13693
|
|
2
|
+
gsrap/__init__.py,sha256=93coHbPQfWL7XSudRvKh5RGgqJbyOvECVmMaHPfShOU,13693
|
|
3
3
|
gsrap/assets/.ipynb_checkpoints/PM1-checkpoint.csv,sha256=0qjaMVG_t9aFxbHbxON6ecmEUnWPwN9nhmxc61QFeCU,8761
|
|
4
4
|
gsrap/assets/.ipynb_checkpoints/PM2A-checkpoint.csv,sha256=rjYTdwe8lpRS552BYiUP3J71juG2ywVdR5Sux6fjZTY,8816
|
|
5
5
|
gsrap/assets/.ipynb_checkpoints/PM3B-checkpoint.csv,sha256=42IGX_2O5bRYSiHoMuVKT-T-bzVj0cSRZBvGOrbnQMA,8130
|
|
@@ -12,23 +12,23 @@ gsrap/assets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
12
12
|
gsrap/assets/kegg_compound_to_others.pickle,sha256=pz1897cfQ7PLsYZiBVcoMQPzvRzT-nHUdgphBe0g5ZQ,8233860
|
|
13
13
|
gsrap/assets/kegg_reaction_to_others.pickle,sha256=AGW8CGN5hKeXZoYn3JRF4Xu832WyNrTlMcLw7luttlc,1703146
|
|
14
14
|
gsrap/commons/.ipynb_checkpoints/__init__-checkpoint.py,sha256=P_rdjFcL_FjkKYT3a0IJiQTzWL7p2Hm6z-hjuCZEHgU,216
|
|
15
|
-
gsrap/commons/.ipynb_checkpoints/biomass-checkpoint.py,sha256=
|
|
16
|
-
gsrap/commons/.ipynb_checkpoints/coeffs-checkpoint.py,sha256=
|
|
15
|
+
gsrap/commons/.ipynb_checkpoints/biomass-checkpoint.py,sha256=4u7WBaUgo42tBoXDU1D0VUjICatb44e0jfswZrBeHYs,17987
|
|
16
|
+
gsrap/commons/.ipynb_checkpoints/coeffs-checkpoint.py,sha256=qI3_GuqHkeA2KbK9pYdkqJaFwYemAVZJGLRR4QtHt6w,19182
|
|
17
17
|
gsrap/commons/.ipynb_checkpoints/downloads-checkpoint.py,sha256=JFrOYXrzLFhclwMtLmq8xo0QZVyjEn7QfzaTRad7y6I,8460
|
|
18
18
|
gsrap/commons/.ipynb_checkpoints/escherutils-checkpoint.py,sha256=lftRIKAbP4eztaZM83V3LKWZK4DtKDuCiC9A46paVoM,1148
|
|
19
19
|
gsrap/commons/.ipynb_checkpoints/excelhub-checkpoint.py,sha256=XO7ZZFqORB1nnH1Nj07VSGr18em1rt_AH6oAqwqhp4o,5867
|
|
20
|
-
gsrap/commons/.ipynb_checkpoints/fluxbal-checkpoint.py,sha256=
|
|
20
|
+
gsrap/commons/.ipynb_checkpoints/fluxbal-checkpoint.py,sha256=jgC3-vI9Tbjvqohh2mJwFra4rl_pbUzHWrSa_QAxVO4,1262
|
|
21
21
|
gsrap/commons/.ipynb_checkpoints/logutils-checkpoint.py,sha256=VsnrkIsUftS3MOOwAd0n0peQ7a2X5ZEx930eCtzmW7g,1317
|
|
22
22
|
gsrap/commons/.ipynb_checkpoints/medium-checkpoint.py,sha256=VYKN8X1PNERP6uQDbznZXfgflLEvnw4j1T8AIAdrE7s,2902
|
|
23
23
|
gsrap/commons/.ipynb_checkpoints/metrics-checkpoint.py,sha256=gvqF2c0e31m5qQWQ11JF4-eMqxtuONy_7lUiC7uaXX4,3291
|
|
24
24
|
gsrap/commons/.ipynb_checkpoints/sbmlutils-checkpoint.py,sha256=gkY02qbGXrbYStn2F8J0KM0fmqati2Nbvi128EF7coI,365
|
|
25
25
|
gsrap/commons/__init__.py,sha256=P_rdjFcL_FjkKYT3a0IJiQTzWL7p2Hm6z-hjuCZEHgU,216
|
|
26
|
-
gsrap/commons/biomass.py,sha256=
|
|
27
|
-
gsrap/commons/coeffs.py,sha256=
|
|
26
|
+
gsrap/commons/biomass.py,sha256=4u7WBaUgo42tBoXDU1D0VUjICatb44e0jfswZrBeHYs,17987
|
|
27
|
+
gsrap/commons/coeffs.py,sha256=qI3_GuqHkeA2KbK9pYdkqJaFwYemAVZJGLRR4QtHt6w,19182
|
|
28
28
|
gsrap/commons/downloads.py,sha256=JFrOYXrzLFhclwMtLmq8xo0QZVyjEn7QfzaTRad7y6I,8460
|
|
29
29
|
gsrap/commons/escherutils.py,sha256=lftRIKAbP4eztaZM83V3LKWZK4DtKDuCiC9A46paVoM,1148
|
|
30
30
|
gsrap/commons/excelhub.py,sha256=XO7ZZFqORB1nnH1Nj07VSGr18em1rt_AH6oAqwqhp4o,5867
|
|
31
|
-
gsrap/commons/fluxbal.py,sha256=
|
|
31
|
+
gsrap/commons/fluxbal.py,sha256=jgC3-vI9Tbjvqohh2mJwFra4rl_pbUzHWrSa_QAxVO4,1262
|
|
32
32
|
gsrap/commons/logutils.py,sha256=VsnrkIsUftS3MOOwAd0n0peQ7a2X5ZEx930eCtzmW7g,1317
|
|
33
33
|
gsrap/commons/medium.py,sha256=VYKN8X1PNERP6uQDbznZXfgflLEvnw4j1T8AIAdrE7s,2902
|
|
34
34
|
gsrap/commons/metrics.py,sha256=gvqF2c0e31m5qQWQ11JF4-eMqxtuONy_7lUiC7uaXX4,3291
|
|
@@ -42,31 +42,31 @@ gsrap/getmaps/kdown.py,sha256=mv5wqP4DX9KhB1IIWx6cLrc-MjQdF5Nz-Gii8QSO_6I,24498
|
|
|
42
42
|
gsrap/mkmodel/.ipynb_checkpoints/__init__-checkpoint.py,sha256=PNze-26HMOwfdJ92KiXpr--VV1ftVfo3CAxBZgeokp8,92
|
|
43
43
|
gsrap/mkmodel/.ipynb_checkpoints/biologcuration-checkpoint.py,sha256=Nn7z-js-mzzeO23kVM2L7sJ5PNle7AkCUeBcEAYjlFU,15378
|
|
44
44
|
gsrap/mkmodel/.ipynb_checkpoints/gapfill-checkpoint.py,sha256=BPZw4sszlBhAYfHnV0pA7EpG0b2ePwS6kUfFt0Ww-ss,5159
|
|
45
|
-
gsrap/mkmodel/.ipynb_checkpoints/gapfillutils-checkpoint.py,sha256=
|
|
46
|
-
gsrap/mkmodel/.ipynb_checkpoints/mkmodel-checkpoint.py,sha256=
|
|
45
|
+
gsrap/mkmodel/.ipynb_checkpoints/gapfillutils-checkpoint.py,sha256=S6nFUZ1Bbdf13nVJhGK2S5C_V3hd5zwTg2o5nzejngg,3123
|
|
46
|
+
gsrap/mkmodel/.ipynb_checkpoints/mkmodel-checkpoint.py,sha256=bXKBU8sUhRWKU-MYqiHgZFEwqvpAtoJa6_1h6D94REM,8537
|
|
47
47
|
gsrap/mkmodel/.ipynb_checkpoints/polishing-checkpoint.py,sha256=R1UdFPxN8N27Iu0jsYW2N_1BkWEbBHaMYW6NkCYZK_k,3256
|
|
48
48
|
gsrap/mkmodel/.ipynb_checkpoints/pruner-checkpoint.py,sha256=BVOK1iFXpTgZswDgAv-TgHxKB6W3iucIAo1XWrAbu4A,7009
|
|
49
49
|
gsrap/mkmodel/__init__.py,sha256=PNze-26HMOwfdJ92KiXpr--VV1ftVfo3CAxBZgeokp8,92
|
|
50
50
|
gsrap/mkmodel/biologcuration.py,sha256=Nn7z-js-mzzeO23kVM2L7sJ5PNle7AkCUeBcEAYjlFU,15378
|
|
51
51
|
gsrap/mkmodel/gapfill.py,sha256=BPZw4sszlBhAYfHnV0pA7EpG0b2ePwS6kUfFt0Ww-ss,5159
|
|
52
|
-
gsrap/mkmodel/gapfillutils.py,sha256=
|
|
53
|
-
gsrap/mkmodel/mkmodel.py,sha256=
|
|
52
|
+
gsrap/mkmodel/gapfillutils.py,sha256=S6nFUZ1Bbdf13nVJhGK2S5C_V3hd5zwTg2o5nzejngg,3123
|
|
53
|
+
gsrap/mkmodel/mkmodel.py,sha256=bXKBU8sUhRWKU-MYqiHgZFEwqvpAtoJa6_1h6D94REM,8537
|
|
54
54
|
gsrap/mkmodel/polishing.py,sha256=R1UdFPxN8N27Iu0jsYW2N_1BkWEbBHaMYW6NkCYZK_k,3256
|
|
55
55
|
gsrap/mkmodel/pruner.py,sha256=BVOK1iFXpTgZswDgAv-TgHxKB6W3iucIAo1XWrAbu4A,7009
|
|
56
56
|
gsrap/parsedb/.ipynb_checkpoints/__init__-checkpoint.py,sha256=1k2K1gz4lIdXAwHEdJ0OhdkPu83woGv0Z4TpT1kGrTk,97
|
|
57
|
-
gsrap/parsedb/.ipynb_checkpoints/annotation-checkpoint.py,sha256
|
|
58
|
-
gsrap/parsedb/.ipynb_checkpoints/completeness-checkpoint.py,sha256=
|
|
59
|
-
gsrap/parsedb/.ipynb_checkpoints/introduce-checkpoint.py,sha256=
|
|
57
|
+
gsrap/parsedb/.ipynb_checkpoints/annotation-checkpoint.py,sha256=Y02_zXJj_tS1GyBdfuLBy9YJjMgx3mjX6tqr1KhQ-9Q,4810
|
|
58
|
+
gsrap/parsedb/.ipynb_checkpoints/completeness-checkpoint.py,sha256=5P_OxGfKXSJDDV0qIcd6xQvAJymsMQKvhsUvMl79dkk,9478
|
|
59
|
+
gsrap/parsedb/.ipynb_checkpoints/introduce-checkpoint.py,sha256=PuIdXvkF7gmihOEMECXVZ1V4VBOld8p3lZZ2rqXjPH8,16871
|
|
60
60
|
gsrap/parsedb/.ipynb_checkpoints/manual-checkpoint.py,sha256=F16wU8vLyM6V4F611ABuMJtwSAskL5KEgCJ7EQm_F9Y,2177
|
|
61
|
-
gsrap/parsedb/.ipynb_checkpoints/parsedb-checkpoint.py,sha256=
|
|
62
|
-
gsrap/parsedb/.ipynb_checkpoints/repeating-checkpoint.py,sha256=
|
|
61
|
+
gsrap/parsedb/.ipynb_checkpoints/parsedb-checkpoint.py,sha256=F0vYUvlFkBvg1Jis1nNJ9cS4f3tSF61hbM4zg7D3OJs,7242
|
|
62
|
+
gsrap/parsedb/.ipynb_checkpoints/repeating-checkpoint.py,sha256=9PgsSw-H84eN_dFUwK5FLgbqvydsdic4-VjCrZqkfnY,5703
|
|
63
63
|
gsrap/parsedb/__init__.py,sha256=1k2K1gz4lIdXAwHEdJ0OhdkPu83woGv0Z4TpT1kGrTk,97
|
|
64
|
-
gsrap/parsedb/annotation.py,sha256
|
|
65
|
-
gsrap/parsedb/completeness.py,sha256=
|
|
66
|
-
gsrap/parsedb/introduce.py,sha256=
|
|
64
|
+
gsrap/parsedb/annotation.py,sha256=Y02_zXJj_tS1GyBdfuLBy9YJjMgx3mjX6tqr1KhQ-9Q,4810
|
|
65
|
+
gsrap/parsedb/completeness.py,sha256=5P_OxGfKXSJDDV0qIcd6xQvAJymsMQKvhsUvMl79dkk,9478
|
|
66
|
+
gsrap/parsedb/introduce.py,sha256=PuIdXvkF7gmihOEMECXVZ1V4VBOld8p3lZZ2rqXjPH8,16871
|
|
67
67
|
gsrap/parsedb/manual.py,sha256=F16wU8vLyM6V4F611ABuMJtwSAskL5KEgCJ7EQm_F9Y,2177
|
|
68
|
-
gsrap/parsedb/parsedb.py,sha256=
|
|
69
|
-
gsrap/parsedb/repeating.py,sha256=
|
|
68
|
+
gsrap/parsedb/parsedb.py,sha256=F0vYUvlFkBvg1Jis1nNJ9cS4f3tSF61hbM4zg7D3OJs,7242
|
|
69
|
+
gsrap/parsedb/repeating.py,sha256=9PgsSw-H84eN_dFUwK5FLgbqvydsdic4-VjCrZqkfnY,5703
|
|
70
70
|
gsrap/runsims/.ipynb_checkpoints/__init__-checkpoint.py,sha256=6E6E1gWgH0V7ls4Omx4mxxC85gMJ_27YqhjugJzlZtY,97
|
|
71
71
|
gsrap/runsims/.ipynb_checkpoints/biosynth-checkpoint.py,sha256=fUlHUo4CfB4rGX9Dth87B1p5E5sz7i6spR7ZoqDDGaI,2836
|
|
72
72
|
gsrap/runsims/.ipynb_checkpoints/cnps-checkpoint.py,sha256=A0U8QPqW_uyrtHs99F286aEDEC6eukHXeMWrmnd0efA,5636
|
|
@@ -74,7 +74,7 @@ gsrap/runsims/.ipynb_checkpoints/essentialgenes-checkpoint.py,sha256=MzHiuaU1gwi
|
|
|
74
74
|
gsrap/runsims/.ipynb_checkpoints/growthfactors-checkpoint.py,sha256=r_W4idtOSJBDh7HURRsU8s1TqfOZ3TfeVw2HHDxmnGU,2265
|
|
75
75
|
gsrap/runsims/.ipynb_checkpoints/precursors-checkpoint.py,sha256=1RNt_Rxs0L1lolDmYh4_CiZgiwHfU5B_AcomJO6vJ28,2219
|
|
76
76
|
gsrap/runsims/.ipynb_checkpoints/runsims-checkpoint.py,sha256=2FC5Gs8oSYyZTjHF3A7aXB_O6myVfcn3bCxQfLJlZTk,2842
|
|
77
|
-
gsrap/runsims/.ipynb_checkpoints/simplegrowth-checkpoint.py,sha256=
|
|
77
|
+
gsrap/runsims/.ipynb_checkpoints/simplegrowth-checkpoint.py,sha256=whNezVUgdTFO5H8_Q6_jo5rM-zyzj17bzGDcrxfTotc,2339
|
|
78
78
|
gsrap/runsims/.ipynb_checkpoints/singleomission-checkpoint.py,sha256=jMuKAi0pINP8Jlrm-yI-tX7D110VzttR3YfTSnDRe4I,2847
|
|
79
79
|
gsrap/runsims/__init__.py,sha256=6E6E1gWgH0V7ls4Omx4mxxC85gMJ_27YqhjugJzlZtY,97
|
|
80
80
|
gsrap/runsims/biosynth.py,sha256=fUlHUo4CfB4rGX9Dth87B1p5E5sz7i6spR7ZoqDDGaI,2836
|
|
@@ -83,10 +83,10 @@ gsrap/runsims/essentialgenes.py,sha256=MzHiuaU1gwiPdjZAgG7tkdYzkTTvoNCLp5tkezZhz
|
|
|
83
83
|
gsrap/runsims/growthfactors.py,sha256=r_W4idtOSJBDh7HURRsU8s1TqfOZ3TfeVw2HHDxmnGU,2265
|
|
84
84
|
gsrap/runsims/precursors.py,sha256=1RNt_Rxs0L1lolDmYh4_CiZgiwHfU5B_AcomJO6vJ28,2219
|
|
85
85
|
gsrap/runsims/runsims.py,sha256=2FC5Gs8oSYyZTjHF3A7aXB_O6myVfcn3bCxQfLJlZTk,2842
|
|
86
|
-
gsrap/runsims/simplegrowth.py,sha256=
|
|
86
|
+
gsrap/runsims/simplegrowth.py,sha256=whNezVUgdTFO5H8_Q6_jo5rM-zyzj17bzGDcrxfTotc,2339
|
|
87
87
|
gsrap/runsims/singleomission.py,sha256=jMuKAi0pINP8Jlrm-yI-tX7D110VzttR3YfTSnDRe4I,2847
|
|
88
|
-
gsrap-0.7.
|
|
89
|
-
gsrap-0.7.
|
|
90
|
-
gsrap-0.7.
|
|
91
|
-
gsrap-0.7.
|
|
92
|
-
gsrap-0.7.
|
|
88
|
+
gsrap-0.7.1.dist-info/LICENSE.txt,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
89
|
+
gsrap-0.7.1.dist-info/METADATA,sha256=ps1z-ZR33q-YL1KeATh-RUNNuB4VU47Mz4OAl2b1F24,826
|
|
90
|
+
gsrap-0.7.1.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
91
|
+
gsrap-0.7.1.dist-info/entry_points.txt,sha256=S9MY0DjfnbKGlZbp5bV7W6dNFy3APoEV84u9x6MV1eI,36
|
|
92
|
+
gsrap-0.7.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|