class_docstr: Base class for integration engines to connect with other machine learning libraries/frameworks.
  
  This class will be instanced when interacting with the underlying framework. For compliance with the interface
  that MindsDB core expects, instances of this class will be wrapped with the `BaseMLEngineExec` class defined
  in `libs/ml_exec_base`.
  
  Broadly speaking, the flow is as follows:
    - A SQL statement is sent to the MindsDB executor
    - The statement is parsed, and a sequential plan is generated by `mindsdb_sql`
    - If any step in the plan involves an ML framework, a wrapped engine that inherits from this class will be called for the respective action
        - For example, creating a new model would call `create()`
    - Any output produced by the ML engine is then formatted by the wrapper and passed back into the MindsDB executor, which can then morph the data to comply with the original SQL query
docstr: Warning: This method should not be overridden.
  
  Initialize storage objects required by the ML engine.
  
  - engine_storage: persists global engine-related internals or artifacts that may be used by all models from the engine.
  - model_storage: stores artifacts for any single given model.
code: def __init__(self, model_storage, engine_storage, **kwargs) -> None:
      """
      Warning: This method should not be overridden.
  
      Initialize storage objects required by the ML engine.
  
      - engine_storage: persists global engine-related internals or artifacts that may be used by all models from the engine.
      - model_storage: stores artifacts for any single given model.
      """
      self.model_storage = model_storage
      self.engine_storage = engine_storage
      self.generative = False  # if True, the target column name does not have to be specified at creation time
  
      if kwargs.get("base_model_storage"):
          self.base_model_storage = kwargs[
              "base_model_storage"
          ]  # available when updating a model
      else:
          self.base_model_storage = None
  
imports: import ast
  import inspect
  import textwrap
  from _ast import AnnAssign, AugAssign
  from typing import Any, Dict, List, Optional
  import pandas
  from mindsdb_sql.parser.ast.base import ASTNode
  from mindsdb.utilities import log
  from mindsdb.integrations.libs.response import HandlerResponse, HandlerStatusResponse
label_desc: Use image node_id 1 to create a new BaseMLEngine object from inherited base classes: ArgProbeMixin with example: obj = BaseMLEngine(model_storage, engine_storage)