R/163_reductions_dcp2cone_canonicalizers_normNuc_canon.R

Defines functions normNuc_canon

#####
## DO NOT EDIT THIS FILE!! EDIT THE SOURCE INSTEAD: rsrc_tree/reductions/dcp2cone/canonicalizers/normNuc_canon.R
#####

## CVXPY SOURCE: reductions/dcp2cone/canonicalizers/normNuc_canon.py
## norm_nuc(A) -> 0.5*(trace(U)+trace(V))
##   subject to PSD([[U, A], [A^T, V]])


normNuc_canon <- function(expr, args, solver_context = NULL) {
  A <- args[[1L]]
  m <- A@shape[1L]
  n <- A@shape[2L]
  U <- Variable(c(m, m), symmetric = TRUE)
  V <- Variable(c(n, n), symmetric = TRUE)
  X <- bmat(list(list(U, A), list(t(A), V)))
  constr <- list(PSD(X))
  trace_value <- Constant(0.5) * (matrix_trace(U) + matrix_trace(V))
  list(trace_value, constr)
}

method(dcp_canonicalize, NormNuc) <- normNuc_canon
method(has_dcp_canon, NormNuc) <- function(expr) TRUE

Try the CVXR package in your browser

Any scripts or data that you put into this service are public.

CVXR documentation built on March 6, 2026, 9:10 a.m.