Skip to content

[Tracking Issue][TFlite] Expand Missing / Partial Operator Coverage #19412

@tlopex

Description

@tlopex

Background

Excited to see the huge progress the community has made on the Relax TFLite frontend recently — many operators and tests have landed in the last few weeks. To keep pushing this forward, this issue tracks the remaining operator gap so contributors can pick up well-scoped items in parallel.

A. Good-first-issues — drop-in mappings

Workflow: add a handler, wire into convert_map (alphabetical within its region), add one verify(TestClass, Expected) test in tests/python/relax/test_frontend_tflite.py (pattern at L55). All target Relax ops already exist — no new op work needed.

  • CUMSUMrelax.op.cumsum
  • UNIQUErelax.op.unique
  • SCATTER_NDrelax.op.scatter_nd
  • BROADCAST_TOrelax.op.broadcast_to
  • SIGNrelax.op.sign
  • BITWISE_XORrelax.op.bitwise_xor
  • RIGHT_SHIFTrelax.op.right_shift
  • BUCKETIZErelax.op.bucketize
  • EMBEDDING_LOOKUPrelax.op.take
  • SELECT_V2relax.op.where
  • RELU_0_TO_1relax.op.clip
  • NON_MAX_SUPPRESSION_V4 → port from existing convert_nms_v5

B. Medium — may need new Relax op or non-trivial decomposition

Prefer composing with existing Relax ops over adding a new op. Only register a new relax.op.* when the semantics genuinely cannot be expressed by existing primitives (e.g. random generators, bit-level reinterpret). If a decomposition using existing ops is feasible, go with that — it's a smaller PR and avoids bloating the op set.

  • REDUCE_ANY — commented at tflite_frontend.py:198; can be lowered to relax.op.max on a bool tensor, no new op needed
  • REDUCE_ALL — same, lower to relax.op.min on bool
  • RANK — emit relax.const(ndim) for static shapes; no op call needed
  • ATAN2 — compose from atan + sign + where, or add relax.op.atan2 for a cleaner impl
  • SEGMENT_SUM — reuse relax.op.scatter_nd with reduction="add" (TFLite requires sorted segment ids)
  • UNSORTED_SEGMENT_SUMscatter_nd(reduction="add")
  • UNSORTED_SEGMENT_MAXscatter_nd(reduction="max")
  • UNSORTED_SEGMENT_MINscatter_nd(reduction="min")
  • UNSORTED_SEGMENT_PRODscatter_nd(reduction="mul")
  • DYNAMIC_UPDATE_SLICE — reuse relax.op.slice_scatter
  • DILATE — likely needs a new op (or decompose via pad + strided_slice)
  • MULTINOMIAL — wrap existing relax.op.multinomial_from_uniform; blocked on RANDOM_UNIFORM
  • RANDOM_STANDARD_NORMAL — needs a new random-generator op in Relax
  • RANDOM_UNIFORM — same
  • BITCAST — needs a new reinterpret/view op
  • BROADCAST_ARGS — shape-level computation; consider static-shape-only path first

C. Fix partial implementations

These ops are already in convert_map but their handler raises OpNotImplemented on certain input patterns, making them unusable on real models that hit those patterns.

  • RANGE — handler raises on dynamic scalar inputs (tflite_frontend.py:958); should lower to relax.op.arange.
  • FILL — handler raises when dims is non-constant (L1729); should lower to relax.op.full with a dynamic shape
  • SPLIT_V — handler raises when size_splits is non-constant (L2267); decompose into dynamic strided slices.
  • NON_MAX_SUPPRESSION_V5 — handler raises on soft-NMS (L3546); needs soft_nms_sigma != 0 support
  • FAKE_QUANT — handler raises on some narrow-range vector configs (L3913)

Contributor workflow

  1. Claim an item by commenting on this issue before starting, so we avoid duplicated work.
  2. Read a recent reference PR for handler + test style.
  3. Add the handler, register in convert_map (alphabetical within its region).
  4. Add a structural-equal test following the verify(TestClass, Expected) pattern (test_frontend_tflite.py:55). Nightly-gated E2E activates automatically via CI_ENV_NIGHTLY.
  5. Tag the PR title [Relax][Frontend][TFLite].

cc @leandron

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions