Plugins

Potc support

Potc is a package that can convert any object into executable source code. For DI-treetensor, potc can support the source code transformation of treevalue objects through the installation of additional plugins. So we can execute the following installation command

pip install DI-treetensor[potc]

After this installation, you will be able to directly convert tree-nested tensors to objects without any additional operations. Such as

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
from potc import transvars

import treetensor.torch as ttorch

t_tensor = ttorch.randn({'a': (2, 3), 'b': (3, 4)})
t_i_tensor = ttorch.randint(-5, 10, {'a': (3, 4), 'x': {'b': (2, 3)}})
t_shape = t_i_tensor.shape

if __name__ == '__main__':
    _code = transvars(
        {
            't_tensor': t_tensor,
            't_i_tensor': t_i_tensor,
            't_shape': t_shape,
        },
        reformat='pep8'
    )
    print(_code)

The output should be

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import torch
from treetensor import Tensor
from treetensor.torch import Size

__all__ = ['t_i_tensor', 't_shape', 't_tensor']
t_i_tensor = Tensor({
    'x': {
        'b': torch.as_tensor([[-4, -4, 9], [-5, 2, 9]], dtype=torch.long)
    },
    'a':
    torch.as_tensor([[-2, -5, -2, 4], [1, 1, 8, -3], [7, 6, 1, 5]],
                    dtype=torch.long)
})
t_shape = Size({'x': {'b': torch.Size([2, 3])}, 'a': torch.Size([3, 4])})
t_tensor = Tensor({
    'b':
    torch.as_tensor([[
        -0.6577519178390503, -0.4588587284088135, -0.3052324950695038,
        -0.5710276961326599
    ],
                     [
                         0.7082454562187195, -2.8370797634124756,
                         1.7569137811660767, 0.16304217278957367
                     ],
                     [
                         -0.7894880771636963, 0.3524790406227112,
                         -0.19780443608760834, -0.4145522117614746
                     ]],
                    dtype=torch.float32),
    'a':
    torch.as_tensor(
        [[0.14953619241714478, 0.5880075097084045, -0.6133025884628296],
         [1.2764272689819336, 0.19704531133174896, -0.16866445541381836]],
        dtype=torch.float32)
})

Also, you can use the following CLI command to get the same output results as above.

potc export -v 'test_simple.t_*'

For further information, you can refer to