@@ -190,24 +190,48 @@ def problem_method(f):
190190 def wrapper (* args , ** kwargs ):
191191 func_name = f .__qualname__ .split ("." )[- 1 ]
192192 self_obj = args [0 ]
193- problems = kwargs .setdefault ("problems" , self_obj .problems )
194- if not problems :
195- raise ValueError ("No problems found in the model" )
196- if not isinstance (problems , Iterable ):
197- problems = [problems ]
198- vars = []
199- for problem in problems :
200- if problem .model != self_obj :
201- raise ValueError ("{} is not registered to this model" .format (problem ))
202- if "steps" in kwargs :
203- kwargs .setdefault ("steps" , self_obj .steps )
204- var = getattr (problem , func_name )(* args [1 ::], ** kwargs )
205- if var :
206- vars .append (var )
207- return vars
208-
193+ res = [vars for problem in self_obj .problems if (vars := getattr (problem , func_name )(* args [1 ::], ** kwargs ))]
194+ res = list (itertools .chain .from_iterable (res ))
195+ return res
209196 return wrapper
210197
198+ # def problem_method(f):
199+ # """Run a problem level method. In this way it is possible to bring to the
200+ # model level some of the functions of the problems.
201+
202+ # Parameters
203+ # ----------
204+ # method : str
205+ # name of the method to call.
206+
207+ # Returns
208+ # -------
209+ # [var]
210+ # List results of the method per each problem in the model.
211+ # """
212+
213+ # @wraps(f)
214+ # def wrapper(*args, **kwargs):
215+ # func_name = f.__qualname__.split(".")[-1]
216+ # self_obj = args[0]
217+ # problems = kwargs.setdefault("problems", self_obj.problems)
218+ # if not problems:
219+ # raise ValueError("No problems found in the model")
220+ # if not isinstance(problems, Iterable):
221+ # problems = [problems]
222+ # vars = []
223+ # for problem in problems:
224+ # if problem.model != self_obj:
225+ # raise ValueError("{} is not registered to this model".format(problem))
226+ # if "steps" in kwargs:
227+ # kwargs.setdefault("steps", self_obj.steps)
228+ # var = getattr(problem, func_name)(*args[1::], **kwargs)
229+ # if var:
230+ # vars.append(var)
231+ # return vars
232+
233+ # return wrapper
234+
211235def to_dimensionless (func ):
212236 """Decorator to convert pint Quantity objects to dimensionless in the base units.
213237 """
0 commit comments