
water.rapids.ASTStrList Maven / Gradle / Ivy
package water.rapids;
import water.DKV;
import water.H2O;
import water.fvec.Frame;
import water.fvec.Vec;
import water.util.VecUtils;
import java.util.ArrayList;
import java.util.Arrays;
/** A collection of Strings only. This is a syntatic form only, and never
* executes and never gets on the execution stack.
*/
public class ASTStrList extends ASTParameter {
public String[] _strs;
ASTStrList( Exec e ) {
ArrayList strs = new ArrayList<>();
while( true ) {
char c = e.skipWS();
if( c==']' ) break;
if( e.isQuote(c) ) strs.add(e.match(c));
else throw new IllegalArgumentException("Expecting the start of a string");
}
e.xpeek(']');
_strs = strs.toArray(new String[strs.size()]);
}
// Strange count of args, due to custom parsing
@Override int nargs() { return -1; }
// This is a special syntatic form; the number-list never executes and hits
// the execution stack
@Override public Val exec(Env env) { throw H2O.fail(); }
@Override public String str() { return Arrays.toString(_strs); }
// Select columns by number or String.
@Override int[] columns( String[] names ) {
int[] idxs = new int[_strs.length];
for( int i=0; i < _strs.length; i++ ) {
int idx = idxs[i] = water.util.ArrayUtils.find(names,_strs[i]);
if( idx == -1 ) throw new IllegalArgumentException("Column "+_strs[i]+" not found");
}
return idxs;
}
}
/** Assign column names */
class ASTColNames extends ASTPrim {
@Override public String[] args() { return new String[]{"ary", "cols", "names"}; }
@Override int nargs() { return 1+3; } // (colnames frame [#cols] ["names"])
@Override public String str() { return "colnames="; }
@Override
public Val apply(Env env, Env.StackHelp stk, AST asts[]) {
Frame fr = stk.track(asts[1].exec(env)).getFrame();
if( asts[2] instanceof ASTNumList ) {
if( !(asts[3] instanceof ASTStrList) )
throw new IllegalArgumentException("Column naming requires a string-list, but found a "+asts[3].getClass());
ASTNumList cols = ((ASTNumList)asts[2]);
ASTStrList nams = ((ASTStrList)asts[3]);
int d[] = cols.expand4();
if( d.length != nams._strs.length )
throw new IllegalArgumentException("Must have the same number of column choices as names");
for( int i=0; i
© 2015 - 2025 Weber Informatics LLC | Privacy Policy