Set the model function to use an efficient but tedious calling convention.

        The function should obey the following convention::

            def func(param_vec, *args):
                modeled_data = { do something using param_vec }
                return modeled_data

        This function creates the :class:`pwkit.lmmin.Problem` so that the
        caller can futz with it before calling :meth:`solve`, if so desired.

        Returns *self*.

def set_func(self, func, pnames, args=()):
        """Set the model function to use an efficient but tedious calling convention.

        The function should obey the following convention::

            def func(param_vec, *args):
                modeled_data = { do something using param_vec }
                return modeled_data

        This function creates the :class:`pwkit.lmmin.Problem` so that the
        caller can futz with it before calling :meth:`solve`, if so desired.

        Returns *self*.

        """
        from .lmmin import Problem

        self.func = func
        self._args = args
        self.pnames = list(pnames)
        self.lm_prob = Problem(len(self.pnames))
        return self