iStochasticityAssumptions [sm_List] :=
SquareMatrixQ[sm] && Element[DeleteDuplicates[Flatten[sm]], Reals] &&
Apply [And, Map[#>=0&, sm, {2}], {0, 1}] && Apply [And, Thread[Total[sm, {2}] == 1]]
iStochasticityAssumptions[sm_SparseArray] := SquareMatrixQ[sm] &&
Apply[And, Thread[ DeleteDuplicates [ sm["NonzeroValues"] ~Join~ {sm["Background"]} ] >= 0 ] ] &&
Apply[And, Thread [Total [sm, {2}] = 1]]