class_docstr: Transforms any anomaly scorer into an information theoretic (IT) score. This means, given a scorer S(x), an
  anomalous observation x and samples from the distribution of X, this scorer class represents:
      score(x) = -log(P(S(X) >= S(x)))
  
  This is, the negative logarithm of the probability to get the same or a higher score with (random) samples from X
  compared to the score obtained based on the anomalous observation x. By this, the score of arbitrarily different
  anomaly scorers become comparable information theoretic quantities. The new score -log(P(S(X) >= S(x))) can also
  be seen as "The higher the score, the rarer the anomaly event". For instance, if we have S(x) = c, but observe
  the same or higher scores in 50% or even 100% of all samples in X, then this is not really a rare event, and thus,
  not an anomaly. As mentioned above, transforming it into an IT score makes arbitrarily different anomaly scorer
  with potentially completely different scaling comparable. For example, one could compare the IT score of
  isolation forests with z-scores.
  
  For more details about IT scores, see:
      Causal structure based root cause analysis of outliers
      Kailash Budhathoki, Patrick Bloebaum, Lenon Minorics, Dominik Janzing (2022)
  
  The higher the score, the higher the likelihood that the observations is an anomaly.
code: def score(self, X: np.ndarray) -> np.ndarray:
      X = shape_into_2d(X)
      scores_of_samples_to_score = self._anomaly_scorer.score(
          X
      ).reshape(-1, 1)
      return -np.log(
          (
              np.sum(
                  self._scores_of_distribution_samples
                  >= scores_of_samples_to_score,
                  axis=1,
              )
              + 0.5
          )
          / (self._scores_of_distribution_samples.shape[0] + 0.5)
      )
  
imports: from typing import Optional
  import numpy
  from statsmodels.robust import mad
  from dowhy.gcm.anomaly_scorer import AnomalyScorer
  from dowhy.gcm.constant import EPS
  from dowhy.gcm.density_estimator import DensityEstimator
  from dowhy.gcm.util.general import shape_into_2d
label_desc: Use image node_id 3 for calling the ITAnomalyScorer obj's underlying member method code with example usage: obj.score(X) and returns: unknown