pytorch/test/cpp/jit
Martin Yuan 23c50a4a50 [PyTorch Mobile] Support torchbind custom classes in lite interpreter (#51432)
Summary:
Pull Request resolved: https://github.com/pytorch/pytorch/pull/51432

ghstack-source-id: 120976584

torchbind is a convenient way to include custom class to both python and torchscript. CREATE_OBJECT is used to create an object of custom class.

CREATE_OBJECT was not supported by lite interpreter. The major reason was that for custom class directly defined in Python, there's no language parser in lite interpreter. It's still the case. However, for torchbind classes that are defined in C++, a python/torchscript parser is not needed.

This diff is to support the case of torchbind custom classes.
1. The class type can be resolved at import level.
2. If the class is not the supported torchbind class, an error message is provided at export stage. Workaround is also suggested.
3. Unit tests. C++: ```LiteInterpreterTest::BuiltinClass``` is added as an end-to-end test on supported class. Python: ```test_unsupported_createobject``` is changed to ```test_unsupported_classtype``` to test unsupported classes.

Test Plan: CI

Reviewed By: raziel

Differential Revision: D26168913

fbshipit-source-id: 74e8b6a12682ad8e9c39afdfd2b605c5f8e65427
2021-02-03 21:57:19 -08:00
..
__init__.py
CMakeLists.txt Enable TorchBind tests on ROCm (#45426) 2020-10-05 09:38:12 -07:00
README.md port all JIT tests to gtest (#45264) 2020-09-25 11:37:43 -07:00
test_alias_analysis.cpp [codemod][fbcode/caffe2] Apply clang-format update fixes 2021-01-09 14:37:36 -08:00
test_argument_spec.cpp [codemod][fbcode/caffe2] Apply clang-format update fixes 2021-01-09 14:37:36 -08:00
test_autodiff.cpp Add inputs argument to autograd.backward() (#46855) 2020-11-02 14:32:38 -08:00
test_backend.cpp Modernize for-loops (#50912) 2021-01-22 10:53:24 -08:00
test_class_import.cpp gtest-ify JIT tests, through the letter c (#45249) 2020-09-24 00:21:20 -07:00
test_class_parser.cpp port all JIT tests to gtest (#45264) 2020-09-25 11:37:43 -07:00
test_class_type.cpp [JIT] Print out CU address in ClassType::repr_str() (#50194) 2021-01-19 23:04:30 -08:00
test_cleanup_passes.cpp gtest-ify JIT tests, through the letter c (#45249) 2020-09-24 00:21:20 -07:00
test_code_template.cpp gtest-ify JIT tests, through the letter c (#45249) 2020-09-24 00:21:20 -07:00
test_constant_pooling.cpp [JIT] Fix Dict bug in constant hashing (#45929) 2020-10-07 17:40:17 -07:00
test_create_autodiff_subgraphs.cpp gtest-ify JIT tests, through the letter c (#45249) 2020-09-24 00:21:20 -07:00
test_custom_class.cpp [TorchScript] Support user defined classes as constants (#5062) 2020-11-16 20:52:02 -08:00
test_custom_class_registrations.cpp [TorchBind] Support using lambda function as TorchBind constructor (#47819) 2020-11-12 09:29:34 -08:00
test_custom_class_registrations.h gtest-ify JIT tests, through the letter c (#45249) 2020-09-24 00:21:20 -07:00
test_custom_operators.cpp Support complex number list in JIT (#51145) 2021-01-31 23:54:14 -08:00
test_dce.cpp gtest-ify JIT tests, through the letter c (#45249) 2020-09-24 00:21:20 -07:00
test_fuser.cpp [Pytorch][Annotation] Update inlined callstack with module instance info (#47416) 2020-12-03 10:44:46 -08:00
test_gpu.cpp [PyTorch][codemod] Replace immediately-dereferenced cast calls w/castRaw (#50229) 2021-02-01 23:12:07 -08:00
test_graph_executor.cpp [JIT] Fix archive file extension in examples and docs (#50649) 2021-01-20 02:04:46 -08:00
test_inliner.cpp port all JIT tests to gtest (#45264) 2020-09-25 11:37:43 -07:00
test_interface.cpp port all JIT tests to gtest (#45264) 2020-09-25 11:37:43 -07:00
test_interpreter.cpp [JIT] Fix archive file extension in examples and docs (#50649) 2021-01-20 02:04:46 -08:00
test_interpreter_async.pt [DI] Allow explicit taskLauncher for torchscript interpreter (#46865) 2020-11-04 17:07:55 -08:00
test_ir.cpp port all JIT tests to gtest (#45264) 2020-09-25 11:37:43 -07:00
test_irparser.cpp Fix stride printing/parsing formatting (#45156) 2020-10-06 15:06:46 -07:00
test_jit_type.cpp [PyTorch][codemod] Replace immediately-dereferenced expect calls w/expectRef (#50228) 2021-01-13 16:13:55 -08:00
test_lite_interpreter.cpp [PyTorch Mobile] Support torchbind custom classes in lite interpreter (#51432) 2021-02-03 21:57:19 -08:00
test_lite_trainer.cpp port all JIT tests to gtest (#45264) 2020-09-25 11:37:43 -07:00
test_memory_dag.cpp [jit] gtest-ify test_alias_analysis.cpp (#45018) 2020-09-21 12:19:37 -07:00
test_misc.cpp Improve PyTorch profiler flop computation formulas (#51377) 2021-02-02 11:49:04 -08:00
test_mobile_type_parser.cpp port all JIT tests to gtest (#45264) 2020-09-25 11:37:43 -07:00
test_module_api.cpp Expose run_async function on torch::jit::Method (#48607) 2020-12-11 11:17:58 -08:00
test_peephole_optimize.cpp port all JIT tests to gtest (#45264) 2020-09-25 11:37:43 -07:00
test_qualified_name.cpp port all JIT tests to gtest (#45264) 2020-09-25 11:37:43 -07:00
test_save_load.cpp Adding JIT support for cuda streams and events (#48020) 2020-12-29 20:24:57 -08:00
test_schema_matching.cpp port all JIT tests to gtest (#45264) 2020-09-25 11:37:43 -07:00
test_subgraph_matcher.cpp [JIT] Support multiple outputs in subgraph matcher. (#48992) 2020-12-15 13:09:24 -08:00
test_subgraph_rewriter.cpp [JIT] Support multiple outputs in subgraph matcher. (#48992) 2020-12-15 13:09:24 -08:00
test_subgraph_utils.cpp [JIT] SubgraphUtils: add a function for generating a string name for a given graph. (#47253) 2020-11-03 16:36:41 -08:00
test_utils.cpp port all JIT tests to gtest (#45264) 2020-09-25 11:37:43 -07:00
test_utils.h port all JIT tests to gtest (#45264) 2020-09-25 11:37:43 -07:00
tests_setup.py Adding JIT support for cuda streams and events (#48020) 2020-12-29 20:24:57 -08:00
torch_python_test.cpp

JIT C++ Tests

Adding a new test

First, create a new test file. Test files should have be placed in this directory, with a name that starts with test_, like test_foo.cpp.

In general a single test suite

Add your test file to the JIT_TEST_SRCS list in test/cpp/jit/CMakeLists.txt.

A test file may look like:

#include <gtest/gtest.h>

using namespace ::torch::jit

TEST(FooTest, BarBaz) {
   // ...
}

// Append '_CUDA' to the test case name will automatically filter it out if CUDA
// is not compiled.
TEST(FooTest, NeedsAGpu_CUDA) {
   // ...
}

// Similarly, if only one GPU is detected, tests with `_MultiCUDA` at the end
// will not be run.
TEST(FooTest, NeedsMultipleGpus_MultiCUDA) {
   // ...
}

Building and running the tests

The following commands assume you are in PyTorch root.

# ... Build PyTorch from source, e.g.
python setup.py develop
# (re)build just the binary
ninja -C build bin/test_jit
# run tests
build/bin/test_jit --gtest_filter='glob_style_filter*'