Open
Description
Here is some preliminary code:
from larray.util.misc import unique_list
def align(*sessions, join='outer', fill_value=nan):
# TODO: support n sessions
assert len(sessions) == 2
if not all(isinstance(s, Session) for s in sessions):
raise TypeError("Session.align only supports aligning with other Session objects")
seen = set()
all_keys = []
for s in sessions:
unique_list(s.keys(), all_keys, seen)
res1, res2 = [], []
for name in all_keys:
arrays = [s.get(name, np.nan) for s in sessions]
arrays = [aslarray(a) for a in arrays]
# rename anonymous axes because those are not supported by align()
arrays = [array.rename({axis_num: axis.name if axis.name is not None else 'axis{}'.format(axis_num)
for axis_num, axis in enumerate(array.axes)})
for array in arrays]
assert len(arrays) == 2
arr1, arr2 = arrays
try:
# TODO: align should support more than one "other" array
aligned1, aligned2 = arr1.align(arr2, join=join, fill_value=fill_value)
except Exception:
aligned1, aligned2 = np.nan, np.nan
res1.append((name, aligned1))
res2.append((name, aligned2))
return Session(res1), Session(res2)
session1, session2 = align(session1, session2)