code: def test_tssaliency(self):
      # load model
      input_length = 24
      forecast_horizon = 4
      forecaster = RandomForestUniVariateForecaster(
          n_past=input_length, n_future=forecast_horizon
      )
  
      forecaster.fit(self.ts_train.iloc[-200:])
  
      # initialize/fit explainer
  
      explainer = TSSaliencyExplainer(
          model=forecaster.predict,
          input_length=input_length,
          feature_names=self.ts_train.columns.tolist(),
          n_samples=2,
          gradient_samples=5,
      )
  
      # compute explanations
      test_window = self.ts_test.iloc[:input_length]
      explanation = explainer.explain_instance(
          ts=test_window,
      )
  
      # validate explanation structure
      self.assertIn("input_data", explanation)
      self.assertIn("feature_names", explanation)
      self.assertIn("saliency", explanation)
      self.assertIn("timestamps", explanation)
      self.assertIn("base_value", explanation)
      self.assertIn("instance_prediction", explanation)
      self.assertIn("base_value_prediction", explanation)
  
      self.assertEqual(explanation["saliency"].shape, test_window.shape)
  
file_path: AIX360/tests/tssaliency/test_tssaliency.py
imports: import os
  import unittest
  import numpy
  import pandas
  from sklearn.model_selection import train_test_split
  from sklearn.ensemble import RandomForestRegressor
  from aix360.algorithms.tsutils.tsframe import tsFrame
  from aix360.datasets import SunspotDataset
  from aix360.algorithms.tssaliency import TSSaliencyExplainer
label_desc: Use image node_id 2 for calling the TestTSSaliencyExplainer obj's underlying member method code with example usage: obj.test_tssaliency() without return types