# HG changeset patch
# User William Stein <wstein@gmail.com>
# Date 1279638268 -7200
# Node ID e2e7a6415ab660aff68af20125275dd25cb95e5a
# Parent e122468eb71e63393f1d8a5ac09f97ab05023f35
[mq]: trac_9541-part2.patch
diff -r e122468eb71e -r e2e7a6415ab6 sage/rings/number_field/number_field.py
a
|
b
|
|
418 | 418 | sage: K.<a> = NumberField(x^3 + 17); type(a) |
419 | 419 | <type 'sage.rings.number_field.number_field_element.NumberFieldElement_absolute'> |
420 | 420 | sage: K.<a> = NumberField(x^3 + 17, implementation='ntl'); type(a) |
421 | | <type 'sage.rings.number_field.number_field_element.NumberFieldElement_absolute'> |
| 421 | <type 'sage.rings.number_field.number_field_element_ntl.NumberFieldElement_ntl_absolute'> |
422 | 422 | sage: K.<a> = NumberField(x^3 + 17, implementation='flint'); type(a) |
423 | 423 | <type 'sage.rings.number_field.number_field_element_flint.NumberFieldElement_flint'> |
424 | 424 | sage: K.<a> = NumberField(x^3 + 17, implementation='generic'); type(a) |
… |
… |
|
5557 | 5557 | |
5558 | 5558 | sage: phi = K.embeddings(L)[0] |
5559 | 5559 | sage: phi(K.0) |
5560 | | 1/120*a2^5 + 19/60*a2 |
| 5560 | -1/120*a2^5 - 19/60*a2 |
5561 | 5561 | sage: phi(K.0).minpoly() |
5562 | 5562 | x^4 - 2 |
5563 | 5563 | |
… |
… |
|
5659 | 5659 | Ring morphism: |
5660 | 5660 | From: Number Field in a with defining polynomial x^3 - 2 |
5661 | 5661 | To: Number Field in a1 with defining polynomial x^6 + 40*x^3 + 1372 |
5662 | | Defn: a |--> 1/84*a1^4 + 13/42*a1 |
| 5662 | Defn: a |--> -1/126*a1^4 + 8/63*a1 |
5663 | 5663 | sage: K.embeddings(L) is K.embeddings(L) |
5664 | 5664 | True |
5665 | 5665 | |
… |
… |
|
5672 | 5672 | Ring morphism: |
5673 | 5673 | From: Number Field in a with defining polynomial x^2 + 7 |
5674 | 5674 | To: Cyclotomic Field of order 7 and degree 6 |
5675 | | Defn: a |--> 2*zeta7^4 + 2*zeta7^2 + 2*zeta7 + 1, |
| 5675 | Defn: a |--> -2*zeta7^4 - 2*zeta7^2 - 2*zeta7 - 1, |
5676 | 5676 | Ring morphism: |
5677 | 5677 | From: Number Field in a with defining polynomial x^2 + 7 |
5678 | 5678 | To: Cyclotomic Field of order 7 and degree 6 |
5679 | | Defn: a |--> -2*zeta7^4 - 2*zeta7^2 - 2*zeta7 - 1 |
| 5679 | Defn: a |--> 2*zeta7^4 + 2*zeta7^2 + 2*zeta7 + 1 |
5680 | 5680 | ] |
5681 | 5681 | |
5682 | 5682 | We embed a cubic field in the complex numbers:: |
… |
… |
|
5977 | 5977 | sage: K.<a> = NumberField(x^4 + 2*x^2 + 2) |
5978 | 5978 | sage: K0 = K.subfields(2)[0][0]; K0 |
5979 | 5979 | Number Field in a0 with defining polynomial x^2 - 2*x + 2 |
5980 | | sage: rho, tau = K0.embeddings(K) |
| 5980 | sage: tau, rho = K0.embeddings(K) |
5981 | 5981 | sage: L0 = K.relativize(rho(K0.gen()), 'b'); L0 |
5982 | 5982 | Number Field in b0 with defining polynomial x^2 - b1 + 2 over its base field |
5983 | 5983 | sage: L1 = K.relativize(rho, 'b'); L1 |
… |
… |
|
7365 | 7365 | sage: K.<a> = NumberField(x^2 + 17, implementation='flint'); type(a) |
7366 | 7366 | <type 'sage.rings.number_field.number_field_element_flint.NumberFieldElement_flint'> |
7367 | 7367 | sage: K.<a> = NumberField(x^2 + 17, implementation='ntl'); type(a) |
7368 | | <type 'sage.rings.number_field.number_field_element.NumberFieldElement_absolute'> |
| 7368 | <type 'sage.rings.number_field.number_field_element_ntl.NumberFieldElement_ntl_absolute'> |
7369 | 7369 | """ |
7370 | 7370 | NumberField_absolute.__init__(self, polynomial, name=name, check=check, embedding=embedding, latex_name=latex_name) |
7371 | 7371 | if implementation == 'quadratic': |
diff -r e122468eb71e -r e2e7a6415ab6 sage/rings/number_field/number_field_element.pxd
a
|
b
|
|
18 | 18 | cdef object __pari |
19 | 19 | cdef object __matrix |
20 | 20 | cdef object __symbolic |
| 21 | cdef bint cmp_eq(left, right) |
21 | 22 | |
22 | 23 | |
23 | 24 | |
diff -r e122468eb71e -r e2e7a6415ab6 sage/rings/number_field/number_field_element.pyx
a
|
b
|
|
249 | 249 | |
250 | 250 | EXAMPLES:: |
251 | 251 | |
252 | | sage: k.<a> = NumberField(x^3 - 17*x^2 + 1) |
| 252 | sage: k.<a> = NumberField(x^3 - 17*x^2 + 1, implementation='ntl') |
253 | 253 | sage: t = a.__reduce__(); t |
254 | | (<built-in function __create__NumberFieldElement_version1>, (Number Field in a with defining polynomial x^3 - 17*x^2 + 1, <type 'sage.rings.number_field.number_field_element.NumberFieldElement_absolute'>, x)) |
| 254 | (<built-in function __create__NumberFieldElement_version1>, (Number Field in a with defining polynomial x^3 - 17*x^2 + 1, <type 'sage.rings.number_field.number_field_element_ntl.NumberFieldElement_ntl_absolute'>, x)) |
255 | 255 | sage: t[0](*t[1]) == a |
256 | 256 | True |
257 | 257 | """ |
… |
… |
|
629 | 629 | if n < 0 or n >= self.parent().relative_degree(): |
630 | 630 | raise IndexError, "index must be between 0 and the relative degree minus 1." |
631 | 631 | return self.vector()[n] |
632 | | |
| 632 | #################################################### |
| 633 | # Comparision |
| 634 | #################################################### |
| 635 | # First some boilerplate |
| 636 | def _richcmp_(left, right, int op): |
| 637 | if op == 2: return (<NumberFieldElement>left).cmp_eq(right) |
| 638 | elif op == 3: return not (<NumberFieldElement>left).cmp_eq(right) |
| 639 | return (<Element>left)._richcmp(right, op) |
| 640 | # Derived classes should overload both of the following for optimal efficiency. |
| 641 | cdef int _cmp_c_impl(left, sage.structure.element.Element right) except -2: |
| 642 | return cmp(left.polynomial(), right.polynomial()) |
| 643 | cdef bint cmp_eq(left, right): |
| 644 | return left._cmp_c_impl(right) == 0 |
| 645 | # Derived classes that implement __hash__ !!! MUST !!! copy the following two lines!!! |
633 | 646 | def __richcmp__(left, right, int op): |
634 | 647 | return (<Element>left)._richcmp(right, op) |
| 648 | #################################################### |
635 | 649 | |
636 | | cdef int _cmp_c_impl(left, sage.structure.element.Element right) except -2: |
637 | | raise NotImplementedError, "derived class must implement" |
638 | 650 | |
639 | 651 | def _random_element(self, num_bound=None, den_bound=None, distribution=None): |
640 | 652 | """ |
… |
… |
|
1886 | 1898 | sage: K.<a> = NumberField(x^4 + 1); L.<a2> = NumberField(x^2 + 1) |
1887 | 1899 | sage: a.matrix(L) |
1888 | 1900 | [ 0 1] |
1889 | | [a2 0] |
| 1901 | [-a2 0] |
1890 | 1902 | |
1891 | 1903 | Notice that if we compute all embeddings and choose a different |
1892 | 1904 | one, then the matrix is changed as it should be:: |
… |
… |
|
1894 | 1906 | sage: v = L.embeddings(K) |
1895 | 1907 | sage: a.matrix(v[1]) |
1896 | 1908 | [ 0 1] |
1897 | | [-a2 0] |
| 1909 | [a2 0] |
1898 | 1910 | |
1899 | 1911 | The norm is also changed:: |
1900 | 1912 | |
1901 | 1913 | sage: a.norm(v[1]) |
| 1914 | -a2 |
| 1915 | sage: a.norm(v[0]) |
1902 | 1916 | a2 |
1903 | | sage: a.norm(v[0]) |
1904 | | -a2 |
1905 | 1917 | |
1906 | 1918 | TESTS:: |
1907 | 1919 | |
… |
… |
|
3005 | 3017 | EXAMPLES:: |
3006 | 3018 | |
3007 | 3019 | sage: K.<a,b> = NumberField([x^3+5, x^2-7]) |
3008 | | sage: (a+b).coordinates_in_terms_of_powers() |
| 3020 | sage: C = (a+b).coordinates_in_terms_of_powers(); C |
| 3021 | Coordinate function that writes elements in terms of the powers of a + b |
3009 | 3022 | sage: C.alpha() |
3010 | 3023 | a + b |
3011 | 3024 | """ |
diff -r e122468eb71e -r e2e7a6415ab6 sage/rings/number_field/number_field_element_generic.pyx
a
|
b
|
|
23 | 23 | |
24 | 24 | cdef class NumberFieldElement_generic(NumberFieldElement): |
25 | 25 | cdef object _f |
| 26 | |
26 | 27 | """ |
27 | 28 | EXAMPLES:: |
28 | 29 | |
29 | | sage: from sage.rings.number_field.number_field_element_generic import NumberFieldElement_generic |
30 | | sage: K.<a> = NumberField(x^3-2); b = a^2 - 3; b |
| 30 | sage: K.<a> = NumberField(x^3 - 2, implementation='generic'); b = a^2 - 3; b |
31 | 31 | a^2 - 3 |
32 | | sage: b.parent() |
33 | | Number Field in a with defining polynomial x^3 - 2 |
| 32 | sage: type(b) |
| 33 | <type 'sage.rings.number_field.number_field_element_generic.NumberFieldElement_generic'> |
34 | 34 | """ |
35 | 35 | cpdef bint is_absolute(self): |
36 | 36 | """ |
| 37 | Return true if this is an element of an absolute extension. |
| 38 | |
37 | 39 | EXAMPLES:: |
38 | 40 | |
39 | | This must be defined in the derived class. |
40 | | |
41 | | sage: ? |
| 41 | sage: K.<a> = NumberField(x^3-2, implementation='generic'); type(a) |
| 42 | <type 'sage.rings.number_field.number_field_element_generic.NumberFieldElement_generic'> |
| 43 | sage: a.is_absolute() |
| 44 | True |
42 | 45 | """ |
43 | 46 | return self._parent.is_absolute() |
44 | 47 | |
45 | 48 | def __init__(self, parent, f): |
| 49 | """ |
| 50 | INPUT: |
| 51 | - ``parent`` -- number field |
| 52 | - ``f`` -- element |
| 53 | |
| 54 | EXAMPLES:: |
| 55 | |
| 56 | sage: K.<abc> = NumberField(x^7-2/3*x+1, implementation='generic'); abc |
| 57 | abc |
| 58 | sage: type(abc) |
| 59 | <type 'sage.rings.number_field.number_field_element_generic.NumberFieldElement_generic'> |
| 60 | """ |
46 | 61 | self._parent = parent |
47 | 62 | self._f = parent.polynomial_ring()(f) |
48 | 63 | |
diff -r e122468eb71e -r e2e7a6415ab6 sage/rings/number_field/number_field_element_ntl.pyx
a
|
b
|
|
2 | 2 | Number Field Elements |
3 | 3 | |
4 | 4 | AUTHORS: |
5 | | |
6 | | - William Stein: version before it got Cython'd |
7 | | |
8 | | - Joel B. Mohler (2007-03-09): First reimplementation in Cython |
9 | | |
10 | | - William Stein (2007-09-04): add doctests |
11 | | |
12 | | - Robert Bradshaw (2007-09-15): specialized classes for relative and |
13 | | absolute elements |
14 | | |
15 | | - John Cremona (2009-05-15): added support for local and global |
16 | | logarithmic heights. |
17 | | |
| 5 | - William Stein: version before it got Cython'd |
| 6 | - Joel B. Mohler (2007-03-09): First reimplementation in Cython |
| 7 | - William Stein (2007-09-04): add doctests |
| 8 | - Robert Bradshaw (2007-09-15): specialized classes for relative and |
| 9 | absolute elements |
| 10 | - John Cremona (2009-05-15): added support for local and global |
| 11 | logarithmic heights. |
| 12 | - William Stein (2010-07): major refactoring. |
18 | 13 | """ |
19 | 14 | |
20 | 15 | # TODO -- relative extensions need to be completely rewritten, so one |
… |
… |
|
28 | 23 | # Relative elements need to be a derived class or something. This is |
29 | 24 | # terrible as it is now. |
30 | 25 | |
31 | | #***************************************************************************** |
| 26 | ############################################################################### |
32 | 27 | # Copyright (C) 2004, 2007 William Stein <wstein@gmail.com> |
33 | 28 | # |
34 | 29 | # Distributed under the terms of the GNU General Public License (GPL) |
… |
… |
|
41 | 36 | # The full text of the GPL is available at: |
42 | 37 | # |
43 | 38 | # http://www.gnu.org/licenses/ |
44 | | #***************************************************************************** |
| 39 | ############################################################################### |
45 | 40 | |
46 | 41 | import operator |
47 | 42 | |
… |
… |
|
389 | 384 | ZZX_rem(x.__numerator, result, x.__fld_numerator.x) |
390 | 385 | return x |
391 | 386 | |
| 387 | |
392 | 388 | cdef int _cmp_c_impl(left, sage.structure.element.Element right) except -2: |
393 | 389 | """ |
394 | 390 | EXAMPLES:: |
395 | 391 | |
396 | | sage: ? |
| 392 | sage: K.<a> = NumberField(x^7-2/3*x+1, implementation='ntl') |
| 393 | sage: cmp(a, a+5) # indirect doctest |
| 394 | -1 |
| 395 | sage: cmp(a+5, a) |
| 396 | 1 |
| 397 | """ |
| 398 | return cmp(left.polynomial(), right.polynomial()) |
| 399 | |
| 400 | cdef bint cmp_eq(left, right): |
| 401 | """ |
| 402 | EXAMPLES:: |
| 403 | |
| 404 | sage: K.<a> = NumberField(x^7-2/3*x+1, implementation='ntl') |
| 405 | sage: a == a # indirect doctest |
| 406 | True |
| 407 | sage: a != a |
| 408 | False |
397 | 409 | """ |
398 | 410 | cdef NumberFieldElement_ntl _right = right |
399 | | return not (ZZX_equal(left.__numerator, _right.__numerator) and ZZ_equal(left.__denominator, _right.__denominator)) |
| 411 | return (ZZX_equal(left.__numerator, _right.__numerator) and |
| 412 | ZZ_equal(left.__denominator, _right.__denominator)) |
400 | 413 | |
401 | 414 | cdef void _randomize(self, num_bound, den_bound, distribution): |
402 | 415 | cdef int i |
… |
… |
|
734 | 747 | to this number field element. |
735 | 748 | |
736 | 749 | OUTPUT: |
737 | | |
738 | | - a list whose length corresponding to the degree of this |
739 | | element written in terms of a generator. |
| 750 | - a list whose length corresponding to the degree of this |
| 751 | element written in terms of a generator. |
740 | 752 | |
741 | 753 | EXAMPLES:: |
742 | 754 | |
743 | | sage: ?? |
744 | | |
| 755 | sage: K.<a> = NumberField(x^7-2/3*x+1, implementation='ntl'); (a^3 - 7/8*a + 5)._coefficients() |
| 756 | [5, -7/8, 0, 1] |
| 757 | sage: (a^5 - 7/8*a + 5)._coefficients() |
| 758 | [5, -7/8, 0, 0, 0, 1] |
745 | 759 | """ |
746 | 760 | coeffs = [] |
747 | 761 | cdef Integer den = (<IntegerRing_class>ZZ)._coerce_ZZ(&self.__denominator) |
… |
… |
|
784 | 798 | """ |
785 | 799 | EXAMPLES:: |
786 | 800 | |
787 | | sage: ? |
| 801 | sage: K.<a> = NumberField(x^7-2*x+5, implementation='ntl') |
| 802 | sage: (a+7/3).is_rational() |
| 803 | False |
| 804 | sage: K(7/3).is_rational() |
| 805 | True |
788 | 806 | """ |
789 | 807 | return ZZX_deg(self.__numerator) == 0 |
790 | 808 | |
… |
… |
|
794 | 812 | """ |
795 | 813 | EXAMPLES:: |
796 | 814 | |
797 | | sage: ? |
| 815 | sage: K.<a> = NumberField(x^7-2*x+5, implementation='ntl'); (a+5).is_absolute() |
| 816 | True |
798 | 817 | """ |
799 | 818 | return True |
800 | 819 | |
… |
… |
|
810 | 829 | """ |
811 | 830 | EXAMPLES:: |
812 | 831 | |
813 | | sage: ? |
| 832 | sage: K.<a,b> = NumberField([x^7-2*x+5,x^2+5], implementation='ntl'); (a+b).is_absolute() |
| 833 | False |
814 | 834 | """ |
815 | 835 | return False |
816 | 836 | |
… |
… |
|
845 | 865 | """ |
846 | 866 | EXAMPLES:: |
847 | 867 | |
848 | | sage: ? |
| 868 | sage: b = NumberField(x^7-2*x+5, names='alpha', implementation='ntl').maximal_order().1; b |
| 869 | alpha |
| 870 | sage: b.is_order_element() |
| 871 | True |
| 872 | sage: (1/b).is_order_element() |
| 873 | False |
849 | 874 | """ |
850 | 875 | return True |
851 | 876 | |
… |
… |
|
880 | 905 | """ |
881 | 906 | EXAMPLES:: |
882 | 907 | |
883 | | sage: ? |
| 908 | sage: b = NumberField(x^7-2*x+5, names='alpha', implementation='ntl').maximal_order().1; b |
| 909 | alpha |
| 910 | sage: b.number_field() |
| 911 | Number Field in alpha with defining polynomial x^7 - 2*x + 5 |
884 | 912 | """ |
885 | 913 | return self._number_field |
886 | 914 | |
… |
… |
|
969 | 997 | sage: c = O.1; c |
970 | 998 | (-2*b^2 - 2)*a - 2*b^2 - b |
971 | 999 | sage: type(c) |
972 | | <type 'sage.rings.number_field.number_field_element.OrderElement_relative'> |
| 1000 | <type 'sage.rings.number_field.number_field_element_ntl.OrderElement_ntl_relative'> |
973 | 1001 | """ |
974 | 1002 | cpdef bint is_order_element(self): |
975 | 1003 | """ |
976 | 1004 | EXAMPLES:: |
977 | 1005 | |
978 | | sage: ? |
| 1006 | sage: b = NumberField([x^2-2*x+5,x^3+17], names='alpha', implementation='ntl').maximal_order().1; b |
| 1007 | (1/3*alpha1^2 - 50/3*alpha1 + 1451/6)*alpha0 - 211/3*alpha1^2 - 1/3*alpha1 - 3131/6 |
| 1008 | sage: b.is_order_element() |
| 1009 | True |
979 | 1010 | """ |
980 | 1011 | return True |
981 | 1012 | |
982 | 1013 | def __init__(self, order, f): |
| 1014 | """ |
| 1015 | EXAMPLES:: |
| 1016 | |
| 1017 | sage: b = NumberField([x^2+1, x^2+3], names='alpha', implementation='ntl').maximal_order().1; type(b) |
| 1018 | <type 'sage.rings.number_field.number_field_element_ntl.OrderElement_ntl_relative'> |
| 1019 | """ |
983 | 1020 | K = order.number_field() |
984 | 1021 | NumberFieldElement_ntl_relative.__init__(self, K, f) |
985 | 1022 | (<Element>self)._parent = order |
diff -r e122468eb71e -r e2e7a6415ab6 sage/rings/number_field/number_field_element_quadratic.pyx
a
|
b
|
|
42 | 42 | |
43 | 43 | import number_field |
44 | 44 | |
45 | | # TODO: this doesn't belong here, but robert thinks it would be nice |
46 | | # to have globally available.... |
47 | | # |
48 | | # cdef mpz_to_str(mpz_t z): |
49 | | # cdef Integer zz = PY_NEW(Integer) |
50 | | # mpz_set(zz.value, z) |
51 | | # return str(zz) |
52 | | |
53 | 45 | |
54 | 46 | def __make_NumberFieldElement_quadratic0(parent, a, b, denom): |
55 | 47 | """ |
… |
… |
|
870 | 862 | """ |
871 | 863 | return hash(self.polynomial()) |
872 | 864 | |
873 | | def __richcmp__(left, right, int op): |
| 865 | def __richcmp__(left, right, int op): # must be here since we implement __hash__. |
874 | 866 | return (<Element>left)._richcmp(right, op) |
875 | | |
876 | | cdef int _cmp_c_impl(self, Element _right) except -2: |
| 867 | |
| 868 | cdef bint cmp_eq(left, right): |
877 | 869 | """ |
878 | 870 | EXAMPLES: |
879 | 871 | sage: K.<a> = NumberField(x^2+163) |
880 | | sage: K(1/2)==1/2 |
| 872 | sage: K(1/2)==1/2 # indirect doctest |
881 | 873 | True |
882 | 874 | sage: a == 1/2 |
883 | 875 | False |
884 | 876 | sage: 2+a == a+2 |
885 | 877 | True |
886 | 878 | """ |
887 | | cdef NumberFieldElement_quadratic right = _right |
888 | | return not mpz_cmp(self.a, right.a)==0 \ |
889 | | or not mpz_cmp(self.b, right.b)==0 \ |
890 | | or not mpz_cmp(self.denom, right.denom) == 0 |
| 879 | cdef NumberFieldElement_quadratic _right = right |
| 880 | return (mpz_cmp(left.a, _right.a) == 0 and mpz_cmp(left.b, _right.b) == 0 and |
| 881 | mpz_cmp(left.denom, _right.denom) == 0) |
891 | 882 | |
892 | 883 | |
893 | 884 | def __nonzero__(self): |
… |
… |
|
1144 | 1135 | |
1145 | 1136 | cpdef bint is_rational(self): |
1146 | 1137 | """ |
| 1138 | Return True if self lies in the rational numbers. |
| 1139 | |
1147 | 1140 | EXAMPLES:: |
1148 | 1141 | |
1149 | | sage: ? |
| 1142 | sage: K.<a> = NumberField(x^2+x+41); a.is_rational() |
| 1143 | False |
| 1144 | sage: K(2/3).is_rational() |
| 1145 | True |
1150 | 1146 | """ |
1151 | 1147 | return mpz_cmp_ui(self.b, 0) == 0 |
1152 | 1148 | |
… |
… |
|
1335 | 1331 | """ |
1336 | 1332 | EXAMPLES:: |
1337 | 1333 | |
1338 | | sage: ? |
| 1334 | sage: OK.<y> = EquationOrder(x^2 + 5); y.is_order_element() |
| 1335 | True |
| 1336 | sage: (1/y).is_order_element() |
| 1337 | False |
1339 | 1338 | """ |
1340 | 1339 | return True |
1341 | 1340 | |
… |
… |
|
1432 | 1431 | """ |
1433 | 1432 | EXAMPLES:: |
1434 | 1433 | |
1435 | | sage: ? |
| 1434 | sage: OK.<y> = EquationOrder(x^2 + 5); type(y) |
| 1435 | <type 'sage.rings.number_field.number_field_element_quadratic.OrderElement_quadratic'> |
| 1436 | sage: y.number_field() |
| 1437 | Number Field in y with defining polynomial x^2 + 5 |
1436 | 1438 | """ |
1437 | 1439 | # So few functions actually use self.number_field() for quadratic elements, so |
1438 | 1440 | # it is better *not* to return a cached value (since the call to _parent.number_field()) |
diff -r e122468eb71e -r e2e7a6415ab6 sage/rings/number_field/number_field_ideal_rel.py
a
|
b
|
|
392 | 392 | |
393 | 393 | The choice of embedding of quadratic field into quartic field matters:: |
394 | 394 | |
395 | | sage: rho, tau = K0.embeddings(K) |
| 395 | sage: tau, rho = K0.embeddings(K) |
396 | 396 | sage: L1 = K.relativize(rho, 'b') |
397 | 397 | sage: L2 = K.relativize(tau, 'b') |
398 | 398 | sage: L1_into_K, K_into_L1 = L1.structure() |
diff -r e122468eb71e -r e2e7a6415ab6 sage/rings/number_field/todo.txt
a
|
b
|
|
18 | 18 | [x] delete redundant order functions... |
19 | 19 | [x] move is_OrderElement |
20 | 20 | [x] test |
| 21 | [x] fill in all the sage: doctests, so all tests pass again |
21 | 22 | |
22 | | [ ] fill in all the sage: doctests, so all tests pass again |
| 23 | [ ] doctest existing code -- make ntl file use implementation='ntl' everywhere. |
| 24 | |
| 25 | [ ] generic elements |
23 | 26 | [ ] libsingular elements |
24 | 27 | [ ] flint elements |
25 | 28 | |
| 29 | [ ] make default implementation computation be centralized? |
| 30 | |
26 | 31 | [ ] fix order.py -- it explicitly references ntl but must not. |
27 | 32 | [ ] rewrite order elements to use implementation, e.g., this line in order.py: |
28 | 33 | #TODO: fix this |
diff -r e122468eb71e -r e2e7a6415ab6 sage/rings/number_field/totallyreal_rel.py
a
|
b
|
|
63 | 63 | |
64 | 64 | sage: v = sage.rings.number_field.totallyreal_rel.integral_elements_in_box(K, C) |
65 | 65 | sage: sorted(v) |
66 | | [-alpha + 3, -alpha + 2, 5, 4, 3, 2, 1, 0, alpha + 6, alpha + 5, alpha + 4, alpha + 3, alpha + 2, 2*alpha + 7, 2*alpha + 6, 2*alpha + 5, 2*alpha + 4, 2*alpha + 3, 3*alpha + 5] |
| 66 | [0, 1, 2, 3, 4, 5, -alpha + 2, -alpha + 3, alpha + 2, alpha + 3, alpha + 4, alpha + 5, alpha + 6, 2*alpha + 3, 2*alpha + 4, 2*alpha + 5, 2*alpha + 6, 2*alpha + 7, 3*alpha + 5] |
67 | 67 | |
68 | 68 | |
69 | 69 | A cubic field:: |
… |
… |
|
77 | 77 | Note that the output is platform dependent (sometimes a 5 is listed below, and |
78 | 78 | sometimes it isn't):: |
79 | 79 | |
80 | | sage: sorted(v) |
81 | | [-1/2*a + 2, 1/4*a^2 + 1/2*a, 0, 1, 2, 3, 4,...-1/4*a^2 - 1/2*a + 5, 1/2*a + 3, -1/4*a^2 + 5] |
| 80 | sage: sorted(v) |
| 81 | [0, 1, 2, 3, 4, 5, -1/2*a + 2, 1/2*a + 3, -1/4*a^2 - 1/2*a + 5, -1/4*a^2 + 5, 1/4*a^2 + 1/2*a] |
82 | 82 | |
83 | 83 | """ |
84 | 84 | d = K.degree() |