def get_input_values(self, f_inputs, output):
        """
        Scans the whole conditions object looking for input values, adds them with the function inputs.
        :param f_inputs: function inputs.
        :param output: the output of the row.
        :return: All possible inputs that are not keywords.
        """
        remove_elements = KEYWORDS.values()

        f_inputs = list(f_inputs)
        input_values = []
        for row in self:
            if KEYWORDS[OUTPUT] in row and row[KEYWORDS[OUTPUT]] == output:
                keys = helpers.remove_list_from_list(row.keys(), f_inputs)
                keys = helpers.remove_list_from_list(keys, remove_elements)
                input_values += [row[k] for k in keys]

        return f_inputs + input_values
    def get_input_keys(self, f_inputs, output):
        """
        Scans the whole conditions object looking for input keys. Will add inputs such as code pieces, that are not
        explicitly declared as function inputs.
        :param f_inputs: function inputs.
        :param output: the output of the row.
        :return: All possible inputs that are not keywords.
        """

        f_inputs = list(f_inputs)

        new_inputs = []
        for row in self:
            if KEYWORDS[OUTPUT] in row and row[KEYWORDS[OUTPUT]] == output:
                new_inputs += helpers.remove_list_from_list(row.keys(), f_inputs)

        all_elements = f_inputs + new_inputs
        remove_elements = KEYWORDS.values()

        return helpers.remove_list_from_list(all_elements, remove_elements)