def find_variables_from_constraints(constraints):
    """
    Return a list of all "proper" Variable objects appearing in some ``c in constraints``.
    """
    variable_ids = set()
    variables = []
    for c in constraints:
        for v in c.variables():
            if v.is_proper():
                vid = id(v)
                if vid not in variable_ids:
                    variable_ids.add(vid)
                    variables.append(v)
            else:
                msg = 'Constraint \n \t' + str(c) + '\n'
                msg += 'returned an improper Variable \n \t' + str(v) + '\n'
                raise RuntimeError(msg)
    return variables
