R/191_reductions_complex2real_canonicalizers_equality_canon.R

Defines functions c2r_zero_canon c2r_equality_canon

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

## CVXPY SOURCE: reductions/complex2real/canonicalizers/equality_canon.py
## Equality (x == y) and Zero (x == 0) constraint canonicalizers

c2r_equality_canon <- function(expr, real_args, imag_args, real2imag) {
  if (is.null(imag_args[[1L]]) && is.null(imag_args[[2L]])) {
    return(list(list(expr_copy(expr, real_args)), NULL))
  }

  ## Fill in missing imag args with zeros
  for (i in seq_along(imag_args)) {
    if (is.null(imag_args[[i]])) {
      imag_args[[i]] <- Constant(matrix(0, real_args[[i]]@shape[1L],
                                        real_args[[i]]@shape[2L]))
    }
  }

  imag_cons <- list(Equality(imag_args[[1L]], imag_args[[2L]],
                             constr_id = real2imag[[as.character(expr@id)]]))
  if (is.null(real_args[[1L]]) && is.null(real_args[[2L]])) {
    return(list(NULL, imag_cons))
  } else {
    ## Fill in missing real args with zeros
    for (i in seq_along(real_args)) {
      if (is.null(real_args[[i]])) {
        real_args[[i]] <- Constant(matrix(0, imag_args[[i]]@shape[1L],
                                          imag_args[[i]]@shape[2L]))
      }
    }
    return(list(list(expr_copy(expr, real_args)), imag_cons))
  }
}

c2r_zero_canon <- function(expr, real_args, imag_args, real2imag) {
  if (is.null(imag_args[[1L]])) {
    return(list(list(expr_copy(expr, real_args)), NULL))
  }

  imag_cons <- list(Zero(imag_args[[1L]],
                         constr_id = real2imag[[as.character(expr@id)]]))
  if (is.null(real_args[[1L]])) {
    return(list(NULL, imag_cons))
  } else {
    return(list(list(expr_copy(expr, real_args)), imag_cons))
  }
}

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.