code: def main(
      config="../../config.yaml", param="./linr_sklearn_config.yaml"
  ):
      # obtain config
      if isinstance(param, str):
          param = JobConfig.load_from_file(param)
      data_guest = param["data_guest"]
      data_host = param["data_host"]
      idx = param["idx"]
      label_name = param["label_name"]
  
      if isinstance(config, str):
          config = JobConfig.load_from_file(config)
          print(f"config: {config}")
          data_base_dir = config["data_base_dir"]
      else:
          data_base_dir = config.data_base_dir
  
      # prepare data
      df_guest = pandas.read_csv(
          os.path.join(data_base_dir, data_guest), index_col=idx
      )
      df_host = pandas.read_csv(
          os.path.join(data_base_dir, data_host), index_col=idx
      )
      df = df_guest.join(df_host, rsuffix="host")
      y = df[label_name]
      X = df.drop(label_name, axis=1)
      lm = SGDRegressor(
          loss="squared_error",
          penalty=param["penalty"],
          random_state=42,
          fit_intercept=True,
          max_iter=param["epochs"],
          average=param["batch_size"],
      )
      lm_fit = lm.fit(X, y)
      y_pred = lm_fit.predict(X)
  
      mse = mean_squared_error(y, y_pred)
      rmse = np.sqrt(mse)
      r2 = r2_score(y, y_pred)
      explained_var = explained_variance_score(y, y_pred)
      metric_summary = {"r2_score": r2, "mse": mse, "rmse": rmse}
      data_summary = {}
      return data_summary, metric_summary
  
file_path: FATE/examples/benchmark_quality/linr/local-linr.py
imports: import argparse
  import os
  import numpy
  import pandas
  from fate_client.pipeline.utils.test_utils import JobConfig
  from sklearn.linear_model import SGDRegressor
  from sklearn.metrics import mean_squared_error, r2_score, explained_variance_score
label_desc: Use image node_id 1 for calling a global function with example usage: main(config, param) and returns: data_summary,  metric_summary