use of org.kie.pmml.commons.transformations.KiePMMLDefineFunction in project drools by kiegroup.
the class KiePMMLDefineFunctionInstanceFactoryTest method getKiePMMLDefineFunction.
@Test
public void getKiePMMLDefineFunction() {
final String functionName = "functionName";
final DefineFunction toConvert = getDefineFunction(functionName);
KiePMMLDefineFunction retrieved = KiePMMLDefineFunctionInstanceFactory.getKiePMMLDefineFunction(toConvert);
commonVerifyKiePMMLDefineFunction(retrieved, toConvert);
}
use of org.kie.pmml.commons.transformations.KiePMMLDefineFunction in project drools by kiegroup.
the class PostProcessTest method populateTransformedOutputFieldWithApplyDefineFunctionFromApply.
@Test
public void populateTransformedOutputFieldWithApplyDefineFunctionFromApply() {
// <DefineFunction name="CUSTOM_FUNCTION" optype="continuous" dataType="double">
// <ParameterField name="PARAM_1" />
// <Apply function="/">
// <FieldRef>PARAM_1</FieldRef>
// <Constant>5.0</Constant>
// </Apply>
// </DefineFunction>
final KiePMMLParameterField kiePMMLParameterField = KiePMMLParameterField.builder(PARAM_1, Collections.emptyList()).build();
final KiePMMLFieldRef kiePMMLFieldRef1 = new KiePMMLFieldRef(PARAM_1, Collections.emptyList(), null);
final KiePMMLConstant kiePMMLConstant2 = new KiePMMLConstant(PARAM_2, Collections.emptyList(), value2, null);
final KiePMMLApply kiePMMLApplyRef = KiePMMLApply.builder("NAMEREF", Collections.emptyList(), "/").withKiePMMLExpressions(Arrays.asList(kiePMMLFieldRef1, kiePMMLConstant2)).build();
final KiePMMLDefineFunction defineFunction = new KiePMMLDefineFunction(CUSTOM_FUNCTION, Collections.emptyList(), DATA_TYPE.DOUBLE, OP_TYPE.CONTINUOUS, Collections.singletonList(kiePMMLParameterField), kiePMMLApplyRef);
// <Apply function="CUSTOM_FUNCTION">
// <Constant>100.0</Constant>
// </Apply>
final KiePMMLConstant kiePMMLConstant3 = new KiePMMLConstant(PARAM_2, Collections.emptyList(), value1, null);
KiePMMLApply kiePMMLApply = KiePMMLApply.builder("NAME", Collections.emptyList(), CUSTOM_FUNCTION).withKiePMMLExpressions(Collections.singletonList(kiePMMLConstant3)).build();
KiePMMLOutputField outputField = KiePMMLOutputField.builder(OUTPUT_NAME, Collections.emptyList()).withResultFeature(RESULT_FEATURE.TRANSFORMED_VALUE).withKiePMMLExpression(kiePMMLApply).build();
// From TransformationDictionary
KiePMMLTransformationDictionary transformationDictionary = KiePMMLTransformationDictionary.builder("transformationDictionary", Collections.emptyList()).withDefineFunctions(Collections.singletonList(defineFunction)).build();
KiePMMLTestingModel kiePMMLModel = testingModelBuilder(outputField).withKiePMMLTransformationDictionary(transformationDictionary).build();
ProcessingDTO processingDTO = buildProcessingDTOWithEmptyNameValues(kiePMMLModel);
PMML4Result toUpdate = new PMML4Result();
PostProcess.populateOutputFields(toUpdate, processingDTO);
assertFalse(toUpdate.getResultVariables().isEmpty());
assertTrue(toUpdate.getResultVariables().containsKey(OUTPUT_NAME));
assertEquals(value1 / value2, toUpdate.getResultVariables().get(OUTPUT_NAME));
}
use of org.kie.pmml.commons.transformations.KiePMMLDefineFunction in project drools by kiegroup.
the class InstanceFactoriesTestCommon method commonVerifyKiePMMLDefineFunction.
static void commonVerifyKiePMMLDefineFunction(KiePMMLDefineFunction toVerify, DefineFunction source) {
assertNotNull(toVerify);
assertEquals(source.getName(), toVerify.getName());
DATA_TYPE expectedDataType = DATA_TYPE.byName(source.getDataType().value());
assertEquals(expectedDataType, toVerify.getDataType());
OP_TYPE expectedOpType = OP_TYPE.byName(source.getOpType().value());
assertEquals(expectedOpType, toVerify.getOpType());
commonVerifyKiePMMLExpression(toVerify.getKiePMMLExpression(), source.getExpression());
List<ParameterField> sourcesParameterFields = source.getParameterFields();
List<KiePMMLParameterField> toVerifyList = toVerify.getParameterFields();
assertEquals(sourcesParameterFields.size(), toVerifyList.size());
sourcesParameterFields.forEach(paramSource -> {
Optional<KiePMMLParameterField> parameterToVerify = toVerifyList.stream().filter(param -> param.getName().equals(paramSource.getName().getValue())).findFirst();
assertTrue(parameterToVerify.isPresent());
commonVerifyKiePMMLParameterField(parameterToVerify.get(), paramSource);
});
}
use of org.kie.pmml.commons.transformations.KiePMMLDefineFunction in project drools by kiegroup.
the class KiePMMLApply method evaluate.
@Override
public Object evaluate(final ProcessingDTO processingDTO) {
if (kiePMMLExpressions == null) {
return null;
}
// <- Insertion order matter
List<Object> expressionValues = new ArrayList<>();
MiningField referredByFieldRef = null;
for (KiePMMLExpression kiePMMLExpression : kiePMMLExpressions) {
expressionValues.add(kiePMMLExpression.evaluate(processingDTO));
if (kiePMMLExpression instanceof KiePMMLFieldRef && BUILTIN_FUNCTIONS.isBUILTIN_FUNCTIONS_VALIDATION(function)) {
String referredField = ((KiePMMLFieldRef) kiePMMLExpression).getName();
referredByFieldRef = processingDTO.getMiningFields().stream().filter(miningField -> referredField.equals(miningField.getName())).findFirst().orElseThrow(() -> new IllegalArgumentException(String.format("Missing required field %s", referredField)));
}
}
if (BUILTIN_FUNCTIONS.isBUILTIN_FUNCTIONS(function)) {
BUILTIN_FUNCTIONS builtinFunction = BUILTIN_FUNCTIONS.byName(function);
return builtinFunction.getValue(expressionValues.toArray(new Object[0]), referredByFieldRef);
} else {
final KiePMMLDefineFunction definedFunction = processingDTO.getDefineFunctions().stream().filter(defineFunction -> defineFunction.getName().equals(function)).findFirst().orElseThrow(() -> new IllegalArgumentException("Unknown function " + function));
return definedFunction.evaluate(processingDTO, expressionValues);
}
}
use of org.kie.pmml.commons.transformations.KiePMMLDefineFunction in project drools by kiegroup.
the class PostProcessTest method populateTransformedOutputFieldWithApplyDefineFunctionFromConstant.
@Test
public void populateTransformedOutputFieldWithApplyDefineFunctionFromConstant() {
// <DefineFunction name="CUSTOM_FUNCTION" optype="continuous" dataType="double">
// <Constant>100.0</Constant>
// </DefineFunction>
final KiePMMLConstant kiePMMLConstant1 = new KiePMMLConstant(PARAM_1, Collections.emptyList(), value1, null);
final KiePMMLDefineFunction defineFunction = new KiePMMLDefineFunction(CUSTOM_FUNCTION, Collections.emptyList(), DATA_TYPE.DOUBLE, OP_TYPE.CONTINUOUS, Collections.emptyList(), kiePMMLConstant1);
// <Apply function="CUSTOM_FUNCTION">
// <FieldRef>CUSTOM_FIELD</FieldRef>
// <Constant>5.0</Constant>
// </Apply>
final KiePMMLFieldRef kiePMMLFieldRef = new KiePMMLFieldRef(CUSTOM_FIELD, Collections.emptyList(), null);
final KiePMMLConstant kiePMMLConstant2 = new KiePMMLConstant(PARAM_2, Collections.emptyList(), value2, null);
KiePMMLApply kiePMMLApply = KiePMMLApply.builder("NAME", Collections.emptyList(), CUSTOM_FUNCTION).withKiePMMLExpressions(Arrays.asList(kiePMMLFieldRef, kiePMMLConstant2)).build();
KiePMMLOutputField outputField = KiePMMLOutputField.builder(OUTPUT_NAME, Collections.emptyList()).withResultFeature(RESULT_FEATURE.TRANSFORMED_VALUE).withKiePMMLExpression(kiePMMLApply).build();
// From TransformationDictionary
KiePMMLTransformationDictionary transformationDictionary = KiePMMLTransformationDictionary.builder("transformationDictionary", Collections.emptyList()).withDefineFunctions(Collections.singletonList(defineFunction)).build();
KiePMMLTestingModel kiePMMLModel = testingModelBuilder(outputField).withKiePMMLTransformationDictionary(transformationDictionary).build();
ProcessingDTO processingDTO = buildProcessingDTOWithEmptyNameValues(kiePMMLModel);
PMML4Result toUpdate = new PMML4Result();
PostProcess.populateOutputFields(toUpdate, processingDTO);
assertFalse(toUpdate.getResultVariables().isEmpty());
assertTrue(toUpdate.getResultVariables().containsKey(OUTPUT_NAME));
assertEquals(value1, toUpdate.getResultVariables().get(OUTPUT_NAME));
}
Aggregations