source: git/factory/FLINTconvert.h @ 2ce3bf

spielwiese
Last change on this file since 2ce3bf was 2ce3bf, checked in by Hans Schoenemann <hannes@…>, 4 years ago
fq_nmod_get_nmod_poly/fq_nmod_set_nmod_poly for FLINT < 2.6.1
  • Property mode set to 100644
File size: 10.9 KB
Line 
1/*****************************************************************************\
2 * Computer Algebra System SINGULAR
3\*****************************************************************************/
4/** @file FLINTconvert.h
5 *
6 * This file defines functions for conversion to FLINT (www.flintlib.org)
7 * and back.
8 *
9 * @author Martin Lee
10 *
11 **/
12/*****************************************************************************/
13
14#ifndef FLINT_CONVERT_H
15#define FLINT_CONVERT_H
16
17// #include "config.h"
18#include "canonicalform.h"
19#include "fac_util.h"
20
21#ifdef HAVE_FLINT
22#ifdef __cplusplus
23extern "C"
24{
25#endif
26#ifndef __GMP_BITS_PER_MP_LIMB
27#define __GMP_BITS_PER_MP_LIMB GMP_LIMB_BITS
28#endif
29#include <flint/fmpz.h>
30#include <flint/fmpq.h>
31#include <flint/fmpz_poly.h>
32#include <flint/fmpz_mod_poly.h>
33#include <flint/fmpq_poly.h>
34#include <flint/nmod_poly.h>
35#include <flint/nmod_mat.h>
36#include <flint/fmpz_mat.h>
37#if ( __FLINT_RELEASE >= 20400)
38#include <flint/fq.h>
39#include <flint/fq_poly.h>
40#include <flint/fq_nmod.h>
41#include <flint/fq_nmod_poly.h>
42#include <flint/fq_nmod_mat.h>
43#endif
44
45EXTERN_VAR flint_rand_t FLINTrandom;
46
47#ifdef __cplusplus
48}
49#endif
50
51#include "factory/cf_gmp.h"
52
53/// conversion of a factory integer to fmpz_t
54void
55convertCF2Fmpz (fmpz_t result,         ///< [in,out] an fmpz_t
56                const CanonicalForm& f ///< [in] a CanonicalForm wrapping an
57                                       ///< integer
58               );
59
60/// conversion of a factory univariate polynomial over Z to a fmpz_poly_t
61void
62convertFacCF2Fmpz_poly_t (fmpz_poly_t result,    ///< [in,out] an fmpz_poly_t
63                          const CanonicalForm& f ///< [in] univariate poly over
64                                                 ///< Z
65                         );
66
67/// conversion of a FLINT integer to CanonicalForm
68CanonicalForm
69convertFmpz2CF (const fmpz_t coefficient ///< [in] a FLINT integer
70               );
71
72/// conversion of a FLINT poly over Z to CanonicalForm
73CanonicalForm
74convertFmpz_poly_t2FacCF (const fmpz_poly_t poly, ///< [in] an fmpz_poly_t
75                          const Variable& x ///< [in] variable the result should
76                                            ///< have
77                         );
78
79/// conversion of a factory univariate polynomials over Z/p (for word size p)
80/// to nmod_poly_t
81void
82convertFacCF2nmod_poly_t (nmod_poly_t result,    ///< [in, out] a nmod_poly_t
83                          const CanonicalForm& f ///< [in] univariate poly over
84                                                 ///< Z/p
85                         );
86
87/// conversion of a FLINT poly over Z/p to CanonicalForm
88CanonicalForm
89convertnmod_poly_t2FacCF (const nmod_poly_t poly, ///< [in] a nmod_poly_t
90                          const Variable& x ///< [in] variable the result should
91                                            ///< have
92                         );
93
94/// conversion of a factory rationals to fmpq_t
95void
96convertCF2Fmpq (fmpq_t result,         ///< [in,out] an fmpq_t
97                const CanonicalForm& f ///< [in] a CanonicalForm wrapping a
98                                       ///< rational
99               );
100
101/// conversion of a factory univariate polynomials over Q to fmpq_poly_t
102void
103convertFacCF2Fmpq_poly_t (fmpq_poly_t result,    ///< [in,out] an fmpq_poly_t
104                          const CanonicalForm& f ///< [in] univariate poly over
105                                                 ///< Q
106                         );
107
108/// conversion of a FLINT poly over Q to CanonicalForm
109CanonicalForm
110convertFmpq_poly_t2FacCF (const fmpq_poly_t p,    ///< [in] an fmpq_poly_t
111                          const Variable& x ///< [in] variable the result should
112                                            ///< have
113                         );
114
115/// conversion of a FLINT factorization over Z/p (for word size p) to a
116/// CFFList
117CFFList
118convertFLINTnmod_poly_factor2FacCFFList (
119                   const nmod_poly_factor_t fac, ///< [in] a nmod_poly_factor_t
120                   const mp_limb_t leadingCoeff, ///< [in] leading coefficient
121                   const Variable& x       ///< [in] variable the result should
122                                           ///< have
123                                        );
124
125/// conversion of a FLINT factorization over Z to a CFFList
126CFFList
127convertFLINTfmpz_poly_factor2FacCFFList (
128                   const fmpz_poly_factor_t fac, ///< [in] a fmpz_poly_factor_t
129                   const Variable& x       ///< [in] variable the result should
130                                           ///< have
131                                        );
132
133/// conversion of a factory univariate poly over Z to a FLINT poly over
134/// Z/p (for non word size p)
135void
136convertFacCF2Fmpz_mod_poly_t (
137                          fmpz_mod_poly_t result, ///< [in,out] fmpz_mod_poly_t
138                          const CanonicalForm& f, ///< [in] univariate poly over
139                                                  ///< Z
140                          const fmpz_t p          ///< [in] some integer p
141                             );
142
143/// conversion of a FLINT poly over Z/p (for non word size p) to a CanonicalForm
144/// over Z
145CanonicalForm
146convertFmpz_mod_poly_t2FacCF (
147                          const fmpz_mod_poly_t poly, ///< [in] fmpz_mod_poly_t
148                          const Variable& x,    ///< [in] variable the result
149                                                ///< should have
150                          const modpk& b        ///< [in] coeff bound to map
151                                                ///< coeffs in (-p/2,p/2)
152                             );
153
154#if __FLINT_RELEASE >= 20400
155/// conversion of a FLINT element of F_q to a CanonicalForm with alg. variable
156/// alpha
157CanonicalForm
158convertFq_nmod_t2FacCF (const fq_nmod_t poly, ///< [in] fq_nmod_t
159                        const Variable& alpha, ///< [in] algebraic variable
160                        const fq_nmod_ctx_t ctx ///<[in] context
161                       );
162
163/// conversion of a FLINT element of F_q with non-word size p to a CanonicalForm
164/// with alg. variable alpha
165CanonicalForm
166convertFq_t2FacCF (const fq_t poly,      ///< [in] fq_t
167                   const Variable& alpha ///< [in] algebraic variable
168                  );
169
170/// conversion of a factory element of F_q to a FLINT fq_nmod_t, does not do any
171/// memory allocation for poly
172void
173convertFacCF2Fq_nmod_t (fq_nmod_t result,       ///< [in,out] fq_nmod_t
174                        const CanonicalForm& f, ///< [in] element of Fq
175                        const fq_nmod_ctx_t ctx ///< [in] Fq context
176                       );
177
178/// conversion of a factory element of F_q (for non-word size p) to a FLINT fq_t
179void
180convertFacCF2Fq_t (fq_t result,            ///< [in,out] fq_t
181                   const CanonicalForm& f, ///< [in] element of Fq
182                   const fq_ctx_t ctx      ///< [in] Fq context
183                  );
184
185/// conversion of a factory univariate poly over F_q (for non-word size p) to a
186/// FLINT fq_poly_t
187void
188convertFacCF2Fq_poly_t (fq_poly_t result,      ///< [in,out] fq_poly_t
189                        const CanonicalForm& f,///< [in] univariate poly over Fq
190                        const fq_ctx_t ctx     ///< [in] Fq context
191                       );
192
193/// conversion of a factory univariate poly over F_q to a FLINT fq_nmod_poly_t
194void
195convertFacCF2Fq_nmod_poly_t (fq_nmod_poly_t result, ///< [in,out] fq_nmod_poly_t
196                             const CanonicalForm& f,///< [in] univariate poly
197                                                    ///< over Fq
198                             const fq_nmod_ctx_t ctx///< [in] Fq context
199                            );
200
201/// conversion of a FLINT poly over Fq (for non-word size p) to a CanonicalForm
202/// with alg. variable alpha and polynomial variable x
203CanonicalForm
204convertFq_poly_t2FacCF (const fq_poly_t p,     ///< [in] fq_poly_t
205                        const Variable& x,     ///< [in] polynomial variable
206                        const Variable& alpha, ///< [in] algebraic variable
207                        const fq_ctx_t ctx     ///< [in] Fq context
208                       );
209
210/// conversion of a FLINT poly over Fq to a CanonicalForm with alg. variable
211/// alpha and polynomial variable x
212CanonicalForm
213convertFq_nmod_poly_t2FacCF (const fq_nmod_poly_t p, ///< [in] fq_nmod_poly_t
214                             const Variable& x,      ///< [in] polynomial var.
215                             const Variable& alpha,  ///< [in] algebraic var.
216                             const fq_nmod_ctx_t ctx ///< [in] Fq context
217                            );
218#endif
219
220/// conversion of a factory matrix over Z to a fmpz_mat_t
221void convertFacCFMatrix2Fmpz_mat_t (fmpz_mat_t M,      ///<[in,out] fmpz_mat_t
222                                    const CFMatrix &///<[in] matrix over Z
223                                   );
224
225/// conversion of a FLINT matrix over Z to a factory matrix
226CFMatrix* convertFmpz_mat_t2FacCFMatrix(const fmpz_mat_t m ///<[in] fmpz_mat_t
227                                       );
228
229/// conversion of a factory matrix over Z/p to a nmod_mat_t
230void convertFacCFMatrix2nmod_mat_t (nmod_mat_t M,     ///<[in,out] nmod_mat_t
231                                    const CFMatrix &m ///<[in] matrix over Z/p
232                                   );
233
234/// conversion of a FLINT matrix over Z/p to a factory matrix
235CFMatrix* convertNmod_mat_t2FacCFMatrix(const nmod_mat_t m ///<[in] nmod_mat_t
236                                       );
237
238#if __FLINT_RELEASE >= 20400
239/// conversion of a FLINT matrix over F_q to a factory matrix
240CFMatrix*
241convertFq_nmod_mat_t2FacCFMatrix(const fq_nmod_mat_t m,       ///< [in] fq_nmod_mat_t
242                                 const fq_nmod_ctx_t& fq_con, ///< [in] Fq context
243                                 const Variable& alpha ///< [in] algebraic variable
244                                );
245
246/// conversion of a factory matrix over F_q to a fq_nmod_mat_t
247void
248convertFacCFMatrix2Fq_nmod_mat_t (fq_nmod_mat_t M,            ///< [in, out] fq_nmod_mat_t
249                                  const fq_nmod_ctx_t fq_con, ///< [in] Fq context
250                                  const CFMatrix &m           ///< [in] matrix over Fq
251                                 );
252
253/// conversion of a FLINT factorization over Fq (for word size p) to a
254/// CFFList
255CFFList
256convertFLINTFq_nmod_poly_factor2FacCFFList (const fq_nmod_poly_factor_t fac, ///< [in] fq_nmod_poly_factor_t
257                                          const Variable& x,     ///< [in] polynomial variable
258                                          const Variable& alpha, ///< [in] algebraic variable
259                                          const fq_nmod_ctx_t fq_con ///< [in] Fq context
260                                           );
261#endif
262
263
264#if __FLINT_RELEASE >= 20503
265CanonicalForm mulFlintMP_Zp(const CanonicalForm& F,int lF, const CanonicalForm& Gi, int lG, int m);
266CanonicalForm mulFlintMP_QQ(const CanonicalForm& F,int lF, const CanonicalForm& Gi, int lG, int m);
267CanonicalForm gcdFlintMP_Zp(const CanonicalForm& F, const CanonicalForm& G);
268CanonicalForm gcdFlintMP_QQ(const CanonicalForm& F, const CanonicalForm& G);
269#endif
270#endif
271#endif
Note: See TracBrowser for help on using the repository browser.