def set_user_methods(self, user_methods, forced=False):
<EOL>if isinstance(user_methods, str):<EOL><INDENT>user_methods = [user_methods]<EOL><DEDENT>self.user_methods = user_methods<EOL>self.forced = forced<EOL>if set(self.user_methods).difference(self.all_methods):<EOL><INDENT>raise Exception("<STR_LIT>")<EOL><DEDENT>if not self.user_methods and self.forced:<EOL><INDENT>raise Exception('<STR_LIT>')<EOL><DEDENT>self.method = None<EOL>self.sorted_valid_methods = []<EOL>self.T_cached = None<EOL>
r'''Method used to select certain property methods as having a higher
        priority than were set by default. If `forced` is true, then methods
        which were not specified are excluded from consideration.

        As a side effect, `method` is removed to ensure than the new methods
        will be used in calculations afterwards.

        An exception is raised if any of the methods specified aren't available
        for the chemical. An exception is raised if no methods are provided.

        Parameters
        ----------
        user_methods : str or list
            Methods by name to be considered or prefered
        forced : bool, optional
            If True, only the user specified methods will ever be considered;
            if False other methods will be considered if no user methods
            suceed