code: def sync_select_federated(ctx: Context, selection_obj, data):
      cur_selected_mask = ctx.guest.get(
          f"selected_mask_{selection_obj.method}"
      )
      # logger.info(f"cur_selected_mask: {cur_selected_mask}")
      columns, anonymous_columns = (
          data.schema.columns,
          data.schema.anonymous_columns,
      )
      # logger.info(f"anonymous columns: {data.schema.anonymous_columns}")
      new_index = [
          columns[anonymous_columns.get_loc(col)]
          for col in cur_selected_mask.index
      ]
      cur_selected_mask.index = new_index
      prev_selected_mask = selection_obj._prev_selected_mask[
          selection_obj._prev_selected_mask
      ]
      missing_col = set(prev_selected_mask.index).difference(
          set(new_index)
      )
      if missing_col:
          raise ValueError(
              f"results for columns: {missing_col} not found in received selection result."
          )
      cur_selected_mask = [
          cur_selected_mask.get(col, False)
          for col in selection_obj._header
      ]
      selected_mask = (
          selection_obj._prev_selected_mask & cur_selected_mask
      )
      selection_obj.set_selected_mask(selected_mask)
  
imports: import copy
  import logging
  import math
  import random
  import numpy
  import pandas
  from fate.arch import Context
  from ..abc.module import HeteroModule, Module
label_desc: Use image node_id 3 for calling the HeteroSelectionModuleHost obj's underlying member method code with example usage: obj.sync_select_federated(ctx, selection_obj, data) without return types