Ticket #11868: 11868_pari_extra.patch

File 11868_pari_extra.patch, 63.3 KB (added by jdemeyer, 9 years ago)
  • sage/libs/pari/gen.pxd

    # HG changeset patch
    # User Jeroen Demeyer <jdemeyer@cage.ugent.be>
    # Date 1385583463 -3600
    # Node ID f9d6bda1ed496ffcb74233d389f6499535f56539
    # Parent  52b95b820389aa0983155f47642a087a7b5bfa90
    Big PARI fix: reviewer patch
    
    diff --git a/sage/libs/pari/gen.pxd b/sage/libs/pari/gen.pxd
    a b  
    22
    33cimport sage.structure.element
    44cimport sage.structure.parent_base
     5cimport cython
    56
     7@cython.final
    68cdef class gen(sage.structure.element.RingElement):
    79    cdef GEN g
    810    cdef object _refers_to
     
    1517    cdef GEN _deepcopy_to_python_heap(self, GEN x, pari_sp* address)
    1618    cdef long get_var(self, v)
    1719
     20@cython.final
    1821cdef class PariInstance(sage.structure.parent_base.ParentWithBase):
    1922    cdef gen PARI_ZERO, PARI_ONE, PARI_TWO
    20     cdef gen new_gen(self, GEN x)
    21     cdef gen new_gen_noclear(self, GEN x)
     23    cdef inline gen new_gen(self, GEN x)
     24    cdef inline gen new_gen_noclear(self, GEN x)
    2225    cdef gen new_gen_from_mpz_t(self, mpz_t value)
    2326    cdef inline GEN _new_GEN_from_mpz_t(self, mpz_t value)
    2427    cdef gen new_gen_from_mpq_t(self, mpq_t value)
     
    2629    cdef gen new_gen_from_int(self, int value)
    2730    cdef gen new_t_POL_from_int_star(self, int *vals, int length, long varnum)
    2831    cdef gen new_gen_from_padic(self, long ordp, long relprec, mpz_t prime, mpz_t p_pow, mpz_t unit)
    29     cdef void clear_stack(self)
     32    cdef inline void clear_stack(self)
    3033    cdef gen double_to_gen_c(self, double)
    3134    cdef GEN double_to_GEN(self, double)
    3235    cdef GEN deepcopy_to_python_heap(self, GEN x, pari_sp* address)
  • sage/libs/pari/gen.pyx

    diff --git a/sage/libs/pari/gen.pyx b/sage/libs/pari/gen.pyx
    a b  
    185185include 'sage/ext/interrupt.pxi'
    186186
    187187cimport libc.stdlib
     188cimport cython
    188189
    189190cdef extern from "misc.h":
    190191    int     factorint_withproof_sage(GEN* ans, GEN x, GEN cutoff)
     
    193194cdef extern from "mpz_pylong.h":
    194195    cdef int mpz_set_pylong(mpz_t dst, src) except -1
    195196
     197# Will be imported as needed
     198Integer = None
     199
    196200# so Galois groups are represented in a sane way
    197201# See the polgalois section of the PARI users manual.
    198 new_galois_format = 1   
     202new_galois_format = 1
    199203
    200204cdef pari_sp mytop
    201205
     
    375379# Also a copy of PARI accessible from external pure python code.
    376380pari = pari_instance
    377381
    378 cdef object Integer
    379 
    380 cdef void late_import():
    381     global Integer
    382 
    383     if Integer is not None:
    384         return
    385 
    386     import sage.rings.integer
    387     Integer = sage.rings.integer.Integer
    388 
    389 
     382
     383@cython.final
    390384cdef class gen(sage.structure.element.RingElement):
    391385    """
    392386    Python extension class that models the PARI GEN type.
     
    416410
    417411    def __repr__(self):
    418412        cdef char *c
    419         cdef str s
    420         pari_catch_sig_on()
     413        pari_catch_sig_on()
     414        # Use sig_block(), which is needed because GENtostr() uses
     415        # malloc(), which is dangerous inside sig_on()
     416        sig_block()
    421417        c = GENtostr(self.g)
     418        sig_unblock()
     419        pari_catch_sig_off()
     420
    422421        s = str(c)
    423422        pari_free(c)
    424         pari_catch_sig_off()
    425423        return s
    426424
    427425    def __hash__(self):
     
    661659        return sage.structure.element.bin_op(self, other, operator.mod)
    662660
    663661    def __pow__(gen self, n, m):
    664         cdef gen t0 = P(n)
     662        cdef gen t0 = objtogen(n)
    665663        pari_catch_sig_on()
    666664        return P.new_gen(gpow(self.g, t0.g, prec))
    667665
     
    689687    # ACCESS
    690688    ###########################################
    691689    def getattr(self, attr):
    692         return P(str(self) + '.' + str(attr))
     690        return objtogen(str(self) + '.' + str(attr))
    693691
    694692    def mod(self):
    695693        """
     
    15691567            10
    15701568            sage: int(pari("Mod(2, 7)"))
    15711569            2
    1572         """
    1573         late_import()
     1570            sage: int(pari(RealField(63)(2^63-1)))
     1571            9223372036854775807L  # 32-bit
     1572            9223372036854775807   # 64-bit
     1573            sage: int(pari(RealField(63)(2^63+2)))
     1574            9223372036854775810L
     1575
     1576        """
     1577        global Integer
     1578        if Integer is None:
     1579            import sage.rings.integer
     1580            Integer = sage.rings.integer.Integer
    15741581        return int(Integer(self))
    15751582
    15761583    def int_unsafe(gen self):
     
    17651772            sage: long(pari("Mod(2, 7)"))
    17661773            2L
    17671774        """
    1768         late_import()
     1775        global Integer
     1776        if Integer is None:
     1777            import sage.rings.integer
     1778            Integer = sage.rings.integer.Integer
    17691779        return long(Integer(self))
    17701780   
    17711781    def __float__(gen self):
     
    18571867            sage: a.gequal(c)
    18581868            False
    18591869        """
    1860         cdef gen t0 = P(b)
     1870        cdef gen t0 = objtogen(b)
    18611871        pari_catch_sig_on()
    18621872        cdef int ret = gequal(a.g, t0.g)
    18631873        pari_catch_sig_off()
     
    19491959            sage: n.isprime(2)
    19501960            False
    19511961        """
    1952         cdef bint t
    1953         pari_catch_sig_on()
    1954         t = (signe(gisprime(self.g, flag)) != 0)
    1955         pari_catch_sig_off()
    1956         return t
     1962        pari_catch_sig_on()
     1963        cdef long t = signe(gisprime(self.g, flag))
     1964        P.clear_stack()
     1965        return t != 0
    19571966
    19581967    def qfbhclassno(gen n):
    19591968        r"""
     
    20292038            sage: n.ispseudoprime(2)
    20302039            False
    20312040        """
    2032         cdef long z
    2033         pari_catch_sig_on()
    2034         z = ispseudoprime(self.g, flag)
     2041        pari_catch_sig_on()
     2042        cdef long t = ispseudoprime(self.g, flag)
    20352043        pari_catch_sig_off()
    2036         return (z != 0)
     2044        return t != 0
    20372045
    20382046    def ispower(gen self, k=None):
    20392047        r"""
    20402048        Determine whether or not self is a perfect k-th power. If k is not
    20412049        specified, find the largest k so that self is a k-th power.
    20422050       
    2043         .. note:::
    2044 
    2045            There is a BUG in the PARI C-library function (at least in
    2046            PARI 2.2.12-beta) that is used to implement this function! This is
    2047            in GP::
    2048        
    2049               ? p=nextprime(10^100); n=p^100; m=p^2; m^50==n; ispower(n,50)
    2050                    
    2051        
    20522051        INPUT:
    20532052       
    20542053       
     
    20892088            else:
    20902089                return n, P.new_gen(x)
    20912090        else:
    2092             t0 = P(k)
     2091            t0 = objtogen(k)
    20932092            pari_catch_sig_on()
    20942093            n = ispower(self.g, t0.g, &x)
    20952094            if n == 0:
     
    21072106        2-dimensional column vector the quotient and the remainder, with
    21082107        respect to v (to main variable if v is omitted).
    21092108        """
    2110         cdef gen t0 = P(y)
    2111         pari_catch_sig_on()       
     2109        cdef gen t0 = objtogen(y)
     2110        pari_catch_sig_on()
    21122111        return P.new_gen(divrem(x.g, t0.g, P.get_var(var)))
    21132112
    21142113    def lex(gen x, y):
     
    21162115        lex(x,y): Compare x and y lexicographically (1 if xy, 0 if x==y, -1
    21172116        if xy)
    21182117        """
    2119         cdef gen t0 = P(y)
    2120         pari_catch_sig_on()       
     2118        cdef gen t0 = objtogen(y)
     2119        pari_catch_sig_on()
    21212120        r = lexcmp(x.g, t0.g)
    21222121        pari_catch_sig_off()
    21232122        return r
     
    21262125        """
    21272126        max(x,y): Return the maximum of x and y.
    21282127        """
    2129         cdef gen t0 = P(y)
     2128        cdef gen t0 = objtogen(y)
    21302129        pari_catch_sig_on()
    21312130        return P.new_gen(gmax(x.g, t0.g))
    21322131
     
    21342133        """
    21352134        min(x,y): Return the minimum of x and y.
    21362135        """
    2137         cdef gen t0 = P(y)
     2136        cdef gen t0 = objtogen(y)
    21382137        pari_catch_sig_on()
    21392138        return P.new_gen(gmin(x.g, t0.g))
    21402139
     
    21612160
    21622161    def sign(gen x):
    21632162        """
    2164         sign(x): Return the sign of x, where x is of type integer, real or
     2163        Return the sign of x, where x is of type integer, real or
    21652164        fraction.
    2166         """
    2167         # Pari throws an error if you attempt to take the sign of
    2168         # a complex number.
     2165
     2166        EXAMPLES::
     2167
     2168            sage: pari(pi).sign()
     2169            1
     2170            sage: pari(0).sign()
     2171            0
     2172            sage: pari(-1/2).sign()
     2173            -1
     2174
     2175        PARI throws an error if you attempt to take the sign of a
     2176        complex number::
     2177       
     2178            sage: pari(I).sign()
     2179            Traceback (most recent call last):
     2180            ...
     2181            PariError: incorrect type in gsigne
     2182       
     2183        """
    21692184        pari_catch_sig_on()
    21702185        r = gsigne(x.g)
    21712186        pari_catch_sig_off()
     
    21852200        vecmin(x): Return the maximum of the elements of the vector/matrix
    21862201        x.
    21872202        """
    2188         pari_catch_sig_on()       
     2203        pari_catch_sig_on()
    21892204        return P.new_gen(vecmin(x.g))
    21902205   
    21912206
     
    24342449            sage: a.type()
    24352450            't_POLMOD'
    24362451        """
    2437         cdef gen t0 = P(y)
     2452        cdef gen t0 = objtogen(y)
    24382453        pari_catch_sig_on()
    24392454        return P.new_gen(gmodulo(x.g, t0.g))
    24402455   
     
    25822597            ...
    25832598            PariError: square discriminant in Qfb
    25842599        """
    2585         cdef gen t0 = P(b)
    2586         cdef gen t1 = P(c)
    2587         cdef gen t2 = P(D)
     2600        cdef gen t0 = objtogen(b)
     2601        cdef gen t1 = objtogen(c)
     2602        cdef gen t2 = objtogen(D)
    25882603        pari_catch_sig_on()
    25892604        return P.new_gen(Qfb0(a.g, t0.g, t1.g, t2.g, prec))
    25902605       
     
    26792694            sage: pari('["bc","ab","bc"]').Set()
    26802695            ["\"ab\"", "\"bc\""]
    26812696        """
    2682         pari_catch_sig_on()           
     2697        pari_catch_sig_on()
    26832698        return P.new_gen(gtoset(x.g))
    26842699
    26852700
     
    27172732        """
    27182733        cdef char* c
    27192734        pari_catch_sig_on()
     2735        # Use sig_block(), which is needed because GENtostr() uses
     2736        # malloc(), which is dangerous inside sig_on()
     2737        sig_block()
    27202738        c = GENtostr(self.g)
     2739        sig_unblock()
    27212740        v = P.new_gen(strtoGENstr(c))
    27222741        pari_free(c)
    27232742        return v
     
    27552774            sage: pari([83, 97, 103, 101]).Strchr()
    27562775            "Sage"
    27572776        """
    2758         pari_catch_sig_on()       
     2777        pari_catch_sig_on()
    27592778        return P.new_gen(Strchr(x.g))
    27602779   
    27612780    def Strexpand(gen x):
     
    28042823        """
    28052824        if typ(x.g) != t_VEC:
    28062825            x = P.vector(1, [x])
    2807         pari_catch_sig_on()           
     2826        pari_catch_sig_on()
    28082827        return P.new_gen(Strtex(x.g))
    28092828       
    28102829    def printtex(gen x):
     
    30333052            sage: pari(-1).bitand(-1)
    30343053            -1
    30353054        """
    3036         cdef gen t0 = P(y)
     3055        cdef gen t0 = objtogen(y)
    30373056        pari_catch_sig_on()
    30383057        return P.new_gen(gbitand(x.g, t0.g))
    30393058       
     
    31133132            sage: pari(8+4).bitnegimply(8)
    31143133            4
    31153134        """
    3116         cdef gen t0 = P(y)
     3135        cdef gen t0 = objtogen(y)
    31173136        pari_catch_sig_on()
    31183137        return P.new_gen(gbitnegimply(x.g, t0.g))
    31193138
     
    31483167            sage: pari(13).bitor(1)
    31493168            13
    31503169        """
    3151         cdef gen t0 = P(y)
     3170        cdef gen t0 = objtogen(y)
    31523171        pari_catch_sig_on()
    31533172        return P.new_gen(gbitor(x.g, t0.g))
    31543173
     
    31903209            [True, False, True, True, True, True, True, True, True, True]
    31913210        """
    31923211        pari_catch_sig_on()
    3193         b = bool(bittest(x.g, n))
     3212        cdef long b = bittest(x.g, n)
    31943213        pari_catch_sig_off()
    3195         return b
     3214        return b != 0
    31963215   
    31973216    def bitxor(gen x, y):
    31983217        """
     
    32223241            sage: pari(6).bitxor(0)
    32233242            6
    32243243        """
    3225         cdef gen t0 = P(y)
     3244        cdef gen t0 = objtogen(y)
    32263245        pari_catch_sig_on()
    32273246        return P.new_gen(gbitxor(x.g, t0.g))
    32283247
     
    36343653       
    36353654        EXAMPLES:
    36363655        """
    3637         pari_catch_sig_on()       
     3656        pari_catch_sig_on()
    36383657        return P.new_gen(numtoperm(n, k.g))
    36393658
    36403659   
     
    36613680            sage: y.padicprec(17)
    36623681            Traceback (most recent call last):
    36633682            ...
    3664             ValueError: not the same prime in padicprec
    3665         """
    3666         cdef gen _p
    3667         _p = pari(p)
    3668         if typ(_p.g) != t_INT:
    3669             raise TypeError("p (=%s) must be of type t_INT, but is of type %s."%(
    3670                 _p, _p.type()))
    3671         if not gequal(gel(x.g, 2), _p.g):
    3672             raise ValueError("not the same prime in padicprec")
    3673         return padicprec(x.g, _p.g)
     3683            PariError: not the same prime in padicprec
     3684
     3685        This works for polynomials too::
     3686           
     3687            sage: R.<t> = PolynomialRing(Zp(3))
     3688            sage: pol = R([O(3^4), O(3^6), O(3^5)])
     3689            sage: pari(pol).padicprec(3)
     3690            4
     3691        """
     3692        cdef gen t0 = objtogen(p)
     3693        pari_catch_sig_on()
     3694        cdef long prec = padicprec(x.g, t0.g)
     3695        pari_catch_sig_off()
     3696        return prec
    36743697
    36753698    def padicprime(gen x):
    36763699        """
     
    41144137            2147483647            # 32-bit
    41154138            9223372036854775807   # 64-bit
    41164139        """
    4117         cdef gen t0 = P(p)
     4140        cdef gen t0 = objtogen(p)
    41184141        pari_catch_sig_on()
    41194142        v = ggval(x.g, t0.g)
    41204143        pari_catch_sig_off()
     
    42824305            sage: pari(1+i).agm(-3)
    42834306            -0.964731722290876 + 1.15700282952632*I
    42844307        """
    4285         cdef gen t0 = P(y)
     4308        cdef gen t0 = objtogen(y)
    42864309        pari_catch_sig_on()
    42874310        return P.new_gen(agm(x.g, t0.g, prec_bits_to_words(precision)))
    42884311
     
    44594482            sage: pari(2).besselh1(3)
    44604483            0.486091260585891 - 0.160400393484924*I
    44614484        """
    4462         cdef gen t0 = P(x)
     4485        cdef gen t0 = objtogen(x)
    44634486        pari_catch_sig_on()
    44644487        return P.new_gen(hbessel1(nu.g, t0.g, prec_bits_to_words(precision)))
    44654488
     
    44794502            sage: pari(2).besselh2(3)
    44804503            0.486091260585891 + 0.160400393484924*I
    44814504        """
    4482         cdef gen t0 = P(x)
     4505        cdef gen t0 = objtogen(x)
    44834506        pari_catch_sig_on()
    44844507        return P.new_gen(hbessel2(nu.g, t0.g, prec_bits_to_words(precision)))
    44854508
     
    45024525            sage: pari(2).besselj(3)
    45034526            0.486091260585891
    45044527        """
    4505         cdef gen t0 = P(x)
     4528        cdef gen t0 = objtogen(x)
    45064529        pari_catch_sig_on()
    45074530        return P.new_gen(jbessel(nu.g, t0.g, prec_bits_to_words(precision)))
    45084531
     
    45274550            0.4127100324          # 32-bit
    45284551            0.412710032209716     # 64-bit
    45294552        """
    4530         cdef gen t0 = P(x)
     4553        cdef gen t0 = objtogen(x)
    45314554        pari_catch_sig_on()
    45324555        return P.new_gen(jbesselh(nu.g, t0.g, prec_bits_to_words(precision)))
    45334556
     
    45534576            sage: pari(2).besseli(3+i)
    45544577            1.12539407613913 + 2.08313822670661*I
    45554578        """
    4556         cdef gen t0 = P(x)
     4579        cdef gen t0 = objtogen(x)
    45574580        pari_catch_sig_on()
    45584581        return P.new_gen(ibessel(nu.g, t0.g, prec_bits_to_words(precision)))
    45594582
     
    45964619            sage: pari(2+i).besselk(300, flag=1)
    45974620            3.74224603319728 E-132 + 2.49071062641525 E-134*I
    45984621        """
    4599         cdef gen t0 = P(x)
     4622        cdef gen t0 = objtogen(x)
    46004623        pari_catch_sig_on()
    46014624        return P.new_gen(kbessel(nu.g, t0.g, prec_bits_to_words(precision)))
    46024625
     
    46174640            sage: pari(2+i).besseln(3)
    46184641            -0.280775566958244 - 0.486708533223726*I
    46194642        """
    4620         cdef gen t0 = P(x)
     4643        cdef gen t0 = objtogen(x)
    46214644        pari_catch_sig_on()
    46224645        return P.new_gen(nbessel(nu.g, t0.g, prec_bits_to_words(precision)))
    46234646
     
    48154838            sage: pari('x+O(x^8)').exp()
    48164839            1 + x + 1/2*x^2 + 1/6*x^3 + 1/24*x^4 + 1/120*x^5 + 1/720*x^6 + 1/5040*x^7 + O(x^8)
    48174840        """
    4818         pari_catch_sig_on()       
     4841        pari_catch_sig_on()
    48194842        return P.new_gen(gexp(self.g, pbw(precision)))
    48204843
    48214844    def gamma(gen s, precision=0):
     
    48844907            sage: pari(1).hyperu(2,3)
    48854908            0.333333333333333
    48864909        """
    4887         cdef gen t0 = P(b)
    4888         cdef gen t1 = P(x)
     4910        cdef gen t0 = objtogen(b)
     4911        cdef gen t1 = objtogen(x)
    48894912        pari_catch_sig_on()
    48904913        return P.new_gen(hyperu(a.g, t0.g, t1.g, prec_bits_to_words(precision)))
    48914914
     
    49054928            sage: pari(1+i).incgam(3-i)
    49064929            -0.0458297859919946 + 0.0433696818726677*I
    49074930        """
    4908         cdef gen t0 = P(x)
     4931        cdef gen t0 = objtogen(x)
    49094932        cdef gen t1
    49104933        if y is None:
    49114934            pari_catch_sig_on()
    49124935            return P.new_gen(incgam(s.g, t0.g, prec_bits_to_words(precision)))
    49134936        else:
    4914             t1 = P(y)
     4937            t1 = objtogen(y)
    49154938            pari_catch_sig_on()
    49164939            return P.new_gen(incgam0(s.g, t0.g, t1.g, prec_bits_to_words(precision)))
    49174940
     
    49374960            sage: pari(1).incgamc(2)
    49384961            0.864664716763387
    49394962        """
    4940         cdef gen t0 = P(x)
     4963        cdef gen t0 = objtogen(x)
    49414964        pari_catch_sig_on()
    49424965        return P.new_gen(incgamc(s.g, t0.g, prec_bits_to_words(precision)))
    49434966   
     
    49815004            sage: pari(i).log()
    49825005            0.E-19 + 1.57079632679490*I
    49835006        """
    4984         pari_catch_sig_on()       
     5007        pari_catch_sig_on()
    49855008        return P.new_gen(glog(x.g, pbw(precision)))
    49865009
    49875010    def log_gamma(gen x, precision=0):
     
    51975220        """
    51985221        # TODO: ???  lots of good examples in the PARI docs ???
    51995222        cdef GEN zetan
    5200         cdef gen t0 = P(n)
     5223        cdef gen t0 = objtogen(n)
    52015224        pari_catch_sig_on()
    52025225        ans = P.new_gen_noclear(gsqrtn(x.g, t0.g, &zetan, prec_bits_to_words(precision)))
    52035226        return ans, P.new_gen(zetan)
     
    52775300            sage: pari(0.5).theta(2)
    52785301            1.63202590295260
    52795302        """
    5280         cdef gen t0 = P(z)
     5303        cdef gen t0 = objtogen(z)
    52815304        pari_catch_sig_on()
    52825305        return P.new_gen(theta(q.g, t0.g, prec_bits_to_words(precision)))
    52835306
     
    53865409    def bezout(gen x, y):
    53875410        cdef gen u, v, g
    53885411        cdef GEN U, V, G
    5389         cdef gen t0 = P(y)
     5412        cdef gen t0 = objtogen(y)
    53905413        pari_catch_sig_on()
    53915414        G = gbezout(x.g, t0.g, &U, &V)
    53925415        g = P.new_gen_noclear(G)
     
    54265449        a bound for the number of terms in the continued fraction
    54275450        expansion.
    54285451        """
    5429         cdef gen t0 = P(b)
     5452        cdef gen t0 = objtogen(b)
    54305453        pari_catch_sig_on()
    54315454        return P.new_gen(contfrac0(x.g, t0.g, lmax))
    54325455
     
    55125535        (x and y must be polynomials), 2 use the subresultant algorithm (x
    55135536        and y must be polynomials)
    55145537        """
    5515         cdef gen t0 = P(y)
     5538        cdef gen t0 = objtogen(y)
    55165539        pari_catch_sig_on()
    55175540        return P.new_gen(ggcd0(x.g, t0.g))
    55185541
    55195542    def issquare(gen x, find_root=False):
    55205543        """
    5521         issquare(x,n): true(1) if x is a square, false(0) if not. If
    5522         find_root is given, also returns the exact square root if it was
    5523         computed.
    5524         """
    5525         cdef GEN G, t
     5544        issquare(x,n): ``True`` if x is a square, ``False`` if not. If
     5545        ``find_root`` is given, also returns the exact square root.
     5546        """
     5547        cdef GEN G
     5548        cdef long t
    55265549        cdef gen g
    55275550        pari_catch_sig_on()
    55285551        if find_root:
    5529             t = gissquareall(x.g, &G)
    5530             v = bool(P.new_gen_noclear(t))
    5531             if v:
    5532                 return v, P.new_gen(G)
     5552            t = itos(gissquareall(x.g, &G))
     5553            if t:
     5554                return True, P.new_gen(G)
    55335555            else:
    5534                 pari_catch_sig_off()
    5535                 return v, None
     5556                P.clear_stack()
     5557                return False, None
    55365558        else:
    5537             return P.new_gen(gissquare(x.g))
    5538 
     5559            t = itos(gissquare(x.g))
     5560            pari_catch_sig_off()
     5561            return t != 0
    55395562
    55405563    def issquarefree(gen self):
    55415564        """
     
    55475570            False
    55485571        """
    55495572        pari_catch_sig_on()
    5550         t = bool(issquarefree(self.g))
     5573        cdef long t = issquarefree(self.g)
    55515574        pari_catch_sig_off()
    5552         return t
     5575        return t != 0
    55535576
    55545577    def lcm(gen x, y):
    55555578        """
     
    55585581            sage: pari(10).lcm(15)
    55595582            30
    55605583        """
    5561         cdef gen t0 = P(y)
     5584        cdef gen t0 = objtogen(y)
    55625585        pari_catch_sig_on()
    55635586        return P.new_gen(glcm(x.g, t0.g))
    55645587
     
    57585781            sage: e.ellglobalred()
    57595782            [17, [1, 0, 0, 0], 4]
    57605783        """
    5761         pari_catch_sig_on()       
     5784        pari_catch_sig_on()
    57625785        return self.new_gen(ellglobalred(self.g))
    57635786
    57645787    def elladd(self, z0, z1):
     
    57935816            sage: e.elladd([1,0], [-1,1])
    57945817            [-3/4, -15/8]
    57955818        """
    5796         cdef gen t0 = P(z0)
    5797         cdef gen t1 = P(z1)
     5819        cdef gen t0 = objtogen(z0)
     5820        cdef gen t1 = objtogen(z1)
    57985821        pari_catch_sig_on()
    57995822        return P.new_gen(addell(self.g, t0.g, t1.g))
    58005823
     
    58325855            sage: e.ellak(0)
    58335856            0
    58345857        """
    5835         cdef gen t0 = P(n)
     5858        cdef gen t0 = objtogen(n)
    58365859        pari_catch_sig_on()
    58375860        return P.new_gen(akell(self.g, t0.g))
    58385861
     
    59275950            sage: e.ellak(-1)
    59285951            0
    59295952        """
    5930         cdef gen t0 = P(p)
     5953        cdef gen t0 = objtogen(p)
    59315954        pari_catch_sig_on()
    59325955        return P.new_gen(ellap(self.g, t0.g))
    59335956
     
    59415964       
    59425965        INPUT:
    59435966       
    5944        
    5945         -  ``n`` - a long integer
    5946        
    5947         -  ``python_ints`` - bool (default is False); if True,
    5948            return a list of Python ints instead of a PARI gen wrapper.
    5949        
     5967        - ``self`` -- an elliptic curve
     5968       
     5969        - ``n`` -- a long integer
     5970       
     5971        - ``python_ints`` -- bool (default is False); if True,
     5972          return a list of Python ints instead of a PARI gen wrapper.
     5973       
     5974        .. WARNING::
    59505975       
    59515976            The curve e must be a medium or long vector of the type given by
    59525977            ellinit. For this function to work for every n and not just those
     
    59545979            If this is not the case, use the function ellminimalmodel first
    59555980            before using ellaplist (or you will get INCORRECT RESULTS!)
    59565981       
    5957        
    5958         INPUT:
    5959        
    5960        
    5961         -  ``e`` - a PARI elliptic curve.
    5962        
    5963         -  ``n`` - an integer
    5964        
    5965        
    59665982        EXAMPLES::
    59675983       
    59685984            sage: e = pari([0, -1, 1, -10, -20]).ellinit()
     
    59805996            <type 'list'>
    59815997            sage: type(v[0])
    59825998            <type 'int'>
    5983         """
    5984         cdef gen t0
    5985         cdef GEN g
    5986         cdef long i
     5999
     6000        TESTS::
     6001
     6002            sage: v = e.ellaplist(1)
     6003            sage: print v, type(v)
     6004            [] <type 'sage.libs.pari.gen.gen'>
     6005            sage: v = e.ellaplist(1, python_ints=True)
     6006            sage: print v, type(v)
     6007            [] <type 'list'>
     6008        """
     6009        if python_ints:
     6010            return [int(x) for x in self.ellaplist(n)]
    59876011
    59886012        if n < 2:
    59896013            pari_catch_sig_on()
     
    59916015
    59926016        # 1. Make a table of primes up to n.
    59936017        P.init_primes(n+1)
    5994         t0 = P(n)
    5995         pari_catch_sig_on()
    5996         g = primes(gtolong(primepi(t0.g)))
     6018        cdef gen t0 = objtogen(n)
     6019        pari_catch_sig_on()
     6020        cdef GEN g = primes(gtolong(primepi(t0.g)))
    59976021
    59986022        # 2. Replace each prime in the table by ellap of it.
    5999         if python_ints:
    6000             v = [gtolong(ellap(self.g, gel(g, i + 1))) \
    6001                         for i in range(glength(g))]
    6002             P.clear_stack()
    6003             return v
    6004         else:
    6005             for i from 0 <= i < glength(g):
    6006                 set_gel(g, i + 1, ellap(self.g, gel(g, i + 1)))
    6007             return self.new_gen(g)
     6023        cdef long i
     6024        for i from 0 <= i < glength(g):
     6025            set_gel(g, i + 1, ellap(self.g, gel(g, i + 1)))
     6026        return P.new_gen(g)
    60086027
    60096028
    60106029    def ellbil(self, z0, z1):
     
    60276046            sage: e.ellbil([1, 0], [-1, 1])
    60286047            0.418188984498861
    60296048        """
    6030         cdef gen t0 = P(z0)
    6031         cdef gen t1 = P(z1)
     6049        cdef gen t0 = objtogen(z0)
     6050        cdef gen t1 = objtogen(z1)
    60326051        pari_catch_sig_on()
    60336052        return P.new_gen(bilhell(self.g, t0.g, t1.g, prec))
    60346053
     
    60596078            sage: f[:5]
    60606079            [1, -1, 0, 4, 3]
    60616080        """
    6062         cdef gen t0 = P(ch)
     6081        cdef gen t0 = objtogen(ch)
    60636082        pari_catch_sig_on()
    60646083        return P.new_gen(ellchangecurve(self.g, t0.g))
    60656084
     
    61286147            sage: e.ellheight([1,0], flag=1)
    61296148            0.476711659343740
    61306149        """
    6131         cdef gen t0 = P(a)
     6150        cdef gen t0 = objtogen(a)
    61326151        pari_catch_sig_on()
    61336152        return P.new_gen(ellheight0(self.g, t0.g, flag, prec_bits_to_words(precision)))
    61346153
     
    61566175            sage: e.ellheightmatrix([[1,0], [-1,1]])
    61576176            [0.476711659343740, 0.418188984498861; 0.418188984498861, 0.686667083305587]
    61586177        """
    6159         cdef gen t0 = P(x)
     6178        cdef gen t0 = objtogen(x)
    61606179        pari_catch_sig_on()
    61616180        return P.new_gen(mathell(self.g, t0.g, prec))
    61626181
     
    61826201            sage: e.ellisoncurve([0])
    61836202            True
    61846203        """
    6185         cdef gen t0 = P(x)
    6186         pari_catch_sig_on()
    6187         t = bool(oncurve(self.g, t0.g) == 1)
     6204        cdef gen t0 = objtogen(x)
     6205        pari_catch_sig_on()
     6206        cdef int t = oncurve(self.g, t0.g)
    61886207        pari_catch_sig_off()
    6189         return t
     6208        return t != 0
    61906209
    61916210    def elllocalred(self, p):
    61926211        r"""
     
    63396358            sage: e.elllocalred(3)
    63406359            [2, -10, [1, 96, 1, 316], 4]
    63416360        """
    6342         cdef gen t0 = P(p)
     6361        cdef gen t0 = objtogen(p)
    63436362        pari_catch_sig_on()
    63446363        return P.new_gen(elllocalred(self.g, t0.g))
    63456364
     
    63816400            sage: e.elllseries(2.1, A=1.1)
    63826401            0.402838047956645
    63836402        """
    6384         cdef gen t0 = P(s)
    6385         cdef gen t1 = P(A)
     6403        cdef gen t0 = objtogen(s)
     6404        cdef gen t1 = objtogen(A)
    63866405        pari_catch_sig_on()
    63876406        return P.new_gen(elllseries(self.g, t0.g, t1.g, prec))
    63886407
     
    64516470            sage: e.ellorder([1,0])
    64526471            0
    64536472        """
    6454         cdef gen t0 = P(x)
     6473        cdef gen t0 = objtogen(x)
    64556474        pari_catch_sig_on()
    64566475        return P.new_gen(orderell(self.g, t0.g))
    64576476   
     
    64826501            sage: e.ellordinate('z+2*z^2+O(z^4)')
    64836502            [-2*z - 7*z^2 - 23*z^3 + O(z^4), -1 + 2*z + 7*z^2 + 23*z^3 + O(z^4)]
    64846503        """
    6485         cdef gen t0 = P(x)
     6504        cdef gen t0 = objtogen(x)
    64866505        pari_catch_sig_on()
    64876506        return P.new_gen(ellordinate(self.g, t0.g, prec))
    64886507
     
    65086527            sage: e.ellpointtoz([0])
    65096528            0
    65106529        """
    6511         cdef gen t0 = P(pt)
     6530        cdef gen t0 = objtogen(pt)
    65126531        pari_catch_sig_on()
    65136532        return P.new_gen(zell(self.g, t0.g, prec_bits_to_words(precision)))
    65146533
     
    65706589            ....:     P0 = e.elladd(e.ellpow(P, cm_minpoly[0]), e.ellpow(P2, cm))
    65716590            ....:     assert(P0 == E(0))
    65726591        """
    6573         cdef gen t0 = P(z)
    6574         cdef gen t1 = P(n)
     6592        cdef gen t0 = objtogen(z)
     6593        cdef gen t1 = objtogen(n)
    65756594        pari_catch_sig_on()
    65766595        return P.new_gen(powell(self.g, t0.g, t1.g))
    65776596   
     
    66066625            sage: e.ellrootno(1009)
    66076626            1
    66086627        """
    6609         cdef gen t0 = P(p)
    6610         pari_catch_sig_on()
    6611         rootno =  ellrootno(self.g, t0.g)
     6628        cdef gen t0 = objtogen(p)
     6629        pari_catch_sig_on()
     6630        rootno = ellrootno(self.g, t0.g)
    66126631        pari_catch_sig_off()
    66136632        return rootno
    66146633
     
    66256644            sage: e.ellsigma(2+i)
    66266645            1.43490215804166 + 1.80307856719256*I
    66276646        """
    6628         cdef gen t0 = P(z)
     6647        cdef gen t0 = objtogen(z)
    66296648        pari_catch_sig_on()
    66306649        return P.new_gen(ellsigma(self.g, t0.g, flag, prec))
    66316650
     
    66516670            sage: e.ellsub([1,0], [-1,1])
    66526671            [0, 0]
    66536672        """
    6654         cdef gen t0 = P(z0)
    6655         cdef gen t1 = P(z1)
     6673        cdef gen t0 = objtogen(z0)
     6674        cdef gen t1 = objtogen(z1)
    66566675        pari_catch_sig_on()
    66576676        return P.new_gen(subell(self.g, t0.g, t1.g))
    66586677
     
    67356754            sage: e.ellzeta(i-1)
    67366755            -0.350122658523049 - 0.350122658523049*I
    67376756        """
    6738         cdef gen t0 = P(z)
     6757        cdef gen t0 = objtogen(z)
    67396758        pari_catch_sig_on()
    67406759        return P.new_gen(ellzeta(self.g, t0.g, prec))
    67416760
     
    67696788            sage: e.ellztopoint(0)
    67706789            [0]
    67716790        """
    6772         cdef gen t0 = P(z)
     6791        cdef gen t0 = objtogen(z)
    67736792        try:
    67746793            dprec = prec_words_to_dec(z.precision())
    67756794        except AttributeError:
     
    68576876            pari_catch_sig_on()
    68586877            return P.new_gen(bnfinit0(self.g, flag, NULL, prec))
    68596878        else:
    6860             t0 = P(tech)
     6879            t0 = objtogen(tech)
    68616880            pari_catch_sig_on()
    68626881            return P.new_gen(bnfinit0(self.g, flag, t0.g, prec))
    68636882   
    68646883    def bnfisintnorm(self, x):
    6865         cdef gen t0 = P(x)
     6884        cdef gen t0 = objtogen(x)
    68666885        pari_catch_sig_on()
    68676886        return P.new_gen(bnfisintnorm(self.g, t0.g))
    68686887
    68696888    def bnfisnorm(self, x, long flag=0):
    6870         cdef gen t0 = P(x)
     6889        cdef gen t0 = objtogen(x)
    68716890        pari_catch_sig_on()
    68726891        return P.new_gen(bnfisnorm(self.g, t0.g, flag))
    68736892
    68746893    def bnfisprincipal(self, x, long flag=1):
    6875         cdef gen t0 = P(x)
     6894        cdef gen t0 = objtogen(x)
    68766895        pari_catch_sig_on()
    68776896        return P.new_gen(bnfisprincipal0(self.g, t0.g, flag))
    68786897
     
    68816900        return P.new_gen(buchnarrow(self.g))
    68826901
    68836902    def bnfsunit(self, S, long precision=0):
    6884         cdef gen t0 = P(S)
     6903        cdef gen t0 = objtogen(S)
    68856904        pari_catch_sig_on()
    68866905        return P.new_gen(bnfsunit(self.g, t0.g, prec_bits_to_words(precision)))
    68876906
     
    68906909        return P.new_gen(bnf_get_fu(self.g))
    68916910
    68926911    def bnfisunit(self, x):
    6893         cdef gen t0 = P(x)
     6912        cdef gen t0 = objtogen(x)
    68946913        pari_catch_sig_on()
    68956914        return P.new_gen(bnfisunit(self.g, t0.g))
    68966915
     
    69126931            sage: K.pari_bnf().bnrclassno(p._pari_bid_())
    69136932            3
    69146933        """
    6915         cdef gen t0 = P(I)
     6934        cdef gen t0 = objtogen(I)
    69166935        pari_catch_sig_on()
    69176936        return P.new_gen(bnrclassno(self.g, t0.g))
    69186937
    69196938    def bnfissunit(self, sunit_data, x):
    6920         cdef gen t0 = P(x)
    6921         cdef gen t1 = P(sunit_data)
     6939        cdef gen t0 = objtogen(x)
     6940        cdef gen t1 = objtogen(sunit_data)
    69226941        pari_catch_sig_on()
    69236942        return P.new_gen(bnfissunit(self.g, t1.g, t0.g))
    69246943
    69256944    def dirzetak(self, n):
    6926         cdef gen t0 = P(n)
     6945        cdef gen t0 = objtogen(n)
    69276946        pari_catch_sig_on()
    69286947        return P.new_gen(dirzetak(self.g, t0.g))
    69296948
    69306949    def galoisapply(self, aut, x):
    6931         cdef gen t0 = P(aut)
    6932         cdef gen t1 = P(x)
     6950        cdef gen t0 = objtogen(aut)
     6951        cdef gen t1 = objtogen(x)
    69336952        pari_catch_sig_on()
    69346953        return P.new_gen(galoisapply(self.g, t0.g, t1.g))
    69356954
     
    69436962            pari_catch_sig_on()
    69446963            return P.new_gen(galoisinit(self.g, NULL))
    69456964        else:
    6946             t0 = P(den)
     6965            t0 = objtogen(den)
    69476966            pari_catch_sig_on()
    69486967            return P.new_gen(galoisinit(self.g, t0.g))
    69496968
    69506969    def galoispermtopol(self, perm):
    6951         cdef gen t0 = P(perm)
     6970        cdef gen t0 = objtogen(perm)
    69526971        pari_catch_sig_on()
    69536972        return P.new_gen(galoispermtopol(self.g, t0.g))
    69546973
    69556974    def galoisfixedfield(self, perm, long flag=0, v=-1):
    6956         cdef gen t0 = P(perm)
     6975        cdef gen t0 = objtogen(perm)
    69576976        pari_catch_sig_on()
    69586977        return P.new_gen(galoisfixedfield(self.g, t0.g, flag, P.get_var(v)))
    69596978
    69606979    def idealred(self, I, vdir=0):
    6961         cdef gen t0 = P(I)
    6962         cdef gen t1 = P(vdir)
     6980        cdef gen t0 = objtogen(I)
     6981        cdef gen t1 = objtogen(vdir)
    69636982        pari_catch_sig_on()
    69646983        return P.new_gen(idealred0(self.g, t0.g, t1.g if vdir else NULL))
    69656984
    69666985    def idealadd(self, x, y):
    6967         cdef gen t0 = P(x)
    6968         cdef gen t1 = P(y)
     6986        cdef gen t0 = objtogen(x)
     6987        cdef gen t1 = objtogen(y)
    69696988        pari_catch_sig_on()
    69706989        return P.new_gen(idealadd(self.g, t0.g, t1.g))
    69716990
    69726991    def idealaddtoone(self, x, y):
    6973         cdef gen t0 = P(x)
    6974         cdef gen t1 = P(y)
     6992        cdef gen t0 = objtogen(x)
     6993        cdef gen t1 = objtogen(y)
    69756994        pari_catch_sig_on()
    69766995        return P.new_gen(idealaddtoone0(self.g, t0.g, t1.g))
    69776996
    69786997    def idealappr(self, x, long flag=0):
    6979         cdef gen t0 = P(x)
     6998        cdef gen t0 = objtogen(x)
    69806999        pari_catch_sig_on()
    69817000        return P.new_gen(idealappr0(self.g, t0.g, flag))
    69827001
     
    70007019            sage: nf.idealcoprime(x, y)
    70017020            [5/43, 9/43, -1/43]~
    70027021        """
    7003         cdef gen t0 = P(x)
    7004         cdef gen t1 = P(y)
     7022        cdef gen t0 = objtogen(x)
     7023        cdef gen t1 = objtogen(y)
    70057024        pari_catch_sig_on()
    70067025        return P.new_gen(idealcoprime(self.g, t0.g, t1.g))
    70077026
    70087027    def idealdiv(self, x, y, long flag=0):
    7009         cdef gen t0 = P(x)
    7010         cdef gen t1 = P(y)
     7028        cdef gen t0 = objtogen(x)
     7029        cdef gen t1 = objtogen(y)
    70117030        pari_catch_sig_on()
    70127031        return P.new_gen(idealdiv0(self.g, t0.g, t1.g, flag))
    70137032
    70147033    def idealfactor(self, x):
    7015         cdef gen t0 = P(x)
     7034        cdef gen t0 = objtogen(x)
    70167035        pari_catch_sig_on()
    70177036        return P.new_gen(idealfactor(self.g, t0.g))
    70187037
    70197038    def idealhnf(self, a, b=None):
    7020         cdef gen t0 = P(a)
     7039        cdef gen t0 = objtogen(a)
    70217040        cdef gen t1
    70227041        if b is None:
    70237042            pari_catch_sig_on()
    70247043            return P.new_gen(idealhnf(self.g, t0.g))
    70257044        else:
    7026             t1 = P(b)
     7045            t1 = objtogen(b)
    70277046            pari_catch_sig_on()
    70287047            return P.new_gen(idealhnf0(self.g, t0.g, t1.g))
    70297048
    70307049    def idealintersection(self, x, y):
    7031         cdef gen t0 = P(x)
    7032         cdef gen t1 = P(y)
     7050        cdef gen t0 = objtogen(x)
     7051        cdef gen t1 = objtogen(y)
    70337052        pari_catch_sig_on()
    70347053        return P.new_gen(idealintersect(self.g, t0.g, t1.g))
    70357054
     
    70887107            sage: nf.ideallog(x, bid)
    70897108            [25]~
    70907109        """
    7091         cdef gen t0 = P(x)
    7092         cdef gen t1 = P(bid)
     7110        cdef gen t0 = objtogen(x)
     7111        cdef gen t1 = objtogen(bid)
    70937112        pari_catch_sig_on()
    70947113        return P.new_gen(ideallog(self.g, t0.g, t1.g))
    70957114
    70967115    def idealmul(self, x, y, long flag=0):
    7097         cdef gen t0 = P(x)
    7098         cdef gen t1 = P(y)
     7116        cdef gen t0 = objtogen(x)
     7117        cdef gen t1 = objtogen(y)
    70997118        pari_catch_sig_on()
    71007119        if flag == 0:
    71017120            return P.new_gen(idealmul(self.g, t0.g, t1.g))
     
    71037122            return P.new_gen(idealmulred(self.g, t0.g, t1.g))
    71047123
    71057124    def idealnorm(self, x):
    7106         cdef gen t0 = P(x)
     7125        cdef gen t0 = objtogen(x)
    71077126        pari_catch_sig_on()
    71087127        return P.new_gen(idealnorm(self.g, t0.g))
    71097128
     
    71237142            sage: F[0].pr_get_p()
    71247143            5
    71257144        """
    7126         cdef gen t0 = P(p)
     7145        cdef gen t0 = objtogen(p)
    71277146        pari_catch_sig_on()
    71287147        return P.new_gen(idealprimedec(nf.g, t0.g))
    71297148
     
    71637182            sage: nf.idealstar(I)
    71647183            [[[43, 9, 5; 0, 1, 0; 0, 0, 1], [0]], [42, [42]], Mat([[43, [9, 1, 0]~, 1, 1, [-5, -9, 1]~], 1]), [[[[42], [[3, 0, 0]~], [[3, 0, 0]~], [Vecsmall([])], 1]], [[], [], []]], Mat(1)]
    71657184        """
    7166         cdef gen t0 = P(I)
     7185        cdef gen t0 = objtogen(I)
    71677186        pari_catch_sig_on()
    71687187        return P.new_gen(idealstar0(self.g, t0.g, flag))
    71697188
    71707189    def idealtwoelt(self, x, a=None):
    7171         cdef gen t0 = P(x)
     7190        cdef gen t0 = objtogen(x)
    71727191        cdef gen t1
    71737192        if a is None:
    71747193            pari_catch_sig_on()
    71757194            return P.new_gen(idealtwoelt0(self.g, t0.g, NULL))
    71767195        else:
    7177             t1 = P(a)
     7196            t1 = objtogen(a)
    71787197            pari_catch_sig_on()
    71797198            return P.new_gen(idealtwoelt0(self.g, t0.g, t1.g))
    71807199
    71817200    def idealval(self, x, p):
    7182         cdef gen t0 = P(x)
    7183         cdef gen t1 = P(p)
     7201        cdef gen t0 = objtogen(x)
     7202        cdef gen t1 = objtogen(p)
    71847203        pari_catch_sig_on()
    71857204        v = idealval(self.g, t0.g, t1.g)
    71867205        pari_catch_sig_off()
    71877206        return v
    71887207
    71897208    def elementval(self, x, p):
    7190         cdef gen t0 = P(x)
    7191         cdef gen t1 = P(p)
     7209        cdef gen t0 = objtogen(x)
     7210        cdef gen t1 = objtogen(p)
    71927211        pari_catch_sig_on()
    71937212        v = nfval(self.g, t0.g, t1.g)
    71947213        pari_catch_sig_off()
     
    72037222        pari_catch_sig_on()
    72047223        return self.new_gen(modreverse(self.g))
    72057224
    7206     def nfbasis(self, long flag=0, fa=0):
     7225    def nfbasis(self, long flag=0, fa=None):
    72077226        """
    72087227        nfbasis(x, flag, fa): integral basis of the field QQ[a], where ``a`` is
    72097228        a root of the polynomial x.
     
    72437262            sage: pari('x^3 - 17').nfbasis(flag = 2)
    72447263            [1, x, 1/3*x^2 - 1/3*x + 1/3]
    72457264        """
    7246         cdef gen t0 = P(fa)
    7247         pari_catch_sig_on()
    7248         return P.new_gen(nfbasis0(self.g, flag, t0.g if typ(t0.g) == t_MAT else NULL))
    7249 
    7250     def nfbasis_d(self, long flag=0, fa=0):
     7265        cdef gen t0
     7266        if not fa:
     7267            pari_catch_sig_on()
     7268            return P.new_gen(nfbasis0(self.g, flag, NULL))
     7269        else:
     7270            t0 = objtogen(fa)
     7271            pari_catch_sig_on()
     7272            return P.new_gen(nfbasis0(self.g, flag, t0.g))
     7273
     7274    def nfbasis_d(self, long flag=0, fa=None):
    72517275        """
    72527276        nfbasis_d(x): Return a basis of the number field defined over QQ
    72537277        by x and its discriminant.
     
    72697293            sage: pari([-2,0,0,1]).Polrev().nfbasis_d()
    72707294            ([1, x, x^2], -108)
    72717295        """
     7296        cdef gen t0
    72727297        cdef GEN disc
    7273         cdef gen t0 = P(fa)
    7274         pari_catch_sig_on()
    7275         B = P.new_gen_noclear(nfbasis(self.g, &disc, flag, t0.g if typ(t0.g) == t_MAT else NULL))
    7276         D = P.new_gen(disc);
    7277         return B,D
     7298        if not fa:
     7299            pari_catch_sig_on()
     7300            B = P.new_gen_noclear(nfbasis(self.g, &disc, flag, NULL))
     7301        else:
     7302            t0 = objtogen(fa)
     7303            pari_catch_sig_on()
     7304            B = P.new_gen_noclear(nfbasis(self.g, &disc, flag, t0.g))
     7305        D = P.new_gen(disc)
     7306        return B, D
    72787307
    72797308    def nfbasistoalg(nf, x):
    72807309        r"""
     
    73067335            sage: Kpari.getattr('zk') * pari("[3/2, -5, 0]~")
    73077336            -5/3*y^2 + 5/3*y - 1/6
    73087337        """
    7309         cdef gen t0 = P(x)
     7338        cdef gen t0 = objtogen(x)
    73107339        pari_catch_sig_on()
    73117340        return P.new_gen(basistoalg(nf.g, t0.g))
    73127341
     
    73397368            sage: Kpari.getattr('zk') * pari("[3/2, -5, 0]~")
    73407369            -5/3*y^2 + 5/3*y - 1/6
    73417370        """
    7342         cdef gen t0 = P(x)
     7371        cdef gen t0 = objtogen(x)
    73437372        pari_catch_sig_on()
    73447373        return P.new_gen(gel(basistoalg(nf.g, t0.g), 2))
    73457374
     
    73917420            sage: pari(k).nfeltdiveuc(pari(x), pari(y))
    73927421            [2, -2]~
    73937422        """
    7394         cdef gen t0 = P(x)
    7395         cdef gen t1 = P(y)
     7423        cdef gen t0 = objtogen(x)
     7424        cdef gen t1 = objtogen(y)
    73967425        pari_catch_sig_on()
    73977426        return P.new_gen(nfdiveuc(self.g, t0.g, t1.g))
    73987427
     
    74127441            sage: 12 - k(kp.nfeltreduce(12, I.pari_hnf())) in I
    74137442            True
    74147443        """
    7415         cdef gen t0 = P(x)
    7416         cdef gen t1 = P(I)
     7444        cdef gen t0 = objtogen(x)
     7445        cdef gen t1 = objtogen(I)
    74177446        pari_catch_sig_on()
    74187447        return P.new_gen(nfreduce(self.g, t0.g, t1.g))
    74197448
    74207449    def nffactor(self, x):
    7421         cdef gen t0 = P(x)
     7450        cdef gen t0 = objtogen(x)
    74227451        pari_catch_sig_on()
    74237452        return P.new_gen(nffactor(self.g, t0.g))
    74247453
     
    74277456        x = f.variable()
    74287457        return x.Mod(f)
    74297458
    7430     def nfhilbert(self, a, b, p = None):
     7459    def nfhilbert(self, a, b, p=None):
    74317460        """
    74327461        nfhilbert(nf,a,b,{p}): if p is omitted, global Hilbert symbol (a,b)
    74337462        in nf, that is 1 if X^2-aY^2-bZ^2 has a non-trivial solution (X,Y,Z)
     
    74407469            sage: K.<t> = NumberField(x^3 - x + 1)
    74417470            sage: pari(K).nfhilbert(t, t + 2)
    74427471            -1
    7443             sage: pari(K).nfhilbert(pari(t), pari(t+2))
    7444             -1
    74457472            sage: P = K.ideal(t^2 + t - 2)   # Prime ideal above 5
    74467473            sage: pari(K).nfhilbert(t, t + 2, P.pari_prime())
    74477474            -1
    7448             sage: pari(K).nfhilbert(pari(t), pari(t+2), P.pari_prime())
    7449             -1
    74507475            sage: P = K.ideal(t^2 + 3*t - 1) # Prime ideal above 23, ramified
    74517476            sage: pari(K).nfhilbert(t, t + 2, P.pari_prime())
    74527477            1
    7453             sage: pari(K).nfhilbert(pari(t), pari(t+2), P.pari_prime())
    7454             1
    7455         """
    7456         cdef gen t0 = P(a)
    7457         cdef gen t1 = P(b)
     7478        """
     7479        cdef gen t0 = objtogen(a)
     7480        cdef gen t1 = objtogen(b)
    74587481        cdef gen t2
    74597482        if p:
    7460             t2 = P(p)
     7483            t2 = objtogen(p)
    74617484            pari_catch_sig_on()
    74627485            r = nfhilbert0(self.g, t0.g, t1.g, t2.g)
    74637486        else:
     
    75277550           
    75287551        AUTHORS:
    75297552
    7530         - Aly Deines (2012-09-19)   
    7531         """
    7532         cdef gen t0 = P(x)
     7553        - Aly Deines (2012-09-19)
     7554        """
     7555        cdef gen t0 = objtogen(x)
    75337556        pari_catch_sig_on()
    75347557        return P.new_gen(nfhnf(self.g, t0.g))
    75357558
     
    76617684        return P.new_gen(nfsubfields(self.g, d))
    76627685
    76637686    def rnfcharpoly(self, T, a, v='x'):
    7664         cdef gen t0 = P(T)
    7665         cdef gen t1 = P(a)
    7666         cdef gen t2 = P(v)
     7687        cdef gen t0 = objtogen(T)
     7688        cdef gen t1 = objtogen(a)
     7689        cdef gen t2 = objtogen(v)
    76677690        pari_catch_sig_on()
    76687691        return P.new_gen(rnfcharpoly(self.g, t0.g, t1.g, gvar(t2.g)))
    76697692
    76707693    def rnfdisc(self, x):
    7671         cdef gen t0 = P(x)
     7694        cdef gen t0 = objtogen(x)
    76727695        pari_catch_sig_on()
    76737696        return P.new_gen(rnfdiscf(self.g, t0.g))
    76747697
    76757698    def rnfeltabstorel(self, x):
    7676         cdef gen t0 = P(x)
     7699        cdef gen t0 = objtogen(x)
    76777700        pari_catch_sig_on()
    76787701        return P.new_gen(rnfelementabstorel(self.g, t0.g))
    76797702
    76807703    def rnfeltreltoabs(self, x):
    7681         cdef gen t0 = P(x)
     7704        cdef gen t0 = objtogen(x)
    76827705        pari_catch_sig_on()
    76837706        return P.new_gen(rnfelementreltoabs(self.g, t0.g))
    76847707
    76857708    def rnfequation(self, poly, long flag=0):
    7686         cdef gen t0 = P(poly)
     7709        cdef gen t0 = objtogen(poly)
    76877710        pari_catch_sig_on()
    76887711        return P.new_gen(rnfequation0(self.g, t0.g, flag))
    76897712
    76907713    def rnfidealabstorel(self, x):
    7691         cdef gen t0 = P(x)
     7714        cdef gen t0 = objtogen(x)
    76927715        pari_catch_sig_on()
    76937716        return P.new_gen(rnfidealabstorel(self.g, t0.g))
    76947717
     
    77137736            sage: rnf.rnfidealdown(P)
    77147737            [2, 0; 0, 2]
    77157738        """
    7716         cdef gen t0 = P(x)
     7739        cdef gen t0 = objtogen(x)
    77177740        pari_catch_sig_on()
    77187741        return P.new_gen(rnfidealdown(self.g, t0.g))
    77197742
    77207743    def rnfidealhnf(self, x):
    7721         cdef gen t0 = P(x)
     7744        cdef gen t0 = objtogen(x)
    77227745        pari_catch_sig_on()
    77237746        return P.new_gen(rnfidealhermite(self.g, t0.g))
    77247747
    77257748    def rnfidealnormrel(self, x):
    7726         cdef gen t0 = P(x)
     7749        cdef gen t0 = objtogen(x)
    77277750        pari_catch_sig_on()
    77287751        return P.new_gen(rnfidealnormrel(self.g, t0.g))
    77297752
    77307753    def rnfidealreltoabs(self, x):
    7731         cdef gen t0 = P(x)
     7754        cdef gen t0 = objtogen(x)
    77327755        pari_catch_sig_on()
    77337756        return P.new_gen(rnfidealreltoabs(self.g, t0.g))
    77347757
    77357758    def rnfidealtwoelt(self, x):
    7736         cdef gen t0 = P(x)
     7759        cdef gen t0 = objtogen(x)
    77377760        pari_catch_sig_on()
    77387761        return P.new_gen(rnfidealtwoelement(self.g, t0.g))
    77397762
     
    77497772            sage: g = x^5 - x^2 + y
    77507773            sage: L = K.rnfinit(g)
    77517774        """
    7752         cdef gen t0 = P(poly)
     7775        cdef gen t0 = objtogen(poly)
    77537776        pari_catch_sig_on()
    77547777        return P.new_gen(rnfinit(self.g, t0.g))
    77557778
    77567779    def rnfisfree(self, poly):
    7757         cdef gen t0 = P(poly)
     7780        cdef gen t0 = objtogen(poly)
    77587781        pari_catch_sig_on()
    77597782        r = rnfisfree(self.g, t0.g)
    77607783        pari_catch_sig_off()
     
    78137836        return P.new_gen(deriv(self.g, P.get_var(v)))
    78147837
    78157838    def eval(self, x):
    7816         cdef gen t0 = P(x)
     7839        cdef gen t0 = objtogen(x)
    78177840        pari_catch_sig_on()
    78187841        return P.new_gen(poleval(self.g, t0.g))
    78197842
     
    78347857            sage: pari(x^2 - 2).factornf(K.pari_polynomial("a"))
    78357858            [x + Mod(-4*a, 8*a^2 - 1), 1; x + Mod(4*a, 8*a^2 - 1), 1]
    78367859        """
    7837         cdef gen t0 = P(t)
     7860        cdef gen t0 = objtogen(t)
    78387861        pari_catch_sig_on()
    78397862        return P.new_gen(polfnf(self.g, t0.g))
    78407863
     
    78447867        polynomial x to precision r. flag is optional and may be set to 0
    78457868        (use round 4) or 1 (use Buchmann-Lenstra)
    78467869        """
    7847         cdef gen t0 = P(p)
     7870        cdef gen t0 = objtogen(p)
    78487871        pari_catch_sig_on()
    78497872        return P.new_gen(factorpadic0(self.g, t0.g, r, flag))
    78507873
     
    78557878        simple factormod, same except that only the degrees of the
    78567879        irreducible factors are given.
    78577880        """
    7858         cdef gen t0 = P(p)
     7881        cdef gen t0 = objtogen(p)
    78597882        pari_catch_sig_on()
    78607883        return P.new_gen(factormod0(self.g, t0.g, flag))
    78617884
     
    78727895        x.padicappr(a): p-adic roots of the polynomial x congruent to a mod
    78737896        p
    78747897        """
    7875         cdef gen t0 = P(a)
     7898        cdef gen t0 = objtogen(a)
    78767899        pari_catch_sig_on()
    78777900        return P.new_gen(padicappr(self.g, t0.g))
    78787901
     
    78877910            sage: x.newtonpoly(3)
    78887911            [1, 1, -1/3, -1/3, -1/3, -1/3, -1/3, -1/3]
    78897912        """
    7890         cdef gen t0 = P(p)
     7913        cdef gen t0 = objtogen(p)
    78917914        pari_catch_sig_on()
    78927915        return P.new_gen(newtonpoly(self.g, t0.g))
    78937916
     
    79117934        return P.new_gen(polcoeff0(self.g, n, P.get_var(var)))
    79127935
    79137936    def polcompositum(self, pol2, long flag=0):
    7914         cdef gen t0 = P(pol2)
     7937        cdef gen t0 = objtogen(pol2)
    79157938        pari_catch_sig_on()
    79167939        return P.new_gen(polcompositum0(self.g, t0.g, flag))
    79177940
     
    79687991            pari_catch_sig_on()
    79697992            return P.new_gen(galoisconj0(self.g, flag, NULL, prec_bits_to_words(precision)))
    79707993        else:
    7971             t0 = P(denom)
     7994            t0 = objtogen(denom)
    79727995            pari_catch_sig_on()
    79737996            return P.new_gen(galoisconj0(self.g, flag, t0.g, prec_bits_to_words(precision)))
    79747997
     
    79908013            sage: nf.nfroots(y^4 + 2)
    79918014            [Mod(-zz, zz^4 + 2), Mod(zz, zz^4 + 2)]
    79928015        """
    7993         cdef gen t0 = P(poly)
     8016        cdef gen t0 = objtogen(poly)
    79948017        pari_catch_sig_on()
    79958018        return P.new_gen(nfroots(self.g, t0.g))
    79968019       
     
    80008023        modulo p to a factorization modulo `p^e` using Hensel lift.
    80018024        The factors in y must be pairwise relatively prime modulo p.
    80028025        """
    8003         cdef gen t0 = P(y)
    8004         cdef gen t1 = P(p)
     8026        cdef gen t0 = objtogen(y)
     8027        cdef gen t1 = objtogen(p)
    80058028        pari_catch_sig_on()
    80068029        return P.new_gen(polhensellift(self.g, t0.g, t1.g, e))
    80078030
     
    80118034        non-constant polynomial, or False if f is reducible or constant.
    80128035        """
    80138036        pari_catch_sig_on()
    8014         return bool(self.new_gen(gisirreducible(self.g)))
    8015        
    8016        
     8037        cdef long t = itos(gisirreducible(self.g))
     8038        P.clear_stack()
     8039        return t != 0
     8040
    80178041    def pollead(self, v=-1):
    80188042        """
    80198043        self.pollead(v): leading coefficient of polynomial or series self,
     
    80348058            pari_catch_sig_on()
    80358059            return P.new_gen(polred0(self.g, flag, NULL))
    80368060        else:
    8037             t0 = P(fa)
     8061            t0 = objtogen(fa)
    80388062            pari_catch_sig_on()
    80398063            return P.new_gen(polred0(self.g, flag, t0.g))
    80408064
     
    80478071        return P.new_gen(polredbest(self.g, flag))
    80488072
    80498073    def polresultant(self, y, var=-1, flag=0):
    8050         cdef gen t0 = P(y)
     8074        cdef gen t0 = objtogen(y)
    80518075        pari_catch_sig_on()
    80528076        return P.new_gen(polresultant0(self.g, t0.g, P.get_var(var), flag))
    80538077
     
    80618085        return P.new_gen(roots0(self.g, flag, prec_bits_to_words(precision)))
    80628086   
    80638087    def polrootsmod(self, p, flag=0):
    8064         cdef gen t0 = P(p)
     8088        cdef gen t0 = objtogen(p)
    80658089        pari_catch_sig_on()
    80668090        return P.new_gen(rootmod0(self.g, t0.g, flag))
    80678091
    80688092    def polrootspadic(self, p, r=20):
    8069         cdef gen t0 = P(p)
     8093        cdef gen t0 = objtogen(p)
    80708094        pari_catch_sig_on()
    80718095        return P.new_gen(rootpadic(self.g, t0.g, r))
    80728096
    80738097    def polrootspadicfast(self, p, r=20):
    8074         cdef gen t0 = P(p)
     8098        cdef gen t0 = objtogen(p)
    80758099        pari_catch_sig_on()
    80768100        return P.new_gen(rootpadicfast(self.g, t0.g, r))
    80778101
    80788102    def polsturm(self, a, b):
    8079         cdef gen t0 = P(a)
    8080         cdef gen t1 = P(b)
     8103        cdef gen t0 = objtogen(a)
     8104        cdef gen t1 = objtogen(b)
    80818105        pari_catch_sig_on()
    80828106        n = sturmpart(self.g, t0.g, t1.g)
    80838107        pari_catch_sig_off()
     
    80908114        return n
    80918115
    80928116    def polsylvestermatrix(self, g):
    8093         cdef gen t0 = P(g)
     8117        cdef gen t0 = objtogen(g)
    80948118        pari_catch_sig_on()
    80958119        return P.new_gen(sylvestermatrix(self.g, t0.g))
    80968120
     
    80998123        return P.new_gen(polsym(self.g, n))
    81008124
    81018125    def serconvol(self, g):
    8102         cdef gen t0 = P(g)
     8126        cdef gen t0 = objtogen(g)
    81038127        pari_catch_sig_on()
    81048128        return P.new_gen(convol(self.g, t0.g))
    81058129
     
    81348158
    81358159
    81368160    def rnfisnorminit(self, polrel, long flag=2):
    8137         cdef gen t0 = P(polrel)
     8161        cdef gen t0 = objtogen(polrel)
    81388162        pari_catch_sig_on()
    81398163        return P.new_gen(rnfisnorminit(self.g, t0.g, flag))
    81408164
    81418165    def rnfisnorm(self, T, long flag=0):
    8142         cdef gen t0 = P(T)
     8166        cdef gen t0 = objtogen(T)
    81438167        pari_catch_sig_on()
    81448168        return P.new_gen(rnfisnorm(t0.g, self.g, flag))
    81458169
     
    81618185           This function uses the PARI row and column indexing, so the
    81628186           first row or column is indexed by 1 instead of 0.
    81638187        """
    8164         cdef gen t0 = P(y)
     8188        cdef gen t0 = objtogen(y)
    81658189        cdef gen t1
    81668190        if z is None:
    81678191            pari_catch_sig_on()
    81688192            return P.new_gen(shallowextract(self.g, t0.g))
    81698193        else:
    8170             t1 = P(z)
     8194            t1 = objtogen(z)
    81718195            pari_catch_sig_on()
    81728196            return P.new_gen(extract0(self.g, t0.g, t1.g))
    81738197
     
    82128236       
    82138237        EXAMPLES::
    82148238       
    8215             sage: pari('[1,2,3; 4,5,6;  7,8,9]').mattranspose()
     8239            sage: pari('[1,2,3; 4,5,6; 7,8,9]').mattranspose()
    82168240            [1, 4, 7; 2, 5, 8; 3, 6, 9]
    82178241        """
    8218         pari_catch_sig_on()       
     8242        pari_catch_sig_on()
    82198243        return self.new_gen(gtrans(self.g)).Mat()
    82208244
    82218245    def matadjoint(self):
     
    82298253            sage: pari('[a,b,c; d,e,f; g,h,i]').matadjoint()
    82308254            [(i*e - h*f), (-i*b + h*c), (f*b - e*c); (-i*d + g*f), i*a - g*c, -f*a + d*c; (h*d - g*e), -h*a + g*b, e*a - d*b]
    82318255        """
    8232         pari_catch_sig_on()       
     8256        pari_catch_sig_on()
    82338257        return self.new_gen(adj(self.g)).Mat()
    82348258
    82358259    def qflll(self, long flag=0):
     
    82768300        robust, slower implementation, valid for non integral quadratic
    82778301        forms.
    82788302        """
    8279         cdef gen t0 = P(B)
    8280         cdef gen t1 = P(max)
     8303        cdef gen t0 = objtogen(B)
     8304        cdef gen t1 = objtogen(max)
    82818305        pari_catch_sig_on()
    82828306        return P.new_gen(qfminim0(self.g, t0.g, t1.g, flag, precdl))
    82838307
     
    82888312        digits of flag mean 1: count vectors of even norm from 1 to 2B, 2:
    82898313        return a t_VECSMALL instead of a t_VEC.
    82908314        """
    8291         cdef gen t0 = P(B)
     8315        cdef gen t0 = objtogen(B)
    82928316        pari_catch_sig_on()
    82938317        return P.new_gen(qfrep0(self.g, t0.g, flag))
    82948318
     
    83158339            sage: pari('[1,1;1,-1]').matsolve(pari('[1;0]'))
    83168340            [1/2; 1/2]
    83178341        """
    8318         cdef gen t0 = P(B)
     8342        cdef gen t0 = objtogen(B)
    83198343        pari_catch_sig_on()
    83208344        return P.new_gen(gauss(self.g, t0.g))
    83218345   
     
    83618385            sage: M2.matsolvemod(9, pari('[2,45]~'), 1)
    83628386            [[1, 1]~, [-1, -4; 1, -5]]
    83638387        """
    8364         cdef gen t0 = P(D)
    8365         cdef gen t1 = P(B)
     8388        cdef gen t0 = objtogen(D)
     8389        cdef gen t1 = objtogen(B)
    83668390        pari_catch_sig_on()
    83678391        return P.new_gen(matsolvemod0(self.g, t0.g, t1.g, flag))
    83688392   
     
    83928416            sage: pari('[1,2,3;4,5,6;7,8,9]*Mod(1,2)').matker()
    83938417            [Mod(1, 2); Mod(0, 2); Mod(1, 2)]
    83948418        """
    8395         pari_catch_sig_on()       
     8419        pari_catch_sig_on()
    83968420        return self.new_gen(matker0(self.g, flag))
    83978421
    83988422    def matkerint(self, long flag=0):
     
    84408464            sage: pari('[1,2; 3,4]').matdet(1)
    84418465            -2
    84428466        """
    8443         pari_catch_sig_on()       
     8467        pari_catch_sig_on()
    84448468        return self.new_gen(det0(self.g, flag))
    84458469
    84468470    def trace(self):
     
    84498473       
    84508474        EXAMPLES::
    84518475       
    8452             sage: pari('[1,2; 3,4]').trace() 
     8476            sage: pari('[1,2; 3,4]').trace()
    84538477            5
    84548478        """
    8455         pari_catch_sig_on()       
     8479        pari_catch_sig_on()
    84568480        return self.new_gen(gtrace(self.g))
    84578481
    84588482    def mathnf(self, flag=0):
     
    85118535            sage: pari(M).mathnfmod(12)
    85128536            [1, 0, 0; 0, 2, 0; 0, 0, 6]
    85138537        """
    8514         cdef gen t0 = P(d)
     8538        cdef gen t0 = objtogen(d)
    85158539        pari_catch_sig_on()
    85168540        return P.new_gen(hnfmod(self.g, t0.g))
    85178541
     
    85408564            sage: pari(M).mathnfmod(6)
    85418565            [1, 0, 0; 0, 1, 0; 0, 0, 6]
    85428566        """
    8543         cdef gen t0 = P(d)
     8567        cdef gen t0 = objtogen(d)
    85448568        pari_catch_sig_on()
    85458569        return P.new_gen(hnfmodid(self.g, t0.g))
    85468570
     
    86638687            else:
    86648688                return _factor_int_when_pari_factor_failed(self, z)
    86658689        pari_catch_sig_on()
    8666         return P.new_gen(factor0(self.g, limit)) 
     8690        return P.new_gen(factor0(self.g, limit))
    86678691           
    86688692
    86698693    ###########################################
     
    86718695    ###########################################
    86728696
    86738697    def hilbert(x, y, p):
    8674         cdef gen t0 = P(y)
    8675         cdef gen t1 = P(p)
     8698        cdef gen t0 = objtogen(y)
     8699        cdef gen t1 = objtogen(p)
    86768700        pari_catch_sig_on()
    86778701        ret = hilbert0(x.g, t0.g, t1.g)
    86788702        pari_catch_sig_off()
    86798703        return ret
    86808704       
    86818705    def chinese(self, y):
    8682         cdef gen t0 = P(y)
     8706        cdef gen t0 = objtogen(y)
    86838707        pari_catch_sig_on()
    86848708        return P.new_gen(chinese(self.g, t0.g))
    86858709
    86868710    def order(self):
    8687         pari_catch_sig_on()       
     8711        pari_catch_sig_on()
    86888712        return P.new_gen(order(self.g))
    86898713   
    86908714    def znprimroot(self):
     
    87148738            sage: pari(2*109^10).znprimroot()
    87158739            Mod(236736367459211723407, 473472734918423446802)
    87168740        """
    8717         pari_catch_sig_on()       
     8741        pari_catch_sig_on()
    87188742        return P.new_gen(znprimroot0(self.g))
    87198743       
    87208744    def __abs__(self):
    87218745        return self.abs()
    87228746   
    87238747    def norm(gen self):
    8724         pari_catch_sig_on()       
     8748        pari_catch_sig_on()
    87258749        return P.new_gen(gnorm(self.g))
    87268750   
    87278751    def nextprime(gen self, bint add_one=0):
     
    87418765            sage: pari(2^100).nextprime()
    87428766            1267650600228229401496703205653
    87438767        """
    8744         pari_catch_sig_on()       
     8768        pari_catch_sig_on()
    87458769        if add_one:
    87468770            return P.new_gen(gnextprime(gaddsg(1,self.g)))
    87478771        return P.new_gen(gnextprime(self.g))
     
    88158839            sage: f.subst(x, "xyz")^2
    88168840            xyz^6 + 34*xyz^4 + 6*xyz^3 + 289*xyz^2 + 102*xyz + 9
    88178841        """
    8818         cdef gen t0 = P(z)
    8819         pari_catch_sig_on()
    8820         cdef long n = P.get_var(var)
    8821         return P.new_gen(gsubst(self.g, n, t0.g))
     8842        cdef gen t0 = objtogen(z)
     8843        pari_catch_sig_on()
     8844        return P.new_gen(gsubst(self.g, P.get_var(var), t0.g))
    88228845
    88238846    def substpol(self, y, z):
    8824         cdef gen t0 = P(y)
    8825         cdef gen t1 = P(z)
     8847        cdef gen t0 = objtogen(y)
     8848        cdef gen t1 = objtogen(z)
    88268849        pari_catch_sig_on()
    88278850        return P.new_gen(gsubstpol(self.g, t0.g, t1.g))
    88288851
     
    88638886            sage: Lpari.bnf_get_cyc()  # We still have a bnf after substituting
    88648887            [2]
    88658888        """
    8866         cdef gen t0 = P(z)
     8889        cdef gen t0 = objtogen(z)
    88678890        pari_catch_sig_on()
    88688891        return P.new_gen(gsubst(self.g, gvar(self.g), t0.g))
    88698892
     
    88728895        return P.new_gen(tayl(self.g, P.get_var(v), precdl))
    88738896
    88748897    def thue(self, rhs, ne):
    8875         cdef gen t0 = P(rhs)
    8876         cdef gen t1 = P(ne)
     8898        cdef gen t0 = objtogen(rhs)
     8899        cdef gen t1 = objtogen(ne)
    88778900        pari_catch_sig_on()
    88788901        return P.new_gen(thue(self.g, t0.g, t1.g))
    88798902
     
    88848907        Lagrange interpolation) or 2 (use Hessenberg form), 0 being the
    88858908        default.
    88868909        """
    8887         pari_catch_sig_on()       
    8888         return P.new_gen(charpoly0(self.g, P.get_var(var), flag)) 
     8910        pari_catch_sig_on()
     8911        return P.new_gen(charpoly0(self.g, P.get_var(var), flag))
    88898912
    88908913
    88918914    def kronecker(gen self, y):
    8892         cdef gen t0 = P(y)
    8893         pari_catch_sig_on()       
     8915        cdef gen t0 = objtogen(y)
     8916        pari_catch_sig_on()
    88948917        return P.new_gen(gkronecker(self.g, t0.g))
    88958918
    88968919
     
    89598982        P(self[i]) = ya[i] for all i). Also return an error estimate on the
    89608983        returned value.
    89618984        """
    8962         cdef gen t0 = P(ya)
    8963         cdef gen t1 = P(x)
     8985        cdef gen t0 = objtogen(ya)
     8986        cdef gen t1 = objtogen(x)
    89648987        cdef GEN dy, g
    89658988        pari_catch_sig_on()
    89668989        g = polint(self.g, t0.g, t1.g, &dy)
     
    89869009        return P.new_gen(algdep(self.g, n))
    89879010
    89889011    def concat(self, y):
    8989         cdef gen t0 = P(y)
     9012        cdef gen t0 = objtogen(y)
    89909013        pari_catch_sig_on()
    89919014        return P.new_gen(concat(self.g, t0.g))
    89929015
     
    89959018        return P.new_gen(lindep0(self.g, flag))
    89969019
    89979020    def listinsert(self, obj, long n):
    8998         cdef gen t0 = P(obj)
     9021        cdef gen t0 = objtogen(obj)
    89999022        pari_catch_sig_on()
    90009023        return P.new_gen(listinsert(self.g, t0.g, n))
    90019024
    90029025    def listput(self, obj, long n):
    9003         cdef gen t0 = P(obj)
     9026        cdef gen t0 = objtogen(obj)
    90049027        pari_catch_sig_on()
    90059028        return P.new_gen(listput(self.g, t0.g, n))
    90069029
     
    91139136            sage: E.ellwp(1, flag=1)
    91149137            [13.9658695257485 + 0.E-18*I, 50.5619300880073 ... E-18*I]
    91159138        """
    9116         cdef gen t0 = P(z)
     9139        cdef gen t0 = objtogen(z)
    91179140        pari_catch_sig_on()
    91189141        cdef long dprec
    91199142        dprec = gprecision(t0.g)
     
    91449167            sage: f.ellisoncurve([-1,4])
    91459168            True
    91469169        """
    9147         cdef gen t0 = P(y)
     9170        cdef gen t0 = objtogen(y)
    91489171        pari_catch_sig_on()
    91499172        return P.new_gen(ellchangepoint(self.g, t0.g))
    91509173
     
    92319254    pass
    92329255
    92339256
     9257@cython.final
    92349258cdef class PariInstance(sage.structure.parent_base.ParentWithBase):
    92359259    def __init__(self, long size=1000000, unsigned long maxprime=500000):
    92369260        """
     
    94349458    def get_series_precision(self):
    94359459        return precdl
    94369460
    9437     cdef void clear_stack(self):
     9461    cdef inline void clear_stack(self):
    94389462        """
    94399463        Call ``pari_catch_sig_off()``, and clear the entire PARI stack
    94409464        if we are leaving the outermost ``pari_catch_sig_on() ...
     
    94469470            avma = mytop
    94479471        pari_catch_sig_off()
    94489472
    9449     cdef gen new_gen(self, GEN x):
     9473    cdef inline gen new_gen(self, GEN x):
    94509474        """
    94519475        Create a new gen wrapping `x`, then call ``clear_stack()``.
    94529476        """
     
    94549478        self.clear_stack()
    94559479        return g
    94569480
    9457     cdef gen new_gen_noclear(self, GEN x):
     9481    cdef inline gen new_gen_noclear(self, GEN x):
    94589482        """
    94599483        Create a new gen, but don't free any memory on the stack and don't
    94609484        call pari_catch_sig_off().
     
    96379661        cdef gen t0 = self(re)
    96389662        cdef gen t1 = self(im)
    96399663        pari_catch_sig_on()
    9640         cdef GEN cp = mkcomplex(t0.g, t1.g)
    9641         return self.new_gen(cp)
     9664        return self.new_gen(mkcomplex(t0.g, t1.g))
    96429665
    96439666    cdef GEN deepcopy_to_python_heap(self, GEN x, pari_sp* address):
    96449667        return deepcopy_to_python_heap(x, address)
     
    97009723
    97019724        See :func:`pari` for more examples.
    97029725        """
    9703         cdef GEN g
    9704         cdef int length, i
    9705         cdef mpz_t mpz_int
    9706         cdef gen v
    9707 
    9708         if isinstance(s, gen):
    9709             return s
    9710         elif PyObject_HasAttrString(s, "_pari_"):
    9711             return s._pari_()
    9712 
    9713         # Check basic Python types
    9714         if PyInt_Check(s):
    9715             pari_catch_sig_on()
    9716             return self.new_gen(stoi(PyInt_AS_LONG(s)))
    9717         if PyBool_Check(s):
    9718             return self.PARI_ONE if s else self.PARI_ZERO
    9719         if PyLong_Check(s):
    9720             pari_catch_sig_on()
    9721             mpz_init(mpz_int)
    9722             mpz_set_pylong(mpz_int, s)
    9723             g = self._new_GEN_from_mpz_t(mpz_int)
    9724             mpz_clear(mpz_int)
    9725             return self.new_gen(g)
    9726         if PyFloat_Check(s):
    9727             pari_catch_sig_on()
    9728             return self.new_gen(dbltor(PyFloat_AS_DOUBLE(s)))
    9729         if PyComplex_Check(s):
    9730             pari_catch_sig_on()
    9731             g = cgetg(3, t_COMPLEX)
    9732             set_gel(g, 1, dbltor(PyComplex_RealAsDouble(s)))
    9733             set_gel(g, 2, dbltor(PyComplex_ImagAsDouble(s)))
    9734             return self.new_gen(g)
    9735 
    9736         if isinstance(s, (types.ListType, types.XRangeType,
    9737                             types.TupleType, types.GeneratorType)):
    9738             length = len(s)
    9739             v = self._empty_vector(length)
    9740             for i from 0 <= i < length:
    9741                 v[i] = self(s[i])
    9742             return v
    9743 
    9744         t = str(s)
    9745         pari_catch_sig_on()
    9746         g = gp_read_str(t)
    9747         if g == gnil:
    9748             pari_catch_sig_off()
    9749             return None
    9750         return self.new_gen(g)
     9726        return objtogen(s)
    97519727
    97529728    cdef GEN _new_GEN_from_mpz_t_matrix(self, mpz_t** B, Py_ssize_t nr, Py_ssize_t nc):
    97539729        r"""
     
    1053510511        sig_off()
    1053610512   
    1053710513
     10514cdef gen objtogen(s):
     10515    """Convert any Sage/Python object to a PARI gen"""
     10516    cdef GEN g
     10517    cdef Py_ssize_t length, i
     10518    cdef mpz_t mpz_int
     10519    cdef gen v
     10520
     10521    if isinstance(s, gen):
     10522        return s
     10523    try:
     10524        return s._pari_()
     10525    except AttributeError:
     10526        pass
     10527
     10528    # Check basic Python types. Start with strings, which are a very
     10529    # common case.
     10530    if PyString_Check(s):
     10531        pari_catch_sig_on()
     10532        g = gp_read_str(PyString_AsString(s))
     10533        if g == gnil:
     10534            P.clear_stack()
     10535            return None
     10536        return P.new_gen(g)
     10537    if PyInt_Check(s):
     10538        pari_catch_sig_on()
     10539        return P.new_gen(stoi(PyInt_AS_LONG(s)))
     10540    if PyBool_Check(s):
     10541        return P.PARI_ONE if s else P.PARI_ZERO
     10542    if PyLong_Check(s):
     10543        pari_catch_sig_on()
     10544        mpz_init(mpz_int)
     10545        mpz_set_pylong(mpz_int, s)
     10546        g = P._new_GEN_from_mpz_t(mpz_int)
     10547        mpz_clear(mpz_int)
     10548        return P.new_gen(g)
     10549    if PyFloat_Check(s):
     10550        pari_catch_sig_on()
     10551        return P.new_gen(dbltor(PyFloat_AS_DOUBLE(s)))
     10552    if PyComplex_Check(s):
     10553        pari_catch_sig_on()
     10554        g = cgetg(3, t_COMPLEX)
     10555        set_gel(g, 1, dbltor(PyComplex_RealAsDouble(s)))
     10556        set_gel(g, 2, dbltor(PyComplex_ImagAsDouble(s)))
     10557        return P.new_gen(g)
     10558
     10559    if isinstance(s, (types.ListType, types.XRangeType,
     10560                        types.TupleType, types.GeneratorType)):
     10561        length = len(s)
     10562        v = P._empty_vector(length)
     10563        for i from 0 <= i < length:
     10564            v[i] = objtogen(s[i])
     10565        return v
     10566
     10567    # Simply use the string representation
     10568    return objtogen(str(s))
     10569
     10570
    1053810571cdef GEN deepcopy_to_python_heap(GEN x, pari_sp* address):
    1053910572    cdef size_t s = <size_t> gsizebyte(x)
    1054010573    cdef pari_sp tmp_bot, tmp_top