'Return the class information entropy induced by partitioning
the `CS` distribution at all N-1 candidate cut points.
Parameters
CS : (N, K) array of class distributions.'

@classmethod
def _entropy_cuts_sorted(cls, CS):

    CS = np.asarray(CS)
    S1Dist = np.cumsum(CS, axis=0)[:(-1)]
    S2Dist = np.cumsum(CS[::(-1)], axis=0)[(-2)::(-1)]
    ES1 = cls._entropy2(S1Dist)
    ES2 = cls._entropy2(S2Dist)
    S1_count = np.sum(S1Dist, axis=1)
    S2_count = np.sum(S2Dist, axis=1)
    S_count = np.sum(CS)
    ES1w = ((ES1 * S1_count) / S_count)
    ES2w = ((ES2 * S2_count) / S_count)
    E = (ES1w + ES2w)
    return (E, ES1, ES2)
