Nothing
#####
## DO NOT EDIT THIS FILE!! EDIT THE SOURCE INSTEAD: rsrc_tree/reductions/dcp2cone/canonicalizers/quad/power_canon.R
#####
## CVXPY SOURCE: reductions/dcp2cone/canonicalizers/quad/power_canon.py
## Only handles p in {0, 1, 2}. For p=2: SymbolicQuadForm(x, I, expr).
power_quad_canon <- function(expr, args, solver_context = NULL) {
affine_expr <- args[[1L]]
p <- as.numeric(expr@p_used)
if (is_constant(expr)) {
return(list(Constant(value(expr)), list()))
} else if (p == 0) {
return(list(Constant(matrix(1, nrow = affine_expr@shape[1L],
ncol = affine_expr@shape[2L])), list()))
} else if (p == 1) {
return(list(affine_expr, list()))
} else if (p == 2) {
n <- prod(affine_expr@shape)
I_mat <- Matrix::Diagonal(n)
if (S7_inherits(affine_expr, Variable)) {
return(list(SymbolicQuadForm(affine_expr, Constant(as.matrix(I_mat)), expr), list()))
} else {
t <- Variable(shape = affine_expr@shape)
return(list(SymbolicQuadForm(t, Constant(as.matrix(I_mat)), expr),
list(affine_expr == t)))
}
}
cli_abort("Non-constant quadratic forms can't be raised to power > 2.")
}
# -- .quadratic_power: helper for Dcp2Cone dispatch -------------
## CVXPY SOURCE: power.py lines 339-342
.quadratic_power <- function(power_expr) {
p <- power_expr@p_used
!is.null(p) && p %in% c(0, 1, 2)
}
method(quad_canonicalize, Power) <- function(expr, args, ...) {
if (!.quadratic_power(expr)) return(NULL)
power_quad_canon(expr, args)
}
method(quad_canonicalize, PowerApprox) <- function(expr, args, ...) {
if (!.quadratic_power(expr)) return(NULL)
power_quad_canon(expr, args)
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.