Supported LiteRT Ops#
The following TFLite op types have a built-in converter in
yobx.litert.ops. The list is generated programmatically
from the live converter registry.
<<<
import re
from yobx.litert import register_litert_converters
from yobx.litert.register import LITERT_OP_CONVERTERS
from yobx.litert.litert_helper import builtin_op_name
register_litert_converters()
PATTERN = re.compile(r"TFLite\s+``(\w+)``\s+→\s+ONNX\s+(.+)")
MODULE_LABELS = {
"yobx.litert.ops.activations": "Activations",
"yobx.litert.ops.elementwise": "Element-wise",
"yobx.litert.ops.nn_ops": "Neural network",
"yobx.litert.ops.reshape_ops": "Shape / tensor manipulation",
}
MODULE_ORDER = list(MODULE_LABELS.keys())
groups = {m: [] for m in MODULE_ORDER}
for code, fn in LITERT_OP_CONVERTERS.items():
mod = fn.__module__
doc = (fn.__doc__ or "").strip().splitlines()[0].strip().rstrip(".")
m = PATTERN.match(doc)
tflite_op = (
m.group(1) if m else (builtin_op_name(code) if isinstance(code, int) else code)
)
onnx_op = m.group(2).rstrip(".") if m else "?"
if mod in groups:
groups[mod].append((tflite_op, onnx_op, fn))
for mod in MODULE_ORDER:
label = MODULE_LABELS[mod]
items = sorted(groups[mod], key=lambda x: x[0])
if not items:
continue
print(f"**{label}** (:mod:`{mod}`)")
print()
for tflite_op, onnx_op, fn in items:
link = f":func:`{fn.__name__} <{fn.__module__}.{fn.__name__}>`"
print(f"* ``{tflite_op}`` → {onnx_op} ({link})")
print()
>>>
Activations (yobx.litert.ops.activations)
ELU→Elu(alpha=1.0)(convert_elu)GELU→Gelu(convert_gelu)HARD_SWISH→HardSwish(convert_hard_swish)LEAKY_RELU→LeakyRelu(convert_leaky_relu)LOG_SOFTMAX→LogSoftmax(axis=-1)(convert_log_softmax)RELU→Relu(convert_relu)RELU_N1_TO_1→Clip(min=-1, max=1)(convert_relu_n1_to1)SOFTMAX→Softmax(axis=-1)(convert_softmax)TANH→Tanh(convert_tanh)
Element-wise (yobx.litert.ops.elementwise)
ABS→Abs(convert_abs)ADD→Add(convert_add)CEIL→Ceil(convert_ceil)DIV→Div(convert_div)EXP→Exp(convert_exp)FLOOR→Floor(convert_floor)FLOOR_DIV→Floor(Div(a, b))(convert_floor_div)LOG→Log(convert_log)LOGICAL_AND→And(convert_logical_and)LOGICAL_NOT→Not(convert_logical_not)LOGICAL_OR→Or(convert_logical_or)MUL→Mul(convert_mul)NEG→Neg(convert_neg)POW→Pow(convert_pow)ROUND→Round(convert_round)RSQRT→Reciprocal(Sqrt(x))(convert_rsqrt)SIN→Sin(convert_sin)SQRT→Sqrt(convert_sqrt)SQUARED_DIFFERENCE→Pow(Sub(a, b), 2)(convert_squared_difference)SUB→Sub(convert_sub)
Neural network (yobx.litert.ops.nn_ops)
AVERAGE_POOL_2D→AveragePool(convert_avg_pool2d)BATCH_MATMUL→MatMulwith optional transposes (convert_batch_matmul)CONV_2D→Conv(convert_conv2d)DEPTHWISE_CONV_2D→Convwithgroup=in_channels(convert_depthwise_conv2d)FULLY_CONNECTED→MatMul(+ optionalAddbias) (convert_fully_connected)MAX_POOL_2D→MaxPool(convert_max_pool2d)
Shape / tensor manipulation (yobx.litert.ops.reshape_ops)
CONCATENATION→Concat(convert_concatenation)EXPAND_DIMS→Unsqueeze(convert_expand_dims)MEAN→ReduceMean(convert_mean)REDUCE_MAX→ReduceMax(convert_reduce_max)REDUCE_MIN→ReduceMin(convert_reduce_min)RESHAPE→Reshape(convert_reshape)SQUEEZE→Squeeze(convert_squeeze)SUM→ReduceSum(convert_sum)TRANSPOSE→Transpose(convert_transpose)