Evaluate the conditional statement and return its contents if a successful evaluation takes place
        :param user: The active user object
        :type  user: agentml.User or None
        
        :param agentml: The active AgentML instance
        :type  agentml: AgentML

        :return: Condition contents if the condition evaluates successfully, otherwise False
        :rtype : tuple or bool

def evaluate(self, agentml, user=None):
        """
        Evaluate the conditional statement and return its contents if a successful evaluation takes place
        :param user: The active user object
        :type  user: agentml.User or None
        
        :param agentml: The active AgentML instance
        :type  agentml: AgentML

        :return: Condition contents if the condition evaluates successfully, otherwise False
        :rtype : tuple or bool
        """
        self._log.debug('Evaluating conditional statement: {statement}'
                        .format(statement=' '.join(filter(None, [self.type, self.name, self.operator, self.value]))))

        # Get the value of our key type
        if self.type not in agentml.conditions:
            self._log.error('Unknown condition type, "{type}", unable to evaluate condition statement'
                            .format(type=self.type))
            return

        key_value = agentml.conditions[self.type].get(agentml, user, self.name)

        # Atomic comparisons
        if self.operator is None and key_value:
            return self.contents

        if (self.operator == self.IS) and (key_value == self.value):
            return self.contents

        if (self.operator == self.IS_NOT) and (key_value != self.value):
            return self.contents

        # All remaining self.operators are numeric based, so key_value must contain a valid integer or float
        try:
            key_value = float(key_value)
            value = float(self.value)
        except (ValueError, TypeError):
            return False

        # Numeric comparisons
        if (self.operator == self.GREATER_THAN) and (key_value > value):
            return self.contents

        if (self.operator == self.GREATER_THAN_OR_EQUAL) and (key_value >= value):
            return self.contents

        if (self.operator == self.LESS_THAN) and (key_value < value):
            return self.contents

        if (self.operator == self.LESS_THAN_OR_EQUAL) and (key_value <= value):
            return self.contents

        return False