#exportPattern("^[[:alpha:]]+")

# Declare compiled functions
useDynLib(NMF
			, divergence_update_H, divergence_update_W # divergence based updates
			, euclidean_update_H, euclidean_update_W # euclidean based updates
			, offset_euclidean_update_H, offset_euclidean_update_W # nmf with offset (euclidean based)
			, Euclidean_rss # compute residual sum of squares (without memory duplication)
			, KL_divergence # compute the KL divergence (with no memory duplication)
			)

importFrom(graphics, plot)
importFrom(stats, coefficients, coef, fitted, offset, predict, residuals)

export(
	nmfEstimateRank
	, plot.NMF.rank
	, nmfAlgorithm
	, newNMF
	, nmfSeed
	, syntheticNMF
	, nmf.options
	, nmf.getOption
	, nmf.options.reset
	, nmf.options.runtime
	, randomize
)
exportMethods(
	"[",
	"$",
	"$<-",
    "algorithm",
    "algorithm<-",
#    "annotate",
	"as.NMFList",
    "basis",
    "basis<-",
    "clusters",
    "coef",
    "coef<-",
    "coefficients",
    "compare",
#    "computeContrib",
    "connectivity",
#    "contribs",
	"cophcor",
    "dim",
    "dimnames",
    "dimnames<-",
    "dispersion",
    "distance",
    "entropy",
    "errorPlot",
    'evar',
    "extra",
    "extractFeatures",
    "featureNames",
    "featureNames<-",
    "featureScore",
    "fit",
    "fit<-",
    "fitted", 
#    "hist",
    "initialize",
    "is.empty.nmf",
#    "join",
    "metaHeatmap",
   "modelname",
#    "modelname<-",
#    "name",
#    "name<-",
    "nbasis",
    "nmf",
    "nmfApply",
    "nmfModel",
#    "nmfRegister",
#    "nmfRegisterAlgorithm",
#    "nmfRegisterSeed",
	"nrun",
    "objective",
    "objective<-",
    "offset",
    "plot",
    "predict",
    "purity",
    "rnmf",
#    "report",
	"rss",
    "residuals",
    "residuals<-",
#    "run.options",
#    "run.options<-",
#    "run",
    "runtime",
    "runtime.all",
    "sampleNames",
    "sampleNames<-",
#    "seed",
    "seeding",
    "seeding<-",
    "seqtime",
    "show",
    "smoothing",
    "sparseness" 
    , "summary"
)
exportClasses(
    "NMF",
    "NMFstd",
     "NMFns",
     "NMFOffset",
     "NMFSet"
     , "NMFfitX"
     , "NMFfitX1"
     , "NMFfitXn"
#     , "NMFStrategy",
#     "NMFStrategyFunction",
#     "NMFStrategyIterative",
#     "NMFStrategyIterativeX" 
)
