@@ -144,10 +144,6 @@ class Operator(Callable):
144144 refer to the relevant documentation.
145145 """
146146
147- _default_headers = [('_POSIX_C_SOURCE' , '200809L' )]
148- _default_globals = []
149- _default_namespaces = []
150-
151147 def __new__ (cls , expressions , ** kwargs ):
152148 if expressions is None :
153149 # Return a dummy Callable. This is exploited by unpickling. Users
@@ -194,11 +190,6 @@ def _sanitize_exprs(cls, expressions, **kwargs):
194190
195191 return expressions
196192
197- @classmethod
198- @property
199- def _default_includes (cls ):
200- return cls ._Target .Printer ._default_includes
201-
202193 @classmethod
203194 def _build (cls , expressions , ** kwargs ):
204195 # Python- (i.e., compile-) and C-level (i.e., run-time) performance
@@ -212,15 +203,11 @@ def _build(cls, expressions, **kwargs):
212203 Callable .__init__ (op , ** op .args )
213204
214205 # Header files, etc.
215- op ._headers = OrderedSet (* cls ._default_headers )
216- op ._headers .update (byproduct .headers )
217- op ._globals = OrderedSet (* cls ._default_globals )
218- op ._globals .update (byproduct .globals )
219- op ._includes = OrderedSet (* cls ._default_includes )
220- op ._includes .update (profiler ._default_includes )
206+ op ._headers = OrderedSet (* byproduct .headers )
207+ op ._globals = OrderedSet (* byproduct .globals )
208+ op ._includes = OrderedSet (* profiler ._default_includes )
221209 op ._includes .update (byproduct .includes )
222- op ._namespaces = OrderedSet (* cls ._default_namespaces )
223- op ._namespaces .update (byproduct .namespaces )
210+ op ._namespaces = OrderedSet (* byproduct .namespaces )
224211
225212 # Required for the jit-compilation
226213 op ._compiler = kwargs ['compiler' ]
@@ -273,6 +260,9 @@ def _lower(cls, expressions, **kwargs):
273260 """
274261 # Create a symbol registry
275262 kwargs .setdefault ('sregistry' , SymbolRegistry ())
263+ # Add lang-base kwargs
264+ kwargs .setdefault ('lang' , cls ._Target .lang ())
265+ kwargs .setdefault ('printer' , cls ._Target .Printer )
276266
277267 expressions = as_tuple (expressions )
278268
@@ -480,7 +470,6 @@ def _lower_iet(cls, uiet, profiler=None, **kwargs):
480470 * Finalize (e.g., symbol definitions, array casts)
481471 """
482472 name = kwargs .get ("name" , "Kernel" )
483- lang = cls ._Target .lang ()
484473
485474 # Wrap the IET with an EntryFunction (a special Callable representing
486475 # the entry point of the generated library)
@@ -497,10 +486,10 @@ def _lower_iet(cls, uiet, profiler=None, **kwargs):
497486 cls ._Target .instrument (graph , profiler = profiler , ** kwargs )
498487
499488 # Extract the necessary macros from the symbolic objects
500- generate_macros (graph , lang = lang , printer = cls . _Target . Printer , ** kwargs )
489+ generate_macros (graph , ** kwargs )
501490
502491 # Add type specific metadata
503- lower_dtypes (graph , lang = lang , ** kwargs )
492+ lower_dtypes (graph , ** kwargs )
504493
505494 # Target-independent optimizations
506495 minimize_symbols (graph )
@@ -779,6 +768,18 @@ def _soname(self):
779768 def _printer (self ):
780769 return self ._Target .Printer
781770
771+ @cached_property
772+ def headers (self ):
773+ return OrderedSet (* self ._printer ._headers ).union (self ._headers )
774+
775+ @cached_property
776+ def includes (self ):
777+ return OrderedSet (* self ._printer ._includes ).union (self ._includes )
778+
779+ @cached_property
780+ def namespaces (self ):
781+ return OrderedSet (* self ._printer ._namespaces ).union (self ._namespaces )
782+
782783 @cached_property
783784 def ccode (self ):
784785 from devito .ir .iet .visitors import CGen
0 commit comments