code: def test_eval_set_with_diff_order_of_columns(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,
                  )
              ],
              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=",")
      df.drop(columns="SystemRecordId_473310000", inplace=True)
      train_df = df.head(10000)
      train_features = train_df.drop(columns="target")
      train_target = train_df["target"]
      eval1_df = df[10000:11000].reset_index(drop=True)
      eval1_features = eval1_df.drop(columns="target")
      # shuffle columns
      eval1_features = eval1_features[set(eval1_features.columns)]
      eval1_target = eval1_df["target"].reset_index(drop=True)
  
      eval2_df = df[11000:12000]
      eval2_features = eval2_df.drop(columns="target")
      # Add feature that doesn't exist in train df
      eval2_features["new_feature"] = "test"
      eval2_target = eval2_df["target"]
  
      enricher = FeaturesEnricher(
          search_keys={
              "phone_num": SearchKey.PHONE,
              "rep_date": SearchKey.DATE,
          },
          endpoint=url,
          api_key="fake_api_key",
          date_format="%Y-%m-%d",
          cv=CVType.time_series,
          logs_enabled=False,
      )
  
      with pytest.raises(
          ValidationError, match=bundle.get("eval_x_and_x_diff_shape")
      ):
          enricher.fit(
              train_features,
              train_target,
              eval_set=[
                  (eval1_features, eval1_target),
                  (eval2_features, eval2_target),
              ],
              calculate_metrics=False,
              keep_input=True,
          )
  
      enricher.fit(
          train_features,
          train_target,
          eval_set=[(eval1_features, eval1_target)],
          calculate_metrics=False,
          keep_input=True,
      )
  
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 3 for calling a global function with example usage: test_eval_set_with_diff_order_of_columns(requests_mock) without return types