code: def test_explain_prediction_feature_union_dense():
      # Test FeatureUnion handling and missing features in dense matrix
      transformer = lambda key: FunctionTransformer(
          lambda xs: np.array([[x.get(key, np.nan)] for x in xs]),
          validate=False,
      )
      vec = FeatureUnion(
          [("x", transformer("x")), ("y", transformer("y"))]
      )
      gauss = np.random.normal
      data = [(gauss(1), 2 + 10 * gauss(1)) for _ in range(200)]
      ys = [-3 * x + y for x, y in data]
      xs = [{"x": gauss(x), "y": gauss(y)} for x, y in data]
      for x in xs[:50]:
          del x["x"]
      for x in xs[-50:]:
          del x["y"]
      reg = XGBRegressor()
      reg.fit(vec.transform(xs), ys)
      res = explain_prediction(
          reg, xs[0], vec=vec, feature_names=["_x_", "_y_"]
      )
      check_targets_scores(res)
      for expl in format_as_all(res, reg, show_feature_values=True):
          assert "Missing" in expl
          assert "_y_" in expl
          assert "_x_" in expl
  
imports: from __future__ import absolute_import
  import pytest
  import numpy
  import scipy.sparse
  from sklearn.feature_extraction.text import CountVectorizer
  import xgboost
  from xgboost import XGBClassifier, XGBRegressor
  from sklearn.pipeline import FeatureUnion
  from sklearn.preprocessing import FunctionTransformer
  from eli5.xgboost import _parse_tree_dump, _xgb_n_targets, _missing_values_set_to_nan, _parent_value, _parse_dump_line, _check_booster_args
  from eli5.explain import explain_prediction, explain_weights
  from eli5.formatters.text import format_as_text
  from eli5.formatters import fields
  from .utils import format_as_all, get_all_features, check_targets_scores
  from .test_sklearn_explain_weights import test_explain_tree_classifier, test_explain_random_forest_and_tree_feature_filter, test_feature_importances_no_remaining, assert_tree_classifier_explained
  from .test_sklearn_explain_prediction import assert_linear_regression_explained, assert_trained_linear_regression_explained, assert_explain_prediction_single_target, test_explain_clf_binary_iris, test_explain_prediction_pandas
label_desc: Use image node_id 16 for calling a global function with example usage: test_explain_prediction_feature_union_dense() without return types