def METHOD_NAME():
    # Recursive merge
    meta1 = {
        "k1": {
            "k1": [1, 2],
            "k2": 2,
        },
        "k2": 2,
        "k4": (1, 2),
    }
    meta2 = {
        "k1": {"k1": [3]},
        "k3": 3,
        "k4": (3,),
    }
    out = merge(meta1, meta2, metadata_conflicts="error")
    assert out == {
        "k1": {
            "k2": 2,
            "k1": [1, 2, 3],
        },
        "k2": 2,
        "k3": 3,
        "k4": (1, 2, 3),
    }
    # Merge two ndarrays
    meta1 = {"k1": np.array([1, 2])}
    meta2 = {"k1": np.array([3])}
    out = merge(meta1, meta2, metadata_conflicts="error")
    assert np.all(out["k1"] == np.array([1, 2, 3]))
    # Merge list and np.ndarray
    meta1 = {"k1": [1, 2]}
    meta2 = {"k1": np.array([3])}
    assert np.all(out["k1"] == np.array([1, 2, 3]))
    # Can't merge two scalar types
    meta1 = {"k1": 1}
    meta2 = {"k1": 2}
    with pytest.raises(MergeConflictError):
        merge(meta1, meta2, metadata_conflicts="error")
    # Conflicting shape
    meta1 = {"k1": np.array([1, 2])}
    meta2 = {"k1": np.array([[3]])}
    with pytest.raises(MergeConflictError):
        merge(meta1, meta2, metadata_conflicts="error")
    # Conflicting array type
    meta1 = {"k1": np.array([1, 2])}
    meta2 = {"k1": np.array(["3"])}
    with pytest.raises(MergeConflictError):
        merge(meta1, meta2, metadata_conflicts="error")
    # Conflicting array type with 'silent' merging
    meta1 = {"k1": np.array([1, 2])}
    meta2 = {"k1": np.array(["3"])}
    out = merge(meta1, meta2, metadata_conflicts="silent")
    assert np.all(out["k1"] == np.array(["3"]))