+ sage: L = ToricLattice(K.lattice_dim()**2)
+ sage: pi_cone = Cone([ g.list() for g in pi_of_K ], lattice=L)
+ sage: P = matrix(K.lattice_dim(), pi_cone.random_element(QQ).list())
+ sage: all([ K.contains(P*x) for x in K ])
+ True
+
+ A random element of the positive operator cone should send a random
+ element of the cone into the cone::
+
+ sage: set_random_seed()
+ sage: K = random_cone(max_ambient_dim=5)
+ sage: pi_of_K = positive_operator_gens(K)
+ sage: L = ToricLattice(K.lattice_dim()**2)
+ sage: pi_cone = Cone([ g.list() for g in pi_of_K ], lattice=L)
+ sage: P = matrix(K.lattice_dim(), pi_cone.random_element(QQ).list())
+ sage: K.contains(P*K.random_element(ring=QQ))
+ True
+
+ The lineality space of the dual of the cone of positive operators
+ can be computed from the lineality spaces of the cone and its dual::
+
+ sage: set_random_seed()
+ sage: K = random_cone(max_ambient_dim=5)
+ sage: pi_of_K = positive_operator_gens(K)
+ sage: L = ToricLattice(K.lattice_dim()**2)
+ sage: pi_cone = Cone([ g.list() for g in pi_of_K ], lattice=L)
+ sage: actual = pi_cone.dual().linear_subspace()
+ sage: U1 = [ vector((s.tensor_product(x)).list())
+ ....: for x in K.lines()
+ ....: for s in K.dual() ]
+ sage: U2 = [ vector((s.tensor_product(x)).list())
+ ....: for x in K
+ ....: for s in K.dual().lines() ]
+ sage: expected = pi_cone.lattice().vector_space().span(U1 + U2)
+ sage: actual == expected
+ True
+
+ The lineality of the dual of the cone of positive operators
+ is known from its lineality space::
+
+ sage: set_random_seed()
+ sage: K = random_cone(max_ambient_dim=5)
+ sage: n = K.lattice_dim()
+ sage: m = K.dim()
+ sage: l = K.lineality()
+ sage: pi_of_K = positive_operator_gens(K)
+ sage: L = ToricLattice(n**2)
+ sage: pi_cone = Cone([p.list() for p in pi_of_K], lattice=L)
+ sage: actual = pi_cone.dual().lineality()
+ sage: expected = l*(m - l) + m*(n - m)
+ sage: actual == expected