- V = K.lattice().vector_space()
- V_iso = iso_space(K)
- (W, W_perp) = V_iso.cartesian_factors()
-
- # A space equivalent to V, but using our basis.
- V_user = V.subspace_with_basis( W.basis() + W_perp.basis() )
-
- def phi(v):
- # Write v in terms of our custom basis, where the first dim(W)
- # coordinates are for the W-part of the basis.
- cs = V_user.coordinates(v)
-
- w1 = sum([ V_user.basis()[idx]*cs[idx]
- for idx in range(0, W.dimension()) ])
- w2 = sum([ V_user.basis()[idx]*cs[idx]
- for idx in range(W.dimension(), V.dimension()) ])
-
- return V_iso( (w1, w2) )
-
-
- def phi_inv( pair ):
- # Crash if the arguments are in the wrong spaces.
- V_iso(pair)
-
- #w = sum([ sub_w[idx]*W.basis()[idx] for idx in range(0,m) ])
- #w_prime = sum([ sub_w_prime[idx]*W_perp.basis()[idx]
- # for idx in range(0,n-m) ])
-
- return sum( pair.cartesian_factors() )
-
-
- return (phi,phi_inv)
-
-
-
-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()