
water.rapids.ASTUniOp Maven / Gradle / Ivy
package water.rapids;
import hex.DMatrix;
import org.apache.commons.math3.special.Gamma;
import org.apache.commons.math3.util.FastMath;
import water.*;
import water.fvec.*;
import water.util.MathUtils;
import water.util.VecUtils;
import java.util.Arrays;
import java.util.Random;
import static water.util.RandomUtils.getRNG;
/**
* Subclasses auto-widen between scalars and Frames, and have exactly one argument
*/
public abstract class ASTUniOp extends ASTPrim {
@Override public String[] args() { return new String[]{"ary"}; }
@Override int nargs() { return 1+1; }
@Override
public Val apply(Env env, Env.StackHelp stk, AST asts[]) {
Val val = stk.track(asts[1].exec(env));
switch( val.type() ) {
case Val.NUM: return new ValNum(op(val.getNum()));
case Val.FRM:
Frame fr = val.getFrame();
return new ValFrame(new MRTask() {
@Override public void map( Chunk cs[], NewChunk ncs[] ) {
for( int col=0; col=0?Math.floor(d):Math.ceil(d);}}
class ASTCos extends ASTUniOp { public String str(){ return "cos"; } double op(double d) { return Math.cos(d);}}
class ASTSin extends ASTUniOp { public String str(){ return "sin"; } double op(double d) { return Math.sin(d);}}
class ASTTan extends ASTUniOp { public String str(){ return "tan"; } double op(double d) { return Math.tan(d);}}
class ASTACos extends ASTUniOp { public String str(){ return "acos"; } double op(double d) { return Math.acos(d);}}
class ASTASin extends ASTUniOp { public String str(){ return "asin"; } double op(double d) { return Math.asin(d);}}
class ASTATan extends ASTUniOp { public String str(){ return "atan"; } double op(double d) { return Math.atan(d);}}
class ASTCosh extends ASTUniOp { public String str(){ return "cosh"; } double op(double d) { return Math.cosh(d);}}
class ASTSinh extends ASTUniOp { public String str(){ return "sinh"; } double op(double d) { return Math.sinh(d);}}
class ASTTanh extends ASTUniOp { public String str(){ return "tanh"; } double op(double d) { return Math.tanh(d);}}
class ASTACosh extends ASTUniOp { public String str(){ return "acosh"; } double op(double d) { return FastMath.acosh(d);}}
class ASTASinh extends ASTUniOp { public String str(){ return "asinh"; } double op(double d) { return FastMath.asinh(d);}}
class ASTATanh extends ASTUniOp { public String str(){ return "atanh"; } double op(double d) { return FastMath.atanh(d);}}
class ASTCosPi extends ASTUniOp { public String str(){ return "cospi"; } double op(double d) { return Math.cos(Math.PI*d);}}
class ASTSinPi extends ASTUniOp { public String str(){ return "sinpi"; } double op(double d) { return Math.sin(Math.PI*d);}}
class ASTTanPi extends ASTUniOp { public String str(){ return "tanpi"; } double op(double d) { return Math.tan(Math.PI*d);}}
class ASTAbs extends ASTUniOp { public String str(){ return "abs"; } double op(double d) { return Math.abs(d);}}
class ASTSgn extends ASTUniOp { public String str(){ return "sign" ; } double op(double d) { return Math.signum(d);}}
class ASTSqrt extends ASTUniOp { public String str(){ return "sqrt"; } double op(double d) { return Math.sqrt(d);}}
class ASTLog extends ASTUniOp { public String str(){ return "log"; } double op(double d) { return Math.log(d);}}
class ASTLog10 extends ASTUniOp { public String str(){ return "log10"; } double op(double d) { return Math.log10(d);}}
class ASTLog2 extends ASTUniOp { public String str(){ return "log2"; } double op(double d) { return Math.log(d)/Math.log(2);}}
class ASTLog1p extends ASTUniOp { public String str(){ return "log1p"; } double op(double d) { return Math.log1p(d);}}
class ASTExp extends ASTUniOp { public String str(){ return "exp"; } double op(double d) { return Math.exp(d);}}
class ASTExpm1 extends ASTUniOp { public String str(){ return "expm1"; } double op(double d) { return Math.expm1(d);}}
class ASTGamma extends ASTUniOp { public String str(){ return "gamma"; } double op(double d) { return Gamma.gamma(d);}}
class ASTLGamma extends ASTUniOp { public String str(){ return "lgamma"; } double op(double d) { return Gamma.logGamma(d);}}
class ASTDiGamma extends ASTUniOp { public String str(){ return "digamma"; } double op(double d) { return Double.isNaN(d)?Double.NaN:Gamma.digamma(d);}}
class ASTTriGamma extends ASTUniOp { public String str(){ return "trigamma"; } double op(double d) { return Double.isNaN(d)?Double.NaN:Gamma.trigamma(d);}}
// Split out in it's own function, instead of Yet Another UniOp, because it
// needs a "is.NA" check instead of just using the Double.isNaN hack... because
// it works on UUID and String columns.
class ASTIsNA extends ASTPrim {
@Override public String[] args() { return new String[]{"ary"}; }
@Override
public String str() { return "is.na"; }
@Override int nargs() { return 1+1; }
@Override
public Val apply(Env env, Env.StackHelp stk, AST asts[]) {
Val val = stk.track(asts[1].exec(env));
switch( val.type() ) {
case Val.NUM: return new ValNum(op(val.getNum()));
case Val.FRM:
Frame fr = val.getFrame();
return new ValFrame(new MRTask() {
@Override public void map( Chunk cs[], NewChunk ncs[] ) {
for( int col=0; col train, 1-> test
int start = (int)y.start();
for(int classLabel=0; classLabel=0 ? 1: nomatch; }
private static double in(double[] matches, double d, double nomatch) { return binarySearchDoublesUlp(matches, 0,matches.length,d) >=0 ? 1: nomatch; }
private static int binarySearchDoublesUlp(double[] a, int from, int to, double key) {
int lo = from;
int hi = to-1;
while( lo <= hi ) {
int mid = (lo + hi) >>> 1;
double midVal = a[mid];
if( MathUtils.equalsWithinOneSmallUlp(midVal, key) ) return mid;
if (midVal < key) lo = mid + 1;
else if (midVal > key) hi = mid - 1;
else {
long midBits = Double.doubleToLongBits(midVal);
long keyBits = Double.doubleToLongBits(key);
if (midBits == keyBits) return mid;
else if (midBits < keyBits) lo = mid + 1;
else hi = mid - 1;
}
}
return -(lo + 1); // key not found.
}
}
// Indices of which entries are not equal to 0
class ASTWhich extends ASTPrim {
@Override public String[] args() { return new String[]{"ary"}; }
@Override int nargs() { return 1+1; } // (which col)
@Override public String str() { return "which"; }
@Override
public ValFrame apply(Env env, Env.StackHelp stk, AST asts[]) {
Frame f = stk.track(asts[1].exec(env)).getFrame();
// The 1-row version
if( f.numRows()==1 && f.numCols() > 1) {
AppendableVec v = new AppendableVec(Vec.VectorGroup.VG_LEN1.addVec(),Vec.T_NUM);
NewChunk chunk = new NewChunk(v, 0);
for( int i=0; i 1 || !vec.isInt() )
throw new IllegalArgumentException("which requires a single integer column");
Frame f2 = new MRTask() {
@Override public void map(Chunk c, NewChunk nc) {
long start = c.start();
for(int i=0;i
© 2015 - 2025 Weber Informatics LLC | Privacy Policy