code: def condition_tpm(tpm, fixed_nodes, state):
      
      conditioning_indices = [[slice(None)]] * len(state)
      for i in fixed_nodes:
          # Preserve singleton dimensions with `np.newaxis`
          conditioning_indices[i] = [state[i], np.newaxis]
      # Flatten the indices.
      conditioning_indices = list(chain.from_iterable(conditioning_indices))
      # Obtain the actual conditioned TPM by indexing with the conditioning
      # indices.
      return tpm[tuple(conditioning_indices)]
docs: Return a TPM conditioned on the given fixed node indices, whose states
      are fixed according to the given state-tuple.
  
      The dimensions of the new TPM that correspond to the fixed nodes are
      collapsed onto their state, making those dimensions singletons suitable for
      broadcasting. The number of dimensions of the conditioned TPM will be the
      same as the unconditioned TPM.