code: def test_proper_backdoor_graph(self):
      bd_graph = self.infer.get_proper_backdoor_graph(
          X=["x1", "x2"], Y=["y1", "y2"]
      )
      self.assertTrue(("x1", "y1") not in bd_graph.edges())
      self.assertEqual(len(bd_graph.edges()), 4)
      self.assertTrue(
          set(bd_graph.edges()),
          set([("x1", "z1"), ("z1", "z2"), ("z2", "x2"), ("y2", "z2")]),
      )
  
imports: import unittest
  import numpy
  import numpy.testing
  import pandas
  from pgmpy.factors.discrete import TabularCPD
  from pgmpy.inference.CausalInference import CausalInference
  from pgmpy.models import BayesianNetwork
label_desc: Use image node_id 3 for calling the TestAdjustmentSet obj's underlying member method code with example usage: obj.test_proper_backdoor_graph() without return types