code: def is_available(algorithm, X_train, y_train, ml_task):
      # https://github.com/mljar/mljar-supervised/issues/112 disable for NN
      # https://github.com/mljar/mljar-supervised/issues/114 disable for CatBoost
      if algorithm.algorithm_short_name in [
          "Baseline",
          "Neural Network",
          "CatBoost",
      ]:
          return False
      if (
          algorithm.algorithm_short_name == "Xgboost"
          and algorithm.learner_params["booster"] == "gblinear"
      ):
          # Xgboost gblinear is not supported by SHAP
          return False
      # disable for large number of columns
      if X_train.shape[1] > 500:
          warnings.warn(
              "Disable SHAP explanations because of number of columns > 500."
          )
          return False
      if (
          ml_task == MULTICLASS_CLASSIFICATION
          and len(np.unique(y_train)) > 100
      ):
          warnings.warn(
              "Disable SHAP explanations because of large number of classes (> 100)."
          )
          return False
      if X_train.shape[0] < 20:
          warnings.warn(
              "Disable SHAP explanations because of small number of samples (< 20)."
          )
          return False
      return True
  
imports: import logging
  import os
  import matplotlib.pyplot
  import numpy
  import pandas
  import shap
  from sklearn.preprocessing import OneHotEncoder
  from supervised.algorithms.registry import BINARY_CLASSIFICATION, MULTICLASS_CLASSIFICATION, REGRESSION
  from supervised.utils.config import LOG_LEVEL
  import warnings
label_desc: Use image node_id 1 for calling the PlotSHAP obj's underlying member method code with example usage: obj.is_available(algorithm, X_train, y_train, ml_task) and returns: True, False, False, False, False, False