Ticket #4304: ntl_decl_refactor.patch

File ntl_decl_refactor.patch, 80.5 KB (added by malb, 13 years ago)
  • sage/libs/ntl/decl.pxi

    # HG changeset patch
    # User Martin Albrecht <malb@informatik.uni-bremen.de>
    # Date 1224092351 -7200
    # Node ID 8e505e3fe795e0ca5228a82f744828f8eca69a6c
    # Parent  e16270e56d21625f8d21bd967b4f6cb13de954d4
    refactored/split up NTL's decl.pxi
    
    diff -r e16270e56d21 -r 8e505e3fe795 sage/libs/ntl/decl.pxi
    a b  
    55    void free(void *ptr)
    66
    77cdef extern from "ntl_wrap.h":
    8 
    98    long NTL_OVFBND
    109    bint NTL_OVERFLOW(long, long, long)
    1110
    12     # really, this is from NTL/ZZ.h
    13     #### ZZ_c
    14     ctypedef struct ZZ_c "struct ZZ":
    15         pass
     11from sage.libs.ntl.ntl_ZZ_decl cimport *, ZZ_c
     12from sage.libs.ntl.ntl_lzz_pX_decl cimport *, zz_pX_c, zz_pX_Modulus_c
     13from sage.libs.ntl.ntl_ZZ_pX_decl cimport *, ZZ_pX_c, ZZ_pX_Modulus_c
     14from sage.libs.ntl.ntl_ZZ_pContext_decl cimport *, ZZ_pContext_c
     15from sage.libs.ntl.ntl_ZZ_p_decl cimport *, ZZ_p_c
     16from sage.libs.ntl.ntl_vec_ZZ_p_decl cimport *, vec_ZZ_p_c
     17from sage.libs.ntl.ntl_ZZX_decl cimport *, ZZX_c
     18from sage.libs.ntl.ntl_lzz_pContext_decl cimport *, zz_pContext_c
     19from sage.libs.ntl.ntl_ZZ_pEContext_decl cimport *, ZZ_pEContext_c
     20from sage.libs.ntl.ntl_ZZ_pE_decl cimport *, ZZ_pE_c
     21from sage.libs.ntl.ntl_vec_ZZ_pE_decl cimport *, vec_ZZ_pE_c
     22from sage.libs.ntl.ntl_ZZ_pEX_decl cimport *, ZZ_pEX_c
    1623
    17     ctypedef struct vec_ZZ_c "vec_ZZ":
    18         ZZ_c RawGet(long i)
    19         ZZ_c *elts()
    20         long length()
    21 
    22     void del_charstar(char*)
    23 
    24     # Some boiler-plate
    25     ZZ_c* ZZ_new "New<ZZ>"()
    26     ZZ_c* ZZ_construct "Construct<ZZ>"(void *mem)
    27     void ZZ_destruct "Destruct<ZZ>"(ZZ_c *mem)
    28     void ZZ_delete "Delete<ZZ>"(ZZ_c *mem)
    29     void ZZ_from_str "_from_str<ZZ>"(ZZ_c* dest, char* s)
    30     object ZZ_to_PyString "_to_PyString<ZZ>"(ZZ_c *x)
    31     int ZZ_equal "_equal<ZZ>"(ZZ_c x, ZZ_c y)
    32 
    33     void ZZ_conv_from_int "conv"(ZZ_c x, int i)
    34     void ZZ_conv_to_int "conv"(int i, ZZ_c x)
    35     void ZZ_conv_from_long "conv"(ZZ_c x, long l)
    36     void ZZ_conv_to_long "conv"(long l, ZZ_c x)
    37     void ZZ_to_mpz(mpz_t* output, ZZ_c* x)
    38     void mpz_to_ZZ(ZZ_c *output, mpz_t* x)
    39     cdef int ZZ_to_int(ZZ_c* x)
    40     cdef ZZ_c* int_to_ZZ(int value)
    41     cdef void ZZ_set_from_int(ZZ_c* x, int value)
    42 
    43     long ZZ_sign "sign"(ZZ_c a)
    44     long ZZ_IsZero "IsZero"(ZZ_c a)
    45     long ZZ_IsOne "IsOne"(ZZ_c a)
    46     long ZZ_compare "compare"(ZZ_c a, ZZ_c b)
    47     void ZZ_add "add"( ZZ_c x, ZZ_c a, ZZ_c b)
    48     void ZZ_add_long "add"(ZZ_c x, ZZ_c a, long b)
    49     void ZZ_sub "sub"( ZZ_c x, ZZ_c a, ZZ_c b)
    50     void ZZ_sub_long "sub"(ZZ_c x, long a, ZZ_c b)
    51     void ZZ_negate "negate"(ZZ_c x, ZZ_c a)
    52     void ZZ_abs "abs"(ZZ_c x, ZZ_c a)
    53 
    54     void ZZ_mul "mul"( ZZ_c x, ZZ_c a, ZZ_c b)
    55     void ZZ_mul_long "mul"( ZZ_c x, ZZ_c a, long b)
    56     void ZZ_sqr "sqr"(ZZ_c x, ZZ_c a)
    57 
    58     void ZZ_DivRem "DivRem"(ZZ_c q, ZZ_c r, ZZ_c a, ZZ_c b)
    59     void ZZ_div "div"( ZZ_c x, ZZ_c a, ZZ_c b)
    60     void ZZ_rem "rem"( ZZ_c r, ZZ_c a, ZZ_c b)
    61     long ZZ_DivRem_long "DivRem"(ZZ_c q, ZZ_c a, long b)
    62     long ZZ_rem_long "rem"(ZZ_c a, long b)
    63     long ZZ_divide "divide"(ZZ_c q, ZZ_c a, ZZ_c b)
    64     long ZZ_divide_long "divide"(ZZ_c q, ZZ_c a, long b)
    65     long ZZ_divide_test "divide"(ZZ_c a, ZZ_c b)
    66     long ZZ_divide_test_long "divide"(ZZ_c a, long b)
    67 
    68     void ZZ_GCD "GCD"(ZZ_c d, ZZ_c a, ZZ_c b)
    69     void ZZ_XGCD "XGCD"(ZZ_c d, ZZ_c s, ZZ_c t, ZZ_c a, ZZ_c b)
    70 
    71     void ZZ_AddMod "AddMod"(ZZ_c x, ZZ_c a, ZZ_c b, ZZ_c n)
    72     void ZZ_SubMod "SubMod"(ZZ_c x, ZZ_c a, ZZ_c b, ZZ_c n)
    73     void ZZ_NegateMod "NegateMod"(ZZ_c x, ZZ_c a, ZZ_c n)
    74     void ZZ_MulMod "MulMod"(ZZ_c x, ZZ_c a, ZZ_c b, ZZ_c n)
    75     void ZZ_SqrMod "SqrMod"(ZZ_c x, ZZ_c a, ZZ_c n)
    76     void ZZ_InvMod "InvMod"(ZZ_c x, ZZ_c a, ZZ_c n)
    77     long ZZ_InvModStatus "InvModStatus"(ZZ_c x, ZZ_c a, ZZ_c n)
    78     void ZZ_PowerMod "PowerMod"(ZZ_c x, ZZ_c a, ZZ_c e, ZZ_c n)
    79     void ZZ_PowerMod_long "PowerMod"(ZZ_c x, ZZ_c a, long e, ZZ_c n)
    80 
    81     void ZZ_LeftShift "LeftShift"(ZZ_c x, ZZ_c a, long n)
    82     void ZZ_RightShift "RightShift"(ZZ_c x, ZZ_c a, long n)
    83 
    84     long ZZ_MakeOdd "MakeOdd"(ZZ_c x)
    85     long ZZ_NumTwos "NumTwos"(ZZ_c x)
    86     long ZZ_IsOdd "IsOdd"(ZZ_c a)
    87     long ZZ_NumBits "NumBits"(ZZ_c a)
    88     long ZZ_bit "bit"(ZZ_c a, long k)
    89     void ZZ_trunc "trunc"(ZZ_c x, ZZ_c a, long k)
    90     void ZZ_SetBit "SetBit"(ZZ_c x, long p)
    91     void ZZ_SwitchBit "SwitchBit"(ZZ_c x, long p)
    92     void ZZ_weight "weight"(ZZ_c a)
    93     void ZZ_bit_and "bit_and"(ZZ_c x, ZZ_c a, ZZ_c b)
    94     void ZZ_bit_or "bit_or"(ZZ_c x, ZZ_c a, ZZ_c b)
    95     void ZZ_bit_xor "bit_xor"(ZZ_c x, ZZ_c a, ZZ_c b)
    96 
    97     void ZZ_SetSeed "SetSeed"(ZZ_c s)
    98     void ZZ_RandomBnd "RandomBnd"(ZZ_c x, ZZ_c n)
    99     void ZZ_RandomBits "RandomBits"(ZZ_c x, long l)
    100 
    101     long ZZ_CRT "CRT"(ZZ_c a, ZZ_c p, ZZ_c A, ZZ_c P)
    102 
    103     long ZZ_ReconstructRational "ReconstructRational"(ZZ_c a, ZZ_c b, ZZ_c x, ZZ_c m, ZZ_c a_bound, ZZ_c b_bound)
    104 
    105     void ZZ_GenPrime "GenPrime"(ZZ_c n, long l, long err)
    106     void ZZ_GenGermainPrime "GenGermainPrime"(ZZ_c n, long l, long err)
    107     long ZZ_ProbPrime "ProbPrime"(ZZ_c n, long NumTrials)
    108     void ZZ_RandomPrime "RandomPrime"(ZZ_c n, long l, long NumTrials)
    109     void ZZ_NextPrime "NextPrime"(ZZ_c n, ZZ_c m, long NumTrials)
    110     long ZZ_MillerWitness "MillerWitness"(ZZ_c n, ZZ_c w)
    111    
    112     void ZZ_power "power"(ZZ_c t, ZZ_c x, long e)
    113     void ZZ_power2 "power2"(ZZ_c x, long e)
    114 
    115     void ZZ_SqrRoot "SqrRoot"(ZZ_c x, ZZ_c a)
    116 
    117     long ZZ_Jacobi "Jacobi"(ZZ_c a, ZZ_c n)
    118     void ZZ_SqrRootMod "SqrRootMod"(ZZ_c x, ZZ_c a, ZZ_c n)
    119 
    120     long ZZ_remove(ZZ_c x, ZZ_c a, ZZ_c p) # a la mpz_remove.  Written in ntl_wrap.cpp.
    121    
    122     # Random-number generation
    123     #void setSeed(ZZ_c* x)
    124     #ZZ_c* ZZ_randomBnd(ZZ_c* x)
    125     #ZZ_c* ZZ_randomBits(long n)
    126 
    127 
    128     #### ZZ_pContext_c
    129     ctypedef struct ZZ_pContext_c "struct ZZ_pContext":
    130         void (*restore)()
    131 
    132     ZZ_pContext_c* ZZ_pContext_new "New<ZZ_pContext>"()
    133     ZZ_pContext_c* ZZ_pContext_construct "Construct<ZZ_pContext>"(void *mem)
    134     ZZ_pContext_c* ZZ_pContext_new_ZZ "ZZ_pContext_new"(ZZ_c* p)
    135     ZZ_pContext_c* ZZ_pContext_construct_ZZ "ZZ_pContext_construct"(void *mem, ZZ_c* p)
    136     void ZZ_pContext_destruct "Destruct<ZZ_pContext>"(ZZ_pContext_c *mem)
    137     void ZZ_pContext_delete "Delete<ZZ_pContext>"(ZZ_pContext_c *mem)
    138 
    139     #### ZZ_p_c
    140     ctypedef struct ZZ_p_c "struct ZZ_p":
    141         pass
    142 
    143     # Some boiler-plate
    144     ZZ_p_c* ZZ_p_new "New<ZZ_p>"()
    145     ZZ_p_c* ZZ_p_construct "Construct<ZZ_p>"(void *mem)
    146     void ZZ_p_destruct "Destruct<ZZ_p>"(ZZ_p_c *mem)
    147     void ZZ_p_delete "Delete<ZZ_p>"(ZZ_p_c *mem)
    148     void ZZ_p_from_str "_from_str<ZZ_p>"(ZZ_p_c* dest, char* s)
    149     object ZZ_p_to_PyString "_to_PyString<ZZ_p>"(ZZ_p_c *x)
    150     int ZZ_p_equal "_equal<ZZ_p>"(ZZ_p_c x, ZZ_p_c y)
    151 
    152     char* ZZ_p_to_str(ZZ_p_c* x)
    153     void ZZ_p_add "add"( ZZ_p_c x, ZZ_p_c a, ZZ_p_c b)
    154     void ZZ_p_sub "sub"( ZZ_p_c x, ZZ_p_c a, ZZ_p_c b)
    155     void ZZ_p_mul "mul"( ZZ_p_c x, ZZ_p_c a, ZZ_p_c b)
    156     void ZZ_p_mul_long "mul"( ZZ_p_c x, ZZ_p_c a, long b)
    157     void ZZ_p_div "div"( ZZ_p_c x, ZZ_p_c a, ZZ_p_c b)
    158     void ZZ_p_negate "negate"(ZZ_p_c x, ZZ_p_c a)
    159     void ZZ_p_power "power"(ZZ_p_c t, ZZ_p_c x, long e)
    160     int ZZ_p_IsOne "IsOne"(ZZ_p_c x)
    161     int ZZ_p_IsZero "IsZero"(ZZ_p_c x)
    162     ZZ_c ZZ_p_rep "rep"(ZZ_p_c z)
    163     ZZ_p_c* ZZ_p_neg(ZZ_p_c* x)
    164     void ntl_ZZ_set_modulus(ZZ_c* x)
    165     void ZZ_p_inv "inv"(ZZ_p_c r, ZZ_p_c x)
    166     void ZZ_p_random "random"(ZZ_p_c r)
    167     ZZ_p_c long_to_ZZ_p "to_ZZ_p"(long i)
    168     ZZ_p_c ZZ_to_ZZ_p "to_ZZ_p"(ZZ_c i)
    169     int ZZ_p_to_int(ZZ_p_c x)
    170     ZZ_p_c int_to_ZZ_p(int i)
    171     void ZZ_p_modulus(ZZ_c* mod, ZZ_p_c* x)
    172    
    173     #### vec_ZZ_p_c
    174     ctypedef struct vec_ZZ_p_c "struct vec_ZZ_p":
    175         pass
    176 
    177     #### ZZX_c
    178 
    179     # really, this is from NTL/ZZX.h
    180     ctypedef struct ZZX_c "struct ZZX":
    181         vec_ZZ_c rep
    182 
    183     ctypedef struct pair_ZZX_long_c "pair_ZZX_long":
    184         ZZX_c a
    185         long b
    186 
    187     ctypedef struct vec_pair_ZZX_long_c "vec_pair_ZZX_long":
    188         pair_ZZX_long_c RawGet(long i)
    189         long length()
    190 
    191     # Some boiler-plate
    192     ZZX_c* ZZX_new "New<ZZX>"()
    193     ZZX_c* ZZX_construct "Construct<ZZX>"(void *mem)
    194     void ZZX_destruct "Destruct<ZZX>"(ZZX_c *mem)
    195     void ZZX_swap "swap"(ZZX_c x, ZZX_c y)
    196     void ZZX_delete "Delete<ZZX>"(ZZX_c *mem)
    197     void ZZX_from_str "_from_str<ZZX>"(ZZX_c* dest, char* s)
    198     object ZZX_to_PyString "_to_PyString<ZZX>"(ZZX_c *x)
    199     int ZZX_equal "_equal<ZZX>"(ZZX_c x, ZZX_c y)
    200 
    201     void ZZX_PseudoRem "PseudoRem"(ZZX_c x, ZZX_c a, ZZX_c b)
    202     ZZ_c ZZX_LeadCoeff "LeadCoeff"(ZZX_c x)
    203     ZZ_c ZZX_ConstTerm "ConstTerm"(ZZX_c x)
    204     ZZ_c ZZX_coeff "coeff"(ZZX_c a, long i)
    205     void ZZX_SetCoeff "SetCoeff"(ZZX_c x, long i, ZZ_c a)
    206     void ZZX_SetCoeff_long "SetCoeff"(ZZX_c x, long i, long a)
    207     long IsZero_ZZX "IsZero"(ZZX_c a)
    208     # f must be monic!
    209     void ZZX_MulMod "MulMod"(ZZX_c x, ZZX_c a, ZZX_c b, ZZX_c f)
    210     void ZZX_mul_long "mul"( ZZX_c x, ZZX_c a, long b)
    211     void ZZX_mul_ZZ "mul"( ZZX_c x, ZZX_c a, ZZ_c b)
    212     void ZZX_mul "mul"( ZZX_c x, ZZX_c a, ZZX_c b)
    213     void ZZX_add "add"( ZZX_c x, ZZX_c a, ZZX_c b)
    214     void ZZX_sub "sub"( ZZX_c x, ZZX_c a, ZZX_c b)
    215     void ZZX_negate "negate"( ZZX_c x, ZZX_c a)
    216     void ZZX_div_ZZ "div"( ZZX_c x, ZZX_c a, ZZ_c b)
    217     long ZZX_deg "deg"( ZZX_c x )
    218     void ZZX_rem "rem"(ZZX_c r, ZZX_c a, ZZX_c b)
    219     void ZZX_XGCD "XGCD"(ZZ_c r, ZZX_c s, ZZX_c t, ZZX_c a, ZZX_c b, long deterministic)
    220     void ZZX_content "content"(ZZ_c d, ZZX_c f)
    221     void ZZX_factor "factor"(ZZ_c c, vec_pair_ZZX_long_c factors, ZZX_c f, long verbose, long bnd)
    222 
    223     void ZZX_squarefree_decomposition(ZZX_c*** v, long** e, long* n, ZZX_c* x)
    224 
    225     char* ZZX_repr(ZZX_c* x)
    226     ## for cleaning up after ZZX_repr:
    227     void cpp_delete_array "delete []"(char *str)
    228     ZZX_c* ZZX_copy(ZZX_c* x)
    229     ZZX_c* ZZX_div(ZZX_c* x, ZZX_c* y, int* divisible)
    230     void ZZX_quo_rem(ZZX_c* x, ZZX_c* other, ZZX_c** r, ZZX_c** q)
    231     ZZX_c* ZZX_square(ZZX_c* x)
    232     int ZZX_IsZero "IsZero"(ZZX_c x)
    233     int ZZX_IsOne "IsOne"(ZZX_c x)
    234     int ZZX_is_monic(ZZX_c* x)
    235     ZZX_c* ZZX_neg(ZZX_c* x)
    236     ZZX_c* ZZX_left_shift(ZZX_c* x, long n)
    237     ZZX_c* ZZX_right_shift(ZZX_c* x, long n)
    238     ZZX_c* ZZX_primitive_part(ZZX_c* x)
    239     void ZZX_pseudo_quo_rem(ZZX_c* x, ZZX_c* y, ZZX_c** r, ZZX_c** q)
    240     ZZX_c* ZZX_gcd(ZZX_c* x, ZZX_c* y)
    241     ZZX_c* ZZX_xgcd(ZZX_c* x, ZZX_c* y, ZZ_c** r, ZZX_c** s, ZZX_c** t, int proof)
    242     void ZZX_set_x(ZZX_c* x)
    243     int ZZX_is_x(ZZX_c* x)
    244     ZZX_c* ZZX_derivative(ZZX_c* x)
    245     ZZX_c* ZZX_reverse(ZZX_c* x)
    246     ZZX_c* ZZX_reverse_hi(ZZX_c* x, long hi)
    247     ZZX_c* ZZX_truncate(ZZX_c* x, long m)
    248     ZZX_c* ZZX_multiply_and_truncate(ZZX_c* x, ZZX_c* y, long m)
    249     ZZX_c* ZZX_square_and_truncate(ZZX_c* x, long m)
    250     ZZX_c* ZZX_invert_and_truncate(ZZX_c* x, long m)
    251     ZZX_c* ZZX_multiply_mod(ZZX_c* x, ZZX_c* y,  ZZX_c* modulus)
    252     ZZ_c* ZZX_trace_mod(ZZX_c* x, ZZX_c* y)
    253     char* ZZX_trace_list(ZZX_c* x)
    254     ZZ_c* ZZX_resultant(ZZX_c* x, ZZX_c* y, int proof)
    255     ZZ_c* ZZX_norm_mod(ZZX_c* x, ZZX_c* y, int proof)
    256     ZZ_c* ZZX_discriminant(ZZX_c* x, int proof)
    257     ZZ_c* ZZX_polyeval(ZZX_c* x, ZZ_c* a)
    258     ZZX_c* ZZX_charpoly_mod(ZZX_c* x, ZZX_c* y, int proof)
    259     ZZX_c* ZZX_minpoly_mod(ZZX_c* x, ZZX_c* y)
    260     void ZZX_clear(ZZX_c* x)
    261     void ZZX_preallocate_space(ZZX_c* x, long n)
    262     void ZZX_getitem_as_mpz(mpz_t* output, ZZX_c* x, long i)
    263     cdef void ZZX_setitem_from_int(ZZX_c* x, long i, int value)
    264     cdef int ZZX_getitem_as_int(ZZX_c* x, long i)
    265 
    266     #### ZZ_pX_c
    267     ctypedef struct ZZ_pX_c "struct ZZ_pX":
    268         void *rep
    269         void (* SetMaxLength)(long n)
    270 
    271     ZZ_pX_c* ZZ_pX_new "New<ZZ_pX>"()
    272     ZZ_pX_c* ZZ_pX_construct "Construct<ZZ_pX>"(void *mem)
    273     void ZZ_pX_destruct "Destruct<ZZ_pX>"(ZZ_pX_c *mem)
    274     void ZZ_pX_delete "Delete<ZZ_pX>"(ZZ_pX_c *mem)
    275     void ZZ_pX_from_str "_from_str<ZZ_pX>"(ZZ_pX_c* dest, char* s)
    276     object ZZ_pX_to_PyString "_to_PyString<ZZ_pX>"(ZZ_pX_c *x)
    277     #int ZZ_pX_equal "_equal<ZZ_pX>"(ZZ_pX_c x, ZZ_pX_c y)
    278 
    279     long ZZ_pX_equal "operator=="(ZZ_pX_c a, ZZ_pX_c b)
    280     long ZZ_pX_IsZero "IsZero"(ZZ_pX_c a)
    281     long ZZ_pX_IsOne "IsOne"(ZZ_pX_c a)
    282    
    283     void ZZ_pX_add "add"( ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_c b)
    284     void ZZ_pX_add_long "add"(ZZ_pX_c x, ZZ_pX_c a, long b)
    285     void ZZ_pX_sub "sub"( ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_c b)
    286     void ZZ_pX_sub_long "sub"(ZZ_pX_c x, long a, ZZ_pX_c b)
    287     void ZZ_pX_negate "negate"(ZZ_pX_c x, ZZ_pX_c a)
    288 
    289     void ZZ_pX_mul "mul"( ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_c b)
    290     void ZZ_pX_mul_long "mul"( ZZ_pX_c x, ZZ_pX_c a, long b)
    291     void ZZ_pX_mul_ZZ_p "mul"( ZZ_pX_c x, ZZ_pX_c a, ZZ_p_c b)
    292     void ZZ_pX_rmul "mul"( ZZ_pX_c x, ZZ_pX_c a, ZZ_p_c b)
    293     void ZZ_pX_sqr "sqr"( ZZ_pX_c x, ZZ_pX_c a)
    294     long ZZ_pX_power "power"( ZZ_pX_c x, ZZ_pX_c a, long e)
    295 
    296     void ZZ_pX_LeftShift "LeftShift"(ZZ_pX_c x, ZZ_pX_c a, long n)
    297     void ZZ_pX_RightShift "RightShift"(ZZ_pX_c x, ZZ_pX_c a, long n)
    298 
    299     void ZZ_pX_DivRem "DivRem"(ZZ_pX_c q, ZZ_pX_c r, ZZ_pX_c a, ZZ_pX_c b)
    300     void ZZ_pX_div_ZZ "div"( ZZ_pX_c q, ZZ_pX_c a, ZZ_pX_c b)
    301     void ZZ_pX_div "div"( ZZ_pX_c q, ZZ_pX_c a, ZZ_pX_c b)
    302     long ZZ_pX_divide "divide"( ZZ_pX_c q, ZZ_pX_c a, ZZ_pX_c b)
    303     void ZZ_pX_rem "rem"(ZZ_pX_c r, ZZ_pX_c a, ZZ_pX_c b)
    304 
    305     void ZZ_pX_GCD "GCD"(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_c b)
    306     void ZZ_pX_PlainXGCD "PlainXGCD"(ZZ_pX_c d, ZZ_pX_c s, ZZ_pX_c t, ZZ_pX_c a, ZZ_pX_c b)
    307     void ZZ_pX_XGCD "XGCD"(ZZ_pX_c d, ZZ_pX_c s, ZZ_pX_c t, ZZ_pX_c a, ZZ_pX_c b)
    308 
    309     long ZZ_pX_deg "deg"( ZZ_pX_c x )
    310     ZZ_p_c ZZ_pX_coeff "coeff"(ZZ_pX_c a, long i)
    311     ZZ_p_c ZZ_pX_LeadCoeff "LeadCoeff"(ZZ_pX_c x)
    312     ZZ_p_c ZZ_pX_ConstTerm "ConstTerm"(ZZ_pX_c x)
    313     void ZZ_pX_SetCoeff "SetCoeff"(ZZ_pX_c x, long i, ZZ_p_c a)
    314     void ZZ_pX_SetCoeff_long "SetCoeff"(ZZ_pX_c x, long i, long a)
    315     void ZZ_pX_SetX "SetX"(ZZ_pX_c x)
    316     long ZZ_pX_IsX "IsX"(ZZ_pX_c a)
    317     void ZZ_pX_diff "diff"(ZZ_pX_c x, ZZ_pX_c a)
    318     void ZZ_pX_MakeMonic "MakeMonic"(ZZ_pX_c x)
    319     void ZZ_pX_reverse_hi "reverse"(ZZ_pX_c x, ZZ_pX_c a, long hi)
    320     void ZZ_pX_reverse "reverse"(ZZ_pX_c x, ZZ_pX_c a)
    321     void ZZ_pX_VectorCopy "VectorCopy"(vec_ZZ_p_c x, ZZ_pX_c a, long n)
    322 
    323     void ZZ_pX_random "random"(ZZ_pX_c x, long n)
    324 
    325     void ZZ_pX_BuildFromRoots "BuildFromRoots"(ZZ_pX_c x, vec_ZZ_p_c a)
    326     void ZZ_pX_eval "eval"(ZZ_p_c fa, ZZ_pX_c f, ZZ_p_c a)
    327     void ZZ_pX_eval_vec "eval"(vec_ZZ_p_c fa, ZZ_pX_c f, vec_ZZ_p_c a)
    328     void ZZ_pX_interpolate "interpolate"(ZZ_pX_c f, vec_ZZ_p_c a, vec_ZZ_p_c b)
    329 
    330     void ZZ_pX_trunc "trunc"(ZZ_pX_c x, ZZ_pX_c a, long n)
    331     void ZZ_pX_MulTrunc "MulTrunc"(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_c b, long n)
    332     void ZZ_pX_SqrTrunc "SqrTrunc"(ZZ_pX_c x, ZZ_pX_c a, long n)
    333     void ZZ_pX_InvTrunc "InvTrunc"(ZZ_pX_c x, ZZ_pX_c a, long n)
    334 
    335     void ZZ_pX_MulMod "MulMod"(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_c b, ZZ_pX_c f)
    336     void ZZ_pX_SqrMod "SqrMod"(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_c f)
    337     void ZZ_pX_MulByXMod "MulByXMod"(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_c f)
    338     void ZZ_pX_InvMod "InvMod"(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_c f)
    339     long ZZ_pX_InvModStatus "InvModStatus"(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_c f)
    340 
    341     ctypedef struct ZZ_pX_Modulus_c "struct ZZ_pXModulus":
    342         ZZ_pX_c (* val) ( )
    343     ZZ_pX_Modulus_c* ZZ_pX_Modulus_new "New<ZZ_pXModulus>"()
    344     ZZ_pX_Modulus_c* ZZ_pX_Modulus_construct "Construct<ZZ_pXModulus>"(void *mem)
    345     void ZZ_pX_Modulus_destruct "Destruct<ZZ_pXModulus>"(ZZ_pX_Modulus_c *mem)
    346     void ZZ_pX_Modulus_delete "Delete<ZZ_pXModulus>"(ZZ_pX_Modulus_c *mem)
    347     void ZZ_pX_Modulus_from_str "_from_str<ZZ_pXModulus>"(ZZ_pX_Modulus_c* dest, char* s)
    348     void ZZ_pX_Modulus_build "build"(ZZ_pX_Modulus_c F, ZZ_pX_c f) # MUST be called before using the modulus
    349     long ZZ_pX_Modulus_deg "deg"(ZZ_pX_Modulus_c F)
    350    
    351     void ZZ_pX_MulMod_pre "MulMod"(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_c b, ZZ_pX_Modulus_c F)
    352     void ZZ_pX_SqrMod_pre "SqrMod"(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_Modulus_c F)
    353     void ZZ_pX_PowerMod_pre "PowerMod"(ZZ_pX_c x, ZZ_pX_c a, ZZ_c e, ZZ_pX_Modulus_c F)
    354     void ZZ_pX_PowerMod_long_pre "PowerMod"(ZZ_pX_c x, ZZ_pX_c a, long e, ZZ_pX_Modulus_c F)
    355     void ZZ_pX_PowerXMod_pre "PowerXMod"(ZZ_pX_c x, ZZ_c e, ZZ_pX_Modulus_c F)
    356     void ZZ_pX_PowerXMod_long_pre "PowerXMod"(ZZ_pX_c x, long e, ZZ_pX_Modulus_c F)
    357     void ZZ_pX_PowerXPlusAMod_pre "PowerXPlusAMod"(ZZ_pX_c x, ZZ_p_c a, ZZ_c e, ZZ_pX_Modulus_c F)
    358     void ZZ_pX_PowerXPlusAMod_long_pre "PowerXPlusAMod"(ZZ_pX_c x, ZZ_p_c a, long e, ZZ_pX_Modulus_c F)
    359     void ZZ_pX_rem_pre "rem"(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_Modulus_c F)
    360     void ZZ_pX_DivRem_pre "DivRem"(ZZ_pX_c q, ZZ_pX_c r, ZZ_pX_c a, ZZ_pX_Modulus_c F)
    361     void ZZ_pX_div_pre "div"(ZZ_pX_c q, ZZ_pX_c a, ZZ_pX_Modulus_c F)
    362     void ZZ_pX_InvMod_pre "InvMod"(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_Modulus_c F)
    363 
    364     ctypedef struct ZZ_pX_Multiplier_c "struct ZZ_pXMultiplier":
    365         ZZ_pX_c (* val) ( )
    366     ZZ_pX_Multiplier_c* ZZ_pX_Multiplier_new "New<ZZ_pXMultiplier>"()
    367     ZZ_pX_Multiplier_c* ZZ_pX_Multiplier_construct "Construct<ZZ_pXMultiplier>"(void *mem)
    368     void ZZ_pX_Multiplier_destruct "Destruct<ZZ_pXMultiplier>"(ZZ_pX_Multiplier_c *mem)
    369     void ZZ_pX_Multiplier_delete "Delete<ZZ_pXMultiplier>"(ZZ_pX_Multiplier_c *mem)
    370     void ZZ_pX_Multiplier_from_str "_from_str<ZZ_pXMultiplier>"(ZZ_pX_Multiplier_c* dest, char* s)
    371     void ZZ_pX_Multiplier_build "build"(ZZ_pX_Multiplier_c F, ZZ_pX_c b, ZZ_pX_Modulus_c F) # MUST be called before using the multiplier
    372     void ZZ_pX_MulMod_premul "MulMod"(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_Multiplier_c B, ZZ_pX_Modulus_c F)
    373 
    374     void ZZ_pX_CompMod "CompMod"(ZZ_pX_c x, ZZ_pX_c g, ZZ_pX_c h, ZZ_pX_Modulus_c F)
    375     # Add other composition functions here
    376     # Add power projection routines
    377     # Add minimum polynomials of recurrence sequences
    378     void ZZ_pX_MinPolyMod "MinPolyMod"(ZZ_pX_c h, ZZ_pX_c g, ZZ_pX_c f)
    379     void ZZ_pX_MinPolyMod_pre "MinPolyMod"(ZZ_pX_c h, ZZ_pX_c g, ZZ_pX_Modulus_c F)
    380 
    381     void ZZ_pX_TraceMod "TraceMod"(ZZ_p_c x, ZZ_pX_c a, ZZ_pX_c f)
    382     void ZZ_pX_TraceMod_pre "TraceMod"(ZZ_p_c x, ZZ_pX_c a, ZZ_pX_Modulus_c F)
    383     void ZZ_pX_TraceVec "TraceVec"(vec_ZZ_p_c S, ZZ_pX_c f)
    384     void ZZ_pX_NormMod "NormMod"(ZZ_p_c x, ZZ_pX_c a, ZZ_pX_c f)
    385     void ZZ_pX_resultant "resultant"(ZZ_p_c x, ZZ_pX_c a, ZZ_pX_c b)
    386     void ZZ_pX_CharPolyMod "CharPolyMod"(ZZ_pX_c g, ZZ_pX_c a, ZZ_pX_c f)
    387    
    388     void ZZ_pX_clear "clear"(ZZ_pX_c x)
    389     void ZZ_pX_set "set"(ZZ_pX_c x)
    390 
    391     void ZZ_pX_to_ZZX "conv"(ZZX_c x, ZZ_pX_c a)
    392     void ZZX_to_ZZ_pX "conv"(ZZ_pX_c x, ZZX_c a)
    393 
    394     #char* ZZ_pX_repr(ZZ_pX_c* x)
    395     #ZZ_pX_c* ZZ_pX_copy(ZZ_pX_c* x)
    396     #ZZ_pX_c* ZZ_pX_mod(ZZ_pX_c* x, ZZ_pX_c* y)
    397     #void ZZ_pX_quo_rem(ZZ_pX_c* x, ZZ_pX_c* other, ZZ_pX_c** r, ZZ_pX_c** q)
    398     #ZZ_pX_c* ZZ_pX_square(ZZ_pX_c* x)
    399     #int ZZ_pX_is_monic(ZZ_pX_c* x)
    400     #ZZ_pX_c* ZZ_pX_neg(ZZ_pX_c* x)
    401     #ZZ_pX_c* ZZ_pX_left_shift(ZZ_pX_c* x, long n)
    402     #ZZ_pX_c* ZZ_pX_right_shift(ZZ_pX_c* x, long n)
    403     #ZZ_pX_c* ZZ_pX_gcd(ZZ_pX_c* x, ZZ_pX_c* y)
    404     #ZZ_pX_c* ZZ_pX_xgcd(ZZ_pX_c** d, ZZ_pX_c** s, ZZ_pX_c** t, ZZ_pX_c* a, ZZ_pX_c* b)
    405     #ZZ_pX_c* ZZ_pX_plain_xgcd(ZZ_pX_c** d, ZZ_pX_c** s, ZZ_pX_c** t, ZZ_pX_c* a, ZZ_pX_c* b)
    406     #void ZZ_pX_set_x(ZZ_pX_c* x)
    407     #int ZZ_pX_is_x(ZZ_pX_c* x)
    408     #ZZ_pX_c* ZZ_pX_derivative(ZZ_pX_c* x)
    409     #ZZ_pX_c* ZZ_pX_reverse(ZZ_pX_c* x)
    410     #ZZ_pX_c* ZZ_pX_reverse_hi(ZZ_pX_c* x, long hi)
    411     #ZZ_pX_c* ZZ_pX_truncate(ZZ_pX_c* x, long m)
    412     #ZZ_pX_c* ZZ_pX_multiply_and_truncate(ZZ_pX_c* x, ZZ_pX_c* y, long m)
    413     #ZZ_pX_c* ZZ_pX_square_and_truncate(ZZ_pX_c* x, long m)
    414     #ZZ_pX_c* ZZ_pX_invert_and_truncate(ZZ_pX_c* x, long m)
    415     #ZZ_pX_c* ZZ_pX_multiply_mod(ZZ_pX_c* x, ZZ_pX_c* y,  ZZ_pX_c* modulus)
    416     #ZZ_p_c* ZZ_pX_trace_mod(ZZ_pX_c* x, ZZ_pX_c* y)
    417     char* ZZ_pX_trace_list(ZZ_pX_c* x)
    418     #ZZ_p_c* ZZ_pX_resultant(ZZ_pX_c* x, ZZ_pX_c* y)
    419     #ZZ_p_c* ZZ_pX_norm_mod(ZZ_pX_c* x, ZZ_pX_c* y)
    420     #ZZ_p_c* ZZ_pX_discriminant(ZZ_pX_c* x)
    421     #ZZ_pX_c* ZZ_pX_charpoly_mod(ZZ_pX_c* x, ZZ_pX_c* y)
    422     #ZZ_pX_c* ZZ_pX_minpoly_mod(ZZ_pX_c* x, ZZ_pX_c* y)
    423     #void ZZ_pX_preallocate_space(ZZ_pX_c* x, long n)
    424    
    425     void ZZ_pX_factor(ZZ_pX_c*** v, long** e, long* n, ZZ_pX_c* x, long verbose)
    426     void ZZ_pX_linear_roots(ZZ_p_c*** v, long* n, ZZ_pX_c* x)
    427    
    428     # The following are ZZ_pX functions written in ntl_wrap, used for padics.
    429    
    430     void ZZ_pX_conv_modulus(ZZ_pX_c fout, ZZ_pX_c fin, ZZ_pContext_c c)
    431     void ZZ_pX_min_val_coeff(long valuation, long index, ZZ_pX_c f, ZZ_c p)
    432     long ZZ_pX_get_val_coeff(ZZ_pX_c f, ZZ_c p, long i)
    433     void ZZ_pX_left_pshift(ZZ_pX_c x, ZZ_pX_c a, ZZ_c pn, ZZ_pContext_c c)
    434     void ZZ_pX_right_pshift(ZZ_pX_c x, ZZ_pX_c a, ZZ_c pn, ZZ_pContext_c c)
    435     void ZZ_pX_InvMod_newton_unram(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_Modulus_c F, ZZ_pContext_c cpn, ZZ_pContext_c cp)
    436     void ZZ_pX_InvMod_newton_ram(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_Modulus_c F, ZZ_pContext_c cpn)
    437 
    438     # The following are ZZ_pX functions written in ntl_wrap, used for padics.
    439 
    440     void ZZ_pX_conv_modulus(ZZ_pX_c fout, ZZ_pX_c fin, ZZ_pContext_c c)
    441     void ZZ_pX_min_val_coeff(long valuation, long index, ZZ_pX_c f, ZZ_c p)
    442     long ZZ_pX_get_val_coeff(ZZ_pX_c f, ZZ_c p, long i)
    443     void ZZ_pX_left_pshift(ZZ_pX_c x, ZZ_pX_c a, ZZ_c pn, ZZ_pContext_c c)
    444     void ZZ_pX_right_pshift(ZZ_pX_c x, ZZ_pX_c a, ZZ_c pn, ZZ_pContext_c c)
    445     void ZZ_pX_InvMod_newton(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_Modulus_c F, ZZ_pContext_c cpn, ZZ_pContext_c cp)
    446     void ZZ_pX_eis_shift(ZZ_pX_c x, ZZ_pX_c a, long n, ZZ_pX_Multiplier_c* low_shifter, ZZ_pX_Multiplier_c* high_shifter, ZZ_pX_Modulus_c modulus, ZZ_c p, ZZ_pContext_c cupper, ZZ_pContext_c clower)
    447 
    448     #### zz_p_c
    449     ctypedef struct zz_p_c "struct zz_p":
    450         void *rep
    451     void zz_p_construct "Construct<zz_p>"(void *mem)
    452     void zz_p_destruct "Destruct<zz_p>"(zz_p_c *mem)
    453     long zz_p_rep "rep"(zz_p_c x)
    454     long zz_p_isZero "IsZero"(zz_p_c x)
    455     void zz_p_set_from_long(zz_p_c x, long a)
    456     void zz_p_add "add"(zz_p_c x, zz_p_c a, zz_p_c b)
    457     void zz_p_sub "sub"(zz_p_c x, zz_p_c a, zz_p_c b)
    458     void zz_p_negate "negate"(zz_p_c x, zz_p_c a)
    459     void zz_p_mul "mul"(zz_p_c x, zz_p_c a, zz_p_c b)
    460     void zz_p_div "div"(zz_p_c x, zz_p_c a, zz_p_c b)
    461     void zz_p_inv "inv"(zz_p_c x, zz_p_c a)
    462     void zz_p_power "power"(zz_p_c x, zz_p_c a, long e)
    463     void zz_p_sqr "sqr"(zz_p_c x, zz_p_c a)
    464     void zz_p_clear "clear"(zz_p_c x)
    465     void zz_p_set_zero "clear"(zz_p_c x)
    466     void zz_p_set_one "set"(zz_p_c x)
    467     void zz_p_swap "swap"(zz_p_c x, zz_p_c y)
    468 
    469     bint NTL_zz_p_DOUBLE_EQUALS(zz_p_c x, zz_p_c y)
    470    
    471     #### zz_pContext_c
    472     ctypedef struct zz_pContext_c "struct zz_pContext":
    473         pass
    474 
    475     zz_pContext_c* zz_pContext_new "New<zz_pContext>"()
    476     zz_pContext_c* zz_pContext_construct "Construct<zz_pContext>"(void *mem)
    477     zz_pContext_c* zz_pContext_new_long "zz_pContext_new"(long p)
    478     zz_pContext_c* zz_pContext_construct_long "zz_pContext_construct"(void *mem, long p)
    479     void zz_pContext_destruct "Destruct<zz_pContext>"(zz_pContext_c *mem)
    480     void zz_pContext_delete "Delete<zz_pContext>"(zz_pContext_c *mem)
    481 
    482     void zz_pContext_restore(zz_pContext_c *c)
    483 
    484 
    485     #### zz_pX_c
    486     ctypedef struct zz_pX_c "struct zz_pX":
    487         void *rep
    488         void (* SetMaxLength)(long n)
    489 
    490     void zz_pX_construct "Construct<zz_pX>"(void *mem)
    491     void zz_pX_destruct "Destruct<zz_pX>"(zz_pX_c *mem)
    492     char* zz_pX_repr(zz_pX_c* x)
    493     void zz_pX_SetCoeff_long "SetCoeff"(zz_pX_c x, long i, long a)
    494     zz_p_c zz_pX_GetCoeff "coeff"(zz_pX_c x, long i)
    495     void zz_pX_add "add"(zz_pX_c x, zz_pX_c a, zz_pX_c b)
    496     void zz_pX_sub "sub"(zz_pX_c x, zz_pX_c a, zz_pX_c b)
    497     void zz_pX_mul "mul"(zz_pX_c x, zz_pX_c a, zz_pX_c b)
    498     void zz_pX_rmul "mul"(zz_pX_c x, zz_pX_c a, long b)
    499     void zz_pX_lmul "mul"(zz_pX_c x, long a, zz_pX_c b)
    500     long zz_pX_div "div"(zz_pX_c x, zz_pX_c a, zz_pX_c b)
    501     long zz_pX_divide "divide"(zz_pX_c x, zz_pX_c a, zz_pX_c b)
    502     void zz_pX_mod "rem"(zz_pX_c x, zz_pX_c a, zz_pX_c b)
    503     void zz_pX_divrem "DivRem"(zz_pX_c q, zz_pX_c r, zz_pX_c a, zz_pX_c b)
    504     void zz_pX_LeftShift "LeftShift"(zz_pX_c x, zz_pX_c a, long b)
    505     void zz_pX_RightShift "RightShift"(zz_pX_c x, zz_pX_c a, long b)
    506     void zz_pX_negate "negate"(zz_pX_c x, zz_pX_c a)
    507     zz_p_c zz_pX_LeadCoeff "LeadCoeff"(zz_pX_c x)
    508     zz_p_c zz_pX_ConstTerm "ConstTerm" (zz_pX_c x)
    509     void zz_pX_negate "negate"(zz_pX_c x, zz_pX_c a)
    510     void zz_pX_trunc "trunc"(zz_pX_c x, zz_pX_c a, long n) ## x = a % X^n
    511     void zz_pX_MulTrunc "MulTrunc"(zz_pX_c x, zz_pX_c a, zz_pX_c b, long n)
    512     void zz_pX_SqrTrunc "SqrTrunc"(zz_pX_c x, zz_pX_c a, long n)
    513     void zz_pX_InvTrunc "InvTrunc"(zz_pX_c x, zz_pX_c a, long n)
    514     void zz_pX_sqr "sqr"(zz_pX_c x, zz_pX_c a)
    515     void zz_pX_power "power"(zz_pX_c x, zz_pX_c a, long e)
    516     void zz_pX_clear "clear"(zz_pX_c x)
    517     void zz_pX_SetX "SetX"(zz_pX_c x)
    518     bint zz_pX_IsX "IsX"(zz_pX_c x)
    519     bint zz_pX_IsZero "IsZero"(zz_pX_c x)
    520     bint zz_pX_IsOne "IsOne"(zz_pX_c x)
    521     long zz_pX_deg "deg"(zz_pX_c x)
    522     zz_pX_c zz_pX_zero "zz_pX::zero"()
    523     void zz_pX_diff "diff"(zz_pX_c x, zz_pX_c a)
    524     void zz_pX_reverse "reverse"(zz_pX_c x, zz_pX_c a)
    525     void zz_pX_eval "eval" (zz_p_c fa, zz_pX_c f, zz_p_c a)
    526     void zz_pX_MakeMonic "MakeMonic"(zz_pX_c x)
    527 
    528     long NTL_SP_BOUND
    529     bint NTL_zz_pX_DOUBLE_EQUALS(zz_pX_c x, zz_pX_c y)
    530 
    531 
    532     #### ZZ_pEContext_c
    533     ctypedef struct ZZ_pEContext_c "struct ZZ_pEContext":
    534         void (*restore)()
    535 
    536     ZZ_pEContext_c* ZZ_pEContext_new "New<ZZ_pEContext>"()
    537     ZZ_pEContext_c* ZZ_pEContext_construct "Construct<ZZ_pEContext>"(void *mem)
    538     ZZ_pEContext_c* ZZ_pEContext_new_ZZ_pX "ZZ_pEContext_new"(ZZ_pX_c* p)
    539     ZZ_pEContext_c* ZZ_pEContext_construct_ZZ_pX "ZZ_pEContext_construct"(void *mem, ZZ_pX_c* p)
    540     void ZZ_pEContext_destruct "Destruct<ZZ_pEContext>"(ZZ_pEContext_c *mem)
    541     void ZZ_pEContext_delete "Delete<ZZ_pEContext>"(ZZ_pEContext_c *mem)
    542 
    543     void ZZ_pEContext_restore(ZZ_pEContext_c *c)
    544 
    545     #### ZZ_pE_c
    546     ctypedef struct ZZ_pE_c "struct ZZ_pE":
    547         pass
    548 
    549     # Some boiler-plate
    550     ZZ_pE_c* ZZ_pE_new "New<ZZ_pE>"()
    551     ZZ_pE_c* ZZ_pE_construct "Construct<ZZ_pE>"(void *mem)
    552     void ZZ_pE_destruct "Destruct<ZZ_pE>"(ZZ_pE_c *mem)
    553     void ZZ_pE_delete "Delete<ZZ_pE>"(ZZ_pE_c *mem)
    554     void ZZ_pE_from_str "_from_str<ZZ_pE>"(ZZ_pE_c* dest, char* s)
    555     object ZZ_pE_to_PyString "_to_PyString<ZZ_pE>"(ZZ_pE_c *x)
    556     int ZZ_pE_equal "_equal<ZZ_pE>"(ZZ_pE_c x, ZZ_pE_c y)
    557 
    558     #ZZ_pE_c* str_to_ZZ_pE(char* s)
    559     #void del_ZZ_pE(ZZ_pE_c* n)
    560     #void ZZ_pE_to_str(char** s, ZZ_pE_c* x)
    561     void ZZ_pE_add "add"( ZZ_pE_c x, ZZ_pE_c a, ZZ_pE_c b)
    562     void ZZ_pE_add_long "add"( ZZ_pE_c x, ZZ_pE_c a, long b)
    563     void ZZ_pE_add_ZZ_p "add"( ZZ_pE_c x, ZZ_pE_c a, ZZ_p_c b)
    564     void ZZ_pE_sub "sub"( ZZ_pE_c x, ZZ_pE_c a, ZZ_pE_c b)
    565     void ZZ_pE_sub_long "add"( ZZ_pE_c x, ZZ_pE_c a, long b)
    566     void ZZ_pE_sub_ZZ_p "sub"( ZZ_pE_c x, ZZ_pE_c a, ZZ_p_c b)
    567     void ZZ_pE_mul "mul"( ZZ_pE_c x, ZZ_pE_c a, ZZ_pE_c b)
    568     void ZZ_pE_mul_long "mul"( ZZ_pE_c x, ZZ_pE_c a, long b)
    569     void ZZ_pE_mul_ZZ_p "mul"( ZZ_pE_c x, ZZ_pE_c a, ZZ_p_c b)
    570     void ZZ_pE_negate "negate"(ZZ_pE_c x, ZZ_pE_c a)
    571     void ZZ_pE_power "power"(ZZ_pE_c t, ZZ_pE_c x, long e)
    572     int ZZ_pE_IsOne "IsOne"(ZZ_pE_c x)
    573     int ZZ_pE_IsZero "IsZero"(ZZ_pE_c x)
    574     ZZ_pX_c ZZ_pE_rep "rep"(ZZ_pE_c z)
    575     #void ntl_ZZ_pE_set_modulus(ZZ_pX_c* x)
    576     #int ZZ_pE_eq( ZZ_pE_c* x,  ZZ_pE_c* y)
    577     #int ZZ_pE_eq_ZZ_p( ZZ_pE_c* x, ZZ_p_c* y)
    578     void ZZ_pE_inv "inv"( ZZ_pE_c x, ZZ_pE_c a) # raises an error if a not invertible
    579     void ZZ_pE_div "div"( ZZ_pE_c x, ZZ_pE_c a, ZZ_pE_c b) # raises an error if b not invertible
    580     void ZZ_pE_div_ZZ_p "div"( ZZ_pE_c x, ZZ_pE_c a, ZZ_p_c b) # raises an error if b not invertible
    581     void ZZ_pE_ZZ_p_div "div"( ZZ_pE_c x, ZZ_p_c a, ZZ_pE_c b) # raises an error if b not invertible
    582     void ZZ_pE_random "random"( ZZ_pE_c x)
    583     void ZZ_pE_trace "trace"( ZZ_p_c x, ZZ_pE_c a)
    584     void ZZ_pE_norm "norm"( ZZ_p_c x, ZZ_pE_c a)
    585 
    586     ZZ_pE_c long_to_ZZ_pE "to_ZZ_pE"(long i)
    587     ZZ_pE_c ZZ_to_ZZ_pE "to_ZZ_pE"(ZZ_c i)
    588     ZZ_pE_c ZZ_p_to_ZZ_pE "to_ZZ_pE"(ZZ_p_c i)
    589     ZZ_pE_c ZZ_pX_to_ZZ_pE "to_ZZ_pE"(ZZ_pX_c i)
    590     ZZ_pX_c ZZ_pE_to_ZZ_pX(ZZ_pE_c x)
    591    
    592     #ZZ_pX_c rep(ZZ_pE_c x)
    593 
    594     #### vec_ZZ_pE_c
    595     ctypedef struct vec_ZZ_pE_c "struct vec_ZZ_pE":
    596         pass
    597 
    598     #### ZZ_pEX_c
    599     ctypedef struct ZZ_pEX_c "struct ZZ_pEX":
    600         void *rep
    601         void (* SetMaxLength)(long n)
    602 
    603     ZZ_pEX_c* ZZ_pEX_new "New<ZZ_pEX>"()
    604     ZZ_pEX_c* ZZ_pEX_construct "Construct<ZZ_pEX>"(void *mem)
    605     void ZZ_pEX_destruct "Destruct<ZZ_pEX>"(ZZ_pEX_c *mem)
    606     void ZZ_pEX_delete "Delete<ZZ_pEX>"(ZZ_pEX_c *mem)
    607     void ZZ_pEX_from_str "_from_str<ZZ_pEX>"(ZZ_pEX_c* dest, char* s)
    608     object ZZ_pEX_to_PyString "_to_PyString<ZZ_pEX>"(ZZ_pEX_c *x)
    609     #int ZZ_pEX_equal "_equal<ZZX>"(ZZ_pEX_c x, ZZ_pEX_c y)
    610 
    611     #ZZ_pEX_c* str_to_ZZ_pEX(char* s)
    612     #char* ZZ_pEX_to_str(ZZ_pEX_c* x)
    613 
    614     long ZZ_pEX_equal "operator=="(ZZ_pEX_c a, ZZ_pEX_c b)
    615     long ZZ_pEX_IsZero "IsZero"(ZZ_pEX_c a)
    616     long ZZ_pEX_IsOne "IsOne"(ZZ_pEX_c a)
    617 
    618     void ZZ_pEX_add "add"( ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_c b)
    619     void ZZ_pEX_add_ZZ_p "add"( ZZ_pEX_c x, ZZ_pEX_c a, ZZ_p_c b)
    620     void ZZ_pEX_add_ZZ_pE "add"( ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pE_c b)
    621     void ZZ_pEX_sub "sub"( ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_c b)
    622     void ZZ_pEX_sub_ZZ_p "sub"( ZZ_pEX_c x, ZZ_pEX_c a, ZZ_p_c b)
    623     void ZZ_pEX_sub_ZZ_pE "sub"( ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pE_c b)
    624     void ZZ_pEX_negate "negate"(ZZ_pEX_c x, ZZ_pEX_c a)
    625 
    626     void ZZ_pEX_mul "mul"( ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_c b)
    627     void ZZ_pEX_mul_long "mul"( ZZ_pEX_c x, ZZ_pEX_c a, long b)
    628     void ZZ_pEX_mul_ZZ_p "mul"( ZZ_pEX_c x, ZZ_pEX_c a, ZZ_p_c b)
    629     void ZZ_pEX_mul_ZZ_pE "mul"( ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pE_c b)
    630     void ZZ_pEX_sqr "sqr"( ZZ_pEX_c x, ZZ_pEX_c a)
    631     void ZZ_pEX_power "power"( ZZ_pEX_c x, ZZ_pEX_c a, long e)
    632 
    633     void ZZ_pEX_LeftShift "LeftShift"(ZZ_pEX_c x, ZZ_pEX_c a, long n)
    634     void ZZ_pEX_RightShift "RightShift"(ZZ_pEX_c x, ZZ_pEX_c a, long n)
    635 
    636     void ZZ_pEX_DivRem "DivRem"(ZZ_pEX_c q, ZZ_pEX_c r, ZZ_pEX_c a, ZZ_pEX_c b)
    637     void ZZ_pEX_div_ZZ_pEX "div"(ZZ_pEX_c q, ZZ_pEX_c a, ZZ_pEX_c b)
    638     void ZZ_pEX_div_ZZ_pE "div"(ZZ_pEX_c q, ZZ_pEX_c a, ZZ_pE_c b)
    639     void ZZ_pEX_div_ZZ_p "div"(ZZ_pEX_c q, ZZ_pEX_c a, ZZ_p_c b)
    640     void ZZ_pEX_div_long "div"( ZZ_pEX_c x, ZZ_pEX_c a, long b)
    641     void ZZ_pEX_rem "rem"(ZZ_pEX_c r, ZZ_pEX_c a, ZZ_pEX_c b)
    642     long ZZ_pEX_divide "divide"( ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_c b)
    643 
    644     void ZZ_pEX_GCD "GCD"(ZZ_pEX_c r, ZZ_pEX_c a, ZZ_pEX_c b)
    645     void ZZ_pEX_XGCD "XGCD"(ZZ_pEX_c d, ZZ_pEX_c s, ZZ_pEX_c t, ZZ_pEX_c a, ZZ_pEX_c b)
    646 
    647     long ZZ_pEX_deg "deg"( ZZ_pEX_c x )
    648     ZZ_pE_c ZZ_pEX_coeff "coeff"(ZZ_pEX_c a, long i)
    649     ZZ_pE_c ZZ_pEX_LeadCoeff "LeadCoeff"(ZZ_pEX_c a)
    650     void ZZ_pEX_SetCoeff "SetCoeff"(ZZ_pEX_c x, long i, ZZ_pE_c a)
    651     void ZZ_pEX_SetCoeff_ZZ_p "SetCoeff"(ZZ_pEX_c x, long i, ZZ_p_c a)
    652     void ZZ_pEX_SetCoeff_long "SetCoeff"(ZZ_pEX_c x, long i, long a)
    653     void ZZ_pEX_SetCoeff_one "SetCoeff"(ZZ_pEX_c x, long i)
    654     void ZZ_pEX_SetX "SetX"(ZZ_pEX_c x)
    655     long ZZ_pEX_IsX "IsX"(ZZ_pEX_c x)
    656     void ZZ_pEX_diff "diff"(ZZ_pEX_c x, ZZ_pEX_c a)
    657     void ZZ_pEX_MakeMonic "MakeMonic"(ZZ_pEX_c x)
    658     void ZZ_pEX_reverse_hi "reverse"(ZZ_pEX_c x, ZZ_pEX_c a, long hi)
    659     void ZZ_pEX_reverse "reverse"(ZZ_pEX_c x, ZZ_pEX_c a)
    660 
    661     void ZZ_pEX_random "random"(ZZ_pEX_c x, long n)
    662 
    663     void ZZ_pEX_BuildFromRoots "BuildFromRoots"(ZZ_pEX_c x, vec_ZZ_pE_c a)
    664     void ZZ_pEX_eval "eval"(ZZ_pE_c b, ZZ_pEX_c f, ZZ_pE_c a)
    665     void ZZ_pEX_eval_vec "eval"(vec_ZZ_pE_c b, ZZ_pEX_c f, vec_ZZ_pE_c a)
    666     void ZZ_pEX_interpolate "interpolate"(ZZ_pEX_c f, vec_ZZ_pE_c a, vec_ZZ_pE_c b)
    667    
    668     void ZZ_pEX_trunc "trunc"(ZZ_pEX_c x, ZZ_pEX_c a, long n)
    669     void ZZ_pEX_MulTrunc "MulTrunc"(ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_c b, long n)
    670     void ZZ_pEX_SqrTrunc "SqrTrunc"(ZZ_pEX_c x, ZZ_pEX_c a, long n)
    671     void ZZ_pEX_InvTrunc "InvTrunc"(ZZ_pEX_c x, ZZ_pEX_c a, long n)
    672 
    673     void ZZ_pEX_MulMod "MulMod"(ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_c b, ZZ_pEX_c f)
    674     void ZZ_pEX_SqrMod "SqrMod"(ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_c f)
    675     void ZZ_pEX_MulByXMod "MulByXMod"(ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_c f)
    676     void ZZ_pEX_InvMod "InvMod"(ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_c f)
    677     long ZZ_pEX_InvModStatus "InvModStatus"(ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_c f)
    678 
    679     ctypedef struct ZZ_pEX_Modulus_c "struct ZZ_pEXModulus":
    680         ZZ_pEX_c val()
    681     ZZ_pEX_Modulus_c* ZZ_pEX_Modulus_new "New<ZZ_pEXModulus>"()
    682     ZZ_pEX_Modulus_c* ZZ_pEX_Modulus_construct "Construct<ZZ_pEXModulus>"(void *mem)
    683     void ZZ_pEX_Modulus_destruct "Destruct<ZZ_pEXModulus>"(ZZ_pEX_Modulus_c *mem)
    684     void ZZ_pEX_Modulus_delete "Delete<ZZ_pEXModulus>"(ZZ_pEX_Modulus_c *mem)
    685     void ZZ_pEX_Modulus_from_str "_from_str<ZZ_pEXModulus>"(ZZ_pEX_Modulus_c* dest, char* s)
    686     void ZZ_pEX_Modulus_build "build"(ZZ_pEX_Modulus_c F, ZZ_pEX_c f)
    687     long ZZ_pEX_Modulus_deg "deg"(ZZ_pEX_Modulus_c F)
    688 
    689     void ZZ_pEX_MulMod_pre "MulMod"(ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_c b, ZZ_pEX_Modulus_c F)
    690     void ZZ_pEX_SqrMod_pre "SqrMod"(ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_Modulus_c F)
    691     void ZZ_pEX_PowerMod_pre "PowerMod"(ZZ_pEX_c x, ZZ_pEX_c a, long e, ZZ_pEX_Modulus_c F)
    692     void ZZ_pEX_PowerMod_ZZ_pre "PowerMod"(ZZ_pEX_c x, ZZ_pEX_c a, ZZ_c e, ZZ_pEX_Modulus_c F)
    693     void ZZ_pEX_PowerXMod_pre "PowerXMod"(ZZ_pEX_c x, long e, ZZ_pEX_Modulus_c F)
    694     void ZZ_pEX_PowerXMod_ZZ_pre "PowerXMod"(ZZ_pEX_c x, ZZ_c e, ZZ_pEX_Modulus_c F)
    695     void ZZ_pEX_rem_pre "rem"(ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_Modulus_c F)
    696     void ZZ_pEX_DivRem_pre "DivRem"(ZZ_pEX_c q, ZZ_pEX_c r, ZZ_pEX_c a, ZZ_pEX_Modulus_c F)
    697     void ZZ_pEX_div_pre "div"(ZZ_pEX_c q, ZZ_pEX_c a, ZZ_pEX_Modulus_c F)
    698 
    699     void ZZ_pEX_MinPolyMod "MinPolyMod"(ZZ_pEX_c h, ZZ_pEX_c g, ZZ_pEX_c f)
    700     void ZZ_pEX_MinPolyMod_pre "MinPolyMod"(ZZ_pEX_c h, ZZ_pEX_c g, ZZ_pEX_Modulus_c F)
    701 
    702     void ZZ_pEX_TraceMod "TraceMod"(ZZ_pE_c x, ZZ_pEX_c a, ZZ_pEX_c f)
    703     void ZZ_pEX_TraceMod_pre "TraceMod"(ZZ_pE_c x, ZZ_pEX_c a, ZZ_pEX_Modulus_c F)
    704     void ZZ_pEX_TraceVec "TraceVec"(vec_ZZ_pE_c x, ZZ_pEX_c f)
    705     void ZZ_pEX_NormMod "NormMod"(ZZ_pE_c x, ZZ_pEX_c a, ZZ_pEX_c f)
    706     void ZZ_pEX_resultant "resultant"(ZZ_pE_c x, ZZ_pEX_c a, ZZ_pEX_c b)
    707    
    708     void ZZ_pEX_clear "clear"(ZZ_pEX_c x)
    709     void ZZ_pEX_set "set"(ZZ_pEX_c x)
    710 
    711     void ZZ_pEX_conv_modulus(ZZ_pEX_c fout, ZZ_pEX_c fin, ZZ_pContext_c c)
    712 
    713 
     24cdef extern from "ntl_wrap.h":
    71425    #### mat_ZZ_c
    71526    ctypedef struct mat_ZZ_c "struct mat_ZZ":
    71627        pass
  • sage/libs/ntl/ntl_ZZX.pyx

    diff -r e16270e56d21 -r 8e505e3fe795 sage/libs/ntl/ntl_ZZX.pyx
    a b  
    1515
    1616include "../../ext/interrupt.pxi"
    1717include "../../ext/stdsage.pxi"
     18include "decl.pxi"
    1819include 'misc.pxi'
    19 include 'decl.pxi'
    2020
    2121from sage.libs.ntl.ntl_ZZ cimport ntl_ZZ
    2222from sage.libs.ntl.ntl_ZZ import unpickle_class_value
  • new file sage/libs/ntl/ntl_ZZX_decl.pxd

    diff -r e16270e56d21 -r 8e505e3fe795 sage/libs/ntl/ntl_ZZX_decl.pxd
    - +  
     1include "../../ext/cdefs.pxi"
     2
     3from sage.libs.ntl.ntl_ZZ_decl cimport vec_ZZ_c
     4from sage.libs.ntl.ntl_ZZ_decl cimport ZZ_c
     5
     6cdef extern from "ntl_wrap.h":
     7    # really, this is from NTL/ZZX.h
     8    ctypedef struct ZZX_c "struct ZZX":
     9        vec_ZZ_c rep
     10
     11    ctypedef struct pair_ZZX_long_c "pair_ZZX_long":
     12        ZZX_c a
     13        long b
     14
     15    ctypedef struct vec_pair_ZZX_long_c "vec_pair_ZZX_long":
     16        pair_ZZX_long_c RawGet(long i)
     17        long length()
     18
     19    # Some boiler-plate
     20    ZZX_c* ZZX_new "New<ZZX>"()
     21    ZZX_c* ZZX_construct "Construct<ZZX>"(void *mem)
     22    void ZZX_destruct "Destruct<ZZX>"(ZZX_c *mem)
     23    void ZZX_swap "swap"(ZZX_c x, ZZX_c y)
     24    void ZZX_delete "Delete<ZZX>"(ZZX_c *mem)
     25    void ZZX_from_str "_from_str<ZZX>"(ZZX_c* dest, char* s)
     26    object ZZX_to_PyString "_to_PyString<ZZX>"(ZZX_c *x)
     27    int ZZX_equal "_equal<ZZX>"(ZZX_c x, ZZX_c y)
     28
     29    void ZZX_PseudoRem "PseudoRem"(ZZX_c x, ZZX_c a, ZZX_c b)
     30    ZZ_c ZZX_LeadCoeff "LeadCoeff"(ZZX_c x)
     31    ZZ_c ZZX_ConstTerm "ConstTerm"(ZZX_c x)
     32    ZZ_c ZZX_coeff "coeff"(ZZX_c a, long i)
     33    void ZZX_SetCoeff "SetCoeff"(ZZX_c x, long i, ZZ_c a)
     34    void ZZX_SetCoeff_long "SetCoeff"(ZZX_c x, long i, long a)
     35    long IsZero_ZZX "IsZero"(ZZX_c a)
     36    # f must be monic!
     37    void ZZX_MulMod "MulMod"(ZZX_c x, ZZX_c a, ZZX_c b, ZZX_c f)
     38    void ZZX_mul_long "mul"( ZZX_c x, ZZX_c a, long b)
     39    void ZZX_mul_ZZ "mul"( ZZX_c x, ZZX_c a, ZZ_c b)
     40    void ZZX_mul "mul"( ZZX_c x, ZZX_c a, ZZX_c b)
     41    void ZZX_add "add"( ZZX_c x, ZZX_c a, ZZX_c b)
     42    void ZZX_sub "sub"( ZZX_c x, ZZX_c a, ZZX_c b)
     43    void ZZX_negate "negate"( ZZX_c x, ZZX_c a)
     44    void ZZX_div_ZZ "div"( ZZX_c x, ZZX_c a, ZZ_c b)
     45    long ZZX_deg "deg"( ZZX_c x )
     46    void ZZX_rem "rem"(ZZX_c r, ZZX_c a, ZZX_c b)
     47    void ZZX_XGCD "XGCD"(ZZ_c r, ZZX_c s, ZZX_c t, ZZX_c a, ZZX_c b, long deterministic)
     48    void ZZX_content "content"(ZZ_c d, ZZX_c f)
     49    void ZZX_factor "factor"(ZZ_c c, vec_pair_ZZX_long_c factors, ZZX_c f, long verbose, long bnd)
     50
     51    void ZZX_squarefree_decomposition(ZZX_c*** v, long** e, long* n, ZZX_c* x)
     52
     53    char* ZZX_repr(ZZX_c* x)
     54    ## for cleaning up after ZZX_repr:
     55    void cpp_delete_array "delete []"(char *str)
     56    ZZX_c* ZZX_copy(ZZX_c* x)
     57    ZZX_c* ZZX_div(ZZX_c* x, ZZX_c* y, int* divisible)
     58    void ZZX_quo_rem(ZZX_c* x, ZZX_c* other, ZZX_c** r, ZZX_c** q)
     59    ZZX_c* ZZX_square(ZZX_c* x)
     60    int ZZX_IsZero "IsZero"(ZZX_c x)
     61    int ZZX_IsOne "IsOne"(ZZX_c x)
     62    int ZZX_is_monic(ZZX_c* x)
     63    ZZX_c* ZZX_neg(ZZX_c* x)
     64    ZZX_c* ZZX_left_shift(ZZX_c* x, long n)
     65    ZZX_c* ZZX_right_shift(ZZX_c* x, long n)
     66    ZZX_c* ZZX_primitive_part(ZZX_c* x)
     67    void ZZX_pseudo_quo_rem(ZZX_c* x, ZZX_c* y, ZZX_c** r, ZZX_c** q)
     68    ZZX_c* ZZX_gcd(ZZX_c* x, ZZX_c* y)
     69    ZZX_c* ZZX_xgcd(ZZX_c* x, ZZX_c* y, ZZ_c** r, ZZX_c** s, ZZX_c** t, int proof)
     70    void ZZX_set_x(ZZX_c* x)
     71    int ZZX_is_x(ZZX_c* x)
     72    ZZX_c* ZZX_derivative(ZZX_c* x)
     73    ZZX_c* ZZX_reverse(ZZX_c* x)
     74    ZZX_c* ZZX_reverse_hi(ZZX_c* x, long hi)
     75    ZZX_c* ZZX_truncate(ZZX_c* x, long m)
     76    ZZX_c* ZZX_multiply_and_truncate(ZZX_c* x, ZZX_c* y, long m)
     77    ZZX_c* ZZX_square_and_truncate(ZZX_c* x, long m)
     78    ZZX_c* ZZX_invert_and_truncate(ZZX_c* x, long m)
     79    ZZX_c* ZZX_multiply_mod(ZZX_c* x, ZZX_c* y,  ZZX_c* modulus)
     80    ZZ_c* ZZX_trace_mod(ZZX_c* x, ZZX_c* y)
     81    char* ZZX_trace_list(ZZX_c* x)
     82    ZZ_c* ZZX_resultant(ZZX_c* x, ZZX_c* y, int proof)
     83    ZZ_c* ZZX_norm_mod(ZZX_c* x, ZZX_c* y, int proof)
     84    ZZ_c* ZZX_discriminant(ZZX_c* x, int proof)
     85    ZZ_c* ZZX_polyeval(ZZX_c* x, ZZ_c* a)
     86    ZZX_c* ZZX_charpoly_mod(ZZX_c* x, ZZX_c* y, int proof)
     87    ZZX_c* ZZX_minpoly_mod(ZZX_c* x, ZZX_c* y)
     88    void ZZX_clear(ZZX_c* x)
     89    void ZZX_preallocate_space(ZZX_c* x, long n)
     90    void ZZX_getitem_as_mpz(mpz_t* output, ZZX_c* x, long i)
     91    cdef void ZZX_setitem_from_int(ZZX_c* x, long i, int value)
     92    cdef int ZZX_getitem_as_int(ZZX_c* x, long i)
  • new file sage/libs/ntl/ntl_ZZ_decl.pxd

    diff -r e16270e56d21 -r 8e505e3fe795 sage/libs/ntl/ntl_ZZ_decl.pxd
    - +  
     1include "../../ext/cdefs.pxi"
     2
     3cdef extern from "ntl_wrap.h":
     4    #### ZZ_c
     5    ctypedef struct ZZ_c "struct ZZ":
     6        pass
     7
     8    ctypedef struct vec_ZZ_c "vec_ZZ":
     9        ZZ_c RawGet(long i)
     10        ZZ_c *elts()
     11        long length()
     12
     13    void del_charstar(char*)
     14
     15    # Some boiler-plate
     16    ZZ_c* ZZ_new "New<ZZ>"()
     17    ZZ_c* ZZ_construct "Construct<ZZ>"(void *mem)
     18    void ZZ_destruct "Destruct<ZZ>"(ZZ_c *mem)
     19    void ZZ_delete "Delete<ZZ>"(ZZ_c *mem)
     20    void ZZ_from_str "_from_str<ZZ>"(ZZ_c* dest, char* s)
     21    object ZZ_to_PyString "_to_PyString<ZZ>"(ZZ_c *x)
     22    int ZZ_equal "_equal<ZZ>"(ZZ_c x, ZZ_c y)
     23
     24    void ZZ_conv_from_int "conv"(ZZ_c x, int i)
     25    void ZZ_conv_to_int "conv"(int i, ZZ_c x)
     26    void ZZ_conv_from_long "conv"(ZZ_c x, long l)
     27    void ZZ_conv_to_long "conv"(long l, ZZ_c x)
     28    void ZZ_to_mpz(mpz_t* output, ZZ_c* x)
     29    void mpz_to_ZZ(ZZ_c *output, mpz_t* x)
     30    cdef int ZZ_to_int(ZZ_c* x)
     31    cdef ZZ_c* int_to_ZZ(int value)
     32    cdef void ZZ_set_from_int(ZZ_c* x, int value)
     33
     34    long ZZ_sign "sign"(ZZ_c a)
     35    long ZZ_IsZero "IsZero"(ZZ_c a)
     36    long ZZ_IsOne "IsOne"(ZZ_c a)
     37    long ZZ_compare "compare"(ZZ_c a, ZZ_c b)
     38    void ZZ_add "add"( ZZ_c x, ZZ_c a, ZZ_c b)
     39    void ZZ_add_long "add"(ZZ_c x, ZZ_c a, long b)
     40    void ZZ_sub "sub"( ZZ_c x, ZZ_c a, ZZ_c b)
     41    void ZZ_sub_long "sub"(ZZ_c x, long a, ZZ_c b)
     42    void ZZ_negate "negate"(ZZ_c x, ZZ_c a)
     43    void ZZ_abs "abs"(ZZ_c x, ZZ_c a)
     44
     45    void ZZ_mul "mul"( ZZ_c x, ZZ_c a, ZZ_c b)
     46    void ZZ_mul_long "mul"( ZZ_c x, ZZ_c a, long b)
     47    void ZZ_sqr "sqr"(ZZ_c x, ZZ_c a)
     48
     49    void ZZ_DivRem "DivRem"(ZZ_c q, ZZ_c r, ZZ_c a, ZZ_c b)
     50    void ZZ_div "div"( ZZ_c x, ZZ_c a, ZZ_c b)
     51    void ZZ_rem "rem"( ZZ_c r, ZZ_c a, ZZ_c b)
     52    long ZZ_DivRem_long "DivRem"(ZZ_c q, ZZ_c a, long b)
     53    long ZZ_rem_long "rem"(ZZ_c a, long b)
     54    long ZZ_divide "divide"(ZZ_c q, ZZ_c a, ZZ_c b)
     55    long ZZ_divide_long "divide"(ZZ_c q, ZZ_c a, long b)
     56    long ZZ_divide_test "divide"(ZZ_c a, ZZ_c b)
     57    long ZZ_divide_test_long "divide"(ZZ_c a, long b)
     58
     59    void ZZ_GCD "GCD"(ZZ_c d, ZZ_c a, ZZ_c b)
     60    void ZZ_XGCD "XGCD"(ZZ_c d, ZZ_c s, ZZ_c t, ZZ_c a, ZZ_c b)
     61
     62    void ZZ_AddMod "AddMod"(ZZ_c x, ZZ_c a, ZZ_c b, ZZ_c n)
     63    void ZZ_SubMod "SubMod"(ZZ_c x, ZZ_c a, ZZ_c b, ZZ_c n)
     64    void ZZ_NegateMod "NegateMod"(ZZ_c x, ZZ_c a, ZZ_c n)
     65    void ZZ_MulMod "MulMod"(ZZ_c x, ZZ_c a, ZZ_c b, ZZ_c n)
     66    void ZZ_SqrMod "SqrMod"(ZZ_c x, ZZ_c a, ZZ_c n)
     67    void ZZ_InvMod "InvMod"(ZZ_c x, ZZ_c a, ZZ_c n)
     68    long ZZ_InvModStatus "InvModStatus"(ZZ_c x, ZZ_c a, ZZ_c n)
     69    void ZZ_PowerMod "PowerMod"(ZZ_c x, ZZ_c a, ZZ_c e, ZZ_c n)
     70    void ZZ_PowerMod_long "PowerMod"(ZZ_c x, ZZ_c a, long e, ZZ_c n)
     71
     72    void ZZ_LeftShift "LeftShift"(ZZ_c x, ZZ_c a, long n)
     73    void ZZ_RightShift "RightShift"(ZZ_c x, ZZ_c a, long n)
     74
     75    long ZZ_MakeOdd "MakeOdd"(ZZ_c x)
     76    long ZZ_NumTwos "NumTwos"(ZZ_c x)
     77    long ZZ_IsOdd "IsOdd"(ZZ_c a)
     78    long ZZ_NumBits "NumBits"(ZZ_c a)
     79    long ZZ_bit "bit"(ZZ_c a, long k)
     80    void ZZ_trunc "trunc"(ZZ_c x, ZZ_c a, long k)
     81    void ZZ_SetBit "SetBit"(ZZ_c x, long p)
     82    void ZZ_SwitchBit "SwitchBit"(ZZ_c x, long p)
     83    void ZZ_weight "weight"(ZZ_c a)
     84    void ZZ_bit_and "bit_and"(ZZ_c x, ZZ_c a, ZZ_c b)
     85    void ZZ_bit_or "bit_or"(ZZ_c x, ZZ_c a, ZZ_c b)
     86    void ZZ_bit_xor "bit_xor"(ZZ_c x, ZZ_c a, ZZ_c b)
     87
     88    void ZZ_SetSeed "SetSeed"(ZZ_c s)
     89    void ZZ_RandomBnd "RandomBnd"(ZZ_c x, ZZ_c n)
     90    void ZZ_RandomBits "RandomBits"(ZZ_c x, long l)
     91
     92    long ZZ_CRT "CRT"(ZZ_c a, ZZ_c p, ZZ_c A, ZZ_c P)
     93
     94    long ZZ_ReconstructRational "ReconstructRational"(ZZ_c a, ZZ_c b, ZZ_c x, ZZ_c m, ZZ_c a_bound, ZZ_c b_bound)
     95
     96    void ZZ_GenPrime "GenPrime"(ZZ_c n, long l, long err)
     97    void ZZ_GenGermainPrime "GenGermainPrime"(ZZ_c n, long l, long err)
     98    long ZZ_ProbPrime "ProbPrime"(ZZ_c n, long NumTrials)
     99    void ZZ_RandomPrime "RandomPrime"(ZZ_c n, long l, long NumTrials)
     100    void ZZ_NextPrime "NextPrime"(ZZ_c n, ZZ_c m, long NumTrials)
     101    long ZZ_MillerWitness "MillerWitness"(ZZ_c n, ZZ_c w)
     102   
     103    void ZZ_power "power"(ZZ_c t, ZZ_c x, long e)
     104    void ZZ_power2 "power2"(ZZ_c x, long e)
     105
     106    void ZZ_SqrRoot "SqrRoot"(ZZ_c x, ZZ_c a)
     107
     108    long ZZ_Jacobi "Jacobi"(ZZ_c a, ZZ_c n)
     109    void ZZ_SqrRootMod "SqrRootMod"(ZZ_c x, ZZ_c a, ZZ_c n)
     110
     111    long ZZ_remove(ZZ_c x, ZZ_c a, ZZ_c p) # a la mpz_remove.  Written in ntl_wrap.cpp.
     112   
     113    # Random-number generation
     114    #void setSeed(ZZ_c* x)
     115    #ZZ_c* ZZ_randomBnd(ZZ_c* x)
     116    #ZZ_c* ZZ_randomBits(long n)
     117
  • new file sage/libs/ntl/ntl_ZZ_pContext_decl.pxd

    diff -r e16270e56d21 -r 8e505e3fe795 sage/libs/ntl/ntl_ZZ_pContext_decl.pxd
    - +  
     1from sage.libs.ntl.ntl_ZZ_decl cimport ZZ_c
     2
     3cdef extern from "ntl_wrap.h":
     4    ctypedef struct ZZ_pContext_c "struct ZZ_pContext":
     5        void (*restore)()
     6
     7    ZZ_pContext_c* ZZ_pContext_new "New<ZZ_pContext>"()
     8    ZZ_pContext_c* ZZ_pContext_construct "Construct<ZZ_pContext>"(void *mem)
     9    ZZ_pContext_c* ZZ_pContext_new_ZZ "ZZ_pContext_new"(ZZ_c* p)
     10    ZZ_pContext_c* ZZ_pContext_construct_ZZ "ZZ_pContext_construct"(void *mem, ZZ_c* p)
     11    void ZZ_pContext_destruct "Destruct<ZZ_pContext>"(ZZ_pContext_c *mem)
     12    void ZZ_pContext_delete "Delete<ZZ_pContext>"(ZZ_pContext_c *mem)
  • new file sage/libs/ntl/ntl_ZZ_pEContext_decl.pxd

    diff -r e16270e56d21 -r 8e505e3fe795 sage/libs/ntl/ntl_ZZ_pEContext_decl.pxd
    - +  
     1from sage.libs.ntl.ntl_ZZ_pX_decl cimport ZZ_pX_c
     2
     3cdef extern from "ntl_wrap.h":
     4    ctypedef struct ZZ_pEContext_c "struct ZZ_pEContext":
     5        void (*restore)()
     6
     7    ZZ_pEContext_c* ZZ_pEContext_new "New<ZZ_pEContext>"()
     8    ZZ_pEContext_c* ZZ_pEContext_construct "Construct<ZZ_pEContext>"(void *mem)
     9    ZZ_pEContext_c* ZZ_pEContext_new_ZZ_pX "ZZ_pEContext_new"(ZZ_pX_c* p)
     10    ZZ_pEContext_c* ZZ_pEContext_construct_ZZ_pX "ZZ_pEContext_construct"(void *mem, ZZ_pX_c* p)
     11    void ZZ_pEContext_destruct "Destruct<ZZ_pEContext>"(ZZ_pEContext_c *mem)
     12    void ZZ_pEContext_delete "Delete<ZZ_pEContext>"(ZZ_pEContext_c *mem)
     13
     14    void ZZ_pEContext_restore(ZZ_pEContext_c *c)
     15
  • new file sage/libs/ntl/ntl_ZZ_pEX_decl.pxd

    diff -r e16270e56d21 -r 8e505e3fe795 sage/libs/ntl/ntl_ZZ_pEX_decl.pxd
    - +  
     1from sage.libs.ntl.ntl_ZZ_decl cimport ZZ_c
     2from sage.libs.ntl.ntl_ZZ_p_decl cimport ZZ_p_c
     3from sage.libs.ntl.ntl_ZZ_pContext_decl cimport ZZ_pContext_c
     4from sage.libs.ntl.ntl_ZZ_pE_decl cimport ZZ_pE_c
     5from sage.libs.ntl.ntl_vec_ZZ_p_decl cimport vec_ZZ_p_c
     6from sage.libs.ntl.ntl_vec_ZZ_pE_decl cimport vec_ZZ_pE_c
     7
     8cdef extern from "ntl_wrap.h":
     9    #### ZZ_pEX_c
     10    ctypedef struct ZZ_pEX_c "struct ZZ_pEX":
     11        void *rep
     12        void (* SetMaxLength)(long n)
     13
     14    ZZ_pEX_c* ZZ_pEX_new "New<ZZ_pEX>"()
     15    ZZ_pEX_c* ZZ_pEX_construct "Construct<ZZ_pEX>"(void *mem)
     16    void ZZ_pEX_destruct "Destruct<ZZ_pEX>"(ZZ_pEX_c *mem)
     17    void ZZ_pEX_delete "Delete<ZZ_pEX>"(ZZ_pEX_c *mem)
     18    void ZZ_pEX_from_str "_from_str<ZZ_pEX>"(ZZ_pEX_c* dest, char* s)
     19    object ZZ_pEX_to_PyString "_to_PyString<ZZ_pEX>"(ZZ_pEX_c *x)
     20    #int ZZ_pEX_equal "_equal<ZZX>"(ZZ_pEX_c x, ZZ_pEX_c y)
     21
     22    #ZZ_pEX_c* str_to_ZZ_pEX(char* s)
     23    #char* ZZ_pEX_to_str(ZZ_pEX_c* x)
     24
     25    long ZZ_pEX_equal "operator=="(ZZ_pEX_c a, ZZ_pEX_c b)
     26    long ZZ_pEX_IsZero "IsZero"(ZZ_pEX_c a)
     27    long ZZ_pEX_IsOne "IsOne"(ZZ_pEX_c a)
     28
     29    void ZZ_pEX_add "add"( ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_c b)
     30    void ZZ_pEX_add_ZZ_p "add"( ZZ_pEX_c x, ZZ_pEX_c a, ZZ_p_c b)
     31    void ZZ_pEX_add_ZZ_pE "add"( ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pE_c b)
     32    void ZZ_pEX_sub "sub"( ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_c b)
     33    void ZZ_pEX_sub_ZZ_p "sub"( ZZ_pEX_c x, ZZ_pEX_c a, ZZ_p_c b)
     34    void ZZ_pEX_sub_ZZ_pE "sub"( ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pE_c b)
     35    void ZZ_pEX_negate "negate"(ZZ_pEX_c x, ZZ_pEX_c a)
     36
     37    void ZZ_pEX_mul "mul"( ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_c b)
     38    void ZZ_pEX_mul_long "mul"( ZZ_pEX_c x, ZZ_pEX_c a, long b)
     39    void ZZ_pEX_mul_ZZ_p "mul"( ZZ_pEX_c x, ZZ_pEX_c a, ZZ_p_c b)
     40    void ZZ_pEX_mul_ZZ_pE "mul"( ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pE_c b)
     41    void ZZ_pEX_sqr "sqr"( ZZ_pEX_c x, ZZ_pEX_c a)
     42    void ZZ_pEX_power "power"( ZZ_pEX_c x, ZZ_pEX_c a, long e)
     43
     44    void ZZ_pEX_LeftShift "LeftShift"(ZZ_pEX_c x, ZZ_pEX_c a, long n)
     45    void ZZ_pEX_RightShift "RightShift"(ZZ_pEX_c x, ZZ_pEX_c a, long n)
     46
     47    void ZZ_pEX_DivRem "DivRem"(ZZ_pEX_c q, ZZ_pEX_c r, ZZ_pEX_c a, ZZ_pEX_c b)
     48    void ZZ_pEX_div_ZZ_pEX "div"(ZZ_pEX_c q, ZZ_pEX_c a, ZZ_pEX_c b)
     49    void ZZ_pEX_div_ZZ_pE "div"(ZZ_pEX_c q, ZZ_pEX_c a, ZZ_pE_c b)
     50    void ZZ_pEX_div_ZZ_p "div"(ZZ_pEX_c q, ZZ_pEX_c a, ZZ_p_c b)
     51    void ZZ_pEX_div_long "div"( ZZ_pEX_c x, ZZ_pEX_c a, long b)
     52    void ZZ_pEX_rem "rem"(ZZ_pEX_c r, ZZ_pEX_c a, ZZ_pEX_c b)
     53    long ZZ_pEX_divide "divide"( ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_c b)
     54
     55    void ZZ_pEX_GCD "GCD"(ZZ_pEX_c r, ZZ_pEX_c a, ZZ_pEX_c b)
     56    void ZZ_pEX_XGCD "XGCD"(ZZ_pEX_c d, ZZ_pEX_c s, ZZ_pEX_c t, ZZ_pEX_c a, ZZ_pEX_c b)
     57
     58    long ZZ_pEX_deg "deg"( ZZ_pEX_c x )
     59    ZZ_pE_c ZZ_pEX_coeff "coeff"(ZZ_pEX_c a, long i)
     60    ZZ_pE_c ZZ_pEX_LeadCoeff "LeadCoeff"(ZZ_pEX_c a)
     61    void ZZ_pEX_SetCoeff "SetCoeff"(ZZ_pEX_c x, long i, ZZ_pE_c a)
     62    void ZZ_pEX_SetCoeff_ZZ_p "SetCoeff"(ZZ_pEX_c x, long i, ZZ_p_c a)
     63    void ZZ_pEX_SetCoeff_long "SetCoeff"(ZZ_pEX_c x, long i, long a)
     64    void ZZ_pEX_SetCoeff_one "SetCoeff"(ZZ_pEX_c x, long i)
     65    void ZZ_pEX_SetX "SetX"(ZZ_pEX_c x)
     66    long ZZ_pEX_IsX "IsX"(ZZ_pEX_c x)
     67    void ZZ_pEX_diff "diff"(ZZ_pEX_c x, ZZ_pEX_c a)
     68    void ZZ_pEX_MakeMonic "MakeMonic"(ZZ_pEX_c x)
     69    void ZZ_pEX_reverse_hi "reverse"(ZZ_pEX_c x, ZZ_pEX_c a, long hi)
     70    void ZZ_pEX_reverse "reverse"(ZZ_pEX_c x, ZZ_pEX_c a)
     71
     72    void ZZ_pEX_random "random"(ZZ_pEX_c x, long n)
     73
     74    void ZZ_pEX_BuildFromRoots "BuildFromRoots"(ZZ_pEX_c x, vec_ZZ_pE_c a)
     75    void ZZ_pEX_eval "eval"(ZZ_pE_c b, ZZ_pEX_c f, ZZ_pE_c a)
     76    void ZZ_pEX_eval_vec "eval"(vec_ZZ_pE_c b, ZZ_pEX_c f, vec_ZZ_pE_c a)
     77    void ZZ_pEX_interpolate "interpolate"(ZZ_pEX_c f, vec_ZZ_pE_c a, vec_ZZ_pE_c b)
     78   
     79    void ZZ_pEX_trunc "trunc"(ZZ_pEX_c x, ZZ_pEX_c a, long n)
     80    void ZZ_pEX_MulTrunc "MulTrunc"(ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_c b, long n)
     81    void ZZ_pEX_SqrTrunc "SqrTrunc"(ZZ_pEX_c x, ZZ_pEX_c a, long n)
     82    void ZZ_pEX_InvTrunc "InvTrunc"(ZZ_pEX_c x, ZZ_pEX_c a, long n)
     83
     84    void ZZ_pEX_MulMod "MulMod"(ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_c b, ZZ_pEX_c f)
     85    void ZZ_pEX_SqrMod "SqrMod"(ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_c f)
     86    void ZZ_pEX_MulByXMod "MulByXMod"(ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_c f)
     87    void ZZ_pEX_InvMod "InvMod"(ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_c f)
     88    long ZZ_pEX_InvModStatus "InvModStatus"(ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_c f)
     89
     90    ctypedef struct ZZ_pEX_Modulus_c "struct ZZ_pEXModulus":
     91        ZZ_pEX_c val()
     92    ZZ_pEX_Modulus_c* ZZ_pEX_Modulus_new "New<ZZ_pEXModulus>"()
     93    ZZ_pEX_Modulus_c* ZZ_pEX_Modulus_construct "Construct<ZZ_pEXModulus>"(void *mem)
     94    void ZZ_pEX_Modulus_destruct "Destruct<ZZ_pEXModulus>"(ZZ_pEX_Modulus_c *mem)
     95    void ZZ_pEX_Modulus_delete "Delete<ZZ_pEXModulus>"(ZZ_pEX_Modulus_c *mem)
     96    void ZZ_pEX_Modulus_from_str "_from_str<ZZ_pEXModulus>"(ZZ_pEX_Modulus_c* dest, char* s)
     97    void ZZ_pEX_Modulus_build "build"(ZZ_pEX_Modulus_c F, ZZ_pEX_c f)
     98    long ZZ_pEX_Modulus_deg "deg"(ZZ_pEX_Modulus_c F)
     99
     100    void ZZ_pEX_MulMod_pre "MulMod"(ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_c b, ZZ_pEX_Modulus_c F)
     101    void ZZ_pEX_SqrMod_pre "SqrMod"(ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_Modulus_c F)
     102    void ZZ_pEX_PowerMod_pre "PowerMod"(ZZ_pEX_c x, ZZ_pEX_c a, long e, ZZ_pEX_Modulus_c F)
     103    void ZZ_pEX_PowerMod_ZZ_pre "PowerMod"(ZZ_pEX_c x, ZZ_pEX_c a, ZZ_c e, ZZ_pEX_Modulus_c F)
     104    void ZZ_pEX_PowerXMod_pre "PowerXMod"(ZZ_pEX_c x, long e, ZZ_pEX_Modulus_c F)
     105    void ZZ_pEX_PowerXMod_ZZ_pre "PowerXMod"(ZZ_pEX_c x, ZZ_c e, ZZ_pEX_Modulus_c F)
     106    void ZZ_pEX_rem_pre "rem"(ZZ_pEX_c x, ZZ_pEX_c a, ZZ_pEX_Modulus_c F)
     107    void ZZ_pEX_DivRem_pre "DivRem"(ZZ_pEX_c q, ZZ_pEX_c r, ZZ_pEX_c a, ZZ_pEX_Modulus_c F)
     108    void ZZ_pEX_div_pre "div"(ZZ_pEX_c q, ZZ_pEX_c a, ZZ_pEX_Modulus_c F)
     109
     110    void ZZ_pEX_MinPolyMod "MinPolyMod"(ZZ_pEX_c h, ZZ_pEX_c g, ZZ_pEX_c f)
     111    void ZZ_pEX_MinPolyMod_pre "MinPolyMod"(ZZ_pEX_c h, ZZ_pEX_c g, ZZ_pEX_Modulus_c F)
     112
     113    void ZZ_pEX_TraceMod "TraceMod"(ZZ_pE_c x, ZZ_pEX_c a, ZZ_pEX_c f)
     114    void ZZ_pEX_TraceMod_pre "TraceMod"(ZZ_pE_c x, ZZ_pEX_c a, ZZ_pEX_Modulus_c F)
     115    void ZZ_pEX_TraceVec "TraceVec"(vec_ZZ_pE_c x, ZZ_pEX_c f)
     116    void ZZ_pEX_NormMod "NormMod"(ZZ_pE_c x, ZZ_pEX_c a, ZZ_pEX_c f)
     117    void ZZ_pEX_resultant "resultant"(ZZ_pE_c x, ZZ_pEX_c a, ZZ_pEX_c b)
     118   
     119    void ZZ_pEX_clear "clear"(ZZ_pEX_c x)
     120    void ZZ_pEX_set "set"(ZZ_pEX_c x)
     121
     122    void ZZ_pEX_conv_modulus(ZZ_pEX_c fout, ZZ_pEX_c fin, ZZ_pContext_c c)
     123
     124
  • new file sage/libs/ntl/ntl_ZZ_pE_decl.pxd

    diff -r e16270e56d21 -r 8e505e3fe795 sage/libs/ntl/ntl_ZZ_pE_decl.pxd
    - +  
     1from sage.libs.ntl.ntl_ZZ_decl cimport ZZ_c
     2from sage.libs.ntl.ntl_ZZ_p_decl cimport ZZ_p_c
     3from sage.libs.ntl.ntl_ZZ_pX_decl cimport ZZ_pX_c
     4
     5cdef extern from "ntl_wrap.h":
     6    #### ZZ_pE_c
     7    ctypedef struct ZZ_pE_c "struct ZZ_pE":
     8        pass
     9
     10    # Some boiler-plate
     11    ZZ_pE_c* ZZ_pE_new "New<ZZ_pE>"()
     12    ZZ_pE_c* ZZ_pE_construct "Construct<ZZ_pE>"(void *mem)
     13    void ZZ_pE_destruct "Destruct<ZZ_pE>"(ZZ_pE_c *mem)
     14    void ZZ_pE_delete "Delete<ZZ_pE>"(ZZ_pE_c *mem)
     15    void ZZ_pE_from_str "_from_str<ZZ_pE>"(ZZ_pE_c* dest, char* s)
     16    object ZZ_pE_to_PyString "_to_PyString<ZZ_pE>"(ZZ_pE_c *x)
     17    int ZZ_pE_equal "_equal<ZZ_pE>"(ZZ_pE_c x, ZZ_pE_c y)
     18
     19    #ZZ_pE_c* str_to_ZZ_pE(char* s)
     20    #void del_ZZ_pE(ZZ_pE_c* n)
     21    #void ZZ_pE_to_str(char** s, ZZ_pE_c* x)
     22    void ZZ_pE_add "add"( ZZ_pE_c x, ZZ_pE_c a, ZZ_pE_c b)
     23    void ZZ_pE_add_long "add"( ZZ_pE_c x, ZZ_pE_c a, long b)
     24    void ZZ_pE_add_ZZ_p "add"( ZZ_pE_c x, ZZ_pE_c a, ZZ_p_c b)
     25    void ZZ_pE_sub "sub"( ZZ_pE_c x, ZZ_pE_c a, ZZ_pE_c b)
     26    void ZZ_pE_sub_long "add"( ZZ_pE_c x, ZZ_pE_c a, long b)
     27    void ZZ_pE_sub_ZZ_p "sub"( ZZ_pE_c x, ZZ_pE_c a, ZZ_p_c b)
     28    void ZZ_pE_mul "mul"( ZZ_pE_c x, ZZ_pE_c a, ZZ_pE_c b)
     29    void ZZ_pE_mul_long "mul"( ZZ_pE_c x, ZZ_pE_c a, long b)
     30    void ZZ_pE_mul_ZZ_p "mul"( ZZ_pE_c x, ZZ_pE_c a, ZZ_p_c b)
     31    void ZZ_pE_negate "negate"(ZZ_pE_c x, ZZ_pE_c a)
     32    void ZZ_pE_power "power"(ZZ_pE_c t, ZZ_pE_c x, long e)
     33    int ZZ_pE_IsOne "IsOne"(ZZ_pE_c x)
     34    int ZZ_pE_IsZero "IsZero"(ZZ_pE_c x)
     35    ZZ_pX_c ZZ_pE_rep "rep"(ZZ_pE_c z)
     36    #void ntl_ZZ_pE_set_modulus(ZZ_pX_c* x)
     37    #int ZZ_pE_eq( ZZ_pE_c* x,  ZZ_pE_c* y)
     38    #int ZZ_pE_eq_ZZ_p( ZZ_pE_c* x, ZZ_p_c* y)
     39    void ZZ_pE_inv "inv"( ZZ_pE_c x, ZZ_pE_c a) # raises an error if a not invertible
     40    void ZZ_pE_div "div"( ZZ_pE_c x, ZZ_pE_c a, ZZ_pE_c b) # raises an error if b not invertible
     41    void ZZ_pE_div_ZZ_p "div"( ZZ_pE_c x, ZZ_pE_c a, ZZ_p_c b) # raises an error if b not invertible
     42    void ZZ_pE_ZZ_p_div "div"( ZZ_pE_c x, ZZ_p_c a, ZZ_pE_c b) # raises an error if b not invertible
     43    void ZZ_pE_random "random"( ZZ_pE_c x)
     44    void ZZ_pE_trace "trace"( ZZ_p_c x, ZZ_pE_c a)
     45    void ZZ_pE_norm "norm"( ZZ_p_c x, ZZ_pE_c a)
     46
     47    ZZ_pE_c long_to_ZZ_pE "to_ZZ_pE"(long i)
     48    ZZ_pE_c ZZ_to_ZZ_pE "to_ZZ_pE"(ZZ_c i)
     49    ZZ_pE_c ZZ_p_to_ZZ_pE "to_ZZ_pE"(ZZ_p_c i)
     50    ZZ_pE_c ZZ_pX_to_ZZ_pE "to_ZZ_pE"(ZZ_pX_c i)
     51    ZZ_pX_c ZZ_pE_to_ZZ_pX(ZZ_pE_c x)
     52   
     53    #ZZ_pX_c rep(ZZ_pE_c x)
  • sage/libs/ntl/ntl_ZZ_pX.pxd

    diff -r e16270e56d21 -r 8e505e3fe795 sage/libs/ntl/ntl_ZZ_pX.pxd
    a b  
    1 include "decl.pxi"
    21include "../../ext/cdefs.pxi"
    32
     3from ntl_ZZ_pX_decl cimport *, ZZ_pX_c, ZZ_pX_Modulus_c
    44from sage.libs.ntl.ntl_ZZ_pContext cimport ntl_ZZ_pContext_class
    55
    66cdef class ntl_ZZ_pX:
     
    1212
    1313cdef class ntl_ZZ_pX_Modulus:
    1414    cdef ZZ_pX_Modulus_c x
    15     cdef ntl_ZZ_pX poly
    16  No newline at end of file
     15    cdef ntl_ZZ_pX poly
  • new file sage/libs/ntl/ntl_ZZ_pX_decl.pxd

    diff -r e16270e56d21 -r 8e505e3fe795 sage/libs/ntl/ntl_ZZ_pX_decl.pxd
    - +  
     1from sage.libs.ntl.ntl_ZZ_p_decl cimport ZZ_p_c
     2from sage.libs.ntl.ntl_vec_ZZ_p_decl cimport vec_ZZ_p_c
     3from sage.libs.ntl.ntl_ZZ_decl cimport ZZ_c
     4from sage.libs.ntl.ntl_ZZX_decl cimport ZZX_c
     5from sage.libs.ntl.ntl_ZZ_pContext_decl cimport ZZ_pContext_c
     6
     7
     8cdef extern from "ntl_wrap.h":
     9    #### ZZ_pX_c
     10    ctypedef struct ZZ_pX_c "struct ZZ_pX":
     11        void *rep
     12        void (* SetMaxLength)(long n)
     13
     14    ZZ_pX_c* ZZ_pX_new "New<ZZ_pX>"()
     15    ZZ_pX_c* ZZ_pX_construct "Construct<ZZ_pX>"(void *mem)
     16    void ZZ_pX_destruct "Destruct<ZZ_pX>"(ZZ_pX_c *mem)
     17    void ZZ_pX_delete "Delete<ZZ_pX>"(ZZ_pX_c *mem)
     18    void ZZ_pX_from_str "_from_str<ZZ_pX>"(ZZ_pX_c* dest, char* s)
     19    object ZZ_pX_to_PyString "_to_PyString<ZZ_pX>"(ZZ_pX_c *x)
     20    #int ZZ_pX_equal "_equal<ZZ_pX>"(ZZ_pX_c x, ZZ_pX_c y)
     21
     22    long ZZ_pX_equal "operator=="(ZZ_pX_c a, ZZ_pX_c b)
     23    long ZZ_pX_IsZero "IsZero"(ZZ_pX_c a)
     24    long ZZ_pX_IsOne "IsOne"(ZZ_pX_c a)
     25   
     26    void ZZ_pX_add "add"( ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_c b)
     27    void ZZ_pX_add_long "add"(ZZ_pX_c x, ZZ_pX_c a, long b)
     28    void ZZ_pX_sub "sub"( ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_c b)
     29    void ZZ_pX_sub_long "sub"(ZZ_pX_c x, long a, ZZ_pX_c b)
     30    void ZZ_pX_negate "negate"(ZZ_pX_c x, ZZ_pX_c a)
     31
     32    void ZZ_pX_mul "mul"( ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_c b)
     33    void ZZ_pX_mul_long "mul"( ZZ_pX_c x, ZZ_pX_c a, long b)
     34    void ZZ_pX_mul_ZZ_p "mul"( ZZ_pX_c x, ZZ_pX_c a, ZZ_p_c b)
     35    void ZZ_pX_rmul "mul"( ZZ_pX_c x, ZZ_pX_c a, ZZ_p_c b)
     36    void ZZ_pX_sqr "sqr"( ZZ_pX_c x, ZZ_pX_c a)
     37    long ZZ_pX_power "power"( ZZ_pX_c x, ZZ_pX_c a, long e)
     38
     39    void ZZ_pX_LeftShift "LeftShift"(ZZ_pX_c x, ZZ_pX_c a, long n)
     40    void ZZ_pX_RightShift "RightShift"(ZZ_pX_c x, ZZ_pX_c a, long n)
     41
     42    void ZZ_pX_DivRem "DivRem"(ZZ_pX_c q, ZZ_pX_c r, ZZ_pX_c a, ZZ_pX_c b)
     43    void ZZ_pX_div_ZZ "div"( ZZ_pX_c q, ZZ_pX_c a, ZZ_pX_c b)
     44    void ZZ_pX_div "div"( ZZ_pX_c q, ZZ_pX_c a, ZZ_pX_c b)
     45    long ZZ_pX_divide "divide"( ZZ_pX_c q, ZZ_pX_c a, ZZ_pX_c b)
     46    void ZZ_pX_rem "rem"(ZZ_pX_c r, ZZ_pX_c a, ZZ_pX_c b)
     47
     48    void ZZ_pX_GCD "GCD"(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_c b)
     49    void ZZ_pX_PlainXGCD "PlainXGCD"(ZZ_pX_c d, ZZ_pX_c s, ZZ_pX_c t, ZZ_pX_c a, ZZ_pX_c b)
     50    void ZZ_pX_XGCD "XGCD"(ZZ_pX_c d, ZZ_pX_c s, ZZ_pX_c t, ZZ_pX_c a, ZZ_pX_c b)
     51
     52    long ZZ_pX_deg "deg"( ZZ_pX_c x )
     53    ZZ_p_c ZZ_pX_coeff "coeff"(ZZ_pX_c a, long i)
     54    ZZ_p_c ZZ_pX_LeadCoeff "LeadCoeff"(ZZ_pX_c x)
     55    ZZ_p_c ZZ_pX_ConstTerm "ConstTerm"(ZZ_pX_c x)
     56    void ZZ_pX_SetCoeff "SetCoeff"(ZZ_pX_c x, long i, ZZ_p_c a)
     57    void ZZ_pX_SetCoeff_long "SetCoeff"(ZZ_pX_c x, long i, long a)
     58    void ZZ_pX_SetX "SetX"(ZZ_pX_c x)
     59    long ZZ_pX_IsX "IsX"(ZZ_pX_c a)
     60    void ZZ_pX_diff "diff"(ZZ_pX_c x, ZZ_pX_c a)
     61    void ZZ_pX_MakeMonic "MakeMonic"(ZZ_pX_c x)
     62    void ZZ_pX_reverse_hi "reverse"(ZZ_pX_c x, ZZ_pX_c a, long hi)
     63    void ZZ_pX_reverse "reverse"(ZZ_pX_c x, ZZ_pX_c a)
     64    void ZZ_pX_VectorCopy "VectorCopy"(vec_ZZ_p_c x, ZZ_pX_c a, long n)
     65
     66    void ZZ_pX_random "random"(ZZ_pX_c x, long n)
     67
     68    void ZZ_pX_BuildFromRoots "BuildFromRoots"(ZZ_pX_c x, vec_ZZ_p_c a)
     69    void ZZ_pX_eval "eval"(ZZ_p_c fa, ZZ_pX_c f, ZZ_p_c a)
     70    void ZZ_pX_eval_vec "eval"(vec_ZZ_p_c fa, ZZ_pX_c f, vec_ZZ_p_c a)
     71    void ZZ_pX_interpolate "interpolate"(ZZ_pX_c f, vec_ZZ_p_c a, vec_ZZ_p_c b)
     72
     73    void ZZ_pX_trunc "trunc"(ZZ_pX_c x, ZZ_pX_c a, long n)
     74    void ZZ_pX_MulTrunc "MulTrunc"(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_c b, long n)
     75    void ZZ_pX_SqrTrunc "SqrTrunc"(ZZ_pX_c x, ZZ_pX_c a, long n)
     76    void ZZ_pX_InvTrunc "InvTrunc"(ZZ_pX_c x, ZZ_pX_c a, long n)
     77
     78    void ZZ_pX_MulMod "MulMod"(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_c b, ZZ_pX_c f)
     79    void ZZ_pX_SqrMod "SqrMod"(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_c f)
     80    void ZZ_pX_MulByXMod "MulByXMod"(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_c f)
     81    void ZZ_pX_InvMod "InvMod"(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_c f)
     82    long ZZ_pX_InvModStatus "InvModStatus"(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_c f)
     83
     84    ctypedef struct ZZ_pX_Modulus_c "struct ZZ_pXModulus":
     85        ZZ_pX_c (* val) ( )
     86
     87    ZZ_pX_Modulus_c* ZZ_pX_Modulus_new "New<ZZ_pXModulus>"()
     88    ZZ_pX_Modulus_c* ZZ_pX_Modulus_construct "Construct<ZZ_pXModulus>"(void *mem)
     89    void ZZ_pX_Modulus_destruct "Destruct<ZZ_pXModulus>"(ZZ_pX_Modulus_c *mem)
     90    void ZZ_pX_Modulus_delete "Delete<ZZ_pXModulus>"(ZZ_pX_Modulus_c *mem)
     91    void ZZ_pX_Modulus_from_str "_from_str<ZZ_pXModulus>"(ZZ_pX_Modulus_c* dest, char* s)
     92    void ZZ_pX_Modulus_build "build"(ZZ_pX_Modulus_c F, ZZ_pX_c f) # MUST be called before using the modulus
     93    long ZZ_pX_Modulus_deg "deg"(ZZ_pX_Modulus_c F)
     94   
     95    void ZZ_pX_MulMod_pre "MulMod"(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_c b, ZZ_pX_Modulus_c F)
     96    void ZZ_pX_SqrMod_pre "SqrMod"(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_Modulus_c F)
     97    void ZZ_pX_PowerMod_pre "PowerMod"(ZZ_pX_c x, ZZ_pX_c a, ZZ_c e, ZZ_pX_Modulus_c F)
     98    void ZZ_pX_PowerMod_long_pre "PowerMod"(ZZ_pX_c x, ZZ_pX_c a, long e, ZZ_pX_Modulus_c F)
     99    void ZZ_pX_PowerXMod_pre "PowerXMod"(ZZ_pX_c x, ZZ_c e, ZZ_pX_Modulus_c F)
     100    void ZZ_pX_PowerXMod_long_pre "PowerXMod"(ZZ_pX_c x, long e, ZZ_pX_Modulus_c F)
     101    void ZZ_pX_PowerXPlusAMod_pre "PowerXPlusAMod"(ZZ_pX_c x, ZZ_p_c a, ZZ_c e, ZZ_pX_Modulus_c F)
     102    void ZZ_pX_PowerXPlusAMod_long_pre "PowerXPlusAMod"(ZZ_pX_c x, ZZ_p_c a, long e, ZZ_pX_Modulus_c F)
     103    void ZZ_pX_rem_pre "rem"(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_Modulus_c F)
     104    void ZZ_pX_DivRem_pre "DivRem"(ZZ_pX_c q, ZZ_pX_c r, ZZ_pX_c a, ZZ_pX_Modulus_c F)
     105    void ZZ_pX_div_pre "div"(ZZ_pX_c q, ZZ_pX_c a, ZZ_pX_Modulus_c F)
     106    void ZZ_pX_InvMod_pre "InvMod"(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_Modulus_c F)
     107
     108    ctypedef struct ZZ_pX_Multiplier_c "struct ZZ_pXMultiplier":
     109        ZZ_pX_c (* val) ( )
     110    ZZ_pX_Multiplier_c* ZZ_pX_Multiplier_new "New<ZZ_pXMultiplier>"()
     111    ZZ_pX_Multiplier_c* ZZ_pX_Multiplier_construct "Construct<ZZ_pXMultiplier>"(void *mem)
     112    void ZZ_pX_Multiplier_destruct "Destruct<ZZ_pXMultiplier>"(ZZ_pX_Multiplier_c *mem)
     113    void ZZ_pX_Multiplier_delete "Delete<ZZ_pXMultiplier>"(ZZ_pX_Multiplier_c *mem)
     114    void ZZ_pX_Multiplier_from_str "_from_str<ZZ_pXMultiplier>"(ZZ_pX_Multiplier_c* dest, char* s)
     115    void ZZ_pX_Multiplier_build "build"(ZZ_pX_Multiplier_c F, ZZ_pX_c b, ZZ_pX_Modulus_c F) # MUST be called before using the multiplier
     116    void ZZ_pX_MulMod_premul "MulMod"(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_Multiplier_c B, ZZ_pX_Modulus_c F)
     117
     118    void ZZ_pX_CompMod "CompMod"(ZZ_pX_c x, ZZ_pX_c g, ZZ_pX_c h, ZZ_pX_Modulus_c F)
     119    # Add other composition functions here
     120    # Add power projection routines
     121    # Add minimum polynomials of recurrence sequences
     122    void ZZ_pX_MinPolyMod "MinPolyMod"(ZZ_pX_c h, ZZ_pX_c g, ZZ_pX_c f)
     123    void ZZ_pX_MinPolyMod_pre "MinPolyMod"(ZZ_pX_c h, ZZ_pX_c g, ZZ_pX_Modulus_c F)
     124
     125    void ZZ_pX_TraceMod "TraceMod"(ZZ_p_c x, ZZ_pX_c a, ZZ_pX_c f)
     126    void ZZ_pX_TraceMod_pre "TraceMod"(ZZ_p_c x, ZZ_pX_c a, ZZ_pX_Modulus_c F)
     127    void ZZ_pX_TraceVec "TraceVec"(vec_ZZ_p_c S, ZZ_pX_c f)
     128    void ZZ_pX_NormMod "NormMod"(ZZ_p_c x, ZZ_pX_c a, ZZ_pX_c f)
     129    void ZZ_pX_resultant "resultant"(ZZ_p_c x, ZZ_pX_c a, ZZ_pX_c b)
     130    void ZZ_pX_CharPolyMod "CharPolyMod"(ZZ_pX_c g, ZZ_pX_c a, ZZ_pX_c f)
     131   
     132    void ZZ_pX_clear "clear"(ZZ_pX_c x)
     133    void ZZ_pX_set "set"(ZZ_pX_c x)
     134
     135    void ZZ_pX_to_ZZX "conv"(ZZX_c x, ZZ_pX_c a)
     136    void ZZX_to_ZZ_pX "conv"(ZZ_pX_c x, ZZX_c a)
     137
     138    #char* ZZ_pX_repr(ZZ_pX_c* x)
     139    #ZZ_pX_c* ZZ_pX_copy(ZZ_pX_c* x)
     140    #ZZ_pX_c* ZZ_pX_mod(ZZ_pX_c* x, ZZ_pX_c* y)
     141    #void ZZ_pX_quo_rem(ZZ_pX_c* x, ZZ_pX_c* other, ZZ_pX_c** r, ZZ_pX_c** q)
     142    #ZZ_pX_c* ZZ_pX_square(ZZ_pX_c* x)
     143    #int ZZ_pX_is_monic(ZZ_pX_c* x)
     144    #ZZ_pX_c* ZZ_pX_neg(ZZ_pX_c* x)
     145    #ZZ_pX_c* ZZ_pX_left_shift(ZZ_pX_c* x, long n)
     146    #ZZ_pX_c* ZZ_pX_right_shift(ZZ_pX_c* x, long n)
     147    #ZZ_pX_c* ZZ_pX_gcd(ZZ_pX_c* x, ZZ_pX_c* y)
     148    #ZZ_pX_c* ZZ_pX_xgcd(ZZ_pX_c** d, ZZ_pX_c** s, ZZ_pX_c** t, ZZ_pX_c* a, ZZ_pX_c* b)
     149    #ZZ_pX_c* ZZ_pX_plain_xgcd(ZZ_pX_c** d, ZZ_pX_c** s, ZZ_pX_c** t, ZZ_pX_c* a, ZZ_pX_c* b)
     150    #void ZZ_pX_set_x(ZZ_pX_c* x)
     151    #int ZZ_pX_is_x(ZZ_pX_c* x)
     152    #ZZ_pX_c* ZZ_pX_derivative(ZZ_pX_c* x)
     153    #ZZ_pX_c* ZZ_pX_reverse(ZZ_pX_c* x)
     154    #ZZ_pX_c* ZZ_pX_reverse_hi(ZZ_pX_c* x, long hi)
     155    #ZZ_pX_c* ZZ_pX_truncate(ZZ_pX_c* x, long m)
     156    #ZZ_pX_c* ZZ_pX_multiply_and_truncate(ZZ_pX_c* x, ZZ_pX_c* y, long m)
     157    #ZZ_pX_c* ZZ_pX_square_and_truncate(ZZ_pX_c* x, long m)
     158    #ZZ_pX_c* ZZ_pX_invert_and_truncate(ZZ_pX_c* x, long m)
     159    #ZZ_pX_c* ZZ_pX_multiply_mod(ZZ_pX_c* x, ZZ_pX_c* y,  ZZ_pX_c* modulus)
     160    #ZZ_p_c* ZZ_pX_trace_mod(ZZ_pX_c* x, ZZ_pX_c* y)
     161    char* ZZ_pX_trace_list(ZZ_pX_c* x)
     162    #ZZ_p_c* ZZ_pX_resultant(ZZ_pX_c* x, ZZ_pX_c* y)
     163    #ZZ_p_c* ZZ_pX_norm_mod(ZZ_pX_c* x, ZZ_pX_c* y)
     164    #ZZ_p_c* ZZ_pX_discriminant(ZZ_pX_c* x)
     165    #ZZ_pX_c* ZZ_pX_charpoly_mod(ZZ_pX_c* x, ZZ_pX_c* y)
     166    #ZZ_pX_c* ZZ_pX_minpoly_mod(ZZ_pX_c* x, ZZ_pX_c* y)
     167    #void ZZ_pX_preallocate_space(ZZ_pX_c* x, long n)
     168   
     169    void ZZ_pX_factor(ZZ_pX_c*** v, long** e, long* n, ZZ_pX_c* x, long verbose)
     170    void ZZ_pX_linear_roots(ZZ_p_c*** v, long* n, ZZ_pX_c* x)
     171
     172    # The following are ZZ_pX functions written in ntl_wrap, used for padics.
     173   
     174    void ZZ_pX_conv_modulus(ZZ_pX_c fout, ZZ_pX_c fin, ZZ_pContext_c c)
     175    void ZZ_pX_min_val_coeff(long valuation, long index, ZZ_pX_c f, ZZ_c p)
     176    long ZZ_pX_get_val_coeff(ZZ_pX_c f, ZZ_c p, long i)
     177    void ZZ_pX_left_pshift(ZZ_pX_c x, ZZ_pX_c a, ZZ_c pn, ZZ_pContext_c c)
     178    void ZZ_pX_right_pshift(ZZ_pX_c x, ZZ_pX_c a, ZZ_c pn, ZZ_pContext_c c)
     179    void ZZ_pX_InvMod_newton_unram(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_Modulus_c F, ZZ_pContext_c cpn, ZZ_pContext_c cp)
     180    void ZZ_pX_InvMod_newton_ram(ZZ_pX_c x, ZZ_pX_c a, ZZ_pX_Modulus_c F, ZZ_pContext_c cpn)
     181
  • new file sage/libs/ntl/ntl_ZZ_p_decl.pxd

    diff -r e16270e56d21 -r 8e505e3fe795 sage/libs/ntl/ntl_ZZ_p_decl.pxd
    - +  
     1from sage.libs.ntl.ntl_ZZ_decl cimport ZZ_c
     2cdef extern from "ntl_wrap.h":
     3    ctypedef struct ZZ_p_c "struct ZZ_p":
     4        pass
     5
     6    # Some boiler-plate
     7    ZZ_p_c* ZZ_p_new "New<ZZ_p>"()
     8    ZZ_p_c* ZZ_p_construct "Construct<ZZ_p>"(void *mem)
     9    void ZZ_p_destruct "Destruct<ZZ_p>"(ZZ_p_c *mem)
     10    void ZZ_p_delete "Delete<ZZ_p>"(ZZ_p_c *mem)
     11    void ZZ_p_from_str "_from_str<ZZ_p>"(ZZ_p_c* dest, char* s)
     12    object ZZ_p_to_PyString "_to_PyString<ZZ_p>"(ZZ_p_c *x)
     13    int ZZ_p_equal "_equal<ZZ_p>"(ZZ_p_c x, ZZ_p_c y)
     14
     15    char* ZZ_p_to_str(ZZ_p_c* x)
     16    void ZZ_p_add "add"( ZZ_p_c x, ZZ_p_c a, ZZ_p_c b)
     17    void ZZ_p_sub "sub"( ZZ_p_c x, ZZ_p_c a, ZZ_p_c b)
     18    void ZZ_p_mul "mul"( ZZ_p_c x, ZZ_p_c a, ZZ_p_c b)
     19    void ZZ_p_mul_long "mul"( ZZ_p_c x, ZZ_p_c a, long b)
     20    void ZZ_p_div "div"( ZZ_p_c x, ZZ_p_c a, ZZ_p_c b)
     21    void ZZ_p_negate "negate"(ZZ_p_c x, ZZ_p_c a)
     22    void ZZ_p_power "power"(ZZ_p_c t, ZZ_p_c x, long e)
     23    int ZZ_p_IsOne "IsOne"(ZZ_p_c x)
     24    int ZZ_p_IsZero "IsZero"(ZZ_p_c x)
     25    ZZ_c ZZ_p_rep "rep"(ZZ_p_c z)
     26    ZZ_p_c* ZZ_p_neg(ZZ_p_c* x)
     27    void ntl_ZZ_set_modulus(ZZ_c* x)
     28    void ZZ_p_inv "inv"(ZZ_p_c r, ZZ_p_c x)
     29    void ZZ_p_random "random"(ZZ_p_c r)
     30    ZZ_p_c long_to_ZZ_p "to_ZZ_p"(long i)
     31    ZZ_p_c ZZ_to_ZZ_p "to_ZZ_p"(ZZ_c i)
     32    int ZZ_p_to_int(ZZ_p_c x)
     33    ZZ_p_c int_to_ZZ_p(int i)
     34    void ZZ_p_modulus(ZZ_c* mod, ZZ_p_c* x)
  • sage/libs/ntl/ntl_lzz_p.pxd

    diff -r e16270e56d21 -r 8e505e3fe795 sage/libs/ntl/ntl_lzz_p.pxd
    a b  
    11include "decl.pxi"
    22
    33from sage.libs.ntl.ntl_lzz_pContext cimport ntl_zz_pContext_class
     4from sage.libs.ntl.ntl_lzz_p_decl cimport *,zz_p_c
    45
    5 ##cdef extern from "ntl_wrap.h":
    6 ##    struct zz_p_c
     6#cdef extern from "ntl_wrap.h":
     7#    struct zz_p_c
    78
    89cdef class ntl_zz_p:
    910    cdef zz_p_c x
  • new file sage/libs/ntl/ntl_lzz_pContext_decl.pxd

    diff -r e16270e56d21 -r 8e505e3fe795 sage/libs/ntl/ntl_lzz_pContext_decl.pxd
    - +  
     1cdef extern from "ntl_wrap.h":
     2    ctypedef struct zz_pContext_c "struct zz_pContext":
     3        pass
     4
     5    zz_pContext_c* zz_pContext_new "New<zz_pContext>"()
     6    zz_pContext_c* zz_pContext_construct "Construct<zz_pContext>"(void *mem)
     7    zz_pContext_c* zz_pContext_new_long "zz_pContext_new"(long p)
     8    zz_pContext_c* zz_pContext_construct_long "zz_pContext_construct"(void *mem, long p)
     9    void zz_pContext_destruct "Destruct<zz_pContext>"(zz_pContext_c *mem)
     10    void zz_pContext_delete "Delete<zz_pContext>"(zz_pContext_c *mem)
     11
     12    void zz_pContext_restore(zz_pContext_c *c)
     13
  • sage/libs/ntl/ntl_lzz_pX.pxd

    diff -r e16270e56d21 -r 8e505e3fe795 sage/libs/ntl/ntl_lzz_pX.pxd
    a b  
    1 include "decl.pxi"
     1from sage.libs.ntl.ntl_lzz_pX_decl cimport *, zz_pX_c, zz_pX_Modulus_c
     2from sage.libs.ntl.ntl_lzz_p_decl cimport *, zz_p_c
    23
    34from sage.libs.ntl.ntl_lzz_pContext cimport ntl_zz_pContext_class
    45
    5 cdef extern from "ntl_wrap.h":
    6     struct zz_pX
     6#cdef extern from "ntl_wrap.h":
     7#    struct zz_pX
    78
    89cdef class ntl_zz_pX:
    910    cdef zz_pX_c x
  • new file sage/libs/ntl/ntl_lzz_pX_decl.pxd

    diff -r e16270e56d21 -r 8e505e3fe795 sage/libs/ntl/ntl_lzz_pX_decl.pxd
    - +  
     1from sage.libs.ntl.ntl_lzz_p_decl cimport zz_p_c
     2from sage.libs.ntl.ntl_ZZ_decl cimport ZZ_c
     3
     4cdef extern from "ntl_wrap.h":
     5    #### zz_pX_c
     6    ctypedef struct zz_pX_c "struct zz_pX":
     7        void *rep
     8        void (* SetMaxLength)(long n)
     9
     10    void zz_pX_construct "Construct<zz_pX>"(void *mem)
     11    void zz_pX_destruct "Destruct<zz_pX>"(zz_pX_c *mem)
     12    char* zz_pX_repr(zz_pX_c* x)
     13    void zz_pX_SetCoeff_long "SetCoeff"(zz_pX_c x, long i, long a)
     14    zz_p_c zz_pX_GetCoeff "coeff"(zz_pX_c x, long i)
     15    void zz_pX_add "add"(zz_pX_c x, zz_pX_c a, zz_pX_c b)
     16    void zz_pX_sub "sub"(zz_pX_c x, zz_pX_c a, zz_pX_c b)
     17    void zz_pX_mul "mul"(zz_pX_c x, zz_pX_c a, zz_pX_c b)
     18    void zz_pX_rmul "mul"(zz_pX_c x, zz_pX_c a, long b)
     19    void zz_pX_lmul "mul"(zz_pX_c x, long a, zz_pX_c b)
     20    long zz_pX_div "div"(zz_pX_c x, zz_pX_c a, zz_pX_c b)
     21    long zz_pX_divide "divide"(zz_pX_c x, zz_pX_c a, zz_pX_c b)
     22    void zz_pX_mod "rem"(zz_pX_c x, zz_pX_c a, zz_pX_c b)
     23    void zz_pX_divrem "DivRem"(zz_pX_c q, zz_pX_c r, zz_pX_c a, zz_pX_c b)
     24    void zz_pX_LeftShift "LeftShift"(zz_pX_c x, zz_pX_c a, long b)
     25    void zz_pX_RightShift "RightShift"(zz_pX_c x, zz_pX_c a, long b)
     26    void zz_pX_negate "negate"(zz_pX_c x, zz_pX_c a)
     27    zz_p_c zz_pX_LeadCoeff "LeadCoeff"(zz_pX_c x)
     28    zz_p_c zz_pX_ConstTerm "ConstTerm" (zz_pX_c x)
     29    void zz_pX_negate "negate"(zz_pX_c x, zz_pX_c a)
     30    void zz_pX_trunc "trunc"(zz_pX_c x, zz_pX_c a, long n) ## x = a % X^n
     31    void zz_pX_MulTrunc "MulTrunc"(zz_pX_c x, zz_pX_c a, zz_pX_c b, long n)
     32    void zz_pX_SqrTrunc "SqrTrunc"(zz_pX_c x, zz_pX_c a, long n)
     33    void zz_pX_InvTrunc "InvTrunc"(zz_pX_c x, zz_pX_c a, long n)
     34    void zz_pX_sqr "sqr"(zz_pX_c x, zz_pX_c a)
     35    void zz_pX_power "power"(zz_pX_c x, zz_pX_c a, long e)
     36    void zz_pX_clear "clear"(zz_pX_c x)
     37    void zz_pX_SetX "SetX"(zz_pX_c x)
     38    bint zz_pX_IsX "IsX"(zz_pX_c x)
     39    bint zz_pX_IsZero "IsZero"(zz_pX_c x)
     40    bint zz_pX_IsOne "IsOne"(zz_pX_c x)
     41    long zz_pX_deg "deg"(zz_pX_c x)
     42    zz_pX_c zz_pX_zero "zz_pX::zero"()
     43    void zz_pX_diff "diff"(zz_pX_c x, zz_pX_c a)
     44    void zz_pX_reverse "reverse"(zz_pX_c x, zz_pX_c a)
     45    void zz_pX_eval "eval" (zz_p_c fa, zz_pX_c f, zz_p_c a)
     46    void zz_pX_MakeMonic "MakeMonic"(zz_pX_c x)
     47
     48    ctypedef struct zz_pX_Modulus_c "struct zz_pXModulus":
     49        zz_pX_c (* val) ( )
     50
     51    zz_pX_Modulus_c* zz_pX_Modulus_new "New<zz_pXModulus>"()
     52    zz_pX_Modulus_c* zz_pX_Modulus_construct "Construct<zz_pXModulus>"(void *mem)
     53    void zz_pX_Modulus_destruct "Destruct<zz_pXModulus>"(zz_pX_Modulus_c *mem)
     54    void zz_pX_Modulus_delete "Delete<zz_pXModulus>"(zz_pX_Modulus_c *mem)
     55    void zz_pX_Modulus_from_str "_from_str<zz_pXModulus>"(zz_pX_Modulus_c* dest, char* s)
     56    void zz_pX_Modulus_build "build"(zz_pX_Modulus_c F, zz_pX_c f) # MUST be called before using the modulus
     57    long zz_pX_Modulus_deg "deg"(zz_pX_Modulus_c F)
     58   
     59    void zz_pX_MulMod_pre "MulMod"(zz_pX_c x, zz_pX_c a, zz_pX_c b, zz_pX_Modulus_c F)
     60    void zz_pX_SqrMod_pre "SqrMod"(zz_pX_c x, zz_pX_c a, zz_pX_Modulus_c F)
     61    void zz_pX_PowerMod_pre "PowerMod"(zz_pX_c x, zz_pX_c a, ZZ_c e, zz_pX_Modulus_c F)
     62    void zz_pX_PowerMod_long_pre "PowerMod"(zz_pX_c x, zz_pX_c a, long e, zz_pX_Modulus_c F)
     63    void zz_pX_PowerXMod_pre "PowerXMod"(zz_pX_c x, ZZ_c e, zz_pX_Modulus_c F)
     64    void zz_pX_PowerXMod_long_pre "PowerXMod"(zz_pX_c x, long e, zz_pX_Modulus_c F)
     65    void zz_pX_PowerXPlusAMod_pre "PowerXPlusAMod"(zz_pX_c x, zz_p_c a, ZZ_c e, zz_pX_Modulus_c F)
     66    void zz_pX_PowerXPlusAMod_long_pre "PowerXPlusAMod"(zz_pX_c x, zz_p_c a, long e, zz_pX_Modulus_c F)
     67    void zz_pX_rem_pre "rem"(zz_pX_c x, zz_pX_c a, zz_pX_Modulus_c F)
     68    void zz_pX_DivRem_pre "DivRem"(zz_pX_c q, zz_pX_c r, zz_pX_c a, zz_pX_Modulus_c F)
     69    void zz_pX_div_pre "div"(zz_pX_c q, zz_pX_c a, zz_pX_Modulus_c F)
     70    void zz_pX_InvMod_pre "InvMod"(zz_pX_c x, zz_pX_c a, zz_pX_Modulus_c F)
     71
     72    long NTL_SP_BOUND
     73    bint NTL_zz_pX_DOUBLE_EQUALS(zz_pX_c x, zz_pX_c y)
  • new file sage/libs/ntl/ntl_lzz_p_decl.pxd

    diff -r e16270e56d21 -r 8e505e3fe795 sage/libs/ntl/ntl_lzz_p_decl.pxd
    - +  
     1cdef extern from "ntl_wrap.h":
     2    ctypedef struct zz_p_c "struct zz_p":
     3        void *rep
     4    void zz_p_construct "Construct<zz_p>"(void *mem)
     5    void zz_p_destruct "Destruct<zz_p>"(zz_p_c *mem)
     6    long zz_p_rep "rep"(zz_p_c x)
     7    long zz_p_isZero "IsZero"(zz_p_c x)
     8    void zz_p_set_from_long(zz_p_c x, long a)
     9    void zz_p_add "add"(zz_p_c x, zz_p_c a, zz_p_c b)
     10    void zz_p_sub "sub"(zz_p_c x, zz_p_c a, zz_p_c b)
     11    void zz_p_negate "negate"(zz_p_c x, zz_p_c a)
     12    void zz_p_mul "mul"(zz_p_c x, zz_p_c a, zz_p_c b)
     13    void zz_p_div "div"(zz_p_c x, zz_p_c a, zz_p_c b)
     14    void zz_p_inv "inv"(zz_p_c x, zz_p_c a)
     15    void zz_p_power "power"(zz_p_c x, zz_p_c a, long e)
     16    void zz_p_sqr "sqr"(zz_p_c x, zz_p_c a)
     17    void zz_p_clear "clear"(zz_p_c x)
     18    void zz_p_set_zero "clear"(zz_p_c x)
     19    void zz_p_set_one "set"(zz_p_c x)
     20    void zz_p_swap "swap"(zz_p_c x, zz_p_c y)
     21
     22    bint NTL_zz_p_DOUBLE_EQUALS(zz_p_c x, zz_p_c y)
  • new file sage/libs/ntl/ntl_vec_ZZ_pE_decl.pxd

    diff -r e16270e56d21 -r 8e505e3fe795 sage/libs/ntl/ntl_vec_ZZ_pE_decl.pxd
    - +  
     1cdef extern from "ntl_wrap.h":
     2    ctypedef struct vec_ZZ_pE_c "struct vec_ZZ_pE":
     3        pass
  • new file sage/libs/ntl/ntl_vec_ZZ_p_decl.pxd

    diff -r e16270e56d21 -r 8e505e3fe795 sage/libs/ntl/ntl_vec_ZZ_p_decl.pxd
    - +  
     1cdef extern from "ntl_wrap.h":
     2    #### vec_ZZ_p_c
     3    ctypedef struct vec_ZZ_p_c "struct vec_ZZ_p":
     4        pass
     5
  • sage/rings/padics/pow_computer_ext.pxd

    diff -r e16270e56d21 -r 8e505e3fe795 sage/rings/padics/pow_computer_ext.pxd
    a b  
    33
    44from sage.rings.padics.pow_computer cimport PowComputer_class
    55from sage.libs.ntl.ntl_ZZ_pContext cimport ntl_ZZ_pContext_class
     6from sage.libs.ntl.ntl_ZZ_pX_decl cimport ZZ_pX_Multiplier_c
    67
    78cdef class PowComputer_ext(PowComputer_class):
    89    cdef ZZ_c* small_powers
  • sage/rings/polynomial/polynomial_integer_dense_flint.pyx

    diff -r e16270e56d21 -r 8e505e3fe795 sage/rings/polynomial/polynomial_integer_dense_flint.pyx
    a b  
    3838
    3939from sage.rings.fraction_field_element import FractionFieldElement
    4040from sage.rings.arith import lcm
     41
     42from sage.libs.ntl.ntl_ZZX_decl cimport *, vec_pair_ZZX_long_c
    4143
    4244cdef extern from "limits.h":
    4345    long LONG_MAX
  • sage/rings/polynomial/polynomial_integer_dense_ntl.pyx

    diff -r e16270e56d21 -r 8e505e3fe795 sage/rings/polynomial/polynomial_integer_dense_ntl.pyx
    a b  
    5656from sage.rings.arith import lcm
    5757import sage.rings.polynomial.polynomial_ring
    5858
     59from sage.libs.ntl.ntl_ZZX_decl cimport *, vec_pair_ZZX_long_c
    5960
    6061cdef class Polynomial_integer_dense_ntl(Polynomial):
    6162    r"""
  • sage/rings/polynomial/polynomial_modn_dense_ntl.pxd

    diff -r e16270e56d21 -r 8e505e3fe795 sage/rings/polynomial/polynomial_modn_dense_ntl.pxd
    a b  
    1111
    1212from sage.rings.integer cimport Integer
    1313
    14 include "../../libs/ntl/decl.pxi"
     14from sage.libs.ntl.ntl_ZZ_pX_decl cimport *, ZZ_pX_c, ZZ_pX_Modulus_c
     15from sage.libs.ntl.ntl_lzz_pX_decl cimport *, zz_pX_c, zz_pX_Modulus_c
    1516
    16 cdef extern from "ntl_wrap.h":
    17     struct zz_pX
     17#include "../../libs/ntl/decl.pxi"
     18
     19#cdef extern from "ntl_wrap.h":
     20#    struct zz_pX
    1821
    1922cdef class Polynomial_dense_mod_n(Polynomial):
    2023    cdef object __poly
  • sage/rings/polynomial/polynomial_modn_dense_ntl.pyx

    diff -r e16270e56d21 -r 8e505e3fe795 sage/rings/polynomial/polynomial_modn_dense_ntl.pyx
    a b  
    3333from sage.interfaces.all import singular as singular_default
    3434
    3535from sage.structure.element import generic_power, canonical_coercion, bin_op
     36
     37from sage.libs.ntl.ntl_ZZ_p_decl cimport *, ZZ_p_c
     38from sage.libs.ntl.ntl_lzz_p_decl cimport *, zz_p_c
     39from sage.libs.ntl.ntl_lzz_pX_decl cimport *, zz_pX_c, zz_pX_Modulus_c
     40from sage.libs.ntl.ntl_ZZ_pX_decl cimport *, ZZ_pX_c, ZZ_pX_Modulus_c
    3641
    3742def make_element(parent, args):
    3843    return parent(*args)
     
    739744        if do_sig: _sig_off
    740745        return r
    741746       
    742     def __pow__(Polynomial_dense_modn_ntl_zz self, ee, dummy):
     747    def __pow__(Polynomial_dense_modn_ntl_zz self, ee, modulus):
    743748        """
    744749        TESTS:
    745750            sage: R.<x> = Integers(100)[]
     
    761766            if e == 0:
    762767                raise ArithmeticError, "0^0 is undefined."
    763768        cdef Polynomial_dense_modn_ntl_zz r = self._new()
     769        cdef zz_pX_Modulus_c *mod
     770
    764771        self.c.restore_c()
    765         if zz_pX_IsX(self.x):
    766             zz_pX_LeftShift(r.x, self.x, e-1)
     772
     773        if modulus is None:
     774            if zz_pX_IsX(self.x):
     775                zz_pX_LeftShift(r.x, self.x, e-1)
     776            else:
     777                do_sig = zz_pX_deg(self.x) *e > 1000
     778                if do_sig: _sig_on
     779                zz_pX_power(r.x, self.x, e)
     780                if do_sig: _sig_off
    767781        else:
    768             do_sig = zz_pX_deg(self.x) *e > 1000
     782            if not PY_TYPE_CHECK(modulus, Polynomial_dense_modn_ntl_zz):
     783                modulus = self.parent()._coerce_(modulus)
     784            zz_pX_Modulus_construct(mod)
     785            zz_pX_Modulus_build(mod[0], (<Polynomial_dense_modn_ntl_zz>modulus).x)
     786           
     787            do_sig = zz_pX_deg(self.x) * e * self.c.p_bits > 1e5
    769788            if do_sig: _sig_on
    770             zz_pX_power(r.x, self.x, e)
     789            zz_pX_PowerMod_long_pre(r.x, self.x, e, mod[0])
    771790            if do_sig: _sig_off
     791            zz_pX_Modulus_destruct(mod)
     792
    772793        if recip:
    773794            return ~r
    774795        else:
     
    12541275        """
    12551276        return self._rmul_c_impl(c)
    12561277       
    1257     def __pow__(Polynomial_dense_modn_ntl_ZZ self, ee, dummy):
     1278    def __pow__(Polynomial_dense_modn_ntl_ZZ self, ee, modulus):
    12581279        """
    12591280        TESTS:
    12601281            sage: R.<x> = Integers(10^30)[]
     
    12721293            if e == 0:
    12731294                raise ArithmeticError, "0^0 is undefined."
    12741295        cdef Polynomial_dense_modn_ntl_ZZ r = self._new()
     1296        cdef ZZ_pX_Modulus_c *mod
     1297
    12751298        self.c.restore_c()
    1276         if ZZ_pX_IsX(self.x):
    1277             ZZ_pX_LeftShift(r.x, self.x, e - 1)
     1299
     1300        if modulus is None:
     1301            if ZZ_pX_IsX(self.x):
     1302                ZZ_pX_LeftShift(r.x, self.x, e - 1)
     1303            else:
     1304                do_sig = ZZ_pX_deg(self.x) * e * self.c.p_bits > 1e5
     1305                if do_sig: _sig_on
     1306                ZZ_pX_power(r.x, self.x, e)
     1307                if do_sig: _sig_off
    12781308        else:
     1309            if not PY_TYPE_CHECK(modulus, Polynomial_dense_modn_ntl_ZZ):
     1310                modulus = self.parent()._coerce_(modulus)
     1311            ZZ_pX_Modulus_construct(mod)
     1312            ZZ_pX_Modulus_build(mod[0], (<Polynomial_dense_modn_ntl_ZZ>modulus).x)
     1313           
    12791314            do_sig = ZZ_pX_deg(self.x) * e * self.c.p_bits > 1e5
    12801315            if do_sig: _sig_on
    1281             ZZ_pX_power(r.x, self.x, e)
     1316            ZZ_pX_PowerMod_long_pre(r.x, self.x, e, mod[0])
    12821317            if do_sig: _sig_off
     1318            ZZ_pX_Modulus_destruct(mod)
    12831319        if recip:
    12841320            return ~r
    12851321        else: