class_docstr: Base forecaster template class.
  
  The base forecaster specifies the methods and method signatures that all forecasters
  have to implement.
  
  Specific implementations of these methods is deferred to concrete forecasters.
class_docstr_tok: ["Base","forecaster","template","class",".","The","base","forecaster","specifies","the","methods","and","method","signatures","that","all","forecasters","have","to","implement",".","Specific","implementations","of","these","methods","is","deferred","to","concrete","forecasters","."]
docstr: Scores forecast against ground truth, using MAPE (non-symmetric).
  
  Parameters
  ----------
  y : pd.Series, pd.DataFrame, or np.ndarray (1D or 2D)
      Time series to score
      if self.get_tag("scitype:y")=="univariate":
          must have a single column/variable
      if self.get_tag("scitype:y")=="multivariate":
          must have 2 or more columns
      if self.get_tag("scitype:y")=="both": no restrictions apply
  fh : int, list, array-like or ForecastingHorizon, optional (default=None)
      The forecasters horizon with the steps ahead to to predict.
  X : pd.DataFrame, or 2D np.array, optional (default=None)
      Exogeneous time series to score
      if self.get_tag("X-y-must-have-same-index"), X.index must contain y.index
  
  Returns
  -------
  score : float
      MAPE loss of self.predict(fh, X) with respect to y_test.
  
  See Also
  --------
  :meth:`sktime.performance_metrics.forecasting.mean_absolute_percentage_error`
docstr_tok: ["Scores","forecast","against","ground","truth",",","using","MAPE","(","non-symmetric",")",".","Parameters","--","--","--","--","--","y",":","pd.Series",",","pd.DataFrame",",","or","np.ndarray","(","1D","or","2D",")","Time","series","to","score","if","self.get_tag","(","``","scitype",":","y","''",")","==","''","univariate","''",":","must","have","a","single","column\/variable","if","self.get_tag","(","``","scitype",":","y","''",")","==","''","multivariate","''",":","must","have","2","or","more","columns","if","self.get_tag","(","``","scitype",":","y","''",")","==","''","both","''",":","no","restrictions","apply","fh",":","int",",","list",",","array-like","or","ForecastingHorizon",",","optional","(","default=None",")","The","forecasters","horizon","with","the","steps","ahead","to","to","predict",".","X",":","pd.DataFrame",",","or","2D","np.array",",","optional","(","default=None",")","Exogeneous","time","series","to","score","if","self.get_tag","(","``","X-y-must-have-same-index","''",")",",","X.index","must","contain","y.index","Returns","--","--","--","-","score",":","float","MAPE","loss","of","self.predict","(","fh",",","X",")","with","respect","to","y_test",".","See","Also","--","--","--","--",":","meth",":","`","sktime.performance_metrics.forecasting.mean_absolute_percentage_error","`"]
code: def score(self, y, X=None, fh=None):
      """Scores forecast against ground truth, using MAPE (non-symmetric).
  
      Parameters
      ----------
      y : pd.Series, pd.DataFrame, or np.ndarray (1D or 2D)
          Time series to score
          if self.get_tag("scitype:y")=="univariate":
              must have a single column/variable
          if self.get_tag("scitype:y")=="multivariate":
              must have 2 or more columns
          if self.get_tag("scitype:y")=="both": no restrictions apply
      fh : int, list, array-like or ForecastingHorizon, optional (default=None)
          The forecasters horizon with the steps ahead to to predict.
      X : pd.DataFrame, or 2D np.array, optional (default=None)
          Exogeneous time series to score
          if self.get_tag("X-y-must-have-same-index"), X.index must contain y.index
  
      Returns
      -------
      score : float
          MAPE loss of self.predict(fh, X) with respect to y_test.
  
      See Also
      --------
      :meth:`sktime.performance_metrics.forecasting.mean_absolute_percentage_error`
      """
      # no input checks needed here, they will be performed
      # in predict and loss function
      from sktime.performance_metrics.forecasting import (
          mean_absolute_percentage_error,
      )
  
      # specify non-symmetric explicitly as it changed in the past
      return mean_absolute_percentage_error(
          y, self.predict(fh, X), symmetric=False
      )
  
imports: from copy import deepcopy
  from itertools import product
  import numpy
  import pandas
  from sktime.base import BaseEstimator
  from sktime.datatypes import VectorizedDF, check_is_scitype, convert_to, get_cutoff, mtype_to_scitype, scitype_to_mtype, update_data
  from sktime.forecasting.base._fh import ForecastingHorizon
  from sktime.utils.datetime import _shift
  from sktime.utils.validation._dependencies import _check_estimator_deps
  from sktime.utils.validation.forecasting import check_alpha, check_cv, check_fh, check_X
  from sktime.utils.validation.series import check_equal_time_index
  from sktime.utils.warnings import warn
label_desc: Use image node_id 18 for calling the BaseForecaster obj's underlying member method code with example usage: obj.score(y, X, fh) and returns: mean_absolute_percentage_error