class_docstr: Parameters
  ----------
  regressor_col : list
      Names of regressor columns, if any
  regressor_sign :  list
      list with values { '+', '-', '=' } such that
      '+' indicates regressor coefficient estimates are constrained to [0, inf).
      '-' indicates regressor coefficient estimates are constrained to (-inf, 0].
      '=' indicates regressor coefficient estimates can be any value between (-inf, inf).
      The length of `regressor_sign` must be the same length as `regressor_col`. If None,
      all elements of list will be set to '='.
  regressor_beta_prior : list
      list of prior float values for regressor coefficient betas. The length of `regressor_beta_prior`
      must be the same length as `regressor_col`. If None, use non-informative priors.
  regressor_sigma_prior : list
      list of prior float values for regressor coefficient sigmas. The length of `regressor_sigma_prior`
      must be the same length as `regressor_col`. If None, use non-informative priors.
  regression_penalty : { 'fixed_ridge', 'lasso', 'auto_ridge' }
      regression penalty method
  lasso_scale : float
      float value between [0, 1], applicable only if `regression_penalty` == 'lasso'
  auto_ridge_scale : float
      float value between [0, 1], applicable only if `regression_penalty` == 'auto_ridge'
  slope_sm_input : float
      float value between [0, 1]. A larger value puts more weight on the current slope.
      If None, the model will estimate this value.
docstr: Return DataFrame regression coefficients.
    If point_method is None when fitting, return the median of coefficients.
  
  Parameters
  -----------
  lower : float between (0, 1). default to be 0.05
      lower bound for the CI
  upper : float between (0, 1). default to be 0.95.
      upper bound for the CI
  
  Returns
  -------
  pandas data frame holding the regression coefficients
code: def get_regression_coefs(
      self,
      training_meta,
      point_method,
      point_posteriors,
      posterior_samples,
      lower=0.05,
      upper=0.95,
  ):
      """Return DataFrame regression coefficients.
        If point_method is None when fitting, return the median of coefficients.
  
      Parameters
      -----------
      lower : float between (0, 1). default to be 0.05
          lower bound for the CI
      upper : float between (0, 1). default to be 0.95.
          upper bound for the CI
  
      Returns
      -------
      pandas data frame holding the regression coefficients
      """
      # init dataframe
      coef_df = pd.DataFrame()
  
      # end if no regressors
      if self.num_of_regressors == 0:
          return coef_df
  
      _point_method = point_method
      if point_method is None:
          _point_method = PredictMethod.MEDIAN.value
  
      coef = point_posteriors.get(_point_method).get(
          RegressionSamplingParameters.REGRESSION_COEFFICIENTS.value
      )
  
      # get column names
      pr_cols = self.positive_regressor_col
      nr_cols = self.negative_regressor_col
      rr_cols = self.regular_regressor_col
  
      # note ordering here is not the same as `self.regressor_cols` because regressors here are grouped by signs
      regressor_cols = pr_cols + nr_cols + rr_cols
  
      # same note
      regressor_signs = (
          ["Positive"] * self.num_of_positive_regressors
          + ["Negative"] * self.num_of_negative_regressors
          + ["Regular"] * self.num_of_regular_regressors
      )
  
      coef_df[COEFFICIENT_DF_COLS.REGRESSOR] = regressor_cols
      coef_df[COEFFICIENT_DF_COLS.REGRESSOR_SIGN] = regressor_signs
      coef_df[COEFFICIENT_DF_COLS.COEFFICIENT] = coef.flatten()
  
      # if we have posteriors distribution and also include ci
      if point_method in [
          None,
          PredictMethod.MEAN.value,
          PredictMethod.MEDIAN.value,
      ]:
          coef_samples = posterior_samples.get(
              RegressionSamplingParameters.REGRESSION_COEFFICIENTS.value
          )
          coef_lower = np.quantile(coef_samples, lower, axis=0)
          coef_upper = np.quantile(coef_samples, upper, axis=0)
          coef_df[
              COEFFICIENT_DF_COLS.COEFFICIENT + "_lower"
          ] = coef_lower
          coef_df[
              COEFFICIENT_DF_COLS.COEFFICIENT + "_upper"
          ] = coef_upper
          n_pos = np.apply_along_axis(
              lambda x: np.sum(x >= 0), 0, coef_samples
          )
          n_total = coef_samples.shape[0]
          coef_df[COEFFICIENT_DF_COLS.PROB_COEF_POS] = n_pos / n_total
          coef_df[COEFFICIENT_DF_COLS.PROB_COEF_NEG] = (
              1 - n_pos / n_total
          )
  
      return coef_df
  
imports: import numpy
  import pandas
  from scipy.stats import nct
  from copy import deepcopy
  import torch
  from enum import Enum
  import warnings
  from ..constants.constants import DEFAULT_REGRESSOR_SIGN, DEFAULT_REGRESSOR_BETA, DEFAULT_REGRESSOR_SIGMA, COEFFICIENT_DF_COLS, PredictMethod, PredictionKeys, TrainingMetaKeys, PredictionMetaKeys
  from ..exceptions import IllegalArgument, ModelException, DataInputException
  from .ets import ETSModel
  from ..estimators.stan_estimator import StanEstimatorMCMC, StanEstimatorMAP
  from ..estimators.pyro_estimator import PyroEstimatorSVI
label_desc: Use image node_id 13 for calling the LGTModel obj's underlying member method code with example usage: obj.get_regression_coefs(training_meta, point_method, point_posteriors, posterior_samples, lower, upper) and returns: coef_df, coef_df