realroot_doc 0.1.1
|
00001 #ifndef realroot_tensor_monomials_glue_hpp 00002 #define realroot_tensor_monomials_glue_hpp 00003 //==================================================================== 00004 #include <basix/mmx_syntax.hpp> 00005 #include <numerix/kernel.hpp> 00006 #include <realroot/Seq.hpp> 00007 #include <realroot/declare_glue.hpp> 00008 #include <realroot/polynomial_tensor.hpp> 00009 00010 #define TMPL template<class C> 00011 #define RING ring<C, MonomialTensor > 00012 #define POLYNOMIAL polynomial<C, with<MonomialTensor> > 00013 //====================================================================== 00014 namespace mmx { 00015 DECLARE_CLASS(MonomialTensor,"MonomialTensor") 00016 00017 TMPL unsigned hash(const RING& p){ return 1;} 00018 TMPL unsigned exact_hash(const RING& p){ return 1;} 00019 TMPL unsigned soft_hash(const RING& p){ return 1;} 00020 00021 TMPL bool exact_eq(const RING& p, const RING& q){ return true;} 00022 TMPL bool exact_neq(const RING& p, const RING& q){ return false;} 00023 00024 TMPL bool operator ==(const RING& p, const RING& q){ return true;} 00025 TMPL bool operator !=(const RING& p, const RING& q){ return false;} 00026 00027 TMPL syntactic flatten(const RING& rg) { 00028 syntactic CF= flatten(scalar_set<C>()); 00029 vector<syntactic> Lv; Lv <<CF; 00030 for(int i=0;i<rg.nbvar();i++) { 00031 Lv<<syntactic(RING::var[i].data()); 00032 } 00033 return apply (GEN_ACCESS, Lv); 00034 } 00035 00036 TMPL RING 00037 ring_tensor_string(const scalar_set<C>& rg, const vector<string>& s) { 00038 string v; 00039 for(nat i=0;i<N(s);i++) v <<" "<<s[i]; 00040 return RING(as_charp(v)); 00041 } 00042 00043 TMPL RING ring_tensor_of(const ring<C, Sparse, DegRevLex> & r) { 00044 typedef ring<C, Sparse, DegRevLex> SparseRing; 00045 std::string v; 00046 for(int i=0; i<r.nbvar(); i++) { 00047 v +=SparseRing::var[i]; 00048 if(i<r.nbvar()-1) v +=" "; 00049 } 00050 return RING(v.data());; 00051 } 00052 00053 00054 00055 TMPL RING 00056 ring_tensor_generic(const scalar_set<C>& rg, const MonomialTensor& b, 00057 const vector<generic>& s) { 00058 string v; 00059 for(nat i=0;i<N(s);i++) v <<" "<<as_mmx(s[i]); 00060 return RING(as_charp(v)); 00061 } 00062 00063 TMPL RING ring_tensor_extend_generic(const RING& R, const vector<generic>& s) { 00064 int nv= RING::nbvar(); 00065 for(nat j=0;j<N(s);j++) 00066 R[nv+j] = POLYNOMIAL(as_charp(as_mmx(s[j]))); 00067 return R; 00068 } 00069 00070 TMPL syntactic flatten(const POLYNOMIAL& p) { 00071 typedef typename POLYNOMIAL::const_iterator iterator; 00072 typedef typename POLYNOMIAL::Ring Ring; 00073 syntactic r(0); 00074 print_flatten(r,p.rep(),Ring::vars()); 00075 return r; 00076 } 00077 00078 TMPL POLYNOMIAL 00079 polynomial_tensor(const RING& r, const C& c) { 00080 return POLYNOMIAL(c); 00081 } 00082 00083 TMPL POLYNOMIAL 00084 polynomial_tensor(const RING& r, const C& c, const int& d, const int& v) { 00085 return POLYNOMIAL(c,d,v); 00086 } 00087 00088 TMPL POLYNOMIAL 00089 polynomial_tensor(const RING& r, const string& s) { 00090 return POLYNOMIAL(as_charp(s)); 00091 } 00092 00093 TMPL POLYNOMIAL 00094 polynomial_tensor(const RING& r, const generic& s) { 00095 return POLYNOMIAL(as_charp(as_mmx(s))); 00096 } 00097 00098 TMPL POLYNOMIAL 00099 polynomial_tensor_of(const polynomial<C, with<Sparse, DegRevLex> > & f) { 00100 POLYNOMIAL r; 00101 convert(r.rep(), f.rep()); 00102 return r; 00103 } 00104 00105 TMPL polynomial<C, with<Sparse, DegRevLex> > 00106 polynomial_sparse_of(const POLYNOMIAL & f) { 00107 POLYNOMIAL r; 00108 convert(r.rep(), f.rep()); 00109 return r; 00110 } 00111 00112 TMPL vector<generic> 00113 polynomial_tensor_coefficients(const POLYNOMIAL& f, const int & v) { 00114 Seq<POLYNOMIAL> l = coefficients(f,v); 00115 vector<generic> r; 00116 for(unsigned i=0; i< l.size(); i++) 00117 r<< as<generic>(l[i]); 00118 return r; 00119 } 00120 00121 TMPL vector<generic> 00122 polynomial_tensor_coefficients(const POLYNOMIAL& p) { 00123 vector<generic> r; 00124 for(unsigned i=0; i< p.size();i++) 00125 r<< as<generic>(p[i]); 00126 return r; 00127 } 00128 } //namespace mmx 00129 //====================================================================== 00130 #undef TMPL 00131 #undef RING 00132 #undef POLYNOMIAL 00133 #endif //realroot_polynomial_tensor_glue_hpp