49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
#!/usr/bin/python
|
|
# -*- coding: utf-8 -*-
|
|
# \file %filename%.py
|
|
# \brief TODO
|
|
# \author Florent Guiotte <florent.guiotte@gmail.com>
|
|
# \version 0.1
|
|
# \date 27 août 2018
|
|
#
|
|
# TODO details
|
|
|
|
import numpy as np
|
|
from .Stack import Stack
|
|
|
|
class Stacker:
|
|
def __init__(self):
|
|
self.offset = 0
|
|
self.data_list = list()
|
|
self.metadata_list = list()
|
|
|
|
def auto_stack(self, data, old_stack, desc_str, symb_str):
|
|
if data.shape[-1] != (old_stack.end - old_stack.begin):
|
|
raise ValueError("Mismatch between data shape and stack length")
|
|
|
|
new_desc = list()
|
|
for d in old_stack.desc:
|
|
new_desc.append(d.copy())
|
|
new_desc[-1].append(desc_str)
|
|
|
|
new_symb = list()
|
|
for s in old_stack.symb:
|
|
new_symb.append([symb_str + '('])
|
|
new_symb[-1].extend(s.copy())
|
|
new_symb[-1].append(')')
|
|
|
|
self.stack(data, new_desc, new_symb)
|
|
|
|
def stack(self, data, desc, symb):
|
|
size_new = data.shape[-1]
|
|
stack_new = Stack(self.offset, size_new)
|
|
self.offset += size_new
|
|
stack_new.desc = desc
|
|
stack_new.symb = symb
|
|
self.data_list.append(data)
|
|
self.metadata_list.append(stack_new)
|
|
|
|
def pack(self):
|
|
return np.dstack(self.data_list), self.metadata_list
|
|
|