code: def test_multi_indexer_non_per_tenant(self):
      multi_indexer = indexers.MultiIndexer(
          [
              indexers.IdIndexer("user", "tenant", "actual_uid", False),
              indexers.IdIndexer("res", "tenant", "actual_rid", False),
          ],
      )
  
      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
  
      user_count = df.select("tenant", "user").distinct().count()
      res_count = df.select("tenant", "res").distinct().count()
  
      assert (
          new_df.select("actual_uid").distinct().count() == user_count
      )
      assert new_df.select("actual_rid").distinct().count() == res_count
  
      stats_row = new_df.select(
          f.min("actual_uid").alias("min_uid"),
          f.max("actual_uid").alias("max_uid"),
          f.min("actual_rid").alias("min_rid"),
          f.max("actual_rid").alias("max_rid"),
      ).first()
  
      assert (stats_row["min_uid"] == 1) and (
          stats_row["max_uid"] == user_count
      )
      assert (stats_row["min_rid"] == 1) and (
          stats_row["max_rid"] == res_count
      )
  
      orig_df = (
          model.undo_transform(new_df)
          .select("tenant", "user", "res")
          .orderBy("tenant", "user", "res")
      )
  
      assert (
          df.select("tenant", "user", "res")
          .orderBy("tenant", "user", "res")
          .collect()
          == orig_df.collect()
      )
  
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 5 for calling the TestIndexers obj's underlying member method code with example usage: obj.test_multi_indexer_non_per_tenant() without return types