'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]
    (rows, cols) = A.size
    X = lu.create_var(((rows + cols), (rows + cols)))
    constraints = []
    index.block_eq(X, A, constraints, 0, rows, rows, (rows + cols))
    half = lu.create_const(0.5, (1, 1))
    trace = lu.mul_expr(half, lu.trace(X), (1, 1))
    return (trace, ([SDP(X)] + constraints))
