class_docstr: Abstract base class for time series panel tasks, e.g., classifiers, regressors.
  
  The class contains boilerplate for checks and data conversions,
  which are common to multiple descendants, most importantly,
  BaseClassifier and BaseRegressor.
docstr: Check whether this estimator can handle the data characteristics.
  
  Parameters
  ----------
  missing : boolean, does the data passed to fit contain missing values?
  multivariate : boolean, does the data passed to fit contain missing values?
  unequal : boolea, do the time series passed to fit have variable lengths?
  
  Raises
  ------
  ValueError if the capabilities in self._tags do not handle the data.
docstr_tok: ["Check","whether","this","estimator","can","handle","the","data","characteristics",".","Parameters","--","--","--","--","--","missing",":","boolean",",","does","the","data","passed","to","fit","contain","missing","values","?","multivariate",":","boolean",",","does","the","data","passed","to","fit","contain","missing","values","?","unequal",":","boolea",",","do","the","time","series","passed","to","fit","have","variable","lengths","?","Raises","--","--","--","ValueError","if","the","capabilities","in","self._tags","do","not","handle","the","data","."]
code: def _check_capabilities(self, X_metadata):
      """Check whether this estimator can handle the data characteristics.
  
      Parameters
      ----------
      missing : boolean, does the data passed to fit contain missing values?
      multivariate : boolean, does the data passed to fit contain missing values?
      unequal : boolea, do the time series passed to fit have variable lengths?
  
      Raises
      ------
      ValueError if the capabilities in self._tags do not handle the data.
      """
      missing = X_metadata["has_nans"]
      multivariate = not X_metadata["is_univariate"]
      unequal = not X_metadata["is_equal_length"]
  
      allow_multivariate = self.get_tag("capability:multivariate")
      allow_missing = self.get_tag("capability:missing_values")
      allow_unequal = self.get_tag("capability:unequal_length")
  
      self_name = type(self).__name__
  
      # identify problems, mismatch of capability and inputs
      problems = []
      if missing and not allow_missing:
          problems += ["missing values"]
      if multivariate and not allow_multivariate:
          problems += ["multivariate series"]
      if unequal and not allow_unequal:
          problems += ["unequal length series"]
  
      # construct error message
      problems_and = " and ".join(problems)
      problems_or = " or ".join(problems)
      msg = (
          f"Data seen by {self_name} instance has {problems_and}, "
          f"but this {self_name} instance cannot handle {problems_or}. "
          f"Calls with {problems_or} may result in error or unreliable results."
      )
  
      # raise exception or warning with message
      # if self is composite, raise a warning, since passing could be fine
      #   see discussion in PR 2366 why
      if len(problems) > 0:
          if self.is_composite():
              warn(msg, obj=self)
          else:
              raise ValueError(msg)
  
file_path: sktime/sktime/base/_base_panel.py
imports: import numpy
  import pandas
  from sktime.base import BaseEstimator
  from sktime.datatypes import MTYPE_LIST_PANEL, MTYPE_LIST_TABLE, VectorizedDF, check_is_error_msg, check_is_scitype, convert
  from sktime.utils.warnings import warn
label_desc: Use image node_id 4 for calling the BasePanelMixin obj's underlying member method code with example usage: obj._check_capabilities(X_metadata) without return types