code: def test_fet_online_state_online(n_feat, tmp_path, seed):
      """
      Test save/load/reset state methods for FETDriftOnline. State is saved, reset, and loaded, with
      prediction results and stateful attributes compared to original.
      """
      p_h0 = 0.5
      p_h1 = 0.3
      with fixed_seed(seed):
          # squeeze to test vector input in 1D case
          x_ref = np.random.choice(
              (0, 1), (n, n_feat), p=[1 - p_h0, p_h0]
          ).squeeze()
          x = np.random.choice((0, 1), (n, n_feat), p=[1 - p_h1, p_h1])
          dd = FETDriftOnline(x_ref, window_sizes=window_sizes, ert=20)
      # Store state for comparison
      state_dict_t0 = {}
      for key in dd.online_state_keys:
          state_dict_t0[key] = getattr(dd, key)
  
      # Run for 10 time steps
      test_stats_1 = []
      for t, x_t in enumerate(x):
          if t == 5:
              dd.save_state(tmp_path)
              # Store state for comparison
              state_dict_t5 = {}
              for key in dd.online_state_keys:
                  state_dict_t5[key] = getattr(dd, key)
          preds = dd.predict(x_t)
          test_stats_1.append(preds["data"]["test_stat"])
  
      # Reset and check state cleared
      dd.reset_state()
      for key, orig_val in state_dict_t0.items():
          np.testing.assert_array_equal(
              orig_val, getattr(dd, key)
          )  # use np.testing here as it handles torch.Tensor etc
  
      # Repeat, check that same test_stats both times
      test_stats_2 = []
      for t, x_t in enumerate(x):
          preds = dd.predict(x_t)
          test_stats_2.append(preds["data"]["test_stat"])
      np.testing.assert_array_equal(test_stats_1, test_stats_2)
  
      # Load state from t=5 timestep
      dd.load_state(tmp_path)
  
      # Compare stateful attributes to original at t=5
      for key, orig_val in state_dict_t5.items():
          np.testing.assert_array_equal(
              orig_val, getattr(dd, key)
          )  # use np.testing here as it handles torch.Tensor etc
  
      # Compare predictions to original at t=5
      new_pred = dd.predict(x[5])
      np.testing.assert_array_equal(
          new_pred["data"]["test_stat"], test_stats_1[5]
      )
  
imports: import numpy
  import pytest
  from functools import partial
  from alibi_detect.cd import FETDriftOnline
  from alibi_detect.utils._random import fixed_seed
label_desc: Use image node_id 2 for calling a global function with example usage: test_fet_online_state_online(n_feat, tmp_path, seed) without return types