code: def add_method(
      cls: t.Type[T],
      method: t.Callable[t.Concatenate[T, P], t.Any],
      name: str,
      *,
      batchable: bool = False,
      batch_dim: tuple[int, int] | int = 0,
      input_spec: LazyType[t.Any]
      | t.Tuple[LazyType[t.Any], ...]
      | None = None,
      output_spec: LazyType[t.Any] | None = None,
  ):
      meth = Runnable.method(
          method,
          batchable=batchable,
          batch_dim=batch_dim,
          input_spec=input_spec,
          output_spec=output_spec,
      )
      setattr(cls, name, meth)
      meth.__set_name__(cls, name)
  
imports: from __future__ import annotations
  import inspect
  import logging
  import typing
  from typing import TYPE_CHECKING
  from typing import overload
  import attr
  from ...exceptions import BentoMLException
  from ..types import LazyType
label_desc: Use image node_id 3 for calling the Runnable obj's underlying member method code with example usage: obj.add_method(cls, method, name) without return types