code: def test_multi_indexer(self):
      multi_indexer = indexers.MultiIndexer(
          [
              indexers.IdIndexer("user", "tenant", "actual_uid", True),
              indexers.IdIndexer("res", "tenant", "actual_rid", True),
          ],
      )
  
      df = self.create_sample_dataframe()
      model = multi_indexer.fit(df)
      new_df = model.transform(df)
  
      assert new_df.count() == df.count()
      assert new_df.filter(f.col("actual_uid") <= 0).count() == 0
      assert new_df.filter(f.col("actual_rid") <= 0).count() == 0
  
      assert (
          0
          == new_df.filter(
              f.col("expected_uid") != f.col("actual_uid")
          ).count()
      )
  
      assert (
          0
          == new_df.filter(
              f.col("expected_rid") != f.col("actual_rid")
          ).count()
      )
  
file_path: SynapseML/core/src/test/python/synapsemltest/cyber/feature/test_indexers.py
imports: import unittest
  from typing import Type
  from pyspark.sql import types, functions
  from synapse.ml.cyber.feature import indexers
  from synapsemltest.cyber.explain_tester import ExplainTester
  from synapsemltest.spark import *
label_desc: Use image node_id 3 for calling the TestIndexers obj's underlying member method code with example usage: obj.test_multi_indexer() without return types