Ticket #12173: nmod_poly.patch

File nmod_poly.patch, 19.4 KB (added by jpflori, 9 years ago)

More readable patch for nmod_poly.pxd

  • sage/libs/flint/nmod_poly.pxd

    diff --git a/sage/libs/flint/nmod_poly.pxd b/sage/libs/flint/nmod_poly.pxd
    a b  
    66from flint import *
    77
    88cdef extern from "flint/nmod_poly.h":
     9    ctypedef unsigned long mp_bitcnt_t
     10    ctypedef void * mp_srcptr
     11
     12    ctypedef struct nmod_t:
     13        mp_limb_t n
     14        mp_limb_t ninv
     15        mp_bitcnt_t norm
     16
    917    ctypedef struct nmod_poly_struct:
    10         unsigned long *coeffs
    11         unsigned long alloc
    12         unsigned long length
    13         unsigned long p
    14         double p_inv
     18        mp_limb_t *coeffs
     19        long alloc
     20        long length
     21        nmod_t mod
    1522
    1623    ctypedef nmod_poly_struct* nmod_poly_t
    1724
    1825    ctypedef struct nmod_poly_factor_struct:
    19         nmod_poly_t *factors
    20         unsigned long *exponents
    21         unsigned long alloc
    22         unsigned long num_factors
     26        nmod_poly_t p
     27        long *exp
     28        long num
     29        long alloc
    2330
    2431    ctypedef nmod_poly_factor_struct* nmod_poly_factor_t
    2532
    26     cdef void nmod_poly_init(nmod_poly_t poly, unsigned long p)
    27     cdef void nmod_poly_init_preinv(nmod_poly_t poly, unsigned long p, double p_inv)
    28     cdef void nmod_poly_init2(nmod_poly_t poly, unsigned long p, unsigned long alloc)
    29     cdef void nmod_poly_init2_preinv(nmod_poly_t poly, unsigned long p, double p_inv, unsigned long alloc)
     33    # Memory management
     34    cdef void nmod_poly_init(nmod_poly_t poly, mp_limb_t n)
     35    cdef void nmod_poly_init_preinv(nmod_poly_t poly, mp_limb_t n, mp_limb_t ninv)
     36    cdef void nmod_poly_init2(nmod_poly_t poly, mp_limb_t n, long alloc)
     37    cdef void nmod_poly_init2_preinv(nmod_poly_t poly, mp_limb_t n, mp_limb_t ninv, long alloc)
     38
    3039    cdef void nmod_poly_clear(nmod_poly_t poly)
    3140
    32     cdef void nmod_poly_realloc(nmod_poly_t poly, unsigned long alloc)
    33     # _bits_ only applies to newly allocated coefficients, not existing ones...
     41    cdef void nmod_poly_realloc(nmod_poly_t poly, long alloc)
    3442
    35     # this non-inlined version REQUIRES that alloc > poly->alloc
    36     void __nmod_poly_fit_length(nmod_poly_t poly, unsigned long alloc)
    37 
    38     # this is arranged so that the initial comparison (very frequent) is inlined,
    39     # but the actual allocation (infrequent) is not
    40     cdef void nmod_poly_fit_length(nmod_poly_t poly, unsigned long alloc)
     43    cdef void nmod_poly_fit_length(nmod_poly_t poly, long alloc)
     44    cdef void _nmod_poly_normalise(nmod_poly_t poly)
    4145
    42     # ------------------------------------------------------
    43     # Setting/retrieving coefficients
    44 
    45     cdef unsigned long nmod_poly_get_coeff_ui(nmod_poly_t poly, unsigned long n)
    46 
    47     cdef unsigned long _nmod_poly_get_coeff_ui(nmod_poly_t poly, unsigned long n)
    48 
    49     cdef void nmod_poly_set_coeff_ui(nmod_poly_t poly, unsigned long n, unsigned long c)
    50 
    51     cdef void _nmod_poly_set_coeff_ui(nmod_poly_t poly, unsigned long n, unsigned long c)
     46    # Getting and setting coefficients
     47    cdef unsigned long nmod_poly_get_coeff_ui(nmod_poly_t poly, unsigned long j)
     48    cdef void nmod_poly_set_coeff_ui(nmod_poly_t poly, unsigned long j, unsigned long c)
    5249
    53     # ------------------------------------------------------
    54     # String conversions and I/O
    55 
    56     cdef int nmod_poly_from_string(nmod_poly_t poly, char* s)
    57     cdef char* nmod_poly_to_string(nmod_poly_t poly)
    58     cdef void nmod_poly_print(nmod_poly_t poly)
    59     cdef void nmod_poly_fprint(nmod_poly_t poly, FILE* f)
    60     cdef int nmod_poly_read(nmod_poly_t poly)
    61     cdef int nmod_poly_fread(nmod_poly_t poly, FILE* f)
     50    # Input and output
     51    cdef char * nmod_poly_get_str(nmod_poly_t poly)
     52    cdef int nmod_poly_set_str(char * s, nmod_poly_t poly)
     53    cdef int nmod_poly_print(nmod_poly_t a)
     54    cdef int nmod_poly_fread(FILE * f, nmod_poly_t poly)
     55    cdef int nmod_poly_fprint(FILE * f, nmod_poly_t poly)
     56    cdef int nmod_poly_read(nmod_poly_t poly)
    6257
    63     # ------------------------------------------------------
    64     # Length and degree
    65 
    66     cdef void _nmod_poly_normalise(nmod_poly_t poly)
    67     cdef int _nmod_poly_normalised(nmod_poly_t poly)
    68     cdef void nmod_poly_truncate(nmod_poly_t poly, unsigned long length)
    69 
    70     cdef unsigned long nmod_poly_length(nmod_poly_t poly)
    71 
    72     cdef long nmod_poly_degree(nmod_poly_t poly)
    73 
    74     cdef unsigned long nmod_poly_modulus(nmod_poly_t poly)
    75 
    76     cdef double nmod_poly_precomputed_inverse(nmod_poly_t poly)
     58    # Polynomial parameters
     59    cdef long nmod_poly_length(nmod_poly_t poly)
     60    cdef long nmod_poly_degree(nmod_poly_t poly)
     61    cdef mp_limb_t nmod_poly_modulus(nmod_poly_t poly)
     62    cdef mp_bitcnt_t nmod_poly_max_bits(nmod_poly_t poly)
    7763
    78     # ------------------------------------------------------
    79     # Assignment
    80 
    81     cdef void _nmod_poly_set(nmod_poly_t res, nmod_poly_t poly)
    82     cdef void nmod_poly_set(nmod_poly_t res, nmod_poly_t poly)
    83 
    84     cdef void nmod_poly_zero(nmod_poly_t poly)
    85 
    86     cdef void nmod_poly_swap(nmod_poly_t poly1, nmod_poly_t poly2)
     64    # Assignment and basic manipulation
     65    cdef void nmod_poly_set(nmod_poly_t a, nmod_poly_t b)
     66    cdef void nmod_poly_swap(nmod_poly_t poly1, nmod_poly_t poly2)
     67    cdef void nmod_poly_zero(nmod_poly_t res)
     68    cdef void nmod_poly_one(nmod_poly_t res)
     69    cdef void nmod_poly_truncate(nmod_poly_t poly, long len)
     70    cdef void nmod_poly_reverse(nmod_poly_t output, nmod_poly_t input, long m)
     71    cdef int nmod_poly_equal(nmod_poly_t a, nmod_poly_t b)
    8772
    88     #
    89     # Subpolynomials
    90     #
    91 
    92     cdef void _nmod_poly_attach(nmod_poly_t output, nmod_poly_t input)
    93 
    94     cdef void nmod_poly_attach(nmod_poly_t output, nmod_poly_t input)
     73    # Powering
     74    cdef void nmod_poly_pow(nmod_poly_t res, nmod_poly_t poly, unsigned long e)
     75    cdef void nmod_poly_pow_trunc(nmod_poly_t res, nmod_poly_t poly, unsigned long e, long trunc)
    9576
    96     #
    97     # Attach input shifted right by n to output
    98     #
    99 
    100     cdef void _nmod_poly_attach_shift(nmod_poly_t output, nmod_poly_t input, unsigned long n)
    101 
    102     cdef void nmod_poly_attach_shift(nmod_poly_t output, nmod_poly_t input, unsigned long n)
    103 
    104     #
    105     # Attach input to first n coefficients of input
    106     #
    107 
    108     cdef void _nmod_poly_attach_truncate(nmod_poly_t output,  nmod_poly_t input, unsigned long n)
    109 
    110     cdef void nmod_poly_attach_truncate(nmod_poly_t output, nmod_poly_t input, unsigned long n)
     77    # Inflation and deflation
     78    cdef unsigned long nmod_poly_deflation(nmod_poly_t input)
     79    cdef void nmod_poly_deflate(nmod_poly_t result, nmod_poly_t input, unsigned long deflation)
     80    cdef void nmod_poly_inflate(nmod_poly_t result, nmod_poly_t input, unsigned long inflation)
    11181
    112     #
    113     # Comparison functions
    114     #
    115 
    116     cdef int nmod_poly_equal(nmod_poly_t poly1, nmod_poly_t poly2)
    117 
    118     cdef int nmod_poly_is_one(nmod_poly_t poly1)
     82    # Comparison
     83    cdef int nmod_poly_is_zero(nmod_poly_t poly)
     84    cdef int nmod_poly_is_one(nmod_poly_t poly)
    11985
    120     #
    121     # Reversal
    122     #
    123 
    124     cdef void _nmod_poly_reverse(nmod_poly_t output, nmod_poly_t input, unsigned long length)
    125     cdef void nmod_poly_reverse(nmod_poly_t output, nmod_poly_t input, unsigned long length)
    126 
    127     #
    128     # Monic polys
    129     #
    130 
    131     cdef void nmod_poly_make_monic(nmod_poly_t output, nmod_poly_t pol)
    132 
    133     #
    134     # Addition and subtraction
    135     #
    136 
    137     cdef void nmod_poly_add(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2)
    138     cdef void nmod_poly_add_without_mod(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2)
    139     cdef void nmod_poly_sub(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2)
    140     cdef void _nmod_poly_sub(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2)
    141     cdef void nmod_poly_neg(nmod_poly_t res, nmod_poly_t poly)
     86    # Addition and subtraction
     87    cdef void nmod_poly_add(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2)
     88    cdef void nmod_poly_sub(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2)
     89    cdef void nmod_poly_neg(nmod_poly_t res, nmod_poly_t poly1)
    14290
    143     #
    144     # Shifting functions
    145     #
    146 
    147     cdef void nmod_poly_left_shift(nmod_poly_t res, nmod_poly_t poly, unsigned long k)
    148     cdef void nmod_poly_right_shift(nmod_poly_t res, nmod_poly_t poly, unsigned long k)
     91    # Shifting
     92    cdef void nmod_poly_shift_left(nmod_poly_t res, nmod_poly_t poly, long k)
     93    cdef void nmod_poly_shift_right(nmod_poly_t res, nmod_poly_t poly, long k)
    14994
    150     #
    151     # Polynomial multiplication
    152     #
    153     # All multiplication functions require that the modulus be no more than FLINT_BITS-1 bits
    154     #
    155 
     95    # Multiplication
    15696    cdef void nmod_poly_mul(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2)
    157     cdef void nmod_poly_sqr(nmod_poly_t res, nmod_poly_t poly)
    158 
    159     # Requires that poly1 bits + poly2 bits + log_length is not greater than 2*FLINT_BITS
    160 
    161     cdef void nmod_poly_mul_KS(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2, unsigned long bits_input)
    162     cdef void _nmod_poly_mul_KS(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2, unsigned long bits_input)
    163 
    164     cdef void nmod_poly_mul_KS_trunc(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2, unsigned long bits_input, unsigned long trunc)
    165     cdef void _nmod_poly_mul_KS_trunc(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2, unsigned long bits_input, unsigned long trunc)
    166 
    167     cdef void _nmod_poly_mul_classical(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2)
    168     cdef void __nmod_poly_mul_classical_mod_last(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2, unsigned long bits)
    169     cdef void __nmod_poly_mul_classical_mod_throughout(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2, unsigned long bits)
    170     cdef void nmod_poly_mul_classical(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2)
    171     cdef void _nmod_poly_sqr_classical(nmod_poly_t res, nmod_poly_t poly)
    172     cdef void nmod_poly_sqr_classical(nmod_poly_t res, nmod_poly_t poly)
    173 
    174     cdef void _nmod_poly_mul_classical_trunc(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2, unsigned long trunc)
    175     cdef void __nmod_poly_mul_classical_trunc_mod_last(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2, unsigned long bits, unsigned long trunc)
    176     cdef void __nmod_poly_mul_classical_trunc_mod_throughout(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2, unsigned long bits, unsigned long trunc)
    177     cdef void nmod_poly_mul_classical_trunc(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2, unsigned long trunc)
    178 
    179     cdef void _nmod_poly_mul_classical_trunc_left(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2, unsigned long trunc)
    180     cdef void __nmod_poly_mul_classical_trunc_left_mod_last(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2, unsigned long bits, unsigned long trunc)
    181     cdef void __nmod_poly_mul_classical_trunc_left_mod_throughout(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2, unsigned long bits, unsigned long trunc)
    182     cdef void nmod_poly_mul_classical_trunc_left(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2, unsigned long trunc)
    183 
    184     cdef void nmod_poly_mullow(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2, unsigned long trunc)
    185     cdef void nmod_poly_mulhigh(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2, unsigned long trunc)
     97    cdef void nmod_poly_mullow(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2, long trunc)
     98    cdef void nmod_poly_mulhigh(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2, long n)
     99    cdef void nmod_poly_mulmod(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2, nmod_poly_t f)
     100
     101    # Square roots
     102    cdef void nmod_poly_invsqrt_series(nmod_poly_t g, nmod_poly_t h, long n)
     103    cdef void nmod_poly_sqrt_series(nmod_poly_t g, nmod_poly_t h, long n)
     104    int nmod_poly_sqrt(nmod_poly_t b, nmod_poly_t a)
    186105
    187     #
    188     # Bit packing functions
    189     #
    190 
    191     cdef unsigned long nmod_poly_bits(nmod_poly_t poly)
    192     cdef void _nmod_poly_bit_pack_mpn(mp_limb_t * res, nmod_poly_t poly, unsigned long bits, unsigned long length)
    193     cdef void _nmod_poly_bit_unpack_mpn(nmod_poly_t poly, mp_limb_t *mpn, unsigned long length, unsigned long bits)
    194 
    195     cdef void print_binary(unsigned long n, unsigned long len)
    196     cdef void print_binary2(unsigned long n, unsigned long len, unsigned long space_bit)
    197 
    198     #
    199     # Scalar multiplication
    200     #
    201 
    202     cdef void _nmod_poly_scalar_mul_nmod(nmod_poly_t res, nmod_poly_t poly, unsigned long scalar)
    203     cdef void nmod_poly_scalar_mul_nmod(nmod_poly_t res, nmod_poly_t poly, unsigned long scalar)
    204     cdef void __nmod_poly_scalar_mul_without_mod(nmod_poly_t res, nmod_poly_t poly, unsigned long scalar)
     106    # Scalar multiplication and division
     107    cdef void nmod_poly_scalar_mul_nmod(nmod_poly_t res, nmod_poly_t poly1, mp_limb_t c)
     108    cdef void nmod_poly_make_monic(nmod_poly_t output, nmod_poly_t input)
    205109
    206     #
    207     # Division
    208     #
    209 
    210     cdef void nmod_poly_divrem_classical(nmod_poly_t Q, nmod_poly_t R, nmod_poly_t A, nmod_poly_t B)
    211     cdef void __nmod_poly_divrem_classical_mod_last(nmod_poly_t Q, nmod_poly_t R, nmod_poly_t A, nmod_poly_t B)
    212     cdef void nmod_poly_div_classical(nmod_poly_t Q, nmod_poly_t A, nmod_poly_t B)
    213     cdef void __nmod_poly_div_classical_mod_last(nmod_poly_t Q, nmod_poly_t A, nmod_poly_t B)
    214     cdef void nmod_poly_div_divconquer_recursive(nmod_poly_t Q, nmod_poly_t BQ, nmod_poly_t A, nmod_poly_t B)
    215     cdef void nmod_poly_divrem_divconquer(nmod_poly_t Q, nmod_poly_t R, nmod_poly_t A, nmod_poly_t B)
    216     cdef void nmod_poly_div_divconquer(nmod_poly_t Q, nmod_poly_t A, nmod_poly_t B)
    217 
    218     #
    219     # Newton Inversion
    220     #
    221 
    222     cdef void nmod_poly_newton_invert_basecase(nmod_poly_t Q_inv, nmod_poly_t Q, unsigned long n)
    223     cdef void nmod_poly_newton_invert(nmod_poly_t Q_inv, nmod_poly_t Q, unsigned long n)
    224 
    225     #
    226     # Newton Division
    227     #
    228 
    229     cdef void nmod_poly_div_series(nmod_poly_t Q, nmod_poly_t A, nmod_poly_t B, unsigned long n)
    230     cdef void nmod_poly_div_newton(nmod_poly_t Q, nmod_poly_t A, nmod_poly_t B)
    231     cdef void nmod_poly_divrem_newton(nmod_poly_t Q, nmod_poly_t R, nmod_poly_t A, nmod_poly_t B)
    232 
    233     cdef void nmod_poly_divrem(nmod_poly_t Q, nmod_poly_t R, nmod_poly_t A, nmod_poly_t B)
    234 
    235     cdef void nmod_poly_div(nmod_poly_t Q, nmod_poly_t A, nmod_poly_t B)
     110    # Division
     111    cdef void nmod_poly_divrem(nmod_poly_t Q, nmod_poly_t R, nmod_poly_t A, nmod_poly_t B)
     112    cdef void nmod_poly_div(nmod_poly_t Q, nmod_poly_t A, nmod_poly_t B)
     113    cdef void nmod_poly_inv_series(nmod_poly_t Qinv, nmod_poly_t Q, long n)
     114    cdef void nmod_poly_div_series(nmod_poly_t Q, nmod_poly_t A, nmod_poly_t B, long n)
    236115
    237     #
    238     # Resultant
    239     #
    240 
    241     cdef unsigned long nmod_poly_resultant_euclidean(nmod_poly_t a, nmod_poly_t b)
    242 
    243     cdef unsigned long nmod_poly_resultant(nmod_poly_t a, nmod_poly_t b)
    244 
    245     #
    246     # GCD
    247     #
    248 
    249     cdef void nmod_poly_gcd(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2)
    250     cdef int nmod_poly_gcd_invert(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2)
    251     cdef void nmod_poly_xgcd(nmod_poly_t res, nmod_poly_t s, nmod_poly_t t, nmod_poly_t poly1, nmod_poly_t poly2)
     116    # GCD
     117    cdef void nmod_poly_gcd(nmod_poly_t G, nmod_poly_t A, nmod_poly_t B)
     118    cdef void nmod_poly_xgcd(nmod_poly_t G, nmod_poly_t S, nmod_poly_t T, nmod_poly_t A, nmod_poly_t B)
     119    mp_limb_t nmod_poly_resultant(nmod_poly_t f, nmod_poly_t g)
    252120
    253 
    254 
    255     # Composition / evaluation
    256121
    257     cdef unsigned long nmod_poly_evaluate_nmod(nmod_poly_t, unsigned long)
    258     cdef void nmod_poly_compose(nmod_poly_t, nmod_poly_t, nmod_poly_t)
     122    # Evaluation
     123    cdef mp_limb_t nmod_poly_evaluate_nmod(nmod_poly_t poly, mp_limb_t c)
     124    cdef void nmod_poly_evaluate_nmod_vec(mp_ptr ys, nmod_poly_t poly, mp_srcptr xs, long n)
     125
     126    # Interpolation
     127    cdef void nmod_poly_interpolate_nmod_vec(nmod_poly_t poly, mp_srcptr xs, mp_srcptr ys, long n)
    259128
    260     # Factorization
    261 
    262     cdef bint nmod_poly_is_irreducible(nmod_poly_t p)
    263 
    264     ctypedef struct nmod_poly_factors_struct:
    265         unsigned long num_factors
    266         unsigned long* exponents
    267         nmod_poly_t* factors
    268 
    269     ctypedef nmod_poly_factors_struct* nmod_poly_factor_t
    270 
    271     cdef void nmod_poly_factor_init(nmod_poly_factor_t)
    272     cdef void nmod_poly_factor_clear(nmod_poly_factor_t)
    273     cdef unsigned long nmod_poly_factor(nmod_poly_factor_t, nmod_poly_t)
    274     cdef void nmod_poly_factor_squarefree(nmod_poly_factor_t, nmod_poly_t)
    275     cdef void nmod_poly_factor_berlekamp(nmod_poly_factor_t factors, nmod_poly_t f)
    276 
    277     cdef void nmod_poly_factor_add(nmod_poly_factor_t fac, nmod_poly_t poly)
    278     cdef void nmod_poly_factor_concat(nmod_poly_factor_t res, nmod_poly_factor_t fac)
    279     cdef void nmod_poly_factor_print(nmod_poly_factor_t fac)
    280     cdef void nmod_poly_factor_pow(nmod_poly_factor_t fac, unsigned long exp)
     129    # Composition
     130    cdef void nmod_poly_compose(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2)
     131
     132    # Power series composition and reversion
     133    cdef void nmod_poly_compose_series(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2, long n)
     134    cdef void nmod_poly_reverse_series(nmod_poly_t Qinv, nmod_poly_t Q, long n)
     135
     136    # Factoring
     137    cdef void nmod_poly_factor_clear(nmod_poly_factor_t fac)
     138    cdef void nmod_poly_factor_init(nmod_poly_factor_t fac)
     139    cdef void nmod_poly_factor_insert(nmod_poly_factor_t fac, nmod_poly_t poly, unsigned long exp)
     140    cdef void nmod_poly_factor_print(nmod_poly_factor_t fac)
     141    cdef void nmod_poly_factor_concat(nmod_poly_factor_t res, nmod_poly_factor_t fac)
     142    cdef void nmod_poly_factor_pow(nmod_poly_factor_t fac, unsigned long exp)
     143    cdef unsigned long nmod_poly_remove(nmod_poly_t f, nmod_poly_t p)
     144    cdef int nmod_poly_is_irreducible(nmod_poly_t f)
     145    cdef int nmod_poly_is_squarefree(nmod_poly_t f)
     146    cdef void nmod_poly_factor_cantor_zassenhaus(nmod_poly_factor_t res, nmod_poly_t f)
     147    cdef void nmod_poly_factor_berlekamp(nmod_poly_factor_t factors, nmod_poly_t f)
     148    cdef void nmod_poly_factor_squarefree(nmod_poly_factor_t res, nmod_poly_t f)
     149    cdef mp_limb_t nmod_poly_factor_with_berlekamp(nmod_poly_factor_t result, nmod_poly_t input)
     150    cdef mp_limb_t nmod_poly_factor_with_cantor_zassenhaus(nmod_poly_factor_t result, nmod_poly_t input)
     151    cdef mp_limb_t nmod_poly_factor(nmod_poly_factor_t result, nmod_poly_t input)
    281152
    282     #
    283     # Differentiation
    284     #
    285  
    286     cdef void nmod_poly_derivative(nmod_poly_t res, nmod_poly_t poly)
    287    
    288     #
    289     # Arithmetic modulo a polynomial
    290     #
    291    
    292     cdef void nmod_poly_mulmod(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2, nmod_poly_t f)
    293     cdef void nmod_poly_powmod(nmod_poly_t res,nmod_poly_t pol, long exp, nmod_poly_t f)
     153    # Derivative
     154    cdef void nmod_poly_derivative(nmod_poly_t x_prime, nmod_poly_t x)
     155    cdef void nmod_poly_integral(nmod_poly_t x_int, nmod_poly_t x)
     156
     157    # Transcendental functions
     158    cdef void nmod_poly_atan_series(nmod_poly_t g, nmod_poly_t h, long n)
     159    cdef void nmod_poly_tan_series(nmod_poly_t g, nmod_poly_t h, long n)
     160    cdef void nmod_poly_asin_series(nmod_poly_t g, nmod_poly_t h, long n)
     161    cdef void nmod_poly_sin_series(nmod_poly_t g, nmod_poly_t h, long n)
     162    cdef void nmod_poly_cos_series(nmod_poly_t g, nmod_poly_t h, long n)
     163    cdef void nmod_poly_asinh_series(nmod_poly_t g, nmod_poly_t h, long n)
     164    cdef void nmod_poly_atanh_series(nmod_poly_t g, nmod_poly_t h, long n)
     165    cdef void nmod_poly_sinh_series(nmod_poly_t g, nmod_poly_t h, long n)
     166    cdef void nmod_poly_cosh_series(nmod_poly_t g, nmod_poly_t h, long n)
     167    cdef void nmod_poly_tanh_series(nmod_poly_t g, nmod_poly_t h, long n)
     168    cdef void nmod_poly_log_series(nmod_poly_t res, nmod_poly_t f, long n)
     169    cdef void nmod_poly_exp_series(nmod_poly_t f, nmod_poly_t h, long)