docs: def evaluate(self,n, features, stack_float, stack_bool,labels=None):
          """evaluate node in program"""
          np.seterr(all='ignore')
          if len(stack_float) >= n.arity['f'] and len(stack_bool) >= n.arity['b']:
              if n.out_type == 'f':
                  stack_float.append(
                      self.safe(self.eval_dict[n.name](n,features,stack_float,
                                                       stack_bool,labels)))
                  if (np.isnan(stack_float[-1]).any() or
                      np.isinf(stack_float[-1]).any()):
                      print("problem operator:",n)
              else:
                  stack_bool.append(self.safe(self.eval_dict[n.name](n,features,
                                                                     stack_float,
                                                                     stack_bool,
                                                                     labels)))
                  if np.isnan(stack_bool[-1]).any() or np.isinf(stack_bool[-1]).any():
                      print("problem operator:",n)