Source code for mindpype.kernels.kernel_utils

from ..core import MPEnums
import numpy as np

[docs] def extract_nested_data(mp_obj): """ Recursively extract Tensor data within a MindPype array or array-of-arrays Parameters ---------- mp_obj : Array or array-of-arrays The input to be extracted from Returns ------- X : np array The extracted data as a numpy array """ if (mp_obj._mp_type != MPEnums.ARRAY and mp_obj._mp_type != MPEnums.CIRCLE_BUFFER): return np.array(()) X = np.array(()) if mp_obj._mp_type == MPEnums.ARRAY: num_elements = mp_obj.capacity else: num_elements = mp_obj.num_elements for i in range(num_elements): if mp_obj._mp_type == MPEnums.ARRAY: e = mp_obj.get_element(i) else: e = mp_obj.get_queued_element(i) if e._mp_type == MPEnums.TENSOR or e._mp_type == MPEnums.SCALAR: if e._mp_type == MPEnums.SCALAR: elem_data = np.asarray((e.data,)) else: elem_data = e.data elem_data = np.expand_dims(elem_data,0) # add dimension so we can append below else: elem_data = extract_nested_data(e) if X.shape == (0,): X = elem_data else: X = np.append(X,elem_data,axis=0) return X
[docs] def extract_init_inputs(init_in): """ Extracts the initialization parameters from a potentially nested data structure Parameters ---------- init_in : Object The input to be extracted from Returns ------- init_input_data : np array The initialization inputs as a numpy array """ if init_in.mp_type == MPEnums.TENSOR: init_input_data = init_in.data else: try: # extract the data from a potentially nested array of tensors init_input_data = extract_nested_data(init_in) except Exception as e: e.add_note("Unable to extract initialization data from input") raise return init_input_data