class_docstr: Weighted quantile loss.
  
  Also known as weighted pinball loss.
  
  Defined as total quantile loss divided by the sum of absolute time series values in the forecast horizon.
  
  .. math::
  
      \operatorname{WQL} = \frac{1}{\sum_{i=1}^{N} \sum_{t=T+1}^{T+H} |y_{i, t}|} \sum_{i=1}^{N} \sum_{t=T+1}^{T+H} \sum_{q}  \rho_q(y_{i,t}, f^q_{i,t})
  
  Properties:
  
  - scale-dependent (time series with large absolute value contribute more to the loss)
  - equivalent to WAPE if ``quantile_levels = [0.5]``
  
  
  References
  ----------
  - `Forecasting: Principles and Practice <https://otexts.com/fpp3/distaccuracy.html#quantile-scores>`_
code: def compute_metric(
      self,
      data_future: TimeSeriesDataFrame,
      predictions: TimeSeriesDataFrame,
      target: str = "target",
      **kwargs,
  ) -> float:
      (
          y_true,
          q_pred,
          quantile_levels,
      ) = self._get_quantile_forecast_score_inputs(
          data_future, predictions, target
      )
      values_true = y_true.values[:, None]  # shape [N, 1]
      values_pred = q_pred.values  # shape [N, len(quantile_levels)]
  
      return 2 * np.mean(
          np.abs(
              (values_true - values_pred)
              * ((values_true <= values_pred) - quantile_levels)
          ).sum(axis=0)
          / np.abs(values_true).sum()
      )
  
file_path: autogluon/timeseries/src/autogluon/timeseries/metrics/quantile.py
imports: from typing import Optional
  import numpy
  import pandas
  from autogluon.timeseries.dataset.ts_dataframe import ITEMID, TimeSeriesDataFrame
  from .abstract import TimeSeriesScorer
  from .utils import _in_sample_abs_seasonal_error
label_desc: Use image node_id 1 for calling the WQL obj's underlying member method code with example usage: obj.compute_metric(data_future, predictions, target) and returns: unknown