def atomic_not(e: Atomic): if e.type.name == 'character': raise errors.InvalidArgType() if e.is_inf: ret = Atomic(False, types.LogicalType()) return ret elif e.is_na or e.is_nan: return Atomic(None, e.type, is_na=True) ret = Atomic(not bool(e.value), types.LogicalType()) return ret
def compute(self, params: List[Param], env: Environment): args = self.arrange_args(params) e1: Param = args['x'] if e1.value.get_type().name not in ['double', 'logical', 'integer']: raise errors.InvalidArgType() res = [] for item in e1.value.items: res.append(atomic_not(item.value)) res = [VectorItem(None, el) for el in res] ret = VectorObj(res) return ret
def compute(self, env: Environment): e1 = env.find_object('x') if e1.get_type().name not in ['double', 'logical', 'integer']: raise errors.InvalidArgType() res = [] if isinstance(e1, VectorObj): if len(e1.items) == 0: return VectorObj([], type(e1.get_type())()) for item in e1.items: res.append(atomic_not(item[1])) else: res.append(atomic_not(e1)) res = [VectorItem(None, el) for el in res] ret = VectorObj.create(res) return ret