Package sage :: Package rings :: Module qqbar :: Class AlgebraicGenerator
[hide private]
[frames] | no frames]

Class AlgebraicGenerator

source code

                      object --+    
                               |    
structure.sage_object.SageObject --+
                                   |
                                  AlgebraicGenerator


An AlgebraicGenerator represents both an algebraic number alpha and
the number field QQ[alpha].  There is a single AlgebraicGenerator
representing QQ (with alpha==0).

The AlgebraicGenerator class is private, and should not be used
directly.



Instance Methods [hide private]
 
__init__(self, field, root)
Construct an AlgebraicGenerator object.
source code
 
__reduce__(self)
Add customized pickling support.
source code
 
__hash__(self)
hash(x)
source code
 
__cmp__(self, other) source code
 
set_cyclotomic(self, n) source code
 
is_complex(self) source code
 
_repr_(self) source code
 
is_trivial(self)
Returns true iff this is the trivial generator (alpha == 1), which does not actually extend the rationals.
source code
 
field(self) source code
 
pari_field(self) source code
 
conjugate(self)
If this generator is for the algebraic number alpha, return a generator for the complex conjugate of alpha.
source code
 
_interval_fast(self, prec)
Returns an interval containing this generator, to the specified precision.
source code
 
union(self, other)
Given generators alpha and beta, alpha.union(beta) gives a generator for the number field QQ[alpha][beta].
source code
 
super_poly(self, super, checked=['4ti2-20061025', 'R-2.6.0', 'atlas-3.7.37', 'atlas-3.8.1', 'a...)
Given a generator gen and another generator super, where super is the result of a tree of union() operations where one of the leaves is gen, gen.super_poly(super) returns a polynomial expressing the value of gen in terms of the value of super.
source code
 
__call__(self, elt)
Takes an algebraic number which is represented as either a rational or a number field element, and which is in a subfield of the field generated by this generator.
source code

Inherited from structure.sage_object.SageObject: __new__, __repr__, _axiom_, _axiom_init_, _gap_, _gap_init_, _gp_, _gp_init_, _interface_, _interface_init_, _interface_is_cached_, _kash_, _kash_init_, _macaulay2_, _macaulay2_init_, _magma_, _magma_init_, _maple_, _maple_init_, _mathematica_, _mathematica_init_, _maxima_, _maxima_init_, _octave_, _octave_init_, _pari_, _pari_init_, _r_init_, _sage_, _singular_, _singular_init_, category, db, dump, dumps, plot, rename, reset_name, save, version

Inherited from object: __delattr__, __getattribute__, __reduce_ex__, __setattr__, __str__

Properties [hide private]

Inherited from object: __class__

Method Details [hide private]

__init__(self, field, root)
(Constructor)

source code 

Construct an AlgebraicGenerator object.

sage: from sage.rings.qqbar import ANRoot, AlgebraicGenerator, qq_generator
sage: _.<y> = QQ['y']
sage: x = polygen(QQbar)
sage: nf = NumberField(y^2 - y - 1, name='a', check=False)
sage: root = ANRoot(x^2 - x - 1, RIF(1, 2))
sage: gen = AlgebraicGenerator(nf, root)
sage: gen
Number Field in a with defining polynomial y^2 - y - 1 with a in [1.6180339887498946 .. 1.6180339887498950]
sage: gen.field()
Number Field in a with defining polynomial y^2 - y - 1
sage: gen.is_trivial()
False
sage: gen.union(qq_generator) is gen
True
sage: qq_generator.union(gen) is gen
True
sage: nf = NumberField(y^2 + 1, name='a', check=False)
sage: root = ANRoot(x^2 + 1, CIF(0, 1))
sage: x = AlgebraicGenerator(nf, root); x        
Number Field in a with defining polynomial y^2 + 1 with a in [1.0000000000000000 .. 1.0000000000000000]*I

Overrides: object.__init__

__reduce__(self)

source code 

Add customized pickling support.

EXAMPLES:
    sage: t = QQbar(sqrt(2)) + QQbar(sqrt(3))
    sage: t.exactify()
    sage: type(t._descr._generator)
    <class 'sage.rings.qqbar.AlgebraicGenerator'>
    sage: loads(dumps(t)) == t
    True

Overrides: object.__reduce__

__hash__(self)
(Hashing function)

source code 
hash(x)

Overrides: structure.sage_object.SageObject.__hash__
(inherited documentation)

is_trivial(self)

source code 

Returns true iff this is the trivial generator (alpha == 1), which
does not actually extend the rationals.

EXAMPLES:
    sage: from sage.rings.qqbar import qq_generator
    sage: qq_generator.is_trivial()
    True

union(self, other)

source code 

Given generators alpha and beta, alpha.union(beta) gives a generator
for the number field QQ[alpha][beta].

EXAMPLES:
    sage: from sage.rings.qqbar import ANRoot, AlgebraicGenerator, qq_generator
    sage: _.<y> = QQ['y']
    sage: x = polygen(QQbar)
    sage: nf2 = NumberField(y^2 - 2, name='a', check=False)
    sage: root2 = ANRoot(x^2 - 2, RIF(1, 2))
    sage: gen2 = AlgebraicGenerator(nf2, root2)
    sage: gen2
    Number Field in a with defining polynomial y^2 - 2 with a in [1.4142135623730949 .. 1.4142135623730952]
    sage: nf3 = NumberField(y^2 - 3, name='a', check=False)
    sage: root3 = ANRoot(x^2 - 3, RIF(1, 2))
    sage: gen3 = AlgebraicGenerator(nf3, root3)
    sage: gen3
    Number Field in a with defining polynomial y^2 - 3 with a in [1.7320508075688771 .. 1.7320508075688775]
    sage: gen2.union(qq_generator) is gen2
    True
    sage: qq_generator.union(gen3) is gen3
    True
    sage: gen2.union(gen3)
    Number Field in a with defining polynomial y^4 - 4*y^2 + 1 with a in [0.51763809020504147 .. 0.51763809020504159]

super_poly(self, super, checked=['4ti2-20061025', 'R-2.6.0', 'atlas-3.7.37', 'atlas-3.8.1', 'a...)

source code 

Given a generator gen and another generator super, where super
is the result of a tree of union() operations where one of the
leaves is gen, gen.super_poly(super) returns a polynomial
expressing the value of gen in terms of the value of super.
(Except that if gen is qq_generator, super_poly() always
returns None.)

EXAMPLES:
    sage: from sage.rings.qqbar import AlgebraicGenerator, ANRoot, qq_generator
    sage: _.<y> = QQ['y']
    sage: x = polygen(QQbar)
    sage: nf2 = NumberField(y^2 - 2, name='a', check=False)
    sage: root2 = ANRoot(x^2 - 2, RIF(1, 2))
    sage: gen2 = AlgebraicGenerator(nf2, root2)
    sage: gen2
    Number Field in a with defining polynomial y^2 - 2 with a in [1.4142135623730949 .. 1.4142135623730952]
    sage: nf3 = NumberField(y^2 - 3, name='a', check=False)
    sage: root3 = ANRoot(x^2 - 3, RIF(1, 2))
    sage: gen3 = AlgebraicGenerator(nf3, root3)
    sage: gen3
    Number Field in a with defining polynomial y^2 - 3 with a in [1.7320508075688771 .. 1.7320508075688775]
    sage: gen2_3 = gen2.union(gen3)
    sage: gen2_3
    Number Field in a with defining polynomial y^4 - 4*y^2 + 1 with a in [0.51763809020504147 .. 0.51763809020504159]
    sage: qq_generator.super_poly(gen2) is None
    True
    sage: gen2.super_poly(gen2_3)
    -a^3 + 3*a
    sage: gen3.super_poly(gen2_3)
    -a^2 + 2

__call__(self, elt)
(Call operator)

source code 

Takes an algebraic number which is represented as either a rational
or a number field element, and which is in a subfield of the
field generated by this generator.  Lifts the number into the
field of this generator, and returns either a Rational or a
NumberFieldElement depending on whether this is the trivial generator.

EXAMPLES:
    sage: from sage.rings.qqbar import ANRoot, AlgebraicGenerator, ANExtensionElement, ANRational
    sage: _.<y> = QQ['y']
    sage: x = polygen(QQbar)
    sage: nf2 = NumberField(y^2 - 2, name='a', check=False)
    sage: root2 = ANRoot(x^2 - 2, RIF(1, 2))
    sage: gen2 = AlgebraicGenerator(nf2, root2)
    sage: gen2
    Number Field in a with defining polynomial y^2 - 2 with a in [1.4142135623730949 .. 1.4142135623730952]
    sage: sqrt2 = ANExtensionElement(gen2, nf2.gen())
    sage: nf3 = NumberField(y^2 - 3, name='a', check=False)
    sage: root3 = ANRoot(x^2 - 3, RIF(1, 2))
    sage: gen3 = AlgebraicGenerator(nf3, root3)
    sage: gen3
    Number Field in a with defining polynomial y^2 - 3 with a in [1.7320508075688771 .. 1.7320508075688775]
    sage: sqrt3 = ANExtensionElement(gen3, nf3.gen())
    sage: gen2_3 = gen2.union(gen3)
    sage: gen2_3
    Number Field in a with defining polynomial y^4 - 4*y^2 + 1 with a in [0.51763809020504147 .. 0.51763809020504159]
    sage: gen2_3(sqrt2)
    -a^3 + 3*a
    sage: gen2_3(ANRational(1/7))
    1/7
    sage: gen2_3(sqrt3)
    -a^2 + 2