File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ from dataclasses import dataclass
12from functools import cached_property
3+ from itertools import chain
24
35from devito .ir .iet .nodes import Call , Callable
46from devito .ir .iet .utils import derive_parameters
911 'AsyncCall' ,
1012 'AsyncCallable' ,
1113 'CommCallable' ,
14+ 'EFuncMetadata' ,
1215 'DeviceCall' ,
1316 'DeviceFunction' ,
1417 'ElementalCall' ,
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
2665class ElementalCall (Call ):
You can’t perform that action at this time.
0 commit comments