Converting List[T] to Tuple[T] in torchscript

I’m struggling to figure out how to do this, if it’s possible at all. I have a torchscript function that computes a tensor on each iteration. Because the tensors have different shapes, it’s not convenient to simply concatenate the tensors, so I’m collecting them in a list. Because only tuples can be returned from torchscript functions, I’m trying to convert the final list to a tuple to return it. However, the usual python tuple(my_list) constructor doesn’t seem to work, yielding the error “expected a value of type Tensor for argument ‘0’ but found Tensor[]”. Apparently it’s trying to place the entire list into the first element of the tuple, rather than expanding it into a tuple of the same length as the list, as would be expected with the usual python semantics.

Here is some example code to show what I’m trying to do:

import torch

@torch.jit.script
def f(x):
    
    list_of_tensors = []
    for n in range(3):
         list_of_tensors.append(torch.ones([10]))
    return tuple(list_of_tensors)

traced_script_module = torch.jit.trace(f, [])

The error I get in this case is


RuntimeError Traceback (most recent call last)
in
1 import torch
2
----> 3 @torch.jit.script
4 def f(x):
5

~/anaconda3/lib/python3.6/site-packages/torch/jit/init.py in script(obj, optimize, _frames_up, _rcb)
822 else:
823 ast = get_jit_def(obj)
–> 824 fn = torch._C._jit_script_compile(ast, _rcb, get_default_args(obj))
825 # Forward docstrings
826 fn.doc = obj.doc

RuntimeError:

for operator (Tensor 0) -> Tensor:
expected a value of type Tensor for argument ‘0’ but found Tensor[]
Empty lists default to List[Tensor]. Use torch.jit.annotate(List[my_type], []) to create an empty list of another type
@torch.jit.script
def f(x):

list_of_tensors = []
for n in range(3):
     list_of_tensors.append(torch.ones([10]))
return tuple(list_of_tensors)
             ~~~~~~~~~~~~~~~ <--- HERE

:
@torch.jit.script
def f(x):

list_of_tensors = []
for n in range(3):
     list_of_tensors.append(torch.ones([10]))
return tuple(list_of_tensors)
       ~~~~~ <--- HERE
1 Like