code: def __construct_search_customization(
      self,
      return_scores: bool,
      extract_features: bool,
      accurate_model: Optional[bool] = None,
      importance_threshold: Optional[float] = None,
      max_features: Optional[int] = None,
      filter_features: Optional[dict] = None,
      runtime_parameters: Optional[RuntimeParameters] = None,
      metrics_calculation: Optional[bool] = False,
  ) -> SearchCustomization:
      # self.logger.info("Constructing search customization")
      search_customization = SearchCustomization(
          extractFeatures=extract_features,
          accurateModel=accurate_model,
          importanceThreshold=importance_threshold,
          maxFeatures=max_features,
          returnScores=return_scores,
          runtimeParameters=runtime_parameters,
          metricsCalculation=metrics_calculation,
      )
      if filter_features:
          if [
              key
              for key in filter_features
              if key
              not in {
                  "min_importance",
                  "max_psi",
                  "max_count",
                  "selected_features",
              }
          ]:
              raise ValidationError(
                  bundle.get("dataset_invalid_filter")
              )
          feature_filter = FeaturesFilter(
              minImportance=filter_features.get("min_importance"),
              maxPSI=filter_features.get("max_psi"),
              maxCount=filter_features.get("max_count"),
              selectedFeatures=filter_features.get("selected_features"),
          )
          search_customization.featuresFilter = feature_filter
  
      search_customization.runtimeParameters.properties[
          "etalon_imbalanced"
      ] = self.imbalanced
  
      return search_customization
  
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 40 for calling the Dataset obj's underlying member method code with example usage: obj.__construct_search_customization(return_scores, extract_features, accurate_model, importance_threshold, max_features, filter_features, runtime_parameters, metrics_calculation) and returns: search_customization