class_docstr: Tests for reshaping and concatenation.
class_docstr_tok: ["Tests","for","reshaping","and","concatenation","."]
code: def test_merge_on_extension_array_duplicates(self, data):
      # GH 23020
      a, b = data[:2]
      key = type(data)._from_sequence([a, b, a], dtype=data.dtype)
      df1 = pd.DataFrame({"key": key, "val": [1, 2, 3]})
      df2 = pd.DataFrame({"key": key, "val": [1, 2, 3]})
  
      result = pd.merge(df1, df2, on="key")
      expected = pd.DataFrame(
          {
              "key": key.take([0, 0, 1, 2, 2]),
              "val_x": [1, 1, 2, 3, 3],
              "val_y": [1, 3, 2, 1, 3],
          }
      )
      tm.assert_frame_equal(result, expected)
  
imports: import itertools
  import numpy
  import pytest
  import pandas
  import pandas._testing
  from pandas.api.extensions import ExtensionArray
  from pandas.core.internals.blocks import EABackedBlock
label_desc: Use image node_id 15 for calling the BaseReshapingTests obj's underlying member method code with example usage: obj.test_merge_on_extension_array_duplicates(data) without return types