```#!/usr/bin/env python

from __future__ import division
import numpy as np
from scipy.linalg import hankel
import scipy.io as sio
import matplotlib.pyplot as plt

from ..tools import *
from cum2est import *
from cum3est import *
from cum4est import *

def cumest(y, norder=2, maxlag=0 ,nsamp=None, overlap=0, flag='biased' ,k1=0, k2=0):
"""
Second-, third- or fourth-order cumulants.
Parameters:
y - time-series  - should be a vector
norder - cumulant order: 2, 3 or 4 [default = 2]
maxlag - maximum cumulant lag to compute [default = 0]
samp_seg - samples per segment  [default = data_length]
overlap - percentage overlap of segments [default = 0]
overlap is clipped to the allowed range of [0,99].
flag  - 'biased' or 'unbiased'  [default = 'biased']
k1,k2  - specify the slice of 3rd or 4th order cumulants

Output:
y_cum  - C2(m) or C3(m,k1) or C4(m,k1,k2),  -maxlag <= m <= maxlag
depending upon the cumulant order selected
"""

(ksamp, nrecs) = y.shape
if ksamp == 1:
ksamp = nrecs
nrecs = 1

if norder < 2 or norder > 4:
raise ValueError('cumulant order must be 2, 3 or 4')

if maxlag < 0:
raise ValueError('"maxlag" must be non-negative')

if nrecs > 1: nsamp = ksamp
if nsamp <= 0 or nsamp > ksamp: nsamp = ksamp

if nrecs > 1: overlap = 0
overlap = max(0,min(overlap,99))

# estimate the cumulants
if norder == 2:
y_cum = cum2est(y, maxlag, nsamp, overlap, flag)
elif norder == 3:
y_cum = cum3est(y, maxlag, nsamp, overlap, flag, k1)
elif norder == 4:
y_cum = cum3est(y, maxlag, nsamp, overlap, flag, k1, k2)

return y_cum

def test():

# The right results are:
#           "biased": [-0.12250513  0.35963613  1.00586945  0.35963613 -0.12250513]
#           "unbiaed": [-0.12444965  0.36246791  1.00586945  0.36246791 -0.12444965]
print cum2est(y, 2, 128, 0, 'unbiased')
print cum2est(y, 2, 128, 0, 'biased')

# For the 3rd cumulant:
#           "biased": [-0.18203039  0.07751503  0.67113035  0.729953    0.07751503]
#           "unbiased": [-0.18639911  0.07874543  0.67641484  0.74153955  0.07937539]
print cum3est(y, 2, 128, 0, 'biased', 1)
print cum3est(y, 2, 128, 0, 'unbiased', 1)

# For testing the 4th-order cumulant
# "biased": [-0.03642083  0.4755026   0.6352588   1.38975232  0.83791117  0.41641134 -0.97386322]
# "unbiased": [-0.04011388  0.48736793  0.64948927  1.40734633  0.8445089   0.42303979 -0.99724968]
print cum4est(y, 3, 128, 0, 'biased', 1, 1)
print cum4est(y, 3, 128, 0, 'unbiased', 1, 1)

if __name__ == '__main__':
test()
```