-def unrestrict_span(K, K2=None):
- if K2 is None:
- K2 = K
-
- _,phi_inv = ips_iso(K2)
- V_iso = iso_space(K2)
- (W, W_perp) = V_iso.cartesian_factors()
-
- rays = []
- for r in K.rays():
- w = sum([ r[idx]*W.basis()[idx] for idx in range(0,len(r)) ])
- pair = V_iso( (w, W_perp.zero()) )
- rays.append( phi_inv(pair) )
-
- L = ToricLattice(W.dimension() + W_perp.dimension())
-
- return Cone(rays, lattice=L)
-
-
-
-def intersect_span(K1, K2):
- r"""
- Return a new cone obtained by intersecting ``K1`` with the span of ``K2``.
- """
- L = K1.lattice()
-
- if L.rank() != K2.lattice().rank():
- raise ValueError('K1 and K2 must belong to lattices of the same rank.')
-
- SL_gens = list(K2.rays())
- span_K2_gens = SL_gens + [ -g for g in SL_gens ]