def dsl_compile(dsl_source, filename='<unknown>', is_parallel=None, dsl_classes=None, compile_kwds=None, **extraCompileKwds): """ Returns a DSL expression, created according to the given DSL source module. That is, if the source module contains a function def and an expression which calls that function, then the expression's function call will be evaluated and the resulting DSL expression will be substituted for the function call in the module's expression, so that calls to user defined functions are eliminated and a single DSL expression is obtained. If the source module contains a function def, but no expression, the module is compiled into a function def object. Calling .apply() on a function def object will return a DSL expression object, which can be evaluated by calling its .evaluate() method. """ if compile_kwds is None: compile_kwds = DslNamespace() assert isinstance(compile_kwds, dict) compile_kwds.update(extraCompileKwds) # Parse the source into a DSL module object. dsl_module = dsl_parse(dsl_source, filename=filename, dsl_classes=dsl_classes) assert isinstance(dsl_module, Module) # Compile the module into either a dependency graph # if 'is_parallel' is True, otherwise a single primitive expression. return compile_dsl_module(dsl_module, DslNamespace(), compile_kwds, is_dependency_graph=is_parallel)
def assertDslExprTypeValue(self, dsl_source, expectedDslType, expectedDslValue, **compile_kwds): # Assumes dsl_source is just one statement. dsl_module = dsl_parse(dsl_source) assert isinstance(dsl_module, Module) # Check the parsed DSL can be rendered as a string that is equal to the original source. self.assertEqual(str(dsl_module).strip(), dsl_source.strip()) # Check the statement's expression type. dsl_expr = dsl_module.body[0] self.assertIsInstance(dsl_expr, expectedDslType) # Compile the module into an simple DSL expression object (no variables or calls to function defs). dsl_expr = compile_dsl_module(dsl_module, compile_kwds) # Evaluate the compiled expression. self.assertEqual(dsl_expr.evaluate(), expectedDslValue)