code: def test_column_dtypes_match(rating_true, rating_pred):
      # Check if _check_column_dtypes wraps the input function (i.e. returns the same output as the input function's)
      mocked_fn = Mock(return_value=True)
      assert _check_column_dtypes(mocked_fn)(
          rating_true,
          rating_pred,
          col_user=DEFAULT_USER_COL,
          col_item=DEFAULT_ITEM_COL,
          col_rating=DEFAULT_RATING_COL,
          col_prediction=DEFAULT_PREDICTION_COL,
      )
  
      # Change data types of true and prediction data, and there should type mismatch error produced
      rating_true[DEFAULT_USER_COL] = rating_true[
          DEFAULT_USER_COL
      ].astype(str)
      with pytest.raises(ColumnTypeMismatchError):
          _check_column_dtypes(Mock())(
              rating_true,
              rating_pred,
              col_user=DEFAULT_USER_COL,
              col_item=DEFAULT_ITEM_COL,
              col_rating=DEFAULT_RATING_COL,
              col_prediction=DEFAULT_PREDICTION_COL,
          )
  
      # Drop a column, and there should column mismatch error produced
      rating_true.drop(DEFAULT_USER_COL, axis="columns", inplace=True)
      with pytest.raises(ColumnMismatchError):
          _check_column_dtypes(Mock())(
              rating_true,
              rating_pred,
              col_user=DEFAULT_USER_COL,
              col_item=DEFAULT_ITEM_COL,
              col_rating=DEFAULT_RATING_COL,
              col_prediction=DEFAULT_PREDICTION_COL,
          )
  
imports: import numpy
  import pandas
  import pytest
  from unittest.mock import Mock
  from sklearn.preprocessing import minmax_scale
  from pandas.testing import assert_frame_equal
  from recommenders.utils.constants import DEFAULT_USER_COL, DEFAULT_ITEM_COL, DEFAULT_RATING_COL, DEFAULT_PREDICTION_COL
  from recommenders.evaluation.python_evaluation import _check_column_dtypes, merge_rating_true_pred, merge_ranking_true_pred, rmse, mae, rsquared, exp_var, get_top_k_items, precision_at_k, recall_at_k, ndcg_at_k, map_at_k, map, auc, logloss, user_diversity, diversity, historical_item_novelty, novelty, user_item_serendipity, user_serendipity, serendipity, catalog_coverage, distributional_coverage, ColumnMismatchError, ColumnTypeMismatchError
label_desc: Use image node_id 3 for calling a global function with example usage: test_column_dtypes_match(rating_true, rating_pred) without return types