static public FieldValue createOrCast(TypeInfo typeInfo, Object value){ if(value instanceof FieldValue){ FieldValue fieldValue = (FieldValue)value; return fieldValue.cast(typeInfo); } else { return FieldValueUtil.create(typeInfo, value); } }
static public FieldValue createOrCast(DataType dataType, OpType opType, Object value){ if(value instanceof FieldValue){ FieldValue fieldValue = (FieldValue)value; return fieldValue.cast(dataType, opType); } else { return FieldValueUtil.create(dataType, opType, value); } }
static public <E extends PMMLObject & HasType<E> & HasExpression<E>> FieldValue evaluateTypedExpressionContainer(E hasTypedExpression, EvaluationContext context){ FieldValue value = evaluateExpressionContainer(hasTypedExpression, context); if(Objects.equals(FieldValues.MISSING_VALUE, value)){ return FieldValues.MISSING_VALUE; } return value.cast(hasTypedExpression.getDataType(), hasTypedExpression.getOpType()); }
private FieldValue discretize(DerivedField derivedField, FieldValue value){ Expression expression = ExpressionUtil.ensureExpression(derivedField); if(expression instanceof Discretize){ Discretize discretize = (Discretize)expression; value = DiscretizationUtil.discretize(discretize, value); if(Objects.equals(FieldValues.MISSING_VALUE, value)){ return FieldValues.MISSING_VALUE; } return value.cast(derivedField.getDataType(), derivedField.getOpType()); } else { throw new MisplacedElementException(expression); } }
static public FieldValue evaluate(DefineFunction defineFunction, List<FieldValue> values, EvaluationContext context){ List<ParameterField> parameterFields = defineFunction.getParameterFields(); if(parameterFields.size() != values.size()){ throw new EvaluationException("Function " + PMMLException.formatKey(defineFunction.getName()) + " expects " + parameterFields.size() + " arguments, got " + values.size() + " arguments"); } DefineFunctionEvaluationContext functionContext = new DefineFunctionEvaluationContext(defineFunction, context); for(int i = 0; i < parameterFields.size(); i++){ ParameterField parameterField = parameterFields.get(i); FieldValue value = values.get(i); FieldName name = parameterField.getName(); if(name == null){ throw new MissingAttributeException(parameterField, PMMLAttributes.PARAMETERFIELD_NAME); } value = value.cast(parameterField.getDataType(), parameterField.getOpType()); functionContext.declare(name, value); } return ExpressionUtil.evaluateTypedExpressionContainer(defineFunction, functionContext); }