)]}'
{
  "commit": "e89570fa8321ebf9951e6d8f512eda764216b256",
  "tree": "16a6f3f65113d3f3f95734f38da72d0d8796ef6e",
  "parents": [
    "0d7011230040835a6739d32c4f04dba44b2b10af"
  ],
  "author": {
    "name": "YinHanke",
    "email": "hankeyin@gmail.com",
    "time": "Fri May 29 14:17:15 2026 +0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri May 29 02:17:15 2026 -0400"
  },
  "message": "[Relax][Frontend][TFLite] Add RNN converter (#19632)\n\n## Summary\n\nAdd Relax TFLite frontend support for `RNN` (BuiltinOperator 23),\nclaimed in [#19519](https://github.com/apache/tvm/issues/19519) Group A.\n\nSingle-step RNN cell:\n```\nh \u003d fused_activation(x @ W.T + h @ Wr.T + b)\n```\n\n## Changes\n\n- **Handler**: `convert_rnn` registered in `convert_map` (alphabetical,\nafter `RANGE`)\n- **Inputs** (5): `input [batch, input_size]`, `input_weights\n[num_units, input_size]`, `recurrent_weights [num_units, num_units]`,\n`bias [num_units]`, `hidden_state [batch, num_units]` (variable,\nzero-initialised)\n- **Output**: `[batch, num_units]`\n- **Activations**: all fused activations via\n`convert_fused_activation_function`\n- **Quantized**: raises `OpNotImplemented`\n\n## Testing\n\nTwo tests added to `tests/python/relax/test_frontend_tflite.py`:\n\n- `test_rnn_none_activation` — `tvm.ir.assert_structural_equal` with\nidentity weights, NONE activation\n- `test_rnn_relu_activation` — shape check, random weights, RELU\nactivation\n\n```bash\npython -m pytest tests/python/relax/test_frontend_tflite.py -k rnn -v\n```\n\n## References\n\n- Issue [#19519](https://github.com/apache/tvm/issues/19519) Group A:\nSequence / recurrent model operators",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "65c0faadc2702fc9bbb23a8b1fe4f3267d543c24",
      "old_mode": 33188,
      "old_path": "python/tvm/relax/frontend/tflite/tflite_frontend.py",
      "new_id": "87f0f12b1bbdd5d2d22eadc87f668e17be11bf28",
      "new_mode": 33188,
      "new_path": "python/tvm/relax/frontend/tflite/tflite_frontend.py"
    },
    {
      "type": "modify",
      "old_id": "9e91c09c2dc4eb068457fca5f489d0bba2e9c123",
      "old_mode": 33188,
      "old_path": "tests/python/relax/test_frontend_tflite.py",
      "new_id": "7c5951d631eabb2e484a0a14980283c64fe82e61",
      "new_mode": 33188,
      "new_path": "tests/python/relax/test_frontend_tflite.py"
    }
  ]
}
