Skip to content

Commit 9d34058

Browse files
committed
compiler: Add EFuncMetadata
1 parent 4ab49c8 commit 9d34058

1 file changed

Lines changed: 39 additions & 0 deletions

File tree

devito/ir/iet/efunc.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
from dataclasses import dataclass
12
from functools import cached_property
3+
from itertools import chain
24

35
from devito.ir.iet.nodes import Call, Callable
46
from devito.ir.iet.utils import derive_parameters
@@ -9,6 +11,7 @@
911
'AsyncCall',
1012
'AsyncCallable',
1113
'CommCallable',
14+
'EFuncMetadata',
1215
'DeviceCall',
1316
'DeviceFunction',
1417
'ElementalCall',
@@ -21,6 +24,42 @@
2124
]
2225

2326

27+
@dataclass(frozen=True)
28+
class EFuncMetadata:
29+
30+
body: object = None
31+
efuncs: tuple = ()
32+
includes: tuple = ()
33+
namespaces: tuple = ()
34+
libs: tuple = ()
35+
36+
@classmethod
37+
def from_body(cls, body):
38+
return cls(body=body)
39+
40+
@classmethod
41+
def compose(cls, *items):
42+
items = tuple(i for i in items if i is not None)
43+
44+
if not items:
45+
return cls()
46+
47+
return cls(
48+
body=items[-1].body,
49+
efuncs=tuple(chain.from_iterable(i.efuncs for i in items)),
50+
includes=tuple(chain.from_iterable(i.includes for i in items)),
51+
namespaces=tuple(chain.from_iterable(i.namespaces for i in items)),
52+
libs=tuple(chain.from_iterable(i.libs for i in items))
53+
)
54+
55+
def __iter__(self):
56+
yield self.body
57+
yield self.efuncs
58+
yield self.includes
59+
yield self.namespaces
60+
yield self.libs
61+
62+
2463
# ElementalFunction machinery
2564

2665
class ElementalCall(Call):

0 commit comments

Comments
 (0)