'Reduces the atom to an affine expression and list of constraints.
Parameters
arg_objs : list
LinExpr for each argument.
size : tuple
The size of the resulting expression.
data :
Additional data required by the atom.
Returns
tuple
(LinOp for objective, list of constraints)'

@staticmethod
def graph_implementation(arg_objs, size, data=None):

    A = arg_objs[0]
    (n, m) = A.size
    X = lu.create_var(((n + m), (n + m)))
    t = lu.create_var((1, 1))
    constraints = []
    prom_t = lu.promote(t, (n, 1))
    index.block_eq(X, lu.diag_vec(prom_t), constraints, 0, n, 0, n)
    index.block_eq(X, A, constraints, 0, n, n, (n + m))
    prom_t = lu.promote(t, (m, 1))
    index.block_eq(X, lu.diag_vec(prom_t), constraints, n, (n + m), n, (n + m))
    return (t, (constraints + [SDP(X)]))
