context("symbol")
test_that("init", {
skip_if_no_sympy()
expect_error(symbol(''))
expect_error(symbol('2*x'))
x <- symbol('x')
expect_s3_class(x, 'caracas_symbol')
expect_true(!is.null(x$pyobj))
expect_s3_class(x$pyobj, 'python.builtin.object')
expect_s3_class(x$pyobj, 'sympy.core.symbol.Symbol')
})
test_that("variable names", {
skip_if_no_sympy()
expect_s3_class(symbol('x0'), 'caracas_symbol')
expect_error(symbol('0x'))
expect_s3_class(symbol('xa_0'), 'caracas_symbol')
expect_s3_class(symbol('yY_x'), 'caracas_symbol')
})
test_that("eval_to_symbol", {
skip_if_no_sympy()
## expect_error(eval_to_symbol(''))
## expect_error(eval_to_symbol('2*q'))
x <- symbol('x')
expr <- eval_to_symbol('2*x')
expect_s3_class(expr, 'caracas_symbol')
expect_equal(as.character(expr), "2*x")
expect_equal(as.character(eval_to_symbol("1/3")), "1/3")
x <- symbol('x')
expect_equal(as.character(eval_to_symbol("x*1/3")), "x/3")
x1 <- symbol('x1')
expect_equal(as.character(eval_to_symbol("x1/3")), "x1/3")
})
test_that("sympy_func", {
skip_if_no_sympy()
def_sym(x, a)
p <- (x-a)^4
q <- p %>% sympy_func("expand")
expect_equal(as.character(q), "a^4 - 4*a^3*x + 6*a^2*x^2 - 4*a*x^3 + x^4")
def_sym(x, y, z)
expr <- x*y + x - 3 + 2*x^2 - z*x^2 + x^3
qc <- expr %>% sympy_func("collect", x)
expect_equal(as.character(qc), "x^3 + x^2*(2 - z) + x*(y + 1) - 3")
})
# test_that("matrix symbol 1x1", { # skip_if_no_sympy() #
# W <- matrix_symbol("W") # 1 x 1 by default
# expect_equal(dim(W), c(1L, 1L))
#
# J <- sympy_declare("J", "Identity(1)")
# expect_equal(dim(J), c(1L, 1L))
# expect_equal(as.character(J$pyobj$as_explicit()), "Matrix([[1]])")
#
# O <- sympy_declare("O", "ZeroMatrix(1, 1)")
# expect_equal(dim(O), c(1L, 1L))
# expect_equal(as.character(O$pyobj$as_explicit()), "Matrix([[0]])")
#
# expect_equal(as.character(J %*% O), "0")
#
# L <- matrix(c("J", "-W", "0", "J"), nrow = 2) %>%
# as_sym(declare_symbols = FALSE)
# expect_equal(dim(L), c(2L, 2L))
# expect_equal(as.character(L$pyobj), "Matrix([[I, 0], [-W, I]])")
# expect_equal(as.character(L, replace_I = FALSE), "Matrix([[I, 0], [-W, I]])")
#
# Linv <- inv_2x2(L)
# expect_equal(dim(Linv), c(2L, 2L))
# expect_equal(as.character(Linv$pyobj), "Matrix([\n[I, 0],\n[W, I]])")
# expect_equal(as.character(Linv, replace_I = FALSE), "Matrix([\n[I, 0],\n[W, I]])")
#
# # FIXME: TEST?
# #A1 <- Linv %*% L
# #A1
# #A2 <- L %>% Linv
# #A2
#
# A <- t(Linv) %*% Linv
# expect_equal(dim(A), c(2L, 2L))
#
# O2 <- sympy_declare("O", "ZeroMatrix(2, 2)")
# A <- O2 %*% t(Linv) %*% Linv
# expect_equal(dim(A), c(2L, 2L))
# expect_equal(as.character(A$pyobj), "0")
# expect_equal(as.character(A), "0")
#
#
# ############################
#
# W <- matrix_symbol("W", nrow = 2L, ncol = 2L) # 1 x 1 by default
# expect_equal(dim(W), c(2L, 2L))
#
# J <- sympy_declare("J", "Identity(2)")
# expect_equal(dim(J), c(2L, 2L))
# expect_equal(as.character(J$pyobj$as_explicit()), "Matrix([[1, 0], [0, 1]])")
#
# O <- sympy_declare("O", "ZeroMatrix(2, 2)")
# expect_equal(dim(O), c(2L, 2L))
# expect_equal(as.character(O$pyobj$as_explicit()), "Matrix([[0, 0], [0, 0]])")
#
# expect_equal(dim(J %*% O), c(2L, 2L))
# expect_equal(as.character(J %*% O), "Matrix([[0, 0], [0, 0]])")
#
#
# L <- matrix(c("J", "-W", "0", "J"), nrow = 2) %>%
# as_sym(declare_symbols = FALSE)
# expect_equal(dim(L), c(2L, 2L)) # FIXME?
# expect_equal(as.character(L$pyobj), "Matrix([[I, 0], [-W, I]])")
# expect_equal(as.character(L, replace_I = FALSE), "Matrix([[I, 0], [-W, I]])")
#
# Linv <- inv_2x2(L)
# expect_equal(dim(Linv), c(4L, 4L))
# expect_equal(as.character(Linv$pyobj), "Matrix([\n[I, 0],\n[W, I]])")
# expect_equal(as.character(Linv, replace_I = FALSE), "Matrix([\n[I, 0],\n[W, I]])")
#
# A <- t(Linv) %*% Linv
# expect_equal(dim(A), c(4L, 4L))
# })
#
test_that("eval_to_symbol", {
skip_if_no_sympy()
def_sym(y_11)
expect_equal(as.character(eval_to_symbol("3*y_11/4")), "3*y_11/4")
###
nr <- 2
nc <- 2
y <- as_sym(c("y_11", "y_21", "y_12", "y_22"))
dat <- expand.grid(r=factor(1:nr), s=factor(1:nc))
X <- model.matrix(~ r + s, data=dat) |> as_sym()
b <- vector_sym(ncol(X), "b")
mu <- X %*% b
XtX <- t(X) %*% X
XtXinv <- inv(XtX)
Xty <- t(X) %*% y
b_hat <- XtXinv %*% Xty
expect_equal(as.character(b_hat),
"Matrix([[3*y_11/4 + y_12/4 + y_21/4 - y_22/4], [-y_11/2 - y_12/2 + y_21/2 + y_22/2], [-y_11/2 + y_12/2 - y_21/2 + y_22/2]])")
})
test_that("as_sym", {
skip_if_no_sympy()
A <- as_sym(matrix(1:9, 3))
expect_equal(as.character(A), "Matrix([[1, 4, 7], [2, 5, 8], [3, 6, 9]])")
x <- as_sym("x")
expect_equal(as.character(x), "x")
####
sympy <- get_sympy()
a <- sympy$symbols("a")
b <- sympy$symbols("b")
M <- sympy$Matrix(list(c(a, b, b), c(b, a, b)))
A <- as_sym(M)
expect_equal(as.character(A), "Matrix([[a, b, b], [b, a, b]])")
B <- matrix_(c("a", "b", "b", "b", "a", "b"), 2, byrow = TRUE)
expect_equal(as.character(A), as.character(B))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.