code: def __rename_columns(self):
      # self.logger.info("Replace restricted symbols in column names")
      new_columns = []
      dup_counter = 0
      for column in self.data.columns:
          if column in [TARGET, EVAL_SET_INDEX, SYSTEM_RECORD_ID]:
              self.columns_renaming[column] = column
              new_columns.append(column)
              continue
  
          new_column = str(column)
          suffix = hashlib.sha256(new_column.encode()).hexdigest()[:6]
          if len(new_column) == 0:
              raise ValidationError(
                  bundle.get("dataset_empty_column_names")
              )
          # db limit for column length
          if len(new_column) > 250:
              new_column = new_column[:250]
  
          # make column name unique relative to server features
          new_column = f"{new_column}_{suffix}"
  
          new_column = new_column.lower()
  
          # if column starts with non alphabetic symbol then add "a" to the beginning of string
          if ord(new_column[0]) not in range(ord("a"), ord("z") + 1):
              new_column = "a" + new_column
  
          # replace unsupported characters to "_"
          for idx, c in enumerate(new_column):
              if ord(c) not in range(ord("a"), ord("z") + 1) and ord(
                  c
              ) not in range(ord("0"), ord("9") + 1):
                  new_column = (
                      new_column[:idx] + "_" + new_column[idx + 1 :]
                  )
  
          if new_column in new_columns:
              new_column = f"{new_column}_{dup_counter}"
              dup_counter += 1
          new_columns.append(new_column)
  
          # self.data.columns.values[col_idx] = new_column
          # self.rename(columns={column: new_column}, inplace=True)
          self.meaning_types = {
              (new_column if key == str(column) else key): value
              for key, value in self.meaning_types_checked.items()
          }
          self.search_keys = [
              tuple(
                  new_column if key == str(column) else key
                  for key in keys
              )
              for keys in self.search_keys_checked
          ]
          self.columns_renaming[new_column] = str(column)
      self.data.columns = new_columns
      self.etalon_def = None
  
imports: import csv
  import hashlib
  import logging
  import tempfile
  import time
  from ipaddress import IPv4Address, IPv6Address, _BaseAddress, ip_address
  from pathlib import Path
  from typing import Any, Callable, Dict, List, Optional, Tuple, Union
  import numpy
  import pandas
  from pandas.api.types import is_bool_dtype
  from pandas.api.types import is_datetime64_any_dtype
  from pandas.api.types import is_float_dtype, is_integer_dtype, is_numeric_dtype, is_string_dtype
  from pandas.core.dtypes.common import is_period_dtype
  from upgini.errors import ValidationError
  from upgini.http import ProgressStage, SearchProgress, get_rest_client
  from upgini.metadata import EVAL_SET_INDEX, SYSTEM_COLUMNS, SYSTEM_RECORD_ID, TARGET, DataType, FeaturesFilter, FileColumnMeaningType, FileColumnMetadata, FileMetadata, FileMetrics, ModelTaskType, NumericInterval, RuntimeParameters, SearchCustomization
  from upgini.normalizer.phone_normalizer import PhoneNormalizer
  from upgini.resource_bundle import bundle
  from upgini.sampler.random_under_sampler import RandomUnderSampler
  from upgini.search_task import SearchTask
  from upgini.utils import combine_search_keys
  from upgini.utils.email_utils import EmailSearchKeyConverter
  from upgini.utils.warning_counter import WarningCounter
label_desc: Use image node_id 9 for calling the Dataset obj's underlying member method code with example usage: obj.__rename_columns() without return types