"""
Collection of small helper scripts.
"""
from fractions import Fraction
import numpy as np
import pandas as pd
from sympy import *
import efmlrs.util.convert_matrix as conversion
[docs]def write_all(smatrix, reactions, reversibilities, metabolites, name):
write_sfile(name, smatrix)
write_rvfile(name, reversibilities)
write_init_rfile(name, reactions)
write_init_mfile(name, metabolites)
[docs]def write_initial_files_with_bounds(core_name, reactions, reversibilities, metabolites):
write_init_rfile(core_name, reactions)
write_rvfile(core_name, reversibilities)
write_init_mfile(core_name, metabolites)
[docs]def write_initial_files_no_bounds(core_name, reactions, reversibilities, metabolites):
write_init_rfile(core_name, reactions)
write_rvfile(core_name, reversibilities)
write_init_mfile(core_name, metabolites)
[docs]def read_sfile_int(name):
name += ".sfile"
sfile = open(name, "r")
smatrix = []
for line in sfile:
if line == "":
continue
vtmp = []
for val in line.split():
if val == "":
continue
vtmp.append(int(val))
smatrix.append(vtmp)
sfile.close()
return smatrix
[docs]def read_sfile(name):
name += ".sfile"
sfile = open(name, "r")
smatrix = []
for line in sfile:
if line == "":
continue
vtmp = []
for val in line.split():
if val == "":
continue
vtmp.append(Fraction(val))
smatrix.append(vtmp)
sfile.close()
return smatrix
[docs]def write_sfile(name, smatrix):
name += ".sfile"
file = open(name, "w")
for i in range(0, smatrix.shape[0]):
row = smatrix.row(i)
for j in range(0, smatrix.shape[1]):
val = row[j]
file.write(str(val))
file.write(" ")
file.write("\n")
file.close()
[docs]def write_sfile_float(name, smatrix):
name += ".sfile"
file = open(name, "w")
for row in smatrix:
cnt = 0
for val in row:
cnt += 1
if cnt < len(smatrix[0]):
check = (val).is_integer()
if check is True:
file.write(str(int(val)))
file.write(" ")
if check is False:
file.write(str(float(val)))
file.write(" ")
else:
check = (val).is_integer()
if check is True:
file.write(str(int(val)))
if check is False:
file.write(str(float(val)))
file.write("\n")
file.close()
[docs]def convert_float2fraction(matrix):
fr_matrix = [[Fraction(str(val)) for val in line] for line in matrix]
return fr_matrix
[docs]def convert_fraction2float(matrix):
float_matrix = [[float(val) for val in line] for line in matrix]
return float_matrix
[docs]def convert_matrix2df(smatrix):
smatrix = np.array(smatrix)
smatrix = pd.DataFrame(smatrix)
return smatrix
[docs]def convert_df2matrix(smatrix_df):
smatrix = Matrix(smatrix_df)
return smatrix
[docs]def read_mfile(name):
name += ".mfile"
file = open(name, "r")
metabolism = file.read().split()
file.close()
return metabolism
[docs]def write_mfile(name, metabolism):
name += ".mfile"
file = open(name, "w")
for i in metabolism:
file.write(i + " ")
file.close()
[docs]def write_init_mfile(name, metabolism):
name += ".mfile"
file = open(name, "w")
for i in metabolism:
file.write('"')
file.write(i)
file.write('" ')
file.close()
[docs]def read_rfile(name):
name += ".rfile"
file = open(name, "r")
reactions = file.read().split()
file.close()
return reactions
[docs]def write_rfile(name, reactions):
name += ".rfile"
file = open(name, "w")
for i in reactions:
file.write(i + " ")
file.close()
[docs]def write_init_rfile(name, reactions):
name += ".rfile"
file = open(name, "w")
for i in reactions:
file.write('"')
file.write(i)
file.write('" ')
file.close()
[docs]def read_rvfile(name):
name += ".rvfile"
file = open(name, "r")
reversibles = file.read().split()
file.close()
return [bool(int(i)) for i in reversibles]
[docs]def write_rvfile(name, reversibles):
name += ".rvfile"
file = open(name, "w")
for i in [str(int(j)) for j in reversibles]:
file.write(i + " ")
file.close()
[docs]def write_efms(name, efms):
efm_matrix = Matrix(efms)
file = open(name, "w")
for i in range(0, efm_matrix.shape[0]):
row = efm_matrix.row(i)
for j in range(0, efm_matrix.shape[1]):
val = row[j]
file.write(str(val))
file.write(" ")
file.write("\n")
file.close()
[docs]def write_info(core_name, reversibilities, outer_counter):
info_file_name = core_name + ".info"
file = open(info_file_name, "a")
file.write("rv: ")
for i in [str(int(j)) for j in reversibilities]:
file.write(i + " ")
file.write("\n")
file.write("counter " + str(outer_counter))
file.close()
[docs]def bounds_print(bounds):
for name, val in bounds.items():
if name.endswith("_max"):
print("Upper bound:", val, "for reaction", name[:-4])
else:
print("Lower bound:", val, "for reaction", name[:-4])
[docs]def reversibilities4printing(reversibilities):
i = 0
for val in reversibilities:
if val is True:
i += 1
return i
[docs]def efmlrs_start_compressions():
print(' ')
print(r' EFMlrs __ ')
print(r' (\ .-. .-. /_")')
print(r' \\_//^\\_//^\\_// ')
print(r' `"´ `"´ `"´ ')
print(' start compressions ')
print(' ')
[docs]def efmlrs_finish_compressions():
print(' ')
print(r' .-. ')
print(r' / oo ')
print(r' EFMlrs \ -,_) ')
print(r' _..._| \ `-<')
print(r' {} ." .__.\' | ')
print(r' {} ( /`\ ')
print(r' {}(`´------´ / ')
print(r' `----------´ ')
print(r' finished compressions ')
print(r' ')
[docs]def efmlrs_start_decompressions():
print(r' ')
print(r' .-. ')
print(r' / oo ')
print(r' EFMlrs \ -,_) ')
print(r' _..._| \ `-<')
print(r' {} ." .__.\' | ')
print(r' {} ( /`\ ')
print(r' {}(`´------´ / ')
print(r' `----------´ ')
print(r' start decompressions ')
print(r' ')
[docs]def efmlrs_finish_decompressions():
print(' ')
print(r' EFMlrs __ ')
print(r' (\ .-. .-. /_")')
print(r' \\_//^\\_//^\\_// ')
print(r' `"´ `"´ `"´ ')
print(' finished decompressions')
print(' ')
[docs]def write_uncmp_int_matrix(core_name):
smatrix = read_sfile(core_name)
smatrix = Matrix(smatrix)
write_sfile(core_name, smatrix)
smatrix = Matrix(smatrix)
write_sfile(core_name + "_fractions", smatrix)
[docs]def write_cmp_int_matrix(core_name):
smatrix = read_sfile(core_name + "_cmp")
int_smatrix = conversion.run(smatrix)
write_sfile(core_name + "_cmp", int_smatrix)