# Copyright 2018 Ron Triepels
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# 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 operators
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 cgraph object
export(cgraph)

# Export cgraph methods
S3method(plot, cgraph)

# Export logical operators
export(cg.not)
export(cg.equal)
export(cg.not.equal)
export(cg.less)
export(cg.greater)
export(cg.less.equal)
export(cg.greater.equal)

# Export logical methods
S3method(`!`, cg.node)
S3method(`==`, cg.node)
S3method(`!=`, cg.node)
S3method(`<`, cg.node)
S3method(`>`, cg.node)
S3method(`<=`, cg.node)
S3method(`>=`, cg.node)

# Export math operators
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) # Deprecated
S3method(exp, cg.node) # Deprecated
S3method(log2, cg.node) # Deprecated
S3method(log10, cg.node) # Deprecated
S3method(abs, cg.node) # Deprecated

# Export misc functions
export(sigmoid)

# Export misc operators
export(cg.sigmoid)

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

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

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

# Export trig operators
export(cg.sin)
export(cg.cos)
export(cg.tan)
export(cg.sinh)
export(cg.cosh)
export(cg.tanh)
export(cg.asin)
export(cg.acos)
export(cg.atan)
export(cg.asinh)
export(cg.acosh)
export(cg.atanh)

# Export trig methods
S3method(sin, cg.node) # Deprecated
S3method(cos, cg.node) # Deprecated
S3method(tan, cg.node) # Deprecated
S3method(sinh, cg.node) # Deprecated
S3method(cosh, cg.node) # Deprecated
S3method(tanh, cg.node) # Deprecated
S3method(asin, cg.node) # Deprecated
S3method(acos, cg.node) # Deprecated
S3method(atan, cg.node) # Deprecated
S3method(asinh, cg.node) # Deprecated
S3method(acosh, cg.node) # Deprecated
S3method(atanh, cg.node) # Deprecated
