class_docstr: Base module for pull calculation, based on mean and standard deviation calculation
  
  Steps as performed by ApplyFunc modules:
  
  - calculate standard deviation seen in a metric.
  - calculate mean seen in a metric.
  - calculate pull of a metric as: pull = (metric - mean) / std.
  
  The pull is then stored as a new column.
docstr: Initialize an instance of HistComparer.
  
  :param str func_mean: applied-function to calculate mean of profiled statistics
  :param str func_std: applied-function to calculate std of profiled statistics
  :param str apply_to_key: key of the input data to apply funcs to.
  :param str assign_to_key: key of the input data to assign function applied-output to. (optional)
  :param str store_key: key of the output data to store in the datastore (optional)
  :param str suffix_mean: suffix of mean. mean column = metric + suffix_mean. default is ``_mean``.
  :param str suffix_std: suffix of std. std column = metric + suffix_std. default is ``_std``.
  :param str suffix_pull: suffix of pull. pull column = metric + suffix_pull. default is ``_pull``.
  :param list features: list of features to calculate pull for. default is all.
  :param args: (tuple, optional): residual args passed on to func_mean and func_std
  :param kwargs: (dict, optional): residual kwargs passed on to func_mean and func_std
docstr_tok: ["Initialize","an","instance","of","HistComparer",".",":","param","str","func_mean",":","applied-function","to","calculate","mean","of","profiled","statistics",":","param","str","func_std",":","applied-function","to","calculate","std","of","profiled","statistics",":","param","str","apply_to_key",":","key","of","the","input","data","to","apply","funcs","to",".",":","param","str","assign_to_key",":","key","of","the","input","data","to","assign","function","applied-output","to",".","(","optional",")",":","param","str","store_key",":","key","of","the","output","data","to","store","in","the","datastore","(","optional",")",":","param","str","suffix_mean",":","suffix","of","mean",".","mean","column","=","metric","+","suffix_mean",".","default","is","``","_mean","``",".",":","param","str","suffix_std",":","suffix","of","std",".","std","column","=","metric","+","suffix_std",".","default","is","``","_std","``",".",":","param","str","suffix_pull",":","suffix","of","pull",".","pull","column","=","metric","+","suffix_pull",".","default","is","``","_pull","``",".",":","param","list","features",":","list","of","features","to","calculate","pull","for",".","default","is","all",".",":","param","args",":","(","tuple",",","optional",")",":","residual","args","passed","on","to","func_mean","and","func_std",":","param","kwargs",":","(","dict",",","optional",")",":","residual","kwargs","passed","on","to","func_mean","and","func_std"]
code: def __init__(
      self,
      func_mean,
      func_std,
      apply_to_key,
      assign_to_key=None,
      store_key=None,
      suffix_mean: str = "_mean",
      suffix_std: str = "_std",
      suffix_pull: str = "_pull",
      features=None,
      *args,
      **kwargs,
  ) -> None:
      """Initialize an instance of HistComparer.
  
      :param str func_mean: applied-function to calculate mean of profiled statistics
      :param str func_std: applied-function to calculate std of profiled statistics
      :param str apply_to_key: key of the input data to apply funcs to.
      :param str assign_to_key: key of the input data to assign function applied-output to. (optional)
      :param str store_key: key of the output data to store in the datastore (optional)
      :param str suffix_mean: suffix of mean. mean column = metric + suffix_mean. default is ``_mean``.
      :param str suffix_std: suffix of std. std column = metric + suffix_std. default is ``_std``.
      :param str suffix_pull: suffix of pull. pull column = metric + suffix_pull. default is ``_pull``.
      :param list features: list of features to calculate pull for. default is all.
      :param args: (tuple, optional): residual args passed on to func_mean and func_std
      :param kwargs: (dict, optional): residual kwargs passed on to func_mean and func_std
      """
      super().__init__(modules=[])
  
      if assign_to_key is None:
          assign_to_key = apply_to_key
  
      calc_mean_std = ApplyFunc(
          apply_to_key=apply_to_key,
          assign_to_key=assign_to_key,
          features=features,
      )
      calc_mean_std.add_apply_func(
          func_std, *args, suffix=suffix_std, entire=True, **kwargs
      )
      calc_mean_std.add_apply_func(
          func_mean, *args, suffix=suffix_mean, entire=True, **kwargs
      )
  
      calc_pull = ApplyFunc(
          apply_to_key=assign_to_key,
          assign_to_key=store_key,
          features=features,
      )
      calc_pull.add_apply_func(
          pull,
          suffix=suffix_pull,
          axis=1,
          suffix_mean=suffix_mean,
          suffix_std=suffix_std,
      )
  
      self.modules = [calc_mean_std, calc_pull]
  
imports: import numpy
  import pandas
  from popmon.analysis.apply_func import ApplyFunc
  from popmon.analysis.functions import expanding_mean, expanding_std, pull, rolling_mean, rolling_std
  from popmon.base import Pipeline
  from popmon.stats.numpy import mad
label_desc: Use image node_id 1 to create a new PullCalculator object from inherited base classes: Pipeline with example: obj = PullCalculator(func_mean, func_std, apply_to_key, assign_to_key, store_key, suffix_mean, suffix_std, suffix_pull, features)