# equivalent but unequal copy of the input cone.
return {K}
return { Cone(K.rays(c)) for c in G.connected_components() }
+
+
+def is_reducible(K):
+ r"""
+ Return whether or not this cone is reducible.
+
+ A pointed convex cone ``K`` is reducible if some other cone
+ appears in its :func:`irreducible_factors`.
+
+ SETUP::
+
+ sage: from mjo.cone.decomposition import is_reducible
+
+ EXAMPLES:
+
+ The nonnegative orthant is always reducible in dimension two or
+ more::
+
+ sage: is_reducible(cones.nonnegative_orthant(1))
+ False
+ sage: is_reducible(cones.nonnegative_orthant(2))
+ True
+ sage: is_reducible(cones.nonnegative_orthant(3))
+ True
+
+ """
+ return len(irreducible_factors(K)) > 1