code: def missing_warner(
      df: pd.DataFrame,
      cols_list: List[str],
      new_column_name: str = "has_unexpected_missing",
      detailed_warning: bool = False,
      detailed_column_name: Optional[str] = None,
  ) -> LearnerReturnType:
      """
      Creates a new column to warn about rows that columns that don't have missing in the training set
      but have missing on the scoring
  
      Parameters
      ----------
  
      df : pandas.DataFrame
          A Pandas' DataFrame.
  
      cols_list : list of str
          List of columns to consider when evaluating missingness
  
      new_column_name : str
          Name of the column created to alert the existence of missing values
      """
  
      if (
          detailed_warning is False and detailed_column_name is not None
      ) or (detailed_warning is True and detailed_column_name is None):
          raise ValueError(
              "Either detailed_warning and detailed_column_name should be defined or both should be False."
          )
  
      df_selected = df[cols_list]
      cols_without_missing = df_selected.loc[
          :, df_selected.isna().sum(axis=0) == 0
      ].columns.tolist()
  
      def p(dataset: pd.DataFrame) -> pd.DataFrame:
          def detailed_assignment(
              df: pd.DataFrame, cols_to_check: List[str]
          ) -> list:
              print(df.loc[:, cols_to_check])
              cols_with_missing = np.array(
                  [
                      np.where(df[col].isna(), col, "")
                      for col in cols_to_check
                  ]
              ).T
              missing_by_row_list: list = [
                  list(filter(None, x)) for x in cols_with_missing
              ]
              if len(missing_by_row_list) == 0:
                  return np.empty((0, 0)).tolist()
              else:
                  return missing_by_row_list
  
          new_dataset = dataset.assign(
              **{
                  new_column_name: lambda df: df[cols_without_missing]
                  .isna()
                  .sum(axis=1)
                  > 0
              }
          )
          if detailed_warning and detailed_column_name:
              missing_by_row_list = detailed_assignment(
                  new_dataset, cols_without_missing
              )
              return new_dataset.assign(
                  **{detailed_column_name: missing_by_row_list}
              )
          else:
              return new_dataset
  
      p.__doc__ = learner_pred_fn_docstring("missing_warner")
  
      log = {
          "missing_warner": {
              "cols_list": cols_list,
              "cols_without_missing": cols_without_missing,
          }
      }
  
      return p, df, log
  
imports: from typing import Any, Callable, Dict, List, Union, Optional
  import numpy
  import pandas
  from numpy import nan
  from sklearn.preprocessing import StandardScaler
  from statsmodels.distributions import empirical_distribution
  from toolz import curry, merge, compose, mapcat
  from fklearn.common_docstrings import learner_return_docstring, learner_pred_fn_docstring
  from fklearn.training.utils import log_learner_time
  from fklearn.types import LearnerReturnType, LearnerLogType
  from fklearn.preprocessing.schema import column_duplicatable
label_desc: Use image node_id 19 for calling a global function with example usage: missing_warner(df, cols_list, new_column_name, detailed_warning, detailed_column_name) and returns: p,  df,  log, new_dataset, new_dataset, np, missing_by_row_list