class_docstr: Base Recipe
class_docstr_tok: ["Base","Recipe"]
docstr: Recipe base class.
  
  :param recipe_root_path: String path to the directory under which the recipe template
                             such as recipe.yaml, profiles/{profile}.yaml and
                             steps/{step_name}.py are defined.
  :param profile: String specifying the profile name, with which
                  {recipe_root_path}/profiles/{profile}.yaml is read and merged with
                  recipe.yaml to generate the configuration to run the recipe.
docstr_tok: ["Recipe","base","class",".",":","param","recipe_root_path",":","String","path","to","the","directory","under","which","the","recipe","template","such","as","recipe.yaml",",","profiles\/","{","profile","}",".yaml","and","steps\/","{","step_name","}",".py","are","defined",".",":","param","profile",":","String","specifying","the","profile","name",",","with","which","{","recipe_root_path","}","\/profiles\/","{","profile","}",".yaml","is","read","and","merged","with","recipe.yaml","to","generate","the","configuration","to","run","the","recipe","."]
code: def __init__(self, recipe_root_path: str, profile: str) -> None:
      """
      Recipe base class.
  
      :param recipe_root_path: String path to the directory under which the recipe template
                                 such as recipe.yaml, profiles/{profile}.yaml and
                                 steps/{step_name}.py are defined.
      :param profile: String specifying the profile name, with which
                      {recipe_root_path}/profiles/{profile}.yaml is read and merged with
                      recipe.yaml to generate the configuration to run the recipe.
      """
      self._recipe_root_path = recipe_root_path
      self._run_args = {}
      self._profile = profile
      self._name = get_recipe_name(recipe_root_path)
      # self._steps contains concatenated ordered lists of step objects representing multiple
      # disjoint DAGs. To keep it in sync with the underlying config file, it should be reloaded
      # from config files using self._resolve_recipe_steps() at the beginning of __init__(),
      # run(), and inspect(), and should not reload it elsewhere.
      self._steps = self._resolve_recipe_steps()
      self._recipe = get_recipe_config(
          self._recipe_root_path, self._profile
      ).get("recipe")
  
imports: import abc
  import logging
  import os
  from typing import List, Optional
  from mlflow.exceptions import MlflowException
  from mlflow.protos.databricks_pb2 import BAD_REQUEST, INTERNAL_ERROR, INVALID_PARAMETER_VALUE
  from mlflow.recipes import dag_help_strings
  from mlflow.recipes.artifacts import Artifact
  from mlflow.recipes.step import BaseStep, StepClass, StepStatus
  from mlflow.recipes.utils import get_recipe_config, get_recipe_name, get_recipe_root_path
  from mlflow.recipes.utils.execution import clean_execution_state, get_or_create_base_execution_directory, get_step_output_path, run_recipe_step
  from mlflow.recipes.utils.step import display_html
  from mlflow.utils.class_utils import _get_class_from_string
label_desc: Use image node_id 1 to create a new BaseRecipe object  with example: obj = BaseRecipe(recipe_root_path, profile)