27 using namespace mageec;
36 std::cerr <<
"LEARNER: Hello!" << std::endl;
45 std::string compiler_target)
47 return init (compiler_version +
"-" + compiler_target +
".db");
52 std::cerr <<
"LEARNER: New file" << std::endl;
57 std::cerr <<
"LEARNER: End file" << std::endl;
62 std::cerr <<
"LEARNER: Goodbye!" << std::endl;
73 std::vector<mageec_pass*> passes,
75 bool good __attribute__((unused)))
97 std::vector<mageec_feature*> features)
99 assert(pass != NULL &&
"Decision of null pass requested.");
104 unsigned long featurecount = features.size();
105 assert(featurecount > 0 &&
"Empty feature vector.");
106 const char *passname = pass->
name().c_str();
113 if (treedata == NULL)
116 snprintf (namebuf, 1024,
"/tmp/%s.tree", passname);
117 std::ofstream treefile(namebuf);
118 treefile << treedata;
122 snprintf (namebuf, 1024,
"/tmp/%s.names", passname);
123 std::ofstream namefile(namebuf);
124 namefile <<
"runpass." << std::endl;
125 for (
unsigned long i = 0; i < featurecount; i++)
126 namefile << features[i]->name() <<
": continuous." << std::endl;
127 namefile <<
"runpass: t,f" << std::endl;;
131 snprintf (namebuf, 1024,
"/tmp/%s.cases", passname);
132 std::ofstream casesfile(namebuf);
133 for (
unsigned int i = 0; i < featurecount; i++)
134 casesfile << features[i]->get_feature() <<
',';
135 casesfile <<
'?' << std::endl;
139 snprintf (namebuf, 1024,
"/tmp/%s", passname);
164 if (results.size() == 0)
168 unsigned long featurecount = results[0].featlist.size();
174 for (
unsigned long i = 0, size = known_passes.size(); i < size; i++)
178 std::string passnamestr = known_passes[i]->name();
179 const char *passname = passnamestr.c_str();
180 std::cerr <<
"Training for " << passname << std::endl;
183 snprintf (namebuf, 1024,
"/tmp/%s.names", passname);
184 std::ofstream namefile(namebuf);
185 namefile <<
"runpass." << std::endl;
186 for (
unsigned long j = 0; j < featurecount; j++)
187 namefile << results[0].featlist[j]->name()
188 <<
": continuous." << std::endl;
189 namefile <<
"runpass: t,f" << std::endl;;
193 snprintf (namebuf, 1024,
"/tmp/%s.data", passname);
194 std::ofstream testfile(namebuf);
195 for (
unsigned long j = 0, jsize = results.size(); j < jsize; j++)
197 for (
unsigned long k = 0; k < featurecount; k++)
198 testfile << results[j].featlist[k]->get_feature() <<
',';
200 for (
unsigned long k = 0, ksize = results[j].passlist.size(); k < ksize; k++)
201 if (results[j].passlist[k]->name() == passname)
207 testfile <<
't' << std::endl;
209 testfile <<
'f' << std::endl;
215 snprintf (namebuf, 1024,
"%s/c5.0 -f /tmp/%s", LIBEXECDIR, passname);
216 if (!(fpipe = static_cast<FILE *>(popen(namebuf,
"r"))))
217 std::cerr <<
"Error Training for " << passname << std::endl;
219 while (fgets(namebuf, 1024, fpipe))
224 snprintf (namebuf, 1024,
"/tmp/%s.tree", passname);
225 std::ifstream treefile(namebuf, std::ifstream::binary);
228 treefile.seekg (0, treefile.end);
229 long treelength = treefile.tellg();
230 treefile.seekg (0, treefile.beg);
231 char *treebuf =
new char[treelength];
232 treefile.read (treebuf, treelength);
252 int file_ml::init (std::string dbfilename __attribute__((unused)))
255 const char *pass_file = getenv(
"MAGEEC_EXECUTELIST");
256 if (pass_file == NULL)
257 pass_file =
static_cast<const char *
>(
"/tmp/mageec-executelist");
258 std::ifstream input_file(pass_file);
259 if (!input_file.is_open())
264 for (std::string line; getline(input_file, line); )
266 passlist.push_back(line);
273 int file_ml::init (std::string compiler_version __attribute__((unused)),
274 std::string compiler_target __attribute__((unused)))
281 std::vector<mageec_feature*> features
282 __attribute__((unused)))
284 unsigned long passcount = passlist.size();
285 std::string passname = pass->
name();
286 for (
unsigned long i = 0; i < passcount; i++)
287 if (passlist[i] == passname)