code: def test_join(setup):
      df1 = pd.DataFrame(
          [[1, 3, 3], [4, 2, 6], [7, 8, 9]], index=["a1", "a2", "a3"]
      )
      df2 = (
          pd.DataFrame(
              [[1, 2, 3], [1, 5, 6], [7, 8, 9]],
              index=["a1", "b2", "b3"],
          )
          + 1
      )
      df2 = pd.concat([df2, df2 + 1])
  
      mdf1 = from_pandas(df1, chunk_size=2)
      mdf2 = from_pandas(df2, chunk_size=2)
  
      # default `how`
      expected0 = df1.join(df2, lsuffix="l_", rsuffix="r_")
      jdf0 = mdf1.join(
          mdf2, lsuffix="l_", rsuffix="r_", auto_merge="none"
      )
      result0 = jdf0.execute().fetch()
      pd.testing.assert_frame_equal(
          expected0.sort_index(), result0.sort_index()
      )
  
      # how = 'left'
      expected1 = df1.join(df2, how="left", lsuffix="l_", rsuffix="r_")
      jdf1 = mdf1.join(
          mdf2,
          how="left",
          lsuffix="l_",
          rsuffix="r_",
          auto_merge="none",
      )
      result1 = jdf1.execute().fetch()
      pd.testing.assert_frame_equal(
          expected1.sort_index(), result1.sort_index()
      )
  
      # how = 'right'
      expected2 = df1.join(df2, how="right", lsuffix="l_", rsuffix="r_")
      jdf2 = mdf1.join(
          mdf2,
          how="right",
          lsuffix="l_",
          rsuffix="r_",
          auto_merge="none",
      )
      result2 = jdf2.execute().fetch()
      pd.testing.assert_frame_equal(
          expected2.sort_index(), result2.sort_index()
      )
  
      # how = 'inner'
      expected3 = df1.join(df2, how="inner", lsuffix="l_", rsuffix="r_")
      jdf3 = mdf1.join(
          mdf2,
          how="inner",
          lsuffix="l_",
          rsuffix="r_",
          auto_merge="none",
      )
      result3 = jdf3.execute().fetch()
      pd.testing.assert_frame_equal(
          expected3.sort_index(), result3.sort_index()
      )
  
      # how = 'outer'
      expected4 = df1.join(df2, how="outer", lsuffix="l_", rsuffix="r_")
      jdf4 = mdf1.join(
          mdf2,
          how="outer",
          lsuffix="l_",
          rsuffix="r_",
          auto_merge="none",
      )
      result4 = jdf4.execute().fetch()
      pd.testing.assert_frame_equal(
          expected4.sort_index(), result4.sort_index()
      )
  
file_path: mars/mars/dataframe/merge/tests/test_merge_execution.py
imports: import numpy
  import pandas
  import pytest
  from ....core.graph.builder.utils import build_graph
  from ...datasource.dataframe import from_pandas
  from ...datasource.series import from_pandas
  from ...utils import sort_dataframe_inplace
  from ..None import concat, DataFrameConcat, DataFrameMergeAlign
label_desc: Use image node_id 2 for calling a global function with example usage: test_join(setup) without return types