code: def test_lof_ensemble_integration(tmp_path, aggregator, normalizer):
      """Test lof ensemble detector on moons dataset.
  
      Tests ensemble lof detector with every combination of aggregator and normalizer on the moons dataset.
      Fits and infers thresholds in each case. Verifies that the detector can correctly detect inliers
      and outliers and that it can be serialized using the torchscript.
      """
  
      lof_detector = LOF(
          k=[10, 14, 18],
          aggregator=aggregator(),
          normalizer=normalizer(),
      )
      X_ref, _ = make_moons(
          1001, shuffle=True, noise=0.05, random_state=None
      )
      X_ref, x_inlier = X_ref[0:1000], X_ref[1000][None]
      lof_detector.fit(X_ref)
      lof_detector.infer_threshold(X_ref, 0.1)
      result = lof_detector.predict(x_inlier)
      result = result["data"]["is_outlier"][0]
      assert not result
  
      x_outlier = np.array([[-1, 1.5]])
      result = lof_detector.predict(x_outlier)
      result = result["data"]["is_outlier"][0]
      assert result
  
      ts_lof = torch.jit.script(lof_detector.backend)
      x = torch.tensor([x_inlier[0], x_outlier[0]], dtype=torch.float32)
      y = ts_lof(x)
      assert torch.all(y == torch.tensor([False, True]))
  
      ts_lof.save(tmp_path / "lof.pt")
      lof_detector = torch.load(tmp_path / "lof.pt")
      y = lof_detector(x)
      assert torch.all(y == torch.tensor([False, True]))
  
file_path: alibi-detect/alibi_detect/od/tests/test__lof/test__lof.py
imports: import pytest
  import numpy
  import torch
  from alibi_detect.od._lof import LOF
  from alibi_detect.od.pytorch.ensemble import AverageAggregator, TopKAggregator, MaxAggregator, MinAggregator, ShiftAndScaleNormalizer, PValNormalizer
  from alibi_detect.exceptions import NotFittedError, ThresholdNotInferredError
  from sklearn.datasets import make_moons
label_desc: Use image node_id 12 for calling a global function with example usage: test_lof_ensemble_integration(tmp_path, aggregator, normalizer) without return types