importpytestimportplatformfromtvmimportffiastvm_ffideftest_parse_traceback():traceback=""" File "test.py", line 1, in <module> File "test.py", line 3, in run_test """parsed=tvm_ffi.error._parse_traceback(traceback)assertlen(parsed)==2assertparsed[0]==("test.py",1,"<module>")assertparsed[1]==("test.py",3,"run_test")deftest_error_from_cxx():test_raise_error=tvm_ffi.get_global_func("testing.test_raise_error")try:test_raise_error("ValueError","error XYZ")exceptValueErrorase:asserte.__tvm_ffi_error__.kind=="ValueError"asserte.__tvm_ffi_error__.message=="error XYZ"asserte.__tvm_ffi_error__.traceback.find("TestRaiseError")!=-1fapply=tvm_ffi.convert(lambdaf,*args:f(*args))withpytest.raises(TypeError):fapply(test_raise_error,"TypeError","error XYZ")# wrong number of argumentswithpytest.raises(TypeError):tvm_ffi.convert(lambdax:x)()@pytest.mark.skipif("32bit"inplatform.architecture(),reason="libbacktrace file name support is not available in i386 yet",)deftest_error_from_nested_pyfunc():fapply=tvm_ffi.convert(lambdaf,*args:f(*args))cxx_test_raise_error=tvm_ffi.get_global_func("testing.test_raise_error")cxx_test_apply=tvm_ffi.get_global_func("testing.apply")record_object=[]defraise_error():try:fapply(cxx_test_raise_error,"ValueError","error XYZ")exceptValueErrorase:asserte.__tvm_ffi_error__.kind=="ValueError"asserte.__tvm_ffi_error__.message=="error XYZ"asserte.__tvm_ffi_error__.traceback.find("TestRaiseError")!=-1record_object.append(e.__tvm_ffi_error__)raiseetry:cxx_test_apply(raise_error)exceptValueErrorase:traceback=e.__tvm_ffi_error__.tracebackasserte.__tvm_ffi_error__.same_as(record_object[0])asserttraceback.count("TestRaiseError")==1asserttraceback.count("TestApply")==1asserttraceback.count("<lambda>")==1pos_cxx_raise=traceback.find("TestRaiseError")pos_cxx_apply=traceback.find("TestApply")pos_lambda=traceback.find("<lambda>")assertpos_cxx_raise>pos_lambdaassertpos_lambda>pos_cxx_applydeftest_error_traceback_update():fecho=tvm_ffi.get_global_func("testing.echo")defraise_error():raiseValueError("error XYZ")try:raise_error()exceptValueErrorase:ffi_error=tvm_ffi.convert(e)assertffi_error.traceback.find("raise_error")!=-1defraise_cxx_error():cxx_test_raise_error=tvm_ffi.get_global_func("testing.test_raise_error")cxx_test_raise_error("ValueError","error XYZ")try:raise_cxx_error()exceptValueErrorase:asserte.__tvm_ffi_error__.traceback.find("raise_cxx_error")==-1ffi_error1=tvm_ffi.convert(e)ffi_error2=fecho(e)assertffi_error1.traceback.find("raise_cxx_error")!=-1assertffi_error2.traceback.find("raise_cxx_error")!=-1