"""Excentury
Collection of functions to read and write files and strings in the
excentury format.
"""
import numpy as np
from .core import dump_tensor, dump_datatype, load_datatype, XCStruct
from .core.load_text import TextParser
from .core.dump_text import TextDumper
[docs]def parse_string(text, kind=None):
"""Utility function to read a string in text mode. """
if kind is None:
tmp = TextParser(text)
return tmp.parse()
else:
pass
[docs]def load_file(fname, kind=None):
"""Utility function to read an excentury file in text mode. """
return parse_string(open(fname, 'r').read(), kind)
#pylint: disable=W0142
[docs]def dump_text(fname, *obj, **keys):
"""Utility function to dump objects in a text file. You may
do it in a list form:
dump_text("filename.xc", (val1, "var1"), (val2, "var2"))
or dictionary form:
dump_text("filename.xc", var1=val1, var2=val2)
or a combination of both. Make sure the list goes first and then
the dictionary keys. """
tdump = TextDumper(fname)
for item in obj:
tdump.dump(*item)
for key in keys:
tdump.dump(keys[key], key)
tdump.close()
[docs]def to_text(*obj, **keys):
"""Utility function to dump objects to a string. You may
do it in a list form:
to_text((val1, "var1"), (val2, "var2"))
or dictionary form:
to_text(var1=val1, var2=val2)
or a combination of both. Make sure the list goes first and then
the dictionary keys. """
tdump = TextDumper()
for item in obj:
tdump.dump(*item)
for key in keys:
tdump.dump(keys[key], key)
return tdump.close()
[docs]def array(obj, row_major=0):
"""Wrapper around numpy.ndarray. It gives you the option of
specifying the order of the contents. """
if not isinstance(obj, np.ndarray):
obj = np.array(obj)
if row_major == 0:
if obj.flags.f_contiguous:
return obj
else:
dim = list(obj.shape)
return obj.flatten(order='F').reshape(dim, order='F')
else:
if obj.flags.c_contiguous:
return obj
else:
dim = list(obj.shape)
return obj.flatten(order='C').reshape(dim, order='C')