code: def test_features_enricher_fit_transform_runtime_parameters(
      requests_mock: Mocker,
  ):
      url = "http://fake_url2"
      path_to_mock_features = os.path.join(
          os.path.dirname(os.path.realpath(__file__)),
          "test_data/binary/mock_features.parquet",
      )
  
      mock_default_requests(requests_mock, url)
      search_task_id = mock_initial_search(requests_mock, url)
      mock_initial_progress(requests_mock, url, search_task_id)
      ads_search_task_id = mock_initial_summary(
          requests_mock,
          url,
          search_task_id,
      )
      mock_get_metadata(requests_mock, url, search_task_id)
      mock_get_task_metadata_v2(
          requests_mock,
          url,
          ads_search_task_id,
          ProviderTaskMetadataV2(
              features=[
                  FeaturesMetadataV2(
                      name="feature",
                      type="NUMERIC",
                      source="ads",
                      hit_rate=99.0,
                      shap_value=10.1,
                      commercial_schema="Trial",
                      data_provider="Upgini",
                      data_provider_link="https://upgini.com",
                      data_source="Community shared",
                      data_source_link="https://upgini.com",
                  ),
                  FeaturesMetadataV2(
                      name="SystemRecordId_473310000",
                      type="NUMERIC",
                      source="etalon",
                      hit_rate=100.0,
                      shap_value=1.0,
                  ),
              ],
              hit_rate_metrics=HitRateMetrics(
                  etalon_row_count=10000,
                  max_hit_count=9990,
                  hit_rate=0.999,
                  hit_rate_percent=99.9,
              ),
              eval_set_metrics=[
                  ModelEvalSet(
                      eval_set_index=1,
                      hit_rate=1.0,
                      hit_rate_metrics=HitRateMetrics(
                          etalon_row_count=1000,
                          max_hit_count=1000,
                          hit_rate=1.0,
                          hit_rate_percent=100.0,
                      ),
                  ),
                  ModelEvalSet(
                      eval_set_index=2,
                      hit_rate=0.99,
                      hit_rate_metrics=HitRateMetrics(
                          etalon_row_count=1000,
                          max_hit_count=990,
                          hit_rate=0.99,
                          hit_rate_percent=99.0,
                      ),
                  ),
              ],
          ),
      )
      mock_raw_features(
          requests_mock, url, search_task_id, path_to_mock_features
      )
  
      path = os.path.join(
          os.path.dirname(os.path.realpath(__file__)),
          "test_data/binary/data.csv",
      )
      df = pd.read_csv(path, sep=",")
      train_df = df.head(10000)
      train_features = train_df.drop(columns="target")
      train_target = train_df["target"]
      eval1_df = df[10000:11000]
      eval1_features = eval1_df.drop(columns="target")
      eval1_target = eval1_df["target"]
      eval2_df = df[11000:12000]
      eval2_features = eval2_df.drop(columns="target")
      eval2_target = eval2_df["target"]
  
      enricher = FeaturesEnricher(
          search_keys={
              "phone_num": SearchKey.PHONE,
              "rep_date": SearchKey.DATE,
          },
          date_format="%Y-%m-%d",
          endpoint=url,
          api_key="fake_api_key",
          runtime_parameters=RuntimeParameters(
              properties={"runtimeProperty1": "runtimeValue1"}
          ),
          logs_enabled=False,
      )
      assert enricher.runtime_parameters is not None
  
      enricher.fit(
          train_features,
          train_target,
          eval_set=[
              (eval1_features, eval1_target),
              (eval2_features, eval2_target),
          ],
          calculate_metrics=False,
      )
  
      fit_req = None
      initial_search_url = url + "/public/api/v2/search/initial"
      for elem in requests_mock.request_history:
          if elem.url == initial_search_url:
              fit_req = elem
  
      # TODO: can be better with
      #  https://metareal.blog/en/post/2020/05/03/validating-multipart-form-data-with-requests-mock/
      # It"s do-able to parse req with cgi module and verify contents
      assert fit_req is not None
      assert "runtimeProperty1" in str(fit_req.body)
      assert "runtimeValue1" in str(fit_req.body)
  
      validation_search_task_id = mock_validation_search(
          requests_mock, url, search_task_id
      )
      mock_validation_progress(
          requests_mock, url, validation_search_task_id
      )
      mock_validation_summary(
          requests_mock,
          url,
          search_task_id,
          ads_search_task_id,
          validation_search_task_id,
      )
      mock_validation_raw_features(
          requests_mock,
          url,
          validation_search_task_id,
          path_to_mock_features,
      )
  
      transformed = enricher.transform(train_features, keep_input=True)
  
      transform_req = None
      transform_url = (
          url
          + "/public/api/v2/search/validation?initialSearchTaskId="
          + search_task_id
      )
      for elem in requests_mock.request_history:
          if elem.url == transform_url:
              transform_req = elem
  
      assert transform_req is not None
      assert "runtimeProperty1" in str(transform_req.body)
      assert "runtimeValue1" in str(transform_req.body)
  
      assert transformed.shape == (10000, 4)
  
imports: import os
  from datetime import date
  from typing import List, Optional
  import numpy
  import pandas
  import pytest
  from pandas.testing import assert_frame_equal
  from requests_mock.mocker import Mocker
  from upgini import FeaturesEnricher, SearchKey
  from upgini.dataset import Dataset
  from upgini.errors import ValidationError
  from upgini.http import _RestClient
  from upgini.metadata import CVType, FeaturesMetadataV2, HitRateMetrics, ModelEvalSet, ModelTaskType, ProviderTaskMetadataV2, RuntimeParameters
  from upgini.resource_bundle import bundle
  from upgini.search_task import SearchTask
  from upgini.utils.datetime_utils import DateTimeSearchKeyConverter
  from .utils import mock_default_requests, mock_get_metadata, mock_get_task_metadata_v2, mock_initial_and_validation_summary, mock_initial_progress, mock_initial_search, mock_initial_summary, mock_raw_features, mock_validation_progress, mock_validation_raw_features, mock_validation_search, mock_validation_summary
label_desc: Use image node_id 12 for calling a global function with example usage: test_features_enricher_fit_transform_runtime_parameters(requests_mock) without return types