docs: def add_cpds(self, *cpds):
          """
          This method adds the cpds to the dynamic bayesian network.
          Note that while adding variables and the evidence in cpd,
          they have to be of the following form
          (node_name, time_slice)
          Here, node_name is the node that is inserted
          while the time_slice is an integer value, which denotes
          the index of the time_slice that the node belongs to.
  
          Parameters
          ----------
          cpds : list, set, tuple (array-like)
              List of CPDs which are to be associated with the model. Each CPD
              should be an instance of `TabularCPD`.
  
          Examples
          --------
          >>> from pgmpy.models import DynamicBayesianNetwork as DBN
          >>> from pgmpy.factors.discrete import TabularCPD
          >>> dbn = DBN()
          >>> dbn.add_edges_from([(('D', 0),('G', 0)),(('I', 0),('G', 0)),(('D', 0),('D', 1)),(('I', 0),('I', 1))])
          >>> grade_cpd = TabularCPD(('G', 0), 3, [[0.3, 0.05, 0.9, 0.5],
          ...                                      [0.4, 0.25, 0.8, 0.03],
          ...                                      [0.3, 0.7, 0.02, 0.2]],
          ...                        evidence=[('I', 0),('D', 0)],
          ...                        evidence_card=[2, 2])
          >>> d_i_cpd = TabularCPD(('D',1), 2, [[0.6, 0.3],
          ...                                   [0.4, 0.7]],
          ...                      evidence=[('D',0)],
          ...                      evidence_card=2)
          >>> diff_cpd = TabularCPD(('D', 0), 2, [[0.6, 0.4]])
          >>> intel_cpd = TabularCPD(('I', 0), 2, [[0.7, 0.3]])
          >>> i_i_cpd = TabularCPD(('I', 1), 2, [[0.5, 0.4],
          ...                                    [0.5, 0.6]],
          ...                      evidence=[('I', 0)],
          ...                      evidence_card=2)
          >>> dbn.add_cpds(grade_cpd, d_i_cpd, diff_cpd, intel_cpd, i_i_cpd)
          >>> dbn.get_cpds()
          [<TabularCPD representing P(('G', 0):3 | ('I', 0):2, ('D', 0):2) at 0x7ff7f27b0cf8>,
           <TabularCPD representing P(('D', 1):2 | ('D', 0):2) at 0x7ff810b9c2e8>,
           <TabularCPD representing P(('D', 0):2) at 0x7ff7f27e6f98>,
           <TabularCPD representing P(('I', 0):2) at 0x7ff7f27e6ba8>,
           <TabularCPD representing P(('I', 1):2 | ('I', 0):2) at 0x7ff7f27e6668>]
          """
          for cpd in cpds:
              if not isinstance(cpd, TabularCPD):
                  raise ValueError('cpd should be an instance of TabularCPD')
  
              if set(cpd.variables) - set(cpd.variables).intersection(set(
                      super(DynamicBayesianNetwork, self).nodes())):
                  raise ValueError('CPD defined on variable not in the model', cpd)
  
          self.cpds.extend(cpds)