code: def _get_ml_engines(self, query: ASTNode = None):
      columns = self.information_schema["ML_ENGINES"]
  
      integrations = self.integration_controller.get_all()
      ml_integrations = {
          key: val
          for key, val in integrations.items()
          if val["type"] == "ml"
      }
  
      data = []
      for _key, val in ml_integrations.items():
          data.append(
              [
                  val["name"],
                  val.get("engine"),
                  val.get("connection_data"),
              ]
          )
  
      df = pd.DataFrame(data, columns=columns)
      return df
  
imports: from functools import partial
  import pandas
  from mindsdb_sql.parser.ast import BinaryOperation, Constant, Identifier, Select, Join, Union, Insert, Delete
  from mindsdb_sql.parser.ast.base import ASTNode
  from mindsdb.api.executor.datahub.classes.tables_row import TABLES_ROW_TYPE, TablesRow
  from mindsdb.api.executor.datahub.datanodes.datanode import DataNode
  from mindsdb.api.executor.datahub.datanodes.integration_datanode import IntegrationDataNode
  from mindsdb.api.executor.datahub.datanodes.project_datanode import ProjectDataNode
  from mindsdb.api.executor import exceptions
  from mindsdb.api.executor.utilities.sql import query_df
  from mindsdb.interfaces.agents.agents_controller import AgentsController
  from mindsdb.interfaces.database.projects import ProjectController
  from mindsdb.interfaces.jobs.jobs_controller import JobsController
  from mindsdb.interfaces.skills.skills_controller import SkillsController
  from mindsdb.utilities import log
label_desc: Use image node_id 9 for calling the InformationSchemaDataNode obj's underlying member method code with example usage: obj._get_ml_engines(query) and returns: df