code: def model_from_dict(model_dict):
      """Recreate a Prophet model from a dictionary.
  
      Recreates models that were converted with model_to_dict.
  
      Parameters
      ----------
      model_dict: Dictionary containing model, created with model_to_dict.
  
      Returns
      -------
      Prophet model.
      """
      model = (
          Prophet()
      )  # We will overwrite all attributes set in init anyway
      # Simple types
      _handle_simple_attributes_backwards_compat(model_dict)
      for attribute in SIMPLE_ATTRIBUTES:
          setattr(model, attribute, model_dict[attribute])
      for attribute in PD_SERIES:
          if model_dict[attribute] is None:
              setattr(model, attribute, None)
          else:
              s = pd.read_json(
                  StringIO(model_dict[attribute]),
                  typ="series",
                  orient="split",
              )
              if s.name == "ds":
                  if len(s) == 0:
                      s = pd.to_datetime(s)
                  s = s.dt.tz_localize(None)
              setattr(model, attribute, s)
      for attribute in PD_TIMESTAMP:
          setattr(
              model,
              attribute,
              pd.Timestamp.utcfromtimestamp(
                  model_dict[attribute]
              ).tz_localize(None),
          )
      for attribute in PD_TIMEDELTA:
          setattr(
              model,
              attribute,
              pd.Timedelta(seconds=model_dict[attribute]),
          )
      for attribute in PD_DATAFRAME:
          if model_dict[attribute] is None:
              setattr(model, attribute, None)
          else:
              df = pd.read_json(
                  StringIO(model_dict[attribute]),
                  typ="frame",
                  orient="table",
                  convert_dates=["ds"],
              )
              if attribute == "train_component_cols":
                  # Special handling because of named index column
                  df.columns.name = "component"
                  df.index.name = "col"
              setattr(model, attribute, df)
      for attribute in NP_ARRAY:
          setattr(model, attribute, np.array(model_dict[attribute]))
      for attribute in ORDEREDDICT:
          key_list, unordered_dict = model_dict[attribute]
          od = OrderedDict()
          for key in key_list:
              od[key] = unordered_dict[key]
          setattr(model, attribute, od)
      # Other attributes with special handling
      # fit_kwargs
      model.fit_kwargs = model_dict["fit_kwargs"]
      # Params (Dict[str, np.ndarray])
      model.params = {
          k: np.array(v) for k, v in model_dict["params"].items()
      }
      # Skipped attributes
      model.stan_backend = None
      model.stan_fit = None
      return model
  
file_path: prophet/python/prophet/serialize.py
imports: from __future__ import absolute_import, division, print_function
  from collections import OrderedDict
  from copy import deepcopy
  from io import StringIO
  import json
  from pathlib import Path
  import numpy
  import pandas
  from prophet.forecaster import Prophet
label_desc: Use image node_id 4 for calling a global function with example usage: model_from_dict(model_dict) and returns: model