code: def from_recipe_config(
      cls, recipe_config: Dict[str, Any], recipe_root: str
  ):
      ingest_config = recipe_config.get("steps", {}).get("ingest", {})
      target_config = {"target_col": recipe_config.get("target_col")}
      if "positive_class" in recipe_config:
          target_config["positive_class"] = recipe_config.get(
              "positive_class"
          )
      return cls(
          step_config={
              **ingest_config,
              **target_config,
              **{
                  "recipe": recipe_config.get("recipe", "regression/v1")
              },
          },
          recipe_root=recipe_root,
      )
  
imports: import abc
  import logging
  import os
  from pathlib import Path
  from typing import Any, Dict, Optional
  import pandas
  from mlflow.exceptions import MlflowException
  from mlflow.protos.databricks_pb2 import INVALID_PARAMETER_VALUE
  from mlflow.recipes.artifacts import DataframeArtifact
  from mlflow.recipes.cards import BaseCard
  from mlflow.recipes.step import BaseStep, StepClass
  from mlflow.recipes.steps.ingest.datasets import CustomDataset, DeltaTableDataset, ParquetDataset, SparkSqlDataset
  from mlflow.recipes.utils.step import get_pandas_data_profiles, validate_classification_config
  from mlflow.utils.file_utils import read_parquet_as_pandas_df
label_desc: Use image node_id 2 for calling the IngestStep obj's underlying member method code with example usage: obj.from_recipe_config(cls, recipe_config, recipe_root) and returns: cls