class_docstr: Abstract StanEstimator with shared args for all StanEstimator child classes
  
  Parameters
  ----------
  num_warmup : int
      Number of samples to warm up and to be discarded, default 900
  num_sample : int
      Number of samples to return, default 100
  chains : int
      Number of chains in stan sampler, default 4
  cores : int
      Number of cores for parallel processing, default max(cores, multiprocessing.cpu_count())
  algorithm : str
      If None, default to Stan defaults
  suppress_stan_log : bool
      If False, turn off cmdstanpy logger. Default as False.
  kwargs
      Additional `BaseEstimator` class args
code: def fit(
      self,
      model_name,
      model_param_names,
      data_input,
      fitter=None,
      init_values=None,
  ):
      raise NotImplementedError(
          "Concrete fit() method must be implemented"
      )
  
imports: from abc import abstractmethod
  from copy import copy
  import logging
  import multiprocessing
  from sys import platform, version_info
  from .base_estimator import BaseEstimator
  from ..exceptions import EstimatorException
  from ..utils.stan import get_compiled_stan_model, suppress_stdout_stderr
  from ..utils.general import update_dict
  from ..utils.logger import get_logger
label_desc: Use image node_id 3 for calling the StanEstimator obj's underlying member method code with example usage: obj.fit(model_name, model_param_names, data_input, fitter, init_values) without return types