gsrap 0.9.0__py3-none-any.whl → 0.10.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.
Files changed (37) hide show
  1. gsrap/.ipynb_checkpoints/__init__-checkpoint.py +6 -5
  2. gsrap/__init__.py +6 -5
  3. gsrap/assets/kegg_compound_to_others.pickle +0 -0
  4. gsrap/assets/kegg_reaction_to_others.pickle +0 -0
  5. gsrap/commons/.ipynb_checkpoints/biomass-checkpoint.py +3 -0
  6. gsrap/commons/.ipynb_checkpoints/downloads-checkpoint.py +168 -93
  7. gsrap/commons/.ipynb_checkpoints/escherutils-checkpoint.py +55 -51
  8. gsrap/commons/.ipynb_checkpoints/excelhub-checkpoint.py +7 -1
  9. gsrap/commons/.ipynb_checkpoints/metrics-checkpoint.py +8 -8
  10. gsrap/commons/biomass.py +3 -0
  11. gsrap/commons/downloads.py +168 -93
  12. gsrap/commons/escherutils.py +55 -51
  13. gsrap/commons/excelhub.py +7 -1
  14. gsrap/commons/metrics.py +8 -8
  15. gsrap/mkmodel/.ipynb_checkpoints/mkmodel-checkpoint.py +2 -2
  16. gsrap/mkmodel/mkmodel.py +2 -2
  17. gsrap/parsedb/.ipynb_checkpoints/annotation-checkpoint.py +43 -18
  18. gsrap/parsedb/.ipynb_checkpoints/completeness-checkpoint.py +2 -1
  19. gsrap/parsedb/.ipynb_checkpoints/introduce-checkpoint.py +132 -63
  20. gsrap/parsedb/.ipynb_checkpoints/manual-checkpoint.py +23 -3
  21. gsrap/parsedb/.ipynb_checkpoints/parsedb-checkpoint.py +59 -49
  22. gsrap/parsedb/.ipynb_checkpoints/repeating-checkpoint.py +90 -53
  23. gsrap/parsedb/annotation.py +43 -18
  24. gsrap/parsedb/completeness.py +2 -1
  25. gsrap/parsedb/introduce.py +132 -63
  26. gsrap/parsedb/manual.py +22 -2
  27. gsrap/parsedb/parsedb.py +59 -49
  28. gsrap/parsedb/repeating.py +90 -53
  29. gsrap/runsims/.ipynb_checkpoints/runsims-checkpoint.py +2 -1
  30. gsrap/runsims/.ipynb_checkpoints/simplegrowth-checkpoint.py +0 -1
  31. gsrap/runsims/runsims.py +2 -1
  32. gsrap/runsims/simplegrowth.py +0 -1
  33. {gsrap-0.9.0.dist-info → gsrap-0.10.1.dist-info}/METADATA +5 -2
  34. {gsrap-0.9.0.dist-info → gsrap-0.10.1.dist-info}/RECORD +37 -37
  35. {gsrap-0.9.0.dist-info → gsrap-0.10.1.dist-info}/WHEEL +1 -1
  36. {gsrap-0.9.0.dist-info → gsrap-0.10.1.dist-info}/entry_points.txt +0 -0
  37. {gsrap-0.9.0.dist-info → gsrap-0.10.1.dist-info/licenses}/LICENSE.txt +0 -0
gsrap/parsedb/parsedb.py CHANGED
@@ -1,6 +1,7 @@
1
1
  import os
2
2
  import pickle
3
3
  from importlib import resources
4
+ import shutil
4
5
 
5
6
 
6
7
  import cobra
@@ -15,7 +16,6 @@ from ..commons import introduce_universal_biomass
15
16
  from ..commons import write_excel_model
16
17
  from ..commons import show_contributions
17
18
  from ..commons import adjust_biomass_precursors
18
- from ..commons import count_undrawn_rids
19
19
  from ..commons import count_undrawn_rids_focus
20
20
 
21
21
  from ..commons import format_expansion
@@ -49,13 +49,20 @@ from .cycles import verify_egc_all
49
49
  def main(args, logger):
50
50
 
51
51
 
52
- ###### FORMAT ARGS NOT REQUIRING RESOURCES
52
+
53
+ ###### PRE-PARSING
54
+
53
55
  # adjust out folder path
54
56
  while args.outdir.endswith('/'):
55
57
  args.outdir = args.outdir[:-1]
56
58
  os.makedirs(f'{args.outdir}/', exist_ok=True)
57
59
 
58
60
 
61
+ # prepare empty logs folder
62
+ shutil.rmtree(f'{args.outdir}/logs', ignore_errors=True)
63
+ os.makedirs(f'{args.outdir}/logs', exist_ok=True)
64
+
65
+
59
66
  # check compatibility of input parameters
60
67
  if args.progress==False and args.module==True:
61
68
  logger.error(f"You cannot ask --module without --progress (see --help).")
@@ -81,8 +88,6 @@ def main(args, logger):
81
88
  if args.onlyauthor == '-': args.onlyauthor = None
82
89
 
83
90
 
84
-
85
- ###### LOAD LOCAL RESOURCES
86
91
  # check and extract the required 'gsrap.maps' file
87
92
  if os.path.exists(f'{args.inmaps}') == False:
88
93
  logger.error(f"File 'gsrap.maps' not found at {args.inmaps}.")
@@ -105,152 +110,157 @@ def main(args, logger):
105
110
  with open(asset_path, 'rb') as handle:
106
111
  kegg_reaction_to_others = pickle.load(handle)
107
112
 
108
-
109
-
110
- ###### FORMAT/CHECK FOCUSING ARGS
113
+
111
114
  # format the --eggnog param
112
115
  args.eggnog = format_expansion(logger, args.eggnog) # now 'args.eggnog' could still be '-'
113
116
 
117
+
114
118
  # check the --taxon param
115
119
  if args.taxon != '-':
116
120
  response = check_taxon(logger, args.taxon, idcollection_dict)
117
121
  if response == 1: return 1
118
122
 
123
+
119
124
  # get the kegg organism if requested
120
125
  if args.keggorg != '-':
121
126
  response = download_keggorg(logger, args.keggorg, args.outdir)
122
127
  if response == 1: return 1
123
128
 
124
129
 
125
-
126
- # DOWNLOAD ONLINE RESOURCES
127
- # get dbuni and dbexp:
128
- logger.info("Downloading gsrap database...")
129
- response = get_databases(logger)
130
+ # download dbuni, dbexp and lastmap:
131
+ logger.info("Downloading updated gsrap assets...")
132
+ response = get_databases(logger, map_id=args.focus)
130
133
  if type(response)==int: return 1
131
134
  else: dbuni, dbexp, lastmap = response
132
135
 
136
+
137
+
138
+ ###### PARSING
133
139
 
134
140
  # show simple statistics of contributions
135
141
  response = show_contributions(logger, dbuni, args.goodbefore)
136
142
  if response == 1: return 1
137
-
138
-
139
143
 
140
- ###### RECONSTRUCTION
144
+
141
145
  # create the model
142
146
  universe = cobra.Model('universe')
143
- logger.info("Parsing gsrap database...")
144
147
 
145
- # introduce M / R / T
146
- universe = introduce_metabolites(logger, dbuni, universe, idcollection_dict, kegg_compound_to_others, args.goodbefore[0], args.onlyauthor)
148
+
149
+ # introduce M
150
+ universe = introduce_metabolites(logger, dbuni, universe, idcollection_dict, kegg_compound_to_others, args.outdir, args.goodbefore[0], args.onlyauthor)
147
151
  if type(universe)==int: return 1
148
- universe = introduce_reactions(logger, dbuni, universe, idcollection_dict, kegg_reaction_to_others, args.goodbefore[1], args.onlyauthor)
152
+
153
+
154
+ # introduce R
155
+ universe = introduce_reactions(logger, dbuni, universe, idcollection_dict, kegg_reaction_to_others, args.outdir, args.goodbefore[1], args.onlyauthor)
149
156
  if type(universe)==int: return 1
150
- universe = introduce_transporters(logger, dbuni, universe, idcollection_dict, kegg_reaction_to_others, args.goodbefore[2], args.onlyauthor)
157
+
158
+
159
+ # introduce T
160
+ universe = introduce_transporters(logger, dbuni, universe, idcollection_dict, kegg_reaction_to_others, args.outdir, args.goodbefore[2], args.onlyauthor)
151
161
  if type(universe)==int: return 1
152
162
 
163
+
153
164
  # introduce sinks / demands (exchanges where included during T)
154
165
  universe = introduce_sinks_demands(logger, universe)
155
166
  if type(universe)==int: return 1
156
167
 
157
- # introducce biomass
168
+
169
+ # introducce universal biomass
158
170
  universe = introduce_universal_biomass(logger, dbexp, universe)
159
171
  if type(universe)==int: return 1
160
172
 
161
173
 
162
-
163
- ###### ANNOTATION
164
174
  # translate Gs to symbols and annotate them (EC, COG, GO, ...)
165
175
  universe = translate_annotate_genes(logger, universe, idcollection_dict)
166
176
  if type(universe)==int: return 1
167
177
 
168
- # introduce collectionas (groups of Rs as maps/modules)
178
+
179
+ # introduce collections (groups of Rs as maps/modules)
169
180
  universe = set_up_groups(logger, universe, idcollection_dict)
170
181
  if type(universe)==int: return 1
171
182
 
172
183
 
173
184
 
174
- # # # # # PARSING ENDS HERE # # # # #
185
+ ###### POST-PARSING
186
+
187
+ # log metrics
175
188
  log_metrics(logger, universe)
189
+
190
+
191
+ # check absence of unbalancing above the threshold
176
192
  log_unbalances(logger, universe)
177
193
 
178
194
 
179
-
180
- ###### CHECKS 1
181
195
  # check universe completness
182
196
  df_C = check_completeness(logger, universe, args.progress, args.module, args.focus, args.taxon, args.eggnog, args.keggorg, idcollection_dict, summary_dict, args.outdir)
183
197
  if type(df_C)==int: return 1
184
198
 
185
199
 
186
-
187
- ###### POLISHING 1
188
200
  # remove disconnected metabolites
189
201
  if args.keepdisconn == False:
190
202
  universe = remove_disconnected(logger, universe) # can be commented when using booster.py
191
203
 
192
204
 
193
-
194
- ###### CHECKS 2
195
- # check erroneous EGCs
196
- verify_egc_all(logger, universe, args.outdir)
197
-
205
+ # avoid time-consuming activities
206
+ if not args.justparse:
198
207
 
199
208
 
200
- if not args.justparse:
209
+ # check erroneous EGCs
210
+ verify_egc_all(logger, universe, args.outdir)
211
+
201
212
 
202
- ###### CHECKS 3
203
213
  # check growth on minmal media
204
- df_G = grow_on_media(logger, universe, dbexp, args.media, '-', True)
214
+ df_G = grow_on_media(logger, universe, dbexp, args.media, fva=False, universe_in_parsedb=True)
205
215
  if type(df_G)==int: return 1
206
216
 
217
+
207
218
  # check blocked biomass precursors
208
219
  cond_col_dict = adjust_biomass_precursors(logger, universe, universe, 1.0)
209
220
  df_E = precursors_on_media(logger, universe, universe, dbexp, args.media, cond_col_dict, args.precursors)
210
221
  if type(df_E)==int: return 1
211
222
 
223
+
212
224
  # check blocked metabolites / dead-ends
213
225
  df_S = biosynthesis_on_media(logger, universe, dbexp, args.media, args.biosynth)
214
226
  if type(df_S)==int: return 1
215
227
 
216
228
 
217
-
218
- ###### POLISHING 2
219
- # reset growth environment befor saving the model
229
+ # reset growth environment befor saving the model (changed during growth sims)
220
230
  gempipe.reset_growth_env(universe)
221
231
 
232
+
222
233
  # initialize model
223
234
  response = initialize_model(logger, universe, dbexp, args.initialize, args.media)
224
235
  if response==1: return 1
225
236
 
226
237
 
227
-
228
- ###### CHECKS 4
229
238
  # compute Memote metrics
230
239
  memote_results_dict = get_memote_results_dict(logger, universe)
231
240
 
232
241
 
233
-
234
- # output the universe (even when --justparse)
242
+ # write JSON
235
243
  logger.info("Writing universal model...")
236
244
  cobra.io.save_json_model(universe, f'{args.outdir}/universe.json')
237
245
  logger.info(f"'{args.outdir}/universe.json' created!")
238
246
 
239
247
 
248
+ # avoid time-consuming activities
240
249
  if not args.justparse:
241
250
 
242
- # outptu in the remaining formats:
251
+
252
+ # write XML
243
253
  cobra.io.write_sbml_model(universe, f'{args.outdir}/universe.xml') # groups are saved only to SBML
244
254
  logger.info(f"'{args.outdir}/universe.xml' created!")
245
255
  force_id_on_sbml(f'{args.outdir}/universe.xml', 'universe') # force introduction of the 'id=""' field
256
+
257
+
258
+ # write XLSX
246
259
  sheets_dict = write_excel_model(universe, f'{args.outdir}/universe.parsedb.xlsx', args.nofigs, memote_results_dict, df_E, None, None, df_S, df_C)
247
260
  logger.info(f"'{args.outdir}/universe.parsedb.xlsx' created!")
248
261
 
249
-
250
262
 
251
- ###### CHECKS 4
252
- # check if universal escher map is updated:
253
- count_undrawn_rids(logger, universe, lastmap, args.focus)
263
+ # check if escher map is updated:
254
264
  if args.focus != '-':
255
265
  count_undrawn_rids_focus(logger, universe, lastmap, args.focus, args.outdir)
256
266
 
@@ -8,9 +8,13 @@ from .manual import get_rids_with_mancheck_balancing
8
8
 
9
9
 
10
10
 
11
- def check_gpr(logger, rid, row, kr_ids, idcollection_dict, addtype='R'):
11
+ def check_gpr(logger, rid, row, kr_ids, idcollection_dict, addtype, outdir):
12
12
 
13
- itemtype = 'Reaction' if addtype=='R' else 'Transporter'
13
+
14
+ # define the itemtype:
15
+ if addtype=='R':
16
+ itemtype = 'Reaction'
17
+ else: itemtype = 'Transporter'
14
18
 
15
19
 
16
20
  # check presence of the GPR
@@ -53,7 +57,8 @@ def check_gpr(logger, rid, row, kr_ids, idcollection_dict, addtype='R'):
53
57
  if ko_id not in ko_for_rid and ko_id != 'spontaneous' and ko_id != 'orphan':
54
58
  if kr_id != 'RXXXXX':
55
59
  if rid not in get_rids_with_mancheck_gpr():
56
- logger.debug(f"Ortholog '{ko_id}' should not be linked to reaction '{rid}' (available for {kr_ids}: {ko_for_rid}).")
60
+ with open(f"{outdir}/logs/R.orthlink.txt", 'a') as f:
61
+ print(f"Ortholog '{ko_id}' should not be linked to reaction '{rid}' (available for {kr_ids}: {ko_for_rid}).", file=f)
57
62
 
58
63
 
59
64
  # check if some ko_ids are missing from this reaction:
@@ -68,12 +73,79 @@ def check_gpr(logger, rid, row, kr_ids, idcollection_dict, addtype='R'):
68
73
 
69
74
 
70
75
 
71
- def add_reaction(logger, model, rid, row, kr_ids, kegg_reaction_to_others, addtype='R'):
72
-
76
+ def check_rstring_arrow(logger, rid, row, addtype='R'):
73
77
 
74
78
  itemtype = 'Reaction' if addtype=='R' else 'Transporter'
75
79
 
76
80
 
81
+ if pnd.isna(row['rstring']):
82
+ logger.error(f"{itemtype} '{rid}' has no definition (rstring).")
83
+ return 1
84
+ if ' --> ' not in row['rstring'] and ' <=> ' not in row['rstring']:
85
+ logger.error(f"{itemtype} '{rid}' has invalid arrow: '{row['rstring']}'.")
86
+ return 1
87
+
88
+
89
+ return 0
90
+
91
+
92
+
93
+ def check_author(logger, mrid, row, db, addtype='R'):
94
+
95
+
96
+ # define itemtype:
97
+ if addtype=='M':
98
+ itemtype = 'Metabolite'
99
+ elif addtype=='R' :
100
+ itemtype = 'Reaction'
101
+ else: itemtype = 'Transporter'
102
+
103
+
104
+ # check if author was indicated:
105
+ if pnd.isna(row['curator']):
106
+ logger.error(f"{itemtype} '{mrid}' has no curator.")
107
+ return 1
108
+
109
+
110
+ # check if the are valid authors
111
+ authors = set()
112
+ for author in row['curator'].split(';'):
113
+ author = author.strip()
114
+ authors.add(author)
115
+ if author not in db['curators']['username'].to_list():
116
+ logger.error(f"{itemtype} '{mrid}' has invalid curator: '{author}'.")
117
+ return 1
118
+
119
+
120
+ return list(authors)
121
+
122
+
123
+
124
+ def get_curator_notes(logger, row):
125
+
126
+
127
+ # notes are separated by ';'
128
+ notes = []
129
+ if pnd.isna(row['notes']) == False:
130
+ for i in row['notes'].strip().split(';'):
131
+ notes.append(i.strip())
132
+ if notes == ['-']:
133
+ notes = []
134
+
135
+
136
+ return notes
137
+
138
+
139
+
140
+ def add_reaction(logger, model, rid, authors, row, kr_ids, kegg_reaction_to_others, addtype, outdir):
141
+
142
+
143
+ # define the itemtype:
144
+ if addtype=='R':
145
+ itemtype = 'Reaction'
146
+ else: itemtype = 'Transporter'
147
+
148
+
77
149
  # create a frash reaction
78
150
  r = cobra.Reaction(rid)
79
151
  model.add_reactions([r])
@@ -95,7 +167,8 @@ def add_reaction(logger, model, rid, row, kr_ids, kegg_reaction_to_others, addty
95
167
  # handle GPR
96
168
  r.gene_reaction_rule = row['gpr_manual'].strip()
97
169
  if r.gene_reaction_rule == 'orphan':
98
- r.gene_reaction_rule = '' # don't want 'orphan' as artificial gene in adition to 'spontaneous'!
170
+ # don't want 'orphan' as artificial gene in adition to 'spontaneous'!
171
+ r.gene_reaction_rule = ''
99
172
  r.update_genes_from_gpr()
100
173
 
101
174
 
@@ -105,22 +178,29 @@ def add_reaction(logger, model, rid, row, kr_ids, kegg_reaction_to_others, addty
105
178
  logger.error(f"Metabolite '{m.id}' appears in '{r.id}' but was not previously defined.")
106
179
  return 1
107
180
 
181
+
182
+ # write curators as annotations
183
+ r.annotation['curator_codes'] = authors
184
+
108
185
 
109
186
  # add annotations to model (same order of Memote)
110
187
  ankeys = [
111
188
  'rhea', 'kegg.reaction', 'seed.reaction', 'metanetx.reaction',
112
189
  'bigg.reaction', 'reactome', 'ec-code', 'brenda', 'biocyc',
113
190
  ]
191
+ #
114
192
  # initialize sets:
115
193
  for ankey in ankeys:
116
194
  if ankey == 'kegg.reaction': r.annotation[ankey] = set(kr_ids) - set(['RXXXXX'])
117
195
  else: r.annotation[ankey] = set()
196
+ #
118
197
  # populate sets:
119
198
  for kr_id in kr_ids:
120
199
  if kr_id != 'RXXXXX':
121
200
  if kr_id in kegg_reaction_to_others.keys():
122
201
  for ankey in ankeys:
123
202
  r.annotation[ankey].update(kegg_reaction_to_others[kr_id][ankey])
203
+ #
124
204
  # save as list:
125
205
  for ankey in ankeys:
126
206
  r.annotation[ankey] = list(r.annotation[ankey])
@@ -133,6 +213,10 @@ def add_reaction(logger, model, rid, row, kr_ids, kegg_reaction_to_others, addty
133
213
  r.annotation['sbo'] = ['SBO:0000185'] # transport reaction
134
214
 
135
215
 
216
+ # add curator notes
217
+ r.annotation['curator_notes'] = get_curator_notes(logger, row)
218
+
219
+
136
220
  # check if unbalanced
137
221
  if r.check_mass_balance() != {}:
138
222
  logger.error(f"{itemtype} '{r.id}' is unbalanced: {r.check_mass_balance()}.")
@@ -148,50 +232,3 @@ def add_reaction(logger, model, rid, row, kr_ids, kegg_reaction_to_others, addty
148
232
 
149
233
 
150
234
  return 0
151
-
152
-
153
-
154
- def check_rstring_arrow(logger, rid, row, addtype='R'):
155
-
156
- itemtype = 'Reaction' if addtype=='R' else 'Transporter'
157
-
158
-
159
- if pnd.isna(row['rstring']):
160
- logger.error(f"{itemtype} '{rid}' has no definition (rstring).")
161
- return 1
162
- if ' --> ' not in row['rstring'] and ' <=> ' not in row['rstring']:
163
- logger.error(f"{itemtype} '{rid}' has invalid arrow: '{row['rstring']}'.")
164
- return 1
165
-
166
-
167
- return 0
168
-
169
-
170
-
171
- def check_author(logger, mrid, row, db, addtype='R'):
172
-
173
-
174
- if addtype=='M':
175
- itemtype = 'Metabolite'
176
- elif addtype=='R' :
177
- itemtype = 'Reaction'
178
- else: itemtype = 'Transporter'
179
-
180
-
181
- if pnd.isna(row['author']):
182
- logger.error(f"{itemtype} '{mrid}' has no author.")
183
- return 1
184
-
185
- authors = set()
186
- for author in row['author'].split(';'):
187
- author = author.strip()
188
- authors.add(author)
189
- if author not in db['authors']['username'].to_list():
190
- logger.error(f"{itemtype} '{mrid}' has invalid author: '{author}'.")
191
- return 1
192
-
193
-
194
- return list(authors)
195
-
196
-
197
-
@@ -15,7 +15,8 @@ def main(args, logger):
15
15
 
16
16
 
17
17
  # get dbuni and dbexp:
18
- response = get_databases(logger)
18
+ logger.info("Downloading updated gsrap assets...")
19
+ response = get_databases(logger, map_id=None)
19
20
  if type(response)==int: return 1
20
21
  else: dbuni, dbexp = response
21
22
 
@@ -44,7 +44,6 @@ def grow_on_media(logger, model, dbexp, media, fva, universe_in_parsedb=False):
44
44
  continue
45
45
  # create dedicated column con the excel output
46
46
  df_G[f'{medium}'] = '/'
47
- logger.debug(f"Growing on medium '{medium}'...")
48
47
 
49
48
 
50
49
  # apply medium
gsrap/runsims/runsims.py CHANGED
@@ -15,7 +15,8 @@ def main(args, logger):
15
15
 
16
16
 
17
17
  # get dbuni and dbexp:
18
- response = get_databases(logger)
18
+ logger.info("Downloading updated gsrap assets...")
19
+ response = get_databases(logger, map_id=None)
19
20
  if type(response)==int: return 1
20
21
  else: dbuni, dbexp = response
21
22
 
@@ -44,7 +44,6 @@ def grow_on_media(logger, model, dbexp, media, fva, universe_in_parsedb=False):
44
44
  continue
45
45
  # create dedicated column con the excel output
46
46
  df_G[f'{medium}'] = '/'
47
- logger.debug(f"Growing on medium '{medium}'...")
48
47
 
49
48
 
50
49
  # apply medium
@@ -1,8 +1,9 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: gsrap
3
- Version: 0.9.0
3
+ Version: 0.10.1
4
4
  Summary:
5
5
  License: GNU General Public License v3.0
6
+ License-File: LICENSE.txt
6
7
  Author: Gioele Lazzari
7
8
  Requires-Python: >=3.9
8
9
  Classifier: License :: Other/Proprietary License
@@ -12,9 +13,11 @@ Classifier: Programming Language :: Python :: 3.10
12
13
  Classifier: Programming Language :: Python :: 3.11
13
14
  Classifier: Programming Language :: Python :: 3.12
14
15
  Classifier: Programming Language :: Python :: 3.13
16
+ Classifier: Programming Language :: Python :: 3.14
15
17
  Requires-Dist: biopython (>=1.80)
16
18
  Requires-Dist: cobra (>=0.29)
17
19
  Requires-Dist: colorlog (>=6.9.0)
20
+ Requires-Dist: escher (>=1.8.1)
18
21
  Requires-Dist: gdown (>=5.2.0)
19
22
  Requires-Dist: gempipe (>=1.38.1)
20
23
  Requires-Dist: matplotlib (>=3.9.0)
@@ -1,5 +1,5 @@
1
- gsrap/.ipynb_checkpoints/__init__-checkpoint.py,sha256=8or3yeJRjjuaKUSWD5w3-I27LWKUF5hz9ECtzdQ_PKU,15583
2
- gsrap/__init__.py,sha256=8or3yeJRjjuaKUSWD5w3-I27LWKUF5hz9ECtzdQ_PKU,15583
1
+ gsrap/.ipynb_checkpoints/__init__-checkpoint.py,sha256=OIblfpgppQI7PgC7Or9D4AmLsihTRdiuMUsGs2iiJ_A,15624
2
+ gsrap/__init__.py,sha256=OIblfpgppQI7PgC7Or9D4AmLsihTRdiuMUsGs2iiJ_A,15624
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
@@ -9,35 +9,35 @@ gsrap/assets/PM2A.csv,sha256=rjYTdwe8lpRS552BYiUP3J71juG2ywVdR5Sux6fjZTY,8816
9
9
  gsrap/assets/PM3B.csv,sha256=42IGX_2O5bRYSiHoMuVKT-T-bzVj0cSRZBvGOrbnQMA,8130
10
10
  gsrap/assets/PM4A.csv,sha256=f_5__0Ap_T0KYje5h9veW29I2qB4yU0h7Hr7WpaHjSc,9081
11
11
  gsrap/assets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- gsrap/assets/kegg_compound_to_others.pickle,sha256=ddo1bdFSQOSmXJBuvsWWKSsFDWT_XOfV6ZG1BBj4-ew,8498114
13
- gsrap/assets/kegg_reaction_to_others.pickle,sha256=x53Ch8GjNWXHeqCF5wCPdANmi0ZxmhusYGNfDlk2ZpQ,1582568
12
+ gsrap/assets/kegg_compound_to_others.pickle,sha256=BPjrr8Gmlqqj1ufCT_lWLmDJaZ0Iu8f_XS7KJU_gLck,8498114
13
+ gsrap/assets/kegg_reaction_to_others.pickle,sha256=Gh4ANppTm_ZW-Hn-YE8EG87fMPt3EIVXk2YMZBerKqA,1763940
14
14
  gsrap/commons/.ipynb_checkpoints/__init__-checkpoint.py,sha256=9lrb0sBFSWEgV_e5FYzSgjTbam8b959rW_8VuxQHt1M,268
15
- gsrap/commons/.ipynb_checkpoints/biomass-checkpoint.py,sha256=4u7WBaUgo42tBoXDU1D0VUjICatb44e0jfswZrBeHYs,17987
15
+ gsrap/commons/.ipynb_checkpoints/biomass-checkpoint.py,sha256=eJ2lej72mjDAibS7lQCFfN-L4inkaQ3lERe7K6-1E5o,18059
16
16
  gsrap/commons/.ipynb_checkpoints/coeffs-checkpoint.py,sha256=qI3_GuqHkeA2KbK9pYdkqJaFwYemAVZJGLRR4QtHt6w,19182
17
- gsrap/commons/.ipynb_checkpoints/downloads-checkpoint.py,sha256=JrVk-UbQzelefGvOz5k4j8Ofib58u_KD_zlUzTcuv6g,11170
18
- gsrap/commons/.ipynb_checkpoints/escherutils-checkpoint.py,sha256=VQ1FXyby6Cbfw3UNHzRoePH8M8owJ8E2rzB-11vBweA,3732
19
- gsrap/commons/.ipynb_checkpoints/excelhub-checkpoint.py,sha256=_LtaWripY_D99f14Yk-3v9VIov2cUGzJ53AXgmNFpUk,11457
17
+ gsrap/commons/.ipynb_checkpoints/downloads-checkpoint.py,sha256=UKgFSPkxuxVWXoqrtZXEF42RR_KUjyoo_9wpCL-19X8,15908
18
+ gsrap/commons/.ipynb_checkpoints/escherutils-checkpoint.py,sha256=4xtFsR-DDFsrYoDC6FIGZuLxQPLfNHoaE92RlnilunI,3747
19
+ gsrap/commons/.ipynb_checkpoints/excelhub-checkpoint.py,sha256=h0TNzbjUiUQfXQrl7GRZlSc16GRzSRg3GJuwz9cXK78,11735
20
20
  gsrap/commons/.ipynb_checkpoints/figures-checkpoint.py,sha256=IRHSQXrCi4SQoISEfNB0rDhvUzbjcgsPi9zUSefsRto,4316
21
21
  gsrap/commons/.ipynb_checkpoints/fluxbal-checkpoint.py,sha256=jgC3-vI9Tbjvqohh2mJwFra4rl_pbUzHWrSa_QAxVO4,1262
22
22
  gsrap/commons/.ipynb_checkpoints/keggutils-checkpoint.py,sha256=M2nhHRiNH_xObHSxOIdt7ix59MrPdl9q3HNICC8X36M,4514
23
23
  gsrap/commons/.ipynb_checkpoints/logutils-checkpoint.py,sha256=VsnrkIsUftS3MOOwAd0n0peQ7a2X5ZEx930eCtzmW7g,1317
24
24
  gsrap/commons/.ipynb_checkpoints/medium-checkpoint.py,sha256=AMj95IvyWpbqKAYW5QdG_pyFXHDllUZ-b8dAsPR7tvU,3859
25
25
  gsrap/commons/.ipynb_checkpoints/memoteutils-checkpoint.py,sha256=rulJFSVX4I-XGi4uHXloL0eGIkC5zhpuJYWJn9zCDbY,4981
26
- gsrap/commons/.ipynb_checkpoints/metrics-checkpoint.py,sha256=gvqF2c0e31m5qQWQ11JF4-eMqxtuONy_7lUiC7uaXX4,3291
26
+ gsrap/commons/.ipynb_checkpoints/metrics-checkpoint.py,sha256=yosbgX_EWUujN3AT6joY4xNxxJI97Qk3C0aKwko_mXs,3297
27
27
  gsrap/commons/.ipynb_checkpoints/sbmlutils-checkpoint.py,sha256=gkY02qbGXrbYStn2F8J0KM0fmqati2Nbvi128EF7coI,365
28
28
  gsrap/commons/__init__.py,sha256=9lrb0sBFSWEgV_e5FYzSgjTbam8b959rW_8VuxQHt1M,268
29
- gsrap/commons/biomass.py,sha256=4u7WBaUgo42tBoXDU1D0VUjICatb44e0jfswZrBeHYs,17987
29
+ gsrap/commons/biomass.py,sha256=eJ2lej72mjDAibS7lQCFfN-L4inkaQ3lERe7K6-1E5o,18059
30
30
  gsrap/commons/coeffs.py,sha256=qI3_GuqHkeA2KbK9pYdkqJaFwYemAVZJGLRR4QtHt6w,19182
31
- gsrap/commons/downloads.py,sha256=JrVk-UbQzelefGvOz5k4j8Ofib58u_KD_zlUzTcuv6g,11170
32
- gsrap/commons/escherutils.py,sha256=VQ1FXyby6Cbfw3UNHzRoePH8M8owJ8E2rzB-11vBweA,3732
33
- gsrap/commons/excelhub.py,sha256=_LtaWripY_D99f14Yk-3v9VIov2cUGzJ53AXgmNFpUk,11457
31
+ gsrap/commons/downloads.py,sha256=UKgFSPkxuxVWXoqrtZXEF42RR_KUjyoo_9wpCL-19X8,15908
32
+ gsrap/commons/escherutils.py,sha256=4xtFsR-DDFsrYoDC6FIGZuLxQPLfNHoaE92RlnilunI,3747
33
+ gsrap/commons/excelhub.py,sha256=h0TNzbjUiUQfXQrl7GRZlSc16GRzSRg3GJuwz9cXK78,11735
34
34
  gsrap/commons/figures.py,sha256=IRHSQXrCi4SQoISEfNB0rDhvUzbjcgsPi9zUSefsRto,4316
35
35
  gsrap/commons/fluxbal.py,sha256=jgC3-vI9Tbjvqohh2mJwFra4rl_pbUzHWrSa_QAxVO4,1262
36
36
  gsrap/commons/keggutils.py,sha256=M2nhHRiNH_xObHSxOIdt7ix59MrPdl9q3HNICC8X36M,4514
37
37
  gsrap/commons/logutils.py,sha256=VsnrkIsUftS3MOOwAd0n0peQ7a2X5ZEx930eCtzmW7g,1317
38
38
  gsrap/commons/medium.py,sha256=AMj95IvyWpbqKAYW5QdG_pyFXHDllUZ-b8dAsPR7tvU,3859
39
39
  gsrap/commons/memoteutils.py,sha256=rulJFSVX4I-XGi4uHXloL0eGIkC5zhpuJYWJn9zCDbY,4981
40
- gsrap/commons/metrics.py,sha256=gvqF2c0e31m5qQWQ11JF4-eMqxtuONy_7lUiC7uaXX4,3291
40
+ gsrap/commons/metrics.py,sha256=yosbgX_EWUujN3AT6joY4xNxxJI97Qk3C0aKwko_mXs,3297
41
41
  gsrap/commons/sbmlutils.py,sha256=gkY02qbGXrbYStn2F8J0KM0fmqati2Nbvi128EF7coI,365
42
42
  gsrap/getmaps/.ipynb_checkpoints/__init__-checkpoint.py,sha256=L4gLwk1vgnPlQuIP-FPnvy9uXnmGVQ4Rvjv3uyciDfk,92
43
43
  gsrap/getmaps/.ipynb_checkpoints/getmaps-checkpoint.py,sha256=5Odf2PS1PmPZqQyKoLPYHYgNvYsp6IxrTy5HEQ5LNEM,2943
@@ -49,40 +49,40 @@ gsrap/mkmodel/.ipynb_checkpoints/__init__-checkpoint.py,sha256=PNze-26HMOwfdJ92K
49
49
  gsrap/mkmodel/.ipynb_checkpoints/biologcuration-checkpoint.py,sha256=Nn7z-js-mzzeO23kVM2L7sJ5PNle7AkCUeBcEAYjlFU,15378
50
50
  gsrap/mkmodel/.ipynb_checkpoints/gapfill-checkpoint.py,sha256=BPZw4sszlBhAYfHnV0pA7EpG0b2ePwS6kUfFt0Ww-ss,5159
51
51
  gsrap/mkmodel/.ipynb_checkpoints/gapfillutils-checkpoint.py,sha256=S6nFUZ1Bbdf13nVJhGK2S5C_V3hd5zwTg2o5nzejngg,3123
52
- gsrap/mkmodel/.ipynb_checkpoints/mkmodel-checkpoint.py,sha256=zm-JA2sXwqTLalCc0L5POw2iRI56QK0UJMUgorHQrLw,10830
52
+ gsrap/mkmodel/.ipynb_checkpoints/mkmodel-checkpoint.py,sha256=k_HZMmFTaJnXxjjk9nWCX5m1VyAXyNAM0S5h69wi-PM,10840
53
53
  gsrap/mkmodel/.ipynb_checkpoints/polishing-checkpoint.py,sha256=R1UdFPxN8N27Iu0jsYW2N_1BkWEbBHaMYW6NkCYZK_k,3256
54
54
  gsrap/mkmodel/.ipynb_checkpoints/pruner-checkpoint.py,sha256=FAZid-0H6j66wR2dVKRAaMaDREVt1edflmZXbX7blXg,9836
55
55
  gsrap/mkmodel/__init__.py,sha256=PNze-26HMOwfdJ92KiXpr--VV1ftVfo3CAxBZgeokp8,92
56
56
  gsrap/mkmodel/biologcuration.py,sha256=Nn7z-js-mzzeO23kVM2L7sJ5PNle7AkCUeBcEAYjlFU,15378
57
57
  gsrap/mkmodel/gapfill.py,sha256=BPZw4sszlBhAYfHnV0pA7EpG0b2ePwS6kUfFt0Ww-ss,5159
58
58
  gsrap/mkmodel/gapfillutils.py,sha256=S6nFUZ1Bbdf13nVJhGK2S5C_V3hd5zwTg2o5nzejngg,3123
59
- gsrap/mkmodel/mkmodel.py,sha256=zm-JA2sXwqTLalCc0L5POw2iRI56QK0UJMUgorHQrLw,10830
59
+ gsrap/mkmodel/mkmodel.py,sha256=k_HZMmFTaJnXxjjk9nWCX5m1VyAXyNAM0S5h69wi-PM,10840
60
60
  gsrap/mkmodel/polishing.py,sha256=R1UdFPxN8N27Iu0jsYW2N_1BkWEbBHaMYW6NkCYZK_k,3256
61
61
  gsrap/mkmodel/pruner.py,sha256=FAZid-0H6j66wR2dVKRAaMaDREVt1edflmZXbX7blXg,9836
62
62
  gsrap/parsedb/.ipynb_checkpoints/__init__-checkpoint.py,sha256=1k2K1gz4lIdXAwHEdJ0OhdkPu83woGv0Z4TpT1kGrTk,97
63
- gsrap/parsedb/.ipynb_checkpoints/annotation-checkpoint.py,sha256=r0sYkSqA6b8mZOGD1tgk7I__ZFkH8r4aqxVA6EUspEY,5205
64
- gsrap/parsedb/.ipynb_checkpoints/completeness-checkpoint.py,sha256=IziYv6xShUnKVxnHUwJ_I2TfiKplSXoiHQoUakI1xFI,13141
63
+ gsrap/parsedb/.ipynb_checkpoints/annotation-checkpoint.py,sha256=uJIU653LzAH3n1HGuT_MnnyTgspMeMZztGQMOw3FH2w,6005
64
+ gsrap/parsedb/.ipynb_checkpoints/completeness-checkpoint.py,sha256=LKldz8Y4cl6LvUECzgvnufhlS8GlpOwK3M8j3dPYjwc,13197
65
65
  gsrap/parsedb/.ipynb_checkpoints/cycles-checkpoint.py,sha256=HJ58LcHQseQ1eploysfXd5Y8Rip8n62qhje4pmL22VM,4761
66
- gsrap/parsedb/.ipynb_checkpoints/introduce-checkpoint.py,sha256=UuwGWGB2saG9VDMoboumeRBWhHOO68bs5_1r2RSkyVo,17145
67
- gsrap/parsedb/.ipynb_checkpoints/manual-checkpoint.py,sha256=sDux5CFNC8v2YJ3oDMV0vXsQrvSG6gov1f4hftc4nyo,3874
68
- gsrap/parsedb/.ipynb_checkpoints/parsedb-checkpoint.py,sha256=HbjkcWRI916_pvKVwTruNUbRWrHRlT__200wocLSOMY,8860
69
- gsrap/parsedb/.ipynb_checkpoints/repeating-checkpoint.py,sha256=ph1gC-84SyBnBuM7s0A9jTJBJmBlRzq0lk4FYG70228,6215
66
+ gsrap/parsedb/.ipynb_checkpoints/introduce-checkpoint.py,sha256=2mSl9zbRLjH4MslVb6_idWM8oqGbAQvGA9j2wjhmvAE,19641
67
+ gsrap/parsedb/.ipynb_checkpoints/manual-checkpoint.py,sha256=lrVR3ftABzLHrWvY-tp0LZe2k1FniSYRjQztd5J840A,5452
68
+ gsrap/parsedb/.ipynb_checkpoints/parsedb-checkpoint.py,sha256=zUfDJANj7USbsD1bMK6QIriXxF66IrEs0yWGHk3pKlE,8859
69
+ gsrap/parsedb/.ipynb_checkpoints/repeating-checkpoint.py,sha256=_v9IFfjfZ4WJfGir2-iMJ_BADwwcOidXl0-I8stEtOE,7084
70
70
  gsrap/parsedb/__init__.py,sha256=1k2K1gz4lIdXAwHEdJ0OhdkPu83woGv0Z4TpT1kGrTk,97
71
- gsrap/parsedb/annotation.py,sha256=r0sYkSqA6b8mZOGD1tgk7I__ZFkH8r4aqxVA6EUspEY,5205
72
- gsrap/parsedb/completeness.py,sha256=IziYv6xShUnKVxnHUwJ_I2TfiKplSXoiHQoUakI1xFI,13141
71
+ gsrap/parsedb/annotation.py,sha256=uJIU653LzAH3n1HGuT_MnnyTgspMeMZztGQMOw3FH2w,6005
72
+ gsrap/parsedb/completeness.py,sha256=LKldz8Y4cl6LvUECzgvnufhlS8GlpOwK3M8j3dPYjwc,13197
73
73
  gsrap/parsedb/cycles.py,sha256=HJ58LcHQseQ1eploysfXd5Y8Rip8n62qhje4pmL22VM,4761
74
- gsrap/parsedb/introduce.py,sha256=UuwGWGB2saG9VDMoboumeRBWhHOO68bs5_1r2RSkyVo,17145
75
- gsrap/parsedb/manual.py,sha256=8UCvfMK7HSXd_-JlnIWgMmBnsFGojTGE63iOJE5J_6E,3884
76
- gsrap/parsedb/parsedb.py,sha256=HbjkcWRI916_pvKVwTruNUbRWrHRlT__200wocLSOMY,8860
77
- gsrap/parsedb/repeating.py,sha256=ph1gC-84SyBnBuM7s0A9jTJBJmBlRzq0lk4FYG70228,6215
74
+ gsrap/parsedb/introduce.py,sha256=2mSl9zbRLjH4MslVb6_idWM8oqGbAQvGA9j2wjhmvAE,19641
75
+ gsrap/parsedb/manual.py,sha256=lrVR3ftABzLHrWvY-tp0LZe2k1FniSYRjQztd5J840A,5452
76
+ gsrap/parsedb/parsedb.py,sha256=zUfDJANj7USbsD1bMK6QIriXxF66IrEs0yWGHk3pKlE,8859
77
+ gsrap/parsedb/repeating.py,sha256=_v9IFfjfZ4WJfGir2-iMJ_BADwwcOidXl0-I8stEtOE,7084
78
78
  gsrap/runsims/.ipynb_checkpoints/__init__-checkpoint.py,sha256=6E6E1gWgH0V7ls4Omx4mxxC85gMJ_27YqhjugJzlZtY,97
79
79
  gsrap/runsims/.ipynb_checkpoints/biosynth-checkpoint.py,sha256=fUlHUo4CfB4rGX9Dth87B1p5E5sz7i6spR7ZoqDDGaI,2836
80
80
  gsrap/runsims/.ipynb_checkpoints/cnps-checkpoint.py,sha256=A0U8QPqW_uyrtHs99F286aEDEC6eukHXeMWrmnd0efA,5636
81
81
  gsrap/runsims/.ipynb_checkpoints/essentialgenes-checkpoint.py,sha256=MzHiuaU1gwiPdjZAgG7tkdYzkTTvoNCLp5tkezZhzxE,2247
82
82
  gsrap/runsims/.ipynb_checkpoints/growthfactors-checkpoint.py,sha256=r_W4idtOSJBDh7HURRsU8s1TqfOZ3TfeVw2HHDxmnGU,2265
83
83
  gsrap/runsims/.ipynb_checkpoints/precursors-checkpoint.py,sha256=1RNt_Rxs0L1lolDmYh4_CiZgiwHfU5B_AcomJO6vJ28,2219
84
- gsrap/runsims/.ipynb_checkpoints/runsims-checkpoint.py,sha256=2FC5Gs8oSYyZTjHF3A7aXB_O6myVfcn3bCxQfLJlZTk,2842
85
- gsrap/runsims/.ipynb_checkpoints/simplegrowth-checkpoint.py,sha256=tCQHTMUqum1YwlBKRTNaQoag2co_yQlCaKmISOARAlE,2353
84
+ gsrap/runsims/.ipynb_checkpoints/runsims-checkpoint.py,sha256=aVELI1re1Dlm1_Lh7t1DwSoA8AcxQw0JKNnjV9w5F20,2910
85
+ gsrap/runsims/.ipynb_checkpoints/simplegrowth-checkpoint.py,sha256=rVN69v4B-DdxOJDsJ_JOVzbnWsDYafMq43QD_GJIpjs,2296
86
86
  gsrap/runsims/.ipynb_checkpoints/singleomission-checkpoint.py,sha256=jMuKAi0pINP8Jlrm-yI-tX7D110VzttR3YfTSnDRe4I,2847
87
87
  gsrap/runsims/__init__.py,sha256=6E6E1gWgH0V7ls4Omx4mxxC85gMJ_27YqhjugJzlZtY,97
88
88
  gsrap/runsims/biosynth.py,sha256=fUlHUo4CfB4rGX9Dth87B1p5E5sz7i6spR7ZoqDDGaI,2836
@@ -90,11 +90,11 @@ gsrap/runsims/cnps.py,sha256=A0U8QPqW_uyrtHs99F286aEDEC6eukHXeMWrmnd0efA,5636
90
90
  gsrap/runsims/essentialgenes.py,sha256=MzHiuaU1gwiPdjZAgG7tkdYzkTTvoNCLp5tkezZhzxE,2247
91
91
  gsrap/runsims/growthfactors.py,sha256=r_W4idtOSJBDh7HURRsU8s1TqfOZ3TfeVw2HHDxmnGU,2265
92
92
  gsrap/runsims/precursors.py,sha256=1RNt_Rxs0L1lolDmYh4_CiZgiwHfU5B_AcomJO6vJ28,2219
93
- gsrap/runsims/runsims.py,sha256=2FC5Gs8oSYyZTjHF3A7aXB_O6myVfcn3bCxQfLJlZTk,2842
94
- gsrap/runsims/simplegrowth.py,sha256=tCQHTMUqum1YwlBKRTNaQoag2co_yQlCaKmISOARAlE,2353
93
+ gsrap/runsims/runsims.py,sha256=aVELI1re1Dlm1_Lh7t1DwSoA8AcxQw0JKNnjV9w5F20,2910
94
+ gsrap/runsims/simplegrowth.py,sha256=rVN69v4B-DdxOJDsJ_JOVzbnWsDYafMq43QD_GJIpjs,2296
95
95
  gsrap/runsims/singleomission.py,sha256=jMuKAi0pINP8Jlrm-yI-tX7D110VzttR3YfTSnDRe4I,2847
96
- gsrap-0.9.0.dist-info/LICENSE.txt,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
97
- gsrap-0.9.0.dist-info/METADATA,sha256=Zd_nRZYHhrKBle7mzTBWnQQ1KdMWlHPuKqH9-YU5IHA,898
98
- gsrap-0.9.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
99
- gsrap-0.9.0.dist-info/entry_points.txt,sha256=S9MY0DjfnbKGlZbp5bV7W6dNFy3APoEV84u9x6MV1eI,36
100
- gsrap-0.9.0.dist-info/RECORD,,
96
+ gsrap-0.10.1.dist-info/METADATA,sha256=AGbAQL3AEB3s3o9-jmWHZoVsjZQXRyUKVfQQlbWUitA,1008
97
+ gsrap-0.10.1.dist-info/WHEEL,sha256=3ny-bZhpXrU6vSQ1UPG34FoxZBp3lVcvK0LkgUz6VLk,88
98
+ gsrap-0.10.1.dist-info/entry_points.txt,sha256=S9MY0DjfnbKGlZbp5bV7W6dNFy3APoEV84u9x6MV1eI,36
99
+ gsrap-0.10.1.dist-info/licenses/LICENSE.txt,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
100
+ gsrap-0.10.1.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.3
2
+ Generator: poetry-core 2.3.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any