docs: def map_predict(interface, state, label, inp):
      """
      Function makes a predictions of samples with given model. It calculates probabilities with multinomial and Gaussian distribution.
      """
      import numpy as np
      out = interface.output(0)
  
      continuous = [j for i, j in enumerate(state["X_indices"]) if
                    state["X_meta"][i] == "c"]  # indices of continuous features
      discrete = [j for i, j in enumerate(state["X_indices"]) if
                  state["X_meta"][i] == "d"]  # indices of discrete features
  
      cont = True if len(continuous) > 0 else False  # enables calculation of Gaussian probabilities
      disc = True if len(discrete) > 0 else False  # enables calculation of multinomial probabilities.
  
      for row in inp:
          row = row.strip().split(state["delimiter"])
          if len(row) > 1:  # if row is empty
              # set id of a sample
              x_id = "" if state["id_index"] == -1 else row[state["id_index"]]
              # initialize prior probability for all labels
              probs = state["fit_model"]["prior_log"]
  
              if cont:  # continuous features
                  x = np.array([(0 if row[j] in state["missing_vals"] else float(row[j])) for j in
                                continuous])  # sets selected features of the sample
                  # Gaussian distribution
                  probs = probs - 0.5 * np.sum(
                      np.true_divide((x - state["fit_model"]["mean"]) ** 2, state["fit_model"]["var"]) +
                      state["fit_model"]["var_log"], axis=1)
  
              if disc:  # discrete features
                  # multinomial distribution
                  probs = probs + np.sum(
                      [(0 if row[i] in state["missing_vals"] else state["fit_model"].get((str(i), row[i]), np.zeros(1)))
                       for i in discrete], axis=0)
  
              # normalize by P(x) = P(f_1, ..., f_n)
              log_prob_x = np.log(np.sum(np.exp(probs)))
              probs = np.exp(np.array(probs) - log_prob_x)
              # Predicted label is the one with highest probability
              y_predicted = max(zip(probs, state["fit_model"]["y_labels"]))[1]
              out.add(x_id, (y_predicted, probs.tolist()))