Running tutorial tensor_ir_blitz_course failed

I am new to TVM and I ran into some issues when tring the TIR tutorial.
The commit: 328d7c7c09763b8532a6a7359a5dc6d5ee6c8a98. Python : 3.7.11.

unexpected indent (<unknown>, line 1)
  File "/xxxxx/tvm/python/tvm/script/parser.py", line 1093, in from_source
    result = to_ast(input_func, TVMDiagnosticCtx(), parser)
  File "/xxxxx/tvm/python/tvm/script/tir/prim_func.py", line 40, in prim_func
    result = from_source(input_func)
  File "/xxxxx/tvm/gallery/tutorial/tensor_ir_blitz_course.py", line 50, in MyModule
    def main(a: T.handle, b: T.handle):
  File "/xxxxx/tvm/gallery/tutorial/tensor_ir_blitz_course.py", line 47, in <module>
    @tvm.script.ir_module

If I try to build a IRMoudle created from TE, there is another issue when calling

mod = tvm.build(ir_module_from_te, target="llvm")
Traceback (most recent call last):
  File "tensor_ir_blitz_course.py", line 82, in <module>
    mod = tvm.build(ir_module_from_te, target="llvm")  # The module for CPU backends.
  File "/xxxxx/tvm/python/tvm/driver/build_module.py", line 276, in build
    rt_mod_host = _driver_ffi.preprocess_module(annotated_mods, target_host)
  File "/xxxxx/tvm/python/tvm/_ffi/_ctypes/packed_func.py", line 237, in __call__
    raise get_last_ffi_error()
tvm._ffi.base.TVMError: Traceback (most recent call last):
  11: TVMFuncCall
  10: std::_Function_handler<void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*), tvm::runtime::TypedPackedFunc<tvm::runtime::Module (tvm::runtime::Map<tvm::Target, tvm::IRModule, void, void> const&, tvm::Target)>::AssignTypedLambda<tvm::{lambda(tvm::runtime::Map<tvm::Target, tvm::IRModule, void, void> const&, tvm::Target)#6}>(tvm::{lambda(tvm::runtime::Map<tvm::Target, tvm::IRModule, void, void> const&, tvm::Target)#6}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)::{lambda(tvm::runtime::TVMArgs const&, tvm::runtime::TVMRetValue*)#1}>::_M_invoke(std::_Any_data const&, tvm::runtime::TVMArgs&&, tvm::runtime::TVMRetValue*&&)
  9: tvm::PreProcessModuleForBuild(tvm::runtime::Map<tvm::Target, tvm::IRModule, void, void> const&, tvm::Target const&)
  8: tvm::SplitMixedModule(tvm::IRModule, tvm::Target const&, tvm::Target const&)
  7: tvm::ApplyPasses(tvm::IRModule, tvm::transform::Sequential)
  6: tvm::transform::Pass::operator()(tvm::IRModule) const
  5: tvm::transform::Pass::operator()(tvm::IRModule, tvm::transform::PassContext const&) const
  4: tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const
  3: tvm::transform::Pass::operator()(tvm::IRModule, tvm::transform::PassContext const&) const
  2: tvm::transform::ModulePassNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const
  1: std::_Function_handler<void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*), tvm::runtime::TypedPackedFunc<tvm::IRModule (tvm::IRModule, tvm::transform::PassContext)>::AssignTypedLambda<tvm::tir::transform::MakePackedAPI(int)::{lambda(tvm::IRModule, tvm::transform::PassContext)#1}>(tvm::tir::transform::MakePackedAPI(int)::{lambda(tvm::IRModule, tvm::transform::PassContext)#1})::{lambda(tvm::runtime::TVMArgs const&, tvm::runtime::TVMRetValue*)#1}>::_M_invoke(std::_Any_data const&, tvm::runtime::TVMArgs&&, tvm::runtime::TVMRetValue*&&)
  0: tvm::tir::MakePackedAPI(tvm::tir::PrimFunc&&, int)
  File "/xxxxx/tvm/src/tir/transforms/make_packed_api.cc", line 110

Looks like that’s the source of error

In terms of creating IRModule from TE, would you like to try this one:

from tvm import te

A = te.placeholder(shape=(128,), dtype="float32", name="A")
B = te.placeholder(shape=(128,), dtype="float32", name="B")
C = te.compute((128,), lambda i: A[i] + B[i], name="C")
func = te.create_prim_func([A, B, C])
func = func.with_attr("global_symbol", "main")
ir_module = IRModule({"main": func})

Your code works well, but why does the original one parameter TE produces error?

A = te.placeholder((8,), dtype="float32", name="A")
B = te.compute((8,), lambda *i: A(*i) + 1.0, name="B")
func = te.create_prim_func([A, B])
ir_module_from_te = IRModule({"main": func})
print(ir_module_from_te.script()) 
mod = tvm.build(ir_module_from_te, target="llvm") 

Looks like that’s the source of error.

I don’t know why it reports “unexpected indent” at: tvm/python/tvm/script/parser.py, line 1093

result = to_ast(input_func, TVMDiagnosticCtx(), parser)