/**
  * A FeatureGenerator equals another FeatureGenerator if its class is equal and its arguments are
  * equal and its function names are equal.
  */
 @Override
 public boolean equals(Object o) {
   if (o == null) // necessary here because otherwise the next line will throw a NPE
   return false;
   if (!this.getClass().equals(o.getClass())) return false;
   FeatureGenerator fg = (FeatureGenerator) o;
   if (!this.getFunction().equals(fg.getFunction())) return false;
   if (this.arguments.length != fg.arguments.length) return false;
   for (int i = 0; i < arguments.length; i++) {
     if (!this.arguments[i].equals(fg.arguments[i])) return false;
   }
   return true;
 }