My Project
|
This file provides utility functions for bivariate factorization. More...
#include "config.h"
#include "timing.h"
#include "cf_map.h"
#include "cf_map_ext.h"
#include "templates/ftmpl_functions.h"
#include "ExtensionInfo.h"
#include "cf_algorithm.h"
#include "cf_factory.h"
#include "cf_util.h"
#include "imm.h"
#include "cf_iter.h"
#include "facFqBivarUtil.h"
#include "cfNewtonPolygon.h"
#include "facHensel.h"
#include "facMul.h"
#include "FLINTconvert.h"
Go to the source code of this file.
Macros | |
#define | slong long |
Functions | |
TIMING_DEFINE_PRINT (fac_log_deriv_div) TIMING_DEFINE_PRINT(fac_log_deriv_mul) TIMING_DEFINE_PRINT(fac_log_deriv_pre) void append(CFList &factors1 | |
void | decompress (CFList &factors, const CFMap &N) |
decompress a list of polys factors using the map N More... | |
void | decompress (CFFList &factors, const CFMap &N) |
as above More... | |
void | decompress (CFAFList &factors, const CFMap &N) |
as above More... | |
void | appendSwapDecompress (CFList &factors1, const CFList &factors2, const CFList &factors3, const bool swap1, const bool swap2, const CFMap &N) |
first swap Variables in factors1 if necessary, then append factors2 and factors3 on factors1 and finally decompress factors1 More... | |
void | swapDecompress (CFList &factors, const bool swap, const CFMap &N) |
swap Variables in factors, then decompress factors More... | |
static bool | GFInExtensionHelper (const CanonicalForm &F, const int number) |
static bool | FqInExtensionHelper (const CanonicalForm &F, const CanonicalForm &gamma, const CanonicalForm &delta, CFList &source, CFList &dest) |
bool | isInExtension (const CanonicalForm &F, const CanonicalForm &gamma, const int k, const CanonicalForm &delta, CFList &source, CFList &dest) |
tests if F is not contained in a subfield defined by gamma (Fq case) or k (GF case) More... | |
CanonicalForm | mapDown (const CanonicalForm &F, const ExtensionInfo &info, CFList &source, CFList &dest) |
map a poly into a subfield of the current field, no testing is performed! More... | |
void | appendTestMapDown (CFList &factors, const CanonicalForm &f, const ExtensionInfo &info, CFList &source, CFList &dest) |
test if g is in a subfield of the current field, if so map it down and append it to factors More... | |
void | appendMapDown (CFList &factors, const CanonicalForm &g, const ExtensionInfo &info, CFList &source, CFList &dest) |
map g down into a subfield of the current field and append it to factors More... | |
void | normalize (CFList &factors) |
normalize factors, i.e. make factors monic More... | |
void | normalize (CFFList &factors) |
as above More... | |
CFList | subset (int index[], const int &s, const CFArray &elements, bool &noSubset) |
extract a subset given by index of size s from elements, if there is no subset we have not yet considered noSubset is set to true. index encodes the next subset, e.g. if s= 3, elements= {a,b,c,d}, index= {1, 2, 4, 0}, then subset= {a,c,d}. index is of size elements.size(). More... | |
CFArray | copy (const CFList &list) |
write elements of list into an array More... | |
void | indexUpdate (int index[], const int &subsetSize, const int &setSize, bool &noSubset) |
update index More... | |
int | subsetDegree (const CFList &S) |
compute the sum of degrees in Variable(1) of elements in S More... | |
CFFList | multiplicity (CanonicalForm &F, const CFList &factors) |
determine multiplicity of the factors More... | |
CFArray | logarithmicDerivative (const CanonicalForm &F, const CanonicalForm &G, int l, CanonicalForm &Q) |
compute the coefficients of the logarithmic derivative of G mod Variable (2)^l over Fq More... | |
CFArray | logarithmicDerivative (const CanonicalForm &F, const CanonicalForm &G, int l, int oldL, const CanonicalForm &oldQ, CanonicalForm &Q) |
compute the coefficients of the logarithmic derivative of G mod Variable (2)^l over Fq with oldQ= F/G mod Variable (2)^oldL More... | |
void | writeInMatrix (CFMatrix &M, const CFArray &A, const int column, const int startIndex) |
write A into M starting at row startIndex More... | |
CFArray | getCoeffs (const CanonicalForm &F, const int k) |
extract coefficients of for where is a variable of level 1 More... | |
CFArray | getCoeffs (const CanonicalForm &F, const int k, const Variable &alpha) |
extract coefficients of for where is a variable of level 1 More... | |
CFArray | getCoeffs (const CanonicalForm &G, const int k, const int l, const int degMipo, const Variable &alpha, const CanonicalForm &evaluation, const mat_zz_p &M) |
extract coefficients of for where is a variable of level 1 More... | |
CFArray | getCoeffs (const CanonicalForm &G, const int k, const int l, const int degMipo, const Variable &alpha, const CanonicalForm &evaluation, const nmod_mat_t M) |
extract coefficients of for where is a variable of level 1 More... | |
int * | computeBounds (const CanonicalForm &F, int &n, bool &isIrreducible) |
compute bounds for logarithmic derivative as described in K. Belabas, M. van Hoeij, J. Klüners, and A. Steel, Factoring polynomials over global fields More... | |
int * | computeBoundsWrtDiffMainvar (const CanonicalForm &F, int &n, bool &isIrreducible) |
as above just wrt to the other variable More... | |
int | substituteCheck (const CanonicalForm &F, const Variable &x) |
check if a substitution x^n->x is possible More... | |
static int | substituteCheck (const CanonicalForm &F, const CanonicalForm &G) |
int | recSubstituteCheck (const CanonicalForm &F, const int d) |
int | substituteCheck (const CFList &L) |
checks if a substitution x^n->x is possible More... | |
void | subst (const CanonicalForm &F, CanonicalForm &A, const int d, const Variable &x) |
substitute x^d by x in F More... | |
CanonicalForm | reverseSubst (const CanonicalForm &F, const int d, const Variable &x) |
reverse a substitution x^d->x More... | |
void | reverseSubst (CFList &L, const int d, const Variable &x) |
reverse a substitution x^d->x More... | |
Variables | |
const CFList & | factors2 |
This file provides utility functions for bivariate factorization.
Definition in file facFqBivarUtil.cc.
#define slong long |
void appendMapDown | ( | CFList & | factors, |
const CanonicalForm & | g, | ||
const ExtensionInfo & | info, | ||
CFList & | source, | ||
CFList & | dest | ||
) |
map g down into a subfield of the current field and append it to factors
[in,out] | factors | a list of polys |
[in] | g | a poly |
[in] | info | information about extension |
[in,out] | source |
[in,out] | dest |
Definition at line 267 of file facFqBivarUtil.cc.
void appendSwapDecompress | ( | CFList & | factors1, |
const CFList & | factors2, | ||
const CFList & | factors3, | ||
const bool | swap1, | ||
const bool | swap2, | ||
const CFMap & | N | ||
) |
first swap Variables in factors1 if necessary, then append factors2 and factors3 on factors1 and finally decompress factors1
[in,out] | factors1 | a list of polys |
[in] | factors2 | a list of polys |
[in] | factors3 | a list of polys |
[in] | swap1 | indicates the need to swap |
[in] | swap2 | indicates the need to swap |
[in] | N | a map |
Definition at line 70 of file facFqBivarUtil.cc.
void appendTestMapDown | ( | CFList & | factors, |
const CanonicalForm & | f, | ||
const ExtensionInfo & | info, | ||
CFList & | source, | ||
CFList & | dest | ||
) |
test if g is in a subfield of the current field, if so map it down and append it to factors
[in,out] | factors | a list of polys |
[in] | f | a poly |
[in] | info | information about extension |
[in,out] | source |
[in,out] | dest |
Definition at line 223 of file facFqBivarUtil.cc.
int * computeBounds | ( | const CanonicalForm & | F, |
int & | n, | ||
bool & | isIrreducible | ||
) |
compute bounds for logarithmic derivative as described in K. Belabas, M. van Hoeij, J. Klüners, and A. Steel, Factoring polynomials over global fields
[in] | F | compressed bivariate polynomial |
[in,out] | n | length of output |
[in,out] | isIrreducible | check if poly is irreducible |
Definition at line 768 of file facFqBivarUtil.cc.
int * computeBoundsWrtDiffMainvar | ( | const CanonicalForm & | F, |
int & | n, | ||
bool & | isIrreducible | ||
) |
as above just wrt to the other variable
[in] | F | compressed bivariate polynomial |
[in,out] | n | length of output |
[in,out] | isIrreducible | check if poly is irreducible |
Definition at line 922 of file facFqBivarUtil.cc.
write elements of list into an array
[in] | list | a list of polys |
Definition at line 364 of file facFqBivarUtil.cc.
as above
[in,out] | factors | a list of factors |
[in] | N | a map |
Definition at line 63 of file facFqBivarUtil.cc.
as above
[in,out] | factors | a list of factors |
[in] | N | a map |
Definition at line 57 of file facFqBivarUtil.cc.
decompress a list of polys factors using the map N
[in,out] | factors | a list of polys |
[in] | N | a map |
Definition at line 51 of file facFqBivarUtil.cc.
|
inlinestatic |
Definition at line 139 of file facFqBivarUtil.cc.
CFArray getCoeffs | ( | const CanonicalForm & | F, |
const int | k | ||
) |
extract coefficients of for where is a variable of level 1
[in] | F | compressed bivariate poly over F_p |
[in] | k | some int |
Definition at line 599 of file facFqBivarUtil.cc.
extract coefficients of for where is a variable of level 1
[in] | F | compressed bivariate poly over F_p(alpha) |
[in] | k | some int |
[in] | alpha | algebraic variable |
Definition at line 622 of file facFqBivarUtil.cc.
CFArray getCoeffs | ( | const CanonicalForm & | F, |
const int | k, | ||
const int | l, | ||
const int | degMipo, | ||
const Variable & | alpha, | ||
const CanonicalForm & | evaluation, | ||
const mat_zz_p & | M | ||
) |
extract coefficients of for where is a variable of level 1
[in] | G | compressed bivariate poly |
[in] | k | some int |
[in] | l | precision |
[in] | degMipo | degree of minimal poly |
[in] | alpha | algebraic variable |
[in] | evaluation | evaluation point |
[in] | M | bases change matrix |
Definition at line 663 of file facFqBivarUtil.cc.
CFArray getCoeffs | ( | const CanonicalForm & | F, |
const int | k, | ||
const int | l, | ||
const int | degMipo, | ||
const Variable & | alpha, | ||
const CanonicalForm & | evaluation, | ||
const nmod_mat_t | M | ||
) |
extract coefficients of for where is a variable of level 1
[in] | G | compressed bivariate poly |
[in] | k | some int |
[in] | l | precision |
[in] | degMipo | degree of minimal poly |
[in] | alpha | algebraic variable |
[in] | evaluation | evaluation point |
[in] | M | bases change matrix |
Definition at line 705 of file facFqBivarUtil.cc.
|
inlinestatic |
Definition at line 111 of file facFqBivarUtil.cc.
update index
[in,out] | index | an array encoding a subset of size subsetSize |
[in] | subsetSize | size of the subset |
[in] | setSize | size of the given set |
[in,out] | noSubset | if there is no subset we have not yet considered noSubset is true |
Definition at line 373 of file facFqBivarUtil.cc.
bool isInExtension | ( | const CanonicalForm & | F, |
const CanonicalForm & | gamma, | ||
const int | k, | ||
const CanonicalForm & | delta, | ||
CFList & | source, | ||
CFList & | dest | ||
) |
tests if F is not contained in a subfield defined by gamma (Fq case) or k (GF case)
[in] | F | a poly over F_p (alpha)=Fq or GF(p^l) |
[in] | gamma | a primitive element defining a subfield of Fq if we are not over some GF |
k | some int k such that k divides l if we are not over some Fq | |
[in] | delta | image of gamma |
[in,out] | source | list of preimages |
[in,out] | dest | list of images |
Definition at line 184 of file facFqBivarUtil.cc.
CFArray logarithmicDerivative | ( | const CanonicalForm & | F, |
const CanonicalForm & | G, | ||
int | l, | ||
CanonicalForm & | Q | ||
) |
compute the coefficients of the logarithmic derivative of G mod Variable (2)^l over Fq
[in] | F | a bivariate poly |
[in] | G | a factor of F |
[in] | l | lifting precision |
[in,out] | Q | F/G |
Definition at line 459 of file facFqBivarUtil.cc.
CFArray logarithmicDerivative | ( | const CanonicalForm & | F, |
const CanonicalForm & | G, | ||
int | l, | ||
int | oldL, | ||
const CanonicalForm & | oldQ, | ||
CanonicalForm & | Q | ||
) |
compute the coefficients of the logarithmic derivative of G mod Variable (2)^l over Fq with oldQ= F/G mod Variable (2)^oldL
[in] | F | bivariate poly truncated at Variable(2)^l |
[in] | G | a factor of F |
[in] | l | lifting precision |
[in] | oldL | old precision |
[in] | oldQ | F/G mod Variable(2)^oldL |
[in,out] | Q | F/G |
Definition at line 501 of file facFqBivarUtil.cc.
CanonicalForm mapDown | ( | const CanonicalForm & | F, |
const ExtensionInfo & | info, | ||
CFList & | source, | ||
CFList & | dest | ||
) |
map a poly into a subfield of the current field, no testing is performed!
[in] | F | a poly |
[in] | info | information about the sub- and current field |
[in,out] | source | in case we are over some F_p (alpha) and want to map down into F_p (beta) source contains powers of the primitive element of F_p (alpha) |
[in,out] | dest | as source but contains the corresponding powers of the primitive element of F_p (beta) |
Definition at line 206 of file facFqBivarUtil.cc.
CFFList multiplicity | ( | CanonicalForm & | F, |
const CFList & | factors | ||
) |
determine multiplicity of the factors
[in] | F | a poly |
[in] | factors | a list of factors of F |
Definition at line 436 of file facFqBivarUtil.cc.
void normalize | ( | CFFList & | factors | ) |
as above
[in,out] | factors | a list of factors |
Definition at line 297 of file facFqBivarUtil.cc.
void normalize | ( | CFList & | factors | ) |
normalize factors, i.e. make factors monic
[in,out] | factors | a list of polys |
Definition at line 286 of file facFqBivarUtil.cc.
int recSubstituteCheck | ( | const CanonicalForm & | F, |
const int | d | ||
) |
Definition at line 1205 of file facFqBivarUtil.cc.
reverse a substitution x^d->x
[in,out] | L | a list of polys, returns the given list with x replaced by x^d |
[in] | d | an integer > 0 |
[in] | x | a Variable |
Definition at line 1309 of file facFqBivarUtil.cc.
CanonicalForm reverseSubst | ( | const CanonicalForm & | F, |
const int | d, | ||
const Variable & | x | ||
) |
reverse a substitution x^d->x
[in] | F | a poly |
[in] | d | an integer > 0 |
[in] | x | a Variable |
Definition at line 1295 of file facFqBivarUtil.cc.
extract a subset given by index of size s from elements, if there is no subset we have not yet considered noSubset is set to true. index encodes the next subset, e.g. if s= 3, elements= {a,b,c,d}, index= {1, 2, 4, 0}, then subset= {a,c,d}. index is of size elements.size().
[in,out] | index | an array encoding the next subset |
[in] | s | size of the subset |
[in] | elements | an array of polys |
[in,out] | noSubset | if there is no subset we have not yet considered noSubset is true |
Definition at line 309 of file facFqBivarUtil.cc.
compute the sum of degrees in Variable(1) of elements in S
[in] | S | a list of polys |
Definition at line 428 of file facFqBivarUtil.cc.
void subst | ( | const CanonicalForm & | F, |
CanonicalForm & | A, | ||
const int | d, | ||
const Variable & | x | ||
) |
substitute x^d by x in F
[in] | F | a polynomial |
[in,out] | A | returns F with x^d replaced by x |
d | d > 1 such that a substitution x^d -> x [in] is possible | |
[in] | x | a Variable |
Definition at line 1275 of file facFqBivarUtil.cc.
|
static |
Definition at line 1126 of file facFqBivarUtil.cc.
int substituteCheck | ( | const CanonicalForm & | F, |
const Variable & | x | ||
) |
check if a substitution x^n->x is possible
[in] | F | a polynomial |
[in] | x | some variable |
Definition at line 1089 of file facFqBivarUtil.cc.
checks if a substitution x^n->x is possible
[in] | L | a list of univariate polys |
Definition at line 1254 of file facFqBivarUtil.cc.
swap Variables in factors, then decompress factors
[in,out] | factors | a list of polys |
[in] | swap | indicates the need to swap |
[in] | N | a map |
Definition at line 97 of file facFqBivarUtil.cc.
TIMING_DEFINE_PRINT | ( | fac_log_deriv_div | ) | & |
write A into M starting at row startIndex
[in,out] | M | some matrix |
[in] | A | array of polys |
[in] | column | column in which A is written |
[in] | startIndex | row in which to start |
Definition at line 586 of file facFqBivarUtil.cc.