Search in sources :

Example 1 with ARRAY_TYPE

use of org.kie.pmml.api.enums.ARRAY_TYPE in project drools by kiegroup.

the class KiePMMLSimpleSetPredicateFactory method getSimpleSetPredicateVariableDeclaration.

static BlockStmt getSimpleSetPredicateVariableDeclaration(final String variableName, final SimpleSetPredicate simpleSetPredicate) {
    final MethodDeclaration methodDeclaration = SIMPLESET_PREDICATE_TEMPLATE.getMethodsByName(GETKIEPMMLSIMPLESETPREDICATE).get(0).clone();
    final BlockStmt simpleSetPredicateBody = methodDeclaration.getBody().orElseThrow(() -> new KiePMMLException(String.format(MISSING_BODY_TEMPLATE, methodDeclaration)));
    final VariableDeclarator variableDeclarator = getVariableDeclarator(simpleSetPredicateBody, SIMPLESET_PREDICATE).orElseThrow(() -> new KiePMMLException(String.format(MISSING_VARIABLE_IN_BODY, SIMPLESET_PREDICATE, simpleSetPredicateBody)));
    variableDeclarator.setName(variableName);
    final BlockStmt toReturn = new BlockStmt();
    final NodeList<Expression> arguments = new NodeList<>();
    List<Object> values = getObjectsFromArray(simpleSetPredicate.getArray());
    for (Object value : values) {
        arguments.add(getExpressionForObject(value));
    }
    final ARRAY_TYPE arrayType = ARRAY_TYPE.byName(simpleSetPredicate.getArray().getType().value());
    final NameExpr arrayTypeExpr = new NameExpr(ARRAY_TYPE.class.getName() + "." + arrayType.name());
    final IN_NOTIN inNotIn = IN_NOTIN.byName(simpleSetPredicate.getBooleanOperator().value());
    final NameExpr inNotInExpr = new NameExpr(IN_NOTIN.class.getName() + "." + inNotIn.name());
    final MethodCallExpr initializer = variableDeclarator.getInitializer().orElseThrow(() -> new KiePMMLException(String.format(MISSING_VARIABLE_INITIALIZER_TEMPLATE, SIMPLESET_PREDICATE, simpleSetPredicateBody))).asMethodCallExpr();
    final MethodCallExpr builder = getChainedMethodCallExprFrom("builder", initializer);
    builder.setArgument(0, new StringLiteralExpr(simpleSetPredicate.getField().getValue()));
    builder.setArgument(2, arrayTypeExpr);
    builder.setArgument(3, inNotInExpr);
    getChainedMethodCallExprFrom("asList", initializer).setArguments(arguments);
    simpleSetPredicateBody.getStatements().forEach(toReturn::addStatement);
    return toReturn;
}
Also used : MethodDeclaration(com.github.javaparser.ast.body.MethodDeclaration) BlockStmt(com.github.javaparser.ast.stmt.BlockStmt) NodeList(com.github.javaparser.ast.NodeList) ARRAY_TYPE(org.kie.pmml.api.enums.ARRAY_TYPE) NameExpr(com.github.javaparser.ast.expr.NameExpr) StringLiteralExpr(com.github.javaparser.ast.expr.StringLiteralExpr) CommonCodegenUtils.getVariableDeclarator(org.kie.pmml.compiler.commons.utils.CommonCodegenUtils.getVariableDeclarator) VariableDeclarator(com.github.javaparser.ast.body.VariableDeclarator) Expression(com.github.javaparser.ast.expr.Expression) IN_NOTIN(org.kie.pmml.api.enums.IN_NOTIN) KiePMMLException(org.kie.pmml.api.exceptions.KiePMMLException) CommonCodegenUtils.getExpressionForObject(org.kie.pmml.compiler.commons.utils.CommonCodegenUtils.getExpressionForObject) MethodCallExpr(com.github.javaparser.ast.expr.MethodCallExpr)

Example 2 with ARRAY_TYPE

use of org.kie.pmml.api.enums.ARRAY_TYPE in project drools by kiegroup.

the class KiePMMLCompoundPredicateTest method evaluateCompoundPredicateAnd.

@Test
public void evaluateCompoundPredicateAnd() {
    ARRAY_TYPE arrayType = ARRAY_TYPE.STRING;
    List<Object> stringValues = getObjects(arrayType, 4);
    KiePMMLSimpleSetPredicate kiePMMLSimpleSetPredicateString = getKiePMMLSimpleSetPredicate(SIMPLE_SET_PREDICATE_STRING_NAME, stringValues, arrayType, IN_NOTIN.IN);
    arrayType = ARRAY_TYPE.INT;
    List<Object> intValues = getObjects(arrayType, 4);
    KiePMMLSimpleSetPredicate kiePMMLSimpleSetPredicateInt = getKiePMMLSimpleSetPredicate(SIMPLE_SET_PREDICATE_INT_NAME, intValues, arrayType, IN_NOTIN.NOT_IN);
    KiePMMLCompoundPredicate kiePMMLCompoundPredicate = getKiePMMLCompoundPredicate(BOOLEAN_OPERATOR.AND, Arrays.asList(kiePMMLSimpleSetPredicateString, kiePMMLSimpleSetPredicateInt));
    Map<String, Object> inputData = new HashMap<>();
    inputData.put(SIMPLE_SET_PREDICATE_STRING_NAME, stringValues.get(0));
    inputData.put(SIMPLE_SET_PREDICATE_INT_NAME, intValues.get(0));
    assertFalse(kiePMMLCompoundPredicate.evaluate(inputData));
    inputData = new HashMap<>();
    inputData.put(SIMPLE_SET_PREDICATE_STRING_NAME, "NOT");
    inputData.put(SIMPLE_SET_PREDICATE_INT_NAME, "234");
    assertFalse(kiePMMLCompoundPredicate.evaluate(inputData));
    inputData = new HashMap<>();
    inputData.put(SIMPLE_SET_PREDICATE_STRING_NAME, stringValues.get(0));
    inputData.put(SIMPLE_SET_PREDICATE_INT_NAME, "234");
    assertTrue(kiePMMLCompoundPredicate.evaluate(inputData));
}
Also used : HashMap(java.util.HashMap) ARRAY_TYPE(org.kie.pmml.api.enums.ARRAY_TYPE) Test(org.junit.Test)

Example 3 with ARRAY_TYPE

use of org.kie.pmml.api.enums.ARRAY_TYPE in project drools by kiegroup.

the class KiePMMLCompoundPredicateTest method evaluateCompoundPredicateSurrogate.

@Test
public void evaluateCompoundPredicateSurrogate() {
    ARRAY_TYPE arrayType = ARRAY_TYPE.STRING;
    List<Object> stringValues = getObjects(arrayType, 4);
    KiePMMLSimpleSetPredicate kiePMMLSimpleSetPredicateString = getKiePMMLSimpleSetPredicate(SIMPLE_SET_PREDICATE_STRING_NAME, stringValues, arrayType, IN_NOTIN.IN);
    arrayType = ARRAY_TYPE.INT;
    List<Object> intValues = getObjects(arrayType, 4);
    KiePMMLSimpleSetPredicate kiePMMLSimpleSetPredicateInt = getKiePMMLSimpleSetPredicate(SIMPLE_SET_PREDICATE_INT_NAME, intValues, arrayType, IN_NOTIN.NOT_IN);
    KiePMMLCompoundPredicate kiePMMLCompoundPredicate = getKiePMMLCompoundPredicate(BOOLEAN_OPERATOR.SURROGATE, Arrays.asList(kiePMMLSimpleSetPredicateString, kiePMMLSimpleSetPredicateInt));
    Map<String, Object> inputData = new HashMap<>();
    // This predicate verify the "IN" condition
    inputData.put(SIMPLE_SET_PREDICATE_STRING_NAME, "NOT");
    // This predicate verify the "NOT_IN" condition
    inputData.put(SIMPLE_SET_PREDICATE_INT_NAME, intValues.get(0));
    assertFalse(kiePMMLCompoundPredicate.evaluate(inputData));
    // This predicate verify the "IN" condition
    inputData.put(SIMPLE_SET_PREDICATE_STRING_NAME, stringValues.get(0));
    // This predicate verify the "NOT_IN" condition
    inputData.put(SIMPLE_SET_PREDICATE_INT_NAME, intValues.get(0));
    assertTrue(kiePMMLCompoundPredicate.evaluate(inputData));
    // This predicate verify the "IN" condition
    inputData.put(SIMPLE_SET_PREDICATE_STRING_NAME, "NOT");
    // This predicate verify the "NOT_IN" condition
    inputData.put(SIMPLE_SET_PREDICATE_INT_NAME, 1);
    assertFalse(kiePMMLCompoundPredicate.evaluate(inputData));
    // This predicate verify the "IN" condition
    inputData.put(SIMPLE_SET_PREDICATE_STRING_NAME, stringValues.get(0));
    // This predicate verify the "NOT_IN" condition
    inputData.put(SIMPLE_SET_PREDICATE_INT_NAME, 1);
    assertTrue(kiePMMLCompoundPredicate.evaluate(inputData));
}
Also used : HashMap(java.util.HashMap) ARRAY_TYPE(org.kie.pmml.api.enums.ARRAY_TYPE) Test(org.junit.Test)

Example 4 with ARRAY_TYPE

use of org.kie.pmml.api.enums.ARRAY_TYPE in project drools by kiegroup.

the class KiePMMLSimpleSetPredicateTest method evaluateRealNotIn.

@Test
public void evaluateRealNotIn() {
    ARRAY_TYPE arrayType = ARRAY_TYPE.REAL;
    List<Object> values = getObjects(arrayType, 4);
    KiePMMLSimpleSetPredicate kiePMMLSimpleSetPredicate = getKiePMMLSimpleSetPredicate(values, arrayType, IN_NOTIN.NOT_IN);
    Map<String, Object> inputData = new HashMap<>();
    inputData.put("FAKE", "23.4");
    assertFalse(kiePMMLSimpleSetPredicate.evaluate(inputData));
    inputData.put(SIMPLE_SET_PREDICATE_NAME, values.get(0));
    assertFalse(kiePMMLSimpleSetPredicate.evaluate(inputData));
    inputData.put(SIMPLE_SET_PREDICATE_NAME, "4.32");
    assertTrue(kiePMMLSimpleSetPredicate.evaluate(inputData));
}
Also used : HashMap(java.util.HashMap) ARRAY_TYPE(org.kie.pmml.api.enums.ARRAY_TYPE) Test(org.junit.Test)

Example 5 with ARRAY_TYPE

use of org.kie.pmml.api.enums.ARRAY_TYPE in project drools by kiegroup.

the class KiePMMLSimpleSetPredicateTest method evaluateIntNotIn.

@Test
public void evaluateIntNotIn() {
    ARRAY_TYPE arrayType = ARRAY_TYPE.INT;
    List<Object> values = getObjects(arrayType, 4);
    KiePMMLSimpleSetPredicate kiePMMLSimpleSetPredicate = getKiePMMLSimpleSetPredicate(values, arrayType, IN_NOTIN.NOT_IN);
    Map<String, Object> inputData = new HashMap<>();
    inputData.put("FAKE", "234");
    assertFalse(kiePMMLSimpleSetPredicate.evaluate(inputData));
    inputData.put(SIMPLE_SET_PREDICATE_NAME, values.get(0));
    assertFalse(kiePMMLSimpleSetPredicate.evaluate(inputData));
    inputData.put(SIMPLE_SET_PREDICATE_NAME, "432");
    assertTrue(kiePMMLSimpleSetPredicate.evaluate(inputData));
}
Also used : HashMap(java.util.HashMap) ARRAY_TYPE(org.kie.pmml.api.enums.ARRAY_TYPE) Test(org.junit.Test)

Aggregations

ARRAY_TYPE (org.kie.pmml.api.enums.ARRAY_TYPE)17 Test (org.junit.Test)16 HashMap (java.util.HashMap)10 NodeList (com.github.javaparser.ast.NodeList)1 MethodDeclaration (com.github.javaparser.ast.body.MethodDeclaration)1 VariableDeclarator (com.github.javaparser.ast.body.VariableDeclarator)1 Expression (com.github.javaparser.ast.expr.Expression)1 MethodCallExpr (com.github.javaparser.ast.expr.MethodCallExpr)1 NameExpr (com.github.javaparser.ast.expr.NameExpr)1 StringLiteralExpr (com.github.javaparser.ast.expr.StringLiteralExpr)1 BlockStmt (com.github.javaparser.ast.stmt.BlockStmt)1 IN_NOTIN (org.kie.pmml.api.enums.IN_NOTIN)1 KiePMMLException (org.kie.pmml.api.exceptions.KiePMMLException)1 CommonCodegenUtils.getExpressionForObject (org.kie.pmml.compiler.commons.utils.CommonCodegenUtils.getExpressionForObject)1 CommonCodegenUtils.getVariableDeclarator (org.kie.pmml.compiler.commons.utils.CommonCodegenUtils.getVariableDeclarator)1