code: def test_merlion_detector(self):
      df = self.get_nab_df()
      df.index = pd.to_datetime(df["t"])
      df.drop(columns=["t"], inplace=True)
      df_train = df[df["train"] == 1][["val"]]
      df_test = df[df["train"] == 0][["val"]]
      # isolation
      adapter = IsolationForestDetectorAdapter()
      adapter.train(df_train.copy(deep=True), target="val")
      rt_df = adapter.predict(df_test.copy(deep=True), target="val")
      assert rt_df is not None
      assert len(rt_df[rt_df["val__anomaly_score"] > 0]) > 0
      # windstats
      adapter = WindStatsDetectorAdapter()
      adapter.train(df_train.copy(deep=True), target="val")
      rt_df = adapter.predict(df_test.copy(deep=True), target="val")
      assert rt_df is not None
      assert len(rt_df[rt_df["val__anomaly_score"] > 0]) > 0
      # prophet
      adapter = ProphetDetectorAdapter()
      adapter.train(df_train.copy(deep=True), target="val")
      rt_df = adapter.predict(df_test.copy(deep=True), target="val")
      assert rt_df is not None
      assert len(rt_df[rt_df["val__anomaly_score"] > 0]) > 0
  
imports: import os
  import time
  from unittest.mock import patch
  import pandas
  from mindsdb_sql import parse_sql
  from mindsdb.integrations.handlers.merlion_handler.adapters import DefaultForecasterAdapter, SarimaForecasterAdapter, ProphetForecasterAdapter, MSESForecasterAdapter, IsolationForestDetectorAdapter, WindStatsDetectorAdapter, ProphetDetectorAdapter
  from .executor_test_base import BaseExecutorTest
  import pandas
label_desc: Use image node_id 8 for calling the TestMerlion obj's underlying member method code with example usage: obj.test_merlion_detector() without return types