FFI 容器#

import tvm.ffi as tvm_ffi

数组#

a = tvm_ffi.convert([1, 2, 3])
assert isinstance(a, tvm_ffi.Array)
assert len(a) == 3
assert a[-1] == 3
a_slice = a[-3:-1]
assert (a_slice[0], a_slice[1]) == (1, 2)

数组映射#

a = tvm_ffi.convert([[1, 2, 3], {"A": 5, "B": 6}])
assert isinstance(a, tvm_ffi.Array)
assert len(a) == 2
assert isinstance(a[0], tvm_ffi.Array)
assert isinstance(a[1], tvm_ffi.Map)
assert tuple(a[0]) == (1, 2, 3)
assert a[1]["A"] == 5
assert a[1]["B"] == 6

整数映射#

amap = tvm_ffi.convert({3: 2, 4: 3})
assert 3 in amap
assert len(amap) == 2
dd = dict(amap.items())
assert 3 in dd
assert 4 in dd
assert 5 not in amap
assert tuple(amap.items()) == ((3, 2), (4, 3))
assert tuple(amap.keys()) == (3, 4)
assert tuple(amap.values()) == (2, 3)

字符串映射#

data = []
for i in reversed(range(10)):
    data.append((f"a{i}", i))
amap = tvm_ffi.convert({k: v for k, v in data})
assert tuple(amap.items()) == tuple(data)
for k, v in data:
    assert k in amap
    assert amap[k] == v
    assert amap.get(k) == v

assert tuple(k for k in amap) == tuple(k for k, _ in data)

KeyError#

import pytest
amap = tvm_ffi.convert({3: 2, 4: 3})
with pytest.raises(KeyError):
    amap[5]

repr#

a = tvm_ffi.convert([1, 2, 3])
assert str(a) == "[1, 2, 3]"
amap = tvm_ffi.convert({3: 2, 4: 3})
assert str(amap) == "{3: 2, 4: 3}"

smap = tvm_ffi.convert({"a": 1, "b": 2})
assert str(smap) == "{'a': 1, 'b': 2}"