code: def test_setdiff2d():
      X = np.array(
          [
              ["a", "y", "b"],
              ["b", "y", "a"],
              ["a", "y", "c"],
              ["c", "y", "a"],
              ["a", "y", "d"],
              ["c", "y", "d"],
              ["b", "y", "c"],
              ["f", "y", "e"],
          ]
      )
  
      Y = np.array(
          [
              ["a", "z", "b"],
              ["b", "z", "a"],
              ["a", "z", "c"],
              ["c", "z", "a"],
              ["a", "y", "d"],
              ["c", "y", "d"],
              ["b", "y", "c"],
              ["f", "y", "e"],
          ]
      )
  
      ret1 = np.array(
          [
              ["a", "y", "b"],
              ["b", "y", "a"],
              ["a", "y", "c"],
              ["c", "y", "a"],
          ]
      )
  
      ret2 = np.array(
          [
              ["a", "z", "b"],
              ["b", "z", "a"],
              ["a", "z", "c"],
              ["c", "z", "a"],
          ]
      )
  
      assert np.array_equal(ret1, _setdiff2d(X, Y))
      assert np.array_equal(ret2, _setdiff2d(Y, X))
  
      # i.e., don't use it as setdiff1d
      with pytest.raises(RuntimeError):
          X = np.array([1, 2, 3, 4, 5, 6])
          Y = np.array([1, 2, 3, 7, 8, 9])
          _setdiff2d(X, Y)
  
file_path: AmpliGraph/tests/ampligraph/discovery/test_discovery.py
imports: import numpy
  import pytest
  from sklearn.cluster import DBSCAN
  from ampligraph.discovery.discovery import discover_facts, generate_candidates, _setdiff2d, find_clusters, find_duplicates, query_topn
  from ampligraph.latent_features import ScoringBasedEmbeddingModel
label_desc: Use image node_id 3 for calling a global function with example usage: test_setdiff2d() without return types