code: def type_inference(self):
      self._check_peephole_weights()
      padded_len = self.x.shape[0]
      ret_shape = [padded_len] + list(self.c_prev.shape)
      dtype = self.x.dtype
      # All returned shapes are [padded_len, b, hidden_dim]
      return (
          types.tensor(dtype, ret_shape),  # i
          types.tensor(dtype, ret_shape),  # cs
          types.tensor(dtype, ret_shape),  # f
          types.tensor(dtype, ret_shape),  # o
          types.tensor(dtype, ret_shape),  # ci
          types.tensor(dtype, ret_shape),  # co
          types.tensor(dtype, ret_shape),
      )
  
file_path: turicreate/src/external/coremltools_wrap/coremltools/coremltools/converters/mil/frontend/tensorflow/dialect_ops.py
imports: from coremltools.converters.mil.mil import types
  from coremltools.converters.mil.mil import Operation
  from coremltools.converters.mil.mil.input_type import *
  from coremltools.converters.mil.mil.ops.registry import SSAOpRegistry
label_desc: Use image node_id 2 for calling the tf_lstm_block obj's underlying member method code with example usage: obj.type_inference() and returns: types,  types,  types,  types,  types,  types,  types