Skip to content

Commit 98ea2ed

Browse files
committed
problem_method simplified
1 parent d55303a commit 98ea2ed

File tree

2 files changed

+42
-16
lines changed

2 files changed

+42
-16
lines changed

src/compas_fea2/problem/problem.py

+2
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,8 @@ def write_input_file(self, path=None):
369369
The InputFile objects that generates the input file.
370370
"""
371371
path = path or self.path
372+
if not isinstance(path, Path):
373+
path = Path(path)
372374
if not path.exists():
373375
path.mkdir(parents=True)
374376
input_file = InputFile.from_problem(self)

src/compas_fea2/utilities/_utils.py

+40-16
Original file line numberDiff line numberDiff line change
@@ -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+
211235
def to_dimensionless(func):
212236
"""Decorator to convert pint Quantity objects to dimensionless in the base units.
213237
"""

0 commit comments

Comments
 (0)