TF to TFLite conversion of model gives error op is neither a custom op nor a flex op
Attaching the saved model zip file again, as I don't think it got attached above.
[qam_modulator.zip](https://github.com/tensorflow/tensorflow/files/10563521/qam_modulator.zip)
 @mohantym 
I was able to reproduce the issue on Colab using Tf v2.11. Please find the gist [here](https://colab.research.google.com/gist/tiruk007/2d9bc72f24872557112cdec4c797a16d/untitled102.ipynb) for reference.

Thank you! Hi @tiruk007 and @mohantym, thanks for reproducing the issue. Do you have any suggestions for fixing? Thanks! Hi @gsirocco !
Sorry for the late response.
I am able to replicate this issue in [2.10](https://colab.sandbox.google.com/gist/mohantym/4470c1459ef06fa867f593cc6c8977b9/git_59517.ipynb#scrollTo=Bnbpcg4ad8Iy), [2.11](https://colab.sandbox.google.com/gist/mohantym/103ed63717558cd1fb53ded5ab20dab8/git_59517.ipynb) and  [nightly](https://colab.sandbox.google.com/gist/mohantym/398d6ff37e8fe070543c8210f5260672/git_59517.ipynb#scrollTo=G8h2VdKoYSWk) .

For custom ops issues, Please register the customs ops in lite kernels and follow [custom_ops documentation](https://www.tensorflow.org/lite/guide/ops_custom) for reference.

Thank you! Hi @mohantym 
Thanks for the information. My ultimate goal after conversion to TFLite is to be able to run this model entirely on Edge TPU.
I just want to confirm if going through this procedure will allow this to happen or if I will ultimately need to rewrite some portion of the model for TPU integer compatibility. Thanks!!

Also, do all these operators need to be registered and converted?
```
Some ops are not supported by the native TFLite runtime, you can enable TF kernels fallback using TF Select. See instructions: https://www.tensorflow.org/lite/guide/ops_select
TF Select ops: AsString, FloorDiv, FloorMod, HashTableV2, LookupTableFindV2, LookupTableImportV2, ReduceJoin
Details:
        tf.AsString(tensor<2025x4xi8>) -> (tensor<2025x4x!tf_type.string>) : {device = "", fill = "", precision = -1 : i64, scientific = false, shortest = false, width = -1 : i64}
        tf.FloorDiv(tensor<2025x1x1xui8>, tensor<8xui8>) -> (tensor<2025x1x8xui8>) : {device = ""}
        tf.FloorMod(tensor<2025x1x8xi8>, tensor<i8>) -> (tensor<2025x1x8xi8>) : {device = ""}
        tf.HashTableV2() -> (tensor<!tf_type.resource>) : {container = "", device = "", key_dtype = !tf_type.string, shared_name = "61254", use_node_name_sharing = false, value_dtype = i32}
        tf.LookupTableFindV2(tensor<!tf_type.resource>, tensor<2025x!tf_type.string>, tensor<i32>) -> (tensor<*xi32>) : {device = ""}
        tf.LookupTableImportV2(tensor<!tf_type.resource>, tensor<16x!tf_type.string>, tensor<16xi32>) -> () : {device = ""}
        tf.ReduceJoin(tensor<2025x4x!tf_type.string>, tensor<i32>) -> (tensor<2025x!tf_type.string>) : {device = "", keep_dims = false, separator = ""}
``` @gsirocco !
For edge_tpu specific optimization,  Could you route it to[ Google/coral ](https://github.com/google-coral/edgetpu)repo /[TF-forum ](https://discuss.tensorflow.org/)for further assistance .
Thank you! As suspected, the TPU will not run any custom ops above, so the QAM Modulator model must be rewritten so the ops above use the ones in this [list](https://coral.ai/docs/edgetpu/models-intro/#supported-operations) Are you satisfied with the resolution of your issue?
<a href="https://docs.google.com/forms/d/e/1FAIpQLSfaP12TRhd9xSxjXZjcZFNXPGk4kc1-qMdv3gc6bEP90vY1ew/viewform?entry.85265664=Yes&entry.2137816233=https://github.com/tensorflow/tensorflow/issues/59517">Yes</a>
<a href="https://docs.google.com/forms/d/e/1FAIpQLSfaP12TRhd9xSxjXZjcZFNXPGk4kc1-qMdv3gc6bEP90vY1ew/viewform?entry.85265664=No&entry.2137816233=https://github.com/tensorflow/tensorflow/issues/59517">No</a>

### 1. System information

- OS Platform and Distribution (e.g., Linux Ubuntu 16.04): Ubuntu 20.04.4 
- TensorFlow installation (pip package or built from source): pip package
- TensorFlow library (version, if pip package or github SHA, if built from source): 2.11.0

### 2. Code

Provide code to help us reproduce your issues using one of the following options:

#### Option B: Paste your code here or provide a link to a custom end-to-end colab

```
import tensorflow as tf
from tensorflow import keras
import pickle
import numpy as np
import sys

print(tf.__version__)
root_dir = "~/"
saved_model_dir = root_dir+"updatetf/softphy/src/qam_modulator"

def representative_dataset():
  for _ in range(100):
      data = np.random.randint(0, 2, (16200,))
      yield [data.astype(np.float32)]

converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.representative_dataset = representative_dataset
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.target_spec.supported_types = [tf.int8]
converter.inference_input_type = tf.int8 # or tf.uint8
converter.inference_output_type = tf.int8 # or tf.uint8

tflite_quant_model = converter.convert()

fileName = 'qammodmodel.tflite'
with open(fileName, 'wb') as f:
     f.write(tflite_quant_model)

```

### 3. Failure after conversion

The conversion fails as below, saved model dir is attached a zip file. I'm not sure what needs to be changed to fix this. Eventually, I'd like to convert the TFLite model to run on TPU. Thanks!


### 5. (optional) Any other info / logs
```
2023-02-02 00:04:34.283275: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2023-02-02 00:04:35.515897: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory
2023-02-02 00:04:35.515975: I tensorflow/compiler/xla/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
2023-02-02 00:04:39.225887: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer.so.7'; dlerror: li
[qam_modulator.zip](https://github.com/tensorflow/tensorflow/files/10563501/qam_modulator.zip)
bnvinfer.so.7: cannot open shared object file: No such file or directory
2023-02-02 00:04:39.226056: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer_plugin.so.7'; dlerror: libnvinfer_plugin.so.7: cannot open shared object file: No such file or directory
2023-02-02 00:04:39.226075: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.
2.11.0
2023-02-02 00:04:43.533858: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcuda.so.1'; dlerror: libcuda.so.1: cannot open shared object file: No such file or directory
2023-02-02 00:04:43.539556: W tensorflow/compiler/xla/stream_executor/cuda/cuda_driver.cc:265] failed call to cuInit: UNKNOWN ERROR (303)
2023-02-02 00:04:43.539649: I tensorflow/compiler/xla/stream_executor/cuda/cuda_diagnostics.cc:156] kernel driver does not appear to be running on this host (ubuntugsosnow): /proc/driver/nvidia/version does not exist
2023-02-02 00:04:43.541318: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2023-02-02 00:04:44.421918: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:362] Ignored output_format.
2023-02-02 00:04:44.421999: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:365] Ignored drop_control_dependency.
2023-02-02 00:04:44.427118: I tensorflow/cc/saved_model/reader.cc:45] Reading SavedModel from: /home/gsosnow/doc/updatetf/softphy/src/qam_modulator
2023-02-02 00:04:44.430879: I tensorflow/cc/saved_model/reader.cc:89] Reading meta graph with tags { serve }
2023-02-02 00:04:44.430967: I tensorflow/cc/saved_model/reader.cc:130] Reading SavedModel debug info (if present) from: /home/gsosnow/doc/updatetf/softphy/src/qam_modulator
2023-02-02 00:04:44.447508: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:357] MLIR V1 optimization pass is not enabled
2023-02-02 00:04:44.448994: I tensorflow/cc/saved_model/loader.cc:229] Restoring SavedModel bundle.
2023-02-02 00:04:44.494916: I tensorflow/cc/saved_model/loader.cc:213] Running initialization op on SavedModel bundle at path: /home/gsosnow/doc/updatetf/softphy/src/qam_modulator
2023-02-02 00:04:44.535778: I tensorflow/cc/saved_model/loader.cc:305] SavedModel load for tags { serve }; Status: success: OK. Took 111428 microseconds.
2023-02-02 00:04:44.619260: I tensorflow/compiler/mlir/tensorflow/utils/dump_mlir_util.cc:268] disabling MLIR crash reproducer, set env var `MLIR_CRASH_REPRODUCER_DIRECTORY` to enable.
loc(fused["HashTableV2:", "qam_table"]): error: 'tf.HashTableV2' op is neither a custom op nor a flex op
loc(callsite(callsite(fused["FloorDiv:", "model_2/qam_mod_11/floordiv@__inference__wrapped_model_81624"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall@__inference_signature_wrapper_81882"]) at fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"])): error: 'tf.FloorDiv' op is neither a custom op nor a flex op
loc(callsite(callsite(fused["FloorMod:", "model_2/qam_mod_11/FloorMod@__inference__wrapped_model_81624"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall@__inference_signature_wrapper_81882"]) at fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"])): error: 'tf.FloorMod' op is neither a custom op nor a flex op
loc(callsite(callsite(fused["AsString:", "model_2/qam_mod_11/AsString@__inference__wrapped_model_81624"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall@__inference_signature_wrapper_81882"]) at fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"])): error: 'tf.AsString' op is neither a custom op nor a flex op
loc(callsite(callsite(fused["ReduceJoin:", "model_2/qam_mod_11/ReduceJoin/ReduceJoin@__inference__wrapped_model_81624"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall@__inference_signature_wrapper_81882"]) at fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"])): error: 'tf.ReduceJoin' op is neither a custom op nor a flex op
loc(callsite(callsite(fused["LookupTableFindV2:", "model_2/qam_mod_11/None_Lookup/LookupTableFindV2@__inference__wrapped_model_81624"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall@__inference_signature_wrapper_81882"]) at fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"])): error: 'tf.LookupTableFindV2' op is neither a custom op nor a flex op
loc(callsite(callsite(fused["AsString:", "model_2/qam_mod_11/AsString_1@__inference__wrapped_model_81624"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall@__inference_signature_wrapper_81882"]) at fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"])): error: 'tf.AsString' op is neither a custom op nor a flex op
loc(callsite(callsite(fused["ReduceJoin:", "model_2/qam_mod_11/ReduceJoin_1/ReduceJoin@__inference__wrapped_model_81624"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall@__inference_signature_wrapper_81882"]) at fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"])): error: 'tf.ReduceJoin' op is neither a custom op nor a flex op
loc(callsite(callsite(fused["LookupTableFindV2:", "model_2/qam_mod_11/None_Lookup_1/LookupTableFindV2@__inference__wrapped_model_81624"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall@__inference_signature_wrapper_81882"]) at fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"])): error: 'tf.LookupTableFindV2' op is neither a custom op nor a flex op
loc(fused["HashTableV2:", "qam_table"]): error: 'tf.HashTableV2' op is neither a custom op nor a flex op
loc(callsite(fused["LookupTableImportV2:", "key_value_init61252/LookupTableImportV2@__inference_<lambda>_81959"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall"])): error: 'tf.LookupTableImportV2' op is neither a custom op nor a flex op
2023-02-02 00:04:44.806180: W tensorflow/compiler/mlir/lite/flatbuffer_export.cc:2035] Graph contains the following resource op(s), that use(s) resource type. Currently, the resource type is not natively supported in TFLite. Please consider not using the resource type if there are issues with either TFLite converter or TFLite runtime:
Resource ops: HashTableV2, LookupTableFindV2, LookupTableImportV2
Details:
        tf.HashTableV2() -> (tensor<!tf_type.resource>) : {container = "", device = "", key_dtype = !tf_type.string, shared_name = "61254", use_node_name_sharing = false, value_dtype = i32}
        tf.LookupTableFindV2(tensor<!tf_type.resource>, tensor<2025x!tf_type.string>, tensor<i32>) -> (tensor<*xi32>) : {device = ""}
        tf.LookupTableImportV2(tensor<!tf_type.resource>, tensor<16x!tf_type.string>, tensor<16xi32>) -> () : {device = ""}
error: failed while converting: 'main':
Some ops are not supported by the native TFLite runtime, you can enable TF kernels fallback using TF Select. See instructions: https://www.tensorflow.org/lite/guide/ops_select
TF Select ops: AsString, FloorDiv, FloorMod, HashTableV2, LookupTableFindV2, LookupTableImportV2, ReduceJoin
Details:
        tf.AsString(tensor<2025x4xi8>) -> (tensor<2025x4x!tf_type.string>) : {device = "", fill = "", precision = -1 : i64, scientific = false, shortest = false, width = -1 : i64}
        tf.FloorDiv(tensor<2025x1x1xui8>, tensor<8xui8>) -> (tensor<2025x1x8xui8>) : {device = ""}
        tf.FloorMod(tensor<2025x1x8xi8>, tensor<i8>) -> (tensor<2025x1x8xi8>) : {device = ""}
        tf.HashTableV2() -> (tensor<!tf_type.resource>) : {container = "", device = "", key_dtype = !tf_type.string, shared_name = "61254", use_node_name_sharing = false, value_dtype = i32}
        tf.LookupTableFindV2(tensor<!tf_type.resource>, tensor<2025x!tf_type.string>, tensor<i32>) -> (tensor<*xi32>) : {device = ""}
        tf.LookupTableImportV2(tensor<!tf_type.resource>, tensor<16x!tf_type.string>, tensor<16xi32>) -> () : {device = ""}
        tf.ReduceJoin(tensor<2025x4x!tf_type.string>, tensor<i32>) -> (tensor<2025x!tf_type.string>) : {device = "", keep_dims = false, separator = ""}

Traceback (most recent call last):
  File "/home/gsosnow/doc/qammodt2tf.py", line 38, in <module>
    tflite_quant_model = converter.convert()
  File "/home/gsosnow/anaconda3/lib/python3.9/site-packages/tensorflow/lite/python/lite.py", line 933, in wrapper
    return self._convert_and_export_metrics(convert_func, *args, **kwargs)
  File "/home/gsosnow/anaconda3/lib/python3.9/site-packages/tensorflow/lite/python/lite.py", line 911, in _convert_and_export_metrics
    result = convert_func(self, *args, **kwargs)
  File "/home/gsosnow/anaconda3/lib/python3.9/site-packages/tensorflow/lite/python/lite.py", line 1216, in convert
    return self._convert_from_saved_model(graph_def)
  File "/home/gsosnow/anaconda3/lib/python3.9/site-packages/tensorflow/lite/python/lite.py", line 1099, in _convert_from_saved_model
    result = _convert_saved_model(**converter_kwargs)
  File "/home/gsosnow/anaconda3/lib/python3.9/site-packages/tensorflow/lite/python/convert_phase.py", line 212, in wrapper
    raise converter_error from None  # Re-throws the exception.
  File "/home/gsosnow/anaconda3/lib/python3.9/site-packages/tensorflow/lite/python/convert_phase.py", line 205, in wrapper
    return func(*args, **kwargs)
  File "/home/gsosnow/anaconda3/lib/python3.9/site-packages/tensorflow/lite/python/convert.py", line 808, in convert_saved_model
    data = convert(
  File "/home/gsosnow/anaconda3/lib/python3.9/site-packages/tensorflow/lite/python/convert.py", line 310, in convert
    raise converter_error
tensorflow.lite.python.convert_phase.ConverterError: <unknown>:0: error: loc(fused["HashTableV2:", "qam_table"]): 'tf.HashTableV2' op is neither a custom op nor a flex op
<unknown>:0: note: loc(fused["HashTableV2:", "qam_table"]): Error code: ERROR_NEEDS_FLEX_OPS
<unknown>:0: error: loc(callsite(callsite(fused["FloorDiv:", "model_2/qam_mod_11/floordiv@__inference__wrapped_model_81624"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall@__inference_signature_wrapper_81882"]) at fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"])): 'tf.FloorDiv' op is neither a custom op nor a flex op
<unknown>:0: note: loc(fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"]): called from
<unknown>:0: note: loc(callsite(callsite(fused["FloorDiv:", "model_2/qam_mod_11/floordiv@__inference__wrapped_model_81624"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall@__inference_signature_wrapper_81882"]) at fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"])): Error code: ERROR_NEEDS_FLEX_OPS
<unknown>:0: error: loc(callsite(callsite(fused["FloorMod:", "model_2/qam_mod_11/FloorMod@__inference__wrapped_model_81624"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall@__inference_signature_wrapper_81882"]) at fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"])): 'tf.FloorMod' op is neither a custom op nor a flex op
<unknown>:0: note: loc(fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"]): called from
<unknown>:0: note: loc(callsite(callsite(fused["FloorMod:", "model_2/qam_mod_11/FloorMod@__inference__wrapped_model_81624"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall@__inference_signature_wrapper_81882"]) at fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"])): Error code: ERROR_NEEDS_FLEX_OPS
<unknown>:0: error: loc(callsite(callsite(fused["AsString:", "model_2/qam_mod_11/AsString@__inference__wrapped_model_81624"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall@__inference_signature_wrapper_81882"]) at fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"])): 'tf.AsString' op is neither a custom op nor a flex op
<unknown>:0: note: loc(fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"]): called from
<unknown>:0: note: loc(callsite(callsite(fused["AsString:", "model_2/qam_mod_11/AsString@__inference__wrapped_model_81624"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall@__inference_signature_wrapper_81882"]) at fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"])): Error code: ERROR_NEEDS_FLEX_OPS
<unknown>:0: error: loc(callsite(callsite(fused["ReduceJoin:", "model_2/qam_mod_11/ReduceJoin/ReduceJoin@__inference__wrapped_model_81624"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall@__inference_signature_wrapper_81882"]) at fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"])): 'tf.ReduceJoin' op is neither a custom op nor a flex op
<unknown>:0: note: loc(fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"]): called from
<unknown>:0: note: loc(callsite(callsite(fused["ReduceJoin:", "model_2/qam_mod_11/ReduceJoin/ReduceJoin@__inference__wrapped_model_81624"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall@__inference_signature_wrapper_81882"]) at fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"])): Error code: ERROR_NEEDS_FLEX_OPS
<unknown>:0: error: loc(callsite(callsite(fused["LookupTableFindV2:", "model_2/qam_mod_11/None_Lookup/LookupTableFindV2@__inference__wrapped_model_81624"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall@__inference_signature_wrapper_81882"]) at fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"])): 'tf.LookupTableFindV2' op is neither a custom op nor a flex op
<unknown>:0: note: loc(fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"]): called from
<unknown>:0: note: loc(callsite(callsite(fused["LookupTableFindV2:", "model_2/qam_mod_11/None_Lookup/LookupTableFindV2@__inference__wrapped_model_81624"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall@__inference_signature_wrapper_81882"]) at fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"])): Error code: ERROR_NEEDS_FLEX_OPS
<unknown>:0: error: loc(callsite(callsite(fused["AsString:", "model_2/qam_mod_11/AsString_1@__inference__wrapped_model_81624"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall@__inference_signature_wrapper_81882"]) at fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"])): 'tf.AsString' op is neither a custom op nor a flex op
<unknown>:0: note: loc(fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"]): called from
<unknown>:0: note: loc(callsite(callsite(fused["AsString:", "model_2/qam_mod_11/AsString_1@__inference__wrapped_model_81624"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall@__inference_signature_wrapper_81882"]) at fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"])): Error code: ERROR_NEEDS_FLEX_OPS
<unknown>:0: error: loc(callsite(callsite(fused["ReduceJoin:", "model_2/qam_mod_11/ReduceJoin_1/ReduceJoin@__inference__wrapped_model_81624"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall@__inference_signature_wrapper_81882"]) at fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"])): 'tf.ReduceJoin' op is neither a custom op nor a flex op
<unknown>:0: note: loc(fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"]): called from
<unknown>:0: note: loc(callsite(callsite(fused["ReduceJoin:", "model_2/qam_mod_11/ReduceJoin_1/ReduceJoin@__inference__wrapped_model_81624"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall@__inference_signature_wrapper_81882"]) at fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"])): Error code: ERROR_NEEDS_FLEX_OPS
<unknown>:0: error: loc(callsite(callsite(fused["LookupTableFindV2:", "model_2/qam_mod_11/None_Lookup_1/LookupTableFindV2@__inference__wrapped_model_81624"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall@__inference_signature_wrapper_81882"]) at fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"])): 'tf.LookupTableFindV2' op is neither a custom op nor a flex op
<unknown>:0: note: loc(fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"]): called from
<unknown>:0: note: loc(callsite(callsite(fused["LookupTableFindV2:", "model_2/qam_mod_11/None_Lookup_1/LookupTableFindV2@__inference__wrapped_model_81624"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall@__inference_signature_wrapper_81882"]) at fused["StatefulPartitionedCall:", "StatefulPartitionedCall_1"])): Error code: ERROR_NEEDS_FLEX_OPS
<unknown>:0: error: loc(fused["HashTableV2:", "qam_table"]): 'tf.HashTableV2' op is neither a custom op nor a flex op
<unknown>:0: note: loc(fused["HashTableV2:", "qam_table"]): Error code: ERROR_NEEDS_FLEX_OPS
<unknown>:0: error: loc(callsite(fused["LookupTableImportV2:", "key_value_init61252/LookupTableImportV2@__inference_<lambda>_81959"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall"])): 'tf.LookupTableImportV2' op is neither a custom op nor a flex op
<unknown>:0: note: loc(fused["StatefulPartitionedCall:", "StatefulPartitionedCall"]): called from
<unknown>:0: note: loc(callsite(fused["LookupTableImportV2:", "key_value_init61252/LookupTableImportV2@__inference_<lambda>_81959"] at fused["StatefulPartitionedCall:", "StatefulPartitionedCall"])): Error code: ERROR_NEEDS_FLEX_OPS
<unknown>:0: error: failed while converting: 'main':
Some ops are not supported by the native TFLite runtime, you can enable TF kernels fallback using TF Select. See instructions: https://www.tensorflow.org/lite/guide/ops_select
TF Select ops: AsString, FloorDiv, FloorMod, HashTableV2, LookupTableFindV2, LookupTableImportV2, ReduceJoin
Details:
        tf.AsString(tensor<2025x4xi8>) -> (tensor<2025x4x!tf_type.string>) : {device = "", fill = "", precision = -1 : i64, scientific = false, shortest = false, width = -1 : i64}
        tf.FloorDiv(tensor<2025x1x1xui8>, tensor<8xui8>) -> (tensor<2025x1x8xui8>) : {device = ""}
        tf.FloorMod(tensor<2025x1x8xi8>, tensor<i8>) -> (tensor<2025x1x8xi8>) : {device = ""}
        tf.HashTableV2() -> (tensor<!tf_type.resource>) : {container = "", device = "", key_dtype = !tf_type.string, shared_name = "61254", use_node_name_sharing = false, value_dtype = i32}
        tf.LookupTableFindV2(tensor<!tf_type.resource>, tensor<2025x!tf_type.string>, tensor<i32>) -> (tensor<*xi32>) : {device = ""}
        tf.LookupTableImportV2(tensor<!tf_type.resource>, tensor<16x!tf_type.string>, tensor<16xi32>) -> () : {device = ""}
        tf.ReduceJoin(tensor<2025x4x!tf_type.string>, tensor<i32>) -> (tensor<2025x!tf_type.string>) : {device = "", keep_dims = false, separator = ""}

```
