00001 00002 #include <basix/double.hpp> 00003 #include <basix/int.hpp> 00004 #include <basix/vector.hpp> 00005 #include <basix/port.hpp> 00006 #include <basix/literal.hpp> 00007 #include <numerix/integer.hpp> 00008 #include <numerix/modular.hpp> 00009 #include <numerix/modular_integer.hpp> 00010 #include <numerix/rational.hpp> 00011 #include <numerix/floating.hpp> 00012 #include <realroot/Interval_glue.hpp> 00013 #include <numerix/kernel.hpp> 00014 #include <realroot/polynomial.hpp> 00015 #include <realroot/polynomial_glue.hpp> 00016 #include <realroot/ring_sparse_glue.hpp> 00017 #include <shape/axel_glue.hpp> 00018 #include <shape/rational_curve_glue.hpp> 00019 #include <basix/alias.hpp> 00020 #include <basix/glue.hpp> 00021 00022 #define double_literal(x) as_double (as_string (x)) 00023 #define int_literal(x) as_int (as_string (x)) 00024 #define is_generic_literal is<literal> 00025 #define gen_literal_apply(f,v) gen (as<generic> (f), v) 00026 #define gen_literal_access(f,v) access (as<generic> (f), v) 00027 #define set_of_generic set_of(generic) 00028 #define set_of_double set_of(double) 00029 #define set_of_integer set_of(integer) 00030 #define set_of_rational set_of(rational) 00031 #define set_of_bigfloat set_of(bigfloat) 00032 #define set_of_complex_bigfloat set_of(complex_bigfloat) 00033 00034 namespace mmx { 00035 static interval<double> 00036 GLUE_1 (const double &arg_1) { 00037 return interval<double > (arg_1); 00038 } 00039 00040 static interval<double> 00041 GLUE_2 (const double &arg_1, const double &arg_2) { 00042 return interval_from_pair (arg_1, arg_2); 00043 } 00044 00045 static interval<double> 00046 GLUE_3 (const interval<double> &arg_1) { 00047 return -arg_1; 00048 } 00049 00050 static interval<double> 00051 GLUE_4 (const interval<double> &arg_1, const interval<double> &arg_2) { 00052 return arg_1 + arg_2; 00053 } 00054 00055 static interval<double> 00056 GLUE_5 (const interval<double> &arg_1, const interval<double> &arg_2) { 00057 return arg_1 - arg_2; 00058 } 00059 00060 static interval<double> 00061 GLUE_6 (const interval<double> &arg_1, const interval<double> &arg_2) { 00062 return arg_1 * arg_2; 00063 } 00064 00065 static interval<double> 00066 GLUE_7 (const double &arg_1, const interval<double> &arg_2) { 00067 return arg_1 + arg_2; 00068 } 00069 00070 static interval<double> 00071 GLUE_8 (const interval<double> &arg_1, const double &arg_2) { 00072 return arg_1 + arg_2; 00073 } 00074 00075 static interval<double> 00076 GLUE_9 (const double &arg_1, const interval<double> &arg_2) { 00077 return arg_1 - arg_2; 00078 } 00079 00080 static interval<double> 00081 GLUE_10 (const interval<double> &arg_1, const double &arg_2) { 00082 return arg_1 - arg_2; 00083 } 00084 00085 static interval<double> 00086 GLUE_11 (const double &arg_1, const interval<double> &arg_2) { 00087 return arg_1 * arg_2; 00088 } 00089 00090 static interval<double> 00091 GLUE_12 (const interval<double> &arg_1, const double &arg_2) { 00092 return arg_1 * arg_2; 00093 } 00094 00095 static interval<double> 00096 GLUE_13 (const interval<double> &arg_1, const interval<double> &arg_2) { 00097 return arg_1 / arg_2; 00098 } 00099 00100 static double 00101 GLUE_14 (const interval<double> &arg_1) { 00102 return interval_lower (arg_1); 00103 } 00104 00105 static double 00106 GLUE_15 (const interval<double> &arg_1) { 00107 return interval_upper (arg_1); 00108 } 00109 00110 static alias<shape_axel> 00111 GLUE_16 (const alias<shape_axel> &arg_1, const shape_rational_curve &arg_2) { 00112 return alias_write (arg_1, arg_2); 00113 } 00114 00115 static shape_rational_curve 00116 GLUE_17 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_3) { 00117 return create_rational_curve (arg_1, arg_2, arg_3); 00118 } 00119 00120 static shape_rational_curve 00121 GLUE_18 (const interval<double> &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_3, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_4) { 00122 return create_rational_curve (arg_1, arg_2, arg_3, arg_4); 00123 } 00124 00125 static shape_rational_curve 00126 GLUE_19 (const interval<double> &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_3, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_4, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_5) { 00127 return create_rational_curve (arg_1, arg_2, arg_3, arg_4, arg_5); 00128 } 00129 00130 static shape_rational_curve 00131 GLUE_20 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_3, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_4) { 00132 return create_rational_curve (arg_1, arg_2, arg_3, arg_4); 00133 } 00134 00135 void 00136 glue_rational_curve () { 00137 static bool done = false; 00138 if (done) return; 00139 done = true; 00140 call_glue (string ("glue_double")); 00141 call_glue (string ("glue_string")); 00142 call_glue (string ("glue_basix_vector_generic")); 00143 call_glue (string ("glue_interval")); 00144 call_glue (string ("glue_ring_sparse_rational")); 00145 call_glue (string ("glue_axel")); 00146 define_type<interval<double> > (gen (lit ("Interval"), lit ("Double"))); 00147 define ("interval", GLUE_1); 00148 define ("interval", GLUE_2); 00149 define ("-", GLUE_3); 00150 define ("+", GLUE_4); 00151 define ("-", GLUE_5); 00152 define ("*", GLUE_6); 00153 define ("+", GLUE_7); 00154 define ("+", GLUE_8); 00155 define ("-", GLUE_9); 00156 define ("-", GLUE_10); 00157 define ("*", GLUE_11); 00158 define ("*", GLUE_12); 00159 define ("/", GLUE_13); 00160 define ("lower", GLUE_14); 00161 define ("upper", GLUE_15); 00162 define_type<shape_rational_curve > (lit ("RationalCurve")); 00163 define ("<<", GLUE_16); 00164 define ("rational_curve", GLUE_17); 00165 define ("rational_curve", GLUE_18); 00166 define ("rational_curve", GLUE_19); 00167 define ("rational_curve", GLUE_20); 00168 } 00169 }