71c634f8b1
## Summary This PR adds support for the TFLite `RANDOM_UNIFORM`, `RANDOM_STANDARD_NORMAL`, and `MULTINOMIAL` operators in the Relax TFLite frontend, covering the items I claimed in #19412. `RANDOM_UNIFORM` and `RANDOM_STANDARD_NORMAL` are lowered to seeded `tvm.contrib.random` calls with dynamic shape support. `MULTINOMIAL` is lowered by composing existing Relax ops around `relax.op.multinomial_from_uniform`. ## Changes ### Frontend 1. Add converter registrations for `RANDOM_UNIFORM`, `RANDOM_STANDARD_NORMAL`, and `MULTINOMIAL`. 2. Add shared helpers to: - parse TFLite `RandomOptions` seeds - convert shape tensors to Relax shape expressions for dynamic-shape random ops 3. Lower `RANDOM_UNIFORM` to `tvm.contrib.random.uniform`. 4. Lower `RANDOM_STANDARD_NORMAL` to `tvm.contrib.random.normal`. 5. Lower `MULTINOMIAL` by: - applying `R.nn.softmax` to logits - generating seeded uniform samples - calling `R.multinomial_from_uniform` - reshaping the result to `[batch_size, num_samples]` ### Runtime 1. Extend `src/runtime/contrib/random/random.cc` to accept seeded calls for `tvm.contrib.random.uniform` and `tvm.contrib.random.normal`. 2. Preserve compatibility with the existing unseeded calling convention. ## Testing All tests pass: ```bash pytest tests/python/relax/test_frontend_tflite.py::test_random_uniform_dynamic_shape \ tests/python/relax/test_frontend_tflite.py::test_random_standard_normal_dynamic_shape \ tests/python/relax/test_frontend_tflite.py::test_multinomial_dynamic_num_samples -v ``` ## References - #19412 - Claimed items: MULTINOMIAL, RANDOM_STANDARD_NORMAL, RANDOM_UNIFORM