class_docstr: The main entry point to create a forecast.
  
  Call the :py:meth:`~greykite.framework.templates.forecaster.Forecaster.run_forecast_config`
  method to create a forecast. It takes a dataset and forecast configuration parameters.
  
  Notes
  -----
  This class can create forecasts using any of the model templates in
  `~greykite.framework.templates.model_templates.ModelTemplateEnum`.
  Model templates provide suitable default values for the available
  forecast estimators depending on the data characteristics.
  
  The model template is selected via the ``config.model_template``
  parameter to :py:meth:`~greykite.framework.templates.forecaster.Forecaster.run_forecast_config`.
  
  To add your own custom algorithms or template classes in our framework,
  pass ``model_template_enum`` and ``default_model_template_name``
  to the constructor.
class_docstr_tok: ["The","main","entry","point","to","create","a","forecast",".","Call","the",":","py",":","meth",":","`","~greykite.framework.templates.forecaster.Forecaster.run_forecast_config","`","method","to","create","a","forecast",".","It","takes","a","dataset","and","forecast","configuration","parameters",".","Notes","--","--","-","This","class","can","create","forecasts","using","any","of","the","model","templates","in","`","~greykite.framework.templates.model_templates.ModelTemplateEnum","`",".","Model","templates","provide","suitable","default","values","for","the","available","forecast","estimators","depending","on","the","data","characteristics",".","The","model","template","is","selected","via","the","``","config.model_template","``","parameter","to",":","py",":","meth",":","`","~greykite.framework.templates.forecaster.Forecaster.run_forecast_config","`",".","To","add","your","own","custom","algorithms","or","template","classes","in","our","framework",",","pass","``","model_template_enum","``","and","``","default_model_template_name","``","to","the","constructor","."]
code: def __init__(
      self,
      model_template_enum: Type[Enum] = ModelTemplateEnum,
      default_model_template_name: str = ModelTemplateEnum.AUTO.name,
  ):
      # Optional user input
      self.model_template_enum: Type[Enum] = model_template_enum
      """The available template names. An Enum class where names are template names, and values are of type
          `~greykite.framework.templates.model_templates.ModelTemplate`.
          """
      self.default_model_template_name: str = (
          default_model_template_name
      )
      """The default template name if not provided by ``config.model_template``.
          Should be a name in ``model_template_enum`` or "auto".
          Used by :py:meth:`~greykite.framework.templates.forecaster.Forecaster.__get_template_class`.
          """
      # The following are set by `self.run_forecast_config`.
      self.template_class: Optional[Type[TemplateInterface]] = None
      """Template class used. Must implement
          `~greykite.framework.templates.template_interface.TemplateInterface`
          and be one of the classes in ``self.model_template_enum``.
          Available for debugging purposes.
          Set by :py:meth:`~greykite.framework.templates.forecaster.Forecaster.run_forecast_config`.
          """
      self.template: Optional[TemplateInterface] = None
      """Instance of ``template_class`` used to run the forecast.
          See the docstring of the specific template class used.
  
              - `~greykite.framework.templates.simple_silverkite_template.SimpleSilverkiteTemplate`
              - `~greykite.framework.templates.silverkite_template.SilverkiteTemplate`
              - `~greykite.framework.templates.prophet_template.ProphetTemplate`
              - etc.
  
          Available for debugging purposes.
          Set by :py:meth:`~greykite.framework.templates.forecaster.Forecaster.run_forecast_config`.
          """
      self.config: Optional[ForecastConfig] = None
      """`~greykite.framework.templates.autogen.forecast_config.ForecastConfig`
          passed to the template class.
          Set by :py:meth:`~greykite.framework.templates.forecaster.Forecaster.run_forecast_config`.
          """
      self.pipeline_params: Optional[Dict] = None
      """Parameters used to call :func:`~greykite.framework.pipeline.pipeline.forecast_pipeline`.
          Available for debugging purposes.
          Set by :py:meth:`~greykite.framework.templates.forecaster.Forecaster.run_forecast_config`.
          """
      self.forecast_result: Optional[ForecastResult] = None
      """The forecast result, returned by :func:`~greykite.framework.pipeline.pipeline.forecast_pipeline`.
          Set by :py:meth:`~greykite.framework.templates.forecaster.Forecaster.run_forecast_config`.
          """
  
imports: import json
  from copy import deepcopy
  from enum import Enum
  from typing import Dict
  from typing import Optional
  from typing import Type
  import pandas
  from greykite.common.logging import LoggingLevelEnum
  from greykite.common.logging import log_message
  from greykite.common.python_utils import unique_elements_in_list
  from greykite.framework.pipeline.pipeline import ForecastResult
  from greykite.framework.pipeline.pipeline import forecast_pipeline
  from greykite.framework.pipeline.utils import get_basic_pipeline
  from greykite.framework.templates.auto_model_template import get_auto_silverkite_model_template
  from greykite.framework.templates.autogen.forecast_config import ForecastConfig
  from greykite.framework.templates.autogen.forecast_config import forecast_config_from_dict
  from greykite.framework.templates.forecast_config_defaults import ForecastConfigDefaults
  from greykite.framework.templates.model_templates import ModelTemplateEnum
  from greykite.framework.templates.pickle_utils import dump_obj
  from greykite.framework.templates.pickle_utils import load_obj
  from greykite.framework.templates.simple_silverkite_template import SimpleSilverkiteTemplate
  from greykite.framework.templates.template_interface import TemplateInterface
  from greykite.sklearn.estimator.one_by_one_estimator import OneByOneEstimator
label_desc: Use image node_id 1 to create a new Forecaster object  with example: obj = Forecaster(model_template_enum, default_model_template_name)