def graph_implementation(arg_objs, shape, data=None): """Multiply the expressions elementwise. Parameters ---------- arg_objs : list LinExpr for each argument. shape : tuple The shape of the resulting expression. data : Additional data required by the atom. Returns ------- tuple (LinOp for objective, list of exprraints) """ # promote if necessary. lhs = arg_objs[0] rhs = arg_objs[1] if lu.is_const(lhs): return (lu.multiply(lhs, rhs), []) elif lu.is_const(rhs): return (lu.multiply(rhs, lhs), []) else: raise DCPError("Product of two non-constant expressions is not " "DCP.")
def graph_implementation(arg_objs, shape, data=None): """Multiply the linear expressions. Parameters ---------- arg_objs : list LinExpr for each argument. shape : tuple The shape of the resulting expression. data : Additional data required by the atom. Returns ------- tuple (LinOp for objective, list of constraints) """ # Promote shapes for compatibility with CVXCanon lhs = arg_objs[0] rhs = arg_objs[1] if lu.is_const(lhs): return (lu.mul_expr(lhs, rhs, shape), []) elif lu.is_const(rhs): return (lu.rmul_expr(lhs, rhs, shape), []) else: raise DCPError("Product of two non-constant expressions is not " "DCP.")