@@ -190,24 +190,48 @@ def problem_method(f):
190
190
def wrapper (* args , ** kwargs ):
191
191
func_name = f .__qualname__ .split ("." )[- 1 ]
192
192
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
209
196
return wrapper
210
197
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
+
211
235
def to_dimensionless (func ):
212
236
"""Decorator to convert pint Quantity objects to dimensionless in the base units.
213
237
"""
0 commit comments