Projective plane conics over a field¶
AUTHORS:
- Marco Streng (2010-07-20) 
- Nick Alexander (2008-01-08) 
- class sage.schemes.plane_conics.con_field.ProjectiveConic_field(A, f)[source]¶
- Bases: - ProjectivePlaneCurve_field- Create a projective plane conic curve over a field. See - Conicfor full documentation.- EXAMPLES: - sage: K = FractionField(PolynomialRing(QQ, 't')) sage: P.<X, Y, Z> = K[] sage: Conic(X^2 + Y^2 - Z^2) Projective Conic Curve over Fraction Field of Univariate Polynomial Ring in t over Rational Field defined by X^2 + Y^2 - Z^2 - >>> from sage.all import * >>> K = FractionField(PolynomialRing(QQ, 't')) >>> P = K['X, Y, Z']; (X, Y, Z,) = P._first_ngens(3) >>> Conic(X**Integer(2) + Y**Integer(2) - Z**Integer(2)) Projective Conic Curve over Fraction Field of Univariate Polynomial Ring in t over Rational Field defined by X^2 + Y^2 - Z^2 - base_extend(S)[source]¶
- Return the conic over - Sgiven by the same equation as- self.- EXAMPLES: - sage: c = Conic([1, 1, 1]); c Projective Conic Curve over Rational Field defined by x^2 + y^2 + z^2 sage: c.has_rational_point() # needs sage.libs.pari False sage: d = c.base_extend(QuadraticField(-1, 'i')); d # needs sage.rings.number_field Projective Conic Curve over Number Field in i with defining polynomial x^2 + 1 with i = 1*I defined by x^2 + y^2 + z^2 sage: d.rational_point(algorithm='rnfisnorm') # needs sage.rings.number_field (i : 1 : 0) - >>> from sage.all import * >>> c = Conic([Integer(1), Integer(1), Integer(1)]); c Projective Conic Curve over Rational Field defined by x^2 + y^2 + z^2 >>> c.has_rational_point() # needs sage.libs.pari False >>> d = c.base_extend(QuadraticField(-Integer(1), 'i')); d # needs sage.rings.number_field Projective Conic Curve over Number Field in i with defining polynomial x^2 + 1 with i = 1*I defined by x^2 + y^2 + z^2 >>> d.rational_point(algorithm='rnfisnorm') # needs sage.rings.number_field (i : 1 : 0) 
 - cache_point(p)[source]¶
- Replace the point in the cache of - selfby- pfor use by- rational_point()and- parametrization().- EXAMPLES: - sage: c = Conic([1, -1, 1]) sage: c.point([15, 17, 8]) (15/8 : 17/8 : 1) sage: c.rational_point() (15/8 : 17/8 : 1) sage: # needs sage.libs.pari sage: c.cache_point(c.rational_point(read_cache=False)) sage: c.rational_point() (-1 : 1 : 0) - >>> from sage.all import * >>> c = Conic([Integer(1), -Integer(1), Integer(1)]) >>> c.point([Integer(15), Integer(17), Integer(8)]) (15/8 : 17/8 : 1) >>> c.rational_point() (15/8 : 17/8 : 1) >>> # needs sage.libs.pari >>> c.cache_point(c.rational_point(read_cache=False)) >>> c.rational_point() (-1 : 1 : 0) 
 - coefficients()[source]¶
- Give a the \(6\) coefficients of the conic - selfin lexicographic order.- EXAMPLES: - sage: Conic(QQ, [1,2,3,4,5,6]).coefficients() [1, 2, 3, 4, 5, 6] sage: P.<x,y,z> = GF(13)[] sage: a = Conic(x^2 + 5*x*y + y^2 + z^2).coefficients(); a [1, 5, 0, 1, 0, 1] sage: Conic(a) Projective Conic Curve over Finite Field of size 13 defined by x^2 + 5*x*y + y^2 + z^2 - >>> from sage.all import * >>> Conic(QQ, [Integer(1),Integer(2),Integer(3),Integer(4),Integer(5),Integer(6)]).coefficients() [1, 2, 3, 4, 5, 6] >>> P = GF(Integer(13))['x, y, z']; (x, y, z,) = P._first_ngens(3) >>> a = Conic(x**Integer(2) + Integer(5)*x*y + y**Integer(2) + z**Integer(2)).coefficients(); a [1, 5, 0, 1, 0, 1] >>> Conic(a) Projective Conic Curve over Finite Field of size 13 defined by x^2 + 5*x*y + y^2 + z^2 
 - derivative_matrix()[source]¶
- Give the derivative of the defining polynomial of the conic - self, which is a linear map, as a \(3 \times 3\) matrix.- EXAMPLES: - In characteristic different from \(2\), the derivative matrix is twice the symmetric matrix: - sage: c = Conic(QQ, [1,1,1,1,1,0]) sage: c.symmetric_matrix() [ 1 1/2 1/2] [1/2 1 1/2] [1/2 1/2 0] sage: c.derivative_matrix() [2 1 1] [1 2 1] [1 1 0] - >>> from sage.all import * >>> c = Conic(QQ, [Integer(1),Integer(1),Integer(1),Integer(1),Integer(1),Integer(0)]) >>> c.symmetric_matrix() [ 1 1/2 1/2] [1/2 1 1/2] [1/2 1/2 0] >>> c.derivative_matrix() [2 1 1] [1 2 1] [1 1 0] - An example in characteristic \(2\): - sage: P.<t> = GF(2)[] sage: c = Conic([t, 1, t^2, 1, 1, 0]); c # needs sage.libs.ntl Projective Conic Curve over Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 2 (using GF2X) defined by t*x^2 + x*y + y^2 + (t^2)*x*z + y*z sage: c.is_smooth() True sage: c.derivative_matrix() [ 0 1 t^2] [ 1 0 1] [t^2 1 0] - >>> from sage.all import * >>> P = GF(Integer(2))['t']; (t,) = P._first_ngens(1) >>> c = Conic([t, Integer(1), t**Integer(2), Integer(1), Integer(1), Integer(0)]); c # needs sage.libs.ntl Projective Conic Curve over Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 2 (using GF2X) defined by t*x^2 + x*y + y^2 + (t^2)*x*z + y*z >>> c.is_smooth() True >>> c.derivative_matrix() [ 0 1 t^2] [ 1 0 1] [t^2 1 0] 
 - determinant()[source]¶
- Return the determinant of the symmetric matrix that defines the conic - self.- This is defined only if the base field has characteristic different from \(2\). - EXAMPLES: - sage: C = Conic([1,2,3,4,5,6]) sage: C.determinant() 41/4 sage: C.symmetric_matrix().determinant() 41/4 - >>> from sage.all import * >>> C = Conic([Integer(1),Integer(2),Integer(3),Integer(4),Integer(5),Integer(6)]) >>> C.determinant() 41/4 >>> C.symmetric_matrix().determinant() 41/4 - Determinants are only defined in characteristic different from \(2\): - sage: C = Conic(GF(2), [1, 1, 1, 1, 1, 0]) sage: C.is_smooth() True sage: C.determinant() Traceback (most recent call last): ... ValueError: The conic self (= Projective Conic Curve over Finite Field of size 2 defined by x^2 + x*y + y^2 + x*z + y*z) has no symmetric matrix because the base field has characteristic 2 - >>> from sage.all import * >>> C = Conic(GF(Integer(2)), [Integer(1), Integer(1), Integer(1), Integer(1), Integer(1), Integer(0)]) >>> C.is_smooth() True >>> C.determinant() Traceback (most recent call last): ... ValueError: The conic self (= Projective Conic Curve over Finite Field of size 2 defined by x^2 + x*y + y^2 + x*z + y*z) has no symmetric matrix because the base field has characteristic 2 
 - diagonal_matrix()[source]¶
- Return a diagonal matrix \(D\) and a matrix \(T\) such that \(T^t A T = D\) holds, where \((x, y, z) A (x, y, z)^t\) is the defining polynomial of the conic - self.- EXAMPLES: - sage: c = Conic(QQ, [1,2,3,4,5,6]) sage: d, t = c.diagonal_matrix(); d, t ( [ 1 0 0] [ 1 -1 -7/6] [ 0 3 0] [ 0 1 -1/3] [ 0 0 41/12], [ 0 0 1] ) sage: t.transpose()*c.symmetric_matrix()*t [ 1 0 0] [ 0 3 0] [ 0 0 41/12] - >>> from sage.all import * >>> c = Conic(QQ, [Integer(1),Integer(2),Integer(3),Integer(4),Integer(5),Integer(6)]) >>> d, t = c.diagonal_matrix(); d, t ( [ 1 0 0] [ 1 -1 -7/6] [ 0 3 0] [ 0 1 -1/3] [ 0 0 41/12], [ 0 0 1] ) >>> t.transpose()*c.symmetric_matrix()*t [ 1 0 0] [ 0 3 0] [ 0 0 41/12] - Diagonal matrices are only defined in characteristic different from \(2\): - sage: # needs sage.rings.finite_rings sage: c = Conic(GF(4, 'a'), [0, 1, 1, 1, 1, 1]) sage: c.is_smooth() True sage: c.diagonal_matrix() Traceback (most recent call last): ... ValueError: The conic self (= Projective Conic Curve over Finite Field in a of size 2^2 defined by x*y + y^2 + x*z + y*z + z^2) has no symmetric matrix because the base field has characteristic 2 - >>> from sage.all import * >>> # needs sage.rings.finite_rings >>> c = Conic(GF(Integer(4), 'a'), [Integer(0), Integer(1), Integer(1), Integer(1), Integer(1), Integer(1)]) >>> c.is_smooth() True >>> c.diagonal_matrix() Traceback (most recent call last): ... ValueError: The conic self (= Projective Conic Curve over Finite Field in a of size 2^2 defined by x*y + y^2 + x*z + y*z + z^2) has no symmetric matrix because the base field has characteristic 2 
 - diagonalization(names=None)[source]¶
- Return a diagonal conic \(C\), an isomorphism of schemes \(M: C\) -> - selfand the inverse \(N\) of \(M\).- EXAMPLES: - sage: Conic(GF(5), [1,0,1,1,0,1]).diagonalization() (Projective Conic Curve over Finite Field of size 5 defined by x^2 + y^2 + 2*z^2, Scheme morphism: From: Projective Conic Curve over Finite Field of size 5 defined by x^2 + y^2 + 2*z^2 To: Projective Conic Curve over Finite Field of size 5 defined by x^2 + y^2 + x*z + z^2 Defn: Defined on coordinates by sending (x : y : z) to (x + 2*z : y : z), Scheme morphism: From: Projective Conic Curve over Finite Field of size 5 defined by x^2 + y^2 + x*z + z^2 To: Projective Conic Curve over Finite Field of size 5 defined by x^2 + y^2 + 2*z^2 Defn: Defined on coordinates by sending (x : y : z) to (x - 2*z : y : z)) - >>> from sage.all import * >>> Conic(GF(Integer(5)), [Integer(1),Integer(0),Integer(1),Integer(1),Integer(0),Integer(1)]).diagonalization() (Projective Conic Curve over Finite Field of size 5 defined by x^2 + y^2 + 2*z^2, Scheme morphism: From: Projective Conic Curve over Finite Field of size 5 defined by x^2 + y^2 + 2*z^2 To: Projective Conic Curve over Finite Field of size 5 defined by x^2 + y^2 + x*z + z^2 Defn: Defined on coordinates by sending (x : y : z) to (x + 2*z : y : z), Scheme morphism: From: Projective Conic Curve over Finite Field of size 5 defined by x^2 + y^2 + x*z + z^2 To: Projective Conic Curve over Finite Field of size 5 defined by x^2 + y^2 + 2*z^2 Defn: Defined on coordinates by sending (x : y : z) to (x - 2*z : y : z)) - The diagonalization is only defined in characteristic different from 2: - sage: Conic(GF(2), [1,1,1,1,1,0]).diagonalization() Traceback (most recent call last): ... ValueError: The conic self (= Projective Conic Curve over Finite Field of size 2 defined by x^2 + x*y + y^2 + x*z + y*z) has no symmetric matrix because the base field has characteristic 2 - >>> from sage.all import * >>> Conic(GF(Integer(2)), [Integer(1),Integer(1),Integer(1),Integer(1),Integer(1),Integer(0)]).diagonalization() Traceback (most recent call last): ... ValueError: The conic self (= Projective Conic Curve over Finite Field of size 2 defined by x^2 + x*y + y^2 + x*z + y*z) has no symmetric matrix because the base field has characteristic 2 - An example over a global function field: - sage: K = FractionField(PolynomialRing(GF(7), 't')) sage: (t,) = K.gens() sage: C = Conic(K, [t/2,0, 1, 2, 0, 3]) sage: C.diagonalization() (Projective Conic Curve over Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 7 defined by (-3*t)*x^2 + 2*y^2 + (3*t + 3)/t*z^2, Scheme morphism: From: Projective Conic Curve over Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 7 defined by (-3*t)*x^2 + 2*y^2 + (3*t + 3)/t*z^2 To: Projective Conic Curve over Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 7 defined by (-3*t)*x^2 + 2*y^2 + x*z + 3*z^2 Defn: Defined on coordinates by sending (x : y : z) to (x - 1/t*z : y : z), Scheme morphism: From: Projective Conic Curve over Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 7 defined by (-3*t)*x^2 + 2*y^2 + x*z + 3*z^2 To: Projective Conic Curve over Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 7 defined by (-3*t)*x^2 + 2*y^2 + (3*t + 3)/t*z^2 Defn: Defined on coordinates by sending (x : y : z) to (x + 1/t*z : y : z)) - >>> from sage.all import * >>> K = FractionField(PolynomialRing(GF(Integer(7)), 't')) >>> (t,) = K.gens() >>> C = Conic(K, [t/Integer(2),Integer(0), Integer(1), Integer(2), Integer(0), Integer(3)]) >>> C.diagonalization() (Projective Conic Curve over Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 7 defined by (-3*t)*x^2 + 2*y^2 + (3*t + 3)/t*z^2, Scheme morphism: From: Projective Conic Curve over Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 7 defined by (-3*t)*x^2 + 2*y^2 + (3*t + 3)/t*z^2 To: Projective Conic Curve over Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 7 defined by (-3*t)*x^2 + 2*y^2 + x*z + 3*z^2 Defn: Defined on coordinates by sending (x : y : z) to (x - 1/t*z : y : z), Scheme morphism: From: Projective Conic Curve over Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 7 defined by (-3*t)*x^2 + 2*y^2 + x*z + 3*z^2 To: Projective Conic Curve over Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 7 defined by (-3*t)*x^2 + 2*y^2 + (3*t + 3)/t*z^2 Defn: Defined on coordinates by sending (x : y : z) to (x + 1/t*z : y : z)) 
 - gens()[source]¶
- Return the generators of the coordinate ring of - self.- EXAMPLES: - sage: P.<x,y,z> = QQ[] sage: c = Conic(x^2 + y^2 + z^2) sage: c.gens() # needs sage.libs.singular (xbar, ybar, zbar) sage: c.defining_polynomial()(c.gens()) # needs sage.libs.singular 0 - >>> from sage.all import * >>> P = QQ['x, y, z']; (x, y, z,) = P._first_ngens(3) >>> c = Conic(x**Integer(2) + y**Integer(2) + z**Integer(2)) >>> c.gens() # needs sage.libs.singular (xbar, ybar, zbar) >>> c.defining_polynomial()(c.gens()) # needs sage.libs.singular 0 - The function - gens()is required for the following construction:- sage: C.<a,b,c> = Conic(GF(3), [1, 1, 1]); C # needs sage.libs.singular Projective Conic Curve over Finite Field of size 3 defined by a^2 + b^2 + c^2 - >>> from sage.all import * >>> C = Conic(GF(Integer(3)), [Integer(1), Integer(1), Integer(1)], names=('a', 'b', 'c',)); (a, b, c,) = C._first_ngens(3); C # needs sage.libs.singular Projective Conic Curve over Finite Field of size 3 defined by a^2 + b^2 + c^2 
 - has_rational_point(point=False, algorithm='default', read_cache=True)[source]¶
- Return - Trueif and only if the conic- selfhas a point over its base field \(B\).- If - pointis- True, then returns a second output, which is a rational point if one exists.- Points are cached whenever they are found. Cached information is used if and only if - read_cacheis- True.- ALGORITHM: - The parameter - algorithmspecifies the algorithm to be used:- 'default'– if the base field is real or complex, use an elementary native Sage implementation
- 'magma'(requires Magma to be installed) – delegates the task to the Magma computer algebra system
 - EXAMPLES: - sage: Conic(RR, [1, 1, 1]).has_rational_point() False sage: Conic(CC, [1, 1, 1]).has_rational_point() True sage: Conic(RR, [1, 2, -3]).has_rational_point(point = True) (True, (1.73205080756888 : 0.000000000000000 : 1.00000000000000)) - >>> from sage.all import * >>> Conic(RR, [Integer(1), Integer(1), Integer(1)]).has_rational_point() False >>> Conic(CC, [Integer(1), Integer(1), Integer(1)]).has_rational_point() True >>> Conic(RR, [Integer(1), Integer(2), -Integer(3)]).has_rational_point(point = True) (True, (1.73205080756888 : 0.000000000000000 : 1.00000000000000)) - Conics over polynomial rings can be solved internally: - sage: R.<t> = QQ[] sage: C = Conic([-2, t^2 + 1, t^2 - 1]) sage: C.has_rational_point() # needs sage.libs.pari True - >>> from sage.all import * >>> R = QQ['t']; (t,) = R._first_ngens(1) >>> C = Conic([-Integer(2), t**Integer(2) + Integer(1), t**Integer(2) - Integer(1)]) >>> C.has_rational_point() # needs sage.libs.pari True - And they can also be solved with Magma: - sage: C.has_rational_point(algorithm='magma') # optional - magma True sage: C.has_rational_point(algorithm='magma', point=True) # optional - magma (True, (-t : 1 : 1)) sage: D = Conic([t, 1, t^2]) sage: D.has_rational_point(algorithm='magma') # optional - magma False - >>> from sage.all import * >>> C.has_rational_point(algorithm='magma') # optional - magma True >>> C.has_rational_point(algorithm='magma', point=True) # optional - magma (True, (-t : 1 : 1)) >>> D = Conic([t, Integer(1), t**Integer(2)]) >>> D.has_rational_point(algorithm='magma') # optional - magma False 
 - has_singular_point(point=False)[source]¶
- Return - Trueif and only if the conic- selfhas a rational singular point.- If - pointis- True, then also return a rational singular point (or- Noneif no such point exists).- EXAMPLES: - sage: c = Conic(QQ, [1,0,1]); c Projective Conic Curve over Rational Field defined by x^2 + z^2 sage: c.has_singular_point(point = True) (True, (0 : 1 : 0)) sage: P.<x,y,z> = GF(7)[] sage: e = Conic((x+y+z)*(x-y+2*z)); e Projective Conic Curve over Finite Field of size 7 defined by x^2 - y^2 + 3*x*z + y*z + 2*z^2 sage: e.has_singular_point(point = True) (True, (2 : 4 : 1)) sage: Conic([1, 1, -1]).has_singular_point() False sage: Conic([1, 1, -1]).has_singular_point(point=True) (False, None) - >>> from sage.all import * >>> c = Conic(QQ, [Integer(1),Integer(0),Integer(1)]); c Projective Conic Curve over Rational Field defined by x^2 + z^2 >>> c.has_singular_point(point = True) (True, (0 : 1 : 0)) >>> P = GF(Integer(7))['x, y, z']; (x, y, z,) = P._first_ngens(3) >>> e = Conic((x+y+z)*(x-y+Integer(2)*z)); e Projective Conic Curve over Finite Field of size 7 defined by x^2 - y^2 + 3*x*z + y*z + 2*z^2 >>> e.has_singular_point(point = True) (True, (2 : 4 : 1)) >>> Conic([Integer(1), Integer(1), -Integer(1)]).has_singular_point() False >>> Conic([Integer(1), Integer(1), -Integer(1)]).has_singular_point(point=True) (False, None) - has_singular_pointis not implemented over all fields of characteristic \(2\). It is implemented over finite fields.- sage: F.<a> = FiniteField(8) # needs sage.rings.finite_rings sage: Conic([a, a + 1, 1]).has_singular_point(point=True) # needs sage.rings.finite_rings (True, (a + 1 : 0 : 1)) sage: P.<t> = GF(2)[] sage: C = Conic(P, [t,t,1]); C Projective Conic Curve over Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 2... defined by t*x^2 + t*y^2 + z^2 sage: C.has_singular_point(point=False) Traceback (most recent call last): ... NotImplementedError: Sorry, find singular point on conics not implemented over all fields of characteristic 2. - >>> from sage.all import * >>> F = FiniteField(Integer(8), names=('a',)); (a,) = F._first_ngens(1)# needs sage.rings.finite_rings >>> Conic([a, a + Integer(1), Integer(1)]).has_singular_point(point=True) # needs sage.rings.finite_rings (True, (a + 1 : 0 : 1)) >>> P = GF(Integer(2))['t']; (t,) = P._first_ngens(1) >>> C = Conic(P, [t,t,Integer(1)]); C Projective Conic Curve over Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 2... defined by t*x^2 + t*y^2 + z^2 >>> C.has_singular_point(point=False) Traceback (most recent call last): ... NotImplementedError: Sorry, find singular point on conics not implemented over all fields of characteristic 2. 
 - hom(x, Y=None)[source]¶
- Return the scheme morphism from - selfto- Ydefined by- x. Here- xcan be a matrix or a sequence of polynomials. If- Yis omitted, then a natural image is found if possible.- EXAMPLES: - Here are a few morphisms given by matrices. In the first example, - Yis omitted, in the second example,- Yis specified.- sage: c = Conic([-1, 1, 1]) sage: h = c.hom(Matrix([[1,1,0],[0,1,0],[0,0,1]])); h Scheme morphism: From: Projective Conic Curve over Rational Field defined by -x^2 + y^2 + z^2 To: Projective Conic Curve over Rational Field defined by -x^2 + 2*x*y + z^2 Defn: Defined on coordinates by sending (x : y : z) to (x + y : y : z) sage: h([-1, 1, 0]) # needs sage.libs.singular (0 : 1 : 0) sage: c = Conic([-1, 1, 1]) sage: d = Conic([4, 1, -1]) sage: c.hom(Matrix([[0, 0, 1/2], [0, 1, 0], [1, 0, 0]]), d) Scheme morphism: From: Projective Conic Curve over Rational Field defined by -x^2 + y^2 + z^2 To: Projective Conic Curve over Rational Field defined by 4*x^2 + y^2 - z^2 Defn: Defined on coordinates by sending (x : y : z) to (1/2*z : y : x) - >>> from sage.all import * >>> c = Conic([-Integer(1), Integer(1), Integer(1)]) >>> h = c.hom(Matrix([[Integer(1),Integer(1),Integer(0)],[Integer(0),Integer(1),Integer(0)],[Integer(0),Integer(0),Integer(1)]])); h Scheme morphism: From: Projective Conic Curve over Rational Field defined by -x^2 + y^2 + z^2 To: Projective Conic Curve over Rational Field defined by -x^2 + 2*x*y + z^2 Defn: Defined on coordinates by sending (x : y : z) to (x + y : y : z) >>> h([-Integer(1), Integer(1), Integer(0)]) # needs sage.libs.singular (0 : 1 : 0) >>> c = Conic([-Integer(1), Integer(1), Integer(1)]) >>> d = Conic([Integer(4), Integer(1), -Integer(1)]) >>> c.hom(Matrix([[Integer(0), Integer(0), Integer(1)/Integer(2)], [Integer(0), Integer(1), Integer(0)], [Integer(1), Integer(0), Integer(0)]]), d) Scheme morphism: From: Projective Conic Curve over Rational Field defined by -x^2 + y^2 + z^2 To: Projective Conic Curve over Rational Field defined by 4*x^2 + y^2 - z^2 Defn: Defined on coordinates by sending (x : y : z) to (1/2*z : y : x) - ValueErroris raised if the wrong codomain- Yis specified:- sage: c = Conic([-1, 1, 1]) sage: c.hom(Matrix([[0, 0, 1/2], [0, 1, 0], [1, 0, 0]]), c) Traceback (most recent call last): ... ValueError: The matrix x (= [ 0 0 1/2] [ 0 1 0] [ 1 0 0]) does not define a map from self (= Projective Conic Curve over Rational Field defined by -x^2 + y^2 + z^2) to Y (= Projective Conic Curve over Rational Field defined by -x^2 + y^2 + z^2) - >>> from sage.all import * >>> c = Conic([-Integer(1), Integer(1), Integer(1)]) >>> c.hom(Matrix([[Integer(0), Integer(0), Integer(1)/Integer(2)], [Integer(0), Integer(1), Integer(0)], [Integer(1), Integer(0), Integer(0)]]), c) Traceback (most recent call last): ... ValueError: The matrix x (= [ 0 0 1/2] [ 0 1 0] [ 1 0 0]) does not define a map from self (= Projective Conic Curve over Rational Field defined by -x^2 + y^2 + z^2) to Y (= Projective Conic Curve over Rational Field defined by -x^2 + y^2 + z^2) - The identity map between two representations of the same conic: - sage: C = Conic([1,2,3,4,5,6]) sage: D = Conic([2,4,6,8,10,12]) sage: C.hom(identity_matrix(3), D) Scheme morphism: From: Projective Conic Curve over Rational Field defined by x^2 + 2*x*y + 4*y^2 + 3*x*z + 5*y*z + 6*z^2 To: Projective Conic Curve over Rational Field defined by 2*x^2 + 4*x*y + 8*y^2 + 6*x*z + 10*y*z + 12*z^2 Defn: Defined on coordinates by sending (x : y : z) to (x : y : z) - >>> from sage.all import * >>> C = Conic([Integer(1),Integer(2),Integer(3),Integer(4),Integer(5),Integer(6)]) >>> D = Conic([Integer(2),Integer(4),Integer(6),Integer(8),Integer(10),Integer(12)]) >>> C.hom(identity_matrix(Integer(3)), D) Scheme morphism: From: Projective Conic Curve over Rational Field defined by x^2 + 2*x*y + 4*y^2 + 3*x*z + 5*y*z + 6*z^2 To: Projective Conic Curve over Rational Field defined by 2*x^2 + 4*x*y + 8*y^2 + 6*x*z + 10*y*z + 12*z^2 Defn: Defined on coordinates by sending (x : y : z) to (x : y : z) - An example not over the rational numbers: - sage: P.<t> = QQ[] sage: C = Conic([1,0,0,t,0,1/t]) sage: D = Conic([1/t^2, 0, -2/t^2, t, 0, (t + 1)/t^2]) sage: T = Matrix([[t,0,1], [0,1,0], [0,0,1]]) sage: C.hom(T, D) Scheme morphism: From: Projective Conic Curve over Fraction Field of Univariate Polynomial Ring in t over Rational Field defined by x^2 + t*y^2 + 1/t*z^2 To: Projective Conic Curve over Fraction Field of Univariate Polynomial Ring in t over Rational Field defined by 1/(t^2)*x^2 + t*y^2 - 2/(t^2)*x*z + (t + 1)/(t^2)*z^2 Defn: Defined on coordinates by sending (x : y : z) to (t*x + z : y : z) - >>> from sage.all import * >>> P = QQ['t']; (t,) = P._first_ngens(1) >>> C = Conic([Integer(1),Integer(0),Integer(0),t,Integer(0),Integer(1)/t]) >>> D = Conic([Integer(1)/t**Integer(2), Integer(0), -Integer(2)/t**Integer(2), t, Integer(0), (t + Integer(1))/t**Integer(2)]) >>> T = Matrix([[t,Integer(0),Integer(1)], [Integer(0),Integer(1),Integer(0)], [Integer(0),Integer(0),Integer(1)]]) >>> C.hom(T, D) Scheme morphism: From: Projective Conic Curve over Fraction Field of Univariate Polynomial Ring in t over Rational Field defined by x^2 + t*y^2 + 1/t*z^2 To: Projective Conic Curve over Fraction Field of Univariate Polynomial Ring in t over Rational Field defined by 1/(t^2)*x^2 + t*y^2 - 2/(t^2)*x*z + (t + 1)/(t^2)*z^2 Defn: Defined on coordinates by sending (x : y : z) to (t*x + z : y : z) 
 - is_diagonal()[source]¶
- Return - Trueif and only if the conic has the form \(a x^2 + b y^2 + c z^2\).- EXAMPLES: - sage: c = Conic([1,1,0,1,0,1]); c Projective Conic Curve over Rational Field defined by x^2 + x*y + y^2 + z^2 sage: d, t = c.diagonal_matrix() sage: c.is_diagonal() False sage: c.diagonalization()[0].is_diagonal() True - >>> from sage.all import * >>> c = Conic([Integer(1),Integer(1),Integer(0),Integer(1),Integer(0),Integer(1)]); c Projective Conic Curve over Rational Field defined by x^2 + x*y + y^2 + z^2 >>> d, t = c.diagonal_matrix() >>> c.is_diagonal() False >>> c.diagonalization()[Integer(0)].is_diagonal() True 
 - is_smooth()[source]¶
- Return - Trueif and only if- selfis smooth.- EXAMPLES: - sage: Conic([1,-1,0]).is_smooth() False sage: Conic(GF(2),[1,1,1,1,1,0]).is_smooth() True - >>> from sage.all import * >>> Conic([Integer(1),-Integer(1),Integer(0)]).is_smooth() False >>> Conic(GF(Integer(2)),[Integer(1),Integer(1),Integer(1),Integer(1),Integer(1),Integer(0)]).is_smooth() True 
 - matrix()[source]¶
- Return a matrix \(M\) such that \((x, y, z) M (x, y, z)^t\) is the defining equation of - self.- The matrix \(M\) is upper triangular if the base field has characteristic \(2\) and symmetric otherwise. - EXAMPLES: - sage: R.<x, y, z> = QQ[] sage: C = Conic(x^2 + x*y + y^2 + z^2) sage: C.matrix() [ 1 1/2 0] [1/2 1 0] [ 0 0 1] sage: R.<x, y, z> = GF(2)[] sage: C = Conic(x^2 + x*y + y^2 + x*z + z^2) sage: C.matrix() [1 1 1] [0 1 0] [0 0 1] - >>> from sage.all import * >>> R = QQ['x, y, z']; (x, y, z,) = R._first_ngens(3) >>> C = Conic(x**Integer(2) + x*y + y**Integer(2) + z**Integer(2)) >>> C.matrix() [ 1 1/2 0] [1/2 1 0] [ 0 0 1] >>> R = GF(Integer(2))['x, y, z']; (x, y, z,) = R._first_ngens(3) >>> C = Conic(x**Integer(2) + x*y + y**Integer(2) + x*z + z**Integer(2)) >>> C.matrix() [1 1 1] [0 1 0] [0 0 1] 
 - parametrization(point=None, morphism=True)[source]¶
- Return a parametrization \(f\) of - selftogether with the inverse of \(f\).- If - pointis specified, then that point is used for the parametrization. Otherwise, use- rational_point()to find a point.- If - morphismis True, then \(f\) is returned in the form of a Scheme morphism. Otherwise, it is a tuple of polynomials that gives the parametrization.- EXAMPLES: - An example over a finite field - sage: # needs sage.libs.pari sage: c = Conic(GF(2), [1,1,1,1,1,0]) sage: f, g = c.parametrization(); f, g (Scheme morphism: From: Projective Space of dimension 1 over Finite Field of size 2 To: Projective Conic Curve over Finite Field of size 2 defined by x^2 + x*y + y^2 + x*z + y*z Defn: Defined on coordinates by sending (x : y) to ..., Scheme morphism: From: Projective Conic Curve over Finite Field of size 2 defined by x^2 + x*y + y^2 + x*z + y*z To: Projective Space of dimension 1 over Finite Field of size 2 Defn: Defined on coordinates by sending (x : y : z) to ...) sage: set(f(p) for p in f.domain()) {(0 : 0 : 1), (0 : 1 : 1), (1 : 0 : 1)} - >>> from sage.all import * >>> # needs sage.libs.pari >>> c = Conic(GF(Integer(2)), [Integer(1),Integer(1),Integer(1),Integer(1),Integer(1),Integer(0)]) >>> f, g = c.parametrization(); f, g (Scheme morphism: From: Projective Space of dimension 1 over Finite Field of size 2 To: Projective Conic Curve over Finite Field of size 2 defined by x^2 + x*y + y^2 + x*z + y*z Defn: Defined on coordinates by sending (x : y) to ..., Scheme morphism: From: Projective Conic Curve over Finite Field of size 2 defined by x^2 + x*y + y^2 + x*z + y*z To: Projective Space of dimension 1 over Finite Field of size 2 Defn: Defined on coordinates by sending (x : y : z) to ...) >>> set(f(p) for p in f.domain()) {(0 : 0 : 1), (0 : 1 : 1), (1 : 0 : 1)} - Verfication of the example - sage: # needs sage.libs.pari sage: h = g*f; h Scheme endomorphism of Projective Space of dimension 1 over Finite Field of size 2 Defn: Defined on coordinates by sending (x : y) to ... sage: h[0]/h[1] x/y sage: h.is_one() # known bug (see :issue:`31892`) True sage: (x,y,z) = c.gens() sage: x.parent() Quotient of Multivariate Polynomial Ring in x, y, z over Finite Field of size 2 by the ideal (x^2 + x*y + y^2 + x*z + y*z) sage: k = f*g sage: k[0]*z-k[2]*x 0 sage: k[1]*z-k[2]*y 0 - >>> from sage.all import * >>> # needs sage.libs.pari >>> h = g*f; h Scheme endomorphism of Projective Space of dimension 1 over Finite Field of size 2 Defn: Defined on coordinates by sending (x : y) to ... >>> h[Integer(0)]/h[Integer(1)] x/y >>> h.is_one() # known bug (see :issue:`31892`) True >>> (x,y,z) = c.gens() >>> x.parent() Quotient of Multivariate Polynomial Ring in x, y, z over Finite Field of size 2 by the ideal (x^2 + x*y + y^2 + x*z + y*z) >>> k = f*g >>> k[Integer(0)]*z-k[Integer(2)]*x 0 >>> k[Integer(1)]*z-k[Integer(2)]*y 0 - The morphisms are mathematically defined in all points, but don’t work completely in SageMath (see Issue #31892) - sage: # needs sage.libs.pari sage: f, g = c.parametrization([0,0,1]) sage: g([0,1,1]) (1 : 0) sage: f([1,0]) (0 : 1 : 1) sage: f([1,1]) (0 : 0 : 1) sage: g([0,0,1]) (1 : 1) - >>> from sage.all import * >>> # needs sage.libs.pari >>> f, g = c.parametrization([Integer(0),Integer(0),Integer(1)]) >>> g([Integer(0),Integer(1),Integer(1)]) (1 : 0) >>> f([Integer(1),Integer(0)]) (0 : 1 : 1) >>> f([Integer(1),Integer(1)]) (0 : 0 : 1) >>> g([Integer(0),Integer(0),Integer(1)]) (1 : 1) - An example with - morphism = False- sage: # needs sage.libs.pari sage: R.<x,y,z> = QQ[] sage: C = Curve(7*x^2 + 2*y*z + z^2) sage: (p, i) = C.parametrization(morphism=False); (p, i) ([-2*x*y, x^2 + 7*y^2, -2*x^2], [-1/2*x, 1/7*y + 1/14*z]) sage: C.defining_polynomial()(p) 0 sage: i[0](p) / i[1](p) x/y - >>> from sage.all import * >>> # needs sage.libs.pari >>> R = QQ['x, y, z']; (x, y, z,) = R._first_ngens(3) >>> C = Curve(Integer(7)*x**Integer(2) + Integer(2)*y*z + z**Integer(2)) >>> (p, i) = C.parametrization(morphism=False); (p, i) ([-2*x*y, x^2 + 7*y^2, -2*x^2], [-1/2*x, 1/7*y + 1/14*z]) >>> C.defining_polynomial()(p) 0 >>> i[Integer(0)](p) / i[Integer(1)](p) x/y - A - ValueErroris raised if- selfhas no rational point- sage: # needs sage.libs.pari sage: C = Conic(x^2 + y^2 + 7*z^2) sage: C.parametrization() Traceback (most recent call last): ... ValueError: Conic Projective Conic Curve over Rational Field defined by x^2 + y^2 + 7*z^2 has no rational points over Rational Field! - >>> from sage.all import * >>> # needs sage.libs.pari >>> C = Conic(x**Integer(2) + y**Integer(2) + Integer(7)*z**Integer(2)) >>> C.parametrization() Traceback (most recent call last): ... ValueError: Conic Projective Conic Curve over Rational Field defined by x^2 + y^2 + 7*z^2 has no rational points over Rational Field! - A - ValueErroris raised if- selfis not smooth- sage: # needs sage.libs.pari sage: C = Conic(x^2 + y^2) sage: C.parametrization() Traceback (most recent call last): ... ValueError: The conic self (=Projective Conic Curve over Rational Field defined by x^2 + y^2) is not smooth, hence does not have a parametrization. - >>> from sage.all import * >>> # needs sage.libs.pari >>> C = Conic(x**Integer(2) + y**Integer(2)) >>> C.parametrization() Traceback (most recent call last): ... ValueError: The conic self (=Projective Conic Curve over Rational Field defined by x^2 + y^2) is not smooth, hence does not have a parametrization. 
 - point(v, check=True)[source]¶
- Construct a point on - selfcorresponding to the input- v.- If - checkis True, then checks if- vdefines a valid point on- self.- If no rational point on - selfis known yet, then also caches the point for use by- rational_point()and- parametrization().- EXAMPLES: - sage: c = Conic([1, -1, 1]) sage: c.point([15, 17, 8]) (15/8 : 17/8 : 1) sage: c.rational_point() (15/8 : 17/8 : 1) sage: d = Conic([1, -1, 1]) sage: d.rational_point() # needs sage.libs.pari (-1 : 1 : 0) - >>> from sage.all import * >>> c = Conic([Integer(1), -Integer(1), Integer(1)]) >>> c.point([Integer(15), Integer(17), Integer(8)]) (15/8 : 17/8 : 1) >>> c.rational_point() (15/8 : 17/8 : 1) >>> d = Conic([Integer(1), -Integer(1), Integer(1)]) >>> d.rational_point() # needs sage.libs.pari (-1 : 1 : 0) 
 - random_rational_point(*args1, **args2)[source]¶
- Return a random rational point of the conic - self.- ALGORITHM: - Compute a parametrization \(f\) of - selfusing- parametrization().
- Computes a random point \((x:y)\) on the projective line. 
- Output \(f(x:y)\). 
 - The coordinates \(x\) and \(y\) are computed using - B.random_element, where- Bis the base field of- selfand additional arguments to- random_rational_pointare passed to- random_element.- If the base field is a finite field, then the output is uniformly distributed over the points of - self.- EXAMPLES: - sage: # needs sage.libs.pari sage: c = Conic(GF(2), [1,1,1,1,1,0]) sage: [c.random_rational_point() for i in range(10)] # random [(1 : 0 : 1), (1 : 0 : 1), (1 : 0 : 1), (0 : 1 : 1), (1 : 0 : 1), (0 : 0 : 1), (1 : 0 : 1), (1 : 0 : 1), (0 : 0 : 1), (1 : 0 : 1)] sage: d = Conic(QQ, [1, 1, -1]) sage: d.random_rational_point(den_bound=1, num_bound=5) # random (-24/25 : 7/25 : 1) sage: Conic(QQ, [1, 1, 1]).random_rational_point() Traceback (most recent call last): ... ValueError: Conic Projective Conic Curve over Rational Field defined by x^2 + y^2 + z^2 has no rational points over Rational Field! - >>> from sage.all import * >>> # needs sage.libs.pari >>> c = Conic(GF(Integer(2)), [Integer(1),Integer(1),Integer(1),Integer(1),Integer(1),Integer(0)]) >>> [c.random_rational_point() for i in range(Integer(10))] # random [(1 : 0 : 1), (1 : 0 : 1), (1 : 0 : 1), (0 : 1 : 1), (1 : 0 : 1), (0 : 0 : 1), (1 : 0 : 1), (1 : 0 : 1), (0 : 0 : 1), (1 : 0 : 1)] >>> d = Conic(QQ, [Integer(1), Integer(1), -Integer(1)]) >>> d.random_rational_point(den_bound=Integer(1), num_bound=Integer(5)) # random (-24/25 : 7/25 : 1) >>> Conic(QQ, [Integer(1), Integer(1), Integer(1)]).random_rational_point() Traceback (most recent call last): ... ValueError: Conic Projective Conic Curve over Rational Field defined by x^2 + y^2 + z^2 has no rational points over Rational Field! 
 - rational_point(algorithm='default', read_cache=True)[source]¶
- Return a point on - selfdefined over the base field.- This raises a - ValueErrorif no rational point exists.- See - self.has_rational_pointfor the algorithm used and for the use of the parameters- algorithmand- read_cache.- EXAMPLES: - Examples over \(\QQ\) - sage: R.<x,y,z> = QQ[] sage: # needs sage.libs.pari sage: C = Conic(7*x^2 + 2*y*z + z^2) sage: C.rational_point() (0 : 1 : 0) sage: C = Conic(x^2 + 2*y^2 + z^2) sage: C.rational_point() Traceback (most recent call last): ... ValueError: Conic Projective Conic Curve over Rational Field defined by x^2 + 2*y^2 + z^2 has no rational points over Rational Field! sage: C = Conic(x^2 + y^2 + 7*z^2) sage: C.rational_point(algorithm='rnfisnorm') Traceback (most recent call last): ... ValueError: Conic Projective Conic Curve over Rational Field defined by x^2 + y^2 + 7*z^2 has no rational points over Rational Field! - >>> from sage.all import * >>> R = QQ['x, y, z']; (x, y, z,) = R._first_ngens(3) >>> # needs sage.libs.pari >>> C = Conic(Integer(7)*x**Integer(2) + Integer(2)*y*z + z**Integer(2)) >>> C.rational_point() (0 : 1 : 0) >>> C = Conic(x**Integer(2) + Integer(2)*y**Integer(2) + z**Integer(2)) >>> C.rational_point() Traceback (most recent call last): ... ValueError: Conic Projective Conic Curve over Rational Field defined by x^2 + 2*y^2 + z^2 has no rational points over Rational Field! >>> C = Conic(x**Integer(2) + y**Integer(2) + Integer(7)*z**Integer(2)) >>> C.rational_point(algorithm='rnfisnorm') Traceback (most recent call last): ... ValueError: Conic Projective Conic Curve over Rational Field defined by x^2 + y^2 + 7*z^2 has no rational points over Rational Field! - Examples over number fields - sage: # needs sage.rings.number_field sage: P.<x> = QQ[] sage: L.<b> = NumberField(x^3 - 5) sage: C = Conic(L, [3, 2, -b]) sage: p = C.rational_point(algorithm='rnfisnorm') sage: p # output is random (1/3*b^2 - 4/3*b + 4/3 : b^2 - 2 : 1) sage: C.defining_polynomial()(list(p)) 0 sage: K.<i> = QuadraticField(-1) # needs sage.rings.number_field sage: D = Conic(K, [3, 2, 5]) # needs sage.rings.number_field sage: D.rational_point(algorithm='rnfisnorm') # output is random # needs sage.rings.number_field (-3 : 4*i : 1) sage: # needs sage.libs.pari sage.rings.number_field sage: L.<s> = QuadraticField(2) sage: Conic(QQ, [1, 1, -3]).has_rational_point() False sage: E = Conic(L, [1, 1, -3]) sage: E.rational_point() # output is random (-1 : -s : 1) - >>> from sage.all import * >>> # needs sage.rings.number_field >>> P = QQ['x']; (x,) = P._first_ngens(1) >>> L = NumberField(x**Integer(3) - Integer(5), names=('b',)); (b,) = L._first_ngens(1) >>> C = Conic(L, [Integer(3), Integer(2), -b]) >>> p = C.rational_point(algorithm='rnfisnorm') >>> p # output is random (1/3*b^2 - 4/3*b + 4/3 : b^2 - 2 : 1) >>> C.defining_polynomial()(list(p)) 0 >>> K = QuadraticField(-Integer(1), names=('i',)); (i,) = K._first_ngens(1)# needs sage.rings.number_field >>> D = Conic(K, [Integer(3), Integer(2), Integer(5)]) # needs sage.rings.number_field >>> D.rational_point(algorithm='rnfisnorm') # output is random # needs sage.rings.number_field (-3 : 4*i : 1) >>> # needs sage.libs.pari sage.rings.number_field >>> L = QuadraticField(Integer(2), names=('s',)); (s,) = L._first_ngens(1) >>> Conic(QQ, [Integer(1), Integer(1), -Integer(3)]).has_rational_point() False >>> E = Conic(L, [Integer(1), Integer(1), -Integer(3)]) >>> E.rational_point() # output is random (-1 : -s : 1) - Currently Magma is better at solving conics over number fields than Sage, so it helps to use the algorithm ‘magma’ if Magma is installed: - sage: # optional - magma, needs sage.rings.number_field sage: q = C.rational_point(algorithm='magma', ....: read_cache=False) sage: q # output is random (1/5*b^2 : 1/5*b^2 : 1) sage: C.defining_polynomial()(list(q)) 0 sage: len(str(p)) > 1.5*len(str(q)) True sage: D.rational_point(algorithm='magma', # random ....: read_cache=False) (1 : 2*i : 1) sage: E.rational_point(algorithm='magma', # random ....: read_cache=False) (-s : 1 : 1) sage: # needs sage.libs.pari sage.rings.number_field sage: F = Conic([L.gen(), 30, -20]) sage: q = F.rational_point(algorithm='magma') # optional - magma sage: q # random # optional - magma (-10/7*s + 40/7 : 5/7*s - 6/7 : 1) sage: p = F.rational_point(read_cache=False) sage: p # random (788210*s - 1114700 : -171135*s + 242022 : 1) sage: len(str(p)) > len(str(q)) # optional - magma True sage: # needs sage.rings.number_field sage: G = Conic([L.gen(), 30, -21]) sage: G.has_rational_point(algorithm='magma') # optional - magma False sage: G.has_rational_point(read_cache=False) # needs sage.libs.pari False sage: G.has_rational_point(algorithm='local', ....: read_cache=False) False sage: G.rational_point(algorithm='magma') # optional - magma Traceback (most recent call last): ... ValueError: Conic Projective Conic Curve over Number Field in s with defining polynomial x^2 - 2 with s = 1.414213562373095? defined by s*x^2 + 30*y^2 - 21*z^2 has no rational points over Number Field in s with defining polynomial x^2 - 2 with s = 1.414213562373095?! sage: G.rational_point(algorithm='magma', # optional - magma ....: read_cache=False) Traceback (most recent call last): ... ValueError: Conic Projective Conic Curve over Number Field in s with defining polynomial x^2 - 2 with s = 1.414213562373095? defined by s*x^2 + 30*y^2 - 21*z^2 has no rational points over Number Field in s with defining polynomial x^2 - 2 with s = 1.414213562373095?! - >>> from sage.all import * >>> # optional - magma, needs sage.rings.number_field >>> q = C.rational_point(algorithm='magma', ... read_cache=False) >>> q # output is random (1/5*b^2 : 1/5*b^2 : 1) >>> C.defining_polynomial()(list(q)) 0 >>> len(str(p)) > RealNumber('1.5')*len(str(q)) True >>> D.rational_point(algorithm='magma', # random ... read_cache=False) (1 : 2*i : 1) >>> E.rational_point(algorithm='magma', # random ... read_cache=False) (-s : 1 : 1) >>> # needs sage.libs.pari sage.rings.number_field >>> F = Conic([L.gen(), Integer(30), -Integer(20)]) >>> q = F.rational_point(algorithm='magma') # optional - magma >>> q # random # optional - magma (-10/7*s + 40/7 : 5/7*s - 6/7 : 1) >>> p = F.rational_point(read_cache=False) >>> p # random (788210*s - 1114700 : -171135*s + 242022 : 1) >>> len(str(p)) > len(str(q)) # optional - magma True >>> # needs sage.rings.number_field >>> G = Conic([L.gen(), Integer(30), -Integer(21)]) >>> G.has_rational_point(algorithm='magma') # optional - magma False >>> G.has_rational_point(read_cache=False) # needs sage.libs.pari False >>> G.has_rational_point(algorithm='local', ... read_cache=False) False >>> G.rational_point(algorithm='magma') # optional - magma Traceback (most recent call last): ... ValueError: Conic Projective Conic Curve over Number Field in s with defining polynomial x^2 - 2 with s = 1.414213562373095? defined by s*x^2 + 30*y^2 - 21*z^2 has no rational points over Number Field in s with defining polynomial x^2 - 2 with s = 1.414213562373095?! >>> G.rational_point(algorithm='magma', # optional - magma ... read_cache=False) Traceback (most recent call last): ... ValueError: Conic Projective Conic Curve over Number Field in s with defining polynomial x^2 - 2 with s = 1.414213562373095? defined by s*x^2 + 30*y^2 - 21*z^2 has no rational points over Number Field in s with defining polynomial x^2 - 2 with s = 1.414213562373095?! - Examples over finite fields - sage: F.<a> = FiniteField(7^20) # needs sage.rings.finite_rings sage: C = Conic([1, a, -5]); C # needs sage.rings.finite_rings Projective Conic Curve over Finite Field in a of size 7^20 defined by x^2 + a*y^2 + 2*z^2 sage: C.rational_point() # output is random # needs sage.rings.finite_rings (4*a^19 + 5*a^18 + 4*a^17 + a^16 + 6*a^15 + 3*a^13 + 6*a^11 + a^9 + 3*a^8 + 2*a^7 + 4*a^6 + 3*a^5 + 3*a^4 + a^3 + a + 6 : 5*a^18 + a^17 + a^16 + 6*a^15 + 4*a^14 + a^13 + 5*a^12 + 5*a^10 + 2*a^9 + 6*a^8 + 6*a^7 + 6*a^6 + 2*a^4 + 3 : 1) - >>> from sage.all import * >>> F = FiniteField(Integer(7)**Integer(20), names=('a',)); (a,) = F._first_ngens(1)# needs sage.rings.finite_rings >>> C = Conic([Integer(1), a, -Integer(5)]); C # needs sage.rings.finite_rings Projective Conic Curve over Finite Field in a of size 7^20 defined by x^2 + a*y^2 + 2*z^2 >>> C.rational_point() # output is random # needs sage.rings.finite_rings (4*a^19 + 5*a^18 + 4*a^17 + a^16 + 6*a^15 + 3*a^13 + 6*a^11 + a^9 + 3*a^8 + 2*a^7 + 4*a^6 + 3*a^5 + 3*a^4 + a^3 + a + 6 : 5*a^18 + a^17 + a^16 + 6*a^15 + 4*a^14 + a^13 + 5*a^12 + 5*a^10 + 2*a^9 + 6*a^8 + 6*a^7 + 6*a^6 + 2*a^4 + 3 : 1) - Examples over \(\RR\) and \(\CC\) - sage: Conic(CC, [1, 2, 3]).rational_point() (0 : 1.22474487139159*I : 1) sage: Conic(RR, [1, 1, 1]).rational_point() Traceback (most recent call last): ... ValueError: Conic Projective Conic Curve over Real Field with 53 bits of precision defined by x^2 + y^2 + z^2 has no rational points over Real Field with 53 bits of precision! - >>> from sage.all import * >>> Conic(CC, [Integer(1), Integer(2), Integer(3)]).rational_point() (0 : 1.22474487139159*I : 1) >>> Conic(RR, [Integer(1), Integer(1), Integer(1)]).rational_point() Traceback (most recent call last): ... ValueError: Conic Projective Conic Curve over Real Field with 53 bits of precision defined by x^2 + y^2 + z^2 has no rational points over Real Field with 53 bits of precision! 
 - singular_point()[source]¶
- Return a singular rational point of - self.- EXAMPLES: - sage: Conic(GF(2), [1,1,1,1,1,1]).singular_point() (1 : 1 : 1) - >>> from sage.all import * >>> Conic(GF(Integer(2)), [Integer(1),Integer(1),Integer(1),Integer(1),Integer(1),Integer(1)]).singular_point() (1 : 1 : 1) - ValueErroris raised if the conic has no rational singular point- sage: Conic(QQ, [1,1,1,1,1,1]).singular_point() Traceback (most recent call last): ... ValueError: The conic self (= Projective Conic Curve over Rational Field defined by x^2 + x*y + y^2 + x*z + y*z + z^2) has no rational singular point - >>> from sage.all import * >>> Conic(QQ, [Integer(1),Integer(1),Integer(1),Integer(1),Integer(1),Integer(1)]).singular_point() Traceback (most recent call last): ... ValueError: The conic self (= Projective Conic Curve over Rational Field defined by x^2 + x*y + y^2 + x*z + y*z + z^2) has no rational singular point 
 - symmetric_matrix()[source]¶
- The symmetric matrix \(M\) such that \((x y z) M (x y z)^t\) is the defining equation of - self.- EXAMPLES: - sage: R.<x, y, z> = QQ[] sage: C = Conic(x^2 + x*y/2 + y^2 + z^2) sage: C.symmetric_matrix() [ 1 1/4 0] [1/4 1 0] [ 0 0 1] sage: C = Conic(x^2 + 2*x*y + y^2 + 3*x*z + z^2) sage: v = vector([x, y, z]) sage: v * C.symmetric_matrix() * v x^2 + 2*x*y + y^2 + 3*x*z + z^2 - >>> from sage.all import * >>> R = QQ['x, y, z']; (x, y, z,) = R._first_ngens(3) >>> C = Conic(x**Integer(2) + x*y/Integer(2) + y**Integer(2) + z**Integer(2)) >>> C.symmetric_matrix() [ 1 1/4 0] [1/4 1 0] [ 0 0 1] >>> C = Conic(x**Integer(2) + Integer(2)*x*y + y**Integer(2) + Integer(3)*x*z + z**Integer(2)) >>> v = vector([x, y, z]) >>> v * C.symmetric_matrix() * v x^2 + 2*x*y + y^2 + 3*x*z + z^2 
 - upper_triangular_matrix()[source]¶
- The upper-triangular matrix \(M\) such that \((x y z) M (x y z)^t\) is the defining equation of - self.- EXAMPLES: - sage: R.<x, y, z> = QQ[] sage: C = Conic(x^2 + x*y + y^2 + z^2) sage: C.upper_triangular_matrix() [1 1 0] [0 1 0] [0 0 1] sage: C = Conic(x^2 + 2*x*y + y^2 + 3*x*z + z^2) sage: v = vector([x, y, z]) sage: v * C.upper_triangular_matrix() * v x^2 + 2*x*y + y^2 + 3*x*z + z^2 - >>> from sage.all import * >>> R = QQ['x, y, z']; (x, y, z,) = R._first_ngens(3) >>> C = Conic(x**Integer(2) + x*y + y**Integer(2) + z**Integer(2)) >>> C.upper_triangular_matrix() [1 1 0] [0 1 0] [0 0 1] >>> C = Conic(x**Integer(2) + Integer(2)*x*y + y**Integer(2) + Integer(3)*x*z + z**Integer(2)) >>> v = vector([x, y, z]) >>> v * C.upper_triangular_matrix() * v x^2 + 2*x*y + y^2 + 3*x*z + z^2 
 - variable_names()[source]¶
- Return the variable names of the defining polynomial of - self.- EXAMPLES: - sage: c = Conic([1,1,0,1,0,1], 'x,y,z') sage: c.variable_names() ('x', 'y', 'z') sage: c.variable_name() 'x' - >>> from sage.all import * >>> c = Conic([Integer(1),Integer(1),Integer(0),Integer(1),Integer(0),Integer(1)], 'x,y,z') >>> c.variable_names() ('x', 'y', 'z') >>> c.variable_name() 'x' - The function - variable_names()is required for the following construction:- sage: C.<p,q,r> = Conic(QQ, [1, 1, 1]); C # needs sage.libs.singular Projective Conic Curve over Rational Field defined by p^2 + q^2 + r^2 - >>> from sage.all import * >>> C = Conic(QQ, [Integer(1), Integer(1), Integer(1)], names=('p', 'q', 'r',)); (p, q, r,) = C._first_ngens(3); C # needs sage.libs.singular Projective Conic Curve over Rational Field defined by p^2 + q^2 + r^2