# Import Packages
importFrom(R6, R6Class)

# Load C files
useDynLib(cgraph)

# Export session functions
export(name)
export(const)
export(input)
export(parm)
export(opr)
export(run)
export(gradients)
export(approx.grad)

# Export array functions
export(cg.matmul)
export(cg.crossprod)
export(cg.tcrossprod)
export(cg.linear)
export(cg.sum)
export(cg.prod)
export(cg.rowSums)
export(cg.colSums)
export(cg.mean)
export(cg.rowMeans)
export(cg.colMeans)
export(cg.max)
export(cg.min)
export(cg.pmax)
export(cg.pmin)

# Export array methods

# Export cgraph object
export(cgraph)

# Export cgraph methods
S3method(plot, cgraph)

# Export math functions
export(cg.add)
export(cg.pos)
export(cg.sub)
export(cg.neg)
export(cg.mul)
export(cg.div)
export(cg.pow)
export(cg.sqrt)
export(cg.exp)
export(cg.ln)
export(cg.log2)
export(cg.log10)
export(cg.abs)

# Export math methods
S3method(`+`, cg.node)
S3method(`-`, cg.node)
S3method(`*`, cg.node)
S3method(`/`, cg.node)
S3method(`^`, cg.node)
S3method(sqrt, cg.node)
S3method(exp, cg.node)
S3method(log2, cg.node)
S3method(log10, cg.node)
S3method(abs, cg.node)

# Export misc functions
export(cg.sigmoid)

# Export print methods
S3method(print, cgraph)
S3method(print, cg.node)

# Export transform functions
export(cg.as.double)
export(cg.as.numeric)
export(cg.reshape)
export(cg.t)

# Export transform methods
S3method(as.double, cg.node)
S3method(as.array, cg.node)
S3method(t, cg.node)

# Export trig functions
export(cg.sin)
export(cg.cos)
export(cg.tan)
export(cg.tanh)
export(cg.asin)
export(cg.acos)
export(cg.atan)
export(cg.atanh)

# Export trig methods
S3method(sin, cg.node)
S3method(cos, cg.node)
S3method(tan, cg.node)
S3method(tanh, cg.node)
S3method(asin, cg.node)
S3method(acos, cg.node)
S3method(atan, cg.node)
S3method(atanh, cg.node)

# Export fun functions
