Source code for omfit_classes.omfit_chombo
try:
# framework is running
from .startup_choice import *
except ImportError as _excp:
# class is imported by itself
if (
'attempted relative import with no known parent package' in str(_excp)
or 'No module named \'omfit_classes\'' in str(_excp)
or "No module named '__main__.startup_choice'" in str(_excp)
):
from startup_choice import *
else:
raise
from omfit_classes.omfit_ascii import OMFITascii
from omfit_classes import namelist
__all__ = ['OMFITchombo']
[docs]class OMFITchombo(SortedDict, OMFITascii):
r"""
OMFIT class used to interface with CHOMBO input files
:param filename: filename passed to OMFITascii class
:param \**kw: keyword dictionary passed to OMFITascii class
"""
def __init__(self, filename, **kw):
SortedDict.__init__(self)
OMFITascii.__init__(self, filename, **kw)
self.dynaLoad = True
[docs] @dynaLoad
def load(self):
with open(self.filename, 'r') as f:
lines = f.read().split('\n')
for line in lines:
line = re.sub('#.*', '', line).strip()
if not len(line):
continue
where, val = list(map(lambda x: str(x).strip(), line.split('=')))
where = where.split('.')
s = self
for loc in where[:-1]:
s.setdefault(loc, SortedDict())
s = s[loc]
if where[-1] in ['magnetic_geometry_mapping']:
s['__' + where[-1] + '__'] = namelist.interpreter(val)
s[where[-1]] = SortedDict()
elif "'" in val or '"' in val:
v = val[0]
s[where[-1]] = eval('np.array([' + re.sub(v + ' ' + v, v + ',' + v, val) + '])')
if len(s[where[-1]]) == 1:
s[where[-1]] = s[where[-1]][0]
else:
s[where[-1]] = list(map(namelist.interpreter, val.split()))
if len(s[where[-1]]) == 1:
s[where[-1]] = s[where[-1]][0]
else:
s[where[-1]] = np.array(s[where[-1]])
[docs] @dynaSave
def save(self):
lines = []
prev = list(self.keys())[0]
for where in traverse(self, onlyLeaf=True):
# split main blocks
tmp = parseBuildLocation(where)[0]
if tmp != prev:
lines.append('')
prev = tmp
tmp = re.sub('\'', '"', namelist.encoder(eval('self' + where), dotBoolean=False, array_compress=False, max_array_chars=None))
if isinstance(eval('self' + where), bool):
tmp = tmp.lower()
lines.append('.'.join([x.strip('__') for x in parseBuildLocation(where)]) + ' = ' + re.sub('\'', '"', tmp))
with open(self.filename, 'w') as f:
f.write('\n'.join(lines))