realroot_doc 0.1.1
|
00001 #ifndef realroot_sparse_dual_glue_hpp 00002 #define realroot_sparse_dual_glue_hpp 00003 #include <basix/mmx_syntax.hpp> 00004 #include <realroot/polynomial_dual.hpp> 00005 #define TMPL template <class C> 00006 #define RING ring<C, Dual,DegRevLex> 00007 #define RING_POL ring<C, Sparse,DegRevLex> 00008 #define Polynomial polynomial<C, with<Dual,DegRevLex> > 00009 //====================================================================== 00010 namespace mmx { 00011 TMPL unsigned hash(const RING& p){ return 1;} 00012 TMPL unsigned exact_hash(const RING& p){ return 1;} 00013 TMPL unsigned soft_hash(const RING& p){ return 1;} 00014 TMPL bool exact_eq (const RING& p, const RING& q){ return true;} 00015 TMPL bool exact_neq(const RING& p, const RING& q){ return false;} 00016 00017 TMPL bool operator ==(const RING& p, const RING& q){ return true;} 00018 TMPL bool operator !=(const RING& p, const RING& q){ return false;} 00019 00020 TMPL syntactic flatten(const RING& Rg) { 00021 syntactic CF= flatten(scalar_set<C>()); 00022 vector<syntactic> rg; rg <<CF; 00023 vector<syntactic> Lv; 00024 for(int i=0;i<Rg.nbvar();i++) 00025 Lv<<syntactic(string("d")<<RING_POL::var[i].data()); 00026 rg << apply(GEN_SQTUPLE,Lv); 00027 return apply (GEN_ACCESS, rg); 00028 } 00029 00030 TMPL RING dual_of(const RING_POL& rg) { 00031 return RING(); 00032 } 00033 00034 TMPL RING dual_of(const RING_POL& rg, const generic& x) { 00035 return RING(); 00036 } 00037 00038 TMPL syntactic flatten(const Polynomial& p) { 00039 typedef typename Polynomial::const_iterator iterator; 00040 syntactic r(0); 00041 for(iterator it=p.begin(); it!=p.end();it++) 00042 { 00043 syntactic m= flatten(it->coeff()); 00044 for(unsigned i=0;i<it->nbvar();i++) 00045 { 00046 syntactic v = string("d")<<RING_POL::var[i].data(); 00047 m = m*pow(v,syntactic(-(*it)[i])); 00048 } 00049 r+=m; 00050 } 00051 return r; 00052 } 00053 00054 TMPL Polynomial 00055 polynomial_dual(const RING& rg, const C& c) { 00056 return Polynomial(c); 00057 } 00058 00059 TMPL Polynomial 00060 polynomial_dual(const RING& rg, const C& c, int d, int v) { 00061 return Polynomial(c,v,d); 00062 } 00063 00064 TMPL Polynomial 00065 polynomial_dual(const RING& rg, const string& s) { 00066 return Polynomial(as_charp(s)); 00067 } 00068 TMPL Polynomial 00069 polynomial_dual(const RING& r, const generic& s) { 00070 return Polynomial(as_charp(as_mmx(s))); 00071 } 00072 00073 TMPL vector<generic> 00074 polynomial_dual_coefficients(const Polynomial& f, const int & v) { 00075 Seq<Polynomial> l = coefficients(f,v); 00076 vector<generic> r; 00077 for(unsigned i=0; i< l.size(); i++) 00078 r<< as<generic>(l[i]); 00079 return r; 00080 } 00081 00082 TMPL vector<generic> 00083 polynomial_dual_coefficients(const Polynomial& p) { 00084 typedef typename Polynomial::const_iterator const_iterator; 00085 vector<generic> r; 00086 for(const_iterator it=p.begin(); it!=p.end();it++) 00087 r<< as<generic>(it->coeff()); 00088 return r; 00089 } 00090 } //namespace mmx 00091 //====================================================================== 00092 #undef TMPL 00093 #undef RING 00094 #undef RING_POL 00095 #undef Polynomial 00096 #endif //realroot_sparse_dual_glue_hpp