code: def multiplicative(x, m, fc, alpha=None, beta=None, gamma=None):
      Y = x[:]
  
      if alpha == None or beta == None or gamma == None:
          initial_values = array([0.0, 1.0, 0.0])
          boundaries = [(0, 1), (0, 1), (0, 1)]
          type = "multiplicative"
  
          parameters = fmin_l_bfgs_b(
              RMSE,
              x0=initial_values,
              args=(Y, type, m),
              bounds=boundaries,
              approx_grad=True,
          )
          alpha, beta, gamma = parameters[0]
  
      a = [sum(Y[0:m]) / float(m)]
      b = [(sum(Y[m : 2 * m]) - sum(Y[0:m])) / m**2]
      s = [Y[i] / a[0] for i in range(m)]
      y = [(a[0] + b[0]) * s[0]]
      rmse = 0
  
      for i in range(len(Y) + fc):
          if i == len(Y):
              Y.append((a[-1] + b[-1]) * s[-m])
  
          a.append(alpha * (Y[i] / s[i]) + (1 - alpha) * (a[i] + b[i]))
          b.append(beta * (a[i + 1] - a[i]) + (1 - beta) * b[i])
          s.append(gamma * (Y[i] / (a[i] + b[i])) + (1 - gamma) * s[i])
          y.append((a[i + 1] + b[i + 1]) * s[i + 1])
  
      rmse = sqrt(
          sum([(m - n) ** 2 for m, n in zip(Y[:-fc], y[: -fc - 1])])
          / len(Y[:-fc])
      )
  
      return Y[-fc:], alpha, beta, gamma, rmse
  
file_path: lore/lore/estimators/holt_winters/holtwinters.py
imports: from __future__ import division
  from sys import exit
  from math import sqrt
  from numpy import array
  from scipy.optimize import fmin_l_bfgs_b
label_desc: Use image node_id 4 for calling a global function with example usage: multiplicative(x, m, fc, alpha, beta, gamma) and returns: Y,  alpha,  beta,  gamma,  rmse