package water.rapids.ast.prims.reducers;
import water.fvec.Vec;
import water.rapids.Env;
import water.rapids.Val;
import water.rapids.vals.ValNum;
import water.rapids.ast.AstPrimitive;
import water.rapids.ast.AstRoot;
/**
* Bulk AND operation on a scalar or numeric column; NAs count as true. Returns 0 or 1.
*/
public class AstAll extends AstPrimitive {
@Override
public String[] args() {
return new String[]{"ary"};
}
@Override
public String str() {
return "all";
}
@Override
public int nargs() {
return 1 + 1;
}
@Override
public ValNum apply(Env env, Env.StackHelp stk, AstRoot asts[]) {
Val val = stk.track(asts[1].exec(env));
if (val.isNum()) return new ValNum(val.getNum() == 0 ? 0 : 1);
for (Vec vec : val.getFrame().vecs())
if (vec.nzCnt() + vec.naCnt() < vec.length())
return new ValNum(0); // Some zeros in there somewhere
return new ValNum(1);
}
}