epfl-lcsb / pytfa Goto Github PK
View Code? Open in Web Editor NEWA Python 3 implementation of Thermodynamics-based Flux Analysis
Home Page: https://lcsb.epfl.ch/
License: Apache License 2.0
A Python 3 implementation of Thermodynamics-based Flux Analysis
Home Page: https://lcsb.epfl.ch/
License: Apache License 2.0
So, my local user is part of the docker group. That leads to the following situation when using the run command that mounts my local work
and pytfa
directories into the container:
My local user cannot be mapped to a user in the docker container. Thus /home/pytfa/work
and /src/pytfa
are owned by 1001:1001
and access is denied to the pytfa
user.
Although it can be useful, of course, to mount volumes into the container I'd say it shouldn't be necessary for the functioning of the image. Unfortunately, it is necessary as pytfa won't be installed.
If you really want to keep this behavior, an entrypoint script might be the right way to go. See this comment.
from pytfa.thermo.equilibrator import build_thermo_from_equilibrator
fails because equilibrator-cache replaced dependency on quilt with zenodo in this commit around equilibrator-cache=0.4.0
Hello,
first of all big thanks for supporting the package! I had a problem with the function relax_dgo and also a possible solution:
from pytfa.optim.relaxation import relax_dgo
relaxed_model, slack_model, relax_table = relax_dgo(mytfa)
The follwing Error occours:
~\AppData\Roaming\Python\Python38\site-packages\pytfa\optim\utils.py in symbol_sum(variables)
108 k=0
109 # If we encounter a zero, which is a special type, increase k
--> 110 while isinstance(variables[k], sympy.numbers.Zero) and k<len(variables):
111 k+=1
112 if k == len(variables):
AttributeError: module 'sympy' has no attribute 'numbers'
By changing sympy.numbers.Zero to sympy.core.numbers.Zero in ~\AppData\Roaming\Python\Python38\site-packages\pytfa\optim\utils.py the Error is gone.
This seems like sympy changed something there.
I'm using Python Python 3.8.5 and sympy version 1.6.2
Regards,
Emil
Hello,
I'm trying to convert my model to TFA, and I'm getting an unmanaged KeyError for some of my metabolites. It usually looks like that:
mytfa.prepare()
mytfa.convert()
2021-04-23 14:02:02,924 - thermomodel_ - INFO - # Model preparation starting...
2021-04-23 14:02:04,180 - thermomodel_ - WARNING - Warning : Pb/Pb
2021-04-23 14:02:04,181 - thermomodel_ - WARNING - Warning : Pb/Pb
2021-04-23 14:02:04,296 - thermomodel_ - INFO - # Model preparation done.
2021-04-23 14:02:04,297 - thermomodel_ - INFO - # Model conversion starting...
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-9-ebc2fae6d451> in <module>
1 ## TFA conversion
2 mytfa.prepare()
----> 3 mytfa.convert()#add_displacement = True)
4
5 ## Info on the cobra_model
/media/data/mdz/bio_projects/tac125_metabolic_modelling/analysis/14_tfa_model_construction/pytfa/pytfa/thermo/tmodel.py in convert(self, add_potentials, add_displacement, verbose)
658 for rxn in self.reactions:
659 self._convert_reaction(
--> 660 rxn, add_potentials, add_displacement, verbose
661 )
662
/media/data/mdz/bio_projects/tac125_metabolic_modelling/analysis/14_tfa_model_construction/pytfa/pytfa/thermo/tmodel.py in _convert_reaction(self, rxn, add_potentials, add_displacement, verbose)
519 # changes in deltaGFs in the RHS term
520 LC_ChemMet += (
--> 521 self.LC_vars[met] * RT * rxn.metabolites[met]
522 )
523
KeyError: <Metabolite cpd15684_c at 0x7f3762226518>
I tried to understand what is going on, but without any success. I just know that self.LC_vars[met] is raising the error. Does it have something to do with how my metabolites/reactions are defined?
Since I wasn't able to use the models distributed with the package (cf. #2), I tried to use another model but then discovered that the compounds in the thermodynamic database are all SEED identifiers. While this is not a problem, of course, using MetaNetX identifiers would be a great improvement as it easily maps to a whole range of databases.
Hi!
In the basic tutorial the ThermoModel is converted without thermodynamic displacement, while you use add_displacement = True in some of the other tutorials and in the scripts creating the figures. Could you please explain the recommended use and how this affects the TFA / Flux variability calculations?
Hi! Thanks for supporting this package,
I am trying to use relax_lc (same is in the example with relax_dgo). I am using EColi_BL21 from the package replicating the relax_dgo example. Is it possible to fix on my side?
Description of the error:
If I don't constrain the biomass function
mytfa.reactions.get_by_id(biomass_rxn).lower_bound = 0.0
I get the following error
ValueError Traceback (most recent call last)
<ipython-input-17-78e5fa8cc847> in <module>
6
7 mytfa.reactions.get_by_id(biomass_rxn).lower_bound = 0.0*fba_value
----> 8 relaxed_model, slack_model, relax_table = relax_lc(mytfa)
9
10 original_model, mytfa = mytfa, relaxed_model
/miniconda3/envs/rbcenv/lib/python3.7/site-packages/pytfa/optim/relaxation.py in relax_lc(tmodel, metabolites_to_ignore, solver)
418 'ub_change',
419 'lb_out',
--> 420 'ub_out']
421
422 tmodel.logger.info('\n' + relax_table.__str__())
/miniconda3/envs/rbcenv/lib/python3.7/site-packages/pandas/core/generic.py in __setattr__(self, name, value)
5078 try:
5079 object.__getattribute__(self, name)
-> 5080 return object.__setattr__(self, name, value)
5081 except AttributeError:
5082 pass
pandas/_libs/properties.pyx in pandas._libs.properties.AxisProperty.__set__()
/miniconda3/envs/rbcenv/lib/python3.7/site-packages/pandas/core/generic.py in _set_axis(self, axis, labels)
636
637 def _set_axis(self, axis, labels):
--> 638 self._data.set_axis(axis, labels)
639 self._clear_item_cache()
640
/miniconda3/envs/rbcenv/lib/python3.7/site-packages/pandas/core/internals/managers.py in set_axis(self, axis, new_labels)
153 raise ValueError(
154 'Length mismatch: Expected axis has {old} elements, new '
--> 155 'values have {new} elements'.format(old=old_len, new=new_len))
156
157 self.axes[axis] = new_labels
ValueError: Length mismatch: Expected axis has 0 elements, new values have 6 elements
If I constrain the biomass reaction
mytfa.reactions.get_by_id(biomass_rxn).lower_bound = 0.5*fba_value
I got the following error
2020-10-12 13:09:42,209 - thermomodel_None - INFO - # Model initialized with units kcal/mol and temperature 298.15 K
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-18-a9a6b332d808> in <module>
6
7 mytfa.reactions.get_by_id(biomass_rxn).lower_bound = 0.5*fba_value
----> 8 relaxed_model, slack_model, relax_table = relax_lc(mytfa)
9
10 original_model, mytfa = mytfa, relaxed_model
/miniconda3/envs/rbcenv/lib/python3.7/site-packages/pytfa/optim/relaxation.py in relax_lc(tmodel, metabolites_to_ignore, solver)
282 # Do not relax if cobra_model is already optimal
283 try:
--> 284 solution = tmodel.optimize()
285 except SolverError as SE:
286 status = tmodel.solver.status
/miniconda3/envs/rbcenv/lib/python3.7/site-packages/pytfa/core/model.py in optimize(self, objective_sense, **kwargs)
393 try:
394 # self._hidden_optimize_call(kwargs)
--> 395 Model.optimize(self, **kwargs)
396 solution = self.get_solution()
397 self.solution = solution
/miniconda3/envs/rbcenv/lib/python3.7/site-packages/cobra/core/model.py in optimize(self, objective_sense, raise_error)
1078 objective_sense, original_direction)
1079 self.slim_optimize()
-> 1080 solution = get_solution(self, raise_error=raise_error)
1081 self.objective.direction = original_direction
1082 return solution
/miniconda3/envs/rbcenv/lib/python3.7/site-packages/cobra/core/solution.py in get_solution(model, reactions, metabolites, raise_error)
229 fluxes = empty(len(reactions))
230 reduced = empty(len(reactions))
--> 231 var_primals = model.solver.primal_values
232 shadow = empty(len(metabolites))
233 if model.solver.is_integer:
/miniconda3/envs/rbcenv/lib/python3.7/site-packages/optlang/interface.py in primal_values(self)
1234 """
1235 return collections.OrderedDict(
-> 1236 zip(self._get_variables_names(), self._get_primal_values())
1237 )
1238
/miniconda3/envs/rbcenv/lib/python3.7/site-packages/optlang/interface.py in _get_primal_values(self)
1245 """
1246 # Fallback, if nothing faster is available
-> 1247 return [variable.primal for variable in self.variables]
1248
1249 @property
/miniconda3/envs/rbcenv/lib/python3.7/site-packages/optlang/interface.py in <listcomp>(.0)
1245 """
1246 # Fallback, if nothing faster is available
-> 1247 return [variable.primal for variable in self.variables]
1248
1249 @property
/miniconda3/envs/rbcenv/lib/python3.7/site-packages/optlang/interface.py in primal(self)
272 """The primal of variable (None if no solution exists)."""
273 if self.problem:
--> 274 return self._get_primal()
275 else:
276 return None
/miniconda3/envs/rbcenv/lib/python3.7/site-packages/optlang/gurobi_interface.py in _get_primal(self)
156
157 def _get_primal(self):
--> 158 return self._internal_variable.getAttr('X')
159
160 @property
var.pxi in gurobipy.Var.getAttr()
attrutil.pxi in gurobipy.__getattr()
AttributeError: Unable to retrieve attribute 'X'
Dear pytfa team,
I'd like to try pytfa for some analysis.
I started by working through the tutorial_basics.py. When running the script, it throws a lot of 'Warning : NULL/U' and 'Warning : Null/L' messages at me during the mytfa.prepare() step.
Can you explain the meaning of these warnings, is it expected behavior?
Thanks a lot.
Cheers,
Michael
Dear Pierre and colleagues,
First of all, thank you for the great tool, the neat support in the docs and the informative articles.
A minor issue/suggestion:
In tutorial_sampling.py, using model iJO1366.json, I got a KeyError on line 72, while applying flux directionality. Going into the code in /analysis/manipulation.py, I found that if I change the end of the code on line 70 from
backward_use.variable.lb = round(solution.x_dict[backward_use.name])
to
backward_use.variable.lb = round(solution.x_dict[backward_use.id])
and similarly for the other three lines as well, I can enforce the use of the raw id name, without the "BU_" and "FU_" prefixes.
Not sure if it was a common issue, but in case anyone else would run into the same, this solved my problem.
Keep up the great work!
Best, Adam
Hi,
do you plan to implement the integration of metabolomics (absolute metabolite concentrations) for dG calculation?
See #2
While a compressed pickle is not a bad way to distribute data. It's not very future proof. You might consider creating database models with SQLAlchemy and storing everything in a SQLite database. I'm happy to help if you have any questions about that.
As an user, I would like to use the eQuilibrator-API as the thermodynamic database. Thus, eQuilibrator would parse the reactions, calculate ΔGr for each reaction and use the data to prepare and convert a cobra.Model
into a pyTFA.ThermoModel
. Is there any reason that hampers this integration?
I would be happy to help with the implementation, maybe as an extra dependency. I have used the tutorial in tutorials/figure_paper.py
to try to reproduce the results just by adding reaction data, but the results differ (at the end of this notebook).
EDIT: after adding the pH and ionic strength information about each metabolite (without running the built-in .prepare()
method), the results are exactly reproduced.
pytfa.optim.constraints line 234, there must be a comma between metabolite and ** kwargs
Dear pyTFA team,
I tried running the tutorial_basics.py script (after you helped me understand the warnings) which gave me a result for the regular thermodynamics FBA. However, when trying to run the second part of the script where a relaxed model is generated the script throws the following error:
thermomodel_new - ERROR - Relaxation could not complete (no DeltaG relaxation found)
According to the annotation in the source code this either means the model is infeasible or something else went wrong. Could you hint at what I'm doing wrong here?
Thanks a lot.
Cheers,
Michael
How can I get the effective delta G of each reaction after the log concentration of all metabolites have been included?
I tried to run the tutorials and with each one of them I get the same ValueError
when the scripts try to read the models. As an example, python tutorial_basics.py
causes the following traceback:
Traceback (most recent call last):
File "tutorial_basics.py", line 18, in <module>
cobra_model = import_matlab_model('../models/small_ecoli.mat')
File ".virtualenvs/tfa/lib/python3.6/site-packages/pytfa/io/base.py", line 39, in import_matlab_model
mat_data = loadmat(path)
File ".virtualenvs/tfa/lib/python3.6/site-packages/scipy/io/matlab/mio.py", line 135, in loadmat
MR = mat_reader_factory(file_name, appendmat, **kwargs)
File ".virtualenvs/tfa/lib/python3.6/site-packages/scipy/io/matlab/mio.py", line 59, in mat_reader_factory
mjv, mnv = get_matfile_version(byte_stream)
File ".virtualenvs/tfa/lib/python3.6/site-packages/scipy/io/matlab/miobase.py", line 241, in get_matfile_version
raise ValueError('Unknown mat file type, version %s, %s' % ret)
ValueError: Unknown mat file type, version 50, 56
I'm using Python 3.6, cobra==0.11.2
, and scipy==0.19.0
. I get exactly the same error with scipy==1.0.0
, though.
Two comments:
cobra.io.load_matlab_model
which may or may not be the same as pytfa.io.import_matlab_model
. Internally they use the same scipy function. So same error.Uppon loading the model, the deltaGerr
values are set to 2.0:
tmodel = load_json_model('../tmodels/outputs/tmodel.json')
In the .json file, the deltaGerr
values are correctly set to 0.0.
The model is loaded after setting the deltaGerr
of reactions to 0.0 and exporting the model:
for rxn in model.reactions:
rxn.thermo['deltaGRerr'] = 0.0
#...
save_json_model(tmodel, './outputs/tmodel.json')
Hello.
When trying to build the docker container an error appears:
> [10/21] RUN /utils/install_cplex.sh:
#14 0.481 /bin/sh: 1: /utils/install_cplex.sh: not found
------
executor failed running [/bin/sh -c /utils/install_cplex.sh]: exit code: 127
There seems to be a utils/install_cplex.sh file. I have also put the necessary files in the solvers folder. Maybe it has something to do with me using Windows?
Hi,
I just cloned the repository and tried building the docker container following the instructions in pytfa/docker.
During step [ 6/21] RUN pip install -r requirements.txt, I get the following error:
ERROR: Command errored out with exit status 1: /usr/local/bin/python -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-2ysj1c0r/python-libsbml_450b9997bf4247338ffe25308f09a29e/setup.py'"'"'; file='"'"'/tmp/pip-install-2ysj1c0r/python-libsbml_450b9997bf4247338ffe25308f09a29e/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(file) if os.path.exists(file) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record /tmp/pip-record-hc4w98os/install-record.txt --single-version-externally-managed --compile --install-headers /usr/local/include/python3.6m/python-libsbml Check the logs for full command output.
I would attach the log, but I cannot find it.
Trying to remove python-libsbml from the requirements file did not fix the issue.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.