useDynLib(gRain)

## Vanilla R imports (and exports)
## -------------------------------
importFrom("stats", "runif", "terms", "xtabs")
importFrom("utils",    "str")
importFrom("graphics", "plot")
importFrom(magrittr,   "%>%")
export("%>%") ## To make available in vignette 

## This MUST come BEFORE other imports that involve plot (here
## gRbase); must also come before import of Matrix (according to SO):

importFrom("graphics", "plot")

## Miscellaneous
## -------------

importFrom(igraph, igraph.from.graphNEL, V, "V<-", layout.graphopt)
importFrom(Rcpp, evalCpp)
importFrom(stats, simulate)

import(methods)
import(gRbase)


## Bioconductor imports/exports
## ----------------------------

importClassesFrom(graph, graphNEL)
importFrom(graph, edges, nodes)
#export("edges", "nodes")

importMethodsFrom(Rgraphviz, plot)
exportMethods(plot) 

## importFrom("functional", "Curry")
## export("Curry")

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

export(cptable, compileCPT,
       grain, querygrain, qgrain,
       setEvidence, pEvidence,
       extractCPT, extractPOT,
       extract_cpt, extract_pot,
       ##parse_cpt, 
       setFinding,
       getFinding, pFinding, retractFinding, setCPT, new_ev,
       setdiff_ev, union_ev, compilePOT, compileCPT, setEvi, evidence,
       "evidence<-", loadHuginNet, saveHuginNet, ortab, andtab, booltab, mendel,
       ###cpt_domain, "add_cpt<-",
       repeatPattern, setJEvi, getgrain, retractJEvi,
       getEvidence, new_jev, cpt,
       propagateLS)

S3method(parse_cpt, cptable_class)
S3method(parse_cpt, xtabs)
S3method(parse_cpt, default)

##S3method("add_cpt<-", cpt_domain)
S3method(setCPT, grain)

S3method(compile, grain)
S3method(compile, cpt_grain)
S3method(compile, pot_grain)
S3method(compile, cpt_rep)
S3method(compile, pot_rep)

S3method(grain, cpt_spec)
S3method(grain, pot_spec)
S3method(grain, cpt_rep)
S3method(grain, pot_rep)
S3method(grain, dModel)
S3method(grain, graphNEL)

S3method(iplot, grain)
S3method(nodeNames, grain)
S3method(nodeStates, grain)
S3method(plot, grain)
S3method(predict, grain)

S3method(print, cpt_spec)
S3method(print, pot_spec)
S3method(print, cptable_class)
S3method(print, grain)
S3method(printlist, default)
S3method(printlist, list)

S3method(evidence, grain)
S3method("evidence<-", grain)

S3method(propagate, grain)
S3method(querygrain, grain)
S3method(splitVec, default)
S3method(splitVec, list)

S3method(summary, cpt_spec)
S3method(summary, grain)
S3method(update, cpt_grain)
S3method(valueLabels, cptable_class)

S3method(varNames, cptable_class)
S3method(varNames, grainEvidence_)
S3method(varNames, grain_ev)

S3method(simulate, grain)

S3method(as.data.frame, grain_ev)
S3method(print, grain_jev )
S3method(print, grain_ev )

S3method(subset, grain_ev)

S3method(universe, grain)
S3method(uni, grain)
S3method(potential, grain)
S3method(pot, grain)

S3method(rip, grain)
S3method("rip<-", grain)
S3method(setCPT, grain)
S3method("setcpt<-", grain)
    
S3method(add_jtree, cpt_grain)
S3method(add_jtree, pot_grain)
S3method(add_potential, cpt_grain)
S3method(add_potential, pot_grain)
S3method(vpar, cpt_grain)
S3method(vpar, cpt_spec)

S3method(cpt, cpt_grain)
S3method("cpt<-", cpt_grain)
S3method(print, cpt_spec_simple)

