multivariate< sparse_polynomial<rational> > mmx::as_mv_polynomial_modular | ( | const multivariate< sparse_polynomial< C > > & | f, | |
const modulus< C > & | p | |||
) | [inline] |
Definition at line 41 of file glue_bad.cpp.
vector< regular_chain< multivariate<sparse_polynomial<rational> > > > mmx::bad_rosenfeld_groebner | ( | const vector< multivariate< sparse_polynomial< rational > > > & | eqns, | |
const vector< multivariate_coordinate<> > & | indeps, | |||
const vector< multivariate_coordinate<> > & | deps | |||
) | [inline] |
Definition at line 54 of file bad.hpp.
References bad_rosenfeld_groebner().
00056 { 00057 return bad_rosenfeld_groebner (eqns, vec<Polynomial> (), indeps, deps); }
vector< regular_chain< multivariate< sparse_polynomial< rational > > > > bad_rosenfeld_groebner | ( | const vector< multivariate< sparse_polynomial< rational > > > & | eqns, | |
const vector< multivariate< sparse_polynomial< rational > > > & | ineqns, | |||
const vector< multivariate_coordinate<> > & | indeps, | |||
const vector< multivariate_coordinate<> > & | deps | |||
) |
Definition at line 29 of file bad.cpp.
References from_bap_polynomial_mpz(), Polynomial_Z, Regular_chain, and to_bap_polynomial_mpq().
Referenced by bad_rosenfeld_groebner(), GLUE_23(), and GLUE_24().
00032 { 00033 blad_session* blad = new blad_session (indeps, deps); 00034 vector<void*> indep_vars= blad -> bav_indeps; 00035 vector<void*> dep_vars= blad -> bav_deps; 00036 00037 bap_tableof_polynom_mpz* bad_eqns= 00038 (bap_tableof_polynom_mpz*) ba0_new_table (); 00039 bap_tableof_polynom_mpz* bad_ineqns= 00040 (bap_tableof_polynom_mpz*) ba0_new_table (); 00041 00042 bap_polynom_mpq* pol; 00043 bap_polynom_mpz* pol_mpz; 00044 mpz_t den; mpz_init (den); 00045 for (nat i= 0; i < N(eqns); i++) { 00046 pol= (bap_polynom_mpq*) to_bap_polynomial_mpq (blad, eqns[i]); 00047 pol_mpz= bap_new_polynom_mpz (); 00048 bap_numer_polynom_mpq (pol_mpz, den, pol); 00049 ba0_insert_table ((ba0_table*) bad_eqns, i, (void*) pol_mpz); 00050 } 00051 for (nat i= 0; i < N(ineqns); i++) { 00052 pol= (bap_polynom_mpq*) to_bap_polynomial_mpq (blad, ineqns[i]); 00053 pol_mpz= bap_new_polynom_mpz (); 00054 bap_numer_polynom_mpq (pol_mpz, den, pol); 00055 ba0_insert_table ((ba0_table*) bad_ineqns, i, (void*) pol_mpz); 00056 } 00057 00058 bad_intersectof_regchain* bad_sol= bad_new_intersectof_regchain (); 00059 ba0_sscanf2 ((char*) "intersectof_regchain ([], \ 00060 [differential, squarefree, coherent, primitive, autoreduced])", 00061 (char*) "%intersectof_regchain", bad_sol); 00062 bad_Rosenfeld_Groebner (bad_sol, bad_eqns, bad_ineqns, 00063 (bad_base_field*) 0, (bad_splitting_control*) 0); 00064 vector<Regular_chain> sol; 00065 for (nat i= 0; i < (bad_sol -> inter).size; i++) { 00066 bad_regchain* bad_chain= (bad_sol -> inter).tab[i]; 00067 vector<Polynomial> chain; 00068 for (nat j= 0; j < (bad_chain -> decision_system).size; j++) { 00069 Polynomial_Z p= from_bap_polynomial_mpz 00070 (blad, (bad_chain -> decision_system).tab[j]); 00071 chain << as<Polynomial> (p); 00072 } 00073 bad_attchain* bad_att= &(bad_chain -> attrib); 00074 vector<generic> att; 00075 if (bad_has_structural_property_attchain 00076 (bad_att, bad_differential_structural_property)) 00077 att << lit ("differential"); 00078 if (bad_has_structural_property_attchain 00079 (bad_att, bad_prime_structural_property)) 00080 att << lit ("prime"); 00081 if (bad_has_desired_property_attchain 00082 (bad_att, bad_coherence_desired_property)) 00083 att << lit ("coherence"); 00084 if (bad_has_desired_property_attchain 00085 (bad_att, bad_autoreduced_desired_property)) 00086 att << lit ("autoreduced"); 00087 if (bad_has_desired_property_attchain 00088 (bad_att, bad_squarefree_desired_property)) 00089 att << lit ("squarefree"); 00090 if (bad_has_desired_property_attchain 00091 (bad_att, bad_primitive_desired_property)) 00092 att << lit ("primitive"); 00093 if (bad_has_desired_property_attchain 00094 (bad_att, bad_normalized_desired_property)) 00095 att << lit ("normalized"); 00096 sol << Regular_chain (chain, att); 00097 } 00098 // delete blad; // FIXME 00099 return sol; 00100 }
static bav_symbol* mmx::bav_dependent_symbol | ( | const string & | s, | |
nat | i | |||
) | [static] |
Definition at line 33 of file blad_session.cpp.
Referenced by bav_dependent_variable().
00033 { 00034 bav_symbol* x= ::bav_new_symbol (); 00035 char* c= as_charp (s); 00036 x -> ident= ::ba0_strdup (c); 00037 free_charp (c); 00038 x -> type= ::bav_dependent_symbol; 00039 x -> index= i; 00040 //x -> derivation_index= -1; // FIXME ??? 00041 return x; }
static bav_variable* mmx::bav_dependent_variable | ( | const string & | s, | |
nat | i, | |||
nat | r | |||
) | [static] |
Definition at line 52 of file blad_session.cpp.
References bav_dependent_symbol().
Referenced by blad_session::blad_session().
00052 { 00053 bav_variable* x= ::bav_new_variable (); 00054 x -> root= bav_dependent_symbol (s, i); 00055 x -> index= i; 00056 ba0_insert_table ((ba0_table*) &(x -> number), 0, (void*) 2); 00057 for (nat k= 0; k < r; k++) 00058 ba0_insert_table ((ba0_table*) &(x -> order), k, (void*) 0); 00059 return x; }
static bav_symbol* mmx::bav_independent_symbol | ( | const string & | s, | |
nat | i, | |||
nat | j | |||
) | [static] |
Definition at line 22 of file blad_session.cpp.
Referenced by bav_independent_variable().
00022 { 00023 bav_symbol* x= ::bav_new_symbol (); 00024 char* c= as_charp (s); 00025 x -> ident= ::ba0_strdup (c); 00026 free_charp (c); 00027 x -> type= ::bav_independent_symbol; 00028 x -> index= i; 00029 x -> derivation_index= j; 00030 return x; }
static bav_variable* mmx::bav_independent_variable | ( | const string & | s, | |
nat | i, | |||
nat | j | |||
) | [static] |
Definition at line 44 of file blad_session.cpp.
References bav_independent_symbol().
Referenced by blad_session::blad_session().
00044 { 00045 bav_variable* x= ::bav_new_variable (); 00046 x -> root= bav_independent_symbol (s, i, j); 00047 x -> index= i; 00048 ba0_insert_table ((ba0_table*) &(x -> number), 0, (void*) 2); 00049 return x; }
string mmx::blad_get_version | ( | ) |
multivariate_coordinate mmx::derive | ( | const multivariate_coordinate<> & | u, | |
const multivariate_coordinate<> & | x, | |||
const multivariate_coordinate<> & | y | |||
) | [inline] |
multivariate_coordinate mmx::derive | ( | const multivariate_coordinate<> & | u, | |
const multivariate_coordinate<> & | x | |||
) | [inline] |
multivariate_coordinate derive | ( | const multivariate_coordinate<> & | u, | |
const vector< multivariate_coordinate<> > & | v | |||
) |
Definition at line 22 of file bav.cpp.
References Coordinate.
Referenced by derive(), from_bap_polynomial_mpz(), and GLUE_1().
00022 { 00023 if (N(v) == 0) return u; 00024 generic y= **u; 00025 vector<generic> g; 00026 if (is<compound> (y) && exact_eq (y[0], GEN_CACHED_DERIVE)) 00027 g= compound_to_vector (y); 00028 else 00029 g= vec (GEN_CACHED_DERIVE, y); 00030 for (nat i= 0; i < N(v); i++) 00031 g << **v[i]; 00032 return Coordinate (vector_to_compound (g)); }
multivariate< sparse_polynomial< integer > > from_bap_polynomial_mpz | ( | const blad_session * | _blad, | |
const void * | pol | |||
) |
Definition at line 84 of file bap.cpp.
References Coordinate, derive(), M, Monomial, Polynomial_Z, and Sparse_polynomial_Z.
Referenced by bad_rosenfeld_groebner().
00084 { 00085 vector<Coordinate> indeps= _blad -> indeps; 00086 vector<Coordinate> deps= _blad -> deps; 00087 nat r= N(indeps), s= N(deps); 00088 bav_tableof_variable* indets= (bav_tableof_variable*) ba0_new_table (); 00089 bav_R_mark_variables (false); 00090 bap_mark_indets_polynom_mpz ((bap_polynom_mpz*) pol); 00091 bav_R_marked_variables (indets, true); 00092 vector<Coordinate> coords; 00093 for (nat i= 0; i < indets -> size; i++) { 00094 bav_variable* aux= indets -> tab[i]; 00095 nat k= aux -> root -> index; 00096 VERIFY (k >= r && k < N(deps) + r, "index out of range"); 00097 Coordinate coord= deps [k - r]; 00098 vector<Coordinate> ders; 00099 for (nat j= 0; j < r; j++) 00100 ders= append (ders, fill (indeps[j], (aux -> order).tab[j])); 00101 coords << derive (coord, ders); 00102 } 00103 struct bap_itermon_mpz iter;; 00104 bap_begin_itermon_mpz (&iter, (bap_polynom_mpz*) pol); 00105 bav_term* term= bav_new_term (); 00106 vector<integer> coeffs; 00107 vector<Monomial> monoms; 00108 while (! bap_outof_itermon_mpz (&iter)) { 00109 integer cf; 00110 mpz_set (*cf, *bap_coeff_itermon_mpz (&iter)); 00111 coeffs << cf; 00112 bap_term_itermon_mpz (term, &iter); 00113 M monom; 00114 for (nat k= 0; k < N(coords); k++) 00115 monom << bav_degree_term (term, indets -> tab[k]); 00116 monoms << Monomial (monom); 00117 00118 bap_next_itermon_mpz (&iter); 00119 } 00120 bap_close_itermon_mpz (&iter); 00121 Sparse_polynomial_Z spol (coeffs, monoms); 00122 return Polynomial_Z (coords, spol); }
static multivariate_coordinate mmx::GLUE_1 | ( | const multivariate_coordinate<> & | arg_1, | |
const tuple< multivariate_coordinate<> > & | arg_2 | |||
) | [static] |
Definition at line 58 of file glue_bad.cpp.
References derive().
00058 { 00059 return derive (arg_1, as_vector (arg_2)); 00060 }
static vector<regular_chain<multivariate<sparse_polynomial< rational > > > > mmx::GLUE_10 | ( | const vector< regular_chain< multivariate< sparse_polynomial< rational > > > > & | arg_1, | |
const int & | arg_2, | |||
const int & | arg_3 | |||
) | [static] |
Definition at line 103 of file glue_bad.cpp.
static vector<regular_chain<multivariate<sparse_polynomial< rational > > > > mmx::GLUE_11 | ( | const vector< regular_chain< multivariate< sparse_polynomial< rational > > > > & | arg_1 | ) | [static] |
Definition at line 108 of file glue_bad.cpp.
static vector<regular_chain<multivariate<sparse_polynomial< rational > > > > mmx::GLUE_12 | ( | const vector< regular_chain< multivariate< sparse_polynomial< rational > > > > & | arg_1, | |
const vector< regular_chain< multivariate< sparse_polynomial< rational > > > > & | arg_2 | |||
) | [static] |
Definition at line 113 of file glue_bad.cpp.
static alias<vector<regular_chain<multivariate<sparse_polynomial< rational > > > > > mmx::GLUE_13 | ( | const alias< vector< regular_chain< multivariate< sparse_polynomial< rational > > > > > & | arg_1, | |
const vector< regular_chain< multivariate< sparse_polynomial< rational > > > > & | arg_2 | |||
) | [static] |
Definition at line 118 of file glue_bad.cpp.
static vector<regular_chain<multivariate<sparse_polynomial< rational > > > > mmx::GLUE_14 | ( | const regular_chain< multivariate< sparse_polynomial< rational > > > & | arg_1, | |
const vector< regular_chain< multivariate< sparse_polynomial< rational > > > > & | arg_2 | |||
) | [static] |
Definition at line 123 of file glue_bad.cpp.
static regular_chain<multivariate<sparse_polynomial< rational > > > mmx::GLUE_15 | ( | const vector< regular_chain< multivariate< sparse_polynomial< rational > > > > & | arg_1 | ) | [static] |
Definition at line 128 of file glue_bad.cpp.
static vector<regular_chain<multivariate<sparse_polynomial< rational > > > > mmx::GLUE_16 | ( | const vector< regular_chain< multivariate< sparse_polynomial< rational > > > > & | arg_1 | ) | [static] |
Definition at line 133 of file glue_bad.cpp.
static bool mmx::GLUE_17 | ( | const vector< regular_chain< multivariate< sparse_polynomial< rational > > > > & | arg_1 | ) | [static] |
Definition at line 138 of file glue_bad.cpp.
static bool mmx::GLUE_18 | ( | const vector< regular_chain< multivariate< sparse_polynomial< rational > > > > & | arg_1 | ) | [static] |
Definition at line 143 of file glue_bad.cpp.
static vector<regular_chain<multivariate<sparse_polynomial< rational > > > > mmx::GLUE_19 | ( | const vector< regular_chain< multivariate< sparse_polynomial< rational > > > > & | arg_1, | |
const regular_chain< multivariate< sparse_polynomial< rational > > > & | arg_2 | |||
) | [static] |
Definition at line 148 of file glue_bad.cpp.
static vector<multivariate<sparse_polynomial< rational > > > mmx::GLUE_2 | ( | const regular_chain< multivariate< sparse_polynomial< rational > > > & | arg_1 | ) | [static] |
Definition at line 63 of file glue_bad.cpp.
References mmx_regular_chain_decision_system().
00063 { 00064 return mmx_regular_chain_decision_system (arg_1); 00065 }
static int mmx::GLUE_20 | ( | const vector< regular_chain< multivariate< sparse_polynomial< rational > > > > & | arg_1, | |
const regular_chain< multivariate< sparse_polynomial< rational > > > & | arg_2 | |||
) | [static] |
Definition at line 153 of file glue_bad.cpp.
static bool mmx::GLUE_21 | ( | const vector< regular_chain< multivariate< sparse_polynomial< rational > > > > & | arg_1, | |
const regular_chain< multivariate< sparse_polynomial< rational > > > & | arg_2 | |||
) | [static] |
Definition at line 158 of file glue_bad.cpp.
static vector<generic> mmx::GLUE_22 | ( | const vector< regular_chain< multivariate< sparse_polynomial< rational > > > > & | arg_1 | ) | [static] |
Definition at line 163 of file glue_bad.cpp.
static vector<regular_chain<multivariate<sparse_polynomial< rational > > > > mmx::GLUE_23 | ( | const vector< multivariate< sparse_polynomial< rational > > > & | arg_1, | |
const vector< multivariate< sparse_polynomial< rational > > > & | arg_2, | |||
const vector< multivariate_coordinate<> > & | arg_3, | |||
const vector< multivariate_coordinate<> > & | arg_4 | |||
) | [static] |
Definition at line 168 of file glue_bad.cpp.
References bad_rosenfeld_groebner().
00168 { 00169 return bad_rosenfeld_groebner (arg_1, arg_2, arg_3, arg_4); 00170 }
static vector<regular_chain<multivariate<sparse_polynomial< rational > > > > mmx::GLUE_24 | ( | const vector< multivariate< sparse_polynomial< rational > > > & | arg_1, | |
const vector< multivariate_coordinate<> > & | arg_2, | |||
const vector< multivariate_coordinate<> > & | arg_3 | |||
) | [static] |
Definition at line 173 of file glue_bad.cpp.
References bad_rosenfeld_groebner().
00173 { 00174 return bad_rosenfeld_groebner (arg_1, arg_2, arg_3); 00175 }
static vector<generic> mmx::GLUE_3 | ( | const regular_chain< multivariate< sparse_polynomial< rational > > > & | arg_1 | ) | [static] |
Definition at line 68 of file glue_bad.cpp.
References mmx_regular_chain_attrib().
00068 { 00069 return mmx_regular_chain_attrib (arg_1); 00070 }
static vector<regular_chain<multivariate<sparse_polynomial< rational > > > > mmx::GLUE_4 | ( | const tuple< regular_chain< multivariate< sparse_polynomial< rational > > > > & | arg_1 | ) | [static] |
Definition at line 73 of file glue_bad.cpp.
static vector<regular_chain<multivariate<sparse_polynomial< rational > > > > mmx::GLUE_5 | ( | const tuple< regular_chain< multivariate< sparse_polynomial< rational > > > > & | arg_1 | ) | [static] |
Definition at line 78 of file glue_bad.cpp.
static iterator<generic> mmx::GLUE_6 | ( | const vector< regular_chain< multivariate< sparse_polynomial< rational > > > > & | arg_1 | ) | [static] |
Definition at line 83 of file glue_bad.cpp.
static int mmx::GLUE_7 | ( | const vector< regular_chain< multivariate< sparse_polynomial< rational > > > > & | arg_1 | ) | [static] |
Definition at line 88 of file glue_bad.cpp.
static regular_chain<multivariate<sparse_polynomial< rational > > > mmx::GLUE_8 | ( | const vector< regular_chain< multivariate< sparse_polynomial< rational > > > > & | arg_1, | |
const int & | arg_2 | |||
) | [static] |
Definition at line 93 of file glue_bad.cpp.
static alias<regular_chain<multivariate<sparse_polynomial< rational > > > > mmx::GLUE_9 | ( | const alias< vector< regular_chain< multivariate< sparse_polynomial< rational > > > > > & | arg_1, | |
const int & | arg_2 | |||
) | [static] |
Definition at line 98 of file glue_bad.cpp.
void glue_bad | ( | ) |
Referenced by glue_mblad().
void mmx::glue_mblad | ( | ) |
Definition at line 9 of file glue_mblad.cpp.
References glue_bad().
00009 { 00010 static bool done = false; 00011 if (done) return; 00012 done = true; 00013 register_glue (string ("glue_bad"), (& (glue_bad))); 00014 register_glue (string ("glue_mblad"), (& (glue_mblad))); 00015 dl_link ("multimix"); 00016 glue_bad (); 00017 }
void * to_bap_polynomial_mpq | ( | const blad_session * | _blad, | |
const multivariate< sparse_polynomial< rational > > & | eqn | |||
) |
Definition at line 28 of file bap.cpp.
References Coordinate, Coordinates, and M.
Referenced by bad_rosenfeld_groebner().
00028 { 00029 vector<Coordinate> indeps= _blad -> indeps; 00030 vector<Coordinate> deps= _blad -> deps; 00031 vector<void*> bav_indeps= _blad -> bav_indeps; 00032 vector<void*> bav_deps= _blad -> bav_deps; 00033 Coordinates crds= eqn.coords; 00034 nat n= N(crds), j; 00035 00036 vector<bav_variable*> eqn_vars; 00037 for (nat i= 0; i < n; i++) { 00038 if ((j= find (indeps, crds[i])) < N(indeps)) 00039 eqn_vars << (bav_variable*) bav_indeps[j]; 00040 else if ((j= find (deps, crds[i])) < N(deps)) 00041 eqn_vars << (bav_variable*) bav_deps[j]; 00042 else { 00043 ASSERT (is<compound> (**crds[i]), "unexpected variable"); 00044 vector<generic> v= compound_to_vector (**crds[i]); 00045 ASSERT (v[0] == GEN_CACHED_DERIVE, "unexpected variable"); 00046 j= find (deps, Coordinate (v[1])); 00047 ASSERT (j < N(deps), "unexpected dependent variable"); 00048 bav_variable* u= (bav_variable*) bav_deps[j]; 00049 for (nat k= 2; k < N(v); k++) { 00050 j= find (indeps, Coordinate (v[k])); 00051 ASSERT (j < N(indeps), "unexpected independent variable"); 00052 u= bav_R_derivative (u, ((bav_variable* ) bav_indeps[j]) -> root); 00053 } 00054 eqn_vars << u; 00055 } 00056 } 00057 00058 bap_polynom_mpq* pol; 00059 bap_polynom_mpq* acc= bap_new_polynom_mpq (); 00060 bap_polynom_mpq* aux= bap_new_polynom_mpq (); 00061 bav_term* term; 00062 bav_term* term_acc= bav_new_term (); 00063 bav_term* term_aux= bav_new_term (); 00064 00065 pol= bap_new_polynom_mpq (); 00066 for (nat i= 0; i < N(eqn); i++) { 00067 rational c= get_coefficient (eqn, i); 00068 M m= *get_monomial (eqn.rep, i); 00069 term= bav_new_term (); 00070 for (nat j= 0; j < N(m); j++) { 00071 nat e= m[j]; 00072 bav_set_term_variable (term_aux, eqn_vars[j], m[j]); 00073 bav_mul_term (term_acc, term, term_aux); 00074 bav_set_term (term, term_acc); 00075 } 00076 mpq_t x; mpq_init (x); mpq_set (x, *c); 00077 bap_set_polynom_monom_mpq (aux, x, term); 00078 bap_add_polynom_mpq (acc, pol, aux); 00079 bap_set_polynom_mpq (pol, acc); 00080 } 00081 return (void*) pol; }