class_docstr: The Wrap-around Quasi-Monte Carlo discrepancy is a uniformity criterion 
     which is used to assess the space filling of a number of samples in a hypercube. 
     It quantifies the distance between the continuous uniform distribution on a 
     hypercube and the discrete uniform distribution on distinct sample points. 
     Therefore, lower discrepancy values for a sample point indicates that it provides 
     better coverage of the parameter space with regard to the rest of the samples. This
     method is kernel based and a higher discrepancy score is relative to the
     rest of the samples, the higher the likelihood of it being an outlier. 
     Read more in the :cite:`fang2001wrap`.
  
  Parameters
  ----------          
  
  Attributes
  ----------
  decision_scores_ : numpy array of shape (n_samples,)
      The outlier scores of the training data.
      The higher, the more abnormal. Outliers tend to have higher
      scores. This value is available once the detector is
      fitted.
  
  threshold_ : float
     The modified z-score to use as a threshold. Observations with
     a modified z-score (based on the median absolute deviation) greater
     than this value will be classified as outliers.
  
  labels_ : int, either 0 or 1
      The binary labels of the training data. 0 stands for inliers
      and 1 for outliers/anomalies. It is generated by applying
      ``threshold_`` on ``decision_scores_``.
      
docstr: Fit detector
  
  Parameters
  ----------
  X : numpy array of shape (n_samples, n_features)
      The input samples.
  
  y : Ignored
      Not used, present for API consistency by convention.
docstr_tok: ["Fit","detector","Parameters","--","--","--","--","--","X",":","numpy","array","of","shape","(","n_samples",",","n_features",")","The","input","samples",".","y",":","Ignored","Not","used",",","present","for","API","consistency","by","convention","."]
code: def fit(self, X, y=None):
      """Fit detector
  
      Parameters
      ----------
      X : numpy array of shape (n_samples, n_features)
          The input samples.
  
      y : Ignored
          Not used, present for API consistency by convention.
      """
  
      # validate inputs X and y (optional)
      X = check_array(X)
      self._set_n_classes(y)
  
      # Normalize data between 0 and 1
      scaler = MinMaxScaler()
      X_norm = scaler.fit_transform(X)
      X_norm = X_norm / (
          X_norm.max(axis=0, keepdims=True) + np.spacing(0)
      )
  
      # Calculate WD QMCD scores
      scores = _wrap_around_discrepancy(X_norm)
  
      # Normalize scores between 0 and 1
      scores = (scores - scores.min()) / (scores.max() - scores.min())
  
      # Invert score order if majority is beyond 0.5
      if len(scores[scores > 0.5]) > 0.5 * len(scores):
          scores = 1 - scores
  
      self.decision_scores_ = scores
  
      self._process_decision_scores()
  
      return self
  
file_path: pyod/pyod/models/qmcd.py
imports: from __future__ import division
  from __future__ import print_function
  import numpy
  from numba import njit, prange
  from sklearn.preprocessing import MinMaxScaler
  from sklearn.utils import check_array
  from sklearn.utils.validation import check_is_fitted
  from .base import BaseDetector
label_desc: Use image node_id 2 for calling the QMCD obj's underlying member method code with example usage: obj.fit(X, y) and returns: self