code: def test_find_perf_imbalance_tables(self) -> None:
      reset_shard_rank(self.best_plan)
      for i, sharding_option in enumerate(self.best_plan):
          for j, shard in enumerate(sharding_option.shards):
              shard.rank = 2 * i + j
              shard.perf = Perf(
                  fwd_compute=2 * i,
                  fwd_comms=2 * i,
                  bwd_compute=2 * i,
                  bwd_comms=2 * i,
              )
  
      expected_max_perf_table_names = ["table_9"]
      max_perf_table_names = [
          sharding_option.name
          for sharding_option in _find_imbalance_tables(self.best_plan)
      ]
      self.assertTrue(
          expected_max_perf_table_names, max_perf_table_names
      )
  
file_path: torchrec/torchrec/distributed/planner/tests/test_utils.py
imports: import unittest
  from typing import Callable, List
  from unittest.mock import MagicMock
  from torchrec.distributed.planner.types import Perf, Shard, ShardingOption, Storage
  from torchrec.distributed.planner.utils import _find_imbalance_tables, BinarySearchPredicate, reset_shard_rank
  from torchrec.distributed.types import ShardingType
label_desc: Use image node_id 2 for calling the TestFindImbalanceTables obj's underlying member method code with example usage: obj.test_find_perf_imbalance_tables() without return types