+ return [ M(v.list()) for v in Sigma_cone ]
+
+
+def Z_operator_gens(K):
+ r"""
+ Compute generators of the cone of Z-operators on this cone.
+
+ The Z-operators on a cone generalize the Z-matrices over the
+ nonnegative orthant. They are simply negations of the
+ :meth:`cross_positive_operators`.
+
+ OUTPUT:
+
+ A list of `n`-by-``n`` matrices where ``n == K.lattice_dim()``.
+ Each matrix ``L`` in the list should have the property that
+ ``(L*x).inner_product(s) <= 0`` whenever ``(x,s)`` is an element of
+ this cone's :meth:`discrete_complementarity_set`. Moreover, any
+ conic (nonnegative linear) combination of these matrices shares the
+ same property.
+
+ .. SEEALSO::
+
+ :meth:`positive_operator_gens`, :meth:`cross_positive_operator_gens`,
+
+ REFERENCES:
+
+ M. Orlitzky.
+ Positive and Z-operators on closed convex cones.
+
+ TESTS:
+
+ The Z-property is possessed by every Z-operator::
+
+ sage: set_random_seed()
+ sage: K = random_cone(max_ambient_dim=4)
+ sage: Z_of_K = Z_operator_gens(K)
+ sage: dcs = K.discrete_complementarity_set()
+ sage: all([(z*x).inner_product(s) <= 0 for z in Z_of_K
+ ....: for (x,s) in dcs])
+ True
+ """
+ return [ -cp for cp in cross_positive_operator_gens(K) ]