pytorch/test/cpp/jit
David Berard ba201082b6 [TorchScript] ProfilingExecutor - RemoveProfileNodesAndSpecializeTypes None handling (#161538)
ProfilingGraphExecutor works like this:
1. do some unrelated JIT optimizations
2. Add profiling nodes to collect JIT information like tensor dtypes and shapes
3. Do some more unrelated JIT optimizations
4. Remove the profiling nodes and extract the tensor info, and then use the JIT tensor info to do optimizations.

This PR is intended to fix a bug in Step 4, where the profiling nodes were removed. It was previously assumed that all the things that were profiled were either Tensors or Optional[Tensor]s - otherwise, step 2 would not have introduced a profiling node.

However, we saw a case where step 3 would remove replace Optional[Tensor] inputs with `None` inputs (e.g. if a conditional that returned a Tensor or a None could be statically known to only follow the `None` branch).

To fix this, we essentially just modify the RemoveProfileNodesAndSpecializeTypes assert so that it accepts Tensors, Optional[Tensor]s, or None (the new part).

Note that this issue is probably somewhat uncommon (maybe why we didn't see it for the first 4 years that this code existed). I expect that, typically, any time that step 3 would convert `Optional[Tensor] -> None`, step 1 would have already done that. So it's difficult to reproduce in an end-to-end TorchScript workload.

Differential Revision: [D81068172](https://our.internmc.facebook.com/intern/diff/D81068172)
Pull Request resolved: https://github.com/pytorch/pytorch/pull/161538
Approved by: https://github.com/nmacchioni
2025-08-27 23:12:15 +00:00
..
upgrader_models
__init__.py
CMakeLists.txt [TorchScript] ProfilingExecutor - RemoveProfileNodesAndSpecializeTypes None handling (#161538) 2025-08-27 23:12:15 +00:00
README.md [build] modernize build-frontend: python setup.py develop/install -> [uv ]pip install --no-build-isolation [-e ]. (#156027) 2025-07-09 11:24:27 +00:00
script_module_v4.ptl
script_module_v5.ptl
script_module_v6.ptl
source_range_test.cpp Fix StringCoordView::substr after D73379178 / #151810 (#152304) 2025-04-29 06:00:38 +00:00
test_add_if_then_else.cpp
test_alias_analysis.cpp [Lint] Update clang-format to 19.1.4 (#153889) 2025-05-20 14:12:46 +00:00
test_argument_spec.cpp [codemod] c10:optional -> std::optional (#126135) 2024-05-14 19:35:51 +00:00
test_autodiff.cpp [Lint] Update clang-format to 19.1.4 (#153889) 2025-05-20 14:12:46 +00:00
test_backend_compiler_lib.cpp [BE][3/6] fix typos in test/ (#157637) 2025-07-17 12:08:33 +00:00
test_backend_compiler_preprocess.cpp
test_backend_lib.cpp
test_backend.cpp [BE][3/6] fix typos in test/ (#157637) 2025-07-17 12:08:33 +00:00
test_class_import.cpp c10::string_view -> std::string_view in caffe2/jit (#142383) 2024-12-10 15:42:28 +00:00
test_class_parser.cpp c10::string_view -> std::string_view in caffe2/jit (#142383) 2024-12-10 15:42:28 +00:00
test_class_type.cpp
test_cleanup_passes.cpp
test_code_template.cpp
test_concat_opt.cpp
test_constant_pooling.cpp
test_create_autodiff_subgraphs.cpp
test_cs_debug_info_serialization.cpp
test_custom_class_registrations.cpp [torchbind] fix fakifying a staitc tensor returns dynamic accidentally (#158607) 2025-07-25 20:55:41 +00:00
test_custom_class_registrations.h
test_custom_class.cpp Revert "Fix clang-tidy warnings in Caffe2 code (#134935)" 2024-09-13 16:42:37 +00:00
test_custom_operators.cpp
test_dce.cpp
test_exception.cpp [9/N] Replace c10::optional with std::optional (#130674) 2024-07-15 00:48:43 +00:00
test_file_format.cpp
test_flatbuffer.cpp [9/N] Replace c10::optional with std::optional (#130674) 2024-07-15 00:48:43 +00:00
test_fuser.cpp
test_graph_executor.cpp [structural binding][10/N] Replace std::tie with structural binding (#130784) 2024-07-16 10:28:14 +00:00
test_graph_iterator.cpp
test_inliner.cpp
test_interface.cpp c10::string_view -> std::string_view in caffe2/jit (#142383) 2024-12-10 15:42:28 +00:00
test_interpreter_async.pt
test_interpreter.cpp
test_ir.cpp [codemod] c10:optional -> std::optional (#126135) 2024-05-14 19:35:51 +00:00
test_irparser.cpp [9/N] Replace c10::optional with std::optional (#130674) 2024-07-15 00:48:43 +00:00
test_jit_logging_levels.cpp
test_jit_type.cpp [9/N] Replace c10::optional with std::optional (#130674) 2024-07-15 00:48:43 +00:00
test_lexer.cpp Revert "[Relandx2] Rewrite the guts of torch::jit::Lexer to speed it up (#152372)" 2025-04-29 04:37:40 +00:00
test_lite_interpreter_direct.cpp [9/N] Replace c10::optional with std::optional (#130674) 2024-07-15 00:48:43 +00:00
test_lite_interpreter.cpp Add None return type to init -- tests (#132352) 2024-08-01 15:44:51 +00:00
test_lite_trainer.cpp [BE][3/6] fix typos in test/ (#157637) 2025-07-17 12:08:33 +00:00
test_load_upgraders.cpp
test_memory_dag.cpp Fix C++20 build (#112333) 2024-02-13 05:10:19 +00:00
test_misc.cpp Disable flaky cpp test RecordDebugHandles.Basic (#160577) 2025-08-15 15:59:21 +00:00
test_mobile_type_parser.cpp
test_module_api.cpp c10::string_view -> std::string_view in caffe2/jit (#142383) 2024-12-10 15:42:28 +00:00
test_op_replacement.cpp
test_peephole_optimize.cpp
test_qualified_name.cpp
test_save_load.cpp [9/N] Replace c10::optional with std::optional (#130674) 2024-07-15 00:48:43 +00:00
test_schema_info.cpp
test_schema_matching.cpp
test_script_profile.cpp
test_shape_analysis.cpp [9/N] Replace c10::optional with std::optional (#130674) 2024-07-15 00:48:43 +00:00
test_stack_opt.cpp
test_subgraph_matcher.cpp
test_subgraph_rewriter.cpp
test_subgraph_utils.cpp [2/N] Fix cppcoreguidelines-init-variables suppression (#146237) 2025-06-19 23:26:42 +00:00
test_te.cpp [TorchScript] ProfilingExecutor - RemoveProfileNodesAndSpecializeTypes None handling (#161538) 2025-08-27 23:12:15 +00:00
test_union.cpp
test_upgrader_utils.cpp
test_utils.cpp
test_utils.h
tests_setup.py [BE][Easy] enable ruff rule PIE790: unnecessary pass statement (#133200) 2024-08-15 15:50:19 +00: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 -m pip install --no-build-isolation -v -e .
# (re)build just the binary
ninja -C build bin/test_jit
# run tests
build/bin/test_jit --gtest_filter='glob_style_filter*'