'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):

    X = arg_objs[0]
    P = arg_objs[1]
    (n, m) = X.size
    M = lu.create_var(((n + m), (n + m)))
    T = lu.create_var((m, m))
    constraints = []
    index.block_eq(M, P, constraints, 0, n, 0, n)
    index.block_eq(M, X, constraints, 0, n, n, (n + m))
    index.block_eq(M, T, constraints, n, (n + m), n, (n + m))
    return (lu.trace(T), (constraints + [SDP(M)]))
