Skip to content

Commit 9d709c5

Browse files
committed
Added new transition pattern
1 parent 0415c0c commit 9d709c5

File tree

2 files changed

+34
-3
lines changed

2 files changed

+34
-3
lines changed

ngcsimlib/compilers/component_compiler.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,13 @@ def parse(component, compile_key):
5252
args = []
5353
parameters = []
5454
compartments = []
55-
varnames = pure_fn.__func__.__code__.co_varnames[
56-
:pure_fn.__func__.__code__.co_argcount]
55+
try:
56+
func = pure_fn.__func__
57+
except:
58+
func = pure_fn
59+
60+
varnames = func.__code__.co_varnames[
61+
:func.__code__.co_argcount]
5762

5863
for name in varnames:
5964
if name not in component.__dict__.keys():
@@ -104,11 +109,16 @@ def compile(component, resolver):
104109

105110
comp_key_key = [(narg.split('/')[-1], narg) for narg in comp_ids]
106111

112+
try:
113+
func = pure_fn.__func__
114+
except:
115+
func = pure_fn
116+
107117
def compiled(**kwargs):
108118
funArgs = {narg: kwargs.get(narg) for narg in _args}
109119
funComps = {knarg: kwargs.get(narg) for knarg, narg in comp_key_key}
110120

111-
return pure_fn.__func__(**funParams, **funArgs, **funComps)
121+
return func(**funParams, **funArgs, **funComps)
112122

113123
exc_order.append((compiled, out_ids, component.name, comp_ids))
114124
return exc_order

ngcsimlib/transition.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from ngcsimlib.logger import warn
2+
from ngcsimlib.utils import add_component_resolver, add_resolver_meta
3+
4+
def add_transition(pure_fn, cls, output_compartments=None, transition_key=None):
5+
if output_compartments is None:
6+
warn(f"Transition {pure_fn.__qualname__.split('.')[-1]} has no output_compartments and thus does not do anything")
7+
8+
key = pure_fn.__qualname__.split('.')[-1] if transition_key is None else transition_key
9+
10+
class_name = cls.__qualname__
11+
add_component_resolver(class_name, key,
12+
(pure_fn, output_compartments))
13+
add_resolver_meta(class_name, key,
14+
(None, None, None, True))
15+
16+
17+
def transition(pure_fn, output_compartments=None, transition_key=None):
18+
def _transition(cls):
19+
add_transition(pure_fn, cls, output_compartments, transition_key)
20+
return cls
21+
return _transition

0 commit comments

Comments
 (0)