Source code for ulysses.tools
import cmath
import ulysses
def readConfig(fname):
from collections import OrderedDict
fixed = OrderedDict()
ranges = OrderedDict()
with open(fname) as f:
for line in f:
l=line.strip()
if l.startswith("#"):
continue
if len(l) == 0:
continue
fields = l.split()
if len(fields)==1:
print( "Warning, not understood instruction:", l)
continue
elif len(fields)==2:
try:
fixed[fields[0]] = float(fields[1])
except:
fixed[fields[0]] = complex(fields[1])
elif len(fields)==3:
ranges[fields[0]] = (float(fields[1]), float(fields[2]))
else:
print ("Warning, not understood instruction:", l)
continue
return ranges, fixed
[docs]def selectModel(model, **kwargs):
r"""
This function loads and returns an instance of one of the built-in models.
The kwargs are passed on to the base class.
:Arguments:
* *model* (``str``) --
The model. Must be in ["1DME", "2DME", "3DME", "1BE", "2BE", "2resonant", "3DMEsct", "3DMErhtau"]
"""
import ulysses
if not ":" in model:
avail = ["1DME", "2DME", "3DME", "1BE1F", "1BE2F", "1BE3F", "2BE3F", "2resonant", "3DMEsct", "3DMErhtau"]
if model=="1DME": return ulysses.EtaB_1DME(**kwargs)
elif model=="2DME": return ulysses.EtaB_2DME(**kwargs)
elif model=="3DME": return ulysses.EtaB_3DME(**kwargs)
elif model=="1BE1F": return ulysses.EtaB_1BE1F(**kwargs)
elif model=="1BE2F": return ulysses.EtaB_1BE2F(**kwargs)
elif model=="1BE3F": return ulysses.EtaB_1BE3F(**kwargs)
elif model=="2BE3F": return ulysses.EtaB_2BE3F(**kwargs)
elif model=="2resonant": return ulysses.EtaB_2Resonant(**kwargs)
elif model=="3DMEsct": return ulysses.EtaB_3DME_Scattering(**kwargs)
elif model=="3DMErhtau": return ulysses.EtaB_3DS_Scattering_RHtaur(**kwargs)
else:
raise Exception("Specified model '{}' unknown.\n Select from: {}".format(model, avail))
else:
return loadPlugin(model, **kwargs)
[docs]def loadPlugin(model, **kwargs):
r"""
Plugin loader. This attemts to load and return and instance of
the class CLASS in the file FILENAME. Both are given as a single
string using : as separator. The kwargs are passed on to the base class.
:Arguments:
* *model* (``str``) --
FILENAME:CLASS
"""
import ulysses
m_file, m_name = model.split(":")
import os
if not os.path.exists(m_file):
raise Exception("Specified module file '{}' does not exist.{}".format(m_file))
# https://stackoverflow.com/questions/67631/how-to-import-a-module-given-the-full-path
from importlib.machinery import SourceFileLoader
foo = SourceFileLoader(m_name, m_file).load_module()
# https://stackoverflow.com/questions/1796180/how-can-i-get-a-list-of-all-classes-within-current-module-in-python
import inspect
IM = dict(inspect.getmembers(foo, inspect.isclass))
if not m_name in IM:
raise Exception("Specified class '{}' not found in module {}".format(m_name, m_file))
if not issubclass(IM[m_name], ulysses.ULSBase):
raise Exception("Specified class '{}' does not derive from leptoms.ULSBase".format(m_name))
return IM[m_name](**kwargs)