import numpy
from ScrumPy.Data import DataSets

def Changers(ds,lim=1e-06):
	rv = []
	for cname in ds.cnames:
		col = ds.GetCol(cname)
		if abs(max(col)-min(col))>lim:
			rv.append(cname)
	return rv

def BuildLP(m):
	lp = m.GetLP()
	lp.SetObjective(m.sm.cnames)
	lp.SetFluxBounds({"RIBULOSE-BISPHOSPHATE-CARBOXYLASE-RXN_Plas":(0,400.0)})
	if "GLYCEROL_Cyto_tx" in m.sm.cnames:
		lp.SetFluxBounds({"GLYCEROL_Cyto_tx":(0,20)})
	return lp

def LipidScan(m,lp=None,lo=1.0,hi=20.0):
	ds = DataSets.DataSet()
	ranges = numpy.arange(lo,hi)
	if lp == None:
		lp = BuildLP(m)
	for t in ranges:
		lp.SetFixedFlux({"TAG_synthesis_Cyto":t})
		lp.Solve()
		if lp.GetStatusMsg() == "optimal":
			sol = lp.GetPrimSol()
			ds.UpdateFromDic(sol)
	ds.SetPlotX("TAG_synthesis_Cyto")
	ds.AddToPlot("RIBULOSE-BISPHOSPHATE-CARBOXYLASE-RXN_Plas")
	return ds
