code: def add_actor(
      self,
      cls: Union[Type, ray.actor.ActorClass],
      kwargs: Dict[str, Any],
      resource_request: ResourceRequest,
      *,
      on_start: Optional[Callable[[TrackedActor], None]] = None,
      on_stop: Optional[Callable[[TrackedActor], None]] = None,
      on_error: Optional[
          Callable[[TrackedActor, Exception], None]
      ] = None,
  ) -> TrackedActor:
      fake_actor_ref = uuid.uuid4().int
      tracked_actor = TrackedActor(
          fake_actor_ref,
          on_start=on_start,
          on_stop=on_stop,
          on_error=on_error,
      )
      self._live_actors_to_ray_actors_resources[tracked_actor] = (
          fake_actor_ref,
      )
      self.added_actors.append((tracked_actor, cls, kwargs))
      return tracked_actor
  
imports: import os
  import uuid
  from typing import Any, Callable, Dict, Optional, Tuple, Type, Union
  import ray
  from ray.air.execution import FixedResourceManager
  from ray.air.execution._internal import RayActorManager
  from ray.air.execution.resources import ResourceManager, ResourceRequest
  from ray.air.execution._internal.tracked_actor import TrackedActor
  from ray.tune.execution.tune_controller import TuneController
  from ray.tune.experiment import Trial
  from ray.tune.utils.resource_updater import _ResourceUpdater
  from ray.train.tests.util import mock_storage_context
label_desc: Use image node_id 2 for calling the NoopActorManager obj's underlying member method code with example usage: obj.add_actor(cls, kwargs, resource_request) and returns: tracked_actor