Changeset 8382:63030fe75bbc


Ignore:
Timestamp:
12/11/07 18:31:36 (6 years ago)
Author:
jvoight@…
Branch:
default
Parents:
8381:8af290b3f48d (diff), 7543:7110a20969c8 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merged.

Files:
1 deleted
6 edited

Legend:

Unmodified
Added
Removed
  • .hgtags

    r8380 r8382  
    151151d36d439bc32c0006b1ba3b1e13e3272ab445f403 2.8.14.rc3 
    1521527db04fcb81ab2504e1a76648c2fcd01b30418b28 2.8.14 
     15310ffb2e25cf62efa95179fb7f097904ed1af4a86 2.8.15.alpha0 
     1541a7f1fcb0a5c8221c4b2c45ac431e4aa85bbe750 2.8.15.alpha1 
     15592dacf17ba7774d65157131d4ce0e5265ea8f8fb 2.8.15.alpha2 
     156f45713981d79e0b74adbf002011043f16d8982f3 2.8.15.rc0 
     157612d5a72a9e1a9c4eb90a0c746da5a358882b5a0 2.9.15.rc1 
     158f70aef4f56461965fbbc68b0945a07f38b3ecf4c 2.8.15 
  • sage/combinat/combinat.py

    r7485 r8382  
    193193 
    194194from sage.interfaces.all import gap, maxima 
    195 from sage.rings.all import QQ, RR, ZZ, RealField 
     195from sage.rings.all import QQ, ZZ 
    196196from sage.rings.arith import binomial 
    197197from sage.misc.sage_eval import sage_eval 
     
    25362536    """ 
    25372537    return sage_eval(maxima.eval("bernpoly(x,%s)"%n), {'x':x}) 
    2538  
    2539  
    2540 def rencontres_number(n, k): 
    2541     r""" 
    2542     Returns the Rencontres number D(n,k), the number of permutations of 
    2543     {1, 2,..., n} with k fixed points. 
    2544  
    2545     EXAMPLES: 
    2546     Because 312 and 231 are the two permutations of {1, 2, 3} with 0 
    2547     fixed points, we have: 
    2548      
    2549         sage: rencontres_number(3,0) 
    2550         2 
    2551  
    2552     More examples: 
    2553         sage: rencontres_number(6,1) 
    2554         264 
    2555            
    2556  
    2557     REFERENCES: 
    2558         http://en.wikipedia.org/wiki/Rencontres_number 
    2559          
    2560         Sequence A008290 in the OEIS. 
    2561  
    2562     AUTHORS: 
    2563         -- Dan Drake, 2007-11-27: post to sage-devel 
    2564         -- William Stein, 2007-11-27: referee and clean up for inclusion in sage 
    2565     """ 
    2566     F = factorial(n - k) 
    2567     # Sufficient precision needed to guarantee the correct result (this is overkill somewhat) 
    2568     R = RealField(10*F.bits() + 53) 
    2569     e = R(1).exp() 
    2570     if (n - k) % 2 == 0: 
    2571         return binomial(n, k) * (F/e).ceil() 
    2572     else: 
    2573         return binomial(n, k) * (F/e).floor() 
    2574  
  • sage/rings/number_field/number_field_element.pyx

    r7440 r8382  
    601601        """ 
    602602        return self.number_field().complex_embeddings(prec)[i](self) 
     603 
     604    def is_totally_positive(self): 
     605        """ 
     606        Returns True if self is positive for all real embeddings of  
     607        its parent number field.  We do nothing at complex places, 
     608        so e.g. any element of a totally complex number field will return 
     609        True. 
     610 
     611        EXAMPLES: 
     612            sage: F.<b> = NumberField(x^3-3*x-1) 
     613            sage: b.is_totally_positive() 
     614            False 
     615            sage: (b^2).is_totally_positive() 
     616            True 
     617        """ 
     618        for v in self.number_field().real_embeddings(): 
     619            if v(self) <= 0: 
     620                return False 
     621        return True     
    603622 
    604623    def is_square(self, root=False): 
  • sage/rings/number_field/number_field_element.pyx

    r8380 r8382  
    126126        x = <NumberFieldElement>PY_NEW_SAME_TYPE(self) 
    127127        x._parent = self._parent 
     128        x.__fld_numerator = self.__fld_numerator 
     129        x.__fld_denominator = self.__fld_denominator 
    128130        return x 
    129131 
     
    176178        """ 
    177179        sage.rings.field_element.FieldElement.__init__(self, parent) 
     180        if isinstance(parent, number_field.NumberField_relative): 
     181            self.__fld_numerator, self.__fld_denominator = parent.absolute_polynomial_ntl() 
     182        else: 
     183            self.__fld_numerator, self.__fld_denominator = parent.polynomial_ntl() 
    178184 
    179185        cdef ZZ_c coeff 
     
    277283        cdef NumberFieldElement x = <NumberFieldElement>PY_NEW_SAME_TYPE(self) 
    278284        x._parent = <ParentWithBase>new_parent 
     285        x.__fld_numerator, x.__fld_denominator = new_parent.polynomial_ntl() 
    279286        x.__denominator = self.__denominator 
    280287        cdef ZZX_c result 
     
    757764        cdef ZZX_c temp 
    758765        cdef ZZ_c temp1 
    759         cdef ZZ_c parent_den 
    760         cdef ZZX_c parent_num 
    761         self._parent_poly_c_( &parent_num, &parent_den ) 
    762766        x = self._new() 
    763767        _sig_on 
    764768        # MulMod doesn't handle non-monic polynomials. 
    765769        # Therefore, we handle the non-monic case entirely separately. 
    766         if ZZX_is_monic( &parent_num ): 
     770        if ZZX_is_monic( &self.__fld_numerator.x ): 
    767771            ZZ_mul(x.__denominator, self.__denominator, _right.__denominator) 
    768             ZZX_MulMod(x.__numerator, self.__numerator, _right.__numerator, parent_num) 
     772            ZZX_MulMod(x.__numerator, self.__numerator, _right.__numerator, self.__fld_numerator.x) 
    769773        else: 
    770774            ZZ_mul(x.__denominator, self.__denominator, _right.__denominator) 
    771775            ZZX_mul(x.__numerator, self.__numerator, _right.__numerator) 
    772             if ZZX_deg(x.__numerator) >= ZZX_deg(parent_num): 
    773                 ZZX_mul_ZZ( x.__numerator, x.__numerator, parent_den ) 
    774                 ZZX_mul_ZZ( temp, parent_num, x.__denominator ) 
    775                 ZZ_power(temp1,ZZX_LeadCoeff(temp),ZZX_deg(x.__numerator)-ZZX_deg(parent_num)+1) 
     776            if ZZX_deg(x.__numerator) >= ZZX_deg(self.__fld_numerator.x): 
     777                ZZX_mul_ZZ( x.__numerator, x.__numerator, self.__fld_denominator.x ) 
     778                ZZX_mul_ZZ( temp, self.__fld_numerator.x, x.__denominator ) 
     779                ZZ_power(temp1,ZZX_LeadCoeff(temp),ZZX_deg(x.__numerator)-ZZX_deg(self.__fld_numerator.x)+1) 
    776780                ZZX_PseudoRem(x.__numerator, x.__numerator, temp) 
    777                 ZZ_mul(x.__denominator, x.__denominator, parent_den) 
     781                ZZ_mul(x.__denominator, x.__denominator, self.__fld_denominator.x) 
    778782                ZZ_mul(x.__denominator, x.__denominator, temp1) 
    779783        _sig_off 
     
    815819        cdef ZZX_c inv_num 
    816820        cdef ZZ_c inv_den 
    817         cdef ZZ_c parent_den 
    818         cdef ZZX_c parent_num 
    819821        cdef ZZX_c temp 
    820822        cdef ZZ_c temp1 
    821823        if not _right: 
    822824            raise ZeroDivisionError, "Number field element division by zero" 
    823         self._parent_poly_c_( &parent_num, &parent_den ) 
    824825        x = self._new() 
    825826        _sig_on 
    826827        _right._invert_c_(&inv_num, &inv_den) 
    827         if ZZX_is_monic( &parent_num ): 
     828        if ZZX_is_monic( &self.__fld_numerator.x ): 
    828829            ZZ_mul(x.__denominator, self.__denominator, inv_den) 
    829             ZZX_MulMod(x.__numerator, self.__numerator, inv_num, parent_num) 
     830            ZZX_MulMod(x.__numerator, self.__numerator, inv_num, self.__fld_numerator.x) 
    830831        else: 
    831832            ZZ_mul(x.__denominator, self.__denominator, inv_den) 
    832833            ZZX_mul(x.__numerator, self.__numerator, inv_num) 
    833             if ZZX_deg(x.__numerator) >= ZZX_deg(parent_num): 
    834                 ZZX_mul_ZZ( x.__numerator, x.__numerator, parent_den ) 
    835                 ZZX_mul_ZZ( temp, parent_num, x.__denominator ) 
    836                 ZZ_power(temp1,ZZX_LeadCoeff(temp),ZZX_deg(x.__numerator)-ZZX_deg(parent_num)+1) 
     834            if ZZX_deg(x.__numerator) >= ZZX_deg(self.__fld_numerator.x): 
     835                ZZX_mul_ZZ( x.__numerator, x.__numerator, self.__fld_denominator.x ) 
     836                ZZX_mul_ZZ( temp, self.__fld_numerator.x, x.__denominator ) 
     837                ZZ_power(temp1,ZZX_LeadCoeff(temp),ZZX_deg(x.__numerator)-ZZX_deg(self.__fld_numerator.x)+1) 
    837838                ZZX_PseudoRem(x.__numerator, x.__numerator, temp) 
    838                 ZZ_mul(x.__denominator, x.__denominator, parent_den) 
     839                ZZ_mul(x.__denominator, x.__denominator, self.__fld_denominator.x) 
    839840                ZZ_mul(x.__denominator, x.__denominator, temp1) 
    840841        x._reduce_c_() 
     
    942943 
    943944    cdef void _parent_poly_c_(self, ZZX_c *num, ZZ_c *den): 
     945        """ 
     946        I believe this function should be removed since I've put the pointer  
     947        __fld_numerator and __fld_denominator in the element class.  I'm not  
     948        going to remove it quite yet, but feel free to remove it if you agree  
     949        with me that it should go. 
     950        """ 
    944951        raise NotImplementedError, "NumberFieldElement subclasses must override _parent_poly_c_()" 
    945952 
     
    958965            Check __invert__ for doc-tests that rely on this functionality. 
    959966        """ 
    960         cdef ZZ_c parent_den 
    961         cdef ZZX_c parent_num 
    962         self._parent_poly_c_( &parent_num, &parent_den ) 
    963  
    964967        cdef ZZX_c t # unneeded except to be there 
    965968        cdef ZZX_c a, b 
    966         ZZX_mul_ZZ( a, self.__numerator, parent_den ) 
    967         ZZX_mul_ZZ( b, parent_num, self.__denominator ) 
     969        ZZX_mul_ZZ( a, self.__numerator, self.__fld_denominator.x ) 
     970        ZZX_mul_ZZ( b, self.__fld_numerator.x, self.__denominator ) 
    968971        ZZX_XGCD( den[0], num[0],  t, a, b, 1 ) 
    969         ZZX_mul_ZZ( num[0], num[0], parent_den ) 
     972        ZZX_mul_ZZ( num[0], num[0], self.__fld_denominator.x ) 
    970973        ZZX_mul_ZZ( num[0], num[0], self.__denominator ) 
    971974 
     
    16481651         
    16491652    cdef void _parent_poly_c_(self, ZZX_c *num, ZZ_c *den): 
     1653        """ 
     1654        I believe this function should be removed since I've put the pointer  
     1655        __fld_numerator and __fld_denominator in the element class.  I'm not  
     1656        going to remove it quite yet, but feel free to remove it if you agree  
     1657        with me that it should go. 
     1658        """ 
    16501659        cdef ntl_ZZX _num 
    16511660        cdef ntl_ZZ _den 
     
    17621771 
    17631772    cdef void _parent_poly_c_(self, ZZX_c *num, ZZ_c *den): 
     1773        """ 
     1774        I believe this function should be removed since I've put the pointer  
     1775        __fld_numerator and __fld_denominator in the element class.  I'm not  
     1776        going to remove it quite yet, but feel free to remove it if you agree  
     1777        with me that it should go. 
     1778        """ 
    17641779        f = self.number_field().absolute_polynomial() 
    17651780        _ntl_poly(f, num, den) 
     
    18591874        """ 
    18601875        cdef OrderElement_absolute x 
    1861         x = <NumberFieldElement>PY_NEW_SAME_TYPE(self) 
     1876        x = <OrderElement_absolute>PY_NEW_SAME_TYPE(self) 
    18621877        x._parent = self._parent 
    18631878        x._number_field = self._parent.number_field() 
     1879        x.__fld_numerator = self.__fld_numerator 
     1880        x.__fld_denominator = self.__fld_denominator 
    18641881        return x 
    18651882 
     
    19021919        """ 
    19031920        cdef OrderElement_relative x 
    1904         x = <NumberFieldElement>PY_NEW_SAME_TYPE(self) 
     1921        x = <OrderElement_relative>PY_NEW_SAME_TYPE(self) 
    19051922        x._parent = self._parent 
    19061923        x._number_field = self._parent.number_field() 
     1924        x.__fld_numerator = self.__fld_numerator 
     1925        x.__fld_denominator = self.__fld_denominator 
    19071926        return x 
    19081927 
  • setup.py

    r7472 r8382  
    778778              sources = ['sage/rings/number_field/number_field_base.pyx']), \ 
    779779 
     780    Extension('sage.rings.number_field.totallyreal_data', 
     781              ['sage/rings/number_field/totallyreal_data.pyx'], 
     782              libraries = ['gmp']), \ 
     783 
    780784    Extension('sage.rings.morphism', 
    781               sources = ['sage/rings/morphism.pyx']), 
     785              sources = ['sage/rings/morphism.pyx']), \ 
    782786 
    783787    Extension('sage.structure.wrapper_parent', 
     
    12091213 
    12101214      data_files = [('dsage/web/static',                        
    1211                      ['sage/dsage/web/static/dsage_web.css', 
    1212                       'sage/dsage/web/static/dsage_web.js', 
    1213                       'sage/dsage/web/static/jquery-latest.js', 
    1214                       'sage/dsage/web/static/jquery.tablesorter.pack.js', 
    1215                       'sage/dsage/web/static/index.html'])], 
     1215                    ['sage/dsage/web/static/dsage_web.css', 
     1216                     'sage/dsage/web/static/dsage_web.js', 
     1217                     'sage/dsage/web/static/jquery-latest.js', 
     1218                     'sage/dsage/web/static/jquery.tablesorter.pack.js', 
     1219                     'sage/dsage/web/static/jquery.history.js', 
     1220                     'sage/dsage/web/static/asc.gif', 
     1221                     'sage/dsage/web/static/desc.gif', 
     1222                     'sage/dsage/web/static/bg.gif', 
     1223                     'sage/dsage/README.html']), 
     1224                    ('dsage/web/', 
     1225                    ['sage/dsage/web/index.html'])], 
    12161226       
    12171227      ext_modules = ext_modules, 
  • setup.py

    r8381 r8382  
    287287libsingular = Extension('sage.libs.singular.singular', 
    288288                        sources = ['sage/libs/singular/singular.pyx'], 
    289                         libraries = ['gmp', 'm', 'readline', 'singular', 'singfac', 'singcf', 'omalloc', 'givaro', 'gmpxx'], 
     289                        libraries = ['m', 'readline', 'singular', 'singfac', 'singcf', 'omalloc', 'givaro', 'gmpxx', 'gmp'], 
    290290                        language="c++", 
    291291                        include_dirs=[SAGE_ROOT +'/local/include/singular'] 
     
    363363matrix_mpolynomial_dense = Extension('sage.matrix.matrix_mpolynomial_dense', 
    364364                                     ['sage/matrix/matrix_mpolynomial_dense.pyx'], 
    365                                      libraries = ['gmp', 'm', 'readline', 'singular', 'singcf', 'singfac', 'omalloc', 'givaro', 'gmpxx'], 
     365                                     libraries = ['m', 'readline', 'singular', 'singcf', 'singfac', 'omalloc', 'givaro', 'gmpxx', 'gmp'], 
    366366                                     language="c++", 
    367367                                     include_dirs=[SAGE_ROOT +'/local/include/singular']) 
     
    616616    Extension('sage.rings.polynomial.multi_polynomial_libsingular', 
    617617              sources = ['sage/rings/polynomial/multi_polynomial_libsingular.pyx'], 
    618               libraries = ['gmp', 'm', 'readline', 'singular', 'singcf', 'singfac', 'omalloc', 'givaro', 'gmpxx'], 
     618              libraries = ['m', 'readline', 'singular', 'singcf', 'singfac', 'omalloc', 'givaro', 'gmpxx', 'gmp'], 
    619619              language="c++", 
    620620              include_dirs=[SAGE_ROOT +'/local/include/singular']), \ 
     
    622622    Extension('sage.rings.polynomial.multi_polynomial_ideal_libsingular', 
    623623              sources = ['sage/rings/polynomial/multi_polynomial_ideal_libsingular.pyx'], 
    624               libraries = ['gmp', 'm', 'readline', 'singular', 'singcf', 'singfac', 'omalloc', 'givaro', 'gmpxx'], 
     624              libraries = ['m', 'readline', 'singular', 'singcf', 'singfac', 'omalloc', 'givaro', 'gmpxx', 'gmp'], 
    625625              language="c++", 
    626626              include_dirs=[SAGE_ROOT +'/local/include/singular']), \ 
     
    659659    Extension('sage.rings.real_mpfi', 
    660660              sources = ['sage/rings/real_mpfi.pyx'], 
     661              libraries = ['mpfi', 'mpfr', 'gmp']), \ 
     662 
     663    Extension('sage.rings.complex_interval', 
     664              sources = ['sage/rings/complex_interval.pyx'], 
    661665              libraries = ['mpfi', 'mpfr', 'gmp']), \ 
    662666 
Note: See TracChangeset for help on using the changeset viewer.