class_docstr: Class to represent a Markov Chain with multiple kernels for factored state space,
  along with methods to simulate a run.
  
  Examples
  --------
  
  Create an empty Markov Chain:
  
  >>> from pgmpy.models import MarkovChain as MC
  >>> model = MC()
  
  And then add variables to it
  
  >>> model.add_variables_from(['intel', 'diff'], [2, 3])
  
  Or directly create a Markov Chain from a list of variables and their cardinalities
  
  >>> model = MC(['intel', 'diff'], [2, 3])
  
  Add transition models
  
  >>> intel_tm = {0: {0: 0.25, 1: 0.75}, 1: {0: 0.5, 1: 0.5}}
  >>> model.add_transition_model('intel', intel_tm)
  >>> diff_tm = {0: {0: 0.1, 1: 0.5, 2: 0.4}, 1: {0: 0.2, 1: 0.2, 2: 0.6 }, 2: {0: 0.7, 1: 0.15, 2: 0.15}}
  >>> model.add_transition_model('diff', diff_tm)
  
  Set a start state
  
  >>> from pgmpy.factors.discrete import State
  >>> model.set_start_state([State('intel', 0), State('diff', 2)])
  
  Sample from it
  
  >>> model.sample(size=5)
     intel  diff
  0      0     2
  1      1     0
  2      0     1
  3      1     0
  4      0     2
class_docstr_tok: ["Class","to","represent","a","Markov","Chain","with","multiple","kernels","for","factored","state","space",",","along","with","methods","to","simulate","a","run",".","Examples","--","--","--","--","Create","an","empty","Markov","Chain",":",">",">",">","from","pgmpy.models","import","MarkovChain","as","MC",">",">",">","model","=","MC","(",")","And","then","add","variables","to","it",">",">",">","model.add_variables_from","(","[","'intel","'",",","'diff","'","]",",","[","2",",","3","]",")","Or","directly","create","a","Markov","Chain","from","a","list","of","variables","and","their","cardinalities",">",">",">","model","=","MC","(","[","'intel","'",",","'diff","'","]",",","[","2",",","3","]",")","Add","transition","models",">",">",">","intel_tm","=","{","0",":","{","0",":","0.25",",","1",":","0.75","}",",","1",":","{","0",":","0.5",",","1",":","0.5","}","}",">",">",">","model.add_transition_model","(","'intel","'",",","intel_tm",")",">",">",">","diff_tm","=","{","0",":","{","0",":","0.1",",","1",":","0.5",",","2",":","0.4","}",",","1",":","{","0",":","0.2",",","1",":","0.2",",","2",":","0.6","}",",","2",":","{","0",":","0.7",",","1",":","0.15",",","2",":","0.15","}","}",">",">",">","model.add_transition_model","(","'diff","'",",","diff_tm",")","Set","a","start","state",">",">",">","from","pgmpy.factors.discrete","import","State",">",">",">","model.set_start_state","(","[","State","(","'intel","'",",","0",")",",","State","(","'diff","'",",","2",")","]",")","Sample","from","it",">",">",">","model.sample","(","size=5",")","intel","diff","0","0","2","1","1","0","2","0","1","3","1","0","4","0","2"]
docstr: Set the start state of the Markov Chain. If the start_state is given as an array-like iterable, its contents
  are reordered in the internal representation.
  
  Parameters
  ----------
  start_state: dict or array-like iterable object
      Dict (or list) of tuples representing the starting states of the variables.
  
  Examples
  --------
  >>> from pgmpy.models import MarkovChain as MC
  >>> from pgmpy.factors.discrete import State
  >>> model = MC(['a', 'b'], [2, 2])
  >>> model.set_start_state([State('a', 0), State('b', 1)])
docstr_tok: ["Set","the","start","state","of","the","Markov","Chain",".","If","the","start_state","is","given","as","an","array-like","iterable",",","its","contents","are","reordered","in","the","internal","representation",".","Parameters","--","--","--","--","--","start_state",":","dict","or","array-like","iterable","object","Dict","(","or","list",")","of","tuples","representing","the","starting","states","of","the","variables",".","Examples","--","--","--","--",">",">",">","from","pgmpy.models","import","MarkovChain","as","MC",">",">",">","from","pgmpy.factors.discrete","import","State",">",">",">","model","=","MC","(","[","'","a","'",",","'","b","'","]",",","[","2",",","2","]",")",">",">",">","model.set_start_state","(","[","State","(","'","a","'",",","0",")",",","State","(","'","b","'",",","1",")","]",")"]
code: def set_start_state(self, start_state):
      """
      Set the start state of the Markov Chain. If the start_state is given as an array-like iterable, its contents
      are reordered in the internal representation.
  
      Parameters
      ----------
      start_state: dict or array-like iterable object
          Dict (or list) of tuples representing the starting states of the variables.
  
      Examples
      --------
      >>> from pgmpy.models import MarkovChain as MC
      >>> from pgmpy.factors.discrete import State
      >>> model = MC(['a', 'b'], [2, 2])
      >>> model.set_start_state([State('a', 0), State('b', 1)])
      """
      if start_state is not None:
          if not hasattr(start_state, "__iter__") or isinstance(
              start_state, str
          ):
              raise ValueError(
                  "start_state must be a non-string iterable."
              )
          # Must be an array-like iterable. Reorder according to self.variables.
          state_dict = {var: st for var, st in start_state}
          start_state = [
              State(var, state_dict[var]) for var in self.variables
          ]
      if start_state is None or self._check_state(start_state):
          self.state = start_state
  
imports: from collections import defaultdict
  import numpy
  from pandas import DataFrame
  from scipy.linalg import eig
  from pgmpy.factors.discrete import State
  from pgmpy.global_vars import logger
  from pgmpy.utils import sample_discrete
label_desc: Use image node_id 2 for calling the MarkovChain obj's underlying member method code with example usage: obj.set_start_state(start_state) without return types