import(boot, RColorBrewer)
importFrom("graphics", "abline", "arrows", "axis", "barplot", "box", "hist", "layout", "legend", "lines", "mtext", "par", "plot", "plot.new", "points", "polygon", "rect", "segments", "text", "title")
importFrom("grDevices", "col2rgb", "colorRamp", "dev.off", "rgb")
importFrom("stats", "chisq.test", "complete.cases", "density", "dnorm", "dunif", "formula", "median", "model.frame", "model.matrix", "na.omit", "na.pass", "pnorm", "qnorm", "quantile", "reshape", "runif", "terms", "weighted.mean", "xtabs")
importFrom("utils", "combn", "download.file", "read.table", packageDescription, packageVersion)
importFrom("Hmisc", "errbar")

export(
    alphabet,
    "alphabet<-",
    cpal,
    "cpal<-",
    read.tda.mdist,
    recodef,
    seqalign,
    seqcomp,
    seqconc,
    seqdecomp,
    seqdef,
    seqdiff,
    seqdim,
    seqdist,
    seqdistmc,
    seqdplot,
    seqdss,
    seqdur,
    seqfcheck,
    seqfind,
    seqformat,
    seqfplot,
    seqfpos,
    seqgen,
    seqHtplot,
    seqici,
    seqient,
    seqiplot,
    seqIplot,
    seqistatd,
    seqlegend,
    seqlength,
    seqLLCP,
    seqLLCS,
    seqlogp,
    seqmeant,
    seqmodst,
    seqmpos,
    seqmsplot,
    seqmtplot,
    seqnum,
    seqpcfilter,
    seqpcplot,
    seqplot,
    seqpm,
    seqrecode,
    seqrep,
    seqrplot,
    seqsep,
    seqstatd,
    seqstatf,
    seqstatl,
    seqST,
    seqsubm,
    seqsubsn,
    seqtab,
    seqtransn,
    seqtrate,
    stlab,
    "stlab<-",
    TraMineR.checkupdates,
    TraMineRInternalNodeInit,
    TraMineRInternalSplitInit,
    TraMineRInternalLayout,
    TraMineRInternalLegend,
    TraMineRInternalSeqeage,
    TraMineRInternalSeqgbar
  )

## stslist methods
S3method(summary, stslist)
S3method(print, stslist)
S3method("[", stslist)
S3method(plot, stslist)

## seqalign methods
S3method(plot, seqalign)
S3method(print, seqalign)

## seqpcplot methods
S3method(plot, seqpcplot)
S3method(summary , seqpcplot)

## stslist.stad methods
S3method(plot, stslist.statd)
S3method(print, stslist.statd)
S3method("[", stslist.statd)

## stslist.freq methods
S3method(plot, stslist.freq)
S3method(print, stslist.freq)
S3method("[", stslist.freq)

## stslist.meant methods
S3method(plot, stslist.meant)
S3method(print, stslist.meant)

## stslist.rep methods
S3method(plot, stslist.rep)
S3method(print, stslist.rep)
S3method(summary, stslist.rep)

## stslist.modst methods
S3method(plot, stslist.modst)
S3method(print, stslist.modst)
S3method("[", stslist.modst)

## TraMineRPermut methods
S3method(print ,TraMineRPermut)
S3method(summary ,TraMineRPermut)
S3method(hist ,TraMineRPermut)

## diss module
export(
    dissassoc,
    disscenter,
    dissreg,
    dissrep,
    dissmfac,
    dissmfacw,
    disstreedisplay,
    disstree2dot,
    disstree2dotp,
    disstreeleaf,
    disstree,
    dissvar,
    gower_matrix,
    seqtree2dot,
    seqtree,
    seqtreedisplay
)
S3method(hist,dissassoc)
S3method(print,dissassoc)
S3method(print,dissregression)
S3method(print,dissmultifactor)
S3method(print,disstree)
S3method(print,seqtree)
S3method(print,seqdiff)
S3method(plot,seqdiff)
S3method(print,diss.rep)
S3method(summary,diss.rep)

## Event subsequence module
S3method(plot,subseqelistchisq)
S3method(plot,subseqelist)
S3method("[",seqelist)
S3method(Math,seqelist)
S3method(Ops,seqelist)
S3method(plot,seqelist)
S3method(Summary,seqelist)
S3method(Math,seqe)
S3method(Ops,seqe)
S3method(plot,seqe)
S3method(Summary,seqe)
S3method(levels,seqe)
S3method(levels,seqelist)
S3method(str,seqelist)
S3method(str,seqe)
S3method(as.character,seqe)
S3method(as.character,seqelist)
S3method(print,seqe)
S3method(print,seqelist)
S3method(print,seqeconstraint)
S3method(print,subseqelist)
S3method("[",subseqelist)
S3method(plot,subseqelist)

export(
    seqeapplysub,
    seqecmpgroup,
    seqeconstraint,
    seqecontain,
    seqecreate,
    seqefsub,
    seqeid,
    seqelength,
    seqesetlength,
    "seqelength<-",
    seqeweight,
    "seqeweight<-",
    is.seqe,
    is.seqelist,
    seqetm
)


useDynLib(TraMineR,
##Debug
TMR_getTraMineRDebugLevel = getTraMineRDebugLevel,
TMR_setTraMineRDebugLevel = setTraMineRDebugLevel,
##Inertia
TMR_tmrsubmatrixinertia=tmrsubmatrixinertia,
TMR_tmrWeightedInertiaDist = tmrWeightedInertiaDist,
TMR_tmrWeightedInertiaContrib = tmrWeightedInertiaContrib,
TMR_tmrWeightedInertiaContribExt = tmrWeightedInertiaContribExt,
TMR_tmrinertiacontribext = tmrinertiacontribext,
TMR_tmrWeightedInterInertia = tmrWeightedInterInertia,
##Distance
TMR_cLCP = cLCP,
TMR_dist2matrix = dist2matrix,
TMR_checktriangleineq = checktriangleineq,
TMR_cLCS = cLCS,
TMR_cLEVEN = cLEVEN,
TMR_cstringdistance = cstringdistance,
##Seqe
TMR_tmrsequencegetdictionary = tmrsequencegetdictionary,
TMR_tmrsequencestring = tmrsequencestring,
TMR_tmrmatrixsubseqinseq = tmrmatrixsubseqinseq,
TMR_tmrsequencecontainevent = tmrsequencecontainevent,
TMR_tmrsequenceseveral = tmrsequenceseveral,
TMR_tmrsequence = tmrsequence,
TMR_tmrseqedist = tmrseqedist,
TMR_tmreventinseq = tmreventinseq,
TMR_tmrfindsubsequences = tmrfindsubsequences,
TMR_tmrsequencegetid = tmrsequencegetid,
TMR_tmrsequencegetlength = tmrsequencegetlength,
TMR_tmrsequencesetlength = tmrsequencesetlength,
TMR_tmrsequencegetweight = tmrsequencegetweight,
TMR_tmrsequencesetweight = tmrsequencesetweight
)

