def METHOD_NAME(self, row, parameter):
    """
    Compute all possible values for the given parameter.
    These values are based on constraints and already picked values
    of other parameters.
    :param row: row with picked values. -1 means an unpicked value.
    :type row: list
    :param parameter: index of the parameter
     whose we want to know the values
    :type parameter: int
    :return: all possible values for the given parameter
    :rtype: list
    """
    def is_permitted_value(one_value_constraints):
        if one_value_constraints is None:
            return True
        if len(one_value_constraints) == 0:
            return False
        for constraints in one_value_constraints:
            is_ok = False
            for constraint in constraints:
                if row[constraint[self.CON_NAME]] != constraint[self.CON_VAL]:
                    is_ok = True
                    break
            if not is_ok:
                return False
        return True
    return [
        i
        for i, c in enumerate(self.parameters[parameter].constraints)
        if is_permitted_value(c)
    ]