def _make_nested_list(self, gen): """Makes nested list from generator for creating numpy.array""" res = [] for ele in gen: if ele is None: res.append(None) elif not is_string_like(ele) and is_generator_like(ele): # Nested generator res.append(self._make_nested_list(ele)) else: res.append(ele) return res
def _eval_cell(self, key): """Evaluates one cell""" # Set up environment for evaluation env = globals().copy() env.update( {'X':key[0], 'Y':key[1], 'Z':key[2], 'R':key[0], 'C':key[1], 'T':key[2], 'S':self } ) code = self(key) # If cell is not present return None if code is None: return elif is_generator_like(code): # We have a generator object return numpy.array(self._make_nested_list(code), dtype="O") # If only 1 term in front of the "=" --> global split_exp = code.split("=") if self._has_assignment(split_exp): glob_var = split_exp[0].strip() expression = "=".join(split_exp[1:]) else: glob_var = None expression = code try: result = eval(expression, env, {}) except AttributeError, err: # Attribute Error includes RunTimeError result = err