code: def _assertCleanup(self, trial_executor):
      # Assert proper cleanup
      resource_manager = trial_executor._resource_manager
      self.assertFalse(resource_manager._pg_to_request)
      self.assertFalse(resource_manager._acquired_pgs)
      self.assertFalse(resource_manager._staging_future_to_pg)
      self.assertFalse(resource_manager._pg_to_staging_future)
      for rr in resource_manager._request_to_staged_pgs:
          self.assertFalse(resource_manager._request_to_staged_pgs[rr])
      for rr in resource_manager._request_to_ready_pgs:
          self.assertFalse(resource_manager._request_to_ready_pgs[rr])
  
      num_non_removed_pgs = len(
          [
              p
              for pid, p in placement_group_table().items()
              if p["state"] != "REMOVED"
          ]
      )
      self.assertEqual(num_non_removed_pgs, 0)
  
imports: import sys
  import os
  import time
  import numpy
  import unittest
  import ray
  from ray import tune
  from ray.tune.execution.ray_trial_executor import RayTrialExecutor
  from ray.tune.experiment import Trial
  from ray.tune import Callback
  from ray.tune.execution.trial_runner import TrialRunner
  from ray.tune.execution.placement_groups import PlacementGroupFactory
  from ray.util import placement_group_table
  from ray.cluster_utils import Cluster
  from ray.rllib import _register_all
label_desc: Use image node_id 3 for calling the TrialRunnerPlacementGroupTest obj's underlying member method code with example usage: obj._assertCleanup(trial_executor) without return types