BigML.Model.LocalModel.predictNode C# (CSharp) Method

predictNode() private method

private predictNode ( Node currentNode, dynamic>.Dictionary inputData ) : Node
currentNode Node
inputData dynamic>.Dictionary
return Node
            private Node predictNode(Node currentNode, Dictionary<string, dynamic> inputData)
            {
                bool missingField;
                string fieldId;
                dynamic predicateValue;
                dynamic inDataValue;

                foreach (Node children in currentNode.Children)
                {
                    fieldId = children.Predicate.Field;
                    missingField = !inputData.ContainsKey(fieldId);

                    if ((missingField) && (children.Predicate.MissingOperator))
                    {
                        predictNode(children, inputData);
                    }
                    else
                    {
                        //is a text field or items
                        bool textOrItems = children.Predicate.HasTerm;

                        if (missingField)
                        {
                            if (textOrItems)
                            {
                                inDataValue = "";
                            }
                            else
                            {
                                continue;
                            }
                        }
                        else
                        {
                            inDataValue = inputData[fieldId];
                        }
                        predicateValue = children.Predicate.Value;

                        if (textOrItems)
                        {
                            inDataValue = termMatches(inDataValue, fieldId, children.Predicate.Term);
                        }

                        switch (children.Predicate.Operator)
                        {
                            case "<":
                            case "<*":
                                if (inDataValue < predicateValue)
                                {
                                    return predictNode(children, inputData);
                                }
                                break;
                            case "<=":
                            case "<=*":
                                if (inDataValue <= predicateValue)
                                {
                                    return predictNode(children, inputData);
                                }
                                break;
                            case ">":
                            case ">*":
                                if (inDataValue > predicateValue)
                                {
                                    return predictNode(children, inputData);
                                }
                                break;
                            case ">=*":
                            case ">=":
                                if (inDataValue >= predicateValue)
                                {
                                    return predictNode(children, inputData);
                                }
                                break;
                            case "=*":
                            case "==*":
                            case "=":
                            case "==":
                                if (inDataValue == predicateValue)
                                {
                                    return predictNode(children, inputData);
                                }
                                break;
                            case "!=*":
                            case "!=":
                            case "<>*":
                            case "<>":
                                if (inDataValue != predicateValue)
                                {
                                    return predictNode(children, inputData);
                                }
                                break;

                            default:
                                throw new System.Exception(children.Predicate.Operator + " is not recognized");
                        }
                    }
                }
                return currentNode;
            }