use of org.kie.pmml.commons.model.ProcessingDTO in project drools by kiegroup.
the class PostProcessTest method populateTransformedOutputFieldWithFieldRef.
@Test
public void populateTransformedOutputFieldWithFieldRef() {
final String mapMissingTo = "mapMissingTo";
final String variableName = "variableName";
final Object variableValue = 543.65434;
KiePMMLFieldRef kiePMMLFieldRef = new KiePMMLFieldRef(variableName, Collections.emptyList(), mapMissingTo);
KiePMMLOutputField outputField = KiePMMLOutputField.builder(OUTPUT_NAME, Collections.emptyList()).withResultFeature(RESULT_FEATURE.TRANSFORMED_VALUE).withKiePMMLExpression(kiePMMLFieldRef).build();
KiePMMLTestingModel kiePMMLModel = testingModelBuilder(outputField).build();
ProcessingDTO processingDTO = buildProcessingDTOWithNameValues(kiePMMLModel, new KiePMMLNameValue(variableName, variableValue));
PMML4Result toUpdate = new PMML4Result();
PostProcess.populateOutputFields(toUpdate, processingDTO);
assertFalse(toUpdate.getResultVariables().isEmpty());
assertTrue(toUpdate.getResultVariables().containsKey(OUTPUT_NAME));
assertEquals(variableValue, toUpdate.getResultVariables().get(OUTPUT_NAME));
}
use of org.kie.pmml.commons.model.ProcessingDTO in project drools by kiegroup.
the class PostProcessTest method populatePredictedOutputField2.
@Test
public void populatePredictedOutputField2() {
KiePMMLNameValue kiePMMLNameValue = new KiePMMLNameValue("targetField", 54346.32454);
KiePMMLOutputField outputField = KiePMMLOutputField.builder(OUTPUT_NAME, Collections.emptyList()).withResultFeature(RESULT_FEATURE.PREDICTED_VALUE).withTargetField(kiePMMLNameValue.getName()).build();
KiePMMLTestingModel kiePMMLModel = testingModelBuilder(outputField).build();
ProcessingDTO processingDTO = buildProcessingDTOWithNameValues(kiePMMLModel, kiePMMLNameValue);
PMML4Result toUpdate = new PMML4Result();
PostProcess.populateOutputFields(toUpdate, processingDTO);
assertFalse(toUpdate.getResultVariables().isEmpty());
assertTrue(toUpdate.getResultVariables().containsKey(OUTPUT_NAME));
assertEquals(kiePMMLNameValue.getValue(), toUpdate.getResultVariables().get(OUTPUT_NAME));
}
use of org.kie.pmml.commons.model.ProcessingDTO in project drools by kiegroup.
the class PostProcessTest method populateTransformedOutputFieldWithApplyWithConstants.
@Test
public void populateTransformedOutputFieldWithApplyWithConstants() {
// <Apply function="/">
// <Constant>100.0</Constant>
// <Constant>5.0</Constant>
// </Apply>
KiePMMLConstant kiePMMLConstant1 = new KiePMMLConstant(PARAM_1, Collections.emptyList(), value1, null);
KiePMMLConstant kiePMMLConstant2 = new KiePMMLConstant(PARAM_2, Collections.emptyList(), value2, null);
KiePMMLApply kiePMMLApply = KiePMMLApply.builder("NAME", Collections.emptyList(), "/").withKiePMMLExpressions(Arrays.asList(kiePMMLConstant1, kiePMMLConstant2)).build();
KiePMMLOutputField outputField = KiePMMLOutputField.builder(OUTPUT_NAME, Collections.emptyList()).withResultFeature(RESULT_FEATURE.TRANSFORMED_VALUE).withKiePMMLExpression(kiePMMLApply).build();
KiePMMLTestingModel kiePMMLModel = testingModelBuilder(outputField).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.model.ProcessingDTO in project drools by kiegroup.
the class PostProcessTest method populateTransformedOutputFieldWithApplyDerivedFieldFromApply.
@Test
public void populateTransformedOutputFieldWithApplyDerivedFieldFromApply() {
// <DerivedField name="CUSTOM_FIELD" optype="continuous" dataType="double">
// <Apply function="+">
// <Constant>64.0</Constant>
// <Constant>36.0</Constant>
// </Apply>
// </DerivedField>
final KiePMMLConstant kiePMMLConstant1 = new KiePMMLConstant(PARAM_2, Collections.emptyList(), 64.0, null);
final KiePMMLConstant kiePMMLConstant2 = new KiePMMLConstant(PARAM_2, Collections.emptyList(), 36, null);
final KiePMMLApply kiePMMLApplyRef = KiePMMLApply.builder("NAMEREF", Collections.emptyList(), "+").withKiePMMLExpressions(Arrays.asList(kiePMMLConstant1, kiePMMLConstant2)).build();
final KiePMMLDerivedField derivedField = KiePMMLDerivedField.builder(CUSTOM_FIELD, Collections.emptyList(), DATA_TYPE.DOUBLE, OP_TYPE.CONTINUOUS, kiePMMLApplyRef).build();
// <Apply function="/">
// <FieldRef>CUSTOM_FIELD</FieldRef>
// <Constant>5.0</Constant>
// </Apply>
final KiePMMLFieldRef kiePMMLFieldRef = new KiePMMLFieldRef(CUSTOM_FIELD, Collections.emptyList(), null);
final KiePMMLConstant kiePMMLConstant3 = new KiePMMLConstant(PARAM_2, Collections.emptyList(), value2, null);
KiePMMLApply kiePMMLApply = KiePMMLApply.builder("NAME", Collections.emptyList(), "/").withKiePMMLExpressions(Arrays.asList(kiePMMLFieldRef, 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()).withDerivedFields(Collections.singletonList(derivedField)).build();
KiePMMLTestingModel kiePMMLModel1 = testingModelBuilder(outputField).withKiePMMLTransformationDictionary(transformationDictionary).build();
ProcessingDTO processingDTO1 = buildProcessingDTOWithEmptyNameValues(kiePMMLModel1);
PMML4Result toUpdate1 = new PMML4Result();
PostProcess.populateOutputFields(toUpdate1, processingDTO1);
assertFalse(toUpdate1.getResultVariables().isEmpty());
assertTrue(toUpdate1.getResultVariables().containsKey(OUTPUT_NAME));
assertEquals(value1 / value2, toUpdate1.getResultVariables().get(OUTPUT_NAME));
// From LocalTransformations
KiePMMLLocalTransformations localTransformations = KiePMMLLocalTransformations.builder("localTransformations", Collections.emptyList()).withDerivedFields(Collections.singletonList(derivedField)).build();
KiePMMLTestingModel kiePMMLModel2 = testingModelBuilder(outputField).withKiePMMLLocalTransformations(localTransformations).build();
ProcessingDTO processingDTO2 = buildProcessingDTOWithEmptyNameValues(kiePMMLModel2);
PMML4Result toUpdate2 = new PMML4Result();
PostProcess.populateOutputFields(toUpdate2, processingDTO2);
assertFalse(toUpdate2.getResultVariables().isEmpty());
assertTrue(toUpdate2.getResultVariables().containsKey(OUTPUT_NAME));
assertEquals(value1 / value2, toUpdate2.getResultVariables().get(OUTPUT_NAME));
}
use of org.kie.pmml.commons.model.ProcessingDTO in project drools by kiegroup.
the class PMMLRuntimeInternalImpl method evaluate.
@SuppressWarnings({ "unchecked", "rawtypes" })
protected PMML4Result evaluate(final KiePMMLModel model, final PMMLContext context) {
if (logger.isDebugEnabled()) {
logger.debug("evaluate {} {}", model, context);
}
pmmlListeners.forEach(context::addPMMLListener);
addStep(() -> getStep(START, model, context.getRequestData()), context);
final ProcessingDTO processingDTO = preProcess(model, context);
addStep(() -> getStep(PRE_EVALUATION, model, context.getRequestData()), context);
PMMLModelEvaluator executor = getFromPMMLModelType(model.getPmmlMODEL()).orElseThrow(() -> new KiePMMLException(String.format("PMMLModelEvaluator not found for model %s", model.getPmmlMODEL())));
PMML4Result toReturn = executor.evaluate(knowledgeBase, model, context);
addStep(() -> getStep(POST_EVALUATION, model, context.getRequestData()), context);
postProcess(toReturn, model, context, processingDTO);
addStep(() -> getStep(END, model, context.getRequestData()), context);
return toReturn;
}
Aggregations