docs: def remove_node(self, node):
          """
          Remove node from the model.
  
          Removing a node also removes all the associated edges, removes the CPD
          of the node and marginalizes the CPDs of it's children.
  
          Parameters
          ----------
          node : node
              Node which is to be removed from the model.
  
          Returns
          -------
          None
  
          Examples
          --------
          >>> import pandas as pd
          >>> import numpy as np
          >>> from pgmpy.models import BayesianModel
          >>> model = BayesianModel([('A', 'B'), ('B', 'C'),
          ...                        ('A', 'D'), ('D', 'C')])
          >>> values = pd.DataFrame(np.random.randint(low=0, high=2, size=(1000, 4)),
          ...                       columns=['A', 'B', 'C', 'D'])
          >>> model.fit(values)
          >>> model.get_cpds()
          [<TabularCPD representing P(A:2) at 0x7f28248e2438>,
           <TabularCPD representing P(B:2 | A:2) at 0x7f28248e23c8>,
           <TabularCPD representing P(C:2 | B:2, D:2) at 0x7f28248e2748>,
           <TabularCPD representing P(D:2 | A:2) at 0x7f28248e26a0>]
          >>> model.remove_node('A')
          >>> model.get_cpds()
          [<TabularCPD representing P(B:2) at 0x7f28248e23c8>,
           <TabularCPD representing P(C:2 | B:2, D:2) at 0x7f28248e2748>,
           <TabularCPD representing P(D:2) at 0x7f28248e26a0>]
          """
          affected_nodes = [v for u, v in self.edges() if u == node]
  
          for affected_node in affected_nodes:
              node_cpd = self.get_cpds(node=affected_node)
              if node_cpd:
                  node_cpd.marginalize([node], inplace=True)
  
          if self.get_cpds(node=node):
              self.remove_cpds(node)
          super(BayesianModel, self).remove_node(node)