def affine_patch(self, i): r""" Return the `i^{th}` affine patch of this projective space. This is an ambient affine space `\mathbb{A}^n_R,` where `R` is the base ring of self, whose "projective embedding" map is `1` in the `i^{th}` factor. INPUT: - ``i`` -- integer between 0 and dimension of self, inclusive. OUTPUT: - An ambient affine space with fixed projective_embedding map. EXAMPLES:: sage: PP = ProjectiveSpace(5) / QQ sage: AA = PP.affine_patch(2) sage: AA Affine Space of dimension 5 over Rational Field sage: AA.projective_embedding() Scheme morphism: From: Affine Space of dimension 5 over Rational Field To: Projective Space of dimension 5 over Rational Field Defn: Defined on coordinates by sending (x0, x1, x2, x3, x4) to (x0 : x1 : 1 : x2 : x3 : x4) sage: AA.projective_embedding(0) Scheme morphism: From: Affine Space of dimension 5 over Rational Field To: Projective Space of dimension 5 over Rational Field Defn: Defined on coordinates by sending (x0, x1, x2, x3, x4) to (1 : x0 : x1 : x2 : x3 : x4) """ i = int(i) # implicit type checking n = self.dimension_relative() if i < 0 or i > n: raise ValueError("Argument i (= %s) must be between 0 and %s." % (i, n)) try: return self.__affine_patches[i] except AttributeError: self.__affine_patches = {} except KeyError: pass from sage.schemes.affine.affine_space import AffineSpace AA = AffineSpace(n, self.base_ring(), names='x') AA._default_embedding_index = i phi = AA.projective_embedding(i, self) self.__affine_patches[i] = AA return AA
def affine_patch(self, i): r""" Return the `i^{th}` affine patch of this projective space. This is an ambient affine space `\mathbb{A}^n_R,` where `R` is the base ring of self, whose "projective embedding" map is `1` in the `i^{th}` factor. INPUT: - ``i`` -- integer between 0 and dimension of self, inclusive. OUTPUT: - An ambient affine space with fixed projective_embedding map. EXAMPLES:: sage: PP = ProjectiveSpace(5) / QQ sage: AA = PP.affine_patch(2) sage: AA Affine Space of dimension 5 over Rational Field sage: AA.projective_embedding() Scheme morphism: From: Affine Space of dimension 5 over Rational Field To: Projective Space of dimension 5 over Rational Field Defn: Defined on coordinates by sending (x0, x1, x2, x3, x4) to (x0 : x1 : 1 : x2 : x3 : x4) sage: AA.projective_embedding(0) Scheme morphism: From: Affine Space of dimension 5 over Rational Field To: Projective Space of dimension 5 over Rational Field Defn: Defined on coordinates by sending (x0, x1, x2, x3, x4) to (1 : x0 : x1 : x2 : x3 : x4) """ i = int(i) # implicit type checking n = self.dimension_relative() if i < 0 or i > n: raise ValueError("Argument i (= %s) must be between 0 and %s."%(i, n)) try: return self.__affine_patches[i] except AttributeError: self.__affine_patches = {} except KeyError: pass from sage.schemes.affine.affine_space import AffineSpace AA = AffineSpace(n, self.base_ring(), names='x') AA._default_embedding_index = i phi = AA.projective_embedding(i, self) self.__affine_patches[i] = AA return AA
def affine_patch(self, i, AA=None): r""" Return the `i^{th}` affine patch of this projective space. This is an ambient affine space `\mathbb{A}^n_R,` where `R` is the base ring of self, whose "projective embedding" map is `1` in the `i^{th}` factor. INPUT: - ``i`` -- integer between 0 and dimension of self, inclusive. - ``AA`` -- (default: None) ambient affine space, this is constructed if it is not given. OUTPUT: - An ambient affine space with fixed projective_embedding map. EXAMPLES:: sage: PP = ProjectiveSpace(5) / QQ sage: AA = PP.affine_patch(2) sage: AA Affine Space of dimension 5 over Rational Field sage: AA.projective_embedding() Scheme morphism: From: Affine Space of dimension 5 over Rational Field To: Projective Space of dimension 5 over Rational Field Defn: Defined on coordinates by sending (x0, x1, x2, x3, x4) to (x0 : x1 : 1 : x2 : x3 : x4) sage: AA.projective_embedding(0) Scheme morphism: From: Affine Space of dimension 5 over Rational Field To: Projective Space of dimension 5 over Rational Field Defn: Defined on coordinates by sending (x0, x1, x2, x3, x4) to (1 : x0 : x1 : x2 : x3 : x4) :: sage: P.<x,y> = ProjectiveSpace(QQ,1) sage: P.affine_patch(0).projective_embedding(0).codomain() == P True """ i = int(i) # implicit type checking n = self.dimension_relative() if i < 0 or i > n: raise ValueError("Argument i (= %s) must be between 0 and %s." % (i, n)) try: A = self.__affine_patches[i] #assume that if you've passed in a new affine space you want to override #the existing patch if AA is None or A == AA: return (A) except AttributeError: self.__affine_patches = {} except KeyError: pass #if no ith patch exists, we may still be here with AA==None if AA == None: from sage.schemes.affine.affine_space import AffineSpace AA = AffineSpace(n, self.base_ring(), names='x') elif AA.dimension_relative() != n: raise ValueError("Affine Space must be of the dimension %s" % (n)) AA._default_embedding_index = i phi = AA.projective_embedding(i, self) self.__affine_patches[i] = AA return AA
def affine_patch(self, i, AA = None): r""" Return the `i^{th}` affine patch of this projective space. This is an ambient affine space `\mathbb{A}^n_R,` where `R` is the base ring of self, whose "projective embedding" map is `1` in the `i^{th}` factor. INPUT: - ``i`` -- integer between 0 and dimension of self, inclusive. - ``AA`` -- (default: None) ambient affine space, this is constructed if it is not given. OUTPUT: - An ambient affine space with fixed projective_embedding map. EXAMPLES:: sage: PP = ProjectiveSpace(5) / QQ sage: AA = PP.affine_patch(2) sage: AA Affine Space of dimension 5 over Rational Field sage: AA.projective_embedding() Scheme morphism: From: Affine Space of dimension 5 over Rational Field To: Projective Space of dimension 5 over Rational Field Defn: Defined on coordinates by sending (x0, x1, x2, x3, x4) to (x0 : x1 : 1 : x2 : x3 : x4) sage: AA.projective_embedding(0) Scheme morphism: From: Affine Space of dimension 5 over Rational Field To: Projective Space of dimension 5 over Rational Field Defn: Defined on coordinates by sending (x0, x1, x2, x3, x4) to (1 : x0 : x1 : x2 : x3 : x4) :: sage: P.<x,y> = ProjectiveSpace(QQ,1) sage: P.affine_patch(0).projective_embedding(0).codomain() == P True """ i = int(i) # implicit type checking n = self.dimension_relative() if i < 0 or i > n: raise ValueError("Argument i (= %s) must be between 0 and %s."%(i, n)) try: A = self.__affine_patches[i] #assume that if you've passed in a new affine space you want to override #the existing patch if AA is None or A == AA: return(A) except AttributeError: self.__affine_patches = {} except KeyError: pass #if no ith patch exists, we may still be here with AA==None if AA == None: from sage.schemes.affine.affine_space import AffineSpace AA = AffineSpace(n, self.base_ring(), names = 'x') elif AA.dimension_relative() != n: raise ValueError("Affine Space must be of the dimension %s"%(n)) AA._default_embedding_index = i phi = AA.projective_embedding(i, self) self.__affine_patches[i] = AA return AA